64{
68
71 bool weight_mc;
73
74 try {
75
76 JParser<> zap(
"Auxiliary program to merge JRunAnalyzer histograms.");
77
78 zap[
'f'] =
make_field(inputFile,
"input file (output from JRunAnalyzer).");
80 zap[
'w'] =
make_field(weight_mc,
"weight mc events");
82
83 zap(argc, argv);
84 }
85 catch(const exception &error) {
86 FATAL(error.what() << endl);
87 }
88
89 int min_run = numeric_limits<int>::max(), max_run = 0;
90
91 size_t min_date = numeric_limits<int>::max(), max_date = 0;
92
94
95 double total_mc_livetime = 0;
96 int run = 0;
97
98 for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
99
100 {
102 if(in.hasNext()){
103 runinfo = *in.next();
104 if(in.hasNext()){
105 FATAL(
"MULTIPLE RUN INFO");
106 }
107
108 int run_id = runinfo.
run_id;
109
110 if(run_id != run){
111
112 run = run_id;
113
115
116 } else {
117
119 }
120
121 } else {
122 FATAL(
"NO RUN INFO");
123 }
124 }
125
127
129
134 }
135 }
136
137 time_t tmin = min_date, tmax = max_date;
138
139 TTimeStamp date_min(tmin, 0);
140 TTimeStamp date_max(tmax, 0);
141
142 cout << "Minimum RUN: " << min_run << ", "; date_min.Print("s");
143 cout << "Maximum RUN: " << max_run << ", "; date_max.Print("s");
144
145 int xbins = (max_run - min_run) + 1;
146 string title = string("Data taken from: ") + date_min.AsString("s") + " - " + date_max.AsString("s");
147
148 TH2D* h_pmt_rate_distribution =
new TH2D(
"h_pmt_rate_distribution",
string(title +
"; RUN; PMT Rate Distribution [kHz]").c_str(), xbins, (
double) min_run-0.5, (
double) max_run+0.5,
JDAQRate::getN(),
JDAQRate::getData(1.0e-4));
149 TH2D* h_Trigger_bit_hit = new TH2D("h_Trigger_bit_hit", string(title + "; RUN; Hits trigger bit").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, NUMBER_OF_TRIGGER_BITS, -0.5, NUMBER_OF_TRIGGER_BITS - 0.5);
150 TH2D* h_Triggered_hits = new TH2D("h_Triggered_hits", string(title + "; RUN; Number of triggered hits").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 50, 0, 4);
152 TH2D* h_Triggered_hits_3dmuon = new TH2D("h_Triggered_hits_3dmuon", string(title + "; RUN; Number of triggered hits - JTRIGGER3DMUON").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 50, 0, 3);
154 TH2D* h_Snapshot_hits = new TH2D("h_Snapshot_hits", string(title + "; RUN; Number of snapshot hits").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 50, 0, 4);
156 TH2D* h_Triggered_over_Snapshot_hits = new TH2D("h_Triggered_over_Snapshot_hits", string(title + "; RUN; Triggered/Snapshot hits").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 100, 0, 0.5);
157 TH2D* h_Number_of_overlays = new TH2D("h_Number_of_overlays", string(title + ";RUN;Number of Overlays").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 1000, -0.5, 1000 - 0.5);
158 TH2D* h_pmt_distribution_triggered_hits = new TH2D("h_pmt_distribution_triggered_hits", string(title + ";RUN;Normalised PMT Distrib triggered hits (upper PMTs=[0-11])").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, NUMBER_OF_PMTS, -0.5 , NUMBER_OF_PMTS - 0.5);
159 TH2D* h_pmt_distribution_snapshot_hits = new TH2D("h_pmt_distribution_snapshot_hits", string(title + ";RUN; Normalised PMT Distrib snapshot hits (upper PMTs=[0-11])").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, NUMBER_OF_PMTS, -0.5 , NUMBER_OF_PMTS - 0.5);
160 TH2D* h_event_duration = new TH2D("h_event_duration", string(title + ";RUN;Event Duration [ns]").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 60, 1, 6);
162 TH2D* h_tres = new TH2D("h_tres", string(title + ";RUN;Time residuals [ns]").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 100, -50, 150);
163 TH2D* h_likelihood = new TH2D ("h_likelihood", string(title + ";RUN;Likelihood").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 100, -1000, 1000);
164 TH2D* h_beta0 = new TH2D("h_beta0", string(title + ";RUN;beta0").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 20, 0, 1);
165 TH2D* h_energy = new TH2D ("h_energy", string(title + ";RUN;Energy [GeV];").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 65, 0, 9);
167 TH2D* h_zenith = new TH2D("h_zenith", string(title + ";RUN;cosZenith").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 20, -1, 1);
168 TH2D* h_azimuth = new TH2D("h_azimuth", string(title + ";RUN;cosAzimuth").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 20, -1, 1);
169 TH2D* h_radial_position = new TH2D ("h_radial_position", string(title + ";RUN;Radial Position [m]").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 60, 0, 4.2);
171 TH2D* h_z_position = new TH2D ("h_z_position", string(title + ";RUN;Z Position [m]").c_str(), xbins, (double) min_run-0.5, (double) max_run+0.5, 50, 0, 3.2);
173
174 for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
175
176 DEBUG(
"Processing " << *i << endl) ;
177
178 {
180 if(in.hasNext()){
181 runinfo = *in.next();
182 if(in.hasNext()){
183 FATAL(
"MULTIPLE RUN INFO");
184 }
185 } else {
186 FATAL(
"NO RUN INFO");
187 }
188 }
189
190 TFile in(i->c_str(), "read");
191
192 cout << i->c_str() << endl;
193
195
196 TH1D* h1d_prd = new TH1D();
197 TH1D* h1d_thb = new TH1D();
198 TH1D* h1d_th = new TH1D();
199 TH1D* h1d_th3D = new TH1D();
200 TH1D* h1d_sh = new TH1D();
201 TH1D* h1d_tosh = new TH1D();
202 TH1D* h1d_noo = new TH1D();
203 TH1D* h1d_pdth = new TH1D();
204 TH1D* h1d_pdsh = new TH1D();
205 TH1D* h1d_ed = new TH1D();
206 TH1D* h1d_tr = new TH1D();
207 TH1D* h1d_lk = new TH1D();
208 TH1D* h1d_b0 = new TH1D();
209 TH1D* h1d_en = new TH1D();
210 TH1D* h1d_zn = new TH1D();
211 TH1D* h1d_az = new TH1D();
212 TH1D* h1d_rp = new TH1D();
213 TH1D* h1d_zp = new TH1D();
214
215 in.GetDirectory("Detector")->GetObject("h_pmt_rate_distribution", h1d_prd);
217
218 TDirectory* dir = in.GetDirectory("JDAQEvent");
219
220 dir->GetObject("h_Trigger_bit_hit", h1d_thb);
222
223 dir->GetObject("h_Triggered_hits", h1d_th);
225
226 dir->GetObject("h_Triggered_hits_3dmuon", h1d_th3D);
228
229 dir->GetObject("h_Snapshot_hits", h1d_sh);
231
232 dir->GetObject("h_Triggered_over_Snapshot_hits", h1d_tosh);
234
235 dir->GetObject("h_Number_of_overlays", h1d_noo);
237
238 dir->GetObject("h_pmt_distribution_triggered_hits", h1d_pdth);
240
241 dir->GetObject("h_pmt_distribution_snapshot_hits", h1d_pdsh);
243
244 dir->GetObject("h_event_duration", h1d_ed);
246
247 TDirectory* dir_r = in.GetDirectory("Reco");
248
249 dir_r->GetObject("h_tres", h1d_tr);
251
252 dir_r->GetObject("h_likelihood", h1d_lk);
254
255 dir_r->GetObject("h_beta0", h1d_b0);
257
258 dir_r->GetObject("h_energy", h1d_en);
260
261 dir_r->GetObject("h_zenith", h1d_zn);
263
264 dir_r->GetObject("h_azimuth", h1d_az);
266
267 dir_r->GetObject("h_radial_position", h1d_rp);
269
270 dir_r->GetObject("h_z_position", h1d_zp);
272 }
273
275
277 outputFile.put(*h_pmt_distribution_snapshot_hits);
278 outputFile.put(*h_pmt_distribution_triggered_hits);
280 outputFile.put(*h_Triggered_over_Snapshot_hits);
293
295
297
299}
void fill2DHistogram(int run, TH1D *h1, TH2D *h2, bool w_mc, double daq_livetime=1, double mc_livetime=1)
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse command line options.
General purpose class for object reading from a list of file names.
Object reading from a list of files.
int getRunNumber() const
Get run number.
JDAQUTCExtended getTimesliceStart() const
Get start of timeslice.
static int getN()
Get number of bins.
static const double * getData(const double factor=1.0)
Get abscissa values.
uint32_t getUTCseconds() const
Get major time.
void setLogarithmicY(TList *list)
Make y-axis of objects in list logarithmic (e.g. after using log10()).
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
KM3NeT DAQ data structures and auxiliaries.