1 #ifndef __JRUNANALYZER__
2 #define __JRUNANALYZER__
16 using namespace KM3NETDAQ ;
60 numberOfTimeslices (nTimeslices),
61 numberOfSummaryslices (nSummaryslices),
62 numberOfEvents (nEvents),
63 pmt_analysis (pmtanalysis)
69 cerr <<
"FATAL ERROR. Could not open detector file '" << detectorFile <<
"'." << endl;
91 while (scanner.hasNext()) {
95 histograms.h_trigger.h_Snapshot_hits -> Fill((Double_t) event.size<
JDAQSnapshotHit> ());
96 histograms.h_trigger.h_Triggered_hits -> Fill((Double_t) event.size<
JDAQTriggeredHit> ());
98 histograms.h_trigger.h_Number_of_overlays -> Fill(event.getOverlays());
102 if (event.hasTriggerBit(i)) {
104 histograms.h_trigger.h_Trigger_bit_event -> Fill((Double_t) i);
108 int counter_3dmuon = 0;
109 double tmin = numeric_limits<double>::max();
114 if(hit->getT() < tmin) tmin = hit->getT();
115 if(hit->getT() > tmax) tmax = hit->getT();
119 if(trigger_mask.hasTriggerBit(getTriggerBit<JTrigger3DMuon>())) counter_3dmuon++;
121 if (router->hasModule(hit->getModuleID())) {
123 const JModule& module = router->getModule (hit->getModuleID());
125 histograms.h_trigger.h_pmt_distribution_triggered_hits->Fill(hit->getPMT());
126 histograms.h_trigger.h_tot_distribution_triggered_hits->Fill(hit->getToT());
131 histograms.h_trigger.h_Triggered_hits_per_module -> Fill(String , Floor);
133 if(trigger_mask.hasTriggerBit(getTriggerBit<JTrigger3DMuon>())){
134 histograms.h_trigger.h_Triggered_hits_3dmuon_per_module -> Fill(String , Floor);
139 if (hit -> hasTriggerBit(i)) {
141 histograms.h_trigger.h_Trigger_bit_hit->Fill((Double_t) i);
145 FATAL(
"JModuleRouter trying to access non existing identifier: "<< hit->getModuleID());
149 histograms.h_trigger.h_event_duration->Fill(tmax - tmin);
151 histograms.h_trigger.h_pmt_distribution_triggered_hits->Scale(1. / (Double_t) event.size<
JDAQTriggeredHit> ());
153 if(counter_3dmuon != 0) histograms.h_trigger.h_Triggered_hits_3dmuon->Fill(counter_3dmuon);
157 if (router->hasModule(hit->getModuleID())) {
159 const JModule& module = router->getModule (hit->getModuleID());
163 int pmt = hit-> getPMT();
165 if(pmt_analysis ==
true){
167 (*histograms.h_trigger.m_Snapshot_hits_per_pmt)[
MAKE_STRING(
"Detector/DU" +
to_string(String))] -> Fill(pmt, Floor);
171 histograms.h_trigger.h_pmt_distribution_snapshot_hits -> Fill(hit->getPMT());
172 histograms.h_trigger.h_tot_distribution_snapshot_hits -> Fill(hit->getToT());
173 histograms.h_trigger.h_Snapshot_hits_per_module -> Fill(String, Floor);
177 FATAL(
"JModuleRouter trying to access non existing identifier: "<< hit->getModuleID());
185 public vector< vector<JQuantile> >
202 while (scanner.hasNext()){
206 for (JDAQSummaryslice::const_iterator frame = slice.begin() ; frame != slice.end() ; ++ frame) {
208 if (router->hasModule(frame->getModuleID())) {
210 const JModule& module = router->getModule (frame->getModuleID());
220 histograms.h_summary.h_hrv_per_dom->Fill(
string , floor, nHRVcount);
224 histograms.h_summary.h_daq_status_per_dom->Fill(
string , floor, (1./
distance(scanner.begin(), scanner.end()))*100);
227 histograms.h_summary.h_fifo_per_dom->Fill(
string , floor , nFIFOcount);
229 if(pmt_analysis ==
true){
234 const double factor = 1.0e-3;
238 rate += frame->getRate(i, factor);
240 h2->Fill(i , frame->getRate(i, factor));
242 PMT_rate_quantiles[string][floor][i].put(frame->getRate(i, factor));
244 histograms.h_summary.h_pmt_rate_distribution->Fill(frame->getRate(i, factor), frame->getWeight(i, factor));
248 histograms.h_summary.h_dom_rate_distribution->Fill(rate);
250 DOM_rate_quantiles[string].resize(highest_floor + 1);
252 DOM_rate_quantiles[string][floor].put(rate);
257 const double factor = 1.0e-3;
261 rate += frame->getRate(i, factor);
263 histograms.h_summary.h_pmt_rate_distribution->Fill(frame->getRate(i, factor), frame->getWeight(i, factor));
266 histograms.h_summary.h_dom_rate_distribution->Fill(rate);
268 DOM_rate_quantiles[string].resize(highest_floor + 1);
270 DOM_rate_quantiles[string][floor].put(rate);
275 FATAL(
"JModuleRouter trying to access non existing identifier: "<< frame->getModuleID());
280 for (
std::map<
int ,
vector<JQuantile> >::const_iterator i = DOM_rate_quantiles.begin() ; i!= DOM_rate_quantiles.end() ; ++i) {
282 for (
int j=1;
j <= highest_floor;
j++) {
284 if (i->second[
j].getCount() > 0) histograms.h_summary.h_rate_summary->Fill(i->first,
j, i->second[
j].getMean());
288 if(pmt_analysis ==
true){
292 for (
int j = 1;
j <= highest_floor;
j++){
298 (*histograms.h_summary.m_mean_summary_rate) [
MAKE_STRING(
"Detector/DU" +
to_string(i->first))]->Fill(
k,
j, i->second[
j][
k].getMean());
299 (*histograms.h_summary.m_mean_summary_rate_distribution)[
MAKE_STRING(
"Detector/DU" +
to_string(i->first))]->Fill( i->second[
j][
k].getMean());
320 double inverseFrameTimeSec = 1. / (1.0e-9 *
getFrameTime());
322 while (scanner.hasNext()){
324 T slice = *(scanner.next());
326 for(
auto & frame : slice) {
327 if (router->hasModule(frame.getModuleID())) {
329 const JModule& module = router->getModule (frame.getModuleID());
330 double rate = frame.numberOfHits * inverseFrameTimeSec;
334 DOM_rate_quantiles[string][floor].put(rate);
338 if(pmt_analysis ==
true){
344 h2 -> Fill(hit->getPMT() , hit->getToT()) ;
346 pmt_hit_count[hit->getPMT()]++;
352 (*histograms.h_timeslice.m_pmt_rate_distributions[ts_type])[
MAKE_STRING(
"Detector/DU" +
to_string(
string) +
"/F" +
to_string(floor))] -> Fill(pmt , 1e-3 * pmt_hit_count[pmt] * inverseFrameTimeSec);
359 FATAL(
"JModuleRouter trying to access non existing identifier: "<< frame.getModuleID());
369 if (
j->second.getCount() > 0) histograms.h_timeslice.h_dom_mean_rates[ts_type] -> Fill (i->first ,
j->first ,
j->second.getMean() ) ;
383 if (scanner.hasNext()) {
384 histograms.initialize_summary_histograms();
386 iterateSummarysliceTree(scanner);
400 if(scanner.hasNext()) {
402 histograms.initialize_timeslice_histograms <
T>();
404 iterateTimesliceTree(scanner);
418 if(scanner.hasNext()) {
420 histograms.initialize_trigger_histograms();
422 iterateEventTree(scanner);
443 if (histograms.h_summary.h_fifo_per_dom) histograms.h_summary.h_fifo_per_dom -> Write();
444 if (histograms.h_summary.h_daq_status_per_dom) histograms.h_summary.h_daq_status_per_dom -> Write();
445 if (histograms.h_summary.h_hrv_per_dom) histograms.h_summary.h_hrv_per_dom -> Write();
446 if (histograms.h_summary.h_rate_summary) histograms.h_summary.h_rate_summary -> Write();
447 if (histograms.h_summary.h_pmt_rate_distribution) histograms.h_summary.h_pmt_rate_distribution -> Write();
448 if (histograms.h_summary.h_dom_rate_distribution) histograms.h_summary.h_dom_rate_distribution -> Write();
450 histograms.Write_histogram_table_to_file(f ,
MAKE_STRING(
"Detector"), histograms.h_timeslice.h_dom_mean_rates);
453 i != histograms.h_timeslice.m_pmt_tot_distributions.end() ; ++i){
459 j->second->Scale(1.,
"width");
464 histograms.Write_manager_table_in_key_dir (f , histograms.h_timeslice.m_pmt_tot_distributions);
465 histograms.Write_manager_table_in_key_dir (f , histograms.h_timeslice.m_pmt_rate_distributions);
467 if (histograms.h_summary.m_summary_rate_distribution) histograms.Write_manager_in_key_dir (f , histograms.h_summary.m_summary_rate_distribution);
469 if (histograms.h_summary.m_mean_summary_rate) histograms.Write_manager_in_key_dir( f , histograms.h_summary.m_mean_summary_rate);
470 if (histograms.h_summary.m_mean_summary_rate_distribution) histograms.Write_manager_in_key_dir( f , histograms.h_summary.m_mean_summary_rate_distribution);
472 histograms.h_timeslice.Fill_mean_ToT_histograms();
474 histograms.Write_manager_table_in_key_dir (f , histograms.h_timeslice.m_mean_ToT);
475 histograms.Write_manager_table_in_key_dir (f , histograms.h_timeslice.m_mean_ToT_distribution);
480 if (histograms.h_trigger.h_Trigger_bit_event) histograms.h_trigger.h_Trigger_bit_event -> Write();
481 if (histograms.h_trigger.h_Trigger_bit_hit) histograms.h_trigger.h_Trigger_bit_hit -> Write();
482 if (histograms.h_trigger.h_Triggered_hits) histograms.h_trigger.h_Triggered_hits -> Write();
483 if (histograms.h_trigger.h_Triggered_hits_3dmuon) histograms.h_trigger.h_Triggered_hits_3dmuon -> Write();
484 if (histograms.h_trigger.h_Triggered_hits_3dmuon_per_module) histograms.h_trigger.h_Triggered_hits_3dmuon_per_module -> Write();
485 if (histograms.h_trigger.h_Snapshot_hits) histograms.h_trigger.h_Snapshot_hits -> Write();
486 if (histograms.h_trigger.h_Triggered_over_Snapshot_hits) histograms.h_trigger.h_Triggered_over_Snapshot_hits -> Write();
487 if (histograms.h_trigger.h_event_duration) histograms.h_trigger.h_event_duration -> Write();
488 if (histograms.h_trigger.h_Number_of_overlays) histograms.h_trigger.h_Number_of_overlays -> Write();
489 if (histograms.h_trigger.h_pmt_distribution_triggered_hits) {histograms.h_trigger.h_pmt_distribution_triggered_hits -> Write();}
490 if (histograms.h_trigger.h_pmt_distribution_snapshot_hits) {histograms.h_trigger.h_pmt_distribution_snapshot_hits -> Write();}
491 if (histograms.h_trigger.h_tot_distribution_triggered_hits) { histograms.h_trigger.h_tot_distribution_triggered_hits->Scale(1,
"width") ; histograms.h_trigger.h_tot_distribution_triggered_hits-> Write();}
492 if (histograms.h_trigger.h_tot_distribution_snapshot_hits) {histograms.h_trigger.h_tot_distribution_snapshot_hits->Scale(1,
"width") ; histograms.h_trigger.h_tot_distribution_snapshot_hits -> Write();}
493 if (histograms.h_trigger.h_Triggered_hits_per_module) { histograms.h_trigger.h_Triggered_hits_per_module-> Write();}
494 if (histograms.h_trigger.h_Snapshot_hits_per_module) { histograms.h_trigger.h_Snapshot_hits_per_module -> Write();}
495 if (histograms.h_trigger.m_Snapshot_hits_per_pmt) histograms.Write_manager_in_key_dir(f , histograms.h_trigger.m_Snapshot_hits_per_pmt);
then fatal No hydrophone data file $HYDROPHONE_TXT fi sort gr k
void iterateTimesliceTree(JTreeScanner< T > &scanner)
ROOT TTree parameter settings of various packages.
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
int countFIFOStatus() const
Count FIFO status.
JRunAnalyzer(string file, string detectorFile, JLimit_t nTimeslices, JLimit_t nSummaryslices, JLimit_t nEvents, bool pmtanalysis)
Constructor.
int getFloor() const
Get floor number.
Data structure for a composite optical module.
then set_variable PMT_FILE set_variable DAQ_FILE set_variable OUTPUT_FILE set_variable DETECTOR else fatal Wrong number of arguments fi set_variable RUNBYRUN file
Auxiliary class for trigger mask.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
JRA_Histograms histograms
Router for direct addressing of module data in detector data structure.
then set_variable singlesRate set_variable doublesRate set_variable numberOfSlices echo Generating random background echo Singles rate
o $QUALITY_ROOT d $DEBUG!JPlot1D f
JLimit_t numberOfTimeslices
Dynamic ROOT object management.
void iterateSummarysliceTree(JTreeScanner< JDAQSummaryslice > &scanner)
Class dedicated to the analysis of KM3NeT runs.
floor_range getRangeOfFloors(const JDetector &detector)
Get range of floors.
Template definition for direct access of elements in ROOT TChain.
#define MAKE_STRING(A)
Make string.
void writeToFile(TFile &f)
Auxiliary class for defining the range of iterations of objects.
JRunAnalyzer()
Default constructor.
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
~JRunAnalyzer()
Destructor.
double getFrameTime()
Get frame time duration.
do set_variable OUTPUT_DIRECTORY $WORKDIR T
void iterateEventTree(JTreeScanner< JDAQEvent > &scanner)
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Direct access to module in detector data structure.
int getString() const
Get string number.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
int countHighRateVeto() const
Count high-rate veto status.
General purpose string class.
std::string to_string(const T &value)
Convert value to string.
int getCount(const T &hit)
Get hit count.
JLimit_t numberOfSummaryslices
Indexing of data type in type list.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
bool testDAQStatus() const
Test DAQ status of packets.
JRA_Histograms getHistograms()