X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=STEER%2FSTEERBase%2FAliPIDResponse.h;h=82f158b851ae3d0f25373a1e6f7a5bc467d7df73;hp=e1a8306fe3e989cfb801a6ed410a1cb2ceb8793e;hb=644666df220f3280da0956f6034ba272f2082f5f;hpb=80f28562eff49bb578ec7e4b736e3c031a7fab2d diff --git a/STEER/STEERBase/AliPIDResponse.h b/STEER/STEERBase/AliPIDResponse.h index e1a8306fe3e..82f158b851a 100644 --- a/STEER/STEERBase/AliPIDResponse.h +++ b/STEER/STEERBase/AliPIDResponse.h @@ -17,19 +17,36 @@ #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, @@ -49,24 +66,29 @@ public: 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; @@ -74,16 +96,23 @@ public: 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 @@ -93,6 +122,14 @@ public: // 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); @@ -111,6 +148,7 @@ private: 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 @@ -124,13 +162,13 @@ private: 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 @@ -138,6 +176,8 @@ private: Float_t fCurrCentrality; //! current centrality + Bool_t fTuneMConData; // switch to force the MC to be similar to data (dE/dx) + void ExecNewRun(); // @@ -157,6 +197,8 @@ private: void InitializeTRDResponse(); //TOF + void SetTOFPidResponseMaster(); + void InitializeTOFResponse(); //EMCAL void SetEMCALPidResponseMaster(); @@ -165,35 +207,7 @@ private: // 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<P(); - Bool_t isSA=kTRUE; - if(track->GetTPCNcls()>0) isSA=kFALSE; - return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,isSA); -} - #endif