AliRoot Core  3abf5b4 (3abf5b4)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliMUONTrackExtrap.h
Go to the documentation of this file.
1 #ifndef ALIMUONTRACKEXTRAP_H
2 #define ALIMUONTRACKEXTRAP_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 AliMUONTrackParam;
22 
23 class AliMUONTrackExtrap : public TObject
24 {
25  public:
27  AliMUONTrackExtrap() : TObject(){};
29  virtual ~AliMUONTrackExtrap(){};
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(AliMUONTrackParam* trackParam, Double_t zEnd);
41 
42  // Linearly extrapolate track parameters and covariances
43  static void LinearExtrapToZCov(AliMUONTrackParam* trackParam, Double_t zEnd, Bool_t updatePropagator = kFALSE);
44 
45  // Extrapolate track parameters in magnetic field
46  static Bool_t ExtrapToZ(AliMUONTrackParam *trackParam, Double_t zEnd);
47 
48  // Extrapolate track parameters and covariances in magnetic field
49  static Bool_t ExtrapToZCov(AliMUONTrackParam* 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(AliMUONTrackParam* 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(AliMUONTrackParam* 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(AliMUONTrackParam* 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(AliMUONTrackParam* trackParam, Double_t zVtx);
70 
71  static Double_t TotalMomentumEnergyLoss(AliMUONTrackParam* trackParam, Double_t xVtx, Double_t yVtx, Double_t zVtx);
72 
73  static Double_t GetMCSAngle2(const AliMUONTrackParam& param, Double_t dZ, Double_t x0);
74  static void AddMCSEffect(AliMUONTrackParam *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 
79  private:
80  static const Double_t fgkSimpleBPosition;
81  static const Double_t fgkSimpleBLength;
82  static Double_t fgSimpleBValue;
83  static Bool_t fgFieldON;
84  static const Bool_t fgkUseHelix;
85  static const Int_t fgkMaxStepNumber;
86  static const Double_t fgkHelixStepLength;
87  static const Double_t fgkRungeKuttaMaxResidue;
88 
89  // Functions
90 
92  AliMUONTrackExtrap(const AliMUONTrackExtrap& trackExtrap);
94  AliMUONTrackExtrap& operator=(const AliMUONTrackExtrap& trackExtrap);
95 
96  static Bool_t ExtrapToZHelix(AliMUONTrackParam *trackParam, Double_t Z);
97  static Bool_t ExtrapToZRungekutta(AliMUONTrackParam *trackParam, Double_t Z);
98 
99  static void ConvertTrackParamForExtrap(AliMUONTrackParam* trackParam, Double_t forwardBackward, Double_t *v3);
100  static void RecoverTrackParam(Double_t *v3, Double_t Charge, AliMUONTrackParam* trackParam);
101 
102  static void ExtrapToVertex(AliMUONTrackParam* trackParam,
103  Double_t xVtx, Double_t yVtx, Double_t zVtx,
104  Double_t errXVtx, Double_t errYVtx,
105  Bool_t correctForMCS, Bool_t correctForEnergyLoss);
106 
107  static void AddMCSEffectInAbsorber(AliMUONTrackParam* trackParam, Double_t signedPathLength, Double_t f0, Double_t f1, Double_t f2);
109  Double_t xVtx, Double_t yVtx, Double_t zVtx,
110  Double_t errXVtx, Double_t errYVtx,
111  Double_t absZBeg, Double_t pathLength, Double_t f0, Double_t f1, Double_t f2);
112  static void CorrectELossEffectInAbsorber(AliMUONTrackParam* param, Double_t eLoss, Double_t sigmaELoss2);
113  static Bool_t GetAbsorberCorrectionParam(Double_t trackXYZIn[3], Double_t trackXYZOut[3], Double_t pTotal,
114  Double_t &pathLength, Double_t &f0, Double_t &f1, Double_t &f2,
115  Double_t &meanRho, Double_t &totalELoss, Double_t &sigmaELoss2);
116 
117  static Double_t BetheBloch(Double_t pTotal, Double_t pathLength, Double_t rho, Double_t atomicZ, Double_t atomicZoverA);
118  static Double_t EnergyLossFluctuation(Double_t pTotal, Double_t pathLength, Double_t rho, Double_t atomicZoverA);
119 
120  static void Cov2CovP(const TMatrixD &param, TMatrixD &cov);
121  static void CovP2Cov(const TMatrixD &param, TMatrixD &cov);
122 
123  static void ExtrapOneStepHelix(Double_t charge, Double_t step, const Double_t *vect, Double_t *vout);
124  static void ExtrapOneStepHelix3(Double_t field, Double_t step, const Double_t *vect, Double_t *vout);
125 
126  ClassDef(AliMUONTrackExtrap, 0) // Tools for track extrapolation in ALICE dimuon spectrometer
127 };
128 
129 #endif
static const Double_t fgkRungeKuttaMaxResidue
! Maximal distance (in Z) to destination to stop the track extrapolation (used in Runge-Kutta) ...
static const Double_t fgkHelixStepLength
! Step lenght for track extrapolation (used in Helix)
static Bool_t ExtrapToZHelix(AliMUONTrackParam *trackParam, Double_t Z)
static void ExtrapToVertex(AliMUONTrackParam *trackParam, Double_t xVtx, Double_t yVtx, Double_t zVtx, Double_t errXVtx, Double_t errYVtx)
static void CorrectMCSEffectInAbsorber(AliMUONTrackParam *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 ExtrapOneStepRungekutta(Double_t charge, Double_t step, const Double_t *vect, Double_t *vout)
static const Double_t fgkSimpleBPosition
! position of the dipole
void dZ()
Definition: CalibAlign.C:517
static Bool_t ExtrapToZRungekutta(AliMUONTrackParam *trackParam, Double_t Z)
static void CorrectELossEffectInAbsorber(AliMUONTrackParam *param, Double_t eLoss, Double_t sigmaELoss2)
static const Bool_t fgkUseHelix
! Tell whether to use Helix or not (default is Runge-Kutta)
static Double_t BetheBloch(Double_t pTotal, Double_t pathLength, Double_t rho, Double_t atomicZ, Double_t atomicZoverA)
static Double_t TotalMomentumEnergyLoss(AliMUONTrackParam *trackParam, Double_t xVtx, Double_t yVtx, Double_t zVtx)
static Bool_t fgFieldON
! kTRUE if the field is switched ON
static void ExtrapToVertexUncorrected(AliMUONTrackParam *trackParam, Double_t zVtx)
Track parameters in ALICE dimuon spectrometer.
static void AddMCSEffectInAbsorber(AliMUONTrackParam *trackParam, Double_t signedPathLength, Double_t f0, Double_t f1, Double_t f2)
static Bool_t ExtrapToZ(AliMUONTrackParam *trackParam, Double_t zEnd)
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 const Double_t fgkSimpleBLength
! length of the dipole
static Double_t fgSimpleBValue
! magnetic field value at the centre
static const Int_t fgkMaxStepNumber
! Maximum number of steps for track extrapolation
static Bool_t ExtrapToZCov(AliMUONTrackParam *trackParam, Double_t zEnd, Bool_t updatePropagator=kFALSE)
static void LinearExtrapToZCov(AliMUONTrackParam *trackParam, Double_t zEnd, Bool_t updatePropagator=kFALSE)
static void LinearExtrapToZ(AliMUONTrackParam *trackParam, Double_t zEnd)
static void ConvertTrackParamForExtrap(AliMUONTrackParam *trackParam, Double_t forwardBackward, Double_t *v3)
static void Cov2CovP(const TMatrixD &param, TMatrixD &cov)
AliMUONTrackExtrap()
Constructor.
static void AddMCSEffect(AliMUONTrackParam *param, Double_t dZ, Double_t x0)
static Double_t GetImpactParamFromBendingMomentum(Double_t bendingMomentum)
static Double_t GetMCSAngle2(const AliMUONTrackParam &param, Double_t dZ, Double_t x0)
virtual ~AliMUONTrackExtrap()
Destructor.
static void RecoverTrackParam(Double_t *v3, Double_t Charge, AliMUONTrackParam *trackParam)
static void ExtrapToVertexWithoutBranson(AliMUONTrackParam *trackParam, Double_t zVtx)
AliMUONTrackExtrap & operator=(const AliMUONTrackExtrap &trackExtrap)
Not implemented.
static void ExtrapOneStepHelix(Double_t charge, Double_t step, const Double_t *vect, Double_t *vout)
static Double_t EnergyLossFluctuation(Double_t pTotal, Double_t pathLength, Double_t rho, Double_t atomicZoverA)
static void ExtrapOneStepHelix3(Double_t field, Double_t step, const Double_t *vect, Double_t *vout)
static Bool_t IsFieldON()
return kTRUE if the field is switched ON
static void CovP2Cov(const TMatrixD &param, TMatrixD &cov)
static void ExtrapToVertexWithoutELoss(AliMUONTrackParam *trackParam, Double_t xVtx, Double_t yVtx, Double_t zVtx, Double_t errXVtx, Double_t errYVtx)
static Double_t GetBendingMomentumFromImpactParam(Double_t impactParam)
Track parameters in ALICE dimuon spectrometer.