#include <TString.h>\r
#include <TList.h>\r
\r
+#include "AliAnalysisManager.h"\r
+#include "AliInputEventHandler.h"\r
#include "AliESDtrack.h"\r
#include "AliESDEvent.h"\r
#include "AliLog.h"\r
-#include "AliESDpid.h"\r
+#include "AliPIDResponse.h"\r
\r
#include "AliESDpidCuts.h"\r
\r
//_____________________________________________________________________\r
AliESDpidCuts::AliESDpidCuts(const Char_t *name, const Char_t *title):\r
AliAnalysisCuts(name, title)\r
- , fESDpid(NULL)\r
+ , fPIDresponse(NULL)\r
, fTPCsigmaCutRequired(0)\r
, fTOFsigmaCutRequired(0)\r
, fCutTPCclusterRatio(0.)\r
// Default constructor\r
//\r
\r
- fESDpid = new AliESDpid;\r
memset(fCutTPCnSigma, 0, sizeof(Float_t)* AliPID::kSPECIES * 2);\r
memset(fCutTOFnSigma, 0, sizeof(Float_t)* AliPID::kSPECIES * 2);\r
\r
//_____________________________________________________________________\r
AliESDpidCuts::AliESDpidCuts(const AliESDpidCuts &ref):\r
AliAnalysisCuts(ref)\r
- , fESDpid(NULL)\r
+ , fPIDresponse(NULL)\r
, fTPCsigmaCutRequired(ref.fTPCsigmaCutRequired)\r
, fTOFsigmaCutRequired(ref.fTOFsigmaCutRequired)\r
, fCutTPCclusterRatio(ref.fCutTPCclusterRatio)\r
//\r
// Copy constructor\r
//\r
- fESDpid = new AliESDpid(*ref.fESDpid);\r
+ fPIDresponse = ref.fPIDresponse;\r
memcpy(fCutTPCnSigma, ref.fCutTPCnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2);\r
memcpy(fCutTOFnSigma, ref.fCutTOFnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2);\r
\r
//\r
// Destructor\r
//\r
- delete fESDpid;\r
\r
- delete fHcutStatistics;\r
delete fHcutCorrelation;\r
for(Int_t imode = 0; imode < 2; imode++){\r
delete fHclusterRatio[imode];\r
}\r
}\r
\r
+//_____________________________________________________________________\r
+void AliESDpidCuts::Init(){\r
+ //\r
+ // Init function, get PID response from the Analysis Manager\r
+ //\r
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
+ if(mgr){\r
+ AliInputEventHandler *handler = dynamic_cast<AliInputEventHandler*>(mgr->GetInputEventHandler());\r
+ if(handler){\r
+ fPIDresponse = handler->GetPIDResponse();\r
+ }\r
+ }\r
+}\r
+\r
//_____________________________________________________________________\r
Bool_t AliESDpidCuts::IsSelected(TObject *obj){\r
//\r
//\r
AliESDpidCuts &target = dynamic_cast<AliESDpidCuts &>(c);\r
\r
- target.fESDpid = new AliESDpid(*fESDpid);\r
+ target.fPIDresponse = fPIDresponse;\r
\r
target.fCutTPCclusterRatio = fCutTPCclusterRatio;\r
target.fMinMomentumTOF = fMinMomentumTOF;\r
//\r
// Check whether the tracks survived the cuts\r
//\r
+ if(!fPIDresponse){\r
+ AliError("PID Response not available");\r
+ return 0;\r
+ }\r
enum{\r
kCutClusterRatioTPC,\r
kCutNsigmaTPC,\r
// check TPC nSigma cut\r
Float_t nsigmaTPC[AliPID::kSPECIES], nsigma; // need all sigmas for QA plotting\r
for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){\r
- nsigmaTPC[ispec] = nsigma = fESDpid->NumberOfSigmasTPC(track,(AliPID::EParticleType)ispec);\r
+ nsigmaTPC[ispec] = nsigma = fPIDresponse->NumberOfSigmasTPC(track,(AliPID::EParticleType)ispec);\r
if(!(fTPCsigmaCutRequired & 1 << ispec)) continue;\r
SETBIT(cutRequired, kCutNsigmaTPC); // We found at least one species where the n-Sigma Cut is required\r
if(nsigma >= fCutTPCnSigma[2*ispec] && nsigma <= fCutTPCnSigma[2*ispec+1]) SETBIT(cutFullfiled, kCutNsigmaTPC); // Fullfiled for at least one species\r
track->GetIntegratedTimes(times);\r
for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){\r
\r
- if(hasTOFpid && event) nsigmaTOF[ispec] = nsigma = fESDpid->NumberOfSigmasTOF(track,(AliPID::EParticleType)ispec, event->GetT0());\r
+ if(hasTOFpid && event) nsigmaTOF[ispec] = nsigma = fPIDresponse->NumberOfSigmasTOF(track,(AliPID::EParticleType)ispec);\r
if(!(fTOFsigmaCutRequired && 1 << ispec)) continue;\r
SETBIT(cutRequired, kCutNsigmaTOF);\r
if(track->GetOuterParam()->P() >= fMinMomentumTOF){\r
AliESDpidCuts &operator=(const AliESDpidCuts &ref);\r
virtual ~AliESDpidCuts();\r
\r
+ virtual void Init();\r
virtual void Copy(TObject &c) const;\r
virtual Long64_t Merge(TCollection *coll);\r
\r
virtual Bool_t IsSelected(TList * /*lst*/) {return kTRUE; }\r
virtual Bool_t AcceptTrack(const AliESDtrack *track, const AliESDEvent *event);\r
\r
- AliESDpid *GetESDpid() { return fESDpid; };\r
+ void SetPIDResponse(AliPIDResponse * pidresponse) { fPIDresponse = pidresponse; }\r
+ AliPIDResponse *GetPIDresponse() { return fPIDresponse; };\r
\r
void SetTPCclusterRatioCut(Float_t clr) { fCutTPCclusterRatio = clr; }\r
inline void SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t nSigma);\r
\r
protected:\r
static const Int_t kNcuts; // Number of Cuts\r
- AliESDpid *fESDpid; //! PID helper (n-sigma-cut)\r
+ AliPIDResponse *fPIDresponse; //! PID helper (n-sigma-cut)\r
Char_t fTPCsigmaCutRequired; // Sigma cut Requirement for TPC and Particle Species\r
Char_t fTOFsigmaCutRequired; // Sigma cut Requirement for TOF and Particle Species\r
Float_t fCutTPCnSigma[AliPID::kSPECIES * 2]; // Species dependent cut on the distance to the TPC dE/dx line\r