ROOT logo
#ifndef AliAODPID_H
#define AliAODPID_H
/* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

//-------------------------------------------------------------------------
//     AOD Pid object for additional pid information
//     Author: Annalisa Mastroserio, CERN
//-------------------------------------------------------------------------

#include <TObject.h>
#include "AliPID.h"

class AliTPCdEdxInfo;

class AliAODPid : public TObject {

 public:
  AliAODPid();
  virtual ~AliAODPid();
  AliAODPid(const AliAODPid& pid); 
  AliAODPid& operator=(const AliAODPid& pid);
  
  enum{kTRDnPlanes=6};

 //setters
  void      SetITSsignal(Double_t its)                         {fITSsignal=its;}
  void      SetITSdEdxSamples(const Double_t s[4]);
  void      SetTPCsignal(Double_t tpc)                         {fTPCsignal=tpc;}
  void      SetTPCsignalN(UShort_t tpcN)                       {fTPCsignalN=(UChar_t)((tpcN<160)?tpcN:160);}
  void      SetTPCmomentum(Double_t tpcMom)                    {fTPCmomentum=tpcMom;}
  void      SetTPCTgl(Double_t tpcTgl)                         {fTPCTgl=tpcTgl;}
  void      SetTPCdEdxInfo(AliTPCdEdxInfo * dEdxInfo);
  void      SetTRDslices(Int_t nslices, const Double_t * const trdslices);  
  void      SetTRDsignal(Double_t sig)                         {fTRDsignal = sig;}
  void      SetTRDmomentum(Int_t nplane, Float_t trdMom)       {fTRDmomentum[nplane]=trdMom;}
  void      SetTRDncls(UChar_t ncls, Int_t layer = -1);
  void      SetTRDntrackletsPID(UChar_t ntls) {fTRDntls = ntls;}
  void      SetTRDChi2(Double_t chi2)          {fTRDChi2 = chi2;}
  void      SetTOFsignal(Double_t tof)                         {fTOFesdsignal=tof;}
  void      SetTOFpidResolution(Double_t tofPIDres[5]);
  void      SetIntegratedTimes(Double_t timeint[5]);

  Double_t  GetITSsignal()       const {return  fITSsignal;}
  void      GetITSdEdxSamples(Double_t *s) const;
  Double_t  GetITSdEdxSample(Int_t i) const {
    if(i>=0 && i<4) return fITSdEdxSamples[i];
    else return 0.;
  }
  Double_t  GetTPCsignal()       const {return  fTPCsignal;}
  UShort_t  GetTPCsignalN()      const {return  (UShort_t)fTPCsignalN;}
  AliTPCdEdxInfo * GetTPCdEdxInfo()const{return fTPCdEdxInfo;}

  Double_t  GetTPCmomentum()     const {return  fTPCmomentum;}
  Double_t  GetTPCTgl()          const {return  fTPCTgl;}
  Int_t     GetTRDnSlices()      const {return  fTRDnSlices/6;}
  Double_t  GetTRDsignal()       const {return  fTRDsignal;}
  Double_t* GetTRDslices()       const {return  fTRDslices;}
  Double_t  GetTRDChi2()         const {return fTRDChi2;}
  const Double_t*  GetTRDmomentum() const {return  fTRDmomentum;}
  UChar_t   GetTRDncls(UChar_t layer) const { if(layer > 5) return 0; return fTRDncls[layer];}
  UChar_t   GetTRDncls() const;
  UChar_t   GetTRDntrackletsPID() const {return fTRDntls;}
  Double_t  GetTOFsignal()       const {return  fTOFesdsignal;}

  void      GetIntegratedTimes(Double_t *timeint, Int_t nspec=AliPID::kSPECIES)  const; 
  void      GetTOFpidResolution (Double_t tofRes[5]) const;

 private :
  Double32_t  fITSsignal;        //[0.,0.,10] detector raw signal
  Double32_t  fITSdEdxSamples[4];//[0.,0.,10] ITS dE/dx samples

  Double32_t  fTPCsignal;        //[0.,0.,10] detector raw signal
  UChar_t     fTPCsignalN;       // number of points used for TPC dE/dx
  Double32_t  fTPCmomentum;      //[0.,0.,20] momentum at the inner wall of TPC;
  Double32_t  fTPCTgl;           //[0.,0.,10] track momentum dip angle at the inner wall of TPC;
  
  Int_t       fTRDnSlices;       // N slices used for PID in the TRD (as number of slices per tracklet * number of layers)
  UChar_t     fTRDntls;          // number of tracklets used for PID calculation
  UChar_t     fTRDncls[6];       // number of clusters used for dE/dx calculation
  Double32_t* fTRDslices;        //[fTRDnSlices][0.,0.,10]
  Double32_t  fTRDsignal;        //[0.,0.,10]  TRD signal
  Double32_t  fTRDmomentum[6];   //[0.,0.,10]  momentum at the TRD layers
  Double32_t  fTRDChi2;          //[0.,0.,10]  TRD chi2

  Double32_t  fTOFesdsignal;     //[0.,0.,20] TOF signal - t0 (T0 interaction time)
  Double32_t  fTOFpidResolution[5]; //[0.,0.,20] TOF pid resolution for each mass hypotesys 
  Double32_t  fIntTime[5];       //[0.,0.,20] track time hypothesis
 
  AliTPCdEdxInfo * fTPCdEdxInfo; // object containing dE/dx information for different pad regions

  ClassDef(AliAODPid, 15);
};

//_____________________________________________________________
inline void AliAODPid::SetTRDslices(Int_t nslices, const Double_t * const trdslices) {
  //
  // Set TRD dE/dx slices and the number of dE/dx slices per track
  //
  if(fTRDslices && fTRDnSlices != nslices) {
    delete [] fTRDslices; fTRDslices = NULL;
  };
  if(!fTRDslices) fTRDslices = new Double32_t[nslices];
  fTRDnSlices = nslices; 
  for(Int_t is = 0; is < fTRDnSlices; is++) fTRDslices[is] = trdslices[is];
}

//_____________________________________________________________
inline void AliAODPid::SetTRDncls(UChar_t ncls, Int_t layer) { 
  //
  // Set the number of clusters / tracklet
  // If no layer is specified the full number of clusters will be put in layer 0
  //
  if(layer > 5) return; 
  if(layer < 0) fTRDncls[0] = ncls;
  else fTRDncls[layer] = ncls;
}

//_____________________________________________________________
inline UChar_t AliAODPid::GetTRDncls() const {
  //
  // Get number of clusters per track
  // Calculated as sum of the number of clusters per tracklet
  //
  UChar_t ncls = 0;
  for(Int_t ily = 0; ily < 6; ily++) ncls += fTRDncls[ily];
  return ncls;
}
#endif
 AliAODPid.h:1
 AliAODPid.h:2
 AliAODPid.h:3
 AliAODPid.h:4
 AliAODPid.h:5
 AliAODPid.h:6
 AliAODPid.h:7
 AliAODPid.h:8
 AliAODPid.h:9
 AliAODPid.h:10
 AliAODPid.h:11
 AliAODPid.h:12
 AliAODPid.h:13
 AliAODPid.h:14
 AliAODPid.h:15
 AliAODPid.h:16
 AliAODPid.h:17
 AliAODPid.h:18
 AliAODPid.h:19
 AliAODPid.h:20
 AliAODPid.h:21
 AliAODPid.h:22
 AliAODPid.h:23
 AliAODPid.h:24
 AliAODPid.h:25
 AliAODPid.h:26
 AliAODPid.h:27
 AliAODPid.h:28
 AliAODPid.h:29
 AliAODPid.h:30
 AliAODPid.h:31
 AliAODPid.h:32
 AliAODPid.h:33
 AliAODPid.h:34
 AliAODPid.h:35
 AliAODPid.h:36
 AliAODPid.h:37
 AliAODPid.h:38
 AliAODPid.h:39
 AliAODPid.h:40
 AliAODPid.h:41
 AliAODPid.h:42
 AliAODPid.h:43
 AliAODPid.h:44
 AliAODPid.h:45
 AliAODPid.h:46
 AliAODPid.h:47
 AliAODPid.h:48
 AliAODPid.h:49
 AliAODPid.h:50
 AliAODPid.h:51
 AliAODPid.h:52
 AliAODPid.h:53
 AliAODPid.h:54
 AliAODPid.h:55
 AliAODPid.h:56
 AliAODPid.h:57
 AliAODPid.h:58
 AliAODPid.h:59
 AliAODPid.h:60
 AliAODPid.h:61
 AliAODPid.h:62
 AliAODPid.h:63
 AliAODPid.h:64
 AliAODPid.h:65
 AliAODPid.h:66
 AliAODPid.h:67
 AliAODPid.h:68
 AliAODPid.h:69
 AliAODPid.h:70
 AliAODPid.h:71
 AliAODPid.h:72
 AliAODPid.h:73
 AliAODPid.h:74
 AliAODPid.h:75
 AliAODPid.h:76
 AliAODPid.h:77
 AliAODPid.h:78
 AliAODPid.h:79
 AliAODPid.h:80
 AliAODPid.h:81
 AliAODPid.h:82
 AliAODPid.h:83
 AliAODPid.h:84
 AliAODPid.h:85
 AliAODPid.h:86
 AliAODPid.h:87
 AliAODPid.h:88
 AliAODPid.h:89
 AliAODPid.h:90
 AliAODPid.h:91
 AliAODPid.h:92
 AliAODPid.h:93
 AliAODPid.h:94
 AliAODPid.h:95
 AliAODPid.h:96
 AliAODPid.h:97
 AliAODPid.h:98
 AliAODPid.h:99
 AliAODPid.h:100
 AliAODPid.h:101
 AliAODPid.h:102
 AliAODPid.h:103
 AliAODPid.h:104
 AliAODPid.h:105
 AliAODPid.h:106
 AliAODPid.h:107
 AliAODPid.h:108
 AliAODPid.h:109
 AliAODPid.h:110
 AliAODPid.h:111
 AliAODPid.h:112
 AliAODPid.h:113
 AliAODPid.h:114
 AliAODPid.h:115
 AliAODPid.h:116
 AliAODPid.h:117
 AliAODPid.h:118
 AliAODPid.h:119
 AliAODPid.h:120
 AliAODPid.h:121
 AliAODPid.h:122
 AliAODPid.h:123
 AliAODPid.h:124
 AliAODPid.h:125
 AliAODPid.h:126
 AliAODPid.h:127
 AliAODPid.h:128
 AliAODPid.h:129
 AliAODPid.h:130
 AliAODPid.h:131