LCOV - code coverage report
Current view: top level - MUON/MUONrec - AliMUONTrackExtrap.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 4 50.0 %
Date: 2016-06-14 17:26:59 Functions: 2 11 18.2 %

          Line data    Source code
       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             : 
       9             : /// \ingroup rec
      10             : /// \class AliMUONTrackExtrap
      11             : /// \brief Track parameters in ALICE dimuon spectrometer
      12             : ///
      13             : //////////////////////////////////////////////////////////////
      14             : /// Tools for track extrapolation in ALICE dimuon spectrometer
      15             : //////////////////////////////////////////////////////////////
      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:
      26             :         /// Constructor
      27           0 :   AliMUONTrackExtrap() : TObject(){};
      28             :         /// Destructor
      29           0 :   virtual ~AliMUONTrackExtrap(){};
      30             :   
      31             :   static void SetField();
      32             :   
      33             :   /// return kTRUE if the field is switched ON
      34        1072 :   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;     //!<! position of the dipole
      81             :   static const Double_t fgkSimpleBLength;       //!<! length of the dipole
      82             :   static       Double_t fgSimpleBValue;         //!<! magnetic field value at the centre
      83             :   static       Bool_t   fgFieldON;              //!<! kTRUE if the field is switched ON
      84             :   static const Bool_t   fgkUseHelix;            //!<! Tell whether to use Helix or not (default is Runge-Kutta)
      85             :   static const Int_t    fgkMaxStepNumber;       //!<! Maximum number of steps for track extrapolation
      86             :   static const Double_t fgkHelixStepLength;     //!<! Step lenght for track extrapolation (used in Helix)
      87             :   static const Double_t fgkRungeKuttaMaxResidue;//!<! Maximal distance (in Z) to destination to stop the track extrapolation (used in Runge-Kutta)
      88             :   
      89             :   // Functions
      90             : 
      91             :   /// Not implemented
      92             :   AliMUONTrackExtrap(const AliMUONTrackExtrap& trackExtrap);
      93             :   /// Not implemented
      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);
     108             :   static void CorrectMCSEffectInAbsorber(AliMUONTrackParam* param,
     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          18 :   ClassDef(AliMUONTrackExtrap, 0) // Tools for track extrapolation in ALICE dimuon spectrometer
     127             : };
     128             :         
     129             : #endif

Generated by: LCOV version 1.11