Fit function.
225 {
228
230
232
233
234
236
238
239 if (!in.empty()) {
241 }
242
243 for (JEvt::const_iterator track = in.begin(); track != in.end(); ++track) {
244
247
248 double zmin = numeric_limits<double>::lowest();
249
252 }
253
255
256 for (const auto& module : input.data) {
257
259
260 pos.transform(R, tz.getPosition());
261
263
264 const double z1 = pos.getZ() - pos.getX() /
getTanThetaC();
266
267 if (z1 >= zmin) {
268
269 for (size_t i = 0; i != module->size(); ++i) {
270
271 if (module.getStatus(i)) {
272
273 const struct {
274
276 {
277 return (hit.
getPMT() == pmt && T_ns(hit.
getT()));
278 }
279
281 const size_t pmt;
282
283 } match = { T_ns + t1, i };
284
285 JPMT pmt =
module->getPMT(i);
286
288
289 const JNPEHit hit(this->
getNPE(pmt, module.frame.getRate(i)), count_if(module.begin(), module.end(), match));
290
291 DEBUG(
"hit: " << setw(8) << module->getID() <<
'.' <<
FILL(2,
'0') << i <<
' '
293 <<
FIXED(7,3) << module.frame.getRate(i) * 1.0e-3 <<
' '
298 << setw(2) << hit.
getN() << endl);
299
301 }
302 }
303 }
304 }
305 }
306
308
309 if (NDF >= 0) {
310
311
312
313 const int N = 5;
314
316
317 for (int i = 0; i != N; ++i) {
319 }
320
322
323 do {
324
326
327 for (int i = 0; i != N; ++i) {
328
330
332 const double chi2 = (*this)(
x,
data.begin(),
data.end());
333
335 buffer[chi2] =
x.getE();
336 }
337
340 }
341 }
342
343
344 for (int i = 0; i != N; ++i) {
346 }
348
349
350
352
353 case 0:
357 break;
358
359 case 1:
362 break;
363
364 case 2:
367 break;
368
369 case 3:
372 break;
373
374 case 4:
378 break;
379 }
380
383
385
386
388
391
392 }
393
394 const double chi2 =
result[2].chi2;
395 const double E =
result[2].x.getE();
396
397
398
399 double Emin = numeric_limits<double>::max();
400 double Emax = numeric_limits<double>::lowest();
401
403 if (i->second < Emin) { Emin = i->second; }
404 if (i->second > Emax) { Emax = i->second; }
405 }
406
407 const double mu_range =
gWater(E);
408
409 double noise_likelihood = 0.0;
410 int number_of_hits = 0;
411
412 for (vector<JNPEHit>::const_iterator i =
data.begin(); i !=
data.end(); ++i) {
413 noise_likelihood += log10(
getP(i->getY0(), i->getN()));
414 number_of_hits += i->getN();
415 }
416
418
419 fit.push_back(event());
420
421
422
424
425 out.push_back(fit);
426
427
428
429 out.rbegin()->setW(track->getW());
440 }
441 }
442
443
444
446
447 copy(input.in.begin(), input.in.end(), back_inserter(out));
448
449 return out;
450 }
#define DEBUG(A)
Message macros.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
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 JMUONENERGY
static const int JENERGY_NDF
number of degrees of freedom from JEnergy.cc
static const int JENERGY_ENERGY
uncorrected energy [GeV] from JEnergy.cc
static const int JENERGY_NOISE_LIKELIHOOD
log likelihood of every hit being K40 from JEnergy.cc
static const int JENERGY_CHI2
chi2 from JEnergy.cc
static const int JENERGY_MUON_RANGE_METRES
range of a muon with the reconstructed energy [m] from JEnergy.cc
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 JEnergy.cc
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 JEnergy.cc
static const int JENERGY_MAXIMAL_ENERGY
maximal energy [GeV] from JEnergy.cc
void copy(const Head &from, JHead &to)
Copy header from from to to.
double getNPE(const Hit &hit)
Get true charge of hit.
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.
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.
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.