70{
74
76 typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
77
78 JParallelFileScanner_t inputFile;
80 string detectorFile;
81 string pdfFile;
84
85 try {
86
88
89 JParser<> zap(
"Program to evaluate hit probabilities.");
90
97
98 zap(argc, argv);
99 }
100 catch(const exception& error) {
101 FATAL(error.what() << endl);
102 }
103
104
105
106
109 }
110
112
113 try {
115 }
118 }
119
121
123
126
128
131
133
134 while (inputFile.hasNext()) {
135
136 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
137
138 multi_pointer_type ps = inputFile.next();
139
142
143 DEBUG(
"event: " << *tev << endl);
144
145 summary.update(*tev);
146
148
149 JDataL0_t dataL0;
150
151 buildL0(*tev, router, true, back_inserter(dataL0));
152
153 for (JEvt::const_iterator track = in->begin(); track != in->end(); ++track) {
154
155 DEBUG(
"track: " << *track << endl);
156
160
163 }
164
166
167
168
170
171 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
172
173 JHitW0 hit(*i, summary.getRate(*i, parameters.
R_Hz));
174
175 hit.rotate(R);
176
177 if (match(hit)) {
179 }
180 }
181
182
183
184 sort(
data.begin(),
data.end(), compare);
185
186 JDataW0_t::iterator __end = unique(
data.begin(),
data.end(), equal_to<JDAQPMTIdentifier>());
187
188
189 double E_GeV = parameters.
E_GeV;
190
191
192
193
194
195
197 <<
FIXED(12,3) << tz.getX() <<
' '
198 <<
FIXED(12,3) << tz.getY() <<
' '
199 <<
FIXED(12,3) << tz.getZ() <<
' '
200 <<
FIXED(12,3) << tz.getT() <<
' '
201 <<
FIXED(12,1) << E_GeV <<
' '
202 <<
FIXED( 8,3) << track->getQ() << endl);
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219 double Q = 0.0;
220
221 for (JDataW0_t::const_iterator hit =
data.begin(); hit != __end; ++hit) {
222
223 const double x = hit->getX() - tz.getX();
224 const double y = hit->getY() - tz.getY();
225 const double z = hit->getZ() - tz.getZ();
226 const double R = sqrt(x*x + y*y);
227
229
230 JDirection3D u(hit->getDX(), hit->getDY(), hit->getDZ());
231
233
234 const double theta = u.getTheta();
235 const double phi = fabs(u.getPhi());
236
237
238 const double E = E_GeV;
239 const double dt = T_ns.constrain(hit->getT() - t1);
240
243
244 H1 += H0;
245
246 const double chi2 = H1.getChi2() - H0.getChi2();
247
249 << setw(10) << hit->getModuleID() << ':' << setw( 2) << setfill('0') << hit->getPMTAddress() << setfill(' ') << ' '
250 <<
FIXED(12,1) << E <<
' '
251 <<
FIXED( 9,1) << R <<
' '
252 <<
FIXED( 6,4) << theta <<
' '
253 <<
FIXED( 6,4) << phi <<
' '
254 <<
FIXED( 8,3) << dt <<
' '
255 <<
FIXED(12,3) << chi2 << endl);
256
258 }
259
261
262
263 double Y = 0.0;
264
265 for (JDetector::const_iterator i =
detector.begin(); i !=
detector.end(); ++i) {
266
268
269 pos.transform(R, tz.getPosition());
270
272
274
275 module.transform(R, tz.getPosition());
276
277 for (JModule::iterator pmt = module.begin(); pmt != module.end(); ++pmt) {
278
279 const double R = sqrt(pmt->getX()*pmt->getX() + pmt->getY()*pmt->getY());
280 const double theta = pmt->getTheta();
281 const double phi = fabs(pmt->getPhi());
282 const double y = npe.calculate(1.0, R, theta, phi);
283
285 << setw(10) << module.
getID() <<
':' << setw( 2) << setfill(
'0') <<
distance(module.begin(),pmt) << setfill(
' ') <<
' '
286 <<
FIXED(9,1) << R <<
' '
287 <<
FIXED(6,4) << theta <<
' '
288 <<
FIXED(6,4) << phi <<
' '
290
292 }
293 }
294 }
295
297 }
298 }
300}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Router for direct addressing of module data in detector data structure.
Data structure for a composite optical module.
Data structure for fit of straight line paralel to z-axis.
Data structure for direction in three dimensions.
Data structure for position in three dimensions.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
int getID() const
Get identifier.
Utility class to parse command line options.
Auxiliary class for a hit with background rate value.
General purpose class for parallel reading of objects from a single file or multiple files.
File router for fast addressing of summary data.
static const int JSTART_LENGTH_METRES
distance between projected positions on the track of optical modules for which the response does not ...
JDirection3D getDirection(const Vec &dir)
Get direction.
JPosition3D getPosition(const Vec &pos)
Get position.
double getQuality(const JEvent &evt)
Get average quality.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
const double getInverseSpeedOfLight()
Get inverse speed of light.
double getTanThetaC()
Get average tangent of Cherenkov angle of water corresponding to group velocity.
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.
Auxiliary data structure for floating point format specification.
Model for fit to acoustics data.
Auxiliary data structure for muon PDF.
JFunction1D_t::result_type result_type
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Data structure for fit parameters.
double TTS_ns
transition-time spread [ns]
double TMin_ns
minimal time w.r.t. Cherenkov hypothesis [ns]
double roadWidth_m
road width [m]
double TMax_ns
maximal time w.r.t. Cherenkov hypothesis [ns]
double ZMax_m
maximal z-positon [m]
double ZMin_m
minimal z-positon [m]
double R_Hz
default rate [Hz]
size_t numberOfPrefits
number of prefits
Auxiliary class for defining the range of iterations of objects.
const JLimit & getLimit() const
Get limit.
static counter_type max()
Get maximum counter value.
Auxiliary data structure for floating point format specification.