Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
JRunHistograms.hh
Go to the documentation of this file.
1#ifndef __JRUNHISTOGRAMS__
2#define __JRUNHISTOGRAMS__
3
4/**
5 * \author rgruiz, adomi
6 */
9
12
15
19
21
22#include "JROOT/JManager.hh"
23
24#include "TH1D.h"
25#include "TH2D.h"
26#include "TProfile2D.h"
27#include "TAxis.h"
28#include "TCanvas.h"
29#include "TPaveText.h"
30#include "TStyle.h"
31#include "TString.h"
32#include "TMath.h"
33#include "TColor.h"
34#include "TDirectory.h"
35#include "TPRegexp.h"
36#include "TObjArray.h"
37#include "TObjString.h"
38
39using namespace std ;
40using namespace KM3NETDAQ ;
41using namespace JLANG ;
42using namespace JPP ;
43using namespace JSUPPORT ;
44
45/*
46 * Structure to store histograms obtained from the JDAQSummary TTree.
47 */
48
57
58 /* One histogram for each DU */
59 JManager < string , TH2D >* m_mean_summary_rate;
60 JManager < string , TH1D >* m_mean_summary_rate_distribution;
61
62 /* One histogram for each module */
63 JManager < string , TH2D >* m_summary_rate_distribution;
64
76
77 /*
78 * Initializes the histograms for summary slices
79 */
80 void initialize(std::set<int> & du_ids , int modules_per_string){
81
82 h_fifo_per_dom = new TH2D ("h_fifo_per_dom", " FIFO ; String ; Floor ; Number of slices with FIFO almost full x number of PMTs ",
83 *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
84
85 h_daq_status_per_dom = new TH2D ("h_daq_status_per_dom",
86 " Fraction of wrong DAQ Status [%]; String ; Floor ; Fraction of slices with wrong DAQ status of packets [%]",
87 *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
88
89 h_hrv_per_dom = new TH2D ("h_hrv_per_dom", "HRV ; String ; Floor ; Number of slices x number of PMTs in HRV",
90 *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
91
92 h_rate_summary = new TH2D ("h_rate_summary", "Summary slices ; String ; Floor ; Mean rate over all summary slices [kHz]",
93 *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 , modules_per_string , 0.5 , modules_per_string + 0.5 );
94
95 h_pmt_rate_distribution = new TH1D ("h_pmt_rate_distribution", "PMT rate distribution from summary slices ; rate [kHz] ; Counts",
97
98 h_dom_rate_distribution = new TH1D ("h_dom_rate_distribution", "DOM rate distribution from summary slices ; rate [kHz] ; Counts", 50 , log10(50) , log10(2000));
100
101 TH1D* h = new TH1D("%/h_mean_summary_rate_distribution", " ; rate [kHz] ; # PMTs", 40 , 0 , log10(1000));
102 setLogarithmicX (h);
103 m_mean_summary_rate_distribution = new JManager < string , TH1D > (h);
104
105 m_mean_summary_rate = new JManager < string , TH2D > (new TH2D("%/h_mean_summary_rate", " ; TDC Channel ; Floor ; rate [kHz]",
106 NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5,
107 modules_per_string , 0.5 , 0.5 + modules_per_string));
108
109 TH2D* h_summary_rate_distribution = new TH2D ("%/h_pmt_rate_distributions_Summaryslice", "Summaryslice ; TDC channel ; rate [kHz] ; counts",
110 NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5, 100 , -1 , log10(10000));
111 setLogarithmicY (h_summary_rate_distribution);
112 m_summary_rate_distribution = new JManager < string , TH2D > (h_summary_rate_distribution);
113
114 }
115};
116
118
123
124 /* One histogram per timeslice type. I decided not to use a JManager here because the range of each histogram could be different for each timeslice type. */
125
126 vector < TH2D* > h_dom_mean_rates;
127
128 /* One JManager per timeslice type. Each JManager hosts a histogram for each DU */
129
130 vector < JManager < string , TH2D >* > m_mean_ToT;
131 vector < JManager < string , TH1D >* > m_mean_ToT_distribution;
132
133 /* One JManager per timeslice type. Each manager hosts a histogram for an optical module. The key is expected to follow the pattern SXXFXX */
134
135 vector < JManager < string , TH2D >* > m_pmt_tot_distributions;
136 vector < JManager < string , TH2D >* > m_pmt_rate_distributions;
137
139 min_logdt (0),
140 max_logdt (9),
141 nbins_logdt (150),
142 nbins_time (200)
143 {
144 int number_of_timeslice_types = JLength<JDAQTimesliceTypes_t>::value ;
145
146 h_dom_mean_rates .resize (number_of_timeslice_types , NULL);
147 m_mean_ToT .resize (number_of_timeslice_types , NULL);
148 m_mean_ToT_distribution .resize (number_of_timeslice_types , NULL);
149 m_pmt_tot_distributions .resize (number_of_timeslice_types , NULL);
150 m_pmt_rate_distributions .resize (number_of_timeslice_types , NULL);
151 }
152
153 /*
154 * Initializes histograms for a given timeslice type.
155 *
156 * \param du_ids The list of ids for the DUs in the detector
157 * \param modules_per_string the number of modules in a string
158 * \param ts_type Index of the timeslice types on the JDAQTimesliceTypes_t typelist.
159 * \param ts_name The name of the timeslice type
160 */
161 void initialize(std::set<int> du_ids , int modules_per_string , int ts_type , std::string ts_name){
162
163 h_dom_mean_rates[ts_type] = new TH2D (MAKE_STRING ("h_mean_dom_rates_" + ts_name).c_str(),
164 MAKE_STRING (ts_name + " ; DU number ; Floor number ; time slice averaged rate [Hz]").c_str() ,
165 *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 ,
166 modules_per_string , 0.5 , 0.5 + modules_per_string);
167
168 m_mean_ToT[ts_type] = new JManager < string , TH2D > (new TH2D (MAKE_STRING ("%/h_mean_ToT_" + ts_name).c_str(),
169 MAKE_STRING (ts_name + " ; TDC channel ; Floor number ; mean ToT [ns] ").c_str(),
170 NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5 ,
171 modules_per_string , 0.5 , 0.5 + modules_per_string));
172
173 m_mean_ToT_distribution[ts_type] = new JManager < string , TH1D > (new TH1D (MAKE_STRING ("%/h_mean_ToT_distribution" + ts_name).c_str(),
174 MAKE_STRING (ts_name + " ; ToT [ns] ; # PMTS ").c_str(),
175 256, -0.5, 255.5));
176
177 TH2D* h = new TH2D (MAKE_STRING ("%_" + ts_name + "_2SToT").c_str(),
178 MAKE_STRING (ts_name + " ; TDC channel ; ToT [ns] ; counts").c_str(),
179 NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5 , 256, -0.5, 255.5);
180
181 h->Sumw2();
182
183 m_pmt_tot_distributions[ts_type] = new JManager < string , TH2D > (h);
184
185 int NBinsY=0;
186 double Ymax=0;
187
189 NBinsY=100;
190 Ymax=25;
192 NBinsY=100;
193 Ymax=2;
195 NBinsY=10;
196 Ymax=0.1;
197 }
198
199 TH2D* h_pmt_rate_distributions = new TH2D (MAKE_STRING ("%/h_pmt_rate_distributions_" + ts_name).c_str(),
200 MAKE_STRING (ts_name + " ; TDC channel ; rate [kHz] ; counts ").c_str(),
201 NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5 ,
202 NBinsY, 0, Ymax);
203
204 m_pmt_rate_distributions[ts_type] = new JManager < string , TH2D > (h_pmt_rate_distributions);
205
206 }
207
208 /*
209 * Fills the mean ToT as a function of the PMT and floor number for a given DU
210 *
211 * \param table table with the ToT distributions for each PMT in a module, for every timeslice type
212 * \param string The string number
213 * \param floor The floor number
214 */
216
217 int i = 0 ;
218
219 for (typename vector < JManager < string , TH2D >* >::const_iterator it = m_pmt_tot_distributions.begin() ; it != m_pmt_tot_distributions.end() ; ++it , ++i){
220
221 if ((*it)){
222
223 for (typename JManager < string , TH2D >::const_iterator j = (*it) -> begin() ; j != (*it) -> end() ; ++j){
224
225 TString s (MAKE_STRING(j -> first).c_str());
226 TPRegexp r ("(\\w+)/(\\DU)(\\d+)/(F)(\\d+)");
227
228 TObjArray* o = r.MatchS(s);
229
230 int String = ((TObjString *)o->At(3))->GetString().Atoi();
231 int Floor = ((TObjString *)o->At(5))->GetString().Atoi();
232
233 for (int pmt = 1 ; pmt <= (j -> second) -> GetXaxis() -> GetNbins() ; pmt++){
234
235 (*m_mean_ToT[i])[MAKE_STRING("Detector/DU" + to_string(String))] -> Fill((j->second) -> GetXaxis() -> GetBinCenter(pmt) , Floor , (j -> second) -> ProjectionY ("" , pmt , pmt) -> GetMean () );
236 (*m_mean_ToT_distribution[i])[MAKE_STRING("Detector/DU" + to_string(String))] -> Fill((j -> second) -> ProjectionY ("" , pmt , pmt) -> GetMean () );
237 }
238 }
239 }
240 }
241 }
242
243};
244
245/*
246 * Structure to store histograms obtained from the JDAQEvent TTree
247 */
249
265
266 /* One histogram per DU*/
267 JManager < string , TH2D >* m_Snapshot_hits_per_pmt;
268
269 /*
270 * Constructor
271 */
290
291 /*
292 * Initializes the histograms.
293 * \param du_ids The list of du ids in the detector
294 * \param frame_index_range The range of frame indices
295 * \param modules_per_string The number of modules in a string.
296 */
297 void initialize(std::set<int> & du_ids , int modules_per_string){
298
299 h_Trigger_bit_event = new TH1D ("h_Trigger_bit_event",
300 "Number of events as a function of trigger bit in event ; Trigger Bit ; Counts",
301 NUMBER_OF_TRIGGER_BITS , -0.5, NUMBER_OF_TRIGGER_BITS - 0.5 );
302
303 for (int i = 0 ; i < (int) NUMBER_OF_TRIGGER_BITS ; i++){
304
305 if (getTriggerName(i)){
306
307 h_Trigger_bit_event -> GetXaxis() -> SetBinLabel(i+1 , getTriggerName(i) );
308 }else{
309
310 h_Trigger_bit_event -> GetXaxis() -> SetBinLabel(i+1 , "" );
311 }
312 }
313 h_Trigger_bit_event -> GetXaxis() -> LabelsOption("v");
314
315
316 h_Trigger_bit_hit = new TH1D ("h_Trigger_bit_hit",
317 "Number of hits per event as a function of trigger bit in hit ; Trigger Bit ; #Events",
318 NUMBER_OF_TRIGGER_BITS, -0.5, NUMBER_OF_TRIGGER_BITS - 0.5 );
319
320 for (int i = 0 ; i < (int) NUMBER_OF_TRIGGER_BITS ; i++){
321
322 if (getTriggerName(i)){
323
324 h_Trigger_bit_hit -> GetXaxis() -> SetBinLabel(i+1 , getTriggerName(i) );
325 }else{
326
327 h_Trigger_bit_hit -> GetXaxis() -> SetBinLabel(i+1 , "" );
328 }
329 }
330
331 h_Trigger_bit_hit -> GetXaxis() -> LabelsOption("v");
332
333 h_Snapshot_hits = new TH1D ("h_Snapshot_hits", " ; Number of snapshot hits; Events ", 50, 0, 4 );
335
336 h_Triggered_hits = new TH1D ("h_Triggered_hits", " ; Number of triggered hits; Events ", 50 , 0, 4 );
338
339 h_Triggered_hits_3dmuon = new TH1D ("h_Triggered_hits_3dmuon", " ; Number of triggered hits for JTRIGGER3DMUON; Events ", 50 , 0, 3 );
341
342 h_Triggered_hits_3dmuon_per_module = new TH2D ("h_Triggered_hits_3dmuon_per_module",
343 "Number of triggered hits for JTRIGGER3DMUON; String ; Floor ; Number of JTRIGGER3DMUON hits",
344 *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5,
345 modules_per_string , 0.5 , modules_per_string + 0.5 );
346
347 h_Triggered_over_Snapshot_hits = new TH1D ("h_Triggered_over_Snapshot_hits", " ; Triggered/Snapshot hits; Events", 100 , 0, 0.5 );
348
349 h_event_duration = new TH1D ("h_event_duration", " ; Event Duration [ns]; Events", 60 , 1, 6 );
351
352 h_Number_of_overlays = new TH1D ("h_Number_of_overlays", " ; Number of overlays; Events ", 1000, -0.5, 1000 - 0.5 );
353 h_Snapshot_hits_per_module = new TH2D ("h_Snapshot_hits_per_module",
354 " ; String ; Floor ; Number of snapshot hits ",
355 *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 ,
356 modules_per_string , 0.5 , modules_per_string + 0.5 );
357
358 h_Triggered_hits_per_module = new TH2D ("h_Triggered_hits_per_module",
359 " ; String ; Floor ; Number of triggered hits",
360 *du_ids.rbegin() , 0.5 , *du_ids.rbegin() + 0.5 ,
361 modules_per_string , 0.5 , modules_per_string + 0.5 );
362
363 m_Snapshot_hits_per_pmt = new JManager < string , TH2D > ( new TH2D ("%/h_Snapshot_hits_per_pmt",
364 " ; TDC Channel ; Floor ; Number of snapshot hits",
365 NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5 ,
366 modules_per_string , 0.5 , modules_per_string + 0.5 ) );
367
368 h_pmt_distribution_triggered_hits = new TH1D ("h_pmt_distribution_triggered_hits",
369 " ; TDC Channel ; Counts [a.u.]", NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5);
370 h_tot_distribution_triggered_hits = new TH1D ("h_tot_distribution_triggered_hits", " ; ToT [ns] ; Counts [a.u.]", 256 , -0.5, 255.5);
371 h_pmt_distribution_snapshot_hits = new TH1D ("h_pmt_distribution_snapshot_hits", " ; TDC Channel ; Counts [a.u.]", NUMBER_OF_PMTS , -0.5 , NUMBER_OF_PMTS - 0.5);
372 h_tot_distribution_snapshot_hits = new TH1D ("h_tot_distribution_snapshot_hits", " ; ToT [ns] ; Counts [a.u.]", 256, -0.5, 255.5);
373 }
374};
375
376/*
377 * Class to manage the histograms produced by JRunAnalyzer.
378 */
380
381public:
382
386 std::set <int> du_ids;
388
390
399
400 /*
401 * Initializes summary slice histograms.
402 *
403 * \param range The range of values for the summary slice indices in the run. The range of some histograms is based on the number of time slices, and their indices.
404 */
409
410 /*
411 * Initializes summary slice histograms.
412 *
413 * \param range The range of values for the summary slice indices in the run. The range of some histograms is based on the number of time slices, and their indices.
414 */
415 template <class T>
417
419 const string prefix = "KM3NETDAQ::JDAQ" ;
420 string ts_name = T::Class_Name();
421 string::size_type pos = ts_name.find(prefix);
422
423 if (pos != string::npos) ts_name.replace(ts_name.find(prefix) , prefix.length() , "");
424
425 h_timeslice.initialize(du_ids , modules_per_string , index , ts_name);
426 }
427
428 /*
429 * Initializes JDAQEvent histograms.
430 */
435
436 /*
437 * Checks if the histograms in a table have been initialized. If yes, it writes them on the indicated directory of a root file
438 *
439 * \param f The root file
440 * \param dirname The directory where the histograms will be written
441 * \param table A vector of histograms.
442 */
443 template <class T>
444 void Write_histogram_table_to_file(TFile & f , string dirname , vector < vector < T* > > table){
445
446 if(f.GetDirectory(dirname.c_str()) == 0) f.mkdir (dirname.c_str());
447
448 f.cd (dirname.c_str());
449
450 for (int i=0 ; i < (int)table.size(); i++){
451
452 for (int j=0 ; j< (int)table[i].size(); j++){
453
454 if (table[i][j]) table [i][j] -> Write();
455 }
456 }
457 }
458
459 /*
460 * Checks if the histograms in a table have been initialized. If yes, it writes them on the indicated directory of a root file
461 *
462 * \param f The root file
463 * \param dirname The directory where the histograms will be written
464 * \param table A vector of histograms.
465 */
466 template <class T>
467 void Write_histogram_table_to_file(TFile & f , string dirname , vector < T* > table){
468
469 if(f.GetDirectory(dirname.c_str()) == 0) f.mkdir (dirname.c_str());
470
471 f.cd (dirname.c_str());
472
473 for (int i=0 ; i < (int)table.size(); i++){
474
475 if (table[i]) table[i] -> Write();
476 }
477 }
478
479 /*
480 * Checks if the histograms in a table have been initialized. If yes, it writes them on the indicated directory of a root file
481 *
482 * \param f The root file
483 * \param dirname The directory where the histograms will be written
484 * \param table A vector of histograms.
485 */
486 template <class T , class V>
487 void Write_manager_to_file(TFile & f , string dirname , JManager < T , V >* table){
488
489 if(f.GetDirectory(dirname.c_str()) == 0) f.mkdir (dirname.c_str());
490
491 f.cd (dirname.c_str());
492
493 for (typename JManager < T , V >::const_iterator i = table -> begin() ; i != table -> end() ; ++i){
494
495 i -> second -> Write();
496 }
497 }
498
499 /*
500 * Replaces wildcard in manager objects titles by their keys.
501 * \param A manager.
502 * \param wc The wildcard
503 */
504 template <class T , class V>
505 void Replace_wildcard_in_name(JManager < T , V >* manager , char wc = '%'){
506
507 for (typename JManager < T , V >::const_iterator i = manager -> begin() ; i != manager -> end() ; ++i){
508
509 if (i -> second -> GetTitle()){
510
511 std::string buffer = i -> second -> GetTitle();
512 string::size_type ipos = buffer.find(wc);
513
514 if (ipos!=std::string::npos){
515
516 ostringstream os;
517
518 os << i -> first ;
519
520 buffer.replace(ipos, 1, os.str());
521
522 i -> second -> SetTitle(buffer.c_str());
523 }
524 }
525 }
526 }
527
528 /*
529 * Writes the contents of a JManager into a file. Each object in each will be written in a directory specified by its key.
530 * \param f The root file
531 * \param A manager.
532 */
533 template < class T , class V >
534 void Write_manager_in_key_dir(TFile & f ,JManager <T , V>* manager){
535
536 for (typename JManager < T , V >::const_iterator i = manager -> begin() ; i != manager -> end() ; ++i){
537
538 std::string fullpath = MAKE_STRING(i->second->GetName());
539
540 int pos = fullpath.rfind ('/');
541 std::string name = fullpath.substr (pos + 1);
542 std::string path = fullpath.substr (0 , pos);
543
544 if (f.GetDirectory(path.c_str()) == 0) f.mkdir (path.c_str());
545
546 f.cd(path.c_str());
547
548 i -> second -> SetName(name.c_str());
549 i -> second -> Write();
550 }
551 }
552
553 /*
554 * Writes the contents of a vector of JManager objects into a file. Each object in each will be written in a directory specified by its key.
555 * \param f The root file
556 * \param table the list of JManager objects.
557 */
558 template < class T , class V >
559 void Write_manager_table_in_key_dir(TFile & f , vector < JManager < T , V >* > table){
560
561 for (typename vector < JManager < T , V >* >::const_iterator i = table.begin() ; i != table.end() ; ++i){
562
563 if ((*i)){
564
565 for (typename JManager < T , V >::const_iterator j = (*i) -> begin() ; j != (*i) -> end() ; ++j){
566
567 std::string fullpath = MAKE_STRING(j-> second -> GetName());
568
569 int pos = fullpath.rfind ('/');
570 std::string name = fullpath.substr (pos + 1);
571 std::string path = fullpath.substr (0 , pos);
572
573 if (f.GetDirectory(path.c_str()) == 0) f.mkdir (path.c_str());
574
575 f.cd(path.c_str());
576
577 j -> second -> SetName(name.c_str());
578 j -> second -> Write();
579 }
580 }
581 }
582 }
583
584};
585
586#endif
KM3NeT DAQ constants, bit handling, etc.
Dynamic ROOT object management.
Direct access to module in detector data structure.
#define MAKE_STRING(A)
Make string.
Definition JPrint.hh:63
Support methods.
ROOT TTree parameter settings of various packages.
Setting of trigger bits.
Detector data structure.
Definition JDetector.hh:96
TimesliceHistograms h_timeslice
void initialize_trigger_histograms()
void Write_manager_table_in_key_dir(TFile &f, vector< JManager< T, V > * > table)
void Write_histogram_table_to_file(TFile &f, string dirname, vector< T * > table)
void Write_manager_to_file(TFile &f, string dirname, JManager< T, V > *table)
TriggerHistograms h_trigger
void Write_manager_in_key_dir(TFile &f, JManager< T, V > *manager)
void initialize_summary_histograms()
void initialize_timeslice_histograms()
JRA_Histograms(const JDetector &detector)
void Write_histogram_table_to_file(TFile &f, string dirname, vector< vector< T * > > table)
std::set< int > du_ids
SummaryHistograms h_summary
void Replace_wildcard_in_name(JManager< T, V > *manager, char wc='%')
static int getN()
Get number of bins.
static const double * getData(const double factor=1.0)
Get abscissa values.
std::set< int > getStringIDs(const JDetector &detector)
Get list of strings identifiers.
static const JStringCounter getNumberOfStrings
Function object to count unique strings.
int getNumberOfModules(const JDetector &detector, const bool option=false)
Get number of modules.
void setLogarithmicX(TList *list)
Make x-axis of objects in list logarithmic (e.g. after using log10()).
void setLogarithmicY(TList *list)
Make y-axis of objects in list logarithmic (e.g. after using log10()).
Auxiliary classes and methods for language specific functionality.
std::string to_string(const T &value)
Convert value to string.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Support classes and methods for experiment specific I/O.
int j
Definition JPolint.hh:801
const char * getTriggerName(JTriggerbit_t bit)
Get trigger name.
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
General purpose string class.
Definition JHead.hh:152
Detector file.
Definition JHead.hh:227
Indexing of data type in type list.
Definition JTypeList.hh:310
Length of type list.
Definition JTypeList.hh:176
JManager< string, TH1D > * m_mean_summary_rate_distribution
JManager< string, TH2D > * m_mean_summary_rate
void initialize(std::set< int > &du_ids, int modules_per_string)
JManager< string, TH2D > * m_summary_rate_distribution
vector< JManager< string, TH2D > * > m_pmt_tot_distributions
vector< JManager< string, TH2D > * > m_pmt_rate_distributions
vector< JManager< string, TH2D > * > m_mean_ToT
vector< TH2D * > h_dom_mean_rates
void initialize(std::set< int > du_ids, int modules_per_string, int ts_type, std::string ts_name)
vector< JManager< string, TH1D > * > m_mean_ToT_distribution
void initialize(std::set< int > &du_ids, int modules_per_string)
TH2D * h_Triggered_hits_3dmuon_per_module
TH2D * h_Triggered_hits_per_module
JManager< string, TH2D > * m_Snapshot_hits_per_pmt
TH1D * h_tot_distribution_snapshot_hits
TH1D * h_pmt_distribution_snapshot_hits
TH2D * h_Snapshot_hits_per_module
TH1D * h_pmt_distribution_triggered_hits
TH1D * h_tot_distribution_triggered_hits
TH1D * h_Triggered_over_Snapshot_hits