Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JMuonVeto.cc File Reference

Program to determine veto of muon trajectory. More...

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Program to determine veto of muon trajectory.

Author
mdejong

Definition in file JMuonVeto.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 53 of file JMuonVeto.cc.

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
#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:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
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
Data structure for position in three dimensions.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
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 L0 hit builder.
Definition JBuildL0.hh:38
Data structure for L0 hit.
Definition JHitL0.hh:31
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.
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
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
static counter_type max()
Get maximum counter value.
Definition JLimit.hh:128
Auxiliary class for ROOT I/O of application specific meta data.
Definition JMeta.hh:72