]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/qaRec/AliTRDtrackInfo/AliTRDtrackInfo.h
improve tracklet-MC matching diagnostics
[u/mrichter/AliRoot.git] / TRD / qaRec / AliTRDtrackInfo / AliTRDtrackInfo.h
1 #ifndef ALITRDTRACKINFO_H
2 #define ALITRDTRACKINFO_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id: AliTRDtrackInfo.h 27496 2008-07-22 08:35:45Z cblume $ */
7
8 ////////////////////////////////////////////////////////////////////////////
9 //                                                                        //
10 //  Reconstruction QA                                                     //
11 //                                                                        //
12 ////////////////////////////////////////////////////////////////////////////
13
14 #ifndef Root_TObject
15 #include "TObject.h"
16 #endif
17
18 #ifndef ALIPID_H
19 #include "AliPID.h"
20 #endif
21
22 class AliTRDseedV1;
23 class AliTRDtrackV1;
24 class AliTrackReference;
25 class AliExternalTrackParam;
26 class AliTRDtrackInfo : public TObject{
27 public:
28   enum{
29     kNTrackRefs = 12
30   };
31   class AliESDinfo{
32   friend class AliTRDtrackInfo;
33   public:
34     AliESDinfo();
35     AliESDinfo(const AliESDinfo&);
36     virtual ~AliESDinfo();
37     AliESDinfo& operator=(const AliESDinfo&);
38
39     Int_t       GetId() const {return fId;}
40     ULong_t     GetStatus() const {return fStatus;}
41     Int_t       GetKinkIndex() const {return fKinkIndex;}
42     UShort_t    GetTPCncls() const {return fTPCncls;}
43     UChar_t     GetPidQuality() const {return fTRDpidQuality;}
44     Int_t       GetNSlices() const {return fTRDnSlices;}
45     Double32_t* GetSliceIter() const {return fTRDslices;}
46     const Double32_t* GetResponseIter() const {return &fTRDr[0];}
47     AliExternalTrackParam* GetOuterParam() const { return fOP;}
48
49   protected:
50     Int_t       fId;            // ESD track id
51     ULong_t     fStatus;        // ESD track status
52     Int_t       fKinkIndex;     // ESD kink index
53     UShort_t    fTPCncls;       // Number of Clusters inside TPC
54     Double32_t  fTRDr[AliPID::kSPECIES];  
55     UChar_t     fTRDpidQuality; // TRD PID quality
56     Int_t       fTRDnSlices;    // number of slices used for PID
57     Double32_t *fTRDslices;     //[fTRDnSlices] 
58     AliExternalTrackParam *fOP; // outer param
59
60     ClassDef(AliESDinfo, 2)     // ESD info related to TRD
61   };
62
63   class AliMCinfo{
64   friend class AliTRDtrackInfo;
65   public:
66     //typedef AliTrackReference (const* constAliTrackReference);
67     AliMCinfo();
68     AliMCinfo(const AliMCinfo&);
69     virtual ~AliMCinfo();
70     AliMCinfo& operator=(const AliMCinfo&);
71     Int_t   GetLabel() const {return fLabel;}
72     Int_t   GetNTrackRefs() const {return fNTrackRefs;}
73     Int_t   GetPDG() const {return fPDG;}
74     Bool_t  GetDirections(Float_t x0, Float_t &y0, Float_t &z0, Float_t &dydx, Float_t &dzdx, UChar_t &s) const;
75     AliTrackReference const* GetTrackRef(Int_t ref=0) const {return fTrackRefs[ref];}
76
77   protected:
78     Int_t   fLabel;             // MC label  
79     Int_t   fPDG;               // particle code
80     Int_t   fNTrackRefs;          // number of track refs
81     AliTrackReference  *fTrackRefs[kNTrackRefs];        // track refs array
82     ClassDef(AliMCinfo, 1)      // MC info related to TRD
83   };
84
85   AliTRDtrackInfo();
86   AliTRDtrackInfo(const AliTRDtrackInfo &);
87   ~AliTRDtrackInfo();
88   
89 //  void               Clear(const Option_t *){}
90   void               Delete(const Option_t *);
91   
92   AliTRDtrackInfo&   operator=(const AliTRDtrackInfo &);
93   
94   void               AddTrackRef(const AliTrackReference *trackRef);
95   
96   Int_t              GetTrackId() { return fESD.fId;}
97   const AliESDinfo*  GetESDinfo() const { return &fESD; }
98   const AliMCinfo*   GetMCinfo() const { return fMC; }
99   Int_t              GetNumberOfClusters() const;
100   Int_t              GetNumberOfClustersRefit() const {return fNClusters;}
101   Int_t              GetNTracklets() const;
102   Int_t              GetNTrackRefs() const {return fMC ? fMC->fNTrackRefs:0;} 
103   Int_t              GetLabel() const { return fMC ? fMC->fLabel:0; }
104   Int_t              GetKinkIndex() const { return fESD.fKinkIndex;}
105   UShort_t           GetTPCncls() const { return fESD.fTPCncls;}
106   Int_t              GetPDG() const { return fMC ? fMC->fPDG : 0; }
107   ULong_t            GetStatus() const {return fESD.fStatus;}
108   AliTRDtrackV1*     GetTrack() const { return fTRDtrack; }
109   AliTrackReference* GetTrackRef(Int_t entry) const;
110
111   Bool_t             IsCurved() const {return TestBit(kCurv);}
112   Bool_t             IsPrimary() const {return TestBit(kPrim);}
113         Bool_t             HasESDtrack() const{return ((fTRDtrack != 0x0) ||(fESD.fOP != 0));}
114         Bool_t             HasMCinfo() const { return (Bool_t)fMC; }
115
116   void               SetCurved(Bool_t curv = kTRUE) {SetBit(kCurv, curv);}
117   void               SetLabel(Int_t lab) { SetMC(); fMC->fLabel = lab; }
118   void               SetNumberOfClustersRefit(Int_t n) {fNClusters = n;}
119   inline void        SetMC();
120   void               SetPDG(Int_t pdg) { SetMC(); fMC->fPDG = pdg; }
121   void               SetPrimary(Bool_t prim = kTRUE) {SetBit(kPrim, prim);}
122   void               SetOuterParam(const AliExternalTrackParam *op);
123   void               SetStatus(ULong_t stat) {fESD.fStatus = stat;}
124   void               SetKinkIndex(Int_t kinkIndex) {fESD.fKinkIndex = kinkIndex;}
125   void               SetTPCncls(UShort_t TPCncls) {fESD.fTPCncls = TPCncls;}
126   void               SetTrackId(Int_t id) {fESD.fId = id;}
127   void               SetTrack(const AliTRDtrackV1 *track);
128   void               SetESDpidQuality(UChar_t q) { fESD.fTRDpidQuality = q;}
129   void               SetSlices(Int_t n, Double32_t*);
130   inline void        SetESDpid(Double_t *);
131   
132 private:
133     enum{
134       kCurv = 14,
135       kPrim = 15
136   };
137   // this 2 data members have to go to ESD header.
138   Int_t              fNClusters;        // Numer of clusters from refit
139   AliTRDtrackV1      *fTRDtrack;            // tracklets data array
140   AliMCinfo          *fMC;            // MC extract for TRD
141   AliESDinfo         fESD;            // ESD extract for TRD
142  
143   ClassDef(AliTRDtrackInfo, 3)        // TRD track info
144 };
145
146
147 //________________________________________________________
148 inline void AliTRDtrackInfo::SetMC()
149 {
150   if(!fMC) fMC = new AliMCinfo();
151 }
152
153 //________________________________________________________
154 inline void AliTRDtrackInfo::SetESDpid(Double_t *r)
155
156   for(Int_t is = AliPID::kSPECIES; is--;) fESD.fTRDr[is] = r[is];
157 }
158
159 #endif