Jpp  19.1.0-rc.1
the software that should make you happy
JRunHistograms.hh
Go to the documentation of this file.
1 #ifndef __JRUNHISTOGRAMS__
2 #define __JRUNHISTOGRAMS__
3 
4 /**
5  * \author rgruiz, adomi
6  */
7 #include "JSupport/JSupport.hh"
9 
11 #include "JTrigger/JTriggerBits.hh"
12 
15 
19 
20 #include "JGizmo/JGizmoToolkit.hh"
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 
39 using namespace std ;
40 using namespace KM3NETDAQ ;
41 using namespace JLANG ;
42 using namespace JPP ;
43 using namespace JSUPPORT ;
44 
45 /*
46  * Structure to store histograms obtained from the JDAQSummary TTree.
47  */
48 
50  TH1D* h_mean_fifo;
57 
58  /* One histogram for each DU */
61 
62  /* One histogram for each module */
64 
66  h_fifo_per_dom = NULL;
67  h_daq_status_per_dom = NULL;
68  h_hrv_per_dom = NULL;
69  h_rate_summary = NULL;
70  h_pmt_rate_distribution = NULL;
71  h_dom_rate_distribution = NULL;
72  m_mean_summary_rate = NULL;
73  m_mean_summary_rate_distribution = NULL;
74  m_summary_rate_distribution = NULL;
75  }
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",
96  JDAQRate::getN(), JDAQRate::getData(1.0e-4));
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));
99  setLogarithmicX (h_dom_rate_distribution);
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 
127 
128  /* One JManager per timeslice type. Each JManager hosts a histogram for each DU */
129 
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 
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*/
268 
269  /*
270  * Constructor
271  */
273  h_Trigger_bit_event = NULL;
274  h_Trigger_bit_hit = NULL;
275  h_Snapshot_hits = NULL;
276  h_Triggered_hits = NULL;
277  h_Triggered_hits_3dmuon = NULL;
278  h_Triggered_hits_3dmuon_per_module = NULL;
279  h_Triggered_over_Snapshot_hits = NULL;
280  h_event_duration = NULL;
281  h_Number_of_overlays = NULL;
282  h_Snapshot_hits_per_module = NULL;
283  h_Triggered_hits_per_module = NULL;
284  m_Snapshot_hits_per_pmt = NULL;
285  h_pmt_distribution_triggered_hits = NULL;
286  h_tot_distribution_triggered_hits = NULL;
287  h_pmt_distribution_snapshot_hits = NULL;
288  h_tot_distribution_snapshot_hits = NULL;
289  }
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",
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",
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 );
334  setLogarithmicX (h_Snapshot_hits);
335 
336  h_Triggered_hits = new TH1D ("h_Triggered_hits", " ; Number of triggered hits; Events ", 50 , 0, 4 );
337  setLogarithmicX (h_Triggered_hits);
338 
339  h_Triggered_hits_3dmuon = new TH1D ("h_Triggered_hits_3dmuon", " ; Number of triggered hits for JTRIGGER3DMUON; Events ", 50 , 0, 3 );
340  setLogarithmicX(h_Triggered_hits_3dmuon);
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 );
350  setLogarithmicX(h_event_duration);
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 
381 public:
382 
388 
390 
392 
393  du_ids = getStringIDs(detector);
395  h_summary = SummaryHistograms();
396  h_timeslice = TimesliceHistograms();
397  h_trigger = TriggerHistograms();
398 }
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  */
406 
407  h_summary.initialize(du_ids , modules_per_string);
408  }
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  */
432 
433  h_trigger.initialize (du_ids , modules_per_string);
434  }
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 >
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:127
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='%')
std::set< int > getStringIDs(const JDetector &detector)
Get list of strings identifiers.
int getNumberOfModules(const JDetector &detector)
Get number of modules.
static const JStringCounter getNumberOfStrings
Function object to count unique strings.
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.
Definition: JDataWriter.cc:38
double getN(const JRange< T > &range, const double R)
Get expected number of occurrences due to given rate within specified interval.
Definition: JRange.hh:704
data_type r[M+1]
Definition: JPolint.hh:868
int j
Definition: JPolint.hh:792
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.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Definition: JDAQ.hh:26
Definition: JSTDTypes.hh:14
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
TH1D * h_pmt_rate_distribution
void initialize(std::set< int > &du_ids, int modules_per_string)
JManager< string, TH2D > * m_summary_rate_distribution
TH1D * h_dom_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
TH1D * h_Triggered_hits_3dmuon