Fix neccessary for local merge
[u/mrichter/AliRoot.git] / STEER / AOD / AliAODPid.h
1 #ifndef AliAODPID_H
2 #define AliAODPID_H
3 /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //-------------------------------------------------------------------------
9 //     AOD Pid object for additional pid information
10 //     Author: Annalisa Mastroserio, CERN
11 //-------------------------------------------------------------------------
12
13 #include <TObject.h>
14
15 class AliTPCdEdxInfo;
16
17 class AliAODPid : public TObject {
18
19  public:
20   AliAODPid();
21   virtual ~AliAODPid();
22   AliAODPid(const AliAODPid& pid); 
23   AliAODPid& operator=(const AliAODPid& pid);
24   
25   enum{kSPECIES=5, kTRDnPlanes=6};
26
27  //setters
28   void      SetITSsignal(Double_t its)                         {fITSsignal=its;}
29   void      SetITSdEdxSamples(const Double_t s[4]);
30   void      SetTPCsignal(Double_t tpc)                         {fTPCsignal=tpc;}
31   void      SetTPCsignalN(UShort_t tpcN)                       {fTPCsignalN=tpcN;}
32   void      SetTPCmomentum(Double_t tpcMom)                    {fTPCmomentum=tpcMom;}
33   void      SetTPCdEdxInfo(AliTPCdEdxInfo * dEdxInfo); 
34   inline void  SetTRDsignal(Int_t nslices, const Double_t * const trdslices);  
35   void      SetTRDmomentum(Int_t nplane, Float_t trdMom)       {fTRDmomentum[nplane]=trdMom;}
36   inline void  SetTRDncls(UChar_t ncls, Int_t layer = -1);
37   void      SetTRDntrackletsPID(UChar_t ntls) {fTRDntls = ntls;}
38   void      SetTOFsignal(Double_t tof)                         {fTOFesdsignal=tof;}
39   void      SetTOFpidResolution(Double_t tofPIDres[5]);
40   void      SetIntegratedTimes(Double_t timeint[5]);
41   void      SetHMPIDsignal(Double_t hmpid)                     {fHMPIDsignal=hmpid;}
42   void      SetHMPIDprobs(Double_t hmpPid[5]);
43   void      SetEMCALPosition(Double_t emcalpos[3]);
44   void      SetEMCALMomentum(Double_t emcalmom[3]);
45
46   Double_t  GetITSsignal()       const {return  fITSsignal;}
47   void      GetITSdEdxSamples(Double_t *s) const;
48   Double_t  GetITSdEdxSample(Int_t i) const {
49     if(i>=0 && i<4) return fITSdEdxSamples[i];
50     else return 0.;
51   }
52   Double_t  GetTPCsignal()       const {return  fTPCsignal;}
53   UShort_t  GetTPCsignalN()      const {return  fTPCsignalN;}
54   AliTPCdEdxInfo * GetTPCdEdxInfo()const{return fTPCdEdxInfo;}
55
56   Double_t  GetTPCmomentum()     const {return  fTPCmomentum;}
57   Int_t     GetTRDnSlices()      const {return  fTRDnSlices;}
58   Double_t* GetTRDsignal()       const {return  fTRDslices;}
59   const Float_t*  GetTRDmomentum() const {return  fTRDmomentum;}
60   UChar_t   GetTRDncls(UChar_t layer) const { if(layer > 5) return 0; return fTRDncls[layer];}
61   inline UChar_t GetTRDncls() const;
62   UChar_t   GetTRDntrackletsPID() const {return fTRDntls;}
63   Double_t  GetTOFsignal()       const {return  fTOFesdsignal;}
64   Double_t  GetHMPIDsignal()     const {return  fHMPIDsignal;}
65   void      GetHMPIDprobs(Double_t *p) const;
66
67   void      GetIntegratedTimes(Double_t timeint[5])  const; 
68   void      GetEMCALPosition  (Double_t emcalpos[3]) const;
69   void      GetEMCALMomentum  (Double_t emcalmom[3]) const;
70   void      GetTOFpidResolution (Double_t tofRes[5]) const;
71
72  private :
73   Double32_t  fITSsignal;        //[0.,0.,10] detector raw signal
74   Double32_t  fITSdEdxSamples[4];//[0.,0.,10] ITS dE/dx samples
75   Double32_t  fTPCsignal;        //[0.,0.,10] detector raw signal
76   UShort_t    fTPCsignalN;       // number of points used for TPC dE/dx
77   Double_t    fTPCmomentum;      // momentum at the inner wall of TPC;
78   Int_t       fTRDnSlices;       // N slices used for PID in the TRD
79   UChar_t     fTRDntls;          // number of tracklets used for PID calculation
80   UChar_t     fTRDncls[6];       // number of clusters used for dE/dx calculation
81   Double32_t* fTRDslices;        //[fTRDnSlices]
82   Float_t     fTRDmomentum[6];   // momentum at the TRD layers
83   Double32_t  fTOFesdsignal;     // TOF signal - t0 (T0 interaction time)
84   Double32_t  fTOFpidResolution[5]; // TOF pid resolution for each mass hypotesys 
85   Double32_t  fIntTime[5];       // track time hypothesis
86   Double32_t  fHMPIDsignal;      // detector raw signal
87   Double32_t  fHMPIDprobs[5];    // detector pid probabilities
88   Double32_t  fEMCALPosition[3]; // global position of track
89                                  // extrapolated to EMCAL surface
90   Double32_t  fEMCALMomentum[3]; // momentum of track
91                                  // extrapolated to EMCAL surface
92   AliTPCdEdxInfo * fTPCdEdxInfo; // object containing dE/dx information for different pad regions
93
94   ClassDef(AliAODPid, 9);
95 };
96
97 //_____________________________________________________________
98 void AliAODPid::SetTRDsignal(Int_t nslices, const Double_t * const trdslices) {
99   //
100   // Set TRD dE/dx slices and the number of dE/dx slices per track
101   //
102   if(fTRDslices && fTRDnSlices != nslices) {
103     delete [] fTRDslices; fTRDslices = NULL;
104   };
105   if(!fTRDslices) fTRDslices = new Double32_t[nslices];
106   fTRDnSlices = nslices; 
107   for(Int_t is = 0; is < fTRDnSlices; is++) fTRDslices[is] = trdslices[is];
108 }
109
110 //_____________________________________________________________
111 void AliAODPid::SetTRDncls(UChar_t ncls, Int_t layer) { 
112   //
113   // Set the number of clusters / tracklet
114   // If no layer is specified the full number of clusters will be put in layer 0
115   //
116   if(layer > 5) return; 
117   if(layer < 0) fTRDncls[0] = ncls;
118   else fTRDncls[layer] = ncls;
119 }
120
121 //_____________________________________________________________
122 UChar_t AliAODPid::GetTRDncls() const{
123   //
124   // Get number of clusters per track
125   // Calculated as sum of the number of clusters per tracklet
126   //
127   UChar_t ncls = 0;
128   for(Int_t ily = 0; ily < 6; ily++) ncls += fTRDncls[ily];
129   return ncls;
130 }
131 #endif