]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/SPECTRA/AliProtonAnalysisBase.cxx
Refining the kRatio PID mode
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliProtonAnalysisBase.cxx
index 980ba52fb50805835e4a1d31691f8399ba33d368..649f767614f00b2121005008ffca07bbb665f80c 100644 (file)
@@ -29,7 +29,8 @@
 #include <AliESDEvent.h>
 #include <AliPID.h>
 #include <AliVertexerTracks.h>
-#include <AliTPCpidESD.h>
+#include <AliESDpid.h>
+#include <AliTPCPIDResponse.h>
 class AliLog;
 class AliESDVertex;
 
@@ -40,10 +41,11 @@ ClassImp(AliProtonAnalysisBase)
 //____________________________________________________________________//
 AliProtonAnalysisBase::AliProtonAnalysisBase() : 
   TObject(),  fProtonAnalysisLevel("ESD"), fAnalysisMC(kFALSE),
-  fTriggerMode(kMB2), kUseOfflineTrigger(kFALSE), fPhysicsSelection(0),
+  fTriggerMode(kMB2), kUseOnlineTrigger(kFALSE), kUseOfflineTrigger(kFALSE), 
+  fPhysicsSelection(0),
   fProtonAnalysisMode(kTPC), fProtonPIDMode(kBayesian),
   fAnalysisEtaMode(kFALSE),
-  fVxMax(100.), fVyMax(100.), fVzMax(100.),
+  fVxMax(100.), fVyMax(100.), fVzMax(100.), fMinNumOfContributors(0),
   fNBinsX(0), fMinX(0), fMaxX(0),
   fNBinsY(0), fMinY(0), fMaxY(0),
   fMinTPCClusters(0), fMinITSClusters(0),
@@ -70,17 +72,16 @@ AliProtonAnalysisBase::AliProtonAnalysisBase() :
   fPointOnITSLayer5Flag(0), fPointOnITSLayer6Flag(0),
   fMinTPCdEdxPointsFlag(kFALSE),
   fFunctionProbabilityFlag(kFALSE), 
-  fNSigma(0),
+  fNSigma(0), fNRatio(0),
   fElectronFunction(0), fMuonFunction(0),
   fPionFunction(0), fKaonFunction(0), fProtonFunction(0),
-  fDebugMode(kFALSE) {
+  fDebugMode(kFALSE), fListVertexQA(new TList()) {
   //Default constructor
   for(Int_t i = 0; i < 5; i++) fPartFrac[i] = 0.0;
-  for(Int_t i = 0; i < 24; i++) {
+  /*for(Int_t i = 0; i < 24; i++) {
     fdEdxMean[i] = 0.0;
     fdEdxSigma[i] = 0.0;
-  }
-  fListVertexQA = new TList();
+    }*/
   fListVertexQA->SetName("fListVertexQA");
   TH1F *gHistVx = new TH1F("gHistVx",
                           "Vx distribution;V_{x} [cm];Entries",
@@ -110,6 +111,11 @@ AliProtonAnalysisBase::AliProtonAnalysisBase() :
                                   100,-25.,25.);
   fListVertexQA->Add(gHistVzAccepted);
 
+  TH1F *gHistNumberOfContributors = new TH1F("gHistNumberOfContributors",
+                                            "Number of contributors;N_{contr.};Entries",
+                                            100,0.,100.);
+  fListVertexQA->Add(gHistNumberOfContributors);
+
 
 }
 
@@ -143,15 +149,16 @@ Double_t AliProtonAnalysisBase::GetParticleFraction(Int_t i, Double_t p) {
 //____________________________________________________________________//
 Bool_t AliProtonAnalysisBase::IsInPhaseSpace(AliESDtrack* const track) {
   // Checks if the track is outside the analyzed y-Pt phase space
-  Double_t gPt = 0.0, gPx = 0.0, gPy = 0.0, gPz = 0.0;
+  Double_t gP = 0.0, gPt = 0.0, gPx = 0.0, gPy = 0.0, gPz = 0.0;
   Double_t eta = 0.0;
 
   if((fProtonAnalysisMode == kTPC) || (fProtonAnalysisMode == kHybrid)) {
     AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
     if(!tpcTrack) {
-      gPt = 0.0; gPx = 0.0; gPy = 0.0; gPz = 0.0; eta = -10.0;
+      gP = 0.0; gPt = 0.0; gPx = 0.0; gPy = 0.0; gPz = 0.0; eta = -10.0;
     }
     else {
+      gP = tpcTrack->P();
       gPt = tpcTrack->Pt();
       gPx = tpcTrack->Px();
       gPy = tpcTrack->Py();
@@ -160,6 +167,7 @@ Bool_t AliProtonAnalysisBase::IsInPhaseSpace(AliESDtrack* const track) {
     }
   }//standalone TPC or Hybrid TPC approaches
   else {
+    gP = track->P();
     gPt = track->Pt();
     gPx = track->Px();
     gPy = track->Py();
@@ -172,6 +180,11 @@ Bool_t AliProtonAnalysisBase::IsInPhaseSpace(AliESDtrack* const track) {
        Printf("IsInPhaseSpace: Track rejected because it has a Pt value of %lf (accepted interval: %lf - %lf)",gPt,fMinY,fMaxY);
       return kFALSE;
   }
+  if((gP < fMinY) || (gP > fMaxY)) {
+      if(fDebugMode)
+       Printf("IsInPhaseSpace: Track rejected because it has a P value of %lf (accepted interval: %lf - %lf)",gP,fMinY,fMaxY);
+      return kFALSE;
+  }
   if(fAnalysisEtaMode) {
     if((eta < fMinX) || (eta > fMaxX)) {
       if(fDebugMode)
@@ -191,43 +204,8 @@ Bool_t AliProtonAnalysisBase::IsInPhaseSpace(AliESDtrack* const track) {
 }
 
 //____________________________________________________________________//
-Bool_t AliProtonAnalysisBase::IsAccepted(AliESDEvent *esd,
-                                        const AliESDVertex *vertex, 
-                                        AliESDtrack* track) {
+Bool_t AliProtonAnalysisBase::IsAccepted(AliESDtrack* track) {
   // Checks if the track is excluded from the cuts
-  Double_t gPt = 0.0, gPx = 0.0, gPy = 0.0, gPz = 0.0;
-  Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};  //The impact parameters and their covariance.
-  Double_t dca3D = 0.0;
-  
-  if((fProtonAnalysisMode == kTPC)||(fProtonAnalysisMode == kHybrid)) {
-    AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
-    if(!tpcTrack) {
-      gPt = 0.0; gPx = 0.0; gPy = 0.0; gPz = 0.0;
-      dca[0] = -100.; dca[1] = -100.; dca3D = -100.;
-      cov[0] = -100.; cov[1] = -100.; cov[2] = -100.;
-    }
-    else {
-      gPt = tpcTrack->Pt();
-      gPx = tpcTrack->Px();
-      gPy = tpcTrack->Py();
-      gPz = tpcTrack->Pz();
-      tpcTrack->PropagateToDCA(vertex,
-                              esd->GetMagneticField(),
-                              100.,dca,cov);
-    }
-  }//standalone TPC or hybrid TPC approaches
-  else {
-    gPt = track->Pt();
-    gPx = track->Px();
-    gPy = track->Py();
-    gPz = track->Pz();
-    track->PropagateToDCA(vertex,
-                         esd->GetMagneticField(),
-                         100.,dca,cov);
-  }
-  dca3D = TMath::Sqrt(TMath::Power(dca[0],2) +
-                     TMath::Power(dca[1],2));
-     
   Int_t  fIdxInt[200];
   Int_t nClustersITS = track->GetITSclusters(fIdxInt);
   Int_t nClustersTPC = track->GetTPCclusters(fIdxInt);
@@ -347,111 +325,153 @@ Bool_t AliProtonAnalysisBase::IsAccepted(AliESDEvent *esd,
       return kFALSE;
     }
   }
-  if(fMaxSigmaToVertexFlag) {
-    if(GetSigmaToVertex(track) > fMaxSigmaToVertex) {
+  if(fMinTPCdEdxPointsFlag) {
+    if(track->GetTPCsignalN() < fMinTPCdEdxPoints) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has a %lf sigmas to vertex (max. requested: %lf)",GetSigmaToVertex(track),fMaxSigmaToVertex);
+       Printf("IsAccepted: Track rejected because it has %d TPC points for the calculation of the energy loss (min. requested: %d)",track->GetTPCsignalN(),fMinTPCdEdxPoints);
       return kFALSE;
     }
   }
-  if(fMaxSigmaToVertexTPCFlag) {
-    if(GetSigmaToVertex(track) > fMaxSigmaToVertexTPC) {
+  if(fITSRefitFlag) {
+    if ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has a %lf sigmas to vertex TPC (max. requested: %lf)",GetSigmaToVertex(track),fMaxSigmaToVertexTPC);
+       Printf("IsAccepted: Track rejected because it has no ITS refit flag");
       return kFALSE;
     }
   }
-  if(fMaxDCAXYFlag) { 
-    if(TMath::Abs(dca[0]) > fMaxDCAXY) {
+  if(fTPCRefitFlag) {
+    if ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has a value of dca(xy) of %lf (max. requested: %lf)",TMath::Abs(dca[0]),fMaxDCAXY);
+       Printf("IsAccepted: Track rejected because it has no TPC refit flag");
       return kFALSE;
     }
   }
-  if(fMaxDCAXYTPCFlag) { 
-    if(TMath::Abs(dca[0]) > fMaxDCAXYTPC) {
+  if(fESDpidFlag) {
+    if ((track->GetStatus() & AliESDtrack::kESDpid) == 0) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has a value of dca(xy) (TPC) of %lf (max. requested: %lf)",TMath::Abs(dca[0]),fMaxDCAXYTPC);
+       Printf("IsAccepted: Track rejected because it has no ESD pid flag");
       return kFALSE;
     }
   }
-  if(fMaxDCAZFlag) { 
-    if(TMath::Abs(dca[1]) > fMaxDCAZ) {
+  if(fTPCpidFlag) {
+    if ((track->GetStatus() & AliESDtrack::kTPCpid) == 0) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has a value of dca(z) of %lf (max. requested: %lf)",TMath::Abs(dca[1]),fMaxDCAZ);
+       Printf("IsAccepted: Track rejected because it has no TPC pid flag");
       return kFALSE;
     }
   }
-  if(fMaxDCAZTPCFlag) { 
-    if(TMath::Abs(dca[1]) > fMaxDCAZTPC) {
+  if(fTOFpidFlag) {
+    if ((track->GetStatus() & AliESDtrack::kTOFpid) == 0) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has a value of dca(z) (TPC) of %lf (max. requested: %lf)",TMath::Abs(dca[1]),fMaxDCAZTPC);
+       Printf("IsAccepted: Track rejected because it has no TOF pid flag");
       return kFALSE;
     }
   }
-  if(fMaxDCA3DFlag) { 
-    if(TMath::Abs(dca3D) > fMaxDCA3D) {
+
+  return kTRUE;
+}
+
+//____________________________________________________________________//
+Bool_t AliProtonAnalysisBase::IsPrimary(AliESDEvent *esd,
+                                       const AliESDVertex *vertex, 
+                                       AliESDtrack* track) {
+  // Checks if the track is a primary-like candidate
+  Double_t gPt = 0.0, gPx = 0.0, gPy = 0.0, gPz = 0.0;
+  Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};  //The impact parameters and their covariance.
+  Double_t dca3D = 0.0;
+  
+  if((fProtonAnalysisMode == kTPC)||(fProtonAnalysisMode == kHybrid)) {
+    AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
+    if(!tpcTrack) {
+      gPt = 0.0; gPx = 0.0; gPy = 0.0; gPz = 0.0;
+      dca[0] = -100.; dca[1] = -100.; dca3D = -100.;
+      cov[0] = -100.; cov[1] = -100.; cov[2] = -100.;
+    }
+    else {
+      gPt = tpcTrack->Pt();
+      gPx = tpcTrack->Px();
+      gPy = tpcTrack->Py();
+      gPz = tpcTrack->Pz();
+      tpcTrack->PropagateToDCA(vertex,
+                              esd->GetMagneticField(),
+                              100.,dca,cov);
+    }
+  }//standalone TPC or hybrid TPC approaches
+  else {
+    gPt = track->Pt();
+    gPx = track->Px();
+    gPy = track->Py();
+    gPz = track->Pz();
+    track->PropagateToDCA(vertex,
+                         esd->GetMagneticField(),
+                         100.,dca,cov);
+  }
+  dca3D = TMath::Sqrt(TMath::Power(dca[0],2) +
+                     TMath::Power(dca[1],2));
+     
+  if(fMaxSigmaToVertexFlag) {
+    if(GetSigmaToVertex(track) > fMaxSigmaToVertex) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has a value of dca(3D) of %lf (max. requested: %lf)",TMath::Abs(dca3D),fMaxDCA3D);
+       Printf("IsPrimary: Track rejected because it has a %lf sigmas to vertex (max. requested: %lf)",GetSigmaToVertex(track),fMaxSigmaToVertex);
       return kFALSE;
     }
   }
-  if(fMaxDCA3DTPCFlag) { 
-    if(TMath::Abs(dca3D) > fMaxDCA3DTPC)  {
+  if(fMaxSigmaToVertexTPCFlag) {
+    if(GetSigmaToVertex(track) > fMaxSigmaToVertexTPC) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has a value of dca(3D) (TPC) of %lf (max. requested: %lf)",TMath::Abs(dca3D),fMaxDCA3DTPC);
+       Printf("IsPrimary: Track rejected because it has a %lf sigmas to vertex TPC (max. requested: %lf)",GetSigmaToVertex(track),fMaxSigmaToVertexTPC);
       return kFALSE;
     }
   }
-  if(fMaxConstrainChi2Flag) {
-    if(track->GetConstrainedChi2() > 0) 
-      if(TMath::Log(track->GetConstrainedChi2()) > fMaxConstrainChi2)  {
+  if(fMaxDCAXYFlag) { 
+    if(TMath::Abs(dca[0]) > fMaxDCAXY) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has a value of the constrained chi2 to the vertex of %lf (max. requested: %lf)",TMath::Log(track->GetConstrainedChi2()),fMaxConstrainChi2);
+       Printf("IsPrimary: Track rejected because it has a value of dca(xy) of %lf (max. requested: %lf)",TMath::Abs(dca[0]),fMaxDCAXY);
       return kFALSE;
-      }
+    }
   }
-  if(fMinTPCdEdxPointsFlag) {
-    if(track->GetTPCsignalN() < fMinTPCdEdxPoints) {
+  if(fMaxDCAXYTPCFlag) { 
+    if(TMath::Abs(dca[0]) > fMaxDCAXYTPC) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has %d TPC points for the calculation of the energy loss (min. requested: %d)",track->GetTPCsignalN(),fMinTPCdEdxPoints);
+       Printf("IsPrimary: Track rejected because it has a value of dca(xy) (TPC) of %lf (max. requested: %lf)",TMath::Abs(dca[0]),fMaxDCAXYTPC);
       return kFALSE;
     }
   }
-  if(fITSRefitFlag) {
-    if ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) {
+  if(fMaxDCAZFlag) { 
+    if(TMath::Abs(dca[1]) > fMaxDCAZ) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has no ITS refit flag");
+       Printf("IsPrimary: Track rejected because it has a value of dca(z) of %lf (max. requested: %lf)",TMath::Abs(dca[1]),fMaxDCAZ);
       return kFALSE;
     }
   }
-  if(fTPCRefitFlag) {
-    if ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) {
+  if(fMaxDCAZTPCFlag) { 
+    if(TMath::Abs(dca[1]) > fMaxDCAZTPC) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has no TPC refit flag");
+       Printf("IsPrimary: Track rejected because it has a value of dca(z) (TPC) of %lf (max. requested: %lf)",TMath::Abs(dca[1]),fMaxDCAZTPC);
       return kFALSE;
     }
   }
-  if(fESDpidFlag) {
-    if ((track->GetStatus() & AliESDtrack::kESDpid) == 0) {
+  if(fMaxDCA3DFlag) { 
+    if(TMath::Abs(dca3D) > fMaxDCA3D) {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has no ESD pid flag");
+       Printf("IsPrimary: Track rejected because it has a value of dca(3D) of %lf (max. requested: %lf)",TMath::Abs(dca3D),fMaxDCA3D);
       return kFALSE;
     }
   }
-  if(fTPCpidFlag) {
-    if ((track->GetStatus() & AliESDtrack::kTPCpid) == 0) {
+  if(fMaxDCA3DTPCFlag) { 
+    if(TMath::Abs(dca3D) > fMaxDCA3DTPC)  {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has no TPC pid flag");
+       Printf("IsPrimary: Track rejected because it has a value of dca(3D) (TPC) of %lf (max. requested: %lf)",TMath::Abs(dca3D),fMaxDCA3DTPC);
       return kFALSE;
     }
   }
-  if(fTOFpidFlag) {
-    if ((track->GetStatus() & AliESDtrack::kTOFpid) == 0) {
+  if(fMaxConstrainChi2Flag) {
+    if(track->GetConstrainedChi2() > 0) 
+      if(TMath::Log(track->GetConstrainedChi2()) > fMaxConstrainChi2)  {
       if(fDebugMode)
-       Printf("IsAccepted: Track rejected because it has no TOF pid flag");
+       Printf("IsPrimary: Track rejected because it has a value of the constrained chi2 to the vertex of %lf (max. requested: %lf)",TMath::Log(track->GetConstrainedChi2()),fMaxConstrainChi2);
       return kFALSE;
-    }
+      }
   }
 
   return kTRUE;
@@ -460,7 +480,6 @@ Bool_t AliProtonAnalysisBase::IsAccepted(AliESDEvent *esd,
 //____________________________________________________________________//
 Float_t AliProtonAnalysisBase::GetSigmaToVertex(AliESDtrack* esdTrack) const {
   // Calculates the number of sigma to the vertex.
-  
   Float_t b[2];
   Float_t bRes[2];
   Float_t bCov[3];
@@ -558,6 +577,7 @@ const AliESDVertex* AliProtonAnalysisBase::GetVertex(AliESDEvent* esd,
   ((TH1F *)(fListVertexQA->At(0)))->Fill(vertex->GetXv());
   ((TH1F *)(fListVertexQA->At(2)))->Fill(vertex->GetYv());
   ((TH1F *)(fListVertexQA->At(4)))->Fill(vertex->GetZv());
+
   //check position
   if(TMath::Abs(vertex->GetXv()) > gVxMax) {
     if(fDebugMode)
@@ -577,6 +597,17 @@ const AliESDVertex* AliProtonAnalysisBase::GetVertex(AliESDEvent* esd,
   ((TH1F *)(fListVertexQA->At(1)))->Fill(vertex->GetXv());
   ((TH1F *)(fListVertexQA->At(3)))->Fill(vertex->GetYv());
   ((TH1F *)(fListVertexQA->At(5)))->Fill(vertex->GetZv());
+  ((TH1F *)(fListVertexQA->At(6)))->Fill(vertex->GetNContributors());
+
+  //check number of contributors
+  if(fMinNumOfContributors > 0) {
+    if(fMinNumOfContributors > vertex->GetNContributors()) {
+      if(fDebugMode)
+       Printf("GetVertex: Event rejected because it has %d number of contributors (requested minimum: %d)",vertex->GetNContributors(),fMinNumOfContributors);
+      
+      return 0;
+    }
+  }
   
   return vertex;
 }
@@ -613,7 +644,11 @@ Bool_t AliProtonAnalysisBase::IsEventTriggered(const AliESDEvent *esd,
     }//switch
   }
   else {
-    if(firedTriggerClass.Contains("CINT1B-ABCE-NOPF-ALL"))
+    if(kUseOnlineTrigger) {
+      if(firedTriggerClass.Contains("CINT1B-ABCE-NOPF-ALL"))
+       return kTRUE;
+    }
+    else if(!kUseOnlineTrigger)
       return kTRUE;
   }
 
@@ -650,24 +685,29 @@ TCanvas *AliProtonAnalysisBase::GetListOfCuts() {
   l.DrawLatex(0.1,0.66,listOfCuts.Data());
   listOfCuts = "PID mode: "; 
   if(fProtonPIDMode == kBayesian) listOfCuts += "Bayesian PID";
-  if(fProtonPIDMode == kRatio) listOfCuts += "Z = ln((dE/dx)_{exp.}/(dE/dx)_{theor.})"; 
-  if(fProtonPIDMode == kSigma1) {
-    listOfCuts += "N_{#sigma}(1) area: "; listOfCuts += fNSigma;
-    listOfCuts += " #sigma";
+  if(fProtonPIDMode == kRatio) {
+    listOfCuts += "Z = ln((dE/dx)_{exp.}/(dE/dx)_{theor.}) > ";
+    listOfCuts += fNRatio;
   }
-  if(fProtonPIDMode == kSigma2) {
-    listOfCuts += "N_{#sigma}(2) area: "; listOfCuts += fNSigma;
+  if(fProtonPIDMode == kSigma) {
+    listOfCuts += "N_{#sigma} area: "; listOfCuts += fNSigma;
     listOfCuts += " #sigma";
   }
+  //if(fProtonPIDMode == kSigma2) {
+  //listOfCuts += "N_{#sigma}(2) area: "; listOfCuts += fNSigma;
+  //listOfCuts += " #sigma";
+  //}
   l.DrawLatex(0.1,0.58,listOfCuts.Data());
   listOfCuts = "Accepted vertex diamond: "; 
-  l.DrawLatex(0.1,0.5,listOfCuts.Data());
+  l.DrawLatex(0.1,0.52,listOfCuts.Data());
   listOfCuts = "|V_{x}| < "; listOfCuts += fVxMax; listOfCuts += " [cm]";
-  l.DrawLatex(0.6,0.5,listOfCuts.Data());
+  l.DrawLatex(0.6,0.52,listOfCuts.Data());
   listOfCuts = "|V_{y}| < "; listOfCuts += fVyMax; listOfCuts += " [cm]";
-  l.DrawLatex(0.6,0.4,listOfCuts.Data());
+  l.DrawLatex(0.6,0.45,listOfCuts.Data());
   listOfCuts = "|V_{z}| < "; listOfCuts += fVzMax; listOfCuts += " [cm]";
-  l.DrawLatex(0.6,0.3,listOfCuts.Data());
+  l.DrawLatex(0.6,0.38,listOfCuts.Data());
+  listOfCuts = "N_{contributors} > "; listOfCuts += fMinNumOfContributors; 
+  l.DrawLatex(0.6,0.31,listOfCuts.Data());
   listOfCuts = "Phase space: "; 
   l.DrawLatex(0.1,0.2,listOfCuts.Data());
   if(fAnalysisEtaMode) listOfCuts = "|#eta| < ";  
@@ -843,92 +883,100 @@ Bool_t AliProtonAnalysisBase::IsProton(AliESDtrack *track) {
   }
   //Ratio of the measured over the theoretical dE/dx a la STAR
   else if(fProtonPIDMode == kRatio) {
-    Printf("The kRatio mode is not implemented yet!!!");
-    return kFALSE;
-  }
+    AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
+    if(tpcTrack) {
+      gPt = tpcTrack->Pt();
+      gP = tpcTrack->P();
+      gEta = tpcTrack->Eta();
+    }
+    Double_t fAlephParameters[5];
+    if(fAnalysisMC) {
+      fAlephParameters[0] = 2.15898e+00/50.;
+      fAlephParameters[1] = 1.75295e+01;
+      fAlephParameters[2] = 3.40030e-09;
+      fAlephParameters[3] = 1.96178e+00;
+      fAlephParameters[4] = 3.91720e+00;
+    }
+    else {
+      fAlephParameters[0] = 0.0283086;
+      fAlephParameters[1] = 2.63394e+01;
+      fAlephParameters[2] = 5.04114e-11;
+      fAlephParameters[3] = 2.12543e+00;
+      fAlephParameters[4] = 4.88663e+00;
+    }
+    
+    AliESDpid *fESDpid = new AliESDpid(); 
+    AliTPCPIDResponse tpcResponse = fESDpid->GetTPCResponse(); 
+    tpcResponse.SetBetheBlochParameters(fAlephParameters[0],fAlephParameters[1],fAlephParameters[2],fAlephParameters[3],fAlephParameters[4]);
+    Double_t normalizeddEdx = TMath::Log(track->GetTPCsignal()/tpcResponse.GetExpectedSignal(gP,AliPID::kProton));
+    
+    if(normalizeddEdx >= fNRatio)
+      return kTRUE;
+  }//kRatio PID mode
   //Definition of an N-sigma area around the dE/dx vs P band
-  else if(fProtonPIDMode == kSigma1) {
+  else if(fProtonPIDMode == kSigma) {
     Double_t fAlephParameters[5];
     if(fAnalysisMC) {
-      fAlephParameters[0] = 4.23232575531564326e+00;
-      fAlephParameters[1] = 8.68482806165147636e+00;
-      fAlephParameters[2] = 1.34000000000000005e-05;
-      fAlephParameters[3] = 2.30445734159456084e+00;
-      fAlephParameters[4] = 2.25624744086878559e+00;
+      fAlephParameters[0] = 2.15898e+00/50.;
+      fAlephParameters[1] = 1.75295e+01;
+      fAlephParameters[2] = 3.40030e-09;
+      fAlephParameters[3] = 1.96178e+00;
+      fAlephParameters[4] = 3.91720e+00;
     }
     else {
-      fAlephParameters[0] = 50*0.76176e-1;
-      fAlephParameters[1] = 10.632;
-      fAlephParameters[2] = 0.13279e-4;
-      fAlephParameters[3] = 1.8631;
-      fAlephParameters[4] = 1.9479;
+      fAlephParameters[0] = 0.0283086;
+      fAlephParameters[1] = 2.63394e+01;
+      fAlephParameters[2] = 5.04114e-11;
+      fAlephParameters[3] = 2.12543e+00;
+      fAlephParameters[4] = 4.88663e+00;
     }
 
-    AliTPCpidESD *fPidObject = new AliTPCpidESD(); 
-    fPidObject->SetBetheBlochParameters(fAlephParameters[0]/50.,fAlephParameters[1],fAlephParameters[2],fAlephParameters[3],fAlephParameters[4]);
+    Double_t nsigma = 100.0;
+    AliESDpid *fESDpid = new AliESDpid(); 
+    fESDpid->GetTPCResponse().SetBetheBlochParameters(fAlephParameters[0],fAlephParameters[1],fAlephParameters[2],fAlephParameters[3],fAlephParameters[4]);
     
-    Double_t nsigma = TMath::Abs(fPidObject->GetNumberOfSigmas(track,AliPID::kProton));
+    AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
+    if(tpcTrack)
+      nsigma = TMath::Abs(fESDpid->NumberOfSigmasTPC(track,AliPID::kProton));
+  
     if(nsigma <= fNSigma) 
       return kTRUE;
-  }//kSigma1 PID method
+  }//kSigma PID method
   //Another definition of an N-sigma area around the dE/dx vs P band
-  else if(fProtonPIDMode == kSigma2) {
+  /*else if(fProtonPIDMode == kSigma2) {
     AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
     if(tpcTrack) {
       gPt = tpcTrack->Pt();
       gP = tpcTrack->P();
       gEta = tpcTrack->Eta();
     }
-    //We start the P slices at >0.3GeV/c with a bining of 50MeV/c ==> Int_t(0.3001/0.05) = 6
-    Int_t nbinP = Int_t(gP/0.05) - 6;
-    Double_t tpcSignal = track->GetTPCsignal();
-    Double_t dEdxTheory = Bethe(gP/9.38270000000000048e-01);
-    Double_t dEdxSigma = fdEdxSigma[nbinP];
-    Double_t nsigma = TMath::Abs(tpcSignal - dEdxTheory)/(tpcSignal*(dEdxSigma/TMath::Sqrt(track->GetTPCsignalN())));
-    if(nsigma <= fNSigma) 
+    Double_t fAlephParameters[5];
+    if(fAnalysisMC) {
+      fAlephParameters[0] = 2.15898e+00/50.;
+      fAlephParameters[1] = 1.75295e+01;
+      fAlephParameters[2] = 3.40030e-09;
+      fAlephParameters[3] = 1.96178e+00;
+      fAlephParameters[4] = 3.91720e+00;
+    }
+    else {
+      fAlephParameters[0] = 0.0283086;
+      fAlephParameters[1] = 2.63394e+01;
+      fAlephParameters[2] = 5.04114e-11;
+      fAlephParameters[3] = 2.12543e+00;
+      fAlephParameters[4] = 4.88663e+00;
+    }
+
+    AliESDpid *fESDpid = new AliESDpid(); 
+    AliTPCPIDResponse tpcResponse = fESDpid->GetTPCResponse(); 
+    tpcResponse.SetBetheBlochParameters(fAlephParameters[0],fAlephParameters[1],fAlephParameters[2],fAlephParameters[3],fAlephParameters[4]);
+    Double_t normalizeddEdx = TMath::Log(track->GetTPCsignal()/tpcResponse.GetExpectedSignal(gP,AliPID::kProton));
+
+    if(normalizeddEdx >= -0.15)
       return kTRUE;
-  }
+  }*/
 
   return kFALSE;
 }
 
-//________________________________________________________________________
-void AliProtonAnalysisBase::SetdEdxBandInfo(const char *filename) {
-  // This function is used in case the kSigma1 or kSigma2 PID mode is selected
-  // It takes as an argument the name of the ascii file (for the time being) 
-  // that is generated as a prior process.
-  // This ascii file has three columns: The min. P value (bins of 50MeV/c) 
-  // the mean and the sigma of the dE/dx distributions for protons coming 
-  // from a gaussian fit.
-  ifstream in;
-  in.open(filename);
-
-  Double_t gPtMin = 0.0;
-  Int_t iCounter = 0;
-  while(in.good()) {
-    in >> gPtMin >> fdEdxMean[iCounter] >> fdEdxSigma[iCounter];
-    if(fDebugMode)
-      Printf("Momentum bin: %d - Min momentum: %lf - mean(dE/dx): %lf - sigma(dE/dx): %lf",iCounter+1,gPtMin,fdEdxMean[iCounter],fdEdxSigma[iCounter]);
-    iCounter += 1;
-  }
-}
-
-//________________________________________________________________________
-Double_t AliProtonAnalysisBase::Bethe(Double_t bg) const {
-  // This is the Bethe-Bloch function normalised to 1 at the minimum
-  // We renormalize it based on the MC information
-  // WARNING: To be revised soon!!!
-  // This is just a temporary fix
-  Double_t normalization = 49.2;
-  Double_t bg2=bg*bg;
-  Double_t beta2 = bg2/(1.+ bg2);
-  Double_t bb = 8.62702e-2*(9.14550 - beta2 - TMath::Log(3.51000e-5 + 1./bg2))/beta2;
-  //
-  const Float_t kmeanCorrection =0.1;
-  Double_t meanCorrection =(1+(bb-1)*kmeanCorrection);
-  bb *= meanCorrection;
-
-  return normalization*bb; 
-}