AliRoot Core  ee782a0 (ee782a0)
AliMFTTrackExtrap.h
Go to the documentation of this file.
1 #ifndef AliMFTTrackExtrap_H
2 #define AliMFTTrackExtrap_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice */
5 
6 /*$Id$*/
7 // Revision of includes 07/05/2004
8 
16 
17 #include <TObject.h>
18 #include <TMatrixD.h>
19 
20 class AliMagF;
21 class AliMFTTrackParam;
22 
23 class AliMFTTrackExtrap : public TObject
24 {
25  public:
27  AliMFTTrackExtrap() : TObject(){};
29  virtual ~AliMFTTrackExtrap(){};
30 
31  static void SetField();
32 
34  static Bool_t IsFieldON() {return fgFieldON;}
35 
36  static Double_t GetImpactParamFromBendingMomentum(Double_t bendingMomentum);
37  static Double_t GetBendingMomentumFromImpactParam(Double_t impactParam);
38 
39  // Linearly extrapolate track parameters
40  static void LinearExtrapToZ(AliMFTTrackParam* trackParam, Double_t zEnd);
41 
42  // Linearly extrapolate track parameters and covariances
43  static void LinearExtrapToZCov(AliMFTTrackParam* trackParam, Double_t zEnd, Bool_t updatePropagator = kFALSE);
44 
45  // Extrapolate track parameters in magnetic field
46  static Bool_t ExtrapToZ(AliMFTTrackParam *trackParam, Double_t zEnd);
47 
48  // Extrapolate track parameters and covariances in magnetic field
49  static Bool_t ExtrapToZCov(AliMFTTrackParam* trackParam, Double_t zEnd, Bool_t updatePropagator = kFALSE);
50 
51  // Extrapolate track parameters to vertex, corrected for multiple scattering and energy loss effects
52  // Add branson correction resolution and energy loss fluctuation to parameter covariances
53  static void ExtrapToVertex(AliMFTTrackParam* trackParam,
54  Double_t xVtx, Double_t yVtx, Double_t zVtx,
55  Double_t errXVtx, Double_t errYVtx);
56 
57  // Extrapolate track parameters to vertex, corrected for multiple scattering effects only
58  // Add branson correction resolution to parameter covariances
59  static void ExtrapToVertexWithoutELoss(AliMFTTrackParam* trackParam,
60  Double_t xVtx, Double_t yVtx, Double_t zVtx,
61  Double_t errXVtx, Double_t errYVtx);
62 
63  // Extrapolate track parameters to vertex, corrected for energy loss effects only
64  // Add dispersion due to multiple scattering and energy loss fluctuation to parameter covariances
65  static void ExtrapToVertexWithoutBranson(AliMFTTrackParam* trackParam, Double_t zVtx);
66 
67  // Extrapolate track parameters to vertex without multiple scattering and energy loss corrections
68  // Add dispersion due to multiple scattering to parameter covariances
69  static void ExtrapToVertexUncorrected(AliMFTTrackParam* trackParam, Double_t zVtx);
70 
71  static Double_t TotalMomentumEnergyLoss(AliMFTTrackParam* trackParam, Double_t xVtx, Double_t yVtx, Double_t zVtx);
72 
73  static Double_t GetMCSAngle2(const AliMFTTrackParam& param, Double_t dZ, Double_t x0);
74  static void AddMCSEffect(AliMFTTrackParam *param, Double_t dZ, Double_t x0);
75 
76  static Bool_t ExtrapOneStepRungekutta(Double_t charge, Double_t step, const Double_t* vect, Double_t* vout);
77 
78  static Double_t LinearRegression(Int_t nVal, Double_t *xVal, Double_t *yVal, Double_t &p0, Double_t &p1);
79  static Double_t Sagitta(Int_t nVal, Double_t *xVal, Double_t *yVal, Double_t &distL, Double_t &q2);
80  static Double_t QuadraticRegression(Int_t nVal, Double_t *xVal, Double_t *yVal, Double_t &p0, Double_t &p1, Double_t &p2);
81  static Double_t CircleRegression(Int_t nVal, Double_t *xVal, Double_t *yVal);
82 
83  private:
84  static const Double_t fgkSimpleBPosition;
85  static const Double_t fgkSimpleBLength;
86  static Double_t fgSimpleBValue;
87  static Bool_t fgFieldON;
88  static const Bool_t fgkUseHelix;
89  static const Int_t fgkMaxStepNumber;
90  static const Double_t fgkHelixStepLength;
91  static const Double_t fgkRungeKuttaMaxResidue;
92 
93  // Functions
94 
96  AliMFTTrackExtrap(const AliMFTTrackExtrap& trackExtrap);
98  AliMFTTrackExtrap& operator=(const AliMFTTrackExtrap& trackExtrap);
99 
100  static Bool_t ExtrapToZHelix(AliMFTTrackParam *trackParam, Double_t Z);
101  static Bool_t ExtrapToZRungekutta(AliMFTTrackParam *trackParam, Double_t Z);
102 
103  static void ConvertTrackParamForExtrap(AliMFTTrackParam* trackParam, Double_t forwardBackward, Double_t *v3);
104  static void RecoverTrackParam(Double_t *v3, Double_t Charge, AliMFTTrackParam* trackParam);
105 
106  static void ExtrapToVertex(AliMFTTrackParam* trackParam,
107  Double_t xVtx, Double_t yVtx, Double_t zVtx,
108  Double_t errXVtx, Double_t errYVtx,
109  Bool_t correctForMCS, Bool_t correctForEnergyLoss);
110 
111  static void AddMCSEffectInAbsorber(AliMFTTrackParam* trackParam, Double_t signedPathLength, Double_t f0, Double_t f1, Double_t f2);
112  static void CorrectMCSEffectInAbsorber(AliMFTTrackParam* param,
113  Double_t xVtx, Double_t yVtx, Double_t zVtx,
114  Double_t errXVtx, Double_t errYVtx,
115  Double_t absZBeg, Double_t pathLength, Double_t f0, Double_t f1, Double_t f2);
116  static void CorrectELossEffectInAbsorber(AliMFTTrackParam* param, Double_t eLoss, Double_t sigmaELoss2);
117  static Bool_t GetAbsorberCorrectionParam(Double_t trackXYZIn[3], Double_t trackXYZOut[3], Double_t pTotal,
118  Double_t &pathLength, Double_t &f0, Double_t &f1, Double_t &f2,
119  Double_t &meanRho, Double_t &totalELoss, Double_t &sigmaELoss2);
120 
121  static Double_t BetheBloch(Double_t pTotal, Double_t pathLength, Double_t rho, Double_t atomicZ, Double_t atomicZoverA);
122  static Double_t EnergyLossFluctuation(Double_t pTotal, Double_t pathLength, Double_t rho, Double_t atomicZoverA);
123 
124  static void Cov2CovP(const TMatrixD &param, TMatrixD &cov);
125  static void CovP2Cov(const TMatrixD &param, TMatrixD &cov);
126 
127  static void ExtrapOneStepHelix(Double_t charge, Double_t step, const Double_t *vect, Double_t *vout);
128  static void ExtrapOneStepHelix3(Double_t field, Double_t step, const Double_t *vect, Double_t *vout);
129 
130  ClassDef(AliMFTTrackExtrap, 0) // Tools for track extrapolation in ALICE dimuon spectrometer
131 };
132 
133 #endif
static const Double_t fgkSimpleBLength
! length of the dipole
static Bool_t IsFieldON()
return kTRUE if the field is switched ON
Track parameters in ALICE dimuon spectrometer.
static Double_t Sagitta(Int_t nVal, Double_t *xVal, Double_t *yVal, Double_t &distL, Double_t &q2)
static Double_t fgSimpleBValue
! magnetic field value at the centre
static Double_t GetBendingMomentumFromImpactParam(Double_t impactParam)
static void RecoverTrackParam(Double_t *v3, Double_t Charge, AliMFTTrackParam *trackParam)
virtual ~AliMFTTrackExtrap()
Destructor.
static Double_t EnergyLossFluctuation(Double_t pTotal, Double_t pathLength, Double_t rho, Double_t atomicZoverA)
void dZ()
Definition: CalibAlign.C:517
static Bool_t ExtrapToZRungekutta(AliMFTTrackParam *trackParam, Double_t Z)
static Double_t TotalMomentumEnergyLoss(AliMFTTrackParam *trackParam, Double_t xVtx, Double_t yVtx, Double_t zVtx)
static void LinearExtrapToZ(AliMFTTrackParam *trackParam, Double_t zEnd)
static void Cov2CovP(const TMatrixD &param, TMatrixD &cov)
static void CovP2Cov(const TMatrixD &param, TMatrixD &cov)
static void LinearExtrapToZCov(AliMFTTrackParam *trackParam, Double_t zEnd, Bool_t updatePropagator=kFALSE)
static const Double_t fgkHelixStepLength
! Step lenght for track extrapolation (used in Helix)
static void ConvertTrackParamForExtrap(AliMFTTrackParam *trackParam, Double_t forwardBackward, Double_t *v3)
static Double_t GetMCSAngle2(const AliMFTTrackParam &param, Double_t dZ, Double_t x0)
static const Double_t fgkRungeKuttaMaxResidue
! Maximal distance (in Z) to destination to stop the track extrapolation (used in Runge-Kutta) ...
static void ExtrapToVertex(AliMFTTrackParam *trackParam, Double_t xVtx, Double_t yVtx, Double_t zVtx, Double_t errXVtx, Double_t errYVtx)
AliMFTTrackExtrap()
Constructor.
static Double_t GetImpactParamFromBendingMomentum(Double_t bendingMomentum)
static Bool_t ExtrapToZHelix(AliMFTTrackParam *trackParam, Double_t Z)
static Bool_t fgFieldON
! kTRUE if the field is switched ON
static void AddMCSEffect(AliMFTTrackParam *param, Double_t dZ, Double_t x0)
static const Int_t fgkMaxStepNumber
! Maximum number of steps for track extrapolation
static Bool_t ExtrapToZ(AliMFTTrackParam *trackParam, Double_t zEnd)
static void ExtrapToVertexUncorrected(AliMFTTrackParam *trackParam, Double_t zVtx)
static void CorrectMCSEffectInAbsorber(AliMFTTrackParam *param, Double_t xVtx, Double_t yVtx, Double_t zVtx, Double_t errXVtx, Double_t errYVtx, Double_t absZBeg, Double_t pathLength, Double_t f0, Double_t f1, Double_t f2)
static Bool_t GetAbsorberCorrectionParam(Double_t trackXYZIn[3], Double_t trackXYZOut[3], Double_t pTotal, Double_t &pathLength, Double_t &f0, Double_t &f1, Double_t &f2, Double_t &meanRho, Double_t &totalELoss, Double_t &sigmaELoss2)
static void ExtrapToVertexWithoutBranson(AliMFTTrackParam *trackParam, Double_t zVtx)
static Double_t CircleRegression(Int_t nVal, Double_t *xVal, Double_t *yVal)
static void CorrectELossEffectInAbsorber(AliMFTTrackParam *param, Double_t eLoss, Double_t sigmaELoss2)
static const Bool_t fgkUseHelix
! Tell whether to use Helix or not (default is Runge-Kutta)
Class holding the parameter of a MFT Standalone Track.
static Bool_t ExtrapOneStepRungekutta(Double_t charge, Double_t step, const Double_t *vect, Double_t *vout)
static const Double_t fgkSimpleBPosition
! position of the dipole
static void AddMCSEffectInAbsorber(AliMFTTrackParam *trackParam, Double_t signedPathLength, Double_t f0, Double_t f1, Double_t f2)
static void SetField()
static Bool_t ExtrapToZCov(AliMFTTrackParam *trackParam, Double_t zEnd, Bool_t updatePropagator=kFALSE)
static void ExtrapOneStepHelix(Double_t charge, Double_t step, const Double_t *vect, Double_t *vout)
static Double_t BetheBloch(Double_t pTotal, Double_t pathLength, Double_t rho, Double_t atomicZ, Double_t atomicZoverA)
static void ExtrapToVertexWithoutELoss(AliMFTTrackParam *trackParam, Double_t xVtx, Double_t yVtx, Double_t zVtx, Double_t errXVtx, Double_t errYVtx)
static Double_t LinearRegression(Int_t nVal, Double_t *xVal, Double_t *yVal, Double_t &p0, Double_t &p1)
static Double_t QuadraticRegression(Int_t nVal, Double_t *xVal, Double_t *yVal, Double_t &p0, Double_t &p1, Double_t &p2)
static void ExtrapOneStepHelix3(Double_t field, Double_t step, const Double_t *vect, Double_t *vout)
class TMatrixT< Double_t > TMatrixD
AliMFTTrackExtrap & operator=(const AliMFTTrackExtrap &trackExtrap)
Not implemented.