Jpp  18.3.0-rc.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JDAQProfile.cc
Go to the documentation of this file.
1 
2 #include <string>
3 #include <iostream>
4 #include <iomanip>
5 
6 #include "TROOT.h"
7 #include "TFile.h"
8 #include "TH1D.h"
9 #include "TProfile.h"
10 
12 #include "JDAQ/JDAQEventIO.hh"
14 #include "JDAQ/JDAQEvaluator.hh"
15 
17 #include "JSupport/JTreeScanner.hh"
19 #include "JSupport/JSupport.hh"
20 
21 #include "JROOT/JManager.hh"
22 
23 #include "Jeep/JParser.hh"
24 #include "Jeep/JMessage.hh"
25 
26 
27 /**
28  * \file
29  *
30  * Example program to histogram various data profiles.
31  * \author mdejong
32  */
33 int main(int argc, char **argv)
34 {
35  using namespace std;
36  using namespace JPP;
37  using namespace KM3NETDAQ;
38 
39  string inputFile;
40  JLimit_t numberOfEvents;
41  string outputFile;
42  Long64_t prescale;
43  int debug;
44 
45  try {
46 
47  JParser<> zap("Example program to histogram various data profiles.");
48 
49  zap['f'] = make_field(inputFile);
50  zap['o'] = make_field(outputFile) = "profile.root";
51  zap['n'] = make_field(numberOfEvents) = JLimit::max();
52  zap['P'] = make_field(prescale) = 1;
53  zap['d'] = make_field(debug) = 1;
54 
55  zap(argc, argv);
56  }
57  catch(const exception& error) {
58  FATAL(error.what() << endl);
59  }
60 
61 
62  NOTICE("Determine frame index range... " << flush);
63 
64  const JFrameIndexRange frame_index = getFrameIndexRange<JDAQSummaryslice>(inputFile);
65 
66  NOTICE("= (" << frame_index.first << "," << frame_index.second << ")" << endl);
67 
68  const Long64_t NX = frame_index.second - frame_index.first + 1;
69  const Long64_t nx = (NX + prescale - 1) / prescale;
70  const Double_t xmin = frame_index.first;
71  const Double_t xmax = frame_index.first + nx * prescale;
72 
73 
74  TFile out(outputFile.c_str(), "recreate");
75 
76  typedef JManager<int, TH1D> JManager_t;
77 
78  JManager_t m_summary(new TH1D("Summary[%]", NULL, nx, xmin, xmax));
79  JManager_t m_trigger(new TH1D("Trigger[%]", NULL, nx, xmin, xmax));
80  JManager_t m_status (new TH1D("Status[%]", NULL, NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS - 0.5));
81 
82  TH1D hu("#N [all]", NULL, nx, xmin, xmax);
83  TH1D hv("#M [UDP]", NULL, nx, xmin, xmax);
84  TH1D hw("#L [HRV]", NULL, nx, xmin, xmax);
85  TH1D ha("L0 [all]", NULL, nx, xmin, xmax);
86  TH1D hb("L0 [HRV]", NULL, nx, xmin, xmax);
87  TH1D h1("WR", NULL, nx, xmin, xmax);
88  TH1D h2("trigger", NULL, nx, xmin, xmax);
89  TH1D h3("PMT", NULL, nx, xmin, xmax);
90 
91  h2.Sumw2();
92 
93  for (JMultipleFileScanner<JDAQSummaryslice> in(inputFile, numberOfEvents); in.hasNext(); ) {
94 
95  STATUS("event: " << setw(10) << in.getCounter() << '\r'); DEBUG(endl);
96 
97  JDAQSummaryslice* summary = in.next();
98 
99  const Double_t x = summary->getFrameIndex();
100 
101  Double_t U = summary->size();
102  Double_t V = 0.0;
103  Double_t W = 0.0;
104  Double_t Y[] = { 0.0, 0.0 };
105  Double_t Z = 0.0;
106 
107  for (JDAQSummaryslice::const_iterator frame = summary->begin(); frame != summary->end(); ++frame) {
108 
109  Double_t y = 0.0;
110 
111  if (frame->testDAQStatus()) {
112 
113  V += 1.0;
114 
115  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
116 
117  if (frame->testHighRateVeto(pmt) || frame->testFIFOStatus(pmt))
118  m_status[frame->getModuleID()]->Fill((Double_t) pmt);
119  else
120  W += 1.0 / NUMBER_OF_PMTS;
121 
122  y += frame->getRate(pmt) * 1e-3; // kHz
123  }
124  }
125 
126  m_summary[frame->getModuleID()]->Fill(x, y);
127 
128  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
129 
130  Y[0] += frame->getRate(pmt) * 1e-3; // kHz
131 
132  if (!frame->testHighRateVeto(pmt) && !frame->testFIFOStatus(pmt)) {
133  Y[1] += frame->getRate(pmt) * 1e-3; // kHz
134  }
135  }
136 
137  if (frame->testWhiteRabbitStatus()) {
138  Z += 1.0;
139  }
140  }
141 
142  Y[0] /= (summary->size() * NUMBER_OF_PMTS);
143  Y[1] /= (summary->size() * NUMBER_OF_PMTS);
144  Z /= summary->size();
145 
146  hu.Fill(x, U / prescale);
147  hv.Fill(x, V / prescale);
148  hw.Fill(x, W / prescale);
149  ha.Fill(x, Y[0] / prescale);
150  hb.Fill(x, Y[1] / prescale);
151  h1.Fill(x, Z / prescale);
152  }
153  STATUS(endl);
154 
155  for (JMultipleFileScanner<JDAQEvent> in(inputFile, numberOfEvents); in.hasNext(); ) {
156 
157  STATUS("event: " << setw(10) << in.getCounter() << '\r'); DEBUG(endl);
158 
159  JDAQEvent* event = in.next();
160 
161  const Double_t x = event->getFrameIndex();
162  const Double_t y = 1.0e9 / getFrameTime() / prescale;
163 
164  h2.Fill(x, y);
165 
166  typedef JDAQTriggeredHit JHit_t;
167  //typedef JDAQSnapshotHit JHit_t;
168 
169  for (JDAQEvent::const_iterator<JHit_t> hit = event->begin<JHit_t>(); hit != event->end<JHit_t>(); ++hit) {
170  m_trigger[hit->getModuleID()]->Fill(x);
171  }
172  }
173  STATUS(endl);
174 
175  m_summary.Write(out);
176  m_trigger.Write(out);
177  m_status .Write(out);
178 
179  out.Write();
180  out.Close();
181 }
const double xmax
Definition: JQuadrature.cc:24
Utility class to parse command line options.
Definition: JParser.hh:1514
int main(int argc, char *argv[])
Definition: Main.cc:15
ROOT TTree parameter settings of various packages.
#define STATUS(A)
Definition: JMessage.hh:63
Template const_iterator.
Definition: JDAQEvent.hh:66
Dynamic ROOT object management.
then fatal Wrong number of arguments fi set_variable STRING $argv[1] set_variable DETECTORXY_TXT $WORKDIR $DETECTORXY_TXT tail read X Y CHI2 RMS printf optimum n $X $Y $CHI2 $RMS awk v Y
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
string outputFile
int getFrameIndex() const
Get frame index.
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:41
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
Definition: JManager.hh:43
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1989
double getFrameTime()
Get frame time duration.
Definition: JDAQClock.hh:162
#define NOTICE(A)
Definition: JMessage.hh:64
Support methods.
General purpose messaging.
#define FATAL(A)
Definition: JMessage.hh:67
Scanning of objects from multiple files according a format that follows from the extension of each fi...
const double xmin
Definition: JQuadrature.cc:23
Utility class to parse command line options.
Auxiliary class to set-up Hit.
Definition: JSirene.hh:57
do set_variable MODULE getModule a $WORKDIR detector_a datx L $STRING JEditDetector a $WORKDIR detector_a datx M $MODULE setz o $WORKDIR detector_a datx JEditDetector a $WORKDIR detector_b datx M $MODULE setz o $WORKDIR detector_b datx done echo Output stored at $WORKDIR detector_a datx and $WORKDIR tripod_a txt JDrawDetector2D a $WORKDIR detector_a datx a $WORKDIR detector_b datx L BL o detector $FORMAT $BATCH JDrawDetector2D T $WORKDIR tripod_a txt T $WORKDIR tripod_b txt L BL o tripod $FORMAT $BATCH JCompareDetector a $WORKDIR detector_a datx b $WORKDIR detector_b datx o $WORKDIR abc root &dev null for KEY in X Y Z
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Definition: JDAQ.hh:26
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Definition: JCanberra.sh:48
int debug
debug level
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62