22 #ifndef PNDFTSHOUGHTRACKCAND_H 23 #define PNDFTSHOUGHTRACKCAND_H 31 #include "FairLogger.h" 66 TVector3
getP(
const Double_t zLabSys)
const;
67 TVector3
getPos(
const Double_t zLabSys)
const;
68 Double_t
getXLabSys(
const Double_t zLabSys)
const;
76 return fZCoordLineParabola;
80 return fZCoordParabolaLine;
95 void throwError(
const TString s)
const {
throw std::runtime_error(s.Data()); };
96 void throwIfZOutOfRange(
const Double_t &zLabSys)
const 99 throwError(
"zLabSys is too small, track model is not valid in that region.");
101 throwError(
"zLabSys is too big, track model is not valid in that region.");
106 Double_t getQdivPzx()
const {
return fZxParabola.
getSecondVal(); };
108 inline Double_t getPYLab()
const;
109 inline std::pair<Double_t, Double_t> getPZPXLabLine(
const Double_t &zLabSys,
const PndFtsHoughTracklet *
const lineTracklet)
const;
110 inline std::pair<Double_t, Double_t> getPZPXLabParabola(
const Double_t &zLabSys)
const;
112 inline Double_t getXOrYLabForLine(
const Double_t &zLabSys,
const PndFtsHoughTracklet *
const lineTracklet)
const;
113 Double_t getXLabForParabola(
const Double_t &zLabSys)
const;
148 Double_t fZCoordLineParabola;
150 Double_t fZCoordParabolaLine;
159 if (0 < getQdivPzx()) {
166 Double_t PndFtsHoughTrackCand::getXOrYLabForLine(
const Double_t &zLabSys,
const PndFtsHoughTracklet *
const lineTracklet)
const 171 const Double_t intercept = lineTracklet->
getSecondVal();
173 const Double_t zshifted = zLabSys - zRefLabSys;
175 Double_t xOrYLabSys = tan(thetaRad) * zshifted + intercept;
180 std::pair<Double_t, Double_t> PndFtsHoughTrackCand::getPZPXLabParabola(
const Double_t &zLabSys)
const 185 const Double_t qDivPzx = getQdivPzx();
186 const Double_t pZx =
getCharge() / qDivPzx;
188 const Double_t pZLabSys = pZx *
cos(currentThetaRad);
189 const Double_t pXLabSys = pZx *
sin(currentThetaRad);
190 std::pair<Double_t, Double_t> pZPXLabSys(pZLabSys, pXLabSys);
195 std::pair<Double_t, Double_t> PndFtsHoughTrackCand::getPZPXLabLine(
const Double_t &,
const PndFtsHoughTracklet *
const lineTracklet)
const 200 const Double_t pZx =
getCharge() / qDivPzx;
202 const Double_t pZLabSys = pZx *
cos(thetaRad);
203 const Double_t pXLabSys = pZx *
sin(thetaRad);
204 std::pair<Double_t, Double_t> pZPXLabSys(pZLabSys, pXLabSys);
209 Double_t PndFtsHoughTrackCand::getPYLab()
const 214 std::pair<Double_t, Double_t> pZPXLabSys = getPZPXLabLine(zRefLabSys, &fZxLineBeforeDipole);
215 const Double_t pZLabSys = pZPXLabSys.first;
216 Double_t pYLabSys = tan(thetaZyRad) * pZLabSys;
PndTrackCand getPndTrackCand()
Double_t getZLineParabola()
friend F32vec4 cos(const F32vec4 &a)
Bool_t isComplete() const
void SetZxParabola(const PndFtsHoughTracklet zxParabola)
FairTrackParP getTrackParPForHit(const UInt_t i)
void SetZyLine(const PndFtsHoughTracklet zyLine)
ClassDef(PndFtsHoughTrackCand, 1)
Interface between PandaRoot (data input and output) and PndFtsHoughTrackFinder (implementation of PR ...
Double_t getZRefLabSys() const
TVector3 getP(const Double_t zLabSys) const
friend F32vec4 sin(const F32vec4 &a)
void SetZxLineBeforeDipole(const PndFtsHoughTracklet zxLineParabola)
Double_t getThetaZyRad(const Double_t) const
PndFtsHoughTrackCand(PndFtsHoughTrackerTask *trackerTask=nullptr)
Set pointer to tracker task (super important as it provides an I/O interface to PandaRoot) ...
Double_t getThetaZxRad(const Double_t zLabSys) const
Class for saving the result of one Hough transform for FTS PR.
TVector3 getPos(const Double_t zLabSys) const
Double_t getThetaRadVal() const
Double_t getXLabSys(const Double_t zLabSys) const
Double_t getZParabolaLine()
void SetZxLineBehindDipole(const PndFtsHoughTracklet zxParabolaLine)
Class for saving a FTS track cand. for Hough transform based FTS PR.
Double_t getSecondVal() const