#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
AliError("Provided object is not AliESDtrack!");\r
return kFALSE;\r
}\r
- AliESDEvent* evt = trk->GetESDEvent();\r
+ const AliESDEvent* evt = trk->GetESDEvent();\r
if(!evt){\r
AliError("No AliESDEvent!");\r
return kFALSE;\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