Jpp  master_rocky-40-g5f0272dcd
the software that should make you happy
JMuonVeto.cc
Go to the documentation of this file.
1 
2 #include <string>
3 #include <iostream>
4 #include <iomanip>
5 #include <vector>
6 #include <set>
7 
12 
13 #include "JDAQ/JDAQEventIO.hh"
14 #include "JDAQ/JDAQTimesliceIO.hh"
16 
17 #include "JDetector/JDetector.hh"
20 
21 #include "JTrigger/JHit.hh"
22 #include "JTrigger/JFrame.hh"
23 #include "JTrigger/JTimeslice.hh"
24 #include "JTrigger/JHitL0.hh"
25 #include "JTrigger/JHitL1.hh"
26 #include "JTrigger/JHitR1.hh"
27 #include "JTrigger/JBuildL0.hh"
29 
33 #include "JSupport/JSupport.hh"
34 #include "JSupport/JMeta.hh"
35 
36 #include "JFit/JLine1Z.hh"
37 #include "JFit/JFitToolkit.hh"
38 #include "JFit/JTimeRange.hh"
39 
40 #include "JReconstruction/JEvt.hh"
42 
43 #include "Jeep/JParser.hh"
44 #include "Jeep/JMessage.hh"
45 
46 
47 /**
48  * \file
49  *
50  * Program to determine veto of muon trajectory.
51  * \author mdejong
52  */
53 int main(int argc, char **argv)
54 {
55  using namespace std;
56  using namespace JPP;
57  using namespace KM3NETDAQ;
58 
59  typedef vector<JTimeRange> JVeto_t;
60  typedef JParallelFileScanner< JTypeList<JDAQEvent, JEvt> > JParallelFileScanner_t;
61  typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
63 
64  JParallelFileScanner_t inputFile;
66  JLimit_t& numberOfEvents = inputFile.getLimit();
67  string detectorFile;
68  double roadWidth_m;
69  double R_Hz;
70  size_t numberOfPrefits;
71  JVeto_t veto;
72  bool reprocess;
73  int debug;
74 
75  try {
76 
77  JParser<> zap("Program to determine veto of muon trajectory.");
78 
79  zap['f'] = make_field(inputFile);
80  zap['o'] = make_field(outputFile) = "veto.root";
81  zap['a'] = make_field(detectorFile);
82  zap['n'] = make_field(numberOfEvents) = JLimit::max();
83  zap['R'] = make_field(roadWidth_m) = numeric_limits<double>::max();
84  zap['B'] = make_field(R_Hz) = 6.0e3;
85  zap['N'] = make_field(numberOfPrefits) = 1;
86  zap['V'] = make_field(veto);
87  zap['r'] = make_field(reprocess);
88  zap['d'] = make_field(debug) = 1;
89 
90  zap(argc, argv);
91  }
92  catch(const exception& error) {
93  FATAL(error.what() << endl);
94  }
95 
96 
98 
99  try {
100  load(detectorFile, detector);
101  }
102  catch(const JException& error) {
103  FATAL(error);
104  }
105 
106  const JModuleRouter router(detector);
107 
108  typedef vector<JHitL0> JDataL0_t;
109  const JBuildL0<JHitL0> buildL0;
110 
111  double VS = 0.0; // veto [s]
112 
113  for (vector<JTimeRange>::const_iterator vs = veto.begin(); vs != veto.end(); ++vs) {
114  VS += vs->getLength() * 1.0e-9;
115  }
116 
117 
118  outputFile.open();
119 
120  outputFile.put(JMeta(argc, argv));
121 
122  while (inputFile.hasNext()) {
123 
124  STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
125 
126  multi_pointer_type ps = inputFile.next();
127 
128  const JDAQEvent* tev = ps;
129  const JEvt* in = ps;
130 
131  JEvt cp = *in;
132  JEvt out;
133 
134  cp.select(numberOfPrefits, qualitySorter);
135 
136 
137  JDataL0_t dataL0;
138 
139  buildL0(*tev, router, true, back_inserter(dataL0));
140 
141 
142  for (JEvt::iterator track = cp.begin(); track != cp.end(); ++track) {
143 
144  const JRotation3D R (getDirection(*track));
145  const JLine1Z tz(getPosition (*track).rotate(R), track->getT());
146 
147  // hit selection based on start value
148 
150 
151  for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
152 
153  JHitL0 hit(*i);
154 
155  hit.rotate(R);
156 
157  bool is_veto = false;
158 
159  if (tz.getDistance(hit) <= roadWidth_m) {
160 
161  const double t1 = hit.getT() - tz.getT(hit);
162 
163  for (vector<JTimeRange>::const_iterator vs = veto.begin(); vs != veto.end() && !is_veto; ++vs) {
164  is_veto = (*vs)(t1);
165  }
166  }
167 
168  if (is_veto) {
169  top.insert(hit.getPMTIdentifier());
170  }
171  }
172 
173 
174  double npe = 0.0;
175  int count = 0;
176 
177  for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
178 
179  JPosition3D pos(module->getPosition());
180 
181  pos.rotate(R);
182 
183  if (tz.getDistance(pos) <= roadWidth_m) {
184 
185  for (unsigned int i = 0; i != module->size(); ++i) {
186 
187  const JDAQPMTIdentifier id(module->getID(), i);
188 
189  npe += R_Hz * VS;
190  count += top.count(id);
191  }
192  }
193  }
194 
195  out.push_back(JFit(*track).add(JMUONVETO));
196 
197  out.rbegin()->setW(track->getW());
198  out.rbegin()->setW(JVETO_NPE, npe);
199  out.rbegin()->setW(JVETO_NUMBER_OF_HITS, count);
200  }
201 
202  // apply default sorter
203 
204  sort(out.begin(), out.end(), qualitySorter);
205 
206  outputFile.put(out);
207  }
208  STATUS(endl);
209 
211 
212  io >> outputFile;
213 
214  outputFile.close();
215 }
string outputFile
Data structure for detector geometry and calibration.
Recording of objects on file according a format that follows from the file name extension.
Auxiliary methods to evaluate Poisson probabilities and chi2.
Basic data structure for L0 hit.
Basic data structure for L1 hit.
Reduced data structure for L1 hit.
General purpose messaging.
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
#define STATUS(A)
Definition: JMessage.hh:63
#define FATAL(A)
Definition: JMessage.hh:67
int debug
debug level
Definition: JSirene.cc:69
ROOT I/O of application specific meta data.
Direct access to module in detector data structure.
int main(int argc, char **argv)
Definition: JMuonVeto.cc:53
Parallel scanning of objects from a single file or multiple files according a format that follows fro...
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2142
Scanning of objects from a single file according a format that follows from the extension of each fil...
ROOT TTree parameter settings of various packages.
Basic data structure for time and time over threshold information of hit.
Detector data structure.
Definition: JDetector.hh:96
Router for direct addressing of module data in detector data structure.
JFit & add(const int type)
Add event to history.
Data structure for fit of straight line paralel to z-axis.
Definition: JLine1Z.hh:29
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
Definition: JLine1Z.hh:114
double getDistance(const JVector3D &pos) const
Get distance.
Definition: JLine1Z.hh:102
JAxis3D & rotate(const JRotation3D &R)
Rotate axis.
Definition: JAxis3D.hh:225
Data structure for position in three dimensions.
Definition: JPosition3D.hh:38
JPosition3D & rotate(const JRotation3D &R)
Rotate.
Definition: JPosition3D.hh:186
Rotation matrix.
Definition: JRotation3D.hh:114
General exception.
Definition: JException.hh:24
Utility class to parse command line options.
Definition: JParser.hh:1698
Object writing to file.
General purpose class for parallel reading of objects from a single file or multiple files.
Object reading from a list of files.
Template specialisation of L0 builder for JHitL0 data type.
Definition: JBuildL0.hh:105
Data structure for L0 hit.
Definition: JHitL0.hh:31
double getT() const
Get calibrated time of hit.
const JDAQPMTIdentifier & getPMTIdentifier() const
Get PMT identifier.
static const int JMUONVETO
static const int JVETO_NPE
number of photo-electrons from JVeto.cc
static const int JVETO_NUMBER_OF_HITS
number of hits from JVeto.cc
JDirection3D getDirection(const Vec &dir)
Get direction.
JPosition3D getPosition(const Vec &pos)
Get position.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool qualitySorter(const JFit &first, const JFit &second)
Comparison of fit results.
std::vector< double > vs
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
Definition: JSTDTypes.hh:14
Detector file.
Definition: JHead.hh:227
Acoustic event fit.
Type list.
Definition: JTypeList.hh:23
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:45
const JLimit & getLimit() const
Get limit.
Definition: JLimit.hh:84
Auxiliary class for ROOT I/O of application specific meta data.
Definition: JMeta.hh:72