Fit function.
232 {
235
237
239
240
241
243
245
246 if (!in.empty()) {
248 }
249
250 for (JEvt::const_iterator track = in.begin(); track != in.end(); ++track) {
251
253
254
255
257
259
262 }
263
266
267 double zmin = numeric_limits<double>::lowest();
268
271 }
272
274
275 for (const auto& module : input.data) {
276
278
279 pos.transform(R, tz.getPosition());
280
282
283 const double z1 = pos.getZ() - pos.getX() /
getTanThetaC();
285
286 if (z1 >= zmin) {
287
288 for (size_t i = 0; i != module->size(); ++i) {
289
290 if (module.getStatus(i)) {
291
292 const struct {
293
295 {
296 return (hit.
getPMT() == pmt && T_ns(hit.
getT()));
297 }
298
300 const size_t pmt;
301
302 } match = { T_ns + t1, i };
303
305
307
308 JPMT pmt =
module->getPMT(i);
309
311
312 const JNPEHit hit(this->
getNPE(pmt, module.frame.getRate(i)), count_if(module.begin(), module.end(), match), ps);
313
314 DEBUG(
"hit: " << setw(8) << module->getID() <<
'.' <<
FILL(2,
'0') << i <<
' '
316 <<
FIXED(7,3) << module.frame.getRate(i) * 1.0e-3 <<
' '
321 << setw(2) << hit.
getN() << endl);
322
324 }
325 }
326 }
327 }
328 }
329
331
332 if (NDF >= 0) {
333
334
335
336 const int N = 5;
337
339
340 for (int i = 0; i != N; ++i) {
342 }
343
345
346 do {
347
349
350 for (int i = 0; i != N; ++i) {
351
353
355 const double chi2 = (*this)(
x,
data.begin(),
data.end());
356
358 buffer[chi2] =
x.getE();
359 }
360
363 }
364 }
365
366
367 for (int i = 0; i != N; ++i) {
369 }
371
372
373
375
376 case 0:
380 break;
381
382 case 1:
385 break;
386
387 case 2:
390 break;
391
392 case 3:
395 break;
396
397 case 4:
401 break;
402 }
403
406
408
409
411
414
415 }
416
417 const double chi2 =
result[2].chi2;
418 const double E =
result[2].x.getE();
419
420
421
422 double Emin = numeric_limits<double>::max();
423 double Emax = numeric_limits<double>::lowest();
424
426 if (i->second < Emin) { Emin = i->second; }
427 if (i->second > Emax) { Emax = i->second; }
428 }
429
430 const double mu_range =
gWater(E);
431
432 double noise_likelihood = 0.0;
433 int number_of_hits = 0;
434
435 for (vector<JNPEHit>::const_iterator i =
data.begin(); i !=
data.end(); ++i) {
436 noise_likelihood += log10(
getP(i->getY0(), i->getN()));
437 number_of_hits += i->getN();
438 }
439
440 fit.push_back(event());
441
442
443
445
446 out.push_back(fit);
447
448
449
460 }
461 }
462
463
464
466
467 copy(input.in.begin(), input.in.end(), back_inserter(out));
468
469 return out;
470 }
#define DEBUG(A)
Message macros.
const JPMTParameters & getPMTParameters(const JPMTIdentifier &id) const
Get PMT parameters.
Data structure for PMT geometry, calibration and status.
Data structure for fit of energy.
Data structure for fit of straight line paralel to z-axis.
void transform(const JAxis3D &axis)
Transform axis to reference frame of given axis.
Data structure for position in three dimensions.
double getY() const
Get y position.
double getX() const
Get x position.
JEvt operator()(const input_type &input)
Fit function.
Reduced data structure for L0 hit.
JPMT_t getPMT() const
Get PMT.
int getN() const
Get count.
double getT() const
Get calibrated time of hit.
static const int JSTART_ZMAX_M
end position of track see JRECONSTRUCTION::JMuonStart
static const int JENERGY_NDF
number of degrees of freedom see JRECONSTRUCTION::JMuonEnergy
static const int JENERGY_ENERGY
uncorrected energy [GeV] see JRECONSTRUCTION::JMuonEnergy
static const int JENERGY_NOISE_LIKELIHOOD
log likelihood of every hit being K40 see JRECONSTRUCTION::JMuonEnergy
static const int JENERGY_CHI2
chi2 see JRECONSTRUCTION::JMuonEnergy
static const int JENERGY_MUON_RANGE_METRES
range of a muon with the reconstructed energy [m] see JRECONSTRUCTION::JMuonEnergy
static const int JPP_COVERAGE_POSITION
coverage of dynamic position calibration of this event
static const int JENERGY_NUMBER_OF_HITS
number of hits see JRECONSTRUCTION::JMuonEnergy
static const int JSTART_LENGTH_METRES
distance between projected positions on the track of optical modules for which the response does not ...
static const int JSTART_ZMIN_M
start position of track see JRECONSTRUCTION::JMuonStart
static const int JPP_COVERAGE_ORIENTATION
coverage of dynamic orientation calibration of this event
static const int JENERGY_MINIMAL_ENERGY
minimal energy [GeV] see JRECONSTRUCTION::JMuonEnergy
static const int JENERGY_MAXIMAL_ENERGY
maximal energy [GeV] see JRECONSTRUCTION::JMuonEnergy
double getNPE(const Hit &hit)
Get true charge of hit.
double getSurvivalProbability(const JPMTParameters ¶meters)
Get model dependent probability that a one photo-electron hit survives the simulation of the PMT assu...
double getP(const double expval, bool hit)
Get Poisson probability to observe a hit or not for given expectation value for the number of hits.
T pow(const T &x, const double y)
Power .
double getKappaC()
Get average R-dependence of arrival time of Cherenkov light (a.k.a.
const double getInverseSpeedOfLight()
Get inverse speed of light.
static const JGeaneWater gWater
Function object for energy loss of muon in sea water.
double getTanThetaC()
Get average tangent of Cherenkov angle of water corresponding to group velocity.
JPosition3D getPosition(const JFit &fit)
Get position.
void copy(const JFIT::JEvt::const_iterator __begin, const JFIT::JEvt::const_iterator __end, Evt &out)
Copy tracks.
bool qualitySorter(const JFit &first, const JFit &second)
Comparison of fit results.
JDirection3D getDirection(const JFit &fit)
Get direction.
Auxiliary data structure for sequence of same character.
Auxiliary data structure for floating point format specification.
Auxiliary class to test history.
Auxiliary class for simultaneously handling light yields and response of PMT.
size_t numberOfPrefits
number of prefits
double resolution
energy resolution [log10(GeV)]
double EMin_log
minimal energy [log10(GeV)]
double ZMin_m
minimal z-position [m]
double EMax_log
maximal energy [log10(GeV)]
Auxiliary data structure for floating point format specification.