Belle II Software  release-06-01-15
PDFConstructor.h
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #pragma once
10 
11 #include <top/reconstruction_cpp/TOPTrack.h>
12 #include <top/reconstruction_cpp/InverseRaytracer.h>
13 #include <top/reconstruction_cpp/FastRaytracer.h>
14 #include <top/reconstruction_cpp/YScanner.h>
15 #include <top/reconstruction_cpp/SignalPDF.h>
16 #include <top/reconstruction_cpp/BackgroundPDF.h>
17 #include <top/reconstruction_cpp/DeltaRayPDF.h>
18 #include <top/geometry/TOPGeometryPar.h>
19 #include <vector>
20 #include <map>
21 #include <limits>
22 
23 namespace Belle2 {
28  namespace TOP {
29 
34 
35  public:
36 
40  enum EPDFOption {
41  c_Rough = 0,
42  c_Fine = 1,
43  c_Optimal = 2
44  };
45 
49  enum EStoreOption {
50  c_Reduced = 0,
51  c_Full = 1
52  };
53 
57  struct LogL {
58  double logL = 0;
59  double expPhotons = 0;
60  unsigned numPhotons = 0;
66  explicit LogL(double phot): logL(-phot), expPhotons(phot)
67  {}
68  };
69 
73  struct Pull {
74  int pixelID = 0;
75  double time = 0;
76  double peakT0 = 0;
77  double ttsT0 = 0;
78  double sigma = 0;
79  double phiCer = 0;
80  double wt = 0;
92  Pull(int pix, double t, double t0, double tts0, double sig, double phi, double w):
93  pixelID(pix), time(t), peakT0(t0), ttsT0(tts0), sigma(sig), phiCer(phi), wt(w)
94  {}
95  };
96 
105  PDFConstructor(const TOPTrack& track, const Const::ChargedStable& hypothesis,
106  EPDFOption PDFOption = c_Optimal, EStoreOption storeOption = c_Reduced, double overrideMass = 0);
107 
112  bool isValid() const {return m_valid;}
113 
117  void switchOffDeltaRayPDF() const {m_deltaPDFOn = false;}
118 
122  void switchOnDeltaRayPDF() const {m_deltaPDFOn = true;}
123 
128  void switchDeltaRayPDF(bool deltaPDFOn) const {m_deltaPDFOn = deltaPDFOn;}
129 
134  int getModuleID() const {return m_moduleID;}
135 
141 
146  const std::vector<TOPTrack::SelectedHit>& getSelectedHits() const {return m_selectedHits;}
147 
152  double getBkgRate() const {return m_bkgRate;}
153 
158  double getCosTotal() const {return m_cosTotal;}
159 
165  double getCosCerenkovAngle(double E) const;
166 
171  const std::vector<SignalPDF>& getSignalPDF() const {return m_signalPDFs;}
172 
178 
183  const DeltaRayPDF& getDeltaRayPDF() const {return m_deltaRayPDF;}
184 
189  double getExpectedSignalPhotons() const {return m_signalPhotons;}
190 
195  double getExpectedBkgPhotons() const {return m_bkgPhotons;}
196 
201  double getExpectedDeltaPhotons() const {return m_deltaPhotons;}
202 
208 
217  double getPDFValue(int pixelID, double time, double timeErr, double sigt = 0) const;
218 
223  LogL getLogL() const;
224 
231  LogL getLogL(double t0, double sigt = 0) const {return getLogL(t0, m_minTime, m_maxTime, sigt);}
232 
241  LogL getLogL(double t0, double minTime, double maxTime, double sigt = 0) const;
242 
249  const std::vector<LogL>& getPixelLogLs(double t0, double sigt = 0) const
250  {return getPixelLogLs(t0, m_minTime, m_maxTime, sigt);}
251 
260  const std::vector<LogL>& getPixelLogLs(double t0, double minTime, double maxTime, double sigt = 0) const;
261 
266  const std::vector<Pull>& getPulls() const;
267 
273  int getNCalls_setPDF(SignalPDF::EPeakType type) const {return m_ncallsSetPDF[type];}
274 
281 
282  private:
283 
287  struct PrismSolution {
288  double len = 0;
289  double L = 0;
290  double cosFic = 0;
291  double sinFic = 0;
292  };
293 
310  int solve(double xD, double zD, int, double, double,
311  const TOPTrack::AssumedEmission& assumedEmission,
312  const InverseRaytracer::CerenkovAngle& cer, double step = 0) const
313  {
314  return inverseRaytracer->solveDirect(xD, zD, assumedEmission, cer, step);
315  }
316  };
317 
337  int solve(double xD, double zD, int Nxm, double xmMin, double xmMax,
338  const TOPTrack::AssumedEmission& assumedEmission,
339  const InverseRaytracer::CerenkovAngle& cer, double step = 0) const
340  {
341  return inverseRaytracer->solveReflected(xD, zD, Nxm, xmMin, xmMax, assumedEmission, cer, step);
342  }
343  };
344 
355  template<class T>
356  void setSignalPDF(T& t, unsigned col, double xD, double zD, int Nxm = 0, double xmMin = 0, double xmMax = 0);
357 
363  const InverseRaytracer::CerenkovAngle& cerenkovAngle(double dE = 0);
364 
368  void setSignalPDF();
369 
373  void setSignalPDF_direct();
374 
378  void setSignalPDF_reflected();
379 
383  void setSignalPDF_prism();
384 
391  void setSignalPDF_reflected(int Nxm, double xmMin, double xmMax);
392 
401  bool detectionPositionX(double xM, int Nxm, std::vector<double>& xDs, double& minLen);
402 
411  bool doRaytracingCorrections(const InverseRaytracer::Solution& sol, double dFic_dx, double xD);
412 
420  double deltaXD(double dFic, const InverseRaytracer::Solution& sol, double xD);
421 
431  double propagationLosses(double E, double propLen, int nx, int ny, SignalPDF::EPeakType type) const;
432 
439  void expandSignalPDF(unsigned col, const YScanner::Derivatives& D, SignalPDF::EPeakType type);
440 
448  bool rangeOfX(double z, double& xmi, double& xma);
449 
460  double findReflectionExtreme(double xE, double zE, double zD, int Nxm, double A,
461  const RaytracerBase::Mirror& mirror) const;
462 
473  double derivativeOfReflectedX(double x, double xe, double ze, double zd) const;
474 
483  bool prismRaytrace(const PrismSolution& sol, double dL = 0, double dFic = 0, double de = 0);
484 
492  PrismSolution prismSolution(const PixelPositions::PixelData& pixel, unsigned k, int nx);
493 
500  PrismSolution prismSolution(const TVector3& rD, double L);
501 
510  double pdfValue(int pixelID, double time, double timeErr, double sigt = 0) const;
511 
518  double expectedPhotons(double minTime, double maxTime) const;
519 
525  void initializePixelLogLs(double minTime, double maxTime) const;
526 
531  void appendPulls(const TOPTrack::SelectedHit& hit) const;
532 
533  int m_moduleID = 0;
534  const TOPTrack& m_track;
538  const YScanner* m_yScanner = 0;
543  bool m_valid = false;
545  double m_beta = 0;
546  double m_tof = 0;
547  double m_groupIndex = 0;
549  double m_cosTotal = 0;
550  double m_minTime = 0;
551  double m_maxTime = 0;
552  std::vector<TOPTrack::SelectedHit> m_selectedHits;
553  double m_bkgRate = 0;
555  std::vector<SignalPDF> m_signalPDFs;
556  double m_signalPhotons = 0;
557  double m_bkgPhotons = 0;
558  double m_deltaPhotons = 0;
560  std::map<double, InverseRaytracer::CerenkovAngle> m_cerenkovAngles;
561  double m_dFic = 0;
562  double m_Fic = 0;
563  mutable std::map <SignalPDF::EPeakType, int> m_ncallsSetPDF;
564  mutable std::map <SignalPDF::EPeakType, int> m_ncallsExpandPDF;
565  mutable std::vector<LogL> m_pixelLLs;
566  mutable std::vector<Pull> m_pulls;
567  mutable bool m_deltaPDFOn = true;
569  };
570 
571  //--- inline functions ------------------------------------------------------------
572 
573  inline double PDFConstructor::pdfValue(int pixelID, double time, double timeErr, double sigt) const
574  {
575  unsigned k = pixelID - 1;
576  if (k < m_signalPDFs.size() and m_valid) {
577  double f = 0;
578  f += m_signalPhotons * m_signalPDFs[k].getPDFValue(time, timeErr, sigt);
579  if (m_deltaPDFOn) f += m_deltaPhotons * m_deltaRayPDF.getPDFValue(pixelID, time);
580  f += m_bkgPhotons * m_backgroundPDF->getPDFValue(pixelID);
581  return f;
582  }
583  return 0;
584  }
585 
586  inline double PDFConstructor::getPDFValue(int pixelID, double time, double timeErr, double sigt) const
587  {
588  return pdfValue(pixelID, time, timeErr, sigt) / getExpectedPhotons();
589  }
590 
591  inline double PDFConstructor::deltaXD(double dFic, const InverseRaytracer::Solution& sol, double xD)
592  {
593  m_dFic = dFic;
595  if (not m_fastRaytracer->getPropagationStatus()) return std::numeric_limits<double>::quiet_NaN();
596  return m_fastRaytracer->getXD() - xD;
597  }
598 
599  inline double PDFConstructor::getCosCerenkovAngle(double E) const
600  {
601  double refind = TOPGeometryPar::Instance()->getPhaseIndex(E);
602  return std::min(1 / m_beta / refind, 1.0);
603  }
604 
606  {
607  auto& cer = m_cerenkovAngles[dE];
608  if (cer.cosThc == 0 and cer.sinThc == 0) {
609  double meanE = m_yScanner->getMeanEnergy();
610  double cosThc = getCosCerenkovAngle(meanE + dE);
611  cer = InverseRaytracer::CerenkovAngle(cosThc);
612  }
613  return cer;
614  }
615 
616  template<class T>
617  void PDFConstructor::setSignalPDF(T& t, unsigned col, double xD, double zD, int Nxm, double xmMin, double xmMax)
618  {
619  m_ncallsSetPDF[t.type]++;
620 
622  t.inverseRaytracer = m_inverseRaytracer;
623 
624  // central solutions
625 
626  int i0 = t.solve(xD, zD, Nxm, xmMin, xmMax, m_track.getEmissionPoint(), cerenkovAngle());
627  if (i0 < 0 or not m_inverseRaytracer->getStatus()) return;
628  int n = 0;
629  for (unsigned i = 0; i < 2; i++) {
630  if (not m_inverseRaytracer->getStatus(i)) continue;
631  const auto& solutions = m_inverseRaytracer->getSolutions(i);
632  const auto& sol = solutions[i0];
633  double time = m_tof + sol.len * m_groupIndex / Const::speedOfLight;
634  if (time > m_maxTime + 1.0) continue;
635  n++;
636  }
637  if (n == 0) return;
638 
639  // solutions with xD displaced by dx
640 
641  double dx = 0.1; // cm
642  int i_dx = t.solve(xD + dx, zD, Nxm, xmMin, xmMax, m_track.getEmissionPoint(), cerenkovAngle(), dx);
643  if (i_dx < 0) return;
644  int k = 0;
645  while (m_inverseRaytracer->isNymDifferent()) { // get rid of discontinuities
646  if (k > 8) {
647  B2DEBUG(20, "TOP::PDFConstructor::setSignalPDF: failed to find the same Nym (dx)");
648  return;
649  }
650  dx = - dx / 2;
651  i_dx = t.solve(xD + dx, zD, Nxm, xmMin, xmMax, m_track.getEmissionPoint(), cerenkovAngle(), dx);
652  if (i_dx < 0) return;
653  k++;
654  }
655 
656  // solutions with emission point displaced by dL
657 
658  double dL = 0.1; // cm
659  int i_dL = t.solve(xD, zD, Nxm, xmMin, xmMax, m_track.getEmissionPoint(dL), cerenkovAngle(), dL);
660  if (i_dL < 0) return;
661  k = 0;
662  while (m_inverseRaytracer->isNymDifferent()) { // get rid of discontinuities
663  if (k > 8) {
664  B2DEBUG(20, "TOP::PDFConstructor::setSignalPDF: failed to find the same Nym (dL)");
665  return;
666  }
667  dL = - dL / 2;
668  i_dL = t.solve(xD, zD, Nxm, xmMin, xmMax, m_track.getEmissionPoint(dL), cerenkovAngle(), dL);
669  if (i_dL < 0) return;
670  k++;
671  }
672 
673  // solutions with photon energy changed by de
674 
675  double de = 0.1; // eV
676  int i_de = t.solve(xD, zD, Nxm, xmMin, xmMax, m_track.getEmissionPoint(), cerenkovAngle(de), de);
677  if (i_de < 0) return;
678  k = 0;
679  while (m_inverseRaytracer->isNymDifferent()) { // get rid of discontinuities
680  if (k > 8) {
681  B2DEBUG(20, "TOP::PDFConstructor::setSignalPDF: failed to find the same Nym (de)");
682  return;
683  }
684  de = - de / 2;
685  i_de = t.solve(xD, zD, Nxm, xmMin, xmMax, m_track.getEmissionPoint(), cerenkovAngle(de), de);
686  if (i_de < 0) return;
687  k++;
688  }
689 
690  // loop over the two solutions, compute the derivatives, do ray-tracing corrections and expand PDF in y
691 
692  for (unsigned i = 0; i < 2; i++) {
693  if (not m_inverseRaytracer->getStatus(i)) continue;
694  const auto& solutions = m_inverseRaytracer->getSolutions(i);
695  const auto& sol = solutions[i0];
696  const auto& sol_dx = solutions[i_dx];
697  const auto& sol_de = solutions[i_de];
698  const auto& sol_dL = solutions[i_dL];
699  YScanner::Derivatives D(sol, sol_dx, sol_de, sol_dL);
700  m_dFic = 0;
701  bool ok = doRaytracingCorrections(sol, D.dFic_dx, xD);
702  if (not ok) continue;
703 
705  if (time > m_maxTime) continue;
706 
707  m_Fic = sol.getFic() + m_dFic;
708 
709  expandSignalPDF(col, D, t.type);
710  }
711  }
712 
713  } // namespace TOP
715 } // namespace Belle2
Provides a type-safe way to pass members of the chargedStableSet set.
Definition: Const.h:470
static const double speedOfLight
[cm/ns]
Definition: Const.h:575
Parametrization of background PDF in pixels of single module.
Definition: BackgroundPDF.h:23
double getPDFValue(int pixelID) const
Returns PDF value for given pixel.
Parametrization of delta-ray PDF in pixels of single module.
Definition: DeltaRayPDF.h:27
double getPDFValue(int pixelID, double time) const
Returns PDF value at given time and pixel.
Definition: DeltaRayPDF.cc:112
Fast photon propagation in quartz optics.
Definition: FastRaytracer.h:26
double getPropagationLen() const
Returns total propagation length since initial position.
void propagate(const PhotonState &photon, bool averaging=false) const
Propagate photon to photo-detector plane.
bool getPropagationStatus() const
Returns propagation status.
Definition: FastRaytracer.h:68
double getXD() const
Returns unfolded position in x at virtual Detector plane.
Utility for solving inverse ray-tracing problem.
int solveReflected(double xD, double zD, int Nxm, double xmMin, double xmMax, const TOPTrack::AssumedEmission &assumedEmission, const CerenkovAngle &cer, double step=0) const
Solve inverse ray-tracing for reflected photon.
PhotonState getReconstructedPhoton(const Solution &sol, double DFic=0) const
Returns reconstructed photon at emission for a given solution of inverse raytracing.
bool getStatus() const
Returns status.
bool isNymDifferent() const
Checks if Nym differs between solutions front and back in at least one of the vectors.
int solveDirect(double xD, double zD, const TOPTrack::AssumedEmission &assumedEmission, const CerenkovAngle &cer, double step=0) const
Solve inverse ray-tracing for direct photon.
std::vector< Solution > & getSolutions(unsigned i) const
Returns the solutions of inverse ray-tracing.
void clear() const
Clear the solutions to prepare for the new round.
PDF construction and log likelihood determination for a given track and particle hypothesis.
double m_cosTotal
cosine of total reflection angle
void setSignalPDF_prism()
Sets signal PDF for track crossing prism.
double expectedPhotons(double minTime, double maxTime) const
Returns the expected number of photons within given time window.
void setSignalPDF()
Sets signal PDF.
double m_bkgRate
estimated background hit rate
LogL getLogL(double t0, double sigt=0) const
Returns extended log likelihood for PDF shifted in time.
const Const::ChargedStable & getHypothesis() const
Returns particle hypothesis.
double getPDFValue(int pixelID, double time, double timeErr, double sigt=0) const
Returns PDF value.
double m_beta
particle hypothesis beta
const InverseRaytracer::CerenkovAngle & cerenkovAngle(double dE=0)
Returns cosine and sine of cerenkov angle.
int getNCalls_setPDF(SignalPDF::EPeakType type) const
Returns number of calls of template function setSignalPDF<T> for a given peak type.
bool detectionPositionX(double xM, int Nxm, std::vector< double > &xDs, double &minLen)
Calculates unfolded detection position from known reflection position on the mirror and emission poin...
void switchOnDeltaRayPDF() const
Include delta-ray PDF in log likelihood calculation (this is default)
const YScanner * m_yScanner
PDF expander in y.
std::vector< SignalPDF > m_signalPDFs
parameterized signal PDF in pixels (index = pixelID - 1)
void setSignalPDF_reflected()
Sets signal PDF for reflected photons.
double getBkgRate() const
Returns estimated background hit rate.
void switchOffDeltaRayPDF() const
Exclude delta-ray PDF in log likelihood calculation.
PrismSolution prismSolution(const PixelPositions::PixelData &pixel, unsigned k, int nx)
General solution of inverse raytracing in prism: iterative procedure calling basic solution.
std::map< SignalPDF::EPeakType, int > m_ncallsSetPDF
number of calls to setSignalPDF<T>
LogL getLogL() const
Returns extended log likelihood (using the default time window)
double m_maxTime
time window upper edge
const InverseRaytracer * m_inverseRaytracer
inverse ray-tracer
double m_minTime
time window lower edge
double getExpectedDeltaPhotons() const
Returns the expected number of delta-ray photons within the default time window.
bool isValid() const
Checks the object status.
EStoreOption m_storeOption
signal PDF storing option
double m_Fic
temporary storage for Cerenkov azimuthal angle
double getExpectedSignalPhotons() const
Returns the expected number of signal photons within the default time window.
double derivativeOfReflectedX(double x, double xe, double ze, double zd) const
Returns the derivative of reflected position at given x.
double m_groupIndex
group refractive index at mean photon energy
int getNCalls_expandPDF(SignalPDF::EPeakType type) const
Returns number of calls of function expandSignalPDF for a given peak type.
double m_bkgPhotons
expected number of background photons
const std::vector< LogL > & getPixelLogLs(double t0, double sigt=0) const
Returns extended log likelihoods in pixels for PDF shifted in time.
double propagationLosses(double E, double propLen, int nx, int ny, SignalPDF::EPeakType type) const
Returns photon propagation losses (bulk absorption, surface reflectivity, mirror reflectivity)
int getModuleID() const
Returns slot ID.
double m_deltaPhotons
expected number of delta-ray photons
const std::vector< Pull > & getPulls() const
Returns photon pulls w.r.t PDF peaks.
double getCosCerenkovAngle(double E) const
Returns cosine of Cerenkov angle at given photon energy.
double getCosTotal() const
Returns cosine of total reflection angle.
double m_signalPhotons
expected number of signal photons
std::map< SignalPDF::EPeakType, int > m_ncallsExpandPDF
number of calls to expandSignalPDF
void appendPulls(const TOPTrack::SelectedHit &hit) const
Appends pulls of a photon hit.
double getExpectedPhotons() const
Returns the expected number of photons within the default time window.
bool m_valid
cross-check flag, true if track is valid and all the pointers above are valid
DeltaRayPDF m_deltaRayPDF
delta-ray PDF
double deltaXD(double dFic, const InverseRaytracer::Solution &sol, double xD)
Returns the difference in xD between ray-traced solution rotated by dFic and input argument.
bool doRaytracingCorrections(const InverseRaytracer::Solution &sol, double dFic_dx, double xD)
Corrects the solution of inverse ray-tracing with fast ray-tracing.
std::vector< Pull > m_pulls
photon pulls w.r.t PDF peaks
const FastRaytracer * m_fastRaytracer
fast ray-tracer
double findReflectionExtreme(double xE, double zE, double zD, int Nxm, double A, const RaytracerBase::Mirror &mirror) const
Finds the position on the mirror of the extreme reflection.
const std::vector< SignalPDF > & getSignalPDF() const
Returns signal PDF.
const BackgroundPDF * getBackgroundPDF() const
Returns background PDF.
EStoreOption
Options for storing signal PDF parameters.
@ c_Reduced
only PDF peak data
@ c_Full
also extra information
const TOPTrack & m_track
temporary reference to track at TOP
std::vector< LogL > m_pixelLLs
pixel log likelihoods (index = pixelID - 1)
EPDFOption m_PDFOption
signal PDF construction option
const BackgroundPDF * m_backgroundPDF
background PDF
bool m_deltaPDFOn
include/exclude delta-ray PDF in likelihood calculation
const std::vector< TOPTrack::SelectedHit > & getSelectedHits() const
Returns selected photon hits belonging to this slot.
EPDFOption
Signal PDF construction options.
@ c_Optimal
y dependent only where necessary
@ c_Fine
y dependent everywhere
@ c_Rough
no dependence on y
std::map< double, InverseRaytracer::CerenkovAngle > m_cerenkovAngles
sine and cosine of Cerenkov angles
double pdfValue(int pixelID, double time, double timeErr, double sigt=0) const
Returns the value of PDF normalized to the number of expected photons.
void expandSignalPDF(unsigned col, const YScanner::Derivatives &D, SignalPDF::EPeakType type)
Expands signal PDF in y (y-scan)
const Const::ChargedStable m_hypothesis
particle hypothesis
double getExpectedBkgPhotons() const
Returns the expected number of background photons within the default time window.
const DeltaRayPDF & getDeltaRayPDF() const
Returns delta-ray PDF.
bool prismRaytrace(const PrismSolution &sol, double dL=0, double dFic=0, double de=0)
Do forward raytracing of inverse raytracing solution in prism.
double m_groupIndexDerivative
derivative (dn_g/dE) of group refractive index at mean photon energy
void switchDeltaRayPDF(bool deltaPDFOn) const
Include or exclude delta-ray PDF in log likelihood calculation.
void initializePixelLogLs(double minTime, double maxTime) const
Initializes pixel log likelihoods.
bool rangeOfX(double z, double &xmi, double &xma)
Estimates range of unfolded x coordinate of the hits on given plane perpendicular to z-axis.
std::vector< TOPTrack::SelectedHit > m_selectedHits
selected photon hits
void setSignalPDF_direct()
Sets signal PDF for direct photons.
double m_dFic
temporary storage for dFic used in last call to deltaXD
double m_tof
time-of-flight from IP to average photon emission position
PDFConstructor(const TOPTrack &track, const Const::ChargedStable &hypothesis, EPDFOption PDFOption=c_Optimal, EStoreOption storeOption=c_Reduced, double overrideMass=0)
Class constructor.
EPeakType
Enumerator for single PDF peak types.
Definition: SignalPDF.h:32
@ c_Direct
direct photon
Definition: SignalPDF.h:34
@ c_Reflected
reflected photon
Definition: SignalPDF.h:35
static TOPGeometryPar * Instance()
Static method to obtain the pointer to its instance.
double getPhaseIndex(double energy) const
Returns phase refractive index of quartz at given photon energy.
Reconstructed track at TOP.
Definition: TOPTrack.h:40
const TOPTrack::AssumedEmission & getEmissionPoint(double dL=0) const
Returns assumed photon emission position and track direction.
Definition: TOPTrack.cc:355
Utility for expanding the PDF in y direction.
Definition: YScanner.h:31
double getMeanEnergy() const
Returns mean photon energy.
Definition: YScanner.h:337
Abstract base class for different kinds of events.
Sine and cosine of Cerenkov angle.
Solution of inverse ray-tracing.
Structure that enables defining a template function: direct photons.
const SignalPDF::EPeakType type
PDF peak type.
int solve(double xD, double zD, int, double, double, const TOPTrack::AssumedEmission &assumedEmission, const InverseRaytracer::CerenkovAngle &cer, double step=0) const
Solve inverse ray-tracing for direct photon.
const InverseRaytracer * inverseRaytracer
inverse ray-tracer
Structure that enables defining a template function: reflected photons.
const SignalPDF::EPeakType type
PDF peak type.
int solve(double xD, double zD, int Nxm, double xmMin, double xmMax, const TOPTrack::AssumedEmission &assumedEmission, const InverseRaytracer::CerenkovAngle &cer, double step=0) const
Solve inverse ray-tracing for reflected photon.
const InverseRaytracer * inverseRaytracer
inverse ray-tracer
Useful data type for returning the results of log likelihood calculation.
double expPhotons
expected number of photons
LogL(double phot)
Constructor.
unsigned numPhotons
detected number of photons
double logL
extended log likelihood
Solution of inverse raytracing in prism.
double L
emission position distance along particle trajectory
double cosFic
cosine of azimuthal Cerenkov angle
double sinFic
sine of azimuthal Cerenkov angle
Data type for storing photon pull w.r.t PDF peak.
double sigma
peak overall sigma (signal) or 0 (background)
double peakT0
PDF peak time (signal) or minimal PDF peak time in pixel (background)
double ttsT0
TTS gaussian peak time (signal) or 0 (background)
Pull(int pix, double t, double t0, double tts0, double sig, double phi, double w)
Constructor.
double phiCer
azimuthal Cerenkov angle (signal) or 0 (background)
position and size of a pixel
spherical mirror data in module local frame.
Definition: RaytracerBase.h:79
assumed photon emission point in local frame
Definition: TOPTrack.h:75
selected photon hit from TOPDigits
Definition: TOPTrack.h:84