00001 #include "PlotAmpVsMuScTDiff.h"
00002 #include "RegisterModule.inc"
00003 #include "TGlobalData.h"
00004 #include "SetupNavigator.h"
00005 #include "TSetupData.h"
00006 #include "ModulesOptions.h"
00007 #include "definitions.h"
00008 #include "TAnalysedPulse.h"
00009 #include <cmath>
00010 #include <stdexcept>
00011
00012 #include <TH2F.h>
00013 #include <debug_tools.h>
00014
00015 #include <iostream>
00016 using std::cout;
00017 using std::endl;
00018
00019 extern SourceAnalPulseMap gAnalysedPulseMap;
00020
00021 PlotAmpVsMuScTDiff::PlotAmpVsMuScTDiff(modules::options* opts):
00022 BaseModule("PlotAmpVsMuScTDiff",opts){
00023
00024 }
00025
00026 PlotAmpVsMuScTDiff::~PlotAmpVsMuScTDiff(){
00027 }
00028
00029 int PlotAmpVsMuScTDiff::BeforeFirstEntry(TGlobalData* gData,const TSetupData *setup){
00030
00031 IDs::source muSc(IDs::kMuSc,IDs::kAnySlowFast, "*", IDs::kAnyConfig);
00032 for (SourceAnalPulseMap::const_iterator i_source=gAnalysedPulseMap.begin();
00033 i_source!=gAnalysedPulseMap.end(); i_source++){
00034 if(i_source->first.matches(muSc)) fMuScSources.push_back(i_source->first);
00035 else fNotMuScSources.push_back(i_source->first);
00036 }
00037
00038 if(fMuScSources.empty()){
00039 cout<<"No muSc sources were found so we cannot make a TDiff plot to muSc"<<endl;
00040 return 1;
00041 }
00042 return 0;
00043 }
00044
00045 int PlotAmpVsMuScTDiff::ProcessEntry(TGlobalData* gData,const TSetupData *setup){
00046 Plots plots;
00047 AnalysedPulseList* not_muSc_pulses, *muSc_pulses;
00048
00049
00050 for(SourceVector::const_iterator i_not_muSc=fNotMuScSources.begin();
00051 i_not_muSc!=fNotMuScSources.end(); i_not_muSc++){
00052
00053
00054 not_muSc_pulses=&gAnalysedPulseMap[*i_not_muSc];
00055
00056
00057 for(SourceVector::const_iterator i_muSc=fMuScSources.begin();
00058 i_muSc!=fMuScSources.end(); i_muSc++){
00059
00060
00061 try{
00062 plots=GetHistogram(*i_not_muSc,*i_muSc);
00063 }catch(const std::bad_alloc& e){
00064 DEBUG_PREFIX<<" Cannot allocate new histograms."<<endl;
00065 throw e;
00066 }
00067
00068
00069 muSc_pulses=&gAnalysedPulseMap[*i_muSc];
00070
00071 for (AnalysedPulseList::const_iterator not_muSc = not_muSc_pulses->begin();
00072 not_muSc != not_muSc_pulses->end(); ++not_muSc) {
00073 for (AnalysedPulseList::const_iterator muSc = muSc_pulses->begin();
00074 muSc != muSc_pulses->end(); ++muSc) {
00075
00076
00077 double arrival_time = (*not_muSc)->GetTime();
00078 double muSc_time = (*muSc)->GetTime();
00079 double t_diff = arrival_time - muSc_time;
00080 double not_muSc_amp = (*not_muSc)->GetAmplitude();
00081
00082 plots.coarse->Fill(t_diff, not_muSc_amp);
00083 plots.fine->Fill(t_diff, not_muSc_amp);
00084
00085 }
00086 }
00087 }
00088 }
00089 return 0;
00090 }
00091
00092 int PlotAmpVsMuScTDiff::AfterLastEntry(TGlobalData* gData,const TSetupData *setup){
00093 return 0;
00094 }
00095
00096 PlotAmpVsMuScTDiff::Plots PlotAmpVsMuScTDiff::GetHistogram(const IDs::source& detector, const IDs::source& muSc){
00097 std::string keyname=detector.str()+ "-"+muSc.str();
00098
00099 if(fPlots.find(keyname)!=fPlots.end()){
00100 return fPlots[keyname];
00101 }
00102
00103
00104 std::string histname = "h" + keyname + "_AmpVsMuScTDiff_Coarse";
00105 std::string histtitle = "Amplitude vs time difference between " + detector.str() + " and " + muSc.str();
00106 std::string x_axis_title = "Time Difference (" + detector.str() + " - muSc) [ns]";
00107 std::string y_axis_title = "Amplitude from " + detector.str() + " [ADC Value]";
00108
00109
00110 int n_bits = TSetupData::Instance()->GetNBits(SetupNavigator::Instance()->GetBank(detector.Channel()));
00111 double max_adc_value = std::pow(2, n_bits);
00112
00113
00114 Plots plots;
00115
00116
00117 plots.coarse = new TH2F(histname.c_str(), histtitle.c_str(), 100,-50000,50000, 300,0,max_adc_value);
00118 plots.coarse->GetXaxis()->SetTitle(x_axis_title.c_str());
00119 plots.coarse->GetYaxis()->SetTitle(y_axis_title.c_str());
00120
00121
00122 histname = "h" + keyname + "_AmpVsMuScTDiff_Fine";
00123 plots.fine = new TH2F(histname.c_str(), histtitle.c_str(), 5000,-5000,20000, 300,0,max_adc_value);
00124 plots.fine->GetXaxis()->SetTitle(x_axis_title.c_str());
00125 plots.fine->GetYaxis()->SetTitle(y_axis_title.c_str());
00126
00127
00128 fPlots[keyname]=plots;
00129
00130
00131 return plots;
00132
00133 }
00134
00135 ALCAP_REGISTER_MODULE(PlotAmpVsMuScTDiff);