#include "AliTOFPIDResponse.h"
#include "AliEMCALPIDResponse.h"
+
#include "AliVParticle.h"
#include "AliVTrack.h"
#include "TNamed.h"
-class AliVEvent;
class TF1;
+class AliOADBContainer;
+class TObjArray;
+
+class AliVEvent;
+class AliTRDPIDResponseObject;
+class AliTOFPIDParams;
class AliPIDResponse : public TNamed {
public:
AliPIDResponse(Bool_t isMC=kFALSE);
virtual ~AliPIDResponse();
+ enum EDetector {
+ kITS=0,
+ kTPC=1,
+ kTRD=2,
+ kTOF=3,
+ kHMPID=4,
+ kEMCAL=5,
+ kPHOS=6,
+ kNdetectors=7
+ };
+
enum EDetCode {
kDetITS = 0x1,
kDetTPC = 0x2,
kDetPidOk=1,
kDetMismatch=2
};
-
+
AliITSPIDResponse &GetITSResponse() {return fITSResponse;}
AliTPCPIDResponse &GetTPCResponse() {return fTPCResponse;}
AliTOFPIDResponse &GetTOFResponse() {return fTOFResponse;}
AliTRDPIDResponse &GetTRDResponse() {return fTRDResponse;}
AliEMCALPIDResponse &GetEMCALResponse() {return fEMCALResponse;}
- Float_t NumberOfSigmas(EDetCode detCode, const AliVParticle *track, AliPID::EParticleType type) const;
+ Float_t NumberOfSigmas(EDetector detCode, const AliVParticle *track, AliPID::EParticleType type) const;
+ Float_t NumberOfSigmas(EDetCode detCode, const AliVParticle *track, AliPID::EParticleType type) const;
- virtual Float_t NumberOfSigmasITS(const AliVParticle *track, AliPID::EParticleType type) const;
- virtual Float_t NumberOfSigmasTPC(const AliVParticle *track, AliPID::EParticleType type) const;
- virtual Float_t NumberOfSigmasEMCAL(const AliVTrack *track, AliPID::EParticleType type) const;
- virtual Float_t NumberOfSigmasTOF(const AliVParticle *track, AliPID::EParticleType type) const = 0;
+ virtual Float_t NumberOfSigmasITS (const AliVParticle *track, AliPID::EParticleType type) const;
+ virtual Float_t NumberOfSigmasTPC (const AliVParticle *track, AliPID::EParticleType type) const;
+ virtual Float_t NumberOfSigmasTPC (const AliVParticle *track, AliPID::EParticleType type, AliTPCPIDResponse::ETPCdEdxSource dedxSource);
+ virtual Float_t NumberOfSigmasEMCAL(const AliVParticle *track, AliPID::EParticleType type, Double_t &eop, Double_t showershape[4]) const;
+ virtual Float_t NumberOfSigmasTOF (const AliVParticle *track, AliPID::EParticleType type) const = 0;
+ virtual Float_t NumberOfSigmasEMCAL(const AliVParticle *track, AliPID::EParticleType type) const;
+
virtual Bool_t IdentifiedAsElectronTRD(const AliVTrack *track, Double_t efficiencyLevel) const;
- EDetPidStatus ComputePIDProbability (EDetCode detCode, const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
+ EDetPidStatus ComputePIDProbability (EDetector detCode, const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
+ EDetPidStatus ComputePIDProbability (EDetCode detCode, const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
- EDetPidStatus ComputeITSProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
+ EDetPidStatus ComputeITSProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
EDetPidStatus ComputeTPCProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
EDetPidStatus ComputeTOFProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
EDetPidStatus ComputeTRDProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
EDetPidStatus ComputePHOSProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
EDetPidStatus ComputeHMPIDProbability(const AliVTrack *track, Int_t nSpecies, Double_t p[]) const;
-
+ void SetTRDPIDmethod(AliTRDPIDResponse::ETRDPIDMethod method=AliTRDPIDResponse::kLQ1D);
+
void SetITSPIDmethod(ITSPIDmethod pmeth) { fITSPIDmethod = pmeth; }
- virtual void SetTOFResponse(AliVEvent */*event*/,EStartTimeType_t /*option*/) {;}
void SetTRDslicesForPID(UInt_t slice1, UInt_t slice2) {fTRDslicesForPID[0]=slice1;fTRDslicesForPID[1]=slice2;}
void SetOADBPath(const char* path) {fOADBPath=path;}
const char *GetOADBPath() const {return fOADBPath.Data();}
- void InitialiseEvent(AliVEvent *event, Int_t pass);
+
+ void SetCustomTPCpidResponse(const char* tpcpid) { fCustomTPCpidResponse = tpcpid; }
+ const char* GetCustomTPCpidResponse() const { return fCustomTPCpidResponse.Data(); }
+
+ void InitialiseEvent(AliVEvent *event, Int_t pass, Int_t run=-1);
void SetCurrentFile(const char* file) { fCurrentFile=file; }
+ // cache PID in the track
+ void FillTrackDetectorPID();
+
AliVEvent * GetCurrentEvent() const {return fCurrentEvent;}
// User settings for the MC period and reco pass
// event info
Float_t GetCurrentCentrality() const {return fCurrCentrality;};
+ // TOF setting
+ void SetTOFtail(Float_t tail=1.1){if(tail > 0) fTOFtail=tail; else printf("TOF tail should be greater than 0 (nothing done)\n");};
+ void SetTOFResponse(AliVEvent *vevent,EStartTimeType_t option);
+
+ virtual Float_t GetTPCsignalTunedOnData(const AliVTrack *t) const {return t->GetTPCsignal();};
+ Bool_t IsTunedOnData() const {return fTuneMConData;};
+ void SetTunedOnData(Bool_t flag=kTRUE,Int_t recoPass=0){fTuneMConData = flag; if(recoPass>0) fRecoPassUser = recoPass;};
+
AliPIDResponse(const AliPIDResponse &other);
AliPIDResponse& operator=(const AliPIDResponse &other);
Bool_t fIsMC; // If we run on MC data
TString fOADBPath; // OADB path to use
+ TString fCustomTPCpidResponse; // Custom TPC Pid Response file for debugging purposes
TString fBeamType; //! beam type (PP) or (PBPB)
TString fLHCperiod; //! LHC period
TObjArray *fArrPidResponseMaster; //! TPC pid splines
TF1 *fResolutionCorrection; //! TPC resolution correction
+ AliOADBContainer* fOADBvoltageMaps; //! container with the voltage maps
- AliTRDPIDParams *fTRDPIDParams; //! TRD PID Params
- AliTRDPIDReference *fTRDPIDReference; //! TRD PID References
+ AliTRDPIDResponseObject *fTRDPIDResponseObject; //! TRD PID Response Object
UInt_t fTRDslicesForPID[2]; //! TRD PID slices
- Int_t fTOFTimeZeroType; //! default start time type for tof (ESD)
- Float_t fTOFres; //! TOF resolution
+ Float_t fTOFtail; //! TOF tail effect used in TOF probability
+ AliTOFPIDParams *fTOFPIDParams; //! TOF PID Params - period depending (OADB loaded)
TObjArray *fEMCALPIDParams; //! EMCAL PID Params
Float_t fCurrCentrality; //! current centrality
+ Bool_t fTuneMConData; // switch to force the MC to be similar to data (dE/dx)
+
void ExecNewRun();
//
void InitializeTRDResponse();
//TOF
+ void SetTOFPidResponseMaster();
+ void InitializeTOFResponse();
//EMCAL
void SetEMCALPidResponseMaster();
//
void SetRecoInfo();
- ClassDef(AliPIDResponse,4); //PID response handling
+ ClassDef(AliPIDResponse, 9); //PID response handling
};
-inline Float_t AliPIDResponse::NumberOfSigmasTPC(const AliVParticle *vtrack, AliPID::EParticleType type) const {
- AliVTrack *track=(AliVTrack*)vtrack;
- Double_t mom = track->GetTPCmomentum();
- Double_t sig = track->GetTPCsignal();
- UInt_t sigN = track->GetTPCsignalN();
-
- Double_t nSigma = -999.;
- if (sigN>0) nSigma=fTPCResponse.GetNumberOfSigmas(mom,sig,sigN,type);
-
- return nSigma;
-}
-
-inline Float_t AliPIDResponse::NumberOfSigmasITS(const AliVParticle *vtrack, AliPID::EParticleType type) const {
- AliVTrack *track=(AliVTrack*)vtrack;
- Float_t dEdx=track->GetITSsignal();
- if (dEdx<=0) return -999.;
-
- UChar_t clumap=track->GetITSClusterMap();
- Int_t nPointsForPid=0;
- for(Int_t i=2; i<6; i++){
- if(clumap&(1<<i)) ++nPointsForPid;
- }
- Float_t mom=track->P();
- Bool_t isSA=kTRUE;
- if(track->GetTPCNcls()>0) isSA=kFALSE;
- return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,isSA);
-}
-
#endif