00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00017
00023
00024
00025 #include <stdio.h>
00026 #include <stdlib.h>
00027 #include <string>
00028 #include <map>
00029 #include <utility>
00030 #include <sstream>
00031 #include <cmath>
00032
00033
00034 #include "midas.h"
00035
00036
00037 #include <TH1.h>
00038 #include <TH2.h>
00039 #include <TDirectory.h>
00040
00041
00042 #include "TGlobalData.h"
00043 #include "TSetupData.h"
00044 #include "TPulseIsland.h"
00045
00046 using std::string;
00047 using std::map;
00048 using std::vector;
00049 using std::pair;
00050
00051
00052 INT MDQ_IslandLength_init(void);
00053 INT MDQ_IslandLength(EVENT_HEADER*, void*);
00054 INT MDQ_IslandLength_eor(INT);
00055
00056 extern HNDLE hDB;
00057 extern TGlobalData* gData;
00058 extern TSetupData* gSetup;
00059
00060 map <std::string, TH1F*> DQ_IslandLength_histograms_map;
00061 map <std::string, TH1F*> DQ_IslandLength_histograms_normalised_map;
00062
00063 extern TH1F* hDQ_TDCCheck_muSc;
00064
00065 ANA_MODULE MDQ_IslandLength_module =
00066 {
00067 "MDQ_IslandLength",
00068 "Nam Tran",
00069 MDQ_IslandLength,
00070 NULL,
00071 MDQ_IslandLength_eor,
00072 MDQ_IslandLength_init,
00073 NULL,
00074 NULL,
00075 0,
00076 NULL,
00077 };
00078
00081 INT MDQ_IslandLength_init()
00082 {
00083
00084 std::string dir_name("DataQuality_LowLevel/");
00085 if (!gDirectory->Cd(dir_name.c_str())) {
00086 gDirectory->mkdir(dir_name.c_str());
00087 gDirectory->Cd(dir_name.c_str());
00088 }
00089
00090
00091
00092 std::map<std::string, std::string> bank_to_detector_map = gSetup->fBankToDetectorMap;
00093 for(std::map<std::string, std::string>::iterator mapIter = bank_to_detector_map.begin();
00094 mapIter != bank_to_detector_map.end(); mapIter++) {
00095
00096 std::string bankname = mapIter->first;
00097 std::string detname = gSetup->GetDetectorName(bankname);
00098
00099
00100 std::string histname = "hDQ_IslandLength_" + detname + "_" + bankname;
00101 std::string histtitle = "Length of each TPulseIsland in " + detname;
00102 TH1F* hDQ_Histogram = new TH1F(histname.c_str(), histtitle.c_str(),
00103 10000, 0, 10000);
00104 hDQ_Histogram->GetXaxis()->SetTitle("Length [samples]");
00105 hDQ_Histogram->GetYaxis()->SetTitle("Number of Islands");
00106 DQ_IslandLength_histograms_map[bankname] = hDQ_Histogram;
00107
00108
00109 histname += "_normalised";
00110 histtitle += " (normalised)";
00111 TH1F* hDQ_Histogram_Normalised = new TH1F(histname.c_str(), histtitle.c_str(), 10000,0,10000);
00112 hDQ_Histogram_Normalised->GetXaxis()->SetTitle("Length [samples]");
00113 std::string yaxislabel = hDQ_Histogram->GetYaxis()->GetTitle();
00114 yaxislabel += " per TDC muSc Hit";
00115 hDQ_Histogram_Normalised->GetYaxis()->SetTitle(yaxislabel.c_str());
00116 DQ_IslandLength_histograms_normalised_map[bankname] = hDQ_Histogram_Normalised;
00117 }
00118
00119 gDirectory->Cd("/MidasHists/");
00120 return SUCCESS;
00121 }
00122
00125 INT MDQ_IslandLength_eor(INT run_number) {
00126
00127
00128 typedef map<string, vector<TPulseIsland*> > TStringPulseIslandMap;
00129 typedef pair<string, vector<TPulseIsland*> > TStringPulseIslandPair;
00130 typedef map<string, vector<TPulseIsland*> >::iterator map_iterator;
00131
00132
00133
00134 TStringPulseIslandMap& pulse_islands_map =
00135 gData->fPulseIslandToChannelMap;
00136
00137
00138 for (map_iterator mapIter = pulse_islands_map.begin(); mapIter != pulse_islands_map.end(); ++mapIter) {
00139
00140 std::string bankname = mapIter->first;
00141 std::string detname = gSetup->GetDetectorName(bankname);
00142
00143
00144 if (DQ_IslandLength_histograms_normalised_map.find(bankname) != DQ_IslandLength_histograms_normalised_map.end()) {
00145 DQ_IslandLength_histograms_normalised_map[bankname]->Scale(1./hDQ_TDCCheck_muSc->GetEntries());
00146 }
00147 }
00148
00149 return SUCCESS;
00150 }
00151
00152
00155 INT MDQ_IslandLength(EVENT_HEADER *pheader, void *pevent)
00156 {
00157
00158 int midas_event_number = pheader->serial_number;
00159
00160
00161 typedef map<string, vector<TPulseIsland*> > TStringPulseIslandMap;
00162 typedef pair<string, vector<TPulseIsland*> > TStringPulseIslandPair;
00163 typedef map<string, vector<TPulseIsland*> >::iterator map_iterator;
00164
00165
00166
00167 TStringPulseIslandMap& pulse_islands_map =
00168 gData->fPulseIslandToChannelMap;
00169
00170
00171 for (map_iterator mapIter = pulse_islands_map.begin();
00172 mapIter != pulse_islands_map.end(); ++mapIter)
00173 {
00174 std::string bankname = mapIter->first;
00175 std::string detname = gSetup->GetDetectorName(bankname);
00176 std::vector<TPulseIsland*> thePulses = mapIter->second;
00177
00178
00179 TH1F* hDQ_IslandLength = DQ_IslandLength_histograms_map[bankname];
00180 TH1F* hDQ_IslandLength_Norm = DQ_IslandLength_histograms_normalised_map[bankname];
00181
00182
00183 for (std::vector<TPulseIsland*>::iterator pulseIter = thePulses.begin();
00184 pulseIter != thePulses.end(); ++pulseIter) {
00185
00186
00187 if (DQ_IslandLength_histograms_map.find(bankname) != DQ_IslandLength_histograms_map.end())
00188 {
00189 const std::vector<int>& theSamples = (*pulseIter)->GetSamples();
00190 hDQ_IslandLength->Fill(theSamples.size());
00191 hDQ_IslandLength_Norm->Fill(theSamples.size());
00192 }
00193 }
00194 }
00195 return SUCCESS;
00196 }
00197