Fit function.
231 {
234
236
238
239
240
242
244
245 if (!in.empty()) {
247 }
248
249 for (JEvt::const_iterator track = in.begin(); track != in.end(); ++track) {
250
253
254 double zmin = numeric_limits<double>::lowest();
255
258 }
259
261
262 for (const auto& module : input.data) {
263
265
266 pos.transform(R, tz.getPosition());
267
269
270 const double z1 = pos.getZ() - pos.getX() /
getTanThetaC();
272
273 if (z1 >= zmin) {
274
275 for (size_t i = 0; i != module->size(); ++i) {
276
277 if (module.getStatus(i)) {
278
279 const struct {
280
282 {
283 return (hit.
getPMT() == pmt && T_ns(hit.
getT()));
284 }
285
287 const size_t pmt;
288
289 } match = { T_ns + t1, i };
290
292
294
295 JPMT pmt =
module->getPMT(i);
296
298
299 const JNPEHit hit(this->
getNPE(pmt, module.frame.getRate(i)), count_if(module.begin(), module.end(), match), ps);
300
301 DEBUG(
"hit: " << setw(8) << module->getID() <<
'.' <<
FILL(2,
'0') << i <<
' '
303 <<
FIXED(7,3) << module.frame.getRate(i) * 1.0e-3 <<
' '
308 << setw(2) << hit.
getN() << endl);
309
311 }
312 }
313 }
314 }
315 }
316
318
319 if (NDF >= 0) {
320
321
322
323 const int N = 5;
324
326
327 for (int i = 0; i != N; ++i) {
329 }
330
332
333 do {
334
336
337 for (int i = 0; i != N; ++i) {
338
340
342 const double chi2 = (*this)(
x,
data.begin(),
data.end());
343
345 buffer[chi2] =
x.getE();
346 }
347
350 }
351 }
352
353
354 for (int i = 0; i != N; ++i) {
356 }
358
359
360
362
363 case 0:
367 break;
368
369 case 1:
372 break;
373
374 case 2:
377 break;
378
379 case 3:
382 break;
383
384 case 4:
388 break;
389 }
390
393
395
396
398
401
402 }
403
404 const double chi2 =
result[2].chi2;
405 const double E =
result[2].x.getE();
406
407
408
409 double Emin = numeric_limits<double>::max();
410 double Emax = numeric_limits<double>::lowest();
411
413 if (i->second < Emin) { Emin = i->second; }
414 if (i->second > Emax) { Emax = i->second; }
415 }
416
417 const double mu_range =
gWater(E);
418
419 double noise_likelihood = 0.0;
420 int number_of_hits = 0;
421
422 for (vector<JNPEHit>::const_iterator i =
data.begin(); i !=
data.end(); ++i) {
423 noise_likelihood += log10(
getP(i->getY0(), i->getN()));
424 number_of_hits += i->getN();
425 }
426
428
429 fit.push_back(event());
430
431
432
434
435 out.push_back(fit);
436
437
438
439 out.rbegin()->setW(track->getW());
450 }
451 }
452
453
454
456
457 copy(input.in.begin(), input.in.end(), back_inserter(out));
458
459 return out;
460 }
#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.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
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 JENERGY_NDF
number of degrees of freedom from JMuonEnergy
static const int JENERGY_ENERGY
uncorrected energy [GeV] from JMuonEnergy
static const int JENERGY_NOISE_LIKELIHOOD
log likelihood of every hit being K40 from JMuonEnergy
static const int JENERGY_CHI2
chi2 from JMuonEnergy
static const int JENERGY_MUON_RANGE_METRES
range of a muon with the reconstructed energy [m] from JMuonEnergy
static const int JPP_COVERAGE_POSITION
coverage of dynamic position calibration from any Jpp application
static const int JENERGY_NUMBER_OF_HITS
number of hits from 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 JPP_COVERAGE_ORIENTATION
coverage of dynamic orientation calibration from any Jpp application
static const int JENERGY_MINIMAL_ENERGY
minimal energy [GeV] from JMuonEnergy
static const int JENERGY_MAXIMAL_ENERGY
maximal energy [GeV] from 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.