00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00017
00022
00028
00029
00030 #include <stdio.h>
00031 #include <stdlib.h>
00032 #include <string>
00033 #include <map>
00034 #include <utility>
00035 #include <sstream>
00036 #include <cmath>
00037
00038
00039 #include "midas.h"
00040
00041
00042 #include <TH1.h>
00043 #include <TDirectory.h>
00044
00045
00046 #include "TGlobalData.h"
00047 #include "TSetupData.h"
00048 #include "TPulseIsland.h"
00049
00050 using std::string;
00051 using std::map;
00052 using std::vector;
00053 using std::pair;
00054
00055
00056 INT MDQ_IslandCounter_init(void);
00057 INT MDQ_IslandCounter(EVENT_HEADER*, void*);
00058 INT MDQ_IslandCounter_eor(INT);
00059
00060 extern HNDLE hDB;
00061 extern TGlobalData* gData;
00062 extern TSetupData* gSetup;
00063
00064 extern TH1F* hDQ_TDCCheck_muSc;
00065
00066 map <std::string, TH1F*> DQ_IslandCounter_histograms_map;
00067 map <std::string, TH1F*> DQ_IslandCounter_histograms_normalised_map;
00068 map <std::string, TH1F*> DQ_IslandCounter_histograms_both_axes_normalised_map;
00069
00070 ANA_MODULE MDQ_IslandCounter_module =
00071 {
00072 "MDQ_IslandCounter",
00073 "Andrew Edmonds",
00074 MDQ_IslandCounter,
00075 NULL,
00076 MDQ_IslandCounter_eor,
00077 MDQ_IslandCounter_init,
00078 NULL,
00079 NULL,
00080 0,
00081 NULL,
00082 };
00083
00086 INT MDQ_IslandCounter_init()
00087 {
00088
00089 if (!gDirectory->Cd("DataQuality_LowLevel")) {
00090
00091 std::string dir_name("DataQuality_LowLevel/");
00092 gDirectory->mkdir(dir_name.c_str());
00093 gDirectory->Cd(dir_name.c_str());
00094 }
00095
00096
00097 std::map<std::string, std::string> bank_to_detector_map = gSetup->fBankToDetectorMap;
00098 for(std::map<std::string, std::string>::iterator mapIter = bank_to_detector_map.begin();
00099 mapIter != bank_to_detector_map.end(); mapIter++) {
00100
00101 std::string bankname = mapIter->first;
00102 std::string detname = gSetup->GetDetectorName(bankname);
00103
00104
00105 std::string histname = "hDQ_IslandCounter_" + detname + "_" + bankname;
00106 std::string histtitle = "Distribution of the number of islands per event in " + detname;
00107 TH1F* hDQ_Histogram = new TH1F(histname.c_str(), histtitle.c_str(), 3500, 0, 3500);
00108 hDQ_Histogram->GetXaxis()->SetTitle("Number of TPulseIslands");
00109 hDQ_Histogram->GetYaxis()->SetTitle("Number of Events");
00110 DQ_IslandCounter_histograms_map[bankname] = hDQ_Histogram;
00111
00112
00113 histname += "_normalised";
00114 histtitle += " (normalised)";
00115 TH1F* hDQ_Histogram_Normalised = new TH1F(histname.c_str(), histtitle.c_str(), 3500,0,3500);
00116 hDQ_Histogram_Normalised->GetXaxis()->SetTitle("Number of TPulseIslands");
00117 std::string yaxislabel = hDQ_Histogram->GetYaxis()->GetTitle();
00118 yaxislabel += " per TDC muSc Hit";
00119 hDQ_Histogram_Normalised->GetYaxis()->SetTitle(yaxislabel.c_str());
00120 DQ_IslandCounter_histograms_normalised_map[bankname] = hDQ_Histogram_Normalised;
00121
00122 histname += "_both_axes_normalised";
00123 histtitle += " (both axes normalised)";
00124 TH1F* hDQ_Histogram_Both_Axes_Normalised = new TH1F(histname.c_str(), histtitle.c_str(), 3500,0,0.0035);
00125 hDQ_Histogram_Both_Axes_Normalised->GetXaxis()->SetTitle("Number of TPulseIslands per muSc TDC Hit");
00126 yaxislabel = hDQ_Histogram->GetYaxis()->GetTitle();
00127 yaxislabel += " per TDC muSc Hit";
00128 hDQ_Histogram_Both_Axes_Normalised->GetYaxis()->SetTitle(yaxislabel.c_str());
00129 DQ_IslandCounter_histograms_both_axes_normalised_map[bankname] = hDQ_Histogram_Both_Axes_Normalised;
00130 }
00131
00132 gDirectory->Cd("/MidasHists/");
00133 return SUCCESS;
00134 }
00135
00138 INT MDQ_IslandCounter_eor(INT run_number) {
00139
00140
00141 typedef map<string, vector<TPulseIsland*> > TStringPulseIslandMap;
00142 typedef pair<string, vector<TPulseIsland*> > TStringPulseIslandPair;
00143 typedef map<string, vector<TPulseIsland*> >::iterator map_iterator;
00144
00145
00146
00147 TStringPulseIslandMap& pulse_islands_map =
00148 gData->fPulseIslandToChannelMap;
00149
00150
00151 for (map_iterator mapIter = pulse_islands_map.begin(); mapIter != pulse_islands_map.end(); ++mapIter) {
00152
00153 std::string bankname = mapIter->first;
00154 std::string detname = gSetup->GetDetectorName(bankname);
00155
00156
00157 if (DQ_IslandCounter_histograms_normalised_map.find(bankname) != DQ_IslandCounter_histograms_normalised_map.end()) {
00158
00159 TH1F* normalised_histogram = DQ_IslandCounter_histograms_normalised_map[bankname];
00160 normalised_histogram->Scale(1./hDQ_TDCCheck_muSc->GetEntries());
00161
00162
00163 TH1F* both_axes_normalised_histogram = DQ_IslandCounter_histograms_both_axes_normalised_map[bankname];
00164 for (int iBin = 1; iBin < normalised_histogram->GetNbinsX(); ++iBin) {
00165 double normalised_histogram_bin_content = normalised_histogram->GetBinContent(iBin);
00166 double normalised_histogram_bin_center = normalised_histogram->GetBinCenter(iBin);
00167 both_axes_normalised_histogram->Fill(normalised_histogram_bin_center / hDQ_TDCCheck_muSc->GetEntries(), normalised_histogram_bin_content);
00168 }
00169 }
00170 }
00171
00172 return SUCCESS;
00173 }
00174
00175
00178 INT MDQ_IslandCounter(EVENT_HEADER *pheader, void *pevent)
00179 {
00180
00181 int midas_event_number = pheader->serial_number;
00182
00183
00184 typedef map<string, vector<TPulseIsland*> > TStringPulseIslandMap;
00185 typedef pair<string, vector<TPulseIsland*> > TStringPulseIslandPair;
00186 typedef map<string, vector<TPulseIsland*> >::iterator map_iterator;
00187
00188
00189
00190 TStringPulseIslandMap& pulse_islands_map =
00191 gData->fPulseIslandToChannelMap;
00192
00193
00194 for (map_iterator mapIter = pulse_islands_map.begin(); mapIter != pulse_islands_map.end(); ++mapIter)
00195 {
00196 std::string bankname = mapIter->first;
00197 std::string detname = gSetup->GetDetectorName(bankname);
00198 std::vector<TPulseIsland*> thePulses = mapIter->second;
00199
00200
00201 if (DQ_IslandCounter_histograms_map.find(bankname) != DQ_IslandCounter_histograms_map.end()) {
00202 int n_pulse_islands = thePulses.size();
00203
00204 DQ_IslandCounter_histograms_map[bankname]->Fill(n_pulse_islands);
00205 DQ_IslandCounter_histograms_normalised_map[bankname]->Fill(n_pulse_islands);
00206 }
00207 }
00208 return SUCCESS;
00209 }
00210