#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) * 2);\r
- memset(fCutTOFnSigma, 0, sizeof(Float_t) * 2);\r
+ memset(fCutTPCnSigma, 0, sizeof(Float_t)* AliPID::kSPECIES * 2);\r
+ memset(fCutTOFnSigma, 0, sizeof(Float_t)* AliPID::kSPECIES * 2);\r
\r
memset(fHclusterRatio, 0, sizeof(TH1F *) * 2);\r
memset(fHnSigmaTPC, 0, sizeof(TH1F *) * AliPID::kSPECIES * 2);\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
\r
memcpy(target.fCutTPCnSigma, fCutTPCnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2);\r
- memcpy(target.fCutTOFnSigma, fCutTOFnSigma, sizeof(Float_t) * AliPID::kSPECIES);\r
+ memcpy(target.fCutTOFnSigma, fCutTOFnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2);\r
\r
AliESDpidCuts::Copy(c);\r
}\r
//\r
// Merge Cut objects\r
//\r
- if(coll) return 0;\r
- if(coll->IsEmpty()) return 1;\r
+ if(!coll) return 0;\r
+ if(coll->IsEmpty()) return 1;\r
if(!HasHistograms()) return 0;\r
\r
TIterator *iter = coll->MakeIterator();\r
}\r
Char_t hname[256], htitle[256];\r
for(Int_t imode = 0; imode < 2; imode++){\r
- sprintf(hname, "fHclusterRatio%s", imode ? "After" : "Before");\r
- sprintf(htitle, "TPC cluster Ratio %s cuts;Ratio;Entries", imode ? "after" : "before");\r
+ snprintf(hname, 256, "fHclusterRatio%s", imode ? "After" : "Before");\r
+ snprintf(htitle, 256, "TPC cluster Ratio %s cuts;Ratio;Entries", imode ? "after" : "before");\r
fHclusterRatio[imode] = new TH1F(hname, htitle, 20, 0., 1.);\r
for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){\r
- sprintf(hname, "fHnSigma%sTPC%s", AliPID::ParticleName(ispec), imode ? "after" : "before");\r
- sprintf(htitle, "TPC sigma for %s %s cuts;sigma;Entries", AliPID::ParticleName(ispec), imode ? "after" : "before");\r
+ snprintf(hname, 256, "fHnSigma%sTPC%s", AliPID::ParticleName(ispec), imode ? "after" : "before");\r
+ snprintf(htitle, 256, "TPC sigma for %s %s cuts;sigma;Entries", AliPID::ParticleName(ispec), imode ? "after" : "before");\r
fHnSigmaTPC[ispec][imode] = new TH1F(hname, htitle, 200, -10., 10.);\r
- sprintf(hname, "fHnSigma%sTOF%s", AliPID::ParticleName(ispec), imode ? "after" : "before");\r
- sprintf(htitle, "TOF sigma for %s %s cuts;sigma;Entries", AliPID::ParticleName(ispec), imode ? "after" : "before");\r
+ snprintf(hname, 256, "fHnSigma%sTOF%s", AliPID::ParticleName(ispec), imode ? "after" : "before");\r
+ snprintf(htitle, 256, "TOF sigma for %s %s cuts;sigma;Entries", AliPID::ParticleName(ispec), imode ? "after" : "before");\r
fHnSigmaTOF[ispec][imode] = new TH1F(hname, htitle, 200, -10., 10.);\r
}\r
}\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
kCutNsigmaTOF\r
};\r
Long64_t cutRequired=0, cutFullfiled = 0;\r
- if(fTOFsigmaCutRequired && event == 0) \r
+ if(fTOFsigmaCutRequired && event == 0) {\r
AliError("No event pointer. Need event pointer for T0 for TOF cut");\r
+ return (0);\r
+ }\r
Double_t clusterRatio = track->GetTPCNclsF() ? static_cast<Float_t>(track->GetTPCNcls())/static_cast<Float_t>(track->GetTPCNclsF()) : 1.;\r
if(fCutTPCclusterRatio > 0.){\r
SETBIT(cutRequired, kCutClusterRatioTPC);\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) 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