LCOV - code coverage report
Current view: top level - TRD/TRDbase - AliTRDtrackV1.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 31 65 47.7 %
Date: 2016-06-14 17:26:59 Functions: 17 42 40.5 %

          Line data    Source code
       1             : #ifndef ALITRDTRACKV1_H
       2             : #define ALITRDTRACKV1_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             : 
       8             : ///////////////////////////////////////////////////////////////////////////////
       9             : //                                                                           //
      10             : //  Represents a reconstructed TRD track                                     //
      11             : //                                                                           //
      12             : ///////////////////////////////////////////////////////////////////////////////
      13             : 
      14             : #ifndef ALIKALMANTRACK_H
      15             : #include "AliKalmanTrack.h"
      16             : #endif
      17             : 
      18             : #ifndef ALITRDSEEDV1_H
      19             : #include "AliTRDseedV1.h"
      20             : #endif
      21             : 
      22             : template <typename Value> class TVectorT;
      23             : typedef class TVectorT<Double_t> TVectorD;
      24             : class AliESDtrack;
      25             : class AliTRDcluster;
      26             : class AliTRDReconstructor;
      27             : class AliTRDtrackV1 : public AliKalmanTrack
      28             : {
      29             :   friend class AliHLTTRDTrack; // allow HLT special access
      30             : public:
      31             :   enum ETRDtrackSize { 
      32             :     kNdet      = AliTRDgeometry::kNdet
      33             :    ,kNstacks   = AliTRDgeometry::kNstack*AliTRDgeometry::kNsector
      34             :    ,kNplane    = AliTRDgeometry::kNlayer
      35             :    ,kNcham     = AliTRDgeometry::kNstack
      36             :    ,kNsect     = AliTRDgeometry::kNsector
      37             :    ,kMAXCLUSTERSPERTRACK = 210
      38             :   };
      39             :   
      40             :   // bits from 0-13 are reserved by ROOT (see TObject.h)
      41             :   enum ETRDtrackStatus {
      42             :     kOwner     = BIT(14)
      43             :    ,kStopped   = BIT(15) 
      44             :    ,kKink      = BIT(16) 
      45             :    ,kPrimary   = BIT(17)
      46             :    ,kSeeder    = BIT(18)   // if set other than TPC (ITS, TRD)
      47             :   };
      48             : 
      49             :   // propagation/update error codes (up to 4 bits)
      50             :   enum ETRDtrackError {
      51             :     kProlongation = 1
      52             :    ,kPropagation
      53             :    ,kAdjustSector
      54             :    ,kSnp
      55             :    ,kTrackletInit
      56             :    ,kUpdate
      57             :    ,kUnknown      = 0xff
      58             :   };
      59             : 
      60             :   // data/clusters/tracklet error codes (up to 4 bits/layer)
      61             :   enum ETRDlayerError {
      62             :     kGeometry = 1
      63             :    ,kBoundary
      64             :    ,kNoClusters
      65             :    ,kNoAttach
      66             :    ,kNoClustersTracklet
      67             :    ,kNoFit
      68             :    ,kChi2
      69             :   };
      70             : 
      71             :   AliTRDtrackV1();
      72             :   AliTRDtrackV1(AliTRDseedV1 * const trklts, const Double_t p[5], const Double_t cov[15], Double_t x, Double_t alpha);
      73             :   AliTRDtrackV1(const AliESDtrack &ref);
      74             :   AliTRDtrackV1(const AliTRDtrackV1 &ref);
      75             :   virtual ~AliTRDtrackV1();
      76             :   AliTRDtrackV1 &operator=(const AliTRDtrackV1 &ref);
      77             :   virtual void   Copy(TObject &ref) const;
      78             :   virtual TObject* Clone(const char* newname = "") const;
      79             :   Bool_t         CookPID();
      80             :   Double_t       CookTruncatedMean(const Bool_t kinvq, const Double_t mag, const Int_t charge, const Int_t kcalib, Int_t &nch, Int_t &ncls, TVectorD *Qs=NULL, TVectorD *Xs=NULL, Int_t timeBin0=-1, Int_t timeBin1=1000, Int_t tstep=1) const;
      81             :  
      82             :   Int_t          CookLabel(Float_t wrong, Int_t *labs=NULL, Float_t *freq=NULL);
      83          80 :   AliTRDtrackV1* GetBackupTrack() const {return fBackupTrack;}
      84         204 :   Double_t       GetBudget(Int_t i) const { return fBudget[i];}
      85             :   AliTRDcluster* GetCluster(Int_t id);
      86             :   Int_t          GetClusterIndex(Int_t id) const;
      87           0 :   Float_t        GetEdep() const {return fDE;}
      88           0 :   Int_t          GetESDid() const {return fESDid;}
      89             :   inline Float_t GetMomentum(Int_t plane=-1) const;
      90             :   inline Int_t   GetNCross();
      91             :   inline Int_t   GetNumberOfTracklets() const;
      92           0 :   Double_t       GetPIDsignal() const   { return 0.;}
      93           0 :   Double_t       GetPID(Int_t is) const { return (is >=0 && is < AliPID::kSPECIES) ? fPID[is] : -1.;}
      94             :   UChar_t        GetNumberOfTrackletsPID() const;
      95           0 :   Int_t          GetNumberOfPhysicsSlices() const { return fNdEdxSlices;  };
      96             :   Double_t       GetPredictedChi2(const AliTRDseedV1 *tracklet, Double_t *cov) const;
      97           0 :   Double_t       GetPredictedChi2(const AliCluster* /*c*/) const                   { return 0.0; }
      98             :   Int_t          GetProlongation(Double_t xk, Double_t &y, Double_t &z) const;
      99             :   inline UChar_t GetStatusTRD(Int_t ly=-1) const;
     100             :   Int_t          GetSector() const;
     101        5040 :   AliTRDseedV1*  GetTracklet(Int_t plane) const {return plane >=0 && plane <kNplane ? fTracklet[plane] : NULL;}
     102        3504 :   Int_t          GetTrackletIndex(Int_t plane) const          { return (plane>=0 && plane<kNplane) ? fTrackletIndex[plane] : -1;}
     103             :   AliExternalTrackParam*
     104         212 :                  GetTrackIn() const  { return fTrackLow;} 
     105             :   AliExternalTrackParam*
     106           0 :                  GetTrackOut() const  { return fTrackHigh;} 
     107           0 :   const Int_t* GetTrackletIndexes() const { return &fTrackletIndex[0];}
     108             :   Bool_t         IsEqual(const TObject *inTrack) const;
     109         524 :   Bool_t         IsKink() const           { return TestBit(kKink);}
     110           0 :   Bool_t         IsOwner() const          { return TestBit(kOwner);};
     111         524 :   Bool_t         IsPrimary() const        { return TestBit(kPrimary);};
     112           0 :   Bool_t         IsStopped() const        { return TestBit(kStopped);};
     113             :   Bool_t         IsElectron() const;
     114           0 :   Bool_t         IsTPCseeded() const      { return !TestBit(kSeeder);};
     115             :   inline static Bool_t IsTrackError(ETRDtrackError error, UInt_t status);
     116             :   inline static Bool_t IsLayerError(ETRDlayerError error, Int_t layer, UInt_t status);
     117             : 
     118             :   Int_t          MakeBackupTrack();
     119             :   void           Print(Option_t *o="") const;
     120             : 
     121             :   Bool_t         PropagateTo(Double_t xr, Double_t x0 = 8.72, Double_t rho = 5.86e-3);
     122             :   Int_t          PropagateToR(Double_t xr, Double_t step);
     123             :   Bool_t         Rotate(Double_t angle, Bool_t absolute = kFALSE);
     124           0 :   void           SetBudget(Int_t i, Double_t b) {if(i>=0 && i<3) fBudget[i] = b;}
     125           0 :   void           SetEdep(Double32_t inDE){fDE = inDE;};
     126         572 :   void           SetESDid(Int_t id) {fESDid = id;}
     127         106 :   void           SetKink(Bool_t k)        { SetBit(kKink, k);}
     128         106 :   void           SetPrimary(Bool_t k)     { SetBit(kPrimary, k);}
     129           0 :   void           SetNonTPCseeded(Bool_t k){ SetBit(kSeeder, k);}
     130             :   void           SetNumberOfClusters();
     131             :   void           SetOwner();
     132           0 :   void           SetPID(Short_t is, Double_t inPID){if (is >=0 && is < AliPID::kSPECIES) fPID[is]=inPID;};
     133           0 :   void           SetPIDquality(UChar_t /*inPIDquality*/) const {/*fPIDquality = inPIDquality*/;};
     134             :   inline void    SetErrStat(UChar_t stat, Int_t ly=-1);
     135           0 :   void           SetStopped(Bool_t stop) {SetBit(kStopped, stop);}
     136             :   void           SetTracklet(AliTRDseedV1 *const trklt,  Int_t index);
     137             :   void           SetTrackIn();
     138             :   void           SetTrackOut(const AliExternalTrackParam *op=NULL);
     139             :   inline void    SetReconstructor(const AliTRDReconstructor *rec);
     140             :   inline Float_t StatusForTOF();
     141             :   void           UnsetTracklet(Int_t plane);
     142           0 :   Bool_t         Update(const AliCluster *, Double_t, Int_t) { return kFALSE; };
     143             :   void           UpdateChi2(Float_t chi2);
     144             :   void           UpdateESDtrack(AliESDtrack *t);
     145             : 
     146             : private:
     147             :   UInt_t       fStatus;                //  Bit map for the status of propagation
     148             :   Int_t        fTrackletIndex[kNplane];//  Tracklets index in the tracker list
     149             :   Int_t        fESDid;                 //  ESD track id 
     150             :   Double32_t   fPID[AliPID::kSPECIES]; //  PID probabilities
     151             :   Double32_t   fBudget[3];             //  Integrated material budget
     152             :   Double32_t   fDE;                    //  Integrated delta energy
     153             :   Double32_t   fTruncatedMean;         //  Truncated mean
     154             :   Int_t        fNchamberdEdx;          //  number of chambers used in calculating truncated mean
     155             :   Int_t        fNclusterdEdx;          //  number of clusters used in calculating truncated mean
     156             :   Int_t        fNdEdxSlices;           //  number of "physics slices" fill via AliTRDPIDResponse
     157             : 
     158             :   const AliTRDReconstructor *fkReconstructor;//! reconstructor link 
     159             :   AliTRDtrackV1 *fBackupTrack;         //! Backup track
     160             :   AliTRDseedV1  *fTracklet[kNplane];   //  Tracklets array defining the track
     161             :   AliExternalTrackParam *fTrackLow;    // parameters of the track which enter TRD from below (TPC) 
     162             :   AliExternalTrackParam *fTrackHigh;   // parameters of the track which enter TRD from above (HMPID, PHOS) 
     163             : 
     164        1172 :   ClassDef(AliTRDtrackV1, 8)           // TRD track - tracklet based
     165             : };
     166             : 
     167             : //____________________________________________________
     168             : inline Float_t AliTRDtrackV1::GetMomentum(Int_t plane) const
     169             : {
     170             : // Return ESD momentum stored in the tracklet reconstructed in layer = "plane". 
     171             : // By default returns the ESD momentum in first tracklet attached to track
     172           0 :   if(plane==-1){
     173           0 :     for(Int_t i(0); i<kNplane; i++){
     174           0 :       if(fTracklet[i]) return fTracklet[i]->GetMomentum();
     175             :     }
     176           0 :   } else if( plane >=0 && plane < kNplane){
     177           0 :     if(fTracklet[plane]) return fTracklet[plane]->GetMomentum();
     178             :   }
     179           0 :   return -1.;
     180           0 : }
     181             : 
     182             : //____________________________________________________
     183             : inline Int_t AliTRDtrackV1::GetNCross()
     184             : {
     185             :   Int_t ncross = 0;
     186        3090 :   for(Int_t ip=0; ip<kNplane; ip++){
     187        1236 :     if(!fTracklet[ip]) continue;
     188         684 :     ncross += fTracklet[ip]->IsRowCross();
     189         684 :   }
     190         206 :   return ncross;
     191             : }
     192             : 
     193             : //____________________________________________________
     194             : inline Int_t AliTRDtrackV1::GetNumberOfTracklets() const
     195             : {
     196             :   Int_t n = 0;
     197        1560 :   for(Int_t ip=0; ip<kNplane; ip++){
     198         624 :     if(!fTracklet[ip]) continue;
     199         206 :     n++;
     200         206 :   }
     201         104 :   return n;
     202             : }
     203             : 
     204             : //____________________________________________________
     205             : inline UChar_t AliTRDtrackV1::GetStatusTRD(Int_t ly) const
     206             : {
     207           0 :   if(ly>=-1 && ly<kNplane) return (fStatus>>((ly+1)*4))&0xf;
     208           0 :   return kUnknown;
     209           0 : }
     210             : 
     211             : //____________________________________________________
     212             : inline Bool_t AliTRDtrackV1::IsTrackError(ETRDtrackError error, UInt_t status)
     213             : {
     214           0 :   return (status&0xf)==UChar_t(error);
     215             : }
     216             : 
     217             : //____________________________________________________
     218             : inline Bool_t AliTRDtrackV1::IsLayerError(ETRDlayerError error, Int_t ly, UInt_t status)
     219             : {
     220           0 :   if(ly>=kNplane || ly<0) return kFALSE;
     221           0 :   return ((status>>((ly+1)*4))&0xf) == UChar_t(error);
     222           0 : }
     223             : 
     224             : //____________________________________________________
     225             : inline void AliTRDtrackV1::SetReconstructor(const AliTRDReconstructor *rec)
     226             : {
     227        1590 :   for(Int_t ip=0; ip<kNplane; ip++){
     228         636 :     if(!fTracklet[ip]) continue;
     229           0 :     fTracklet[ip]->SetReconstructor(rec);
     230           0 :   }
     231         106 :   fkReconstructor = rec;
     232         106 : }
     233             : 
     234             : //____________________________________________________
     235             : inline void AliTRDtrackV1::SetErrStat(UChar_t status, Int_t ly)
     236             : {
     237        1260 :   if(ly<kNplane) fStatus|=((status&0xf)<<((ly+1)*4));
     238         420 :   return;
     239             : }
     240             : 
     241             : 
     242             : //____________________________________________________________________________
     243             : inline Float_t AliTRDtrackV1::StatusForTOF()
     244             : {
     245             :   // OBSOLETE
     246             :   // Defines the status of the TOF extrapolation
     247             :   //
     248             : 
     249         276 :   if(!fTracklet[5]) return 0.;
     250             : 
     251             :   // Definition of res ????
     252          30 :   Float_t res = /*(0.2 + 0.8 * (fN / (fNExpected + 5.0))) **/ (0.4 + 0.6 * fTracklet[5]->GetN() / 20.0);
     253          30 :   res *= (0.25 + 0.8 * 40.0 / (40.0 + fBudget[2]));
     254             :   return res;
     255         102 : }
     256             : 
     257             : #endif
     258             : 
     259             : 
     260             : 

Generated by: LCOV version 1.11