]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliESDpidCuts.cxx
Count also all events analyzed, not only the selected ones
[u/mrichter/AliRoot.git] / ANALYSIS / AliESDpidCuts.cxx
index c2f0c23efda4575d8b572b2c047b4ea1d131f21d..c46dc83a4f2605a3a5320151b5ee6f3087ceb20a 100644 (file)
 #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
@@ -38,7 +40,7 @@ const Int_t AliESDpidCuts::kNcuts = 3;
 //_____________________________________________________________________\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
@@ -50,9 +52,8 @@ AliESDpidCuts::AliESDpidCuts(const Char_t *name, const Char_t *title):
   // 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
@@ -62,7 +63,7 @@ AliESDpidCuts::AliESDpidCuts(const Char_t *name, const Char_t *title):
 //_____________________________________________________________________\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
@@ -73,7 +74,7 @@ AliESDpidCuts::AliESDpidCuts(const AliESDpidCuts &ref):
   //\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
@@ -103,9 +104,7 @@ AliESDpidCuts::~AliESDpidCuts(){
   //\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
@@ -116,6 +115,20 @@ AliESDpidCuts::~AliESDpidCuts(){
   }\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
@@ -126,7 +139,7 @@ Bool_t AliESDpidCuts::IsSelected(TObject *obj){
     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
@@ -141,7 +154,7 @@ void AliESDpidCuts::Copy(TObject &c) const {
   //\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
@@ -160,7 +173,7 @@ void AliESDpidCuts::Copy(TObject &c) const {
   }\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
@@ -170,8 +183,8 @@ Long64_t AliESDpidCuts::Merge(TCollection *coll){
   //\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
@@ -214,15 +227,15 @@ void AliESDpidCuts::DefineHistograms(Color_t color){
   }\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
@@ -233,14 +246,20 @@ Bool_t AliESDpidCuts::AcceptTrack(const AliESDtrack *track, const AliESDEvent *e
   //\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
@@ -250,7 +269,7 @@ Bool_t AliESDpidCuts::AcceptTrack(const AliESDtrack *track, const AliESDEvent *e
   // 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
@@ -262,7 +281,7 @@ Bool_t AliESDpidCuts::AcceptTrack(const AliESDtrack *track, const AliESDEvent *e
   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