3 /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
8 //-------------------------------------------------------------------------
9 // AOD Pid object for additional pid information
10 // Author: Annalisa Mastroserio, CERN
11 //-------------------------------------------------------------------------
17 class AliAODPid : public TObject {
22 AliAODPid(const AliAODPid& pid);
23 AliAODPid& operator=(const AliAODPid& pid);
25 enum{kSPECIES=5, kTRDnPlanes=6};
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=(UChar_t)((tpcN<160)?tpcN:160);}
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]);
42 Double_t GetITSsignal() const {return fITSsignal;}
43 void GetITSdEdxSamples(Double_t *s) const;
44 Double_t GetITSdEdxSample(Int_t i) const {
45 if(i>=0 && i<4) return fITSdEdxSamples[i];
48 Double_t GetTPCsignal() const {return fTPCsignal;}
49 UShort_t GetTPCsignalN() const {return (UShort_t)fTPCsignalN;}
50 AliTPCdEdxInfo * GetTPCdEdxInfo()const{return fTPCdEdxInfo;}
52 Double_t GetTPCmomentum() const {return fTPCmomentum;}
53 Int_t GetTRDnSlices() const {return fTRDnSlices;}
54 Double_t* GetTRDsignal() const {return fTRDslices;}
55 const Double_t* GetTRDmomentum() const {return fTRDmomentum;}
56 UChar_t GetTRDncls(UChar_t layer) const { if(layer > 5) return 0; return fTRDncls[layer];}
57 inline UChar_t GetTRDncls() const;
58 UChar_t GetTRDntrackletsPID() const {return fTRDntls;}
59 Double_t GetTOFsignal() const {return fTOFesdsignal;}
61 void GetIntegratedTimes(Double_t timeint[5]) const;
62 void GetTOFpidResolution (Double_t tofRes[5]) const;
65 Double32_t fITSsignal; //[0.,0.,10] detector raw signal
66 Double32_t fITSdEdxSamples[4];//[0.,0.,10] ITS dE/dx samples
68 Double32_t fTPCsignal; //[0.,0.,10] detector raw signal
69 UChar_t fTPCsignalN; // number of points used for TPC dE/dx
70 Double32_t fTPCmomentum; //[0.,0.,20] momentum at the inner wall of TPC;
72 Int_t fTRDnSlices; // N slices used for PID in the TRD
73 UChar_t fTRDntls; // number of tracklets used for PID calculation
74 UChar_t fTRDncls[6]; // number of clusters used for dE/dx calculation
75 Double32_t* fTRDslices; //[fTRDnSlices][0.,0.,10]
76 Double32_t fTRDmomentum[6]; //[0.,0.,10] momentum at the TRD layers
78 Double32_t fTOFesdsignal; //[0.,0.,20] TOF signal - t0 (T0 interaction time)
79 Double32_t fTOFpidResolution[5]; //[0.,0.,20] TOF pid resolution for each mass hypotesys
80 Double32_t fIntTime[5]; //[0.,0.,20] track time hypothesis
82 AliTPCdEdxInfo * fTPCdEdxInfo; // object containing dE/dx information for different pad regions
84 ClassDef(AliAODPid, 11);
87 //_____________________________________________________________
88 void AliAODPid::SetTRDsignal(Int_t nslices, const Double_t * const trdslices) {
90 // Set TRD dE/dx slices and the number of dE/dx slices per track
92 if(fTRDslices && fTRDnSlices != nslices) {
93 delete [] fTRDslices; fTRDslices = NULL;
95 if(!fTRDslices) fTRDslices = new Double32_t[nslices];
96 fTRDnSlices = nslices;
97 for(Int_t is = 0; is < fTRDnSlices; is++) fTRDslices[is] = trdslices[is];
100 //_____________________________________________________________
101 void AliAODPid::SetTRDncls(UChar_t ncls, Int_t layer) {
103 // Set the number of clusters / tracklet
104 // If no layer is specified the full number of clusters will be put in layer 0
106 if(layer > 5) return;
107 if(layer < 0) fTRDncls[0] = ncls;
108 else fTRDncls[layer] = ncls;
111 //_____________________________________________________________
112 UChar_t AliAODPid::GetTRDncls() const{
114 // Get number of clusters per track
115 // Calculated as sum of the number of clusters per tracklet
118 for(Int_t ily = 0; ily < 6; ily++) ncls += fTRDncls[ily];