LCOV - code coverage report
Current view: top level - ITS/ITSbase - AliITStrackerMI.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 59 68 86.8 %
Date: 2016-06-14 17:26:59 Functions: 46 57 80.7 %

          Line data    Source code
       1             : #ifndef ALIITSTRACKERMI_H
       2             : #define ALIITSTRACKERMI_H
       3             : /* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
       4             :  * See cxx source for full Copyright notice                               */
       5             : 
       6             : /* $Id$ */
       7             : 
       8             : //-------------------------------------------------------------------------
       9             : //                          ITS tracker
      10             : //     reads AliITSclusterMI clusters and creates AliITStrackMI tracks
      11             : //           Origin: Marian Ivanov, CERN, Marian.Ivanov@cern.ch
      12             : //           Current support and development: 
      13             : //                     Andrea Dainese, andrea.dainese@lnl.infn.it
      14             : //-------------------------------------------------------------------------
      15             : 
      16             : class TTree;
      17             : class TTreeSRedirector;
      18             : class AliESDEvent;
      19             : 
      20             : class AliITSPlaneEff;
      21             : class AliITSChannelStatus;
      22             : class AliITSDetTypeRec;
      23             : class AliPlaneEff;
      24             : 
      25             : #include <TObjArray.h>
      26             : 
      27             : #include "AliITStrackMI.h"
      28             : #include "AliITSRecPoint.h"
      29             : #include "AliTracker.h"
      30             : #include "AliRefArray.h"
      31             : #include "AliITSPIDResponse.h"
      32             : 
      33             : //-------------------------------------------------------------------------
      34             : class AliITStrackerMI : public AliTracker {
      35             : public:
      36             :   AliITStrackerMI();
      37             :   AliITStrackerMI(const Char_t *geom);
      38             :   virtual ~AliITStrackerMI();
      39             :   AliCluster *GetCluster(Int_t index) const;
      40             :   virtual Bool_t GetTrackPoint(Int_t index, AliTrackPoint& p) const;
      41             :   virtual Bool_t GetTrackPointTrackingError(Int_t index, 
      42             :                         AliTrackPoint& p, const AliESDtrack *t);
      43             :   AliITSRecPoint *GetClusterLayer(Int_t layn, Int_t ncl) const
      44           0 :                         {return fgLayers[layn].GetCluster(ncl);}
      45             :   Int_t GetNumberOfClustersLayer(Int_t layn) const 
      46           0 :                         {return fgLayers[layn].GetNumberOfClusters();}
      47             :   Int_t LoadClusters(TTree *cf);
      48             :   void UnloadClusters();
      49             :   void FillClusterArray(TObjArray* array) const;
      50             :   Int_t Clusters2Tracks(AliESDEvent *event);
      51             :   Int_t PropagateBack(AliESDEvent *event);
      52             :   Int_t RefitInward(AliESDEvent *event);
      53             :   Bool_t RefitAt(Double_t x, AliITStrackMI *track, 
      54             :                  const AliITStrackMI *clusters, Bool_t extra=kFALSE, Bool_t planeeff=kFALSE);
      55             :   Bool_t RefitAt(Double_t x, AliITStrackMI *track, 
      56             :                  const Int_t *clusters, Bool_t extra=kFALSE, Bool_t planeeff=kFALSE);
      57             :   void SetupFirstPass(const Int_t *flags,const Double_t *cuts=0);
      58             :   void SetupSecondPass(const Int_t *flags,const Double_t *cuts=0);
      59             : 
      60           0 :   void SetLastLayerToTrackTo(Int_t l=0) {fLastLayerToTrackTo=l;} 
      61             :   void UseClusters(const AliKalmanTrack *t, Int_t from=0) const;
      62             : 
      63             :   void  GetDCASigma(const AliITStrackMI* track, Float_t & sigmarfi, Float_t &sigmaz);
      64             :   Double_t GetPredictedChi2MI(AliITStrackMI* track, const AliITSRecPoint *cluster,Int_t layer);
      65             :   Int_t UpdateMI(AliITStrackMI* track, const AliITSRecPoint* cl,Double_t chi2,Int_t layer) const;
      66           4 :   AliPlaneEff *GetPlaneEff() {return (AliPlaneEff*)fPlaneEff;}   // return the pointer to AliPlaneEff
      67           4 :   void SetDetTypeRec(const AliITSDetTypeRec *detTypeRec) {fkDetTypeRec = detTypeRec; ReadBadFromDetTypeRec(); }
      68          16 :   TObjArray* GetTrackHypothesys()  {return &fTrackHypothesys;}
      69          16 :   TObjArray* GetBestHypothesys()   {return &fBestHypothesys;}
      70          16 :   TObjArray* GetOriginal()         {return &fOriginal;}
      71          32 :   TTreeSRedirector *GetDebugStreamer() const {return fDebugStreamer;}
      72             :   static Int_t CorrectForTPCtoITSDeadZoneMaterial(AliITStrackMI *t);
      73             :   void  SetForceSkippingOfLayer();
      74       46228 :   Int_t ForceSkippingOfLayer(Int_t l) const { return fForceSkippingOfLayer[l]; }
      75             :   //
      76             :   // methods for debugging (RS) >>
      77             :   Int_t FindClusterOfTrack(int label, int lr, int* store) const;
      78             :   //  Int_t GetPattern(const AliITStrackMI* track, char* patt);
      79             :   // methods for debugging (RS) <<
      80             :   //
      81             :   class AliITSdetector { 
      82             :   public:
      83       17584 :     AliITSdetector():fR(0),fRmisal(0),fPhi(0),fSinPhi(0),fCosPhi(0),fYmin(0),fYmax(0),fZmin(0),fZmax(0),fIsBad(kFALSE),fNChips(0),fChipIsBad(0) {}
      84       17584 :     AliITSdetector(Double_t r,Double_t phi):fR(r),fRmisal(r),fPhi(phi),fSinPhi(TMath::Sin(phi)),fCosPhi(TMath::Cos(phi)),fYmin(10000),fYmax(-1000),fZmin(10000),fZmax(-1000),fIsBad(kFALSE),fNChips(0),fChipIsBad(0) {}
      85       30772 :     ~AliITSdetector() {if(fChipIsBad) delete [] fChipIsBad;}
      86             :     inline void GetGlobalXYZ( const AliITSRecPoint *cl, Double_t xyz[3]) const;
      87       48152 :     Double_t GetR()   const {return fR;}
      88       47604 :     Double_t GetRmisal()   const {return fRmisal;}
      89       78584 :     Double_t GetPhi() const {return fPhi;}
      90       11032 :     Double_t GetYmin() const {return fYmin;}
      91        1844 :     Double_t GetYmax() const {return fYmax;}
      92        1428 :     Double_t GetZmin() const {return fZmin;}
      93        1332 :     Double_t GetZmax() const {return fZmax;}
      94       15396 :     Bool_t   IsBad() const {return fIsBad;}
      95       11056 :     Int_t    GetNChips() const {return fNChips;}
      96       22112 :     Bool_t   IsChipBad(Int_t iChip) const {return (fChipIsBad ? fChipIsBad[iChip] : kFALSE);}
      97        8792 :     void SetRmisal(Double_t rmisal) {fRmisal = rmisal;}
      98         692 :     void SetYmin(Double_t min) {fYmin = min;}
      99         732 :     void SetYmax(Double_t max) {fYmax = max;}
     100         748 :     void SetZmin(Double_t min) {fZmin = min;}
     101         710 :     void SetZmax(Double_t max) {fZmax = max;}
     102         360 :     void SetBad() {fIsBad = kTRUE;}
     103             :     void ReadBadDetectorAndChips(Int_t ilayer,Int_t idet,const AliITSDetTypeRec *detTypeRec);
     104             :   private:
     105             :     AliITSdetector(const AliITSdetector& det);
     106             :     AliITSdetector & operator=(const AliITSdetector& det){
     107             :       this->~AliITSdetector();new(this) AliITSdetector(det);
     108             :       return *this;}
     109             :     Double_t fR;    // polar coordinates: r 
     110             :     Double_t fRmisal;    // polar coordinates: r, with misalignment 
     111             :     Double_t fPhi;  // polar coordinates: phi
     112             :     Double_t fSinPhi; // sin of phi;
     113             :     Double_t fCosPhi; // cos of phi 
     114             :     Double_t fYmin;   //  local y minimal
     115             :     Double_t fYmax;   //  local max y
     116             :     Double_t fZmin;   //  local z min
     117             :     Double_t fZmax;   //  local z max
     118             :     Bool_t fIsBad;    // is detector dead or noisy?
     119             :     Int_t fNChips;    // number of chips
     120             :     Bool_t *fChipIsBad; //[fNChips] is chip dead or noisy? 
     121             :   };
     122             : 
     123             :   class AliITSlayer {
     124             :   public:
     125             :     AliITSlayer();
     126             :     AliITSlayer(Double_t r, Double_t p, Double_t z, Int_t nl, Int_t nd);
     127             :     ~AliITSlayer();
     128             :     Int_t InsertCluster(AliITSRecPoint *c);
     129             :     void  SortClusters();
     130             :     void ResetClusters();
     131             :     void ResetWeights();
     132             :     void SelectClusters(Double_t zmin,Double_t zmax,Double_t ymin,Double_t ymax);
     133             :     const AliITSRecPoint *GetNextCluster(Int_t &ci,Bool_t test=kFALSE);
     134             :     void ResetRoad();
     135             :     Double_t GetRoad() const {return fRoad;}
     136      148776 :     Double_t GetR() const {return fR;}
     137             :     Int_t FindClusterIndex(Float_t z) const;
     138      218948 :     AliITSRecPoint *GetCluster(Int_t i) const {return i<fN ? fClusters[i]:0;} 
     139             :     //Float_t  *GetWeight(Int_t i)  {return i<fN ? &fClusterWeight[i]:0;}
     140      106576 :     AliITSdetector &GetDetector(Int_t n) const { return fDetectors[n]; }
     141             :     Int_t FindDetectorIndex(Double_t phi, Double_t z) const;
     142             :     Double_t GetThickness(Double_t y, Double_t z, Double_t &x0) const;
     143             :     Int_t InRoad() const ;
     144       19532 :     Int_t GetNumberOfClusters() const {return fN;}
     145          96 :     Int_t GetNladders() const {return fNladders;}
     146          96 :     Int_t GetNdetectors() const {return fNdetectors;}
     147             :     Int_t GetSkip() const {return fSkip;}
     148             :     void  SetSkip(Int_t skip){fSkip=skip;}
     149             :     void IncAccepted(){fAccepted++;}
     150             :     Int_t GetAccepted() const {return fAccepted;}    
     151       52188 :     Int_t GetClusterTracks(Int_t i, Int_t j) const {return int(fClusterTracks[i][j])-1;}
     152        3376 :     void SetClusterTracks(Int_t i, Int_t j, Int_t c) {fClusterTracks[i][j]=c+1;}
     153             :     Int_t FindClusterForLabel(Int_t label, Int_t *store) const; //RS
     154             :   protected:
     155             :     AliITSlayer(const AliITSlayer& layer);
     156             :     AliITSlayer & operator=(const AliITSlayer& layer){
     157             :       this->~AliITSlayer();new(this) AliITSlayer(layer);
     158             :       return *this;}
     159             :     Double_t fR;                // mean radius of this layer
     160             :     Double_t fPhiOffset;        // offset of the first detector in Phi
     161             :     Int_t fNladders;            // number of ladders
     162             :     Double_t fZOffset;          // offset of the first detector in Z
     163             :     Int_t fNdetectors;          // detectors/ladder
     164             :     AliITSdetector *fDetectors; // array of detectors
     165             :     Int_t fN;                   // number of clusters
     166             :     AliITSRecPoint *fClusters[AliITSRecoParam::kMaxClusterPerLayer]; // pointers to clusters
     167             :     UShort_t        fClusterIndex[AliITSRecoParam::kMaxClusterPerLayer]; // pointers to clusters
     168             :     Float_t fY[AliITSRecoParam::kMaxClusterPerLayer];                // y position of the clusters      
     169             :     Float_t fZ[AliITSRecoParam::kMaxClusterPerLayer];                // z position of the clusters      
     170             :     Float_t fYB[2];                                       // ymin and ymax
     171             :     //
     172             :     AliITSRecPoint *fClusters5[6][AliITSRecoParam::kMaxClusterPerLayer5]; // pointers to clusters -     slice in y
     173             :     UShort_t        fClusterIndex5[6][AliITSRecoParam::kMaxClusterPerLayer5]; // pointers to clusters -     slice in y    
     174             :     Float_t fY5[6][AliITSRecoParam::kMaxClusterPerLayer5];                // y position of the clusters  slice in y    
     175             :     Float_t fZ5[6][AliITSRecoParam::kMaxClusterPerLayer5];                // z position of the clusters  slice in y 
     176             :     Int_t fN5[6];                                       // number of cluster in slice
     177             :     Float_t fDy5;                                       //delta y
     178             :     Float_t fBy5[6][2];                                    //slice borders
     179             :     //
     180             :     AliITSRecPoint *fClusters10[11][AliITSRecoParam::kMaxClusterPerLayer10]; // pointers to clusters -     slice in y
     181             :     UShort_t        fClusterIndex10[11][AliITSRecoParam::kMaxClusterPerLayer10]; // pointers to clusters -     slice in y    
     182             :     Float_t fY10[11][AliITSRecoParam::kMaxClusterPerLayer10];                // y position of the clusters  slice in y    
     183             :     Float_t fZ10[11][AliITSRecoParam::kMaxClusterPerLayer10];                // z position of the clusters  slice in y 
     184             :     Int_t fN10[11];                                       // number of cluster in slice
     185             :     Float_t fDy10;                                        // delta y
     186             :     Float_t fBy10[11][2];                                 // slice borders
     187             :     //
     188             :     AliITSRecPoint *fClusters20[21][AliITSRecoParam::kMaxClusterPerLayer20]; // pointers to clusters -     slice in y
     189             :     UShort_t        fClusterIndex20[21][AliITSRecoParam::kMaxClusterPerLayer20]; // pointers to clusters -     slice in y    
     190             :     Float_t fY20[21][AliITSRecoParam::kMaxClusterPerLayer20];                // y position of the clusters  slice in y    
     191             :     Float_t fZ20[21][AliITSRecoParam::kMaxClusterPerLayer20];                // z position of the clusters  slice in y 
     192             :     Int_t fN20[21];                                       // number of cluster in slice
     193             :     Float_t fDy20;                                        //delta y 
     194             :     Float_t fBy20[21][2];                                 //slice borders
     195             :     //
     196             :     AliITSRecPoint** fClustersCs;                         //clusters table in current slice
     197             :     UShort_t *fClusterIndexCs;                            //cluster index in current slice 
     198             :     Float_t *fYcs;                                        //y position in current slice
     199             :     Float_t *fZcs;                                        //z position in current slice
     200             :     Int_t    fNcs;                                        //number of clusters in current slice    
     201             :     Int_t fCurrentSlice;                                  //current slice
     202             :     //
     203             :     //    Float_t  fClusterWeight[AliITSRecoParam::kMaxClusterPerLayer]; // probabilistic weight of the cluster //RS Not used
     204             :     UShort_t fClusterTracks[4][AliITSRecoParam::kMaxClusterPerLayer]; //tracks registered to given cluster //RS (index+1)
     205             :     Float_t fZmin;      //    the
     206             :     Float_t fZmax;      //    edges
     207             :     Float_t fYmin;      //   of  the
     208             :     Float_t fYmax;      //   "window"
     209             :     Int_t fI;            // index of the current cluster within the "window"
     210             :     Int_t fImax;            // index of the last cluster within the "window"    
     211             :     Int_t fSkip;     // indicates possibility to skip cluster
     212             :     Int_t fAccepted;     // accept indicator 
     213             :     Double_t fRoad;      // road defined by the cluster density
     214             :     Double_t fMaxSigmaClY; // maximum cluster error Y (to enlarge road)
     215             :     Double_t fMaxSigmaClZ; // maximum cluster error Z (to enlarge road)
     216             :     Double_t fNMaxSigmaCl; // number of sigma for road enlargement
     217             :   };
     218             :   AliITStrackerMI::AliITSlayer    & GetLayer(Int_t layer) const;
     219           0 :   AliITStrackerMI::AliITSdetector & GetDetector(Int_t layer, Int_t n) const {return GetLayer(layer).GetDetector(n); }
     220             :   Int_t GetNearestLayer(const Double_t *xr) const;  //get nearest upper layer close to the point xr
     221           0 :   void SetCurrentEsdTrack(Int_t i) {fCurrentEsdTrack=i;}
     222             :   void FollowProlongationTree(AliITStrackMI * otrack, Int_t esdindex, Bool_t constrain);
     223             :   //
     224             :   void   FlagFakes(const TObjArray &itsTracks);
     225             :   //
     226             : protected:
     227             :   Bool_t ComputeRoad(AliITStrackMI* track,Int_t ilayer,Int_t idet,Double_t &zmin,Double_t &zmax,Double_t &ymin,Double_t &ymax) const;
     228             :     
     229             :   void CookLabel(AliKalmanTrack *t,Float_t wrong) const;
     230             :   void CookLabel(AliITStrackMI *t,Float_t wrong) const;
     231             :   Double_t GetEffectiveThickness();
     232             :   Int_t    GetEffectiveThicknessLbyL(Double_t* xMS, Double_t* x2x0MS);
     233             :   void ResetBestTrack() {
     234         412 :      fBestTrack.~AliITStrackMI();
     235         206 :      new(&fBestTrack) AliITStrackMI(fTrackToFollow);
     236         206 :   }
     237             :   void ResetTrackToFollow(const AliITStrackMI &t) {
     238         804 :      fTrackToFollow.~AliITStrackMI();
     239         402 :      new(&fTrackToFollow) AliITStrackMI(t);
     240         402 :   }
     241             :   void CookdEdx(AliITStrackMI* track);
     242             : 
     243             :   Int_t GetParticleId(const AliESDtrack* track) const{
     244             :     ULong_t trStatus=track->GetStatus();  
     245             :     Bool_t isSA=kTRUE; if(trStatus&AliESDtrack::kTPCin) isSA=kFALSE;
     246             :     return fITSPid->GetParticleIdFromdEdxVsP(track->P(),track->GetITSsignal(),isSA);
     247             :   }
     248             :   Int_t GetParticleId(const AliITStrackV2* track) const{
     249             :     if(track->GetESDtrack()) return GetParticleId(track->GetESDtrack());
     250             :     return fITSPid->GetParticleIdFromdEdxVsP(track->P(),track->GetdEdx(),kFALSE);
     251             :   }
     252             : 
     253             :   Double_t GetNormalizedChi2(AliITStrackMI * track, Int_t mode);
     254             :   Double_t GetTruncatedChi2(const AliITStrackMI * track, Float_t fac);
     255             :   Double_t NormalizedChi2(AliITStrackMI * track, Int_t layer);
     256             :   Double_t GetInterpolatedChi2(const AliITStrackMI * forwardtrack,const AliITStrackMI * backtrack);  
     257             :   Double_t GetMatchingChi2(const AliITStrackMI * track1,const AliITStrackMI * track2);
     258             :   Double_t GetSPDDeadZoneProbability(Double_t zpos, Double_t zerr) const;
     259             : 
     260             :   //  Float_t    *GetWeight(Int_t index);
     261             :   void AddTrackHypothesys(AliITStrackMI * track, Int_t esdindex);
     262             :   void SortTrackHypothesys(Int_t esdindex, Int_t maxcut, Int_t mode);
     263             :   AliITStrackMI * GetBestHypothesys(Int_t esdindex, AliITStrackMI * original, Int_t checkmax); 
     264             :   void  GetBestHypothesysMIP(TObjArray &itsTracks); 
     265             :   void RegisterClusterTracks(const AliITStrackMI* track, Int_t id);
     266             :   void UnRegisterClusterTracks(const AliITStrackMI* track, Int_t id);
     267             :   Float_t GetNumberOfSharedClusters(AliITStrackMI* track,Int_t id, Int_t list[6], AliITSRecPoint *clist[6]);
     268             :   Int_t GetOverlapTrack(const AliITStrackMI *track, Int_t trackID, Int_t &shared, Int_t clusterlist[6], Int_t overlist[6]);
     269             :   AliITStrackMI * GetBest2Tracks(Int_t trackID1, Int_t treackID2, Float_t th0, Float_t th1,AliITStrackMI* original);
     270       11308 :   Float_t  * GetErrY(Int_t trackindex) const {return &fCoefficients[trackindex*48];}
     271       11308 :   Float_t  * GetErrZ(Int_t trackindex) const {return &fCoefficients[trackindex*48+12];}
     272       13944 :   Float_t  * GetNy(Int_t trackindex) const {return &fCoefficients[trackindex*48+24];}
     273       13944 :   Float_t  * GetNz(Int_t trackindex) const {return &fCoefficients[trackindex*48+36];}
     274             :   void       SignDeltas(const TObjArray *clusterArray, Float_t zv);
     275             :   void MakeCoefficients(Int_t ntracks);
     276             :   void BuildMaterialLUT(TString material);
     277             :   void MakeTrksMaterialLUT(Int_t ntracks);
     278             :   void DeleteTrksMaterialLUT();
     279             :   Int_t CorrectForPipeMaterial(AliITStrackMI *t, TString direction="inward");
     280             :   Int_t CorrectForShieldMaterial(AliITStrackMI *t, TString shield, TString direction="inward");
     281             :   Int_t CorrectForLayerMaterial(AliITStrackMI *t, Int_t layerindex, Double_t oldGlobXYZ[3], TString direction="inward");
     282             :   void UpdateESDtrack(AliITStrackMI* track, ULong_t flags) const;
     283             :   void ReadBadFromDetTypeRec();
     284             :   Int_t CheckSkipLayer(const AliITStrackMI *track,Int_t ilayer,Int_t idet) const;
     285             :   Int_t CheckDeadZone(AliITStrackMI *track,Int_t ilayer,Int_t idet,Double_t dz,Double_t dy,Bool_t noClusters=kFALSE) const;
     286             :   Bool_t LocalModuleCoord(Int_t ilayer,Int_t idet,const AliITStrackMI *track,
     287             :                           Float_t &xloc,Float_t &zloc) const;
     288             : // method to be used for Plane Efficiency evaluation
     289             :   Bool_t IsOKForPlaneEff(const AliITStrackMI* track, const Int_t *clusters, Int_t ilayer); // Check if a track is usable
     290             :                                                                                            // for Plane Eff evaluation
     291             :   void UseTrackForPlaneEff(const AliITStrackMI* track, Int_t ilayer);                            // Use this track for Plane Eff
     292             : // 
     293             :   Int_t fI;                              // index of the current layer
     294             :   static AliITSlayer fgLayers[AliITSgeomTGeo::kNLayers];// ITS layers
     295             :   AliITStrackMI fTracks[AliITSgeomTGeo::kNLayers];      // track estimations at the ITS layers
     296             :   AliITStrackMI fBestTrack;              // "best" track 
     297             :   AliITStrackMI fTrackToFollow;          // followed track
     298             :   TObjArray     fTrackHypothesys;        // ! array with track hypothesys- ARRAY is the owner of tracks- MI
     299             :   TObjArray     fBestHypothesys;         // ! array with track hypothesys- ARRAY is the owner of tracks- MI
     300             :   TObjArray     fOriginal;               // ! array with seeds from the TPC
     301             :   Int_t         fBestTrackIndex[100000]; // ! index of the best track
     302             :   Int_t         fCurrentEsdTrack;        // ! current esd track           - MI
     303             :   Int_t fPass;                           // current pass through the data 
     304             :   Int_t fConstraint[2];                  // constraint flags
     305             :   Bool_t fAfterV0;                       //indicates V0 founded
     306             :   Int_t fForceSkippingOfLayer[AliITSgeomTGeo::kNLayers]; // layers to be skipped
     307             :   Int_t fLastLayerToTrackTo;             // the innermost layer to track to
     308             :   Float_t * fCoefficients;               //! working array with errors and mean cluster shape
     309             :   AliESDEvent  * fEsd;                   //! pointer to the ESD event
     310             :   Double_t fSPDdetzcentre[4];            // centres of SPD modules in z
     311             :   TString fTrackingPhase;                // current tracking phase
     312             :   Int_t fUseTGeo;                        // use TGeo to get material budget
     313             :   Int_t   fNtracks;                      // number of tracks to prolong
     314             :   Bool_t  fFlagFakes;                    // request fakes flagging
     315             :   Bool_t  fSelectBestMIP03;              // use Chi2MIP[0]*Chi2MIP[3] in hypothesis analysis instead of Chi2MIP[0]
     316             :   Bool_t  fUseImproveKalman;             // use Kalman version of Improve
     317             :   Float_t fxOverX0Pipe;                  // material budget
     318             :   Float_t fxTimesRhoPipe;                // material budget
     319             :   Float_t fxOverX0Shield[2];             // material budget
     320             :   Float_t fxTimesRhoShield[2];           // material budget
     321             :   Float_t fxOverX0Layer[6];              // material budget
     322             :   Float_t fxTimesRhoLayer[6];            // material budget
     323             :   Float_t *fxOverX0PipeTrks;             //! material budget
     324             :   Float_t *fxTimesRhoPipeTrks;           //! material budget
     325             :   Float_t *fxOverX0ShieldTrks;           //! material budget
     326             :   Float_t *fxTimesRhoShieldTrks;         //! material budget
     327             :   Float_t *fxOverX0LayerTrks;            //! material budget
     328             :   Float_t *fxTimesRhoLayerTrks;          //! material budget
     329             :   TTreeSRedirector *fDebugStreamer;      //!debug streamer
     330             :   AliITSChannelStatus *fITSChannelStatus;//! bitmaps with channel status for SPD and SDD
     331             :   const AliITSDetTypeRec *fkDetTypeRec;         //! ITS det type rec, from AliITSReconstructor
     332             :   AliITSPlaneEff *fPlaneEff;             //! Pointer to the ITS plane efficicency
     333             :   Bool_t* fSPDChipIntPlaneEff;      //! Map of the SPD chips already intersected by a track (for FO studies)
     334             :   AliITSPIDResponse *fITSPid;            //! parameters for ITS pid 
     335             :   //
     336             : private:
     337             :   AliITStrackerMI(const AliITStrackerMI &tracker);
     338             :   AliITStrackerMI & operator=(const AliITStrackerMI &tracker);
     339         118 :   ClassDef(AliITStrackerMI,11)   //ITS tracker MI
     340             : };
     341             : 
     342             : 
     343             : 
     344             : 
     345             : /////////////////////////////////////////////////////////
     346             : /////////////////////////////////////////////////////////
     347             : /////////////////////////////////////////////////////////
     348             : 
     349             : 
     350             : 
     351             : 
     352             : 
     353             : inline void AliITStrackerMI::SetupFirstPass(const Int_t *flags,const Double_t *cuts) {
     354             :   // This function sets up flags and cuts for the first tracking pass   
     355             :   //
     356             :   //   flags[0] - vertex constaint flag                                
     357             :   //              negative means "skip the pass"                        
     358             :   //              0        means "no constraint"                        
     359             :   //              positive means "normal constraint"                    
     360             : 
     361           0 :    fConstraint[0]=flags[0];
     362             :    if (!cuts) return;
     363           0 : }
     364             : 
     365             : inline void AliITStrackerMI::SetupSecondPass(const Int_t *flags,const Double_t *cuts) {
     366             :   // This function sets up flags and cuts for the second tracking pass   
     367             :   //
     368             :   //   flags[0] - vertex constaint flag                                
     369             :   //              negative means "skip the pass"                        
     370             :   //              0        means "no constraint"                        
     371             :   //              positive means "normal constraint"                    
     372             : 
     373           0 :    fConstraint[1]=flags[0];
     374             :    if (!cuts) return;
     375           0 : }
     376             : 
     377             : inline void AliITStrackerMI::CookLabel(AliKalmanTrack *t,Float_t wrong) const {
     378             :   //--------------------------------------------------------------------
     379             :   //This function "cooks" a track label. If label<0, this track is fake.
     380             :   //--------------------------------------------------------------------
     381          32 :    Int_t tpcLabel=t->GetLabel();
     382          16 :    if (tpcLabel<0) return;
     383          16 :    AliTracker::CookLabel(t,wrong);
     384          16 :    if (tpcLabel!=TMath::Abs(t->GetLabel())){
     385          16 :      t->SetFakeRatio(1.);
     386          16 :    }
     387          16 :    if (tpcLabel !=t->GetLabel()) {
     388          16 :      t->SetLabel(-tpcLabel);      
     389          16 :    }
     390          32 : }
     391             : 
     392             : inline Double_t AliITStrackerMI::NormalizedChi2(AliITStrackMI * track, Int_t layer)
     393             : {
     394             :   //--------------------------------------------------------------------
     395             :   //get normalize chi2
     396             :   //--------------------------------------------------------------------
     397       20628 :   track->SetNormChi2(layer,2.*track->GetNSkipped()+0.25*track->GetNDeadZone()+track->GetdEdxMismatch()+track->GetChi2()/
     398             :   //track->fNormChi2[layer] = 2.*track->fNSkipped+0.25*track->fNDeadZone+track->fdEdxMismatch+track->fChi22/
     399       13752 :     TMath::Max(double(track->GetNumberOfClusters()-track->GetNSkipped()),
     400        6876 :                1./(1.+track->GetNSkipped())));
     401        6876 :   return track->GetNormChi2(layer);
     402             : }
     403             : inline void  AliITStrackerMI::AliITSdetector::GetGlobalXYZ(const AliITSRecPoint *cl, Double_t xyz[3]) const
     404             : {
     405             :   //
     406             :   // get cluster coordinates in global cooordinate 
     407             :   //
     408             :   xyz[2] = cl->GetZ();
     409             :   xyz[0] = fR*fCosPhi - cl->GetY()*fSinPhi;
     410             :   xyz[1] = fR*fSinPhi + cl->GetY()*fCosPhi;
     411             : }
     412             : #endif
     413             : 

Generated by: LCOV version 1.11