]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/SPECTRA/AliProtonQAAnalysis.cxx
Adding the QA plot for the pid efficiency/contamination vs the number of TPC points...
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliProtonQAAnalysis.cxx
index 10e4d55af3e948a745834e9757f7b96f0a72c2ac..33e60cd0668a52c9998b7b40a53c65639ce0641c 100644 (file)
@@ -19,7 +19,6 @@
 //   Origin: Panos Christakoglou | Panos.Christakoglou@cern.ch
 //-----------------------------------------------------------------
 #include <Riostream.h>
-#include <TFile.h>
 #include <TSystem.h>
 #include <TF1.h>
 #include <TH2D.h>
@@ -29,6 +28,7 @@
 #include <TParticle.h>
 
 #include "AliProtonQAAnalysis.h"
+#include "AliProtonAnalysisBase.h"
 
 #include <AliExternalTrackParam.h>
 #include <AliESDEvent.h>
 #include <AliStack.h>
 #include <AliESDVertex.h>
 #include <AliGenEventHeader.h>
+#include <AliMCEvent.h>
 
 ClassImp(AliProtonQAAnalysis)
 
 //____________________________________________________________________//
 AliProtonQAAnalysis::AliProtonQAAnalysis() : 
-  TObject(), fAnalysisEtaMode(kFALSE),
+  TObject(), fProtonAnalysisBase(0),
   fNBinsY(0), fMinY(0), fMaxY(0),
   fNBinsPt(0), fMinPt(0), fMaxPt(0),
-  fMinTPCClusters(0), fMinITSClusters(0),
-  fMaxChi2PerTPCCluster(0), fMaxChi2PerITSCluster(0),
-  fMaxCov11(0), fMaxCov22(0), fMaxCov33(0), fMaxCov44(0), fMaxCov55(0),
-  fMaxSigmaToVertex(0), fMaxSigmaToVertexTPC(0),
-  fMaxDCAXY(0), fMaxDCAXYTPC(0),
-  fMaxDCAZ(0), fMaxDCAZTPC(0),
-  fMaxConstrainChi2(0),
-  fMinTPCClustersFlag(kFALSE), fMinITSClustersFlag(kFALSE),
-  fMaxChi2PerTPCClusterFlag(kFALSE), fMaxChi2PerITSClusterFlag(kFALSE),
-  fMaxCov11Flag(kFALSE), fMaxCov22Flag(kFALSE), 
-  fMaxCov33Flag(kFALSE), fMaxCov44Flag(kFALSE), fMaxCov55Flag(kFALSE),
-  fMaxSigmaToVertexFlag(kFALSE), fMaxSigmaToVertexTPCFlag(kFALSE),
-  fMaxDCAXYFlag(kFALSE), fMaxDCAXYTPCFlag(kFALSE),
-  fMaxDCAZFlag(kFALSE), fMaxDCAZTPCFlag(kFALSE),
-  fMaxConstrainChi2Flag(kFALSE),
-  fITSRefitFlag(kFALSE), fTPCRefitFlag(kFALSE),
-  fESDpidFlag(kFALSE), fTPCpidFlag(kFALSE),
-  fPointOnITSLayer1Flag(0), fPointOnITSLayer2Flag(0),
-  fPointOnITSLayer3Flag(0), fPointOnITSLayer4Flag(0),
-  fPointOnITSLayer5Flag(0), fPointOnITSLayer6Flag(0),
   fGlobalQAList(0), fQAVertexList(0), fQA2DList(0),
   fQAPrimaryProtonsAcceptedList(0),
   fQAPrimaryProtonsRejectedList(0),
@@ -74,10 +55,6 @@ AliProtonQAAnalysis::AliProtonQAAnalysis() :
   fQAPrimaryAntiProtonsRejectedList(0),
   fQASecondaryAntiProtonsAcceptedList(0),
   fQASecondaryAntiProtonsRejectedList(0),
-  fFunctionProbabilityFlag(kFALSE), 
-  fElectronFunction(0), fMuonFunction(0),
-  fPionFunction(0), fKaonFunction(0), fProtonFunction(0),
-  fUseTPCOnly(kFALSE), fUseHybridTPC(kFALSE),
   fPDGList(0), fMCProcessesList(0),
   fRunMCAnalysis(kFALSE),
   fMCProcessIdFlag(kFALSE), fMCProcessId(0),
@@ -88,12 +65,12 @@ AliProtonQAAnalysis::AliProtonQAAnalysis() :
   fUseCutsInEfficiency(kFALSE),
   fEfficiencyList(0) {
   //Default constructor
-  for(Int_t i = 0; i < 5; i++) fPartFrac[i] = 0.0;
 }
 
 //____________________________________________________________________//
 AliProtonQAAnalysis::~AliProtonQAAnalysis() {
   //Default destructor
+  if(fProtonAnalysisBase) delete fProtonAnalysisBase;
   if(fGlobalQAList) delete fGlobalQAList;
   if(fQAVertexList) delete fQAVertexList;
   if(fQA2DList) delete fQA2DList;
@@ -122,69 +99,18 @@ AliProtonQAAnalysis::~AliProtonQAAnalysis() {
 }
 
 //____________________________________________________________________//
-Double_t AliProtonQAAnalysis::GetParticleFraction(Int_t i, Double_t p) {
-  Double_t partFrac=0;
-  if(fFunctionProbabilityFlag) {
-    if(i == 0) partFrac = fElectronFunction->Eval(p);
-    if(i == 1) partFrac = fMuonFunction->Eval(p);
-    if(i == 2) partFrac = fPionFunction->Eval(p);
-    if(i == 3) partFrac = fKaonFunction->Eval(p);
-    if(i == 4) partFrac = fProtonFunction->Eval(p);
-  }
-  else partFrac = fPartFrac[i];
-
-  return partFrac;
-}
-
-//____________________________________________________________________//
-Bool_t AliProtonQAAnalysis::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 eta = 0.0;
-
-  if(fUseTPCOnly) {
-    AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
-    if(!tpcTrack) {
-      gPt = 0.0; gPx = 0.0; gPy = 0.0; gPz = 0.0; eta = -10.0;
-    }
-    else {
-      gPt = tpcTrack->Pt();
-      gPx = tpcTrack->Px();
-      gPy = tpcTrack->Py();
-      gPz = tpcTrack->Pz();
-      eta = tpcTrack->Eta();
-    }
-  }
-  else {
-    gPt = track->Pt();
-    gPx = track->Px();
-    gPy = track->Py();
-    gPz = track->Pz();
-    eta = track->Eta();
-  }
-  
-  if((gPt < fMinPt) || (gPt > fMaxPt)) return kFALSE;
-  if(fAnalysisEtaMode) {
-    if((eta < fMinY) || (eta > fMaxY)) 
-      return kFALSE;
-  }
-  else {
-    if((Rapidity(gPx,gPy,gPz) < fMinY) || (Rapidity(gPx,gPy,gPz) > fMaxY)) 
-      return kFALSE;
-  }
-
-  return kTRUE;
-}
-
-//____________________________________________________________________//
-Bool_t AliProtonQAAnalysis::IsAccepted(AliESDEvent *esd,
-                                      const AliESDVertex *vertex, 
-                                      AliESDtrack* track) {
+void AliProtonQAAnalysis::FillQA(AliStack *const stack,
+                                AliESDEvent *esd,
+                                const AliESDVertex *vertex, 
+                                AliESDtrack* track) {
   // Checks if the track is excluded from the cuts
+  Int_t nPrimaries = stack->GetNprimary();
+  Int_t label = TMath::Abs(track->GetLabel());
+
   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.
-  
-  if((fUseTPCOnly)&&(!fUseHybridTPC)) {
+
+  if((fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kTPC)||(fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kHybrid)) {
     AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
     if(!tpcTrack) {
       gPt = 0.0; gPx = 0.0; gPy = 0.0; gPz = 0.0;
@@ -201,23 +127,6 @@ Bool_t AliProtonQAAnalysis::IsAccepted(AliESDEvent *esd,
                               100.,dca,cov);
     }
   }
-  else if(fUseHybridTPC) {
-     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.;
-      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);
-    }
-  }
   else{
     gPt = track->Pt();
     gPx = track->Px();
@@ -227,182 +136,6 @@ Bool_t AliProtonQAAnalysis::IsAccepted(AliESDEvent *esd,
                          esd->GetMagneticField(),
                          100.,dca,cov);
   }
-     
-  Int_t  fIdxInt[200];
-  Int_t nClustersITS = track->GetITSclusters(fIdxInt);
-  Int_t nClustersTPC = track->GetTPCclusters(fIdxInt);
-
-  Float_t chi2PerClusterITS = -1;
-  if (nClustersITS!=0)
-    chi2PerClusterITS = track->GetITSchi2()/Float_t(nClustersITS);
-  Float_t chi2PerClusterTPC = -1;
-  if (nClustersTPC!=0)
-    chi2PerClusterTPC = track->GetTPCchi2()/Float_t(nClustersTPC);
-
-  Double_t extCov[15];
-  track->GetExternalCovariance(extCov);
-
-  if(fPointOnITSLayer1Flag)
-    if(!track->HasPointOnITSLayer(0)) return kFALSE;
-  if(fPointOnITSLayer2Flag)
-    if(!track->HasPointOnITSLayer(1)) return kFALSE;
-  if(fPointOnITSLayer3Flag)
-    if(!track->HasPointOnITSLayer(2)) return kFALSE;
-  if(fPointOnITSLayer4Flag)
-    if(!track->HasPointOnITSLayer(3)) return kFALSE;
-  if(fPointOnITSLayer5Flag)
-    if(!track->HasPointOnITSLayer(4)) return kFALSE;
-  if(fPointOnITSLayer6Flag)
-    if(!track->HasPointOnITSLayer(5)) return kFALSE;
-  if(fMinITSClustersFlag)
-    if(nClustersITS < fMinITSClusters) return kFALSE;
-  if(fMaxChi2PerITSClusterFlag)
-    if(chi2PerClusterITS > fMaxChi2PerITSCluster) return kFALSE; 
-  if(fMinTPCClustersFlag)
-    if(nClustersTPC < fMinTPCClusters) return kFALSE;
-  if(fMaxChi2PerTPCClusterFlag)
-    if(chi2PerClusterTPC > fMaxChi2PerTPCCluster) return kFALSE; 
-  if(fMaxCov11Flag)
-    if(extCov[0] > fMaxCov11) return kFALSE;
-  if(fMaxCov22Flag)
-    if(extCov[2] > fMaxCov22) return kFALSE;
-  if(fMaxCov33Flag)
-    if(extCov[5] > fMaxCov33) return kFALSE;
-  if(fMaxCov44Flag)
-    if(extCov[9] > fMaxCov44) return kFALSE;
-  if(fMaxCov55Flag)
-    if(extCov[14] > fMaxCov55) return kFALSE;
-  if(fMaxSigmaToVertexFlag)
-    if(GetSigmaToVertex(track) > fMaxSigmaToVertex) return kFALSE;
-  if(fMaxSigmaToVertexTPCFlag)
-    if(GetSigmaToVertex(track) > fMaxSigmaToVertexTPC) return kFALSE;
-  if(fMaxDCAXYFlag) 
-    if(TMath::Abs(dca[0]) > fMaxDCAXY) return kFALSE;
-  if(fMaxDCAXYTPCFlag) 
-    if(TMath::Abs(dca[0]) > fMaxDCAXYTPC) return kFALSE;
-    if(fMaxDCAZFlag) 
-    if(TMath::Abs(dca[1]) > fMaxDCAZ) return kFALSE;
-  if(fMaxDCAZTPCFlag) 
-    if(TMath::Abs(dca[1]) > fMaxDCAZTPC) return kFALSE;
-  if(fMaxConstrainChi2Flag) {
-    if(track->GetConstrainedChi2() > 0) 
-      if(TMath::Log(track->GetConstrainedChi2()) > fMaxConstrainChi2) return kFALSE;
-  }
-  if(fITSRefitFlag)
-    if ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) return kFALSE;
-  if(fTPCRefitFlag)
-    if ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) return kFALSE;
-  if(fESDpidFlag)
-    if ((track->GetStatus() & AliESDtrack::kESDpid) == 0) return kFALSE;
-  if(fTPCpidFlag)
-    if ((track->GetStatus() & AliESDtrack::kTPCpid) == 0) return kFALSE;
-
-  return kTRUE;
-}
-
-//____________________________________________________________________//
-Float_t AliProtonQAAnalysis::GetSigmaToVertex(AliESDtrack* esdTrack) const {
-  // Calculates the number of sigma to the vertex.
-  
-  Float_t b[2];
-  Float_t bRes[2];
-  Float_t bCov[3];
-  if((fUseTPCOnly)&&(!fUseHybridTPC))
-    esdTrack->GetImpactParametersTPC(b,bCov);
-  else
-    esdTrack->GetImpactParameters(b,bCov);
-  
-  if (bCov[0]<=0 || bCov[2]<=0) {
-    //AliDebug(1, "Estimated b resolution lower or equal zero!");
-    bCov[0]=0; bCov[2]=0;
-  }
-  bRes[0] = TMath::Sqrt(bCov[0]);
-  bRes[1] = TMath::Sqrt(bCov[2]);
-  
-  if (bRes[0] == 0 || bRes[1] ==0) return -1;
-  
-  Float_t d = TMath::Sqrt(TMath::Power(b[0]/bRes[0],2) + TMath::Power(b[1]/bRes[1],2));
-  
-  if (TMath::Exp(-d * d / 2) < 1e-10) return 1000;
-  
-  d = TMath::ErfInverse(1 - TMath::Exp(-d * d / 2)) * TMath::Sqrt(2);
-  
-  return d;
-}
-
-//____________________________________________________________________//
-Double_t AliProtonQAAnalysis::Rapidity(Double_t gPx, 
-                                      Double_t gPy, 
-                                      Double_t gPz) const {
-  //returns the rapidity of the proton - to be removed
-  Double_t fMass = 9.38270000000000048e-01;
-  
-  Double_t gP = TMath::Sqrt(TMath::Power(gPx,2) + 
-                           TMath::Power(gPy,2) + 
-                          TMath::Power(gPz,2));
-  Double_t energy = TMath::Sqrt(gP*gP + fMass*fMass);
-  Double_t y = -999;
-  if(energy != gPz) 
-    y = 0.5*TMath::Log((energy + gPz)/(energy - gPz));
-
-  return y;
-}
-
-//____________________________________________________________________//
-void AliProtonQAAnalysis::FillQA(AliStack *stack,
-                                AliESDEvent *esd,
-                                const AliESDVertex *vertex, 
-                                AliESDtrack* track) {
-  // Checks if the track is excluded from the cuts
-  Int_t nPrimaries = stack->GetNprimary();
-  Int_t label = TMath::Abs(track->GetLabel());
-
-  Double_t Pt = 0.0, Px = 0.0, Py = 0.0, Pz = 0.0;
-  Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};  //The impact parameters and their covariance.
-
-  if((fUseTPCOnly)&&(!fUseHybridTPC)) {
-    AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
-    if(!tpcTrack) {
-      Pt = 0.0; Px = 0.0; Py = 0.0; Pz = 0.0;
-      dca[0] = -100.; dca[1] = -100.;
-      cov[0] = -100.; cov[1] = -100.; cov[2] = -100.;
-    }
-    else {
-      Pt = tpcTrack->Pt();
-      Px = tpcTrack->Px();
-      Py = tpcTrack->Py();
-      Pz = tpcTrack->Pz();
-      tpcTrack->PropagateToDCA(vertex,
-                              esd->GetMagneticField(),
-                              100.,dca,cov);
-    }
-  }
-  else if(fUseHybridTPC) {
-     AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
-    if(!tpcTrack) {
-      Pt = 0.0; Px = 0.0; Py = 0.0; Pz = 0.0;
-      dca[0] = -100.; dca[1] = -100.;
-      cov[0] = -100.; cov[1] = -100.; cov[2] = -100.;
-    }
-    else {
-      Pt = tpcTrack->Pt();
-      Px = tpcTrack->Px();
-      Py = tpcTrack->Py();
-      Pz = tpcTrack->Pz();
-      tpcTrack->PropagateToDCA(vertex,
-                              esd->GetMagneticField(),
-                              100.,dca,cov);
-    }
-  }
-  else{
-    Pt = track->Pt();
-    Px = track->Px();
-    Py = track->Py();
-    Pz = track->Pz();
-    track->PropagateToDCA(vertex,
-                         esd->GetMagneticField(),
-                         100.,dca,cov);
-  }
 
   Int_t  fIdxInt[200];
   Int_t nClustersITS = track->GetITSclusters(fIdxInt);
@@ -418,430 +151,399 @@ void AliProtonQAAnalysis::FillQA(AliStack *stack,
   Double_t extCov[15];
   track->GetExternalCovariance(extCov);
   
-  //cout<<"Charge: "<<track->Charge()<<
-  //" - Label/Primaries: "<<label<<"/"<<nPrimaries<<
-  //" - TPC clusters: "<<nClustersTPC<<endl;
   //protons
   if(track->Charge() > 0) {
     //Primaries
     if(label <= nPrimaries) {
-      if(fMinITSClustersFlag) {
-       if(nClustersITS < fMinITSClusters) {
+      if(fProtonAnalysisBase->IsUsedMinITSClusters()) {
+       if(nClustersITS < fProtonAnalysisBase->GetMinITSClusters()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(0)))->Fill(nClustersITS);
-         //status = kFALSE;
        }
-       else if(nClustersITS >= fMinITSClusters
+       else if(nClustersITS >= fProtonAnalysisBase->GetMinITSClusters()
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(0)))->Fill(nClustersITS);
       }//ITS clusters
-      if(fMaxChi2PerITSClusterFlag) {
-       if(chi2PerClusterITS > fMaxChi2PerITSCluster) {
+      if(fProtonAnalysisBase->IsUsedMaxChi2PerITSCluster()) {
+       if(chi2PerClusterITS > fProtonAnalysisBase->GetMaxChi2PerITSCluster()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(1)))->Fill(chi2PerClusterITS);
-         //status = kFALSE;
        }
-       else if(chi2PerClusterITS <= fMaxChi2PerITSCluster)
+       else if(chi2PerClusterITS <= fProtonAnalysisBase->GetMaxChi2PerITSCluster())
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(1)))->Fill(chi2PerClusterITS);
       }//chi2 per ITS cluster
-      if(fMinTPCClustersFlag) {
-       if(nClustersTPC < fMinTPCClusters) {
-         //cout<<"Primary proton rejected"<<endl;
+      if(fProtonAnalysisBase->IsUsedMinTPCClusters()) {
+       if(nClustersTPC < fProtonAnalysisBase->GetMinTPCClusters()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(2)))->Fill(nClustersTPC);
-         //status = kFALSE;
        }
-       else if(nClustersTPC >= fMinTPCClusters) {
-         //cout<<"Primary proton accepted"<<endl;
+       else if(nClustersTPC >= fProtonAnalysisBase->GetMinTPCClusters()) {
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(2)))->Fill(nClustersTPC);
        }
       }//TPC clusters
-      if(fMaxChi2PerTPCClusterFlag) {
-       if(chi2PerClusterTPC > fMaxChi2PerTPCCluster) {
+      if(fProtonAnalysisBase->IsUsedMaxChi2PerTPCCluster()) {
+       if(chi2PerClusterTPC > fProtonAnalysisBase->GetMaxChi2PerTPCCluster()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(3)))->Fill(chi2PerClusterTPC);
-         //status = kFALSE;
        }
-       else if(chi2PerClusterTPC <= fMaxChi2PerTPCCluster)
+       else if(chi2PerClusterTPC <= fProtonAnalysisBase->GetMaxChi2PerTPCCluster())
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(3)))->Fill(chi2PerClusterTPC);
       }//chi2 per TPC cluster
-      if(fMaxCov11Flag) {
-       if(extCov[0] > fMaxCov11) {
+      if(fProtonAnalysisBase->IsUsedMaxCov11()) {
+       if(extCov[0] > fProtonAnalysisBase->GetMaxCov11()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(4)))->Fill(extCov[0]);
-         //status = kFALSE;
        }
-       else if(extCov[0] <= fMaxCov11)
+       else if(extCov[0] <= fProtonAnalysisBase->GetMaxCov11())
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(4)))->Fill(extCov[0]);
       }//cov11
-      if(fMaxCov22Flag) {
-       if(extCov[2] > fMaxCov22) {
+      if(fProtonAnalysisBase->IsUsedMaxCov22()) {
+       if(extCov[2] > fProtonAnalysisBase->GetMaxCov22()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(5)))->Fill(extCov[2]);
-         //status = kFALSE;
        }
-       else if(extCov[2] <= fMaxCov22)
+       else if(extCov[2] <= fProtonAnalysisBase->GetMaxCov22())
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(5)))->Fill(extCov[2]);
       }//cov11
-      if(fMaxCov33Flag) {
-       if(extCov[5] > fMaxCov33) {
+      if(fProtonAnalysisBase->IsUsedMaxCov33()) {
+       if(extCov[5] > fProtonAnalysisBase->GetMaxCov33()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(6)))->Fill(extCov[5]);
-         //status = kFALSE;
        }
-       else if(extCov[5] <= fMaxCov33)
+       else if(extCov[5] <= fProtonAnalysisBase->GetMaxCov33())
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(6)))->Fill(extCov[5]);
       }//cov11
-      if(fMaxCov44Flag) {
-       if(extCov[9] > fMaxCov44) {
+      if(fProtonAnalysisBase->IsUsedMaxCov44()) {
+       if(extCov[9] > fProtonAnalysisBase->GetMaxCov44()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(7)))->Fill(extCov[9]);
-         //status = kFALSE;
        }
-       else if(extCov[9] <= fMaxCov44)
+       else if(extCov[9] <= fProtonAnalysisBase->GetMaxCov44())
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(7)))->Fill(extCov[9]);
       }//cov11
-      if(fMaxCov55Flag) {
-       if(extCov[14] > fMaxCov55) {
+      if(fProtonAnalysisBase->IsUsedMaxCov55()) {
+       if(extCov[14] > fProtonAnalysisBase->GetMaxCov55()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(8)))->Fill(extCov[14]);
-         //status = kFALSE;
        }
-       else if(extCov[14] <= fMaxCov55)
+       else if(extCov[14] <= fProtonAnalysisBase->GetMaxCov55())
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(8)))->Fill(extCov[14]);
       }//cov55
-      if(fMaxSigmaToVertexFlag) {
-       if(GetSigmaToVertex(track) > fMaxSigmaToVertex) {
-         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(9)))->Fill(GetSigmaToVertex(track));
-         //status = kFALSE;
+      if(fProtonAnalysisBase->IsUsedMaxSigmaToVertex()) {
+       if(fProtonAnalysisBase->GetSigmaToVertex(track) > fProtonAnalysisBase->GetMaxSigmaToVertex()) {
+         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(9)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
        }
-       else if(GetSigmaToVertex(track) <= fMaxSigmaToVertex)
-         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(9)))->Fill(GetSigmaToVertex(track));
+       else if(fProtonAnalysisBase->GetSigmaToVertex(track) <= fProtonAnalysisBase->GetMaxSigmaToVertex())
+         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(9)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
       }//sigma to vertex
-      if(fMaxSigmaToVertexTPCFlag) {
-       if(GetSigmaToVertex(track) > fMaxSigmaToVertexTPC) {
-         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(10)))->Fill(GetSigmaToVertex(track));
-         //status = kFALSE;
+      if(fProtonAnalysisBase->IsUsedMaxSigmaToVertexTPC()) {
+       if(fProtonAnalysisBase->GetSigmaToVertex(track) > fProtonAnalysisBase->GetMaxSigmaToVertexTPC()) {
+         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(10)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
        }
-       else if(GetSigmaToVertex(track) <= fMaxSigmaToVertexTPC)
-         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(10)))->Fill(GetSigmaToVertex(track));
+       else if(fProtonAnalysisBase->GetSigmaToVertex(track) <= fProtonAnalysisBase->GetMaxSigmaToVertexTPC())
+         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(10)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
       }//sigma to vertex TPC
-      if(fMaxDCAXYFlag) {
-       if(TMath::Abs(dca[0]) > fMaxDCAXY) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAXY()) {
+       if(TMath::Abs(dca[0]) > fProtonAnalysisBase->GetMaxDCAXY()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(11)))->Fill(TMath::Abs(dca[0]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[0]) <= fMaxDCAXY)
+       else if(TMath::Abs(dca[0]) <= fProtonAnalysisBase->GetMaxDCAXY())
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(11)))->Fill(TMath::Abs(dca[0]));
       }//DCA xy global tracking
-      if(fMaxDCAXYTPCFlag) {
-       if(TMath::Abs(dca[0]) > fMaxDCAXYTPC) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAXYTPC()) {
+       if(TMath::Abs(dca[0]) > fProtonAnalysisBase->GetMaxDCAXYTPC()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(12)))->Fill(TMath::Abs(dca[0]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[0]) <= fMaxDCAXYTPC)
+       else if(TMath::Abs(dca[0]) <= fProtonAnalysisBase->GetMaxDCAXYTPC())
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(12)))->Fill(TMath::Abs(dca[0]));
       }//DCA xy TPC tracking
-      if(fMaxDCAZFlag) {
-       if(TMath::Abs(dca[1]) > fMaxDCAZ) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAZ()) {
+       if(TMath::Abs(dca[1]) > fProtonAnalysisBase->GetMaxDCAZ()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(13)))->Fill(TMath::Abs(dca[1]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[1]) <= fMaxDCAZ)
+       else if(TMath::Abs(dca[1]) <= fProtonAnalysisBase->GetMaxDCAZ())
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(13)))->Fill(TMath::Abs(dca[1]));
       }//DCA z global tracking
-      if(fMaxDCAZTPCFlag) {
-       if(TMath::Abs(dca[1]) > fMaxDCAZTPC) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAZTPC()) {
+       if(TMath::Abs(dca[1]) > fProtonAnalysisBase->GetMaxDCAZTPC()) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(14)))->Fill(TMath::Abs(dca[1]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[1]) <= fMaxDCAZTPC)
+       else if(TMath::Abs(dca[1]) <= fProtonAnalysisBase->GetMaxDCAZTPC())
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(14)))->Fill(TMath::Abs(dca[1]));
       }//DCA z TPC tracking
-      if(fMaxConstrainChi2Flag) {
+      if(fProtonAnalysisBase->IsUsedMaxConstrainChi2()) {
        if(track->GetConstrainedChi2() > 0) {
-         if(TMath::Log(track->GetConstrainedChi2()) > fMaxConstrainChi2) {
+         if(TMath::Log(track->GetConstrainedChi2()) > fProtonAnalysisBase->GetMaxConstrainChi2()) {
            ((TH1F *)(fQAPrimaryProtonsRejectedList->At(15)))->Fill(TMath::Log(track->GetConstrainedChi2()));
-           //status = kFALSE;
          }
-         else if(TMath::Log(track->GetConstrainedChi2()) <= fMaxConstrainChi2)
+         else if(TMath::Log(track->GetConstrainedChi2()) <= fProtonAnalysisBase->GetMaxConstrainChi2())
            ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(15)))->Fill(TMath::Log(track->GetConstrainedChi2()));
        }
       }//constrain chi2 - vertex
-      if(fITSRefitFlag) {
+      if(fProtonAnalysisBase->IsUsedITSRefit()) {
        if ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(16)))->Fill(0);
-       //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kITSrefit) != 0)
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(16)))->Fill(0);
       }//ITS refit
-      if(fTPCRefitFlag) {
+      if(fProtonAnalysisBase->IsUsedTPCRefit()) {
        if ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(17)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kTPCrefit) != 0)
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(17)))->Fill(0);
       }//TPC refit
-      if(fESDpidFlag) {
+      if(fProtonAnalysisBase->IsUsedESDpid()) {
        if ((track->GetStatus() & AliESDtrack::kESDpid) == 0) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(18)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kESDpid) != 0)
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(18)))->Fill(0);
       }//ESD pid
-      if(fTPCpidFlag) {
+      if(fProtonAnalysisBase->IsUsedTPCpid()) {
        if ((track->GetStatus() & AliESDtrack::kTPCpid) == 0) {
          ((TH1F *)(fQAPrimaryProtonsRejectedList->At(19)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kTPCpid) != 0)
          ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(19)))->Fill(0);
       }//TPC pid
-      if(fPointOnITSLayer1Flag) {
+      if(fProtonAnalysisBase->IsUsedMinTPCdEdxPoints()) {
+       if(track->GetTPCsignalN() < fProtonAnalysisBase->GetMinTPCdEdxPoints()) {
+         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(20)))->Fill(track->GetTPCsignalN());
+       }
+       if(track->GetTPCsignalN() >= fProtonAnalysisBase->GetMinTPCdEdxPoints())
+         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(20)))->Fill(track->GetTPCsignalN());
+      }//number of TPC points for the dE/dx
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer1()) {
        if(!track->HasPointOnITSLayer(0)) {
-         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(20)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(21)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(0))
-         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(20)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(21)))->Fill(0);
       }//point on SPD1
-      if(fPointOnITSLayer2Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer2()) {
        if(!track->HasPointOnITSLayer(1)) {
-         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(21)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(22)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(1))
-         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(21)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(22)))->Fill(0);
       }//point on SPD2
-      if(fPointOnITSLayer3Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer3()) {
        if(!track->HasPointOnITSLayer(2)) {
-         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(22)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(23)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(2))
-         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(22)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(23)))->Fill(0);
       }//point on SDD1
-      if(fPointOnITSLayer4Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer4()) {
        if(!track->HasPointOnITSLayer(3)) {
-         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(23)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(24)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(3))
-         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(23)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(24)))->Fill(0);
       }//point on SDD2
-      if(fPointOnITSLayer5Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer5()) {
        if(!track->HasPointOnITSLayer(4)) {
-         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(24)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(25)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(4))
-         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(24)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(25)))->Fill(0);
       }//point on SSD1
-      if(fPointOnITSLayer6Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer6()) {
        if(!track->HasPointOnITSLayer(5)) {
-         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(25)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsRejectedList->At(26)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(5))
-         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(25)))->Fill(0);
+         ((TH1F *)(fQAPrimaryProtonsAcceptedList->At(26)))->Fill(0);
       }//point on SSD2
     }//primary particle cut
 
     //Secondaries
     if(label > nPrimaries) {
-      if(fMinITSClustersFlag) {
-       if(nClustersITS < fMinITSClusters) {
+      if(fProtonAnalysisBase->IsUsedMinITSClusters()) {
+       if(nClustersITS < fProtonAnalysisBase->GetMinITSClusters()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(0)))->Fill(nClustersITS);
-         //status = kFALSE;
        }
-       else if(nClustersITS >= fMinITSClusters
+       else if(nClustersITS >= fProtonAnalysisBase->GetMinITSClusters()
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(0)))->Fill(nClustersITS);
       }//ITS clusters
-      if(fMaxChi2PerITSClusterFlag) {
-       if(chi2PerClusterITS > fMaxChi2PerITSCluster) {
+      if(fProtonAnalysisBase->IsUsedMaxChi2PerITSCluster()) {
+       if(chi2PerClusterITS > fProtonAnalysisBase->GetMaxChi2PerITSCluster()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(1)))->Fill(chi2PerClusterITS);
-         //status = kFALSE;
        }
-       else if(chi2PerClusterITS <= fMaxChi2PerITSCluster)
+       else if(chi2PerClusterITS <= fProtonAnalysisBase->GetMaxChi2PerITSCluster())
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(1)))->Fill(chi2PerClusterITS);
       }//chi2 per ITS cluster
-      if(fMinTPCClustersFlag) {
-       if(nClustersTPC < fMinTPCClusters) {
+      if(fProtonAnalysisBase->IsUsedMinTPCClusters()) {
+       if(nClustersTPC < fProtonAnalysisBase->GetMinTPCClusters()) {
          //cout<<"Secondary proton rejected"<<endl;
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(2)))->Fill(nClustersTPC);
-         //status = kFALSE;
        }
-       else if(nClustersTPC >= fMinTPCClusters) {
+       else if(nClustersTPC >= fProtonAnalysisBase->GetMinTPCClusters()) {
          //cout<<"Secondary proton accepted"<<endl;
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(2)))->Fill(nClustersTPC);
        }
       }//TPC clusters
-      if(fMaxChi2PerTPCClusterFlag) {
-       if(chi2PerClusterTPC > fMaxChi2PerTPCCluster) {
+      if(fProtonAnalysisBase->IsUsedMaxChi2PerTPCCluster()) {
+       if(chi2PerClusterTPC > fProtonAnalysisBase->GetMaxChi2PerTPCCluster()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(3)))->Fill(chi2PerClusterTPC);
-         //status = kFALSE;
        }
-       else if(chi2PerClusterTPC <= fMaxChi2PerTPCCluster)
+       else if(chi2PerClusterTPC <= fProtonAnalysisBase->GetMaxChi2PerTPCCluster())
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(3)))->Fill(chi2PerClusterTPC);
       }//chi2 per TPC cluster
-      if(fMaxCov11Flag) {
-       if(extCov[0] > fMaxCov11) {
+      if(fProtonAnalysisBase->IsUsedMaxCov11()) {
+       if(extCov[0] > fProtonAnalysisBase->GetMaxCov11()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(4)))->Fill(extCov[0]);
-         //status = kFALSE;
        }
-       else if(extCov[0] <= fMaxCov11)
+       else if(extCov[0] <= fProtonAnalysisBase->GetMaxCov11())
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(4)))->Fill(extCov[0]);
       }//cov11
-      if(fMaxCov22Flag) {
-       if(extCov[2] > fMaxCov22) {
+      if(fProtonAnalysisBase->IsUsedMaxCov22()) {
+       if(extCov[2] > fProtonAnalysisBase->GetMaxCov22()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(5)))->Fill(extCov[2]);
-         //status = kFALSE;
        }
-       else if(extCov[2] <= fMaxCov22)
+       else if(extCov[2] <= fProtonAnalysisBase->GetMaxCov22())
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(5)))->Fill(extCov[2]);
       }//cov11
-      if(fMaxCov33Flag) {
-       if(extCov[5] > fMaxCov33) {
+      if(fProtonAnalysisBase->IsUsedMaxCov33()) {
+       if(extCov[5] > fProtonAnalysisBase->GetMaxCov33()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(6)))->Fill(extCov[5]);
-         //status = kFALSE;
        }
-       else if(extCov[5] <= fMaxCov33)
+       else if(extCov[5] <= fProtonAnalysisBase->GetMaxCov33())
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(6)))->Fill(extCov[5]);
       }//cov11
-      if(fMaxCov44Flag) {
-       if(extCov[9] > fMaxCov44) {
+      if(fProtonAnalysisBase->IsUsedMaxCov44()) {
+       if(extCov[9] > fProtonAnalysisBase->GetMaxCov44()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(7)))->Fill(extCov[9]);
-         //status = kFALSE;
        }
-       else if(extCov[9] <= fMaxCov44)
+       else if(extCov[9] <= fProtonAnalysisBase->GetMaxCov44())
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(7)))->Fill(extCov[9]);
       }//cov11
-      if(fMaxCov55Flag) {
-       if(extCov[14] > fMaxCov55) {
+      if(fProtonAnalysisBase->IsUsedMaxCov55()) {
+       if(extCov[14] > fProtonAnalysisBase->GetMaxCov55()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(8)))->Fill(extCov[14]);
-         //status = kFALSE;
        }
-       else if(extCov[14] <= fMaxCov55)
+       else if(extCov[14] <= fProtonAnalysisBase->GetMaxCov55())
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(8)))->Fill(extCov[14]);
       }//cov55
-      if(fMaxSigmaToVertexFlag) {
-       if(GetSigmaToVertex(track) > fMaxSigmaToVertex) {
-         ((TH1F *)(fQASecondaryProtonsRejectedList->At(9)))->Fill(GetSigmaToVertex(track));
-         //status = kFALSE;
+      if(fProtonAnalysisBase->IsUsedMaxSigmaToVertex()) {
+       if(fProtonAnalysisBase->GetSigmaToVertex(track) > fProtonAnalysisBase->GetMaxSigmaToVertex()) {
+         ((TH1F *)(fQASecondaryProtonsRejectedList->At(9)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
        }
-       else if(GetSigmaToVertex(track) <= fMaxSigmaToVertex)
-         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(9)))->Fill(GetSigmaToVertex(track));
+       else if(fProtonAnalysisBase->GetSigmaToVertex(track) <= fProtonAnalysisBase->GetMaxSigmaToVertex())
+         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(9)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
       }//sigma to vertex
-      if(fMaxSigmaToVertexTPCFlag) {
-       if(GetSigmaToVertex(track) > fMaxSigmaToVertexTPC) {
-         ((TH1F *)(fQASecondaryProtonsRejectedList->At(10)))->Fill(GetSigmaToVertex(track));
-         //status = kFALSE;
+      if(fProtonAnalysisBase->IsUsedMaxSigmaToVertexTPC()) {
+       if(fProtonAnalysisBase->GetSigmaToVertex(track) > fProtonAnalysisBase->GetMaxSigmaToVertexTPC()) {
+         ((TH1F *)(fQASecondaryProtonsRejectedList->At(10)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
        }
-       else if(GetSigmaToVertex(track) <= fMaxSigmaToVertexTPC)
-         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(10)))->Fill(GetSigmaToVertex(track));
+       else if(fProtonAnalysisBase->GetSigmaToVertex(track) <= fProtonAnalysisBase->GetMaxSigmaToVertexTPC())
+         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(10)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
       }//sigma to vertex TPC
-      if(fMaxDCAXYFlag) {
-       if(TMath::Abs(dca[0]) > fMaxDCAXY) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAXY()) {
+       if(TMath::Abs(dca[0]) > fProtonAnalysisBase->GetMaxDCAXY()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(11)))->Fill(TMath::Abs(dca[0]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[0]) <= fMaxDCAXY)
+       else if(TMath::Abs(dca[0]) <= fProtonAnalysisBase->GetMaxDCAXY())
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(11)))->Fill(TMath::Abs(dca[0]));
       }//DCA xy global tracking
-      if(fMaxDCAXYTPCFlag) {
-       if(TMath::Abs(dca[0]) > fMaxDCAXYTPC) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAXYTPC()) {
+       if(TMath::Abs(dca[0]) > fProtonAnalysisBase->GetMaxDCAXYTPC()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(12)))->Fill(TMath::Abs(dca[0]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[0]) <= fMaxDCAXYTPC)
+       else if(TMath::Abs(dca[0]) <= fProtonAnalysisBase->GetMaxDCAXYTPC())
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(12)))->Fill(TMath::Abs(dca[0]));
       }//DCA xy TPC tracking
-      if(fMaxDCAZFlag) {
-       if(TMath::Abs(dca[1]) > fMaxDCAZ) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAZ()) {
+       if(TMath::Abs(dca[1]) > fProtonAnalysisBase->GetMaxDCAZ()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(13)))->Fill(TMath::Abs(dca[1]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[1]) <= fMaxDCAZ)
+       else if(TMath::Abs(dca[1]) <= fProtonAnalysisBase->GetMaxDCAZ())
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(13)))->Fill(TMath::Abs(dca[1]));
       }//DCA z global tracking
-      if(fMaxDCAZTPCFlag) {
-       if(TMath::Abs(dca[1]) > fMaxDCAZTPC) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAZTPC()) {
+       if(TMath::Abs(dca[1]) > fProtonAnalysisBase->GetMaxDCAZTPC()) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(14)))->Fill(TMath::Abs(dca[1]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[1]) <= fMaxDCAZTPC)
+       else if(TMath::Abs(dca[1]) <= fProtonAnalysisBase->GetMaxDCAZTPC())
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(14)))->Fill(TMath::Abs(dca[1]));
       }//DCA z TPC tracking
-      if(fMaxConstrainChi2Flag) {
+      if(fProtonAnalysisBase->IsUsedMaxConstrainChi2()) {
        if(track->GetConstrainedChi2() > 0) {
-         if(TMath::Log(track->GetConstrainedChi2()) > fMaxConstrainChi2) {
+         if(TMath::Log(track->GetConstrainedChi2()) > fProtonAnalysisBase->GetMaxConstrainChi2()) {
            ((TH1F *)(fQASecondaryProtonsRejectedList->At(15)))->Fill(TMath::Log(track->GetConstrainedChi2()));
-           //status = kFALSE;
          }
-         else if(TMath::Log(track->GetConstrainedChi2()) <= fMaxConstrainChi2)
+         else if(TMath::Log(track->GetConstrainedChi2()) <= fProtonAnalysisBase->GetMaxConstrainChi2())
            ((TH1F *)(fQASecondaryProtonsAcceptedList->At(15)))->Fill(TMath::Log(track->GetConstrainedChi2()));
        }
       }//constrain chi2 - vertex
-      if(fITSRefitFlag) {
+      if(fProtonAnalysisBase->IsUsedITSRefit()) {
        if ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(16)))->Fill(0);
-       //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kITSrefit) != 0)
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(16)))->Fill(0);
       }//ITS refit
-      if(fTPCRefitFlag) {
+      if(fProtonAnalysisBase->IsUsedTPCRefit()) {
        if ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(17)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kTPCrefit) != 0)
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(17)))->Fill(0);
       }//TPC refit
-      if(fESDpidFlag) {
+      if(fProtonAnalysisBase->IsUsedESDpid()) {
        if ((track->GetStatus() & AliESDtrack::kESDpid) == 0) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(18)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kESDpid) != 0)
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(18)))->Fill(0);
       }//ESD pid
-      if(fTPCpidFlag) {
+      if(fProtonAnalysisBase->IsUsedTPCpid()) {
        if ((track->GetStatus() & AliESDtrack::kTPCpid) == 0) {
          ((TH1F *)(fQASecondaryProtonsRejectedList->At(19)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kTPCpid) != 0)
          ((TH1F *)(fQASecondaryProtonsAcceptedList->At(19)))->Fill(0);
       }//TPC pid
-      if(fPointOnITSLayer1Flag) {
+      if(fProtonAnalysisBase->IsUsedMinTPCdEdxPoints()) {
+       if(track->GetTPCsignalN() < fProtonAnalysisBase->GetMinTPCdEdxPoints()) {
+         ((TH1F *)(fQASecondaryProtonsRejectedList->At(20)))->Fill(track->GetTPCsignalN());
+       }
+       if(track->GetTPCsignalN() >= fProtonAnalysisBase->GetMinTPCdEdxPoints())
+         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(20)))->Fill(track->GetTPCsignalN());
+      }//number of TPC points for the dE/dx
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer1()) {
        if(!track->HasPointOnITSLayer(0)) {
-         ((TH1F *)(fQASecondaryProtonsRejectedList->At(20)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsRejectedList->At(21)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(0))
-         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(20)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(21)))->Fill(0);
       }//point on SPD1
-      if(fPointOnITSLayer2Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer2()) {
        if(!track->HasPointOnITSLayer(1)) {
-         ((TH1F *)(fQASecondaryProtonsRejectedList->At(21)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsRejectedList->At(22)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(1))
-         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(21)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(22)))->Fill(0);
       }//point on SPD2
-      if(fPointOnITSLayer3Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer3()) {
        if(!track->HasPointOnITSLayer(2)) {
-         ((TH1F *)(fQASecondaryProtonsRejectedList->At(22)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsRejectedList->At(23)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(2))
-         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(22)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(23)))->Fill(0);
       }//point on SDD1
-      if(fPointOnITSLayer4Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer4()) {
        if(!track->HasPointOnITSLayer(3)) {
-         ((TH1F *)(fQASecondaryProtonsRejectedList->At(23)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsRejectedList->At(24)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(3))
-         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(23)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(24)))->Fill(0);
       }//point on SDD2
-      if(fPointOnITSLayer5Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer5()) {
        if(!track->HasPointOnITSLayer(4)) {
-         ((TH1F *)(fQASecondaryProtonsRejectedList->At(24)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsRejectedList->At(25)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(4))
-         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(24)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(25)))->Fill(0);
       }//point on SSD1
-      if(fPointOnITSLayer6Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer6()) {
        if(!track->HasPointOnITSLayer(5)) {
-         ((TH1F *)(fQASecondaryProtonsRejectedList->At(25)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsRejectedList->At(26)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(5))
-         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(25)))->Fill(0);
+         ((TH1F *)(fQASecondaryProtonsAcceptedList->At(26)))->Fill(0);
       }//point on SSD2
     }//secondary particle cut
   }//protons
@@ -850,423 +552,394 @@ void AliProtonQAAnalysis::FillQA(AliStack *stack,
   if(track->Charge() < 0) {
     //Primaries
     if(label <= nPrimaries) {
-      if(fMinITSClustersFlag) {
-       if(nClustersITS < fMinITSClusters) {
+      if(fProtonAnalysisBase->IsUsedMinITSClusters()) {
+       if(nClustersITS < fProtonAnalysisBase->GetMinITSClusters()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(0)))->Fill(nClustersITS);
-         //status = kFALSE;
        }
-       else if(nClustersITS >= fMinITSClusters
+       else if(nClustersITS >= fProtonAnalysisBase->GetMinITSClusters()
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(0)))->Fill(nClustersITS);
       }//ITS clusters
-      if(fMaxChi2PerITSClusterFlag) {
-       if(chi2PerClusterITS > fMaxChi2PerITSCluster) {
+      if(fProtonAnalysisBase->IsUsedMaxChi2PerITSCluster()) {
+       if(chi2PerClusterITS > fProtonAnalysisBase->GetMaxChi2PerITSCluster()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(1)))->Fill(chi2PerClusterITS);
-         //status = kFALSE;
        }
-       else if(chi2PerClusterITS <= fMaxChi2PerITSCluster)
+       else if(chi2PerClusterITS <= fProtonAnalysisBase->GetMaxChi2PerITSCluster())
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(1)))->Fill(chi2PerClusterITS);
       }//chi2 per ITS cluster
-      if(fMinTPCClustersFlag) {
-       if(nClustersTPC < fMinTPCClusters) {
+      if(fProtonAnalysisBase->IsUsedMinTPCClusters()) {
+       if(nClustersTPC < fProtonAnalysisBase->GetMinTPCClusters()) {
          //cout<<"Primary antiproton rejected"<<endl;
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(2)))->Fill(nClustersTPC);
-         //status = kFALSE;
        }
-       else if(nClustersTPC >= fMinTPCClusters) {
-         //cout<<"Primary antiproton accepted"<<endl;
+       else if(nClustersTPC >= fProtonAnalysisBase->GetMinTPCClusters()) {
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(2)))->Fill(nClustersTPC);
        }
       }//TPC clusters
-      if(fMaxChi2PerTPCClusterFlag) {
-       if(chi2PerClusterTPC > fMaxChi2PerTPCCluster) {
+      if(fProtonAnalysisBase->IsUsedMaxChi2PerTPCCluster()) {
+       if(chi2PerClusterTPC > fProtonAnalysisBase->GetMaxChi2PerTPCCluster()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(3)))->Fill(chi2PerClusterTPC);
-         //status = kFALSE;
        }
-       else if(chi2PerClusterTPC <= fMaxChi2PerTPCCluster)
+       else if(chi2PerClusterTPC <= fProtonAnalysisBase->GetMaxChi2PerTPCCluster())
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(3)))->Fill(chi2PerClusterTPC);
       }//chi2 per TPC cluster
-      if(fMaxCov11Flag) {
-       if(extCov[0] > fMaxCov11) {
+      if(fProtonAnalysisBase->IsUsedMaxCov11()) {
+       if(extCov[0] > fProtonAnalysisBase->GetMaxCov11()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(4)))->Fill(extCov[0]);
-         //status = kFALSE;
        }
-       else if(extCov[0] <= fMaxCov11)
+       else if(extCov[0] <= fProtonAnalysisBase->GetMaxCov11())
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(4)))->Fill(extCov[0]);
       }//cov11
-      if(fMaxCov22Flag) {
-       if(extCov[2] > fMaxCov22) {
+      if(fProtonAnalysisBase->IsUsedMaxCov22()) {
+       if(extCov[2] > fProtonAnalysisBase->GetMaxCov22()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(5)))->Fill(extCov[2]);
-         //status = kFALSE;
        }
-       else if(extCov[2] <= fMaxCov22)
+       else if(extCov[2] <= fProtonAnalysisBase->GetMaxCov22())
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(5)))->Fill(extCov[2]);
       }//cov11
-      if(fMaxCov33Flag) {
-       if(extCov[5] > fMaxCov33) {
+      if(fProtonAnalysisBase->IsUsedMaxCov33()) {
+       if(extCov[5] > fProtonAnalysisBase->GetMaxCov33()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(6)))->Fill(extCov[5]);
-         //status = kFALSE;
        }
-       else if(extCov[5] <= fMaxCov33)
+       else if(extCov[5] <= fProtonAnalysisBase->GetMaxCov33())
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(6)))->Fill(extCov[5]);
       }//cov11
-      if(fMaxCov44Flag) {
-       if(extCov[9] > fMaxCov44) {
+      if(fProtonAnalysisBase->IsUsedMaxCov44()) {
+       if(extCov[9] > fProtonAnalysisBase->GetMaxCov44()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(7)))->Fill(extCov[9]);
-         //status = kFALSE;
        }
-       else if(extCov[9] <= fMaxCov44)
+       else if(extCov[9] <= fProtonAnalysisBase->GetMaxCov44())
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(7)))->Fill(extCov[9]);
       }//cov11
-      if(fMaxCov55Flag) {
-       if(extCov[14] > fMaxCov55) {
+      if(fProtonAnalysisBase->IsUsedMaxCov55()) {
+       if(extCov[14] > fProtonAnalysisBase->GetMaxCov55()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(8)))->Fill(extCov[14]);
-         //status = kFALSE;
        }
-       else if(extCov[14] <= fMaxCov55)
+       else if(extCov[14] <= fProtonAnalysisBase->GetMaxCov55())
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(8)))->Fill(extCov[14]);
       }//cov55
-      if(fMaxSigmaToVertexFlag) {
-       if(GetSigmaToVertex(track) > fMaxSigmaToVertex) {
-         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(9)))->Fill(GetSigmaToVertex(track));
-         //status = kFALSE;
+      if(fProtonAnalysisBase->IsUsedMaxSigmaToVertex()) {
+       if(fProtonAnalysisBase->GetSigmaToVertex(track) > fProtonAnalysisBase->GetMaxSigmaToVertex()) {
+         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(9)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
        }
-       else if(GetSigmaToVertex(track) <= fMaxSigmaToVertex)
-         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(9)))->Fill(GetSigmaToVertex(track));
+       else if(fProtonAnalysisBase->GetSigmaToVertex(track) <= fProtonAnalysisBase->GetMaxSigmaToVertex())
+         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(9)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
       }//sigma to vertex
-      if(fMaxSigmaToVertexTPCFlag) {
-       if(GetSigmaToVertex(track) > fMaxSigmaToVertexTPC) {
-         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(10)))->Fill(GetSigmaToVertex(track));
-         //status = kFALSE;
+      if(fProtonAnalysisBase->IsUsedMaxSigmaToVertexTPC()) {
+       if(fProtonAnalysisBase->GetSigmaToVertex(track) > fProtonAnalysisBase->GetMaxSigmaToVertexTPC()) {
+         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(10)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
        }
-       else if(GetSigmaToVertex(track) <= fMaxSigmaToVertexTPC)
-         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(10)))->Fill(GetSigmaToVertex(track));
+       else if(fProtonAnalysisBase->GetSigmaToVertex(track) <= fProtonAnalysisBase->GetMaxSigmaToVertexTPC())
+         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(10)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
       }//sigma to vertex TPC
-      if(fMaxDCAXYFlag) {
-       if(TMath::Abs(dca[0]) > fMaxDCAXY) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAXY()) {
+       if(TMath::Abs(dca[0]) > fProtonAnalysisBase->GetMaxDCAXY()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(11)))->Fill(TMath::Abs(dca[0]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[0]) <= fMaxDCAXY)
+       else if(TMath::Abs(dca[0]) <= fProtonAnalysisBase->GetMaxDCAXY())
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(11)))->Fill(TMath::Abs(dca[0]));
       }//DCA xy global tracking
-      if(fMaxDCAXYTPCFlag) {
-       if(TMath::Abs(dca[0]) > fMaxDCAXYTPC) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAXYTPC()) {
+       if(TMath::Abs(dca[0]) > fProtonAnalysisBase->GetMaxDCAXYTPC()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(12)))->Fill(TMath::Abs(dca[0]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[0]) <= fMaxDCAXYTPC)
+       else if(TMath::Abs(dca[0]) <= fProtonAnalysisBase->GetMaxDCAXYTPC())
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(12)))->Fill(TMath::Abs(dca[0]));
       }//DCA xy TPC tracking
-      if(fMaxDCAZFlag) {
-       if(TMath::Abs(dca[1]) > fMaxDCAZ) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAZ()) {
+       if(TMath::Abs(dca[1]) > fProtonAnalysisBase->GetMaxDCAZ()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(13)))->Fill(TMath::Abs(dca[1]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[1]) <= fMaxDCAZ)
+       else if(TMath::Abs(dca[1]) <= fProtonAnalysisBase->GetMaxDCAZ())
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(13)))->Fill(TMath::Abs(dca[1]));
       }//DCA z global tracking
-      if(fMaxDCAZTPCFlag) {
-       if(TMath::Abs(dca[1]) > fMaxDCAZTPC) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAZTPC()) {
+       if(TMath::Abs(dca[1]) > fProtonAnalysisBase->GetMaxDCAZTPC()) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(14)))->Fill(TMath::Abs(dca[1]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[1]) <= fMaxDCAZTPC)
+       else if(TMath::Abs(dca[1]) <= fProtonAnalysisBase->GetMaxDCAZTPC())
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(14)))->Fill(TMath::Abs(dca[1]));
       }//DCA z TPC tracking
-      if(fMaxConstrainChi2Flag) {
+      if(fProtonAnalysisBase->IsUsedMaxConstrainChi2()) {
        if(track->GetConstrainedChi2() > 0) {
-         if(TMath::Log(track->GetConstrainedChi2()) > fMaxConstrainChi2) {
+         if(TMath::Log(track->GetConstrainedChi2()) > fProtonAnalysisBase->GetMaxConstrainChi2()) {
            ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(15)))->Fill(TMath::Log(track->GetConstrainedChi2()));
-           //status = kFALSE;
          }
-         else if(TMath::Log(track->GetConstrainedChi2()) <= fMaxConstrainChi2)
+         else if(TMath::Log(track->GetConstrainedChi2()) <= fProtonAnalysisBase->GetMaxConstrainChi2())
            ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(15)))->Fill(TMath::Log(track->GetConstrainedChi2()));
        }
       }//constrain chi2 - vertex
-      if(fITSRefitFlag) {
+      if(fProtonAnalysisBase->IsUsedITSRefit()) {
        if ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(16)))->Fill(0);
-       //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kITSrefit) != 0)
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(16)))->Fill(0);
       }//ITS refit
-      if(fTPCRefitFlag) {
+      if(fProtonAnalysisBase->IsUsedTPCRefit()) {
        if ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(17)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kTPCrefit) != 0)
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(17)))->Fill(0);
       }//TPC refit
-      if(fESDpidFlag) {
+      if(fProtonAnalysisBase->IsUsedESDpid()) {
        if ((track->GetStatus() & AliESDtrack::kESDpid) == 0) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(18)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kESDpid) != 0)
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(18)))->Fill(0);
       }//ESD pid
-      if(fTPCpidFlag) {
+      if(fProtonAnalysisBase->IsUsedTPCpid()) {
        if ((track->GetStatus() & AliESDtrack::kTPCpid) == 0) {
          ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(19)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kTPCpid) != 0)
          ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(19)))->Fill(0);
       }//TPC pid
-      if(fPointOnITSLayer1Flag) {
+      if(fProtonAnalysisBase->IsUsedMinTPCdEdxPoints()) {
+       if(track->GetTPCsignalN() < fProtonAnalysisBase->GetMinTPCdEdxPoints()) {
+         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(20)))->Fill(track->GetTPCsignalN());
+       }
+       if(track->GetTPCsignalN() >= fProtonAnalysisBase->GetMinTPCdEdxPoints())
+         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(20)))->Fill(track->GetTPCsignalN());
+      }//number of TPC points for the dE/dx
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer1()) {
        if(!track->HasPointOnITSLayer(0)) {
-         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(20)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(21)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(0))
-         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(20)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(21)))->Fill(0);
       }//point on SPD1
-      if(fPointOnITSLayer2Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer2()) {
        if(!track->HasPointOnITSLayer(1)) {
-         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(21)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(22)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(1))
-         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(21)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(22)))->Fill(0);
       }//point on SPD2
-      if(fPointOnITSLayer3Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer3()) {
        if(!track->HasPointOnITSLayer(2)) {
-         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(22)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(23)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(2))
-         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(22)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(23)))->Fill(0);
       }//point on SDD1
-      if(fPointOnITSLayer4Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer4()) {
        if(!track->HasPointOnITSLayer(3)) {
-         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(23)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(24)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(3))
-         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(23)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(24)))->Fill(0);
       }//point on SDD2
-      if(fPointOnITSLayer5Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer5()) {
        if(!track->HasPointOnITSLayer(4)) {
-         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(24)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(25)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(4))
-         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(24)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(25)))->Fill(0);
       }//point on SSD1
-      if(fPointOnITSLayer6Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer6()) {
        if(!track->HasPointOnITSLayer(5)) {
-         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(25)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsRejectedList->At(26)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(5))
-         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(25)))->Fill(0);
+         ((TH1F *)(fQAPrimaryAntiProtonsAcceptedList->At(26)))->Fill(0);
       }//point on SSD2
     }//primary particle cut
 
     //Secondaries
     if(label > nPrimaries) {
-      if(fMinITSClustersFlag) {
-       if(nClustersITS < fMinITSClusters) {
+      if(fProtonAnalysisBase->IsUsedMinITSClusters()) {
+       if(nClustersITS < fProtonAnalysisBase->GetMinITSClusters()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(0)))->Fill(nClustersITS);
-         //status = kFALSE;
        }
-       else if(nClustersITS >= fMinITSClusters
+       else if(nClustersITS >= fProtonAnalysisBase->GetMinITSClusters()
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(0)))->Fill(nClustersITS);
       }//ITS clusters
-      if(fMaxChi2PerITSClusterFlag) {
-       if(chi2PerClusterITS > fMaxChi2PerITSCluster) {
+      if(fProtonAnalysisBase->IsUsedMaxChi2PerITSCluster()) {
+       if(chi2PerClusterITS > fProtonAnalysisBase->GetMaxChi2PerITSCluster()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(1)))->Fill(chi2PerClusterITS);
-         //status = kFALSE;
        }
-       else if(chi2PerClusterITS <= fMaxChi2PerITSCluster)
+       else if(chi2PerClusterITS <= fProtonAnalysisBase->GetMaxChi2PerITSCluster())
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(1)))->Fill(chi2PerClusterITS);
       }//chi2 per ITS cluster
-      if(fMinTPCClustersFlag) {
-       if(nClustersTPC < fMinTPCClusters) {
-         //cout<<"Secondary antiproton rejected"<<endl;
+      if(fProtonAnalysisBase->IsUsedMinTPCClusters()) {
+       if(nClustersTPC < fProtonAnalysisBase->GetMinTPCClusters()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(2)))->Fill(nClustersTPC);
-         //status = kFALSE;
        }
-       else if(nClustersTPC >= fMinTPCClusters) {
-         //cout<<"Secondary antiproton accepted"<<endl;
+       else if(nClustersTPC >= fProtonAnalysisBase->GetMinTPCClusters()) {
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(2)))->Fill(nClustersTPC);
        }
       }//TPC clusters
-      if(fMaxChi2PerTPCClusterFlag) {
-       if(chi2PerClusterTPC > fMaxChi2PerTPCCluster) {
+      if(fProtonAnalysisBase->IsUsedMaxChi2PerTPCCluster()) {
+       if(chi2PerClusterTPC > fProtonAnalysisBase->GetMaxChi2PerTPCCluster()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(3)))->Fill(chi2PerClusterTPC);
-         //status = kFALSE;
        }
-       else if(chi2PerClusterTPC <= fMaxChi2PerTPCCluster)
+       else if(chi2PerClusterTPC <= fProtonAnalysisBase->GetMaxChi2PerTPCCluster())
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(3)))->Fill(chi2PerClusterTPC);
       }//chi2 per TPC cluster
-      if(fMaxCov11Flag) {
-       if(extCov[0] > fMaxCov11) {
+      if(fProtonAnalysisBase->IsUsedMaxCov11()) {
+       if(extCov[0] > fProtonAnalysisBase->GetMaxCov11()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(4)))->Fill(extCov[0]);
-         //status = kFALSE;
        }
-       else if(extCov[0] <= fMaxCov11)
+       else if(extCov[0] <= fProtonAnalysisBase->GetMaxCov11())
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(4)))->Fill(extCov[0]);
       }//cov11
-      if(fMaxCov22Flag) {
-       if(extCov[2] > fMaxCov22) {
+      if(fProtonAnalysisBase->IsUsedMaxCov22()) {
+       if(extCov[2] > fProtonAnalysisBase->GetMaxCov22()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(5)))->Fill(extCov[2]);
-         //status = kFALSE;
        }
-       else if(extCov[2] <= fMaxCov22)
+       else if(extCov[2] <= fProtonAnalysisBase->GetMaxCov22())
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(5)))->Fill(extCov[2]);
       }//cov11
-      if(fMaxCov33Flag) {
-       if(extCov[5] > fMaxCov33) {
+      if(fProtonAnalysisBase->IsUsedMaxCov33()) {
+       if(extCov[5] > fProtonAnalysisBase->GetMaxCov33()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(6)))->Fill(extCov[5]);
-         //status = kFALSE;
        }
-       else if(extCov[5] <= fMaxCov33)
+       else if(extCov[5] <= fProtonAnalysisBase->GetMaxCov33())
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(6)))->Fill(extCov[5]);
       }//cov11
-      if(fMaxCov44Flag) {
-       if(extCov[9] > fMaxCov44) {
+      if(fProtonAnalysisBase->IsUsedMaxCov44()) {
+       if(extCov[9] > fProtonAnalysisBase->GetMaxCov44()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(7)))->Fill(extCov[9]);
-         //status = kFALSE;
        }
-       else if(extCov[9] <= fMaxCov44)
+       else if(extCov[9] <= fProtonAnalysisBase->GetMaxCov44())
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(7)))->Fill(extCov[9]);
       }//cov11
-      if(fMaxCov55Flag) {
-       if(extCov[14] > fMaxCov55) {
+      if(fProtonAnalysisBase->IsUsedMaxCov55()) {
+       if(extCov[14] > fProtonAnalysisBase->GetMaxCov55()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(8)))->Fill(extCov[14]);
-         //status = kFALSE;
        }
-       else if(extCov[14] <= fMaxCov55)
+       else if(extCov[14] <= fProtonAnalysisBase->GetMaxCov55())
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(8)))->Fill(extCov[14]);
       }//cov55
-      if(fMaxSigmaToVertexFlag) {
-       if(GetSigmaToVertex(track) > fMaxSigmaToVertex) {
-         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(9)))->Fill(GetSigmaToVertex(track));
-         //status = kFALSE;
+      if(fProtonAnalysisBase->IsUsedMaxSigmaToVertex()) {
+       if(fProtonAnalysisBase->GetSigmaToVertex(track) > fProtonAnalysisBase->GetMaxSigmaToVertex()) {
+         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(9)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
        }
-       else if(GetSigmaToVertex(track) <= fMaxSigmaToVertex)
-         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(9)))->Fill(GetSigmaToVertex(track));
+       else if(fProtonAnalysisBase->GetSigmaToVertex(track) <= fProtonAnalysisBase->GetMaxSigmaToVertex())
+         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(9)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
       }//sigma to vertex
-      if(fMaxSigmaToVertexTPCFlag) {
-       if(GetSigmaToVertex(track) > fMaxSigmaToVertexTPC) {
-         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(10)))->Fill(GetSigmaToVertex(track));
-         //status = kFALSE;
+      if(fProtonAnalysisBase->IsUsedMaxSigmaToVertexTPC()) {
+       if(fProtonAnalysisBase->GetSigmaToVertex(track) > fProtonAnalysisBase->GetMaxSigmaToVertexTPC()) {
+         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(10)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
        }
-       else if(GetSigmaToVertex(track) <= fMaxSigmaToVertexTPC)
-         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(10)))->Fill(GetSigmaToVertex(track));
+       else if(fProtonAnalysisBase->GetSigmaToVertex(track) <= fProtonAnalysisBase->GetMaxSigmaToVertexTPC())
+         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(10)))->Fill(fProtonAnalysisBase->GetSigmaToVertex(track));
       }//sigma to vertex TPC
-      if(fMaxDCAXYFlag) {
-       if(TMath::Abs(dca[0]) > fMaxDCAXY) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAXY()) {
+       if(TMath::Abs(dca[0]) > fProtonAnalysisBase->GetMaxDCAXY()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(11)))->Fill(TMath::Abs(dca[0]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[0]) <= fMaxDCAXY)
+       else if(TMath::Abs(dca[0]) <= fProtonAnalysisBase->GetMaxDCAXY())
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(11)))->Fill(TMath::Abs(dca[0]));
       }//DCA xy global tracking
-      if(fMaxDCAXYTPCFlag) {
-       if(TMath::Abs(dca[0]) > fMaxDCAXYTPC) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAXYTPC()) {
+       if(TMath::Abs(dca[0]) > fProtonAnalysisBase->GetMaxDCAXYTPC()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(12)))->Fill(TMath::Abs(dca[0]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[0]) <= fMaxDCAXYTPC)
+       else if(TMath::Abs(dca[0]) <= fProtonAnalysisBase->GetMaxDCAXYTPC())
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(12)))->Fill(TMath::Abs(dca[0]));
       }//DCA xy TPC tracking
-      if(fMaxDCAZFlag) {
-       if(TMath::Abs(dca[1]) > fMaxDCAZ) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAZ()) {
+       if(TMath::Abs(dca[1]) > fProtonAnalysisBase->GetMaxDCAZ()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(13)))->Fill(TMath::Abs(dca[1]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[1]) <= fMaxDCAZ)
+       else if(TMath::Abs(dca[1]) <= fProtonAnalysisBase->GetMaxDCAZ())
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(13)))->Fill(TMath::Abs(dca[1]));
       }//DCA z global tracking
-      if(fMaxDCAZTPCFlag) {
-       if(TMath::Abs(dca[1]) > fMaxDCAZTPC) {
+      if(fProtonAnalysisBase->IsUsedMaxDCAZTPC()) {
+       if(TMath::Abs(dca[1]) > fProtonAnalysisBase->GetMaxDCAZTPC()) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(14)))->Fill(TMath::Abs(dca[1]));
-         //status = kFALSE;
        }
-       else if(TMath::Abs(dca[1]) <= fMaxDCAZTPC)
+       else if(TMath::Abs(dca[1]) <= fProtonAnalysisBase->GetMaxDCAZTPC())
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(14)))->Fill(TMath::Abs(dca[1]));
       }//DCA z TPC tracking
-      if(fMaxConstrainChi2Flag) {
+      if(fProtonAnalysisBase->IsUsedMaxConstrainChi2()) {
        if(track->GetConstrainedChi2() > 0) {
-         if(TMath::Log(track->GetConstrainedChi2()) > fMaxConstrainChi2) {
+         if(TMath::Log(track->GetConstrainedChi2()) > fProtonAnalysisBase->GetMaxConstrainChi2()) {
            ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(15)))->Fill(TMath::Log(track->GetConstrainedChi2()));
-           //status = kFALSE;
          }
-         else if(TMath::Log(track->GetConstrainedChi2()) <= fMaxConstrainChi2)
+         else if(TMath::Log(track->GetConstrainedChi2()) <= fProtonAnalysisBase->GetMaxConstrainChi2())
            ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(15)))->Fill(TMath::Log(track->GetConstrainedChi2()));
        }
       }//constrain chi2 - vertex
-      if(fITSRefitFlag) {
+      if(fProtonAnalysisBase->IsUsedITSRefit()) {
        if ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(16)))->Fill(0);
-       //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kITSrefit) != 0)
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(16)))->Fill(0);
       }//ITS refit
-      if(fTPCRefitFlag) {
+      if(fProtonAnalysisBase->IsUsedTPCRefit()) {
        if ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(17)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kTPCrefit) != 0)
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(17)))->Fill(0);
       }//TPC refit
-      if(fESDpidFlag) {
+      if(fProtonAnalysisBase->IsUsedESDpid()) {
        if ((track->GetStatus() & AliESDtrack::kESDpid) == 0) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(18)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kESDpid) != 0)
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(18)))->Fill(0);
       }//ESD pid
-      if(fTPCpidFlag) {
+      if(fProtonAnalysisBase->IsUsedTPCpid()) {
        if ((track->GetStatus() & AliESDtrack::kTPCpid) == 0) {
          ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(19)))->Fill(0);
-         //status = kFALSE;
        }
        else if((track->GetStatus() & AliESDtrack::kTPCpid) != 0)
          ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(19)))->Fill(0);
       }//TPC pid
-      if(fPointOnITSLayer1Flag) {
+      if(fProtonAnalysisBase->IsUsedMinTPCdEdxPoints()) {
+       if(track->GetTPCsignalN() < fProtonAnalysisBase->GetMinTPCdEdxPoints()) {
+         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(20)))->Fill(track->GetTPCsignalN());
+       }
+       if(track->GetTPCsignalN() >= fProtonAnalysisBase->GetMinTPCdEdxPoints())
+         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(20)))->Fill(track->GetTPCsignalN());
+      }//number of TPC points for the dE/dx
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer1()) {
        if(!track->HasPointOnITSLayer(0)) {
-         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(20)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(21)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(0))
-         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(20)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(21)))->Fill(0);
       }//point on SPD1
-      if(fPointOnITSLayer2Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer2()) {
        if(!track->HasPointOnITSLayer(1)) {
-         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(21)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(22)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(1))
-         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(21)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(22)))->Fill(0);
       }//point on SPD2
-      if(fPointOnITSLayer3Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer3()) {
        if(!track->HasPointOnITSLayer(2)) {
-         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(22)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(23)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(2))
-         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(22)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(23)))->Fill(0);
       }//point on SDD1
-      if(fPointOnITSLayer4Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer4()) {
        if(!track->HasPointOnITSLayer(3)) {
-         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(23)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(24)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(3))
-         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(23)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(24)))->Fill(0);
       }//point on SDD2
-      if(fPointOnITSLayer5Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer5()) {
        if(!track->HasPointOnITSLayer(4)) {
-         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(24)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(25)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(4))
-         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(24)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(25)))->Fill(0);
       }//point on SSD1
-      if(fPointOnITSLayer6Flag) {
+      if(fProtonAnalysisBase->IsUsedPointOnITSLayer6()) {
        if(!track->HasPointOnITSLayer(5)) {
-         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(25)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsRejectedList->At(26)))->Fill(0);
        }
        else if(track->HasPointOnITSLayer(5))
-         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(25)))->Fill(0);
+         ((TH1F *)(fQASecondaryAntiProtonsAcceptedList->At(26)))->Fill(0);
       }//point on SSD2
     }//secondary particle cut
   }//antiprotons
@@ -1316,8 +989,10 @@ void AliProtonQAAnalysis::SetRunQAAnalysis() {
 }
 
 //____________________________________________________________________//
-void AliProtonQAAnalysis::SetQAYPtBins(Int_t nbinsY, Double_t minY, Double_t maxY,
-                                     Int_t nbinsPt, Double_t minPt, Double_t maxPt) {
+void AliProtonQAAnalysis::SetQAYPtBins(Int_t nbinsY, 
+                                      Double_t minY, Double_t maxY,
+                                      Int_t nbinsPt, 
+                                      Double_t minPt, Double_t maxPt) {
   //Initializes the QA binning
   fNBinsY = nbinsY;
   fMinY = minY; fMaxY = maxY;
@@ -1341,7 +1016,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                     ";;P_{T} [GeV/c]",
                                     fNBinsY,fMinY,fMaxY,
                                     fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistMCYPtProtons->GetXaxis()->SetTitle("#eta");
   else 
     gHistMCYPtProtons->GetXaxis()->SetTitle("y");
@@ -1352,7 +1027,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                         ";y;P_{T} [GeV/c]",
                                         fNBinsY,fMinY,fMaxY,
                                         fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistMCYPtAntiProtons->GetXaxis()->SetTitle("#eta");
   else 
     gHistMCYPtAntiProtons->GetXaxis()->SetTitle("y");
@@ -1365,7 +1040,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                             ";;P_{T} [GeV/c]",
                                             fNBinsY,fMinY,fMaxY,
                                             fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistMCYPtProtonsFromWeak->GetXaxis()->SetTitle("#eta");
   else 
     gHistMCYPtProtonsFromWeak->GetXaxis()->SetTitle("y");
@@ -1376,7 +1051,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                                 ";y;P_{T} [GeV/c]",
                                                 fNBinsY,fMinY,fMaxY,
                                                 fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistMCYPtAntiProtonsFromWeak->GetXaxis()->SetTitle("#eta");
   else 
     gHistMCYPtAntiProtonsFromWeak->GetXaxis()->SetTitle("y");
@@ -1389,7 +1064,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                                 ";;P_{T} [GeV/c]",
                                                 fNBinsY,fMinY,fMaxY,
                                                 fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistMCYPtProtonsFromHadronic->GetXaxis()->SetTitle("#eta");
   else 
     gHistMCYPtProtonsFromHadronic->GetXaxis()->SetTitle("y");
@@ -1400,7 +1075,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                                     ";y;P_{T} [GeV/c]",
                                                     fNBinsY,fMinY,fMaxY,
                                                     fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistMCYPtAntiProtonsFromHadronic->GetXaxis()->SetTitle("#eta");
   else 
     gHistMCYPtAntiProtonsFromHadronic->GetXaxis()->SetTitle("y");
@@ -1413,7 +1088,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                      ";;P_{T} [GeV/c]",
                                      fNBinsY,fMinY,fMaxY,
                                      fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistESDYPtProtons->GetXaxis()->SetTitle("#eta");
   else 
     gHistESDYPtProtons->GetXaxis()->SetTitle("y");
@@ -1424,7 +1099,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                          ";;P_{T} [GeV/c]",
                                          fNBinsY,fMinY,fMaxY,
                                          fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistESDYPtAntiProtons->GetXaxis()->SetTitle("#eta");
   else 
     gHistESDYPtAntiProtons->GetXaxis()->SetTitle("y");
@@ -1437,7 +1112,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                              ";;P_{T} [GeV/c]",
                                              fNBinsY,fMinY,fMaxY,
                                              fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistESDYPtProtonsFromWeak->GetXaxis()->SetTitle("#eta");
   else 
     gHistESDYPtProtonsFromWeak->GetXaxis()->SetTitle("y");
@@ -1448,7 +1123,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                                  ";;P_{T} [GeV/c]",
                                                  fNBinsY,fMinY,fMaxY,
                                                  fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistESDYPtAntiProtonsFromWeak->GetXaxis()->SetTitle("#eta");
   else 
     gHistESDYPtAntiProtonsFromWeak->GetXaxis()->SetTitle("y");
@@ -1461,7 +1136,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                                  ";;P_{T} [GeV/c]",
                                                  fNBinsY,fMinY,fMaxY,
                                                  fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistESDYPtProtonsFromHadronic->GetXaxis()->SetTitle("#eta");
   else 
     gHistESDYPtProtonsFromHadronic->GetXaxis()->SetTitle("y");
@@ -1472,7 +1147,7 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
                                                      ";;P_{T} [GeV/c]",
                                                      fNBinsY,fMinY,fMaxY,
                                                      fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistESDYPtAntiProtonsFromHadronic->GetXaxis()->SetTitle("#eta");
   else 
     gHistESDYPtAntiProtonsFromHadronic->GetXaxis()->SetTitle("y");
@@ -1482,11 +1157,12 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
   
   
   //ESD reconstructed tracks that were initially protons for the PID efficiency
-  TH2D *gHistESDInitYPtProtons = new TH2D("gHistESDInitYPtProtons",
-                                         ";;P_{T} [GeV/c]",
+  TH3D *gHistESDInitYPtProtons = new TH3D("gHistESDInitYPtProtons",
+                                         ";;P_{T} [GeV/c];N_{points}",
                                          fNBinsY,fMinY,fMaxY,
-                                         fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode) 
+                                         fNBinsPt,fMinPt,fMaxPt,
+                                         100,0,200);
+  if(fProtonAnalysisBase->GetEtaMode()) 
     gHistESDInitYPtProtons->GetXaxis()->SetTitle("#eta");
   else 
     gHistESDInitYPtProtons->GetXaxis()->SetTitle("y");
@@ -1495,11 +1171,12 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
   fEfficiencyList->Add(gHistESDInitYPtProtons);
   
   //ESD reconstructed tracks that were initially protons and were identified as protons for the PID efficiency
-  TH2D *gHistESDIdYPtProtons = new TH2D("gHistESDIdYPtProtons",
-                                       ";;P_{T} [GeV/c]",
+  TH3D *gHistESDIdYPtProtons = new TH3D("gHistESDIdYPtProtons",
+                                       ";;P_{T} [GeV/c];N_{points}",
                                        fNBinsY,fMinY,fMaxY,
-                                       fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode) 
+                                       fNBinsPt,fMinPt,fMaxPt,
+                                       100,0,200);
+  if(fProtonAnalysisBase->GetEtaMode()) 
     gHistESDIdYPtProtons->GetXaxis()->SetTitle("#eta");
   else 
     gHistESDIdYPtProtons->GetXaxis()->SetTitle("y");
@@ -1508,11 +1185,12 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
   fEfficiencyList->Add(gHistESDIdYPtProtons);
  
   //ESD reconstructed tracks that were identified as protons for the PID contamination
-  TH2D *gHistESDRecIdYPtProtons = new TH2D("gHistESDRecIdYPtProtons",
-                                          ";;P_{T} [GeV/c]",
+  TH3D *gHistESDRecIdYPtProtons = new TH3D("gHistESDRecIdYPtProtons",
+                                          ";;P_{T} [GeV/c];N_{points}",
                                           fNBinsY,fMinY,fMaxY,
-                                          fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode) 
+                                          fNBinsPt,fMinPt,fMaxPt,
+                                          100,0,200);
+  if(fProtonAnalysisBase->GetEtaMode()) 
     gHistESDRecIdYPtProtons->GetXaxis()->SetTitle("#eta");
   else 
     gHistESDRecIdYPtProtons->GetXaxis()->SetTitle("y");
@@ -1521,11 +1199,12 @@ void AliProtonQAAnalysis::InitEfficiencyAnalysis() {
   fEfficiencyList->Add(gHistESDRecIdYPtProtons);
 
   //ESD reconstructed tracks that were identified as protons but were initially not protons for the PID contamination
-  TH2D *gHistESDContamYPtProtons = new TH2D("gHistESDContamYPtProtons",
-                                           ";;P_{T} [GeV/c]",
+  TH3D *gHistESDContamYPtProtons = new TH3D("gHistESDContamYPtProtons",
+                                           ";;P_{T} [GeV/c];N_{points}",
                                            fNBinsY,fMinY,fMaxY,
-                                           fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode) 
+                                           fNBinsPt,fMinPt,fMaxPt,
+                                           100,0,200);
+  if(fProtonAnalysisBase->GetEtaMode()) 
     gHistESDContamYPtProtons->GetXaxis()->SetTitle("#eta");
   else 
     gHistESDContamYPtProtons->GetXaxis()->SetTitle("y");
@@ -1748,6 +1427,89 @@ void AliProtonQAAnalysis::InitCutLists() {
   gHistEtaPhiNClustersSecondaryAntiProtonsPass->SetStats(kTRUE);
   gHistEtaPhiNClustersSecondaryAntiProtonsPass->GetXaxis()->SetTitleColor(1);
   fAcceptedCutList->Add(gHistEtaPhiNClustersSecondaryAntiProtonsPass);//eta-phi of secondary accepted ESD antiprotons
+  //eta-phi-chi^2 per TPC cluster
+  TH3D *gHistEtaPhiChi2PerTPCClusterPrimaryProtonsPass = new TH3D("gHistEtaPhiChi2PerTPCClusterPrimaryProtonsPass",
+                                                                 "Accepted primary protons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                 fNBinsY,fMinY,fMaxY,
+                                                                 100,0,360,
+                                                                 100,0,4);
+  gHistEtaPhiChi2PerTPCClusterPrimaryProtonsPass->SetStats(kTRUE);
+  gHistEtaPhiChi2PerTPCClusterPrimaryProtonsPass->GetXaxis()->SetTitleColor(1);
+  fAcceptedCutList->Add(gHistEtaPhiChi2PerTPCClusterPrimaryProtonsPass);//eta-phi of primary accepted ESD protons
+  TH3D *gHistEtaPhiChi2PerTPCClusterPrimaryAntiProtonsPass = new TH3D("gHistEtaPhiChi2PerTPCClusterPrimaryAntiProtonsPass",
+                                                                     "Accepted primary antiprotons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                     fNBinsY,fMinY,fMaxY,
+                                                                     100,0,360,
+                                                                     100,0,4);
+  gHistEtaPhiChi2PerTPCClusterPrimaryAntiProtonsPass->SetStats(kTRUE);
+  gHistEtaPhiChi2PerTPCClusterPrimaryAntiProtonsPass->GetXaxis()->SetTitleColor(1);
+  fAcceptedCutList->Add(gHistEtaPhiChi2PerTPCClusterPrimaryAntiProtonsPass);//eta-phi of primary accepted ESD antiprotons
+  TH3D *gHistEtaPhiChi2PerTPCClusterSecondaryProtonsPass = new TH3D("gHistEtaPhiChi2PerTPCClusterSecondaryProtonsPass",
+                                                                   "Accepted secondary protons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                   fNBinsY,fMinY,fMaxY,
+                                                                   100,0,360,
+                                                                   100,0,4);
+  gHistEtaPhiChi2PerTPCClusterSecondaryProtonsPass->SetStats(kTRUE);
+  gHistEtaPhiChi2PerTPCClusterSecondaryProtonsPass->GetXaxis()->SetTitleColor(1);
+  fAcceptedCutList->Add(gHistEtaPhiChi2PerTPCClusterSecondaryProtonsPass);//eta-phi of secondary accepted ESD protons
+  TH3D *gHistEtaPhiChi2PerTPCClusterSecondaryAntiProtonsPass = new TH3D("gHistEtaPhiChi2PerTPCClusterSecondaryAntiProtonsPass",
+                                                                       "Accepted secondary antiprotons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                       fNBinsY,fMinY,fMaxY,
+                                                                       100,0,360,
+                                                                       100,0,4);
+  gHistEtaPhiChi2PerTPCClusterSecondaryAntiProtonsPass->SetStats(kTRUE);
+  gHistEtaPhiChi2PerTPCClusterSecondaryAntiProtonsPass->GetXaxis()->SetTitleColor(1);
+  fAcceptedCutList->Add(gHistEtaPhiChi2PerTPCClusterSecondaryAntiProtonsPass);//eta-phi of secondary accepted ESD antiprotons
+  //eta-phi-number of TPC points for the dE/dx
+  TH3D *gHistEtaPhiTPCdEdxNPointsPrimaryProtonsPass = new TH3D("gHistEtaPhiTPCdEdxNPointsPrimaryProtonsPass",
+                                                                 "Accepted primary protons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                 fNBinsY,fMinY,fMaxY,
+                                                                 100,0,360,
+                                                                 100,0,200);
+  gHistEtaPhiTPCdEdxNPointsPrimaryProtonsPass->SetStats(kTRUE);
+  gHistEtaPhiTPCdEdxNPointsPrimaryProtonsPass->GetXaxis()->SetTitleColor(1);
+  fAcceptedCutList->Add(gHistEtaPhiTPCdEdxNPointsPrimaryProtonsPass);//eta-phi of primary accepted ESD protons
+  TH3D *gHistEtaPhiTPCdEdxNPointsPrimaryAntiProtonsPass = new TH3D("gHistEtaPhiTPCdEdxNPointsPrimaryAntiProtonsPass",
+                                                                     "Accepted primary antiprotons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                     fNBinsY,fMinY,fMaxY,
+                                                                     100,0,360,
+                                                                     100,0,200);
+  gHistEtaPhiTPCdEdxNPointsPrimaryAntiProtonsPass->SetStats(kTRUE);
+  gHistEtaPhiTPCdEdxNPointsPrimaryAntiProtonsPass->GetXaxis()->SetTitleColor(1);
+  fAcceptedCutList->Add(gHistEtaPhiTPCdEdxNPointsPrimaryAntiProtonsPass);//eta-phi of primary accepted ESD antiprotons
+  TH3D *gHistEtaPhiTPCdEdxNPointsSecondaryProtonsPass = new TH3D("gHistEtaPhiTPCdEdxNPointsSecondaryProtonsPass",
+                                                                   "Accepted secondary protons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                   fNBinsY,fMinY,fMaxY,
+                                                                   100,0,360,
+                                                                   100,0,200);
+  gHistEtaPhiTPCdEdxNPointsSecondaryProtonsPass->SetStats(kTRUE);
+  gHistEtaPhiTPCdEdxNPointsSecondaryProtonsPass->GetXaxis()->SetTitleColor(1);
+  fAcceptedCutList->Add(gHistEtaPhiTPCdEdxNPointsSecondaryProtonsPass);//eta-phi of secondary accepted ESD protons
+  TH3D *gHistEtaPhiTPCdEdxNPointsSecondaryAntiProtonsPass = new TH3D("gHistEtaPhiTPCdEdxNPointsSecondaryAntiProtonsPass",
+                                                                       "Accepted secondary antiprotons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                       fNBinsY,fMinY,fMaxY,
+                                                                       100,0,360,
+                                                                       100,0,200);
+  gHistEtaPhiTPCdEdxNPointsSecondaryAntiProtonsPass->SetStats(kTRUE);
+  gHistEtaPhiTPCdEdxNPointsSecondaryAntiProtonsPass->GetXaxis()->SetTitleColor(1);
+  fAcceptedCutList->Add(gHistEtaPhiTPCdEdxNPointsSecondaryAntiProtonsPass);//eta-phi of secondary accepted ESD antiprotons
+
+  TH1F *gPrimaryProtonsNPointsTPCdEdx = new TH1F("gPrimaryProtonsNPointsTPCdEdx",
+                                             ";N_{points} (TPC-dE/dx);Entries",
+                                             100,0,200);
+  fAcceptedCutList->Add(gPrimaryProtonsNPointsTPCdEdx);
+  TH1F *gPrimaryAntiProtonsNPointsTPCdEdx = new TH1F("gPrimaryAntiProtonsNPointsTPCdEdx",
+                                                 ";N_{points} (TPC-dE/dx);Entries",
+                                                 100,0,200);
+  fAcceptedCutList->Add(gPrimaryAntiProtonsNPointsTPCdEdx);
+  TH1F *gSecondaryProtonsNPointsTPCdEdx = new TH1F("gSecondaryProtonsNPointsTPCdEdx",
+                                               ";N_{points} (TPC-dE/dx);Entries",
+                                               100,0,200);
+  fAcceptedCutList->Add(gSecondaryProtonsNPointsTPCdEdx);
+  TH1F *gSecondaryAntiProtonsNPointsTPCdEdx = new TH1F("gSecondaryAntiProtonsNPointsTPCdEdx",
+                                                   ";N_{points} (TPC-dE/dx);Entries",
+                                                   100,0,200);
+  fAcceptedCutList->Add(gSecondaryAntiProtonsNPointsTPCdEdx);
   
   //Rejected cut list
   fRejectedCutList = new TList();
@@ -1784,7 +1546,72 @@ void AliProtonQAAnalysis::InitCutLists() {
   gHistEtaPhiNClustersSecondaryAntiProtonsReject->SetStats(kTRUE);
   gHistEtaPhiNClustersSecondaryAntiProtonsReject->GetXaxis()->SetTitleColor(1);
   fRejectedCutList->Add(gHistEtaPhiNClustersSecondaryAntiProtonsReject);//eta-phi of secondary rejected ESD antiprotons
-
+  //eta-phi-chi^2 per TPC cluster
+  TH3D *gHistEtaPhiChi2PerTPCClusterPrimaryProtonsReject = new TH3D("gHistEtaPhiChi2PerTPCClusterPrimaryProtonsReject",
+                                                                 "Rejected primary protons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                 fNBinsY,fMinY,fMaxY,
+                                                                 100,0,360,
+                                                                 100,0,4);
+  gHistEtaPhiChi2PerTPCClusterPrimaryProtonsReject->SetStats(kTRUE);
+  gHistEtaPhiChi2PerTPCClusterPrimaryProtonsReject->GetXaxis()->SetTitleColor(1);
+  fRejectedCutList->Add(gHistEtaPhiChi2PerTPCClusterPrimaryProtonsReject);//eta-phi of primary rejected ESD protons
+  TH3D *gHistEtaPhiChi2PerTPCClusterPrimaryAntiProtonsReject = new TH3D("gHistEtaPhiChi2PerTPCClusterPrimaryAntiProtonsReject",
+                                                                     "Rejected primary antiprotons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                     fNBinsY,fMinY,fMaxY,
+                                                                     100,0,360,
+                                                                     100,0,4);
+  gHistEtaPhiChi2PerTPCClusterPrimaryAntiProtonsReject->SetStats(kTRUE);
+  gHistEtaPhiChi2PerTPCClusterPrimaryAntiProtonsReject->GetXaxis()->SetTitleColor(1);
+  fRejectedCutList->Add(gHistEtaPhiChi2PerTPCClusterPrimaryAntiProtonsReject);//eta-phi of primary rejected ESD antiprotons
+  TH3D *gHistEtaPhiChi2PerTPCClusterSecondaryProtonsReject = new TH3D("gHistEtaPhiChi2PerTPCClusterSecondaryProtonsReject",
+                                                                   "Rejected secondary protons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                   fNBinsY,fMinY,fMaxY,
+                                                                   100,0,360,
+                                                                   100,0,4);
+  gHistEtaPhiChi2PerTPCClusterSecondaryProtonsReject->SetStats(kTRUE);
+  gHistEtaPhiChi2PerTPCClusterSecondaryProtonsReject->GetXaxis()->SetTitleColor(1);
+  fRejectedCutList->Add(gHistEtaPhiChi2PerTPCClusterSecondaryProtonsReject);//eta-phi of secondary rejected ESD protons
+  TH3D *gHistEtaPhiChi2PerTPCClusterSecondaryAntiProtonsReject = new TH3D("gHistEtaPhiChi2PerTPCClusterSecondaryAntiProtonsReject",
+                                                                       "Rejected secondary antiprotons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                       fNBinsY,fMinY,fMaxY,
+                                                                       100,0,360,
+                                                                       100,0,4);
+  gHistEtaPhiChi2PerTPCClusterSecondaryAntiProtonsReject->SetStats(kTRUE);
+  gHistEtaPhiChi2PerTPCClusterSecondaryAntiProtonsReject->GetXaxis()->SetTitleColor(1);
+  fRejectedCutList->Add(gHistEtaPhiChi2PerTPCClusterSecondaryAntiProtonsReject);//eta-phi of secondary rejected ESD antiprotons
+  //eta-phi-number of TPC points for the dE/dx
+  TH3D *gHistEtaPhiTPCdEdxNPointsPrimaryProtonsReject = new TH3D("gHistEtaPhiTPCdEdxNPointsPrimaryProtonsReject",
+                                                                 "Rejected primary protons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                 fNBinsY,fMinY,fMaxY,
+                                                                 100,0,360,
+                                                                 100,0,200);
+  gHistEtaPhiTPCdEdxNPointsPrimaryProtonsReject->SetStats(kTRUE);
+  gHistEtaPhiTPCdEdxNPointsPrimaryProtonsReject->GetXaxis()->SetTitleColor(1);
+  fRejectedCutList->Add(gHistEtaPhiTPCdEdxNPointsPrimaryProtonsReject);//eta-phi of primary rejected ESD protons
+  TH3D *gHistEtaPhiTPCdEdxNPointsPrimaryAntiProtonsReject = new TH3D("gHistEtaPhiTPCdEdxNPointsPrimaryAntiProtonsReject",
+                                                                     "Rejected primary antiprotons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                     fNBinsY,fMinY,fMaxY,
+                                                                     100,0,360,
+                                                                     100,0,200);
+  gHistEtaPhiTPCdEdxNPointsPrimaryAntiProtonsReject->SetStats(kTRUE);
+  gHistEtaPhiTPCdEdxNPointsPrimaryAntiProtonsReject->GetXaxis()->SetTitleColor(1);
+  fRejectedCutList->Add(gHistEtaPhiTPCdEdxNPointsPrimaryAntiProtonsReject);//eta-phi of primary rejected ESD antiprotons
+  TH3D *gHistEtaPhiTPCdEdxNPointsSecondaryProtonsReject = new TH3D("gHistEtaPhiTPCdEdxNPointsSecondaryProtonsReject",
+                                                                   "Rejected secondary protons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                   fNBinsY,fMinY,fMaxY,
+                                                                   100,0,360,
+                                                                   100,0,200);
+  gHistEtaPhiTPCdEdxNPointsSecondaryProtonsReject->SetStats(kTRUE);
+  gHistEtaPhiTPCdEdxNPointsSecondaryProtonsReject->GetXaxis()->SetTitleColor(1);
+  fRejectedCutList->Add(gHistEtaPhiTPCdEdxNPointsSecondaryProtonsReject);//eta-phi of secondary rejected ESD protons
+  TH3D *gHistEtaPhiTPCdEdxNPointsSecondaryAntiProtonsReject = new TH3D("gHistEtaPhiTPCdEdxNPointsSecondaryAntiProtonsReject",
+                                                                       "Rejected secondary antiprotons;#eta;#phi;#chi^{2}/N_{clusters}(TPC)",
+                                                                       fNBinsY,fMinY,fMaxY,
+                                                                       100,0,360,
+                                                                       100,0,200);
+  gHistEtaPhiTPCdEdxNPointsSecondaryAntiProtonsReject->SetStats(kTRUE);
+  gHistEtaPhiTPCdEdxNPointsSecondaryAntiProtonsReject->GetXaxis()->SetTitleColor(1);
+  fRejectedCutList->Add(gHistEtaPhiTPCdEdxNPointsSecondaryAntiProtonsReject);//eta-phi of secondary rejected ESD antiprotons
 
   //DCA list
   fAcceptedDCAList = new TList();
@@ -1848,31 +1675,39 @@ void AliProtonQAAnalysis::InitVertexQA() {
   fQAVertexList->SetName("fQAVertexList");
 
   //Gen. multiplicity bins
-  Float_t xBins[24] = {0,1,2,4,6,8,10,15,20,30,40,50,75,100,
-                    200,300,400,500,750,1000,1500,2000,2500,3000};
+  //Float_t xBins[24] = {0,1,2,4,6,8,10,15,20,30,40,50,75,100,
+  //200,300,400,500,750,1000,1500,2000,2500,3000};
   //MC primary multiplicity (vertex efficiency calculation)
-  TH1F *gHistMCPrimaryMultiplicity = new TH1F("gHistMCPrimaryMultiplicity",
-                                             ";N_{prim. gen.};Entries",
-                                             23,xBins);
-  fQAVertexList->Add(gHistMCPrimaryMultiplicity);
+  TH1F *gHistMCPrimaryVz = new TH1F("gHistMCPrimaryVz",
+                                   ";V_{z} (gen.) [cm];Entries",
+                                   40,-20.,20.);
+  fQAVertexList->Add(gHistMCPrimaryVz);
+  //TH1F *gHistMCPrimaryMultiplicity = new TH1F("gHistMCPrimaryMultiplicity",
+  //";N_{prim. gen.};Entries",
+  //23,xBins);
+  //fQAVertexList->Add(gHistMCPrimaryMultiplicity);
   
   //TPC
-  TH1F *gHistMCPrimaryMultiplicityTPC = new TH1F("gHistMCPrimaryMultiplicityTPC",
-                                                "Vertex TPC;N_{prim. gen.};Entries",
-                                                23,xBins);
-  fQAVertexList->Add(gHistMCPrimaryMultiplicityTPC);
-  TH2F *gHistTPCESDVx = new TH2F("gHistTPCESDVx",
+  TH1F *gHistTPCVz = new TH1F("gHistTPCVz",
+                             ";V_{z} (gen.) [cm];Entries",
+                             40,-20.,20.);
+  fQAVertexList->Add(gHistTPCVz);
+  //TH1F *gHistMCPrimaryMultiplicityTPC = new TH1F("gHistMCPrimaryMultiplicityTPC",
+  //"Vertex TPC;N_{prim. gen.};Entries",
+  //23,xBins);
+  //fQAVertexList->Add(gHistMCPrimaryMultiplicityTPC);
+  TH2F *gHistTPCESDVxN = new TH2F("gHistTPCESDVxN",
                                 "Primary vertex TPC;V_{x} [cm];N_{contributors}",
                                 100,-10.,10.,1000,0,5000);
-  fQAVertexList->Add(gHistTPCESDVx);
-  TH2F *gHistTPCESDVy = new TH2F("gHistTPCESDVy",
+  fQAVertexList->Add(gHistTPCESDVxN);
+  TH2F *gHistTPCESDVyN = new TH2F("gHistTPCESDVyN",
                                 "Primary vertex TPC;V_{y} [cm];N_{contributors}",
                                 100,-10.,10.,1000,0,5000);
-  fQAVertexList->Add(gHistTPCESDVy);
-  TH2F *gHistTPCESDVz = new TH2F("gHistTPCESDVz",
+  fQAVertexList->Add(gHistTPCESDVyN);
+  TH2F *gHistTPCESDVzN = new TH2F("gHistTPCESDVzN",
                                 "Primary vertex TPC;V_{z} [cm];N_{contributors}",
                                 100,-20.,20.,1000,0,5000);
-  fQAVertexList->Add(gHistTPCESDVz);
+  fQAVertexList->Add(gHistTPCESDVzN);
   TH1F *gHistTPCDiffVx = new TH1F("gHistTPCDiffVx",
                                  ";V_{x}(rec.) - V_{x}(true) [#mu m];Entries",
                                  100,-10000.,10000.);
@@ -1887,34 +1722,38 @@ void AliProtonQAAnalysis::InitVertexQA() {
   fQAVertexList->Add(gHistTPCDiffVz);
   TH1F *gHistTPCResolutionVx = new TH1F("gHistTPCResolutionVx",
                                        ";#sigma_{x} [#mu m];Entries",
-                                       100,0.,1000.);
+                                       100,0.,1000000.);
   fQAVertexList->Add(gHistTPCResolutionVx);
   TH1F *gHistTPCResolutionVy = new TH1F("gHistTPCResolutionVy",
                                        ";#sigma_{y} [#mu m];Entries",
-                                       100,0.,1000.);
+                                       100,0.,1000000.);
   fQAVertexList->Add(gHistTPCResolutionVy);
   TH1F *gHistTPCResolutionVz = new TH1F("gHistTPCResolutionVz",
                                        ";#sigma_{z} [#mu m];Entries",
-                                       100,0.,500.);
+                                       100,0.,6000.);
   fQAVertexList->Add(gHistTPCResolutionVz);
   
   //SPD
-  TH1F *gHistMCPrimaryMultiplicitySPD = new TH1F("gHistMCPrimaryMultiplicitySPD",
-                                                "Vertex SPD;N_{prim. gen.};Entries",
-                                                23,xBins);
-  fQAVertexList->Add(gHistMCPrimaryMultiplicitySPD);
-  TH2F *gHistSPDESDVx = new TH2F("gHistSPDESDVx",
+  TH1F *gHistSPDVz = new TH1F("gHistSPDVz",
+                             ";V_{z} (gen.) [cm];Entries",
+                             40,-20.,20.);
+  fQAVertexList->Add(gHistSPDVz);
+  //TH1F *gHistMCPrimaryMultiplicitySPD = new TH1F("gHistMCPrimaryMultiplicitySPD",
+  //"Vertex SPD;N_{prim. gen.};Entries",
+  //23,xBins);
+  //fQAVertexList->Add(gHistMCPrimaryMultiplicitySPD);
+  TH2F *gHistSPDESDVxN = new TH2F("gHistSPDESDVxN",
                                 "Primary vertex SPD;V_{x} [cm];N_{contributors}",
                                 100,-10.,10.,1000,0,5000);
-  fQAVertexList->Add(gHistSPDESDVx);
-  TH2F *gHistSPDESDVy = new TH2F("gHistSPDESDVy",
+  fQAVertexList->Add(gHistSPDESDVxN);
+  TH2F *gHistSPDESDVyN = new TH2F("gHistSPDESDVyN",
                                 "Primary vertex SPD;V_{y} [cm];N_{contributors}",
                                 100,-10.,10.,1000,0,5000);
-  fQAVertexList->Add(gHistSPDESDVy);
-  TH2F *gHistSPDESDVz = new TH2F("gHistSPDESDVz",
+  fQAVertexList->Add(gHistSPDESDVyN);
+  TH2F *gHistSPDESDVzN = new TH2F("gHistSPDESDVzN",
                                 "Primary vertex SPD;V_{z} [cm];N_{contributors}",
                                 100,-20.,20.,1000,0,5000);
-  fQAVertexList->Add(gHistSPDESDVz);
+  fQAVertexList->Add(gHistSPDESDVzN);
   TH1F *gHistSPDDiffVx = new TH1F("gHistSPDDiffVx",
                                  ";V_{x}(rec.) - V_{x}(true) [#mu m];Entries",
                                  100,-10000.,10000.);
@@ -1941,22 +1780,26 @@ void AliProtonQAAnalysis::InitVertexQA() {
   fQAVertexList->Add(gHistSPDResolutionVz);
   
   //Tracks
-  TH1F *gHistMCPrimaryMultiplicityTracks = new TH1F("gHistMCPrimaryMultiplicityTracks",
-                                                   "Vertex Tracks;N_{prim. gen.};Entries",
-                                                   23,xBins);
-  fQAVertexList->Add(gHistMCPrimaryMultiplicityTracks);
-  TH2F *gHistTracksESDVx = new TH2F("gHistTracksESDVx",
-                                   "Primary vertex Tracks;V_{x} [cm];N_{contributors}",
-                                   100,-10.,10.,1000,0,5000);
-  fQAVertexList->Add(gHistTracksESDVx);
-  TH2F *gHistTracksESDVy = new TH2F("gHistTracksESDVy",
+  TH1F *gHistTracksVz = new TH1F("gHistTracksVz",
+                                ";V_{z} (gen.) [cm];Entries",
+                                40,-20.,20.);
+  fQAVertexList->Add(gHistTracksVz);
+  //TH1F *gHistMCPrimaryMultiplicityTracks = new TH1F("gHistMCPrimaryMultiplicityTracks",
+  //"Vertex Tracks;N_{prim. gen.};Entries",
+  //23,xBins);
+  //fQAVertexList->Add(gHistMCPrimaryMultiplicityTracks);
+  TH2F *gHistTracksESDVxN = new TH2F("gHistTracksESDVxN",
+                                    "Primary vertex Tracks;V_{x} [cm];N_{contributors}",
+                                    100,-10.,10.,1000,0,5000);
+  fQAVertexList->Add(gHistTracksESDVxN);
+  TH2F *gHistTracksESDVyN = new TH2F("gHistTracksESDVyN",
                                    "Primary vertex Tracks;V_{y} [cm];N_{contributors}",
                                    100,-10.,10.,1000,0,5000);
-  fQAVertexList->Add(gHistTracksESDVy);
-  TH2F *gHistTracksESDVz = new TH2F("gHistTracksESDVz",
+  fQAVertexList->Add(gHistTracksESDVyN);
+  TH2F *gHistTracksESDVzN = new TH2F("gHistTracksESDVzN",
                                    "Primary vertex Tracks;V_{z} [cm];N_{contributors}",
                                    100,-20.,20.,1000,0,5000);
-  fQAVertexList->Add(gHistTracksESDVz);
+  fQAVertexList->Add(gHistTracksESDVzN);
   TH1F *gHistTracksDiffVx = new TH1F("gHistTracksDiffVx",
                                     ";V_{x}(rec.) - V_{x}(true) [#mu m];Entries",
                                     100,-10000.,10000.);
@@ -1996,7 +1839,7 @@ void AliProtonQAAnalysis::InitQA() {
                                              ";;P_{T} [GeV/c]",
                                              fNBinsY,fMinY,fMaxY,
                                              fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtPrimaryProtonsPass->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtPrimaryProtonsPass->GetXaxis()->SetTitle("y");
@@ -2007,7 +1850,7 @@ void AliProtonQAAnalysis::InitQA() {
                                                ";;P_{T} [GeV/c]",
                                                fNBinsY,fMinY,fMaxY,
                                                fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtPrimaryProtonsReject->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtPrimaryProtonsReject->GetXaxis()->SetTitle("y");
@@ -2019,7 +1862,7 @@ void AliProtonQAAnalysis::InitQA() {
                                                ";;P_{T} [GeV/c]",
                                                fNBinsY,fMinY,fMaxY,
                                                fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtSecondaryProtonsPass->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtSecondaryProtonsPass->GetXaxis()->SetTitle("y");
@@ -2030,7 +1873,7 @@ void AliProtonQAAnalysis::InitQA() {
                                                  ";;P_{T} [GeV/c]",
                                                  fNBinsY,fMinY,fMaxY,
                                                  fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtSecondaryProtonsReject->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtSecondaryProtonsReject->GetXaxis()->SetTitle("y");
@@ -2042,7 +1885,7 @@ void AliProtonQAAnalysis::InitQA() {
                                                  ";;P_{T} [GeV/c]",
                                                  fNBinsY,fMinY,fMaxY,
                                                  fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtPrimaryAntiProtonsPass->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtPrimaryAntiProtonsPass->GetXaxis()->SetTitle("y");
@@ -2053,7 +1896,7 @@ void AliProtonQAAnalysis::InitQA() {
                                                    ";;P_{T} [GeV/c]",
                                                    fNBinsY,fMinY,fMaxY,
                                                    fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtPrimaryAntiProtonsReject->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtPrimaryAntiProtonsReject->GetXaxis()->SetTitle("y");
@@ -2065,7 +1908,7 @@ void AliProtonQAAnalysis::InitQA() {
                                                    ";;P_{T} [GeV/c]",
                                                    fNBinsY,fMinY,fMaxY,
                                                    fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtSecondaryAntiProtonsPass->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtSecondaryAntiProtonsPass->GetXaxis()->SetTitle("y");
@@ -2076,7 +1919,7 @@ void AliProtonQAAnalysis::InitQA() {
                                                      ";;P_{T} [GeV/c]",
                                                      fNBinsY,fMinY,fMaxY,
                                                      fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtSecondaryAntiProtonsReject->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtSecondaryAntiProtonsReject->GetXaxis()->SetTitle("y");
@@ -2088,7 +1931,7 @@ void AliProtonQAAnalysis::InitQA() {
                                            ";;P_{T} [GeV/c]",
                                            fNBinsY,fMinY,fMaxY,
                                            fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtPrimaryProtonsMC->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtPrimaryProtonsMC->GetXaxis()->SetTitle("y");
@@ -2099,7 +1942,7 @@ void AliProtonQAAnalysis::InitQA() {
                                                ";;P_{T} [GeV/c]",
                                                fNBinsY,fMinY,fMaxY,
                                                fNBinsPt,fMinPt,fMaxPt);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtPrimaryAntiProtonsMC->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtPrimaryAntiProtonsMC->GetXaxis()->SetTitle("y");
@@ -2112,7 +1955,7 @@ void AliProtonQAAnalysis::InitQA() {
                                          fNBinsY,fMinY,fMaxY,
                                          fNBinsPt,fMinPt,fMaxPt,
                                          14,-0.5,13.5);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtPDGProtonsPass->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtPDGProtonsPass->GetXaxis()->SetTitle("y");
@@ -2122,7 +1965,7 @@ void AliProtonQAAnalysis::InitQA() {
                                              fNBinsY,fMinY,fMaxY,
                                              fNBinsPt,fMinPt,fMaxPt,
                                              14,-0.5,13.5);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtPDGAntiProtonsPass->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtPDGAntiProtonsPass->GetXaxis()->SetTitle("y");
@@ -2234,6 +2077,8 @@ void AliProtonQAAnalysis::InitQA() {
   TH1F *gPrimaryProtonsPointOnITSLayer6Pass = new TH1F("gPrimaryProtonsPointOnITSLayer6Pass",
                                             "",10,-1,1);
   fQAPrimaryProtonsAcceptedList->Add(gPrimaryProtonsPointOnITSLayer6Pass);
+  TH1F *gPrimaryProtonsNumberOfTPCdEdxPointsPass = new TH1F("gPrimaryProtonsNumberOfTPCdEdxPointsPass","",100,0,200);
+  fQAPrimaryProtonsAcceptedList->Add(gPrimaryProtonsNumberOfTPCdEdxPointsPass);
 
   //Rejected primary protons
   /*gDirectory->cd("../");
@@ -2334,6 +2179,8 @@ void AliProtonQAAnalysis::InitQA() {
   TH1F *gPrimaryProtonsPointOnITSLayer6Reject = new TH1F("gPrimaryProtonsPointOnITSLayer6Reject",
                                             "",10,-1,1);
   fQAPrimaryProtonsRejectedList->Add(gPrimaryProtonsPointOnITSLayer6Reject);
+  TH1F *gPrimaryProtonsNumberOfTPCdEdxPointsReject = new TH1F("gPrimaryProtonsNumberOfTPCdEdxPointsReject","",100,0,200);
+  fQAPrimaryProtonsRejectedList->Add(gPrimaryProtonsNumberOfTPCdEdxPointsReject);
 
   //________________________________________________________________//
   /*gDirectory->cd("../../");
@@ -2438,6 +2285,8 @@ void AliProtonQAAnalysis::InitQA() {
   TH1F *gSecondaryProtonsPointOnITSLayer6Pass = new TH1F("gSecondaryProtonsPointOnITSLayer6Pass",
                                                         "",10,-1,1);
   fQASecondaryProtonsAcceptedList->Add(gSecondaryProtonsPointOnITSLayer6Pass);
+  TH1F *gSecondaryProtonsNumberOfTPCdEdxPointsPass = new TH1F("gSecondaryProtonsNumberOfTPCdEdxPointsPass","",100,0,200);
+  fQASecondaryProtonsAcceptedList->Add(gSecondaryProtonsNumberOfTPCdEdxPointsPass);
 
   //Rejected secondary protons
   /*gDirectory->cd("../");
@@ -2538,7 +2387,8 @@ void AliProtonQAAnalysis::InitQA() {
   TH1F *gSecondaryProtonsPointOnITSLayer6Reject = new TH1F("gSecondaryProtonsPointOnITSLayer6Reject",
                                                           "",10,-1,1);
   fQASecondaryProtonsRejectedList->Add(gSecondaryProtonsPointOnITSLayer6Reject);
-  
+  TH1F *gSecondaryProtonsNumberOfTPCdEdxPointsReject = new TH1F("gSecondaryProtonsNumberOfTPCdEdxPointsReject","",100,0,200);
+  fQASecondaryProtonsRejectedList->Add(gSecondaryProtonsNumberOfTPCdEdxPointsReject);  
 
   /*gDirectory->cd("../../../");
 
@@ -2647,6 +2497,8 @@ void AliProtonQAAnalysis::InitQA() {
   TH1F *gPrimaryAntiProtonsPointOnITSLayer6Pass = new TH1F("gPrimaryAntiProtonsPointOnITSLayer6Pass",
                                                           "",10,-1,1);
   fQAPrimaryAntiProtonsAcceptedList->Add(gPrimaryAntiProtonsPointOnITSLayer6Pass);
+  TH1F *gPrimaryAntiProtonsNumberOfTPCdEdxPointsPass = new TH1F("gPrimaryAntiProtonsNumberOfTPCdEdxPointsPass","",100,0,200);
+  fQAPrimaryAntiProtonsAcceptedList->Add(gPrimaryAntiProtonsNumberOfTPCdEdxPointsPass);
   
   //Rejected primary antiprotons
   /*gDirectory->cd("../");
@@ -2747,6 +2599,8 @@ void AliProtonQAAnalysis::InitQA() {
   TH1F *gPrimaryAntiProtonsPointOnITSLayer6Reject = new TH1F("gPrimaryAntiProtonsPointOnITSLayer6Reject",
                                                             "",10,-1,1);
   fQAPrimaryAntiProtonsRejectedList->Add(gPrimaryAntiProtonsPointOnITSLayer6Reject);
+  TH1F *gPrimaryAntiProtonsNumberOfTPCdEdxPointsReject = new TH1F("gPrimaryAntiProtonsNumberOfTPCdEdxPointsReject","",100,0,200);
+  fQAPrimaryAntiProtonsRejectedList->Add(gPrimaryAntiProtonsNumberOfTPCdEdxPointsReject);
   
   //________________________________________________________________//
   /*gDirectory->cd("../../");
@@ -2851,7 +2705,9 @@ void AliProtonQAAnalysis::InitQA() {
   TH1F *gSecondaryAntiProtonsPointOnITSLayer6Pass = new TH1F("gSecondaryAntiProtonsPointOnITSLayer6Pass",
                                                             "",10,-1,1);
   fQASecondaryAntiProtonsAcceptedList->Add(gSecondaryAntiProtonsPointOnITSLayer6Pass);
-  
+  TH1F *gSecondaryAntiProtonsNumberOfTPCdEdxPointsPass = new TH1F("gSecondaryAntiProtonsNumberOfTPCdEdxPointsPass","",100,0,200);
+  fQASecondaryAntiProtonsAcceptedList->Add(gSecondaryAntiProtonsNumberOfTPCdEdxPointsPass);
+
   //Rejected secondary antiprotons
   /*gDirectory->cd("../");
   TDirectory *dirAntiProtonsSecondaryRejected = gDirectory->mkdir("Rejected");
@@ -2951,10 +2807,464 @@ void AliProtonQAAnalysis::InitQA() {
   TH1F *gSecondaryAntiProtonsPointOnITSLayer6Reject = new TH1F("gSecondaryAntiProtonsPointOnITSLayer6Reject",
                                                             "",10,-1,1);
   fQASecondaryAntiProtonsRejectedList->Add(gSecondaryAntiProtonsPointOnITSLayer6Reject);
+  TH1F *gSecondaryAntiProtonsNumberOfTPCdEdxPointsReject = new TH1F("gSecondaryAntiProtonsNumberOfTPCdEdxPointsReject","",100,0,200);
+  fQASecondaryAntiProtonsRejectedList->Add(gSecondaryAntiProtonsNumberOfTPCdEdxPointsReject);
+}
+
+//____________________________________________________________________//
+void AliProtonQAAnalysis::RunReconstructionEfficiencyAnalysis(AliMCEvent *const mcEvent, 
+                                                             AliESDEvent *esd,
+                                                             const AliESDVertex *vertex) {
+  //Run the reconstruction efficiency code (primaries & secondaries)
+  AliStack *stack = mcEvent->Stack();
+
+  Int_t nMCParticles = mcEvent->GetNumberOfTracks();
+  Int_t nMCLabelCounter = 0;
+  TArrayI labelMCArray(nMCParticles);
+
+  for (Int_t iTracks = 0; iTracks < mcEvent->GetNumberOfTracks(); iTracks++) {
+    AliMCParticle *mcTrack = mcEvent->GetTrack(iTracks);
+    if (!mcTrack) {
+      Printf("ERROR: Could not receive track %d (mc loop)", iTracks);
+      continue;
+    }
+    if(TMath::Abs(mcTrack->Eta()) > 1.0) continue;//acceptance
+    if((mcTrack->Pt() > fMaxPt)||(mcTrack->Pt() < fMinPt)) continue;
+    if(fProtonAnalysisBase->GetEtaMode()) {
+      if((mcTrack->Eta() > fMaxY)|| (mcTrack->Eta() < fMinY)) continue;
+    }
+    else 
+      if((fProtonAnalysisBase->Rapidity(mcTrack->Px(),mcTrack->Py(),mcTrack->Pz()) > fMaxY)||(fProtonAnalysisBase->Rapidity(mcTrack->Px(),mcTrack->Py(),mcTrack->Pz()) < fMinY)) continue;
+    
+    // Loop over Track References
+    Bool_t labelTPC = kFALSE;
+    AliTrackReference* trackRef = 0;
+    for (Int_t iTrackRef = 0; iTrackRef  < mcTrack->GetNumberOfTrackReferences(); iTrackRef++) {
+      trackRef = mcTrack->GetTrackReference(iTrackRef);
+      if(trackRef) {
+       Int_t detectorId = trackRef->DetectorId(); 
+       if (detectorId == AliTrackReference::kTPC) {        
+         labelTPC = kTRUE;
+         break;
+       }
+      }      
+    }
+
+    //findable tracks
+    if (labelTPC) {
+      TParticle* particle = mcTrack->Particle();
+      if(!particle) continue;
+      Int_t pdgcode = particle->GetPdgCode();
+      if(TMath::Abs(pdgcode) != 2212) continue;
+      
+      labelMCArray.AddAt(iTracks,nMCLabelCounter);
+      nMCLabelCounter += 1;
+
+      if(iTracks <= stack->GetNprimary()) {
+       if(pdgcode == 2212) {
+         if(fProtonAnalysisBase->GetEtaMode()) 
+           ((TH2D *)(fEfficiencyList->At(0)))->Fill(particle->Eta(),
+                                                    particle->Pt());
+         else
+           ((TH2D *)(fEfficiencyList->At(0)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                                                  particle->Py(),
+                                                                                  particle->Pz()),
+                                                    particle->Pt());
+       }//protons
+       if(pdgcode == -2212) {
+         if(fProtonAnalysisBase->GetEtaMode()) 
+           ((TH2D *)(fEfficiencyList->At(1)))->Fill(particle->Eta(),
+                                                    particle->Pt());
+         else
+           ((TH2D *)(fEfficiencyList->At(1)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                                                  particle->Py(),
+                                                                                  particle->Pz()),
+                                                    particle->Pt());
+       }//antiprotons
+      }//primaries
+      else {
+       //secondaries
+       Int_t lPartMother = -1;
+       Int_t motherPDGCode = -1;
+       lPartMother = particle->GetFirstMother();
+       AliMCParticle *mcMotherTrack = mcEvent->GetTrack(lPartMother);
+       TParticle *motherParticle = mcMotherTrack->Particle();
+       if(motherParticle) motherPDGCode = motherParticle->GetPdgCode();
+       
+       if(pdgcode == 2212) {
+         if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
+           if(fProtonAnalysisBase->GetEtaMode()) 
+             ((TH2D *)(fEfficiencyList->At(2)))->Fill(particle->Eta(),
+                                                      particle->Pt());
+           else
+             ((TH2D *)(fEfficiencyList->At(2)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                               particle->Py(),
+                                                               particle->Pz()),
+                                                      particle->Pt());
+         }//weak decays
+         if((particle->GetUniqueID() == 13)) {
+           if(fProtonAnalysisBase->GetEtaMode()) 
+             ((TH2D *)(fEfficiencyList->At(4)))->Fill(particle->Eta(),
+                                                      particle->Pt());
+           else
+             ((TH2D *)(fEfficiencyList->At(4)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                               particle->Py(),
+                                                               particle->Pz()),
+                                                      particle->Pt());
+         }//hadronic interactions
+       }//protons
+       if(pdgcode == -2212) {
+         if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
+           if(fProtonAnalysisBase->GetEtaMode()) 
+             ((TH2D *)(fEfficiencyList->At(3)))->Fill(particle->Eta(),
+                                                      particle->Pt());
+           else
+             ((TH2D *)(fEfficiencyList->At(3)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                               particle->Py(),
+                                                               particle->Pz()),
+                                                      particle->Pt());
+         }//weak decays
+         if((particle->GetUniqueID() == 13)) {
+           if(fProtonAnalysisBase->GetEtaMode()) 
+             ((TH2D *)(fEfficiencyList->At(5)))->Fill(particle->Eta(),
+                                                      particle->Pt());
+           else
+             ((TH2D *)(fEfficiencyList->At(5)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                               particle->Py(),
+                                                               particle->Pz()),
+                                                      particle->Pt());
+         }//hadronic interactions
+       }//antiprotons
+      }//secondaries
+    }//findable tracks
+  }//MC track loop
+
+  //ESD track loop
+  Bool_t iFound = kFALSE;
+  Int_t mcGoods = nMCLabelCounter;
+  for (Int_t k = 0; k < mcGoods; k++) {
+    Int_t mcLabel = labelMCArray.At(k);
+    iFound = kFALSE;
+
+    Int_t nGoodTracks = esd->GetNumberOfTracks();
+    TArrayI labelArray(nGoodTracks);
+    Int_t labelCounter = 0;
+    for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) {
+      AliESDtrack* track = esd->GetTrack(iTracks);
+      if(!track) continue;
+            
+      //TPC only
+      if((fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kTPC)||(fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kHybrid)) {
+       AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
+       if(!tpcTrack) continue;
+       
+       Int_t label = TMath::Abs(track->GetTPCLabel());
+       if(IsLabelUsed(labelArray,label)) continue;
+       labelArray.AddAt(label,labelCounter);
+       labelCounter += 1;
+       
+       if (mcLabel != TMath::Abs(label)) continue;
+       if(mcLabel != label) continue;
+       
+       TParticle *particle = stack->Particle(label);
+       if(!particle) continue;
+       Int_t pdgcode = particle->GetPdgCode();
+       if(TMath::Abs(particle->Eta()) > 1.0) continue;//acceptance
+       if((particle->Pt() > fMaxPt)||(particle->Pt() < fMinPt)) continue;
+       if(fProtonAnalysisBase->GetEtaMode()) {
+         if((particle->Eta() > fMaxY)|| (particle->Eta() < fMinY)) continue;
+       }
+       else 
+         if((fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
+       
+       //Double_t probability[5];
+       
+       if(fUseCutsInEfficiency) 
+         if(!fProtonAnalysisBase->IsAccepted(esd,vertex,track)) continue;
+       
+       //reconstructed primary (anti)protons
+       if(pdgcode == 2212) {
+         if(fProtonAnalysisBase->GetEtaMode())
+           ((TH2D *)(fEfficiencyList->At(12)))->Fill(particle->Eta(),
+                                                     particle->Pt());
+         else
+           ((TH2D *)(fEfficiencyList->At(12)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                              particle->Py(),
+                                                              particle->Pz()),
+                                                     particle->Pt());
+         if(label <= stack->GetNprimary()) {
+           if(fProtonAnalysisBase->GetEtaMode())
+             ((TH2D *)(fEfficiencyList->At(6)))->Fill(particle->Eta(),
+                                                      particle->Pt());
+           else
+             ((TH2D *)(fEfficiencyList->At(6)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                               particle->Py(),
+                                                               particle->Pz()),
+                                                      particle->Pt());
+         }//primaries
+         if(label > stack->GetNprimary()) {
+           Int_t lPartMother = -1;
+           Int_t motherPDGCode = -1;
+           lPartMother = particle->GetFirstMother();
+           TParticle *motherParticle = stack->Particle(lPartMother);
+           if(motherParticle) motherPDGCode = motherParticle->GetPdgCode();
+           
+           if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fEfficiencyList->At(8)))->Fill(particle->Eta(),
+                                                        particle->Pt());
+             else
+               ((TH2D *)(fEfficiencyList->At(8)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                                 particle->Py(),
+                                                                 particle->Pz()),
+                                                        particle->Pt());
+           }//weak decays
+           if((particle->GetUniqueID() == 13)) {
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fEfficiencyList->At(10)))->Fill(particle->Eta(),
+                                                         particle->Pt());
+             else
+               ((TH2D *)(fEfficiencyList->At(10)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                                  particle->Py(),
+                                                                  particle->Pz()),
+                                                         particle->Pt());
+           }//hadronic interactions
+         }//secondaries
+       }//initial protons
+       if(pdgcode == -2212) {  
+         if(fProtonAnalysisBase->GetEtaMode())
+           ((TH2D *)(fEfficiencyList->At(12)))->Fill(particle->Eta(),
+                                                     particle->Pt());
+         else
+           ((TH2D *)(fEfficiencyList->At(12)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                              particle->Py(),
+                                                              particle->Pz()),
+                                                     particle->Pt());
+         if(label <= stack->GetNprimary()) {
+           if(fProtonAnalysisBase->GetEtaMode())
+             ((TH2D *)(fEfficiencyList->At(7)))->Fill(particle->Eta(),
+                                                      particle->Pt());
+           else
+             ((TH2D *)(fEfficiencyList->At(7)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                               particle->Py(),
+                                                               particle->Pz()),
+                                                      particle->Pt());
+         }//primaries
+         if(label > stack->GetNprimary()) {
+           Int_t lPartMother = -1;
+           Int_t motherPDGCode = -1;
+           lPartMother = particle->GetFirstMother();
+           TParticle *motherParticle = stack->Particle(lPartMother);
+           if(motherParticle) motherPDGCode = motherParticle->GetPdgCode();
+           
+           if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fEfficiencyList->At(9)))->Fill(particle->Eta(),
+                                                        particle->Pt());
+             else
+               ((TH2D *)(fEfficiencyList->At(9)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                                 particle->Py(),
+                                                                 particle->Pz()),
+                                                        particle->Pt());
+           }//weak decays
+           if((particle->GetUniqueID() == 13)) {
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fEfficiencyList->At(11)))->Fill(particle->Eta(),
+                                                         particle->Pt());
+             else
+               ((TH2D *)(fEfficiencyList->At(11)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                                  particle->Py(),
+                                                                  particle->Pz()),
+                                                         particle->Pt());
+           }//hadronic interactions
+         }//secondaries
+       }//initial antiprotons  
+      }//TPC only tracks
+      else {
+       Int_t label = TMath::Abs(track->GetLabel());
+       if(IsLabelUsed(labelArray,label)) continue;
+       labelArray.AddAt(label,labelCounter);
+       labelCounter += 1;
+       
+       if (mcLabel != TMath::Abs(label)) continue;
+       if(mcLabel != label) continue;
+       
+       TParticle *particle = stack->Particle(label);
+       if(!particle) continue;
+       Int_t pdgcode = particle->GetPdgCode();
+       if(TMath::Abs(particle->Eta()) > 1.0) continue;//acceptance
+       if((particle->Pt() > fMaxPt)||(particle->Pt() < fMinPt)) continue;
+       if(fProtonAnalysisBase->GetEtaMode()) {
+         if((particle->Eta() > fMaxY)|| (particle->Eta() < fMinY)) continue;
+       }
+       else 
+         if((fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
+       
+       //Double_t probability[5];
+
+       if(fUseCutsInEfficiency) 
+         if(!fProtonAnalysisBase->IsAccepted(esd,vertex,track)) continue;
+       
+       //reconstructed primary (anti)protons
+       if(pdgcode == 2212) {
+         if(fProtonAnalysisBase->GetEtaMode())
+           ((TH2D *)(fEfficiencyList->At(12)))->Fill(particle->Eta(),
+                                                     particle->Pt());
+         else
+           ((TH2D *)(fEfficiencyList->At(12)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                              particle->Py(),
+                                                              particle->Pz()),
+                                                     particle->Pt());
+         if(label <= stack->GetNprimary()) {
+           if(fProtonAnalysisBase->GetEtaMode())
+             ((TH2D *)(fEfficiencyList->At(6)))->Fill(particle->Eta(),
+                                                      particle->Pt());
+           else
+             ((TH2D *)(fEfficiencyList->At(6)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                               particle->Py(),
+                                                               particle->Pz()),
+                                                      particle->Pt());
+         }//primaries
+         if(label > stack->GetNprimary()) {
+           Int_t lPartMother = -1;
+           Int_t motherPDGCode = -1;
+           lPartMother = particle->GetFirstMother();
+           TParticle *motherParticle = stack->Particle(lPartMother);
+           if(motherParticle) motherPDGCode = motherParticle->GetPdgCode();
+           
+           if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fEfficiencyList->At(8)))->Fill(particle->Eta(),
+                                                        particle->Pt());
+             else
+               ((TH2D *)(fEfficiencyList->At(8)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                                 particle->Py(),
+                                                                 particle->Pz()),
+                                                        particle->Pt());
+           }//weak decays
+           if((particle->GetUniqueID() == 13)) {
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fEfficiencyList->At(10)))->Fill(particle->Eta(),
+                                                         particle->Pt());
+             else
+               ((TH2D *)(fEfficiencyList->At(10)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                                  particle->Py(),
+                                                                  particle->Pz()),
+                                                         particle->Pt());
+           }//hadronic interactions
+         }//secondaries
+       }//initial protons
+       if(pdgcode == -2212) {  
+         if(fProtonAnalysisBase->GetEtaMode())
+           ((TH2D *)(fEfficiencyList->At(12)))->Fill(particle->Eta(),
+                                                     particle->Pt());
+         else
+           ((TH2D *)(fEfficiencyList->At(12)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                              particle->Py(),
+                                                              particle->Pz()),
+                                                     particle->Pt());
+         if(label <= stack->GetNprimary()) {
+           if(fProtonAnalysisBase->GetEtaMode())
+             ((TH2D *)(fEfficiencyList->At(7)))->Fill(particle->Eta(),
+                                                      particle->Pt());
+           else
+             ((TH2D *)(fEfficiencyList->At(7)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                               particle->Py(),
+                                                               particle->Pz()),
+                                                      particle->Pt());
+         }//primaries
+         if(label > stack->GetNprimary()) {
+           Int_t lPartMother = -1;
+           Int_t motherPDGCode = -1;
+           lPartMother = particle->GetFirstMother();
+           TParticle *motherParticle = stack->Particle(lPartMother);
+           if(motherParticle) motherPDGCode = motherParticle->GetPdgCode();
+           
+           if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fEfficiencyList->At(9)))->Fill(particle->Eta(),
+                                                        particle->Pt());
+             else
+               ((TH2D *)(fEfficiencyList->At(9)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                                 particle->Py(),
+                                                                 particle->Pz()),
+                                                        particle->Pt());
+           }//weak decays
+           if((particle->GetUniqueID() == 13)) {
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fEfficiencyList->At(11)))->Fill(particle->Eta(),
+                                                         particle->Pt());
+             else
+               ((TH2D *)(fEfficiencyList->At(11)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                                  particle->Py(),
+                                                                  particle->Pz()),
+                                                         particle->Pt());
+           }//hadronic interactions
+         }//secondaries
+       }//initial antiprotons
+       
+      }//global tracking
+    }//track loop
+    labelArray.Reset();
+  }//loop over findable tracks
+
+  labelMCArray.Reset();
+}
+
+//____________________________________________________________________//
+void AliProtonQAAnalysis::RunPIDEfficiencyAnalysis(AliStack *const stack, 
+                                                  AliESDEvent *esd) {
+  Int_t nGoodTracks = esd->GetNumberOfTracks();
+  TArrayI labelArray(nGoodTracks);
+  Int_t labelCounter = 0;
+  for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) {
+    AliESDtrack* track = esd->GetTrack(iTracks);
+    if(!track) continue;
+    
+    //TPC only
+    if((fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kTPC)||(fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kHybrid)) {
+      AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
+      if(!tpcTrack) continue;
+    }
+       
+    Int_t label = TMath::Abs(track->GetLabel());
+    if(IsLabelUsed(labelArray,label)) continue;
+    labelArray.AddAt(label,labelCounter);
+    labelCounter += 1;
+               
+    TParticle *particle = stack->Particle(label);
+    if(!particle) continue;
+    Int_t pdgcode = particle->GetPdgCode();
+    
+    Int_t nTPCpoints = track->GetTPCsignalN();
+
+    //pid
+    if(fProtonAnalysisBase->IsProton(track)) {
+      if(fProtonAnalysisBase->GetEtaMode())
+       ((TH3D *)(fEfficiencyList->At(14)))->Fill(particle->Eta(),
+                                                 particle->Pt(),nTPCpoints);
+      else ((TH3D *)(fEfficiencyList->At(14)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()),particle->Pt(),nTPCpoints);
+      if(TMath::Abs(pdgcode) == 2212) {
+       if(fProtonAnalysisBase->GetEtaMode())
+         ((TH3D *)(fEfficiencyList->At(13)))->Fill(particle->Eta(),
+                                                   particle->Pt(),nTPCpoints);
+       else
+         ((TH3D *)(fEfficiencyList->At(13)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()),particle->Pt(),nTPCpoints);
+      }//properly identified as proton
+      else {
+       if(fProtonAnalysisBase->GetEtaMode())
+         ((TH3D *)(fEfficiencyList->At(15)))->Fill(particle->Eta(),
+                                                   particle->Pt(),nTPCpoints);
+       else
+         ((TH3D *)(fEfficiencyList->At(15)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()),particle->Pt(),nTPCpoints);
+      }//contamination
+    }//identified as proton
+  }//ESD track loop
+  labelArray.Reset();
 }
 
 //____________________________________________________________________//
-void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack, 
+void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *const stack, 
                                                AliESDEvent *esd,
                                                const AliESDVertex *vertex) {
   //Runs the efficiency code
@@ -2966,11 +3276,11 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
 
     if(TMath::Abs(particle->Eta()) > 1.0) continue;//acceptance
     if((particle->Pt() > fMaxPt)||(particle->Pt() < fMinPt)) continue;
-    if(fAnalysisEtaMode) {
+    if(fProtonAnalysisBase->GetEtaMode()) {
       if((particle->Eta() > fMaxY)|| (particle->Eta() < fMinY)) continue;
     }
     else 
-      if((Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
+      if((fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
 
     Int_t pdgcode = particle->GetPdgCode();
     if(TMath::Abs(pdgcode) != 2212) continue;
@@ -2978,21 +3288,21 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
     if(iParticle <= stack->GetNprimary()) {
       if(pdgcode == 2212) {
        nMCProtons += 1;
-       if(fAnalysisEtaMode
+       if(fProtonAnalysisBase->GetEtaMode()
          ((TH2D *)(fEfficiencyList->At(0)))->Fill(particle->Eta(),
                                                   particle->Pt());
        else
-         ((TH2D *)(fEfficiencyList->At(0)))->Fill(Rapidity(particle->Px(),
+         ((TH2D *)(fEfficiencyList->At(0)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                            particle->Py(),
                                                            particle->Pz()),
                                                   particle->Pt());
       }//protons
       if(pdgcode == -2212) {
-       if(fAnalysisEtaMode
+       if(fProtonAnalysisBase->GetEtaMode()
          ((TH2D *)(fEfficiencyList->At(1)))->Fill(particle->Eta(),
                                                   particle->Pt());
        else
-         ((TH2D *)(fEfficiencyList->At(1)))->Fill(Rapidity(particle->Px(),
+         ((TH2D *)(fEfficiencyList->At(1)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                            particle->Py(),
                                                            particle->Pz()),
                                                   particle->Pt());
@@ -3008,43 +3318,43 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
 
       if(pdgcode == 2212) {
        if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
-         if(fAnalysisEtaMode
+         if(fProtonAnalysisBase->GetEtaMode()
            ((TH2D *)(fEfficiencyList->At(2)))->Fill(particle->Eta(),
                                                     particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(2)))->Fill(Rapidity(particle->Px(),
+           ((TH2D *)(fEfficiencyList->At(2)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                              particle->Py(),
                                                              particle->Pz()),
                                                     particle->Pt());
        }//weak decays
        if((particle->GetUniqueID() == 13)) {
-         if(fAnalysisEtaMode
+         if(fProtonAnalysisBase->GetEtaMode()
            ((TH2D *)(fEfficiencyList->At(4)))->Fill(particle->Eta(),
                                                     particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(4)))->Fill(Rapidity(particle->Px(),
-                                                             particle->Py(),
-                                                             particle->Pz()),
+           ((TH2D *)(fEfficiencyList->At(4)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
+                                                                                  particle->Py(),
+                                                                                  particle->Pz()),
                                                     particle->Pt());
        }//hadronic interactions
       }//protons
       if(pdgcode == -2212) {
        if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
-         if(fAnalysisEtaMode
+         if(fProtonAnalysisBase->GetEtaMode()
            ((TH2D *)(fEfficiencyList->At(3)))->Fill(particle->Eta(),
                                                     particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(3)))->Fill(Rapidity(particle->Px(),
+           ((TH2D *)(fEfficiencyList->At(3)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                              particle->Py(),
                                                              particle->Pz()),
                                                     particle->Pt());
        }//weak decays
        if((particle->GetUniqueID() == 13)) {
-         if(fAnalysisEtaMode
+         if(fProtonAnalysisBase->GetEtaMode()
            ((TH2D *)(fEfficiencyList->At(5)))->Fill(particle->Eta(),
                                                     particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(5)))->Fill(Rapidity(particle->Px(),
+           ((TH2D *)(fEfficiencyList->At(5)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                              particle->Py(),
                                                              particle->Pz()),
                                                     particle->Pt());
@@ -3072,43 +3382,42 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
     Int_t pdgcode = particle->GetPdgCode();
     if(TMath::Abs(particle->Eta()) > 1.0) continue;//acceptance
     
-    Double_t Pt = 0.0, P = 0.0;
-    Double_t probability[5];
+    Double_t gPt = 0.0, gP = 0.0;
     
     //TPC only
-    if(fUseTPCOnly) {
+    if((fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kTPC)||(fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kHybrid)) {
       AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
       if(!tpcTrack) continue;
-      Pt = tpcTrack->Pt();
-      P = tpcTrack->P();
+      gPt = tpcTrack->Pt();
+      gP = tpcTrack->P();
       
       if((particle->Pt() > fMaxPt)||(particle->Pt() < fMinPt)) continue;
-      if(fAnalysisEtaMode) {
+      if(fProtonAnalysisBase->GetEtaMode()) {
        if((particle->Eta() > fMaxY)|| (particle->Eta() < fMinY)) continue;
       }
       else 
-       if((Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
+       if((fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
       
       if(fUseCutsInEfficiency) 
-       if(!IsAccepted(esd,vertex,track)) continue;
+       if(!fProtonAnalysisBase->IsAccepted(esd,vertex,track)) continue;
       
       //reconstructed primary (anti)protons
       if(pdgcode == 2212) {
-       if(fAnalysisEtaMode)
+       if(fProtonAnalysisBase->GetEtaMode())
          ((TH2D *)(fEfficiencyList->At(12)))->Fill(particle->Eta(),
                                                    particle->Pt());
        else
-         ((TH2D *)(fEfficiencyList->At(12)))->Fill(Rapidity(particle->Px(),
+         ((TH2D *)(fEfficiencyList->At(12)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                             particle->Py(),
                                                             particle->Pz()),
                                                    particle->Pt());
        if(label <= stack->GetNprimary()) {
          nESDProtons += 1;
-         if(fAnalysisEtaMode)
+         if(fProtonAnalysisBase->GetEtaMode())
            ((TH2D *)(fEfficiencyList->At(6)))->Fill(particle->Eta(),
                                                     particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(6)))->Fill(Rapidity(particle->Px(),
+           ((TH2D *)(fEfficiencyList->At(6)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                              particle->Py(),
                                                              particle->Pz()),
                                                     particle->Pt());
@@ -3121,21 +3430,21 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
          if(motherParticle) motherPDGCode = motherParticle->GetPdgCode();
          
          if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
-           if(fAnalysisEtaMode)
+           if(fProtonAnalysisBase->GetEtaMode())
              ((TH2D *)(fEfficiencyList->At(8)))->Fill(particle->Eta(),
                                                       particle->Pt());
            else
-             ((TH2D *)(fEfficiencyList->At(8)))->Fill(Rapidity(particle->Px(),
+             ((TH2D *)(fEfficiencyList->At(8)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                                particle->Py(),
                                                                particle->Pz()),
                                                       particle->Pt());
          }//weak decays
          if((particle->GetUniqueID() == 13)) {
-           if(fAnalysisEtaMode)
+           if(fProtonAnalysisBase->GetEtaMode())
              ((TH2D *)(fEfficiencyList->At(10)))->Fill(particle->Eta(),
                                                        particle->Pt());
            else
-             ((TH2D *)(fEfficiencyList->At(10)))->Fill(Rapidity(particle->Px(),
+             ((TH2D *)(fEfficiencyList->At(10)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                                 particle->Py(),
                                                                 particle->Pz()),
                                                        particle->Pt());
@@ -3143,20 +3452,20 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
        }//secondaries
       }//initial protons
       if(pdgcode == -2212) {   
-       if(fAnalysisEtaMode)
+       if(fProtonAnalysisBase->GetEtaMode())
          ((TH2D *)(fEfficiencyList->At(12)))->Fill(particle->Eta(),
                                                    particle->Pt());
        else
-         ((TH2D *)(fEfficiencyList->At(12)))->Fill(Rapidity(particle->Px(),
+         ((TH2D *)(fEfficiencyList->At(12)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                             particle->Py(),
                                                             particle->Pz()),
                                                    particle->Pt());
        if(label <= stack->GetNprimary()) {
-         if(fAnalysisEtaMode)
+         if(fProtonAnalysisBase->GetEtaMode())
            ((TH2D *)(fEfficiencyList->At(7)))->Fill(particle->Eta(),
                                                     particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(7)))->Fill(Rapidity(particle->Px(),
+           ((TH2D *)(fEfficiencyList->At(7)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                              particle->Py(),
                                                              particle->Pz()),
                                                     particle->Pt());
@@ -3169,21 +3478,21 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
          if(motherParticle) motherPDGCode = motherParticle->GetPdgCode();
          
          if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
-           if(fAnalysisEtaMode)
+           if(fProtonAnalysisBase->GetEtaMode())
              ((TH2D *)(fEfficiencyList->At(9)))->Fill(particle->Eta(),
                                                       particle->Pt());
            else
-             ((TH2D *)(fEfficiencyList->At(9)))->Fill(Rapidity(particle->Px(),
+             ((TH2D *)(fEfficiencyList->At(9)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                                particle->Py(),
                                                                particle->Pz()),
                                                       particle->Pt());
          }//weak decays
          if((particle->GetUniqueID() == 13)) {
-           if(fAnalysisEtaMode)
+           if(fProtonAnalysisBase->GetEtaMode())
              ((TH2D *)(fEfficiencyList->At(11)))->Fill(particle->Eta(),
                                                        particle->Pt());
            else
-             ((TH2D *)(fEfficiencyList->At(11)))->Fill(Rapidity(particle->Px(),
+             ((TH2D *)(fEfficiencyList->At(11)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                                 particle->Py(),
                                                                 particle->Pz()),
                                                        particle->Pt());
@@ -3192,75 +3501,66 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
       }//initial antiprotons
       
       //pid
-      track->GetTPCpid(probability);
-      Double_t rcc = 0.0;
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++)
-       rcc += probability[i]*GetParticleFraction(i,P);
-      if(rcc == 0.0) continue;
-      Double_t w[5];
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++)
-       w[i] = probability[i]*GetParticleFraction(i,P)/rcc;
-      Long64_t fParticleType = TMath::LocMax(AliPID::kSPECIES,w);
-      if(fParticleType == 4) {
-       if(fAnalysisEtaMode)
+      if(fProtonAnalysisBase->IsProton(track)) {
+       if(fProtonAnalysisBase->GetEtaMode())
          ((TH2D *)(fEfficiencyList->At(14)))->Fill(particle->Eta(),
                                                    particle->Pt());
        else
-         ((TH2D *)(fEfficiencyList->At(14)))->Fill(Rapidity(particle->Px(),
+         ((TH2D *)(fEfficiencyList->At(14)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                             particle->Py(),
                                                             particle->Pz()),
                                                    particle->Pt());
        if(TMath::Abs(pdgcode) == 2212) {
-         if(fAnalysisEtaMode)
+         if(fProtonAnalysisBase->GetEtaMode())
            ((TH2D *)(fEfficiencyList->At(13)))->Fill(particle->Eta(),
                                                      particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(13)))->Fill(Rapidity(particle->Px(),
+           ((TH2D *)(fEfficiencyList->At(13)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                               particle->Py(),
                                                               particle->Pz()),
                                                      particle->Pt());
        }//properly identified as proton
        else {
-         if(fAnalysisEtaMode)
+         if(fProtonAnalysisBase->GetEtaMode())
            ((TH2D *)(fEfficiencyList->At(15)))->Fill(particle->Eta(),
                                                      particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(15)))->Fill(Rapidity(particle->Px(),
+           ((TH2D *)(fEfficiencyList->At(15)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                               particle->Py(),
                                                               particle->Pz()),
                                                      particle->Pt());
        }//contamination
       }//identified as proton
     }//TPC only tracks
-    else if(!fUseTPCOnly) {
+    else {
       if((particle->Pt() > fMaxPt)||(particle->Pt() < fMinPt)) continue;
-      if(fAnalysisEtaMode) {
+      if(fProtonAnalysisBase->GetEtaMode()) {
        if((particle->Eta() > fMaxY)|| (particle->Eta() < fMinY)) continue;
       }
       else {
-       if((Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
+       if((fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
       }
       
       if(fUseCutsInEfficiency) 
-       if(!IsAccepted(esd,vertex,track)) continue;
+       if(!fProtonAnalysisBase->IsAccepted(esd,vertex,track)) continue;
       
       //reconstructed primary (anti)protons
       if(pdgcode == 2212) {
-       if(fAnalysisEtaMode)
+       if(fProtonAnalysisBase->GetEtaMode())
          ((TH2D *)(fEfficiencyList->At(12)))->Fill(particle->Eta(),
                                                    particle->Pt());
        else
-         ((TH2D *)(fEfficiencyList->At(12)))->Fill(Rapidity(particle->Px(),
+         ((TH2D *)(fEfficiencyList->At(12)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                             particle->Py(),
                                                             particle->Pz()),
                                                    particle->Pt());
        if(label <= stack->GetNprimary()) {
          nESDProtons += 1;
-         if(fAnalysisEtaMode)
+         if(fProtonAnalysisBase->GetEtaMode())
            ((TH2D *)(fEfficiencyList->At(6)))->Fill(particle->Eta(),
                                                     particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(6)))->Fill(Rapidity(particle->Px(),
+           ((TH2D *)(fEfficiencyList->At(6)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                              particle->Py(),
                                                              particle->Pz()),
                                                     particle->Pt());
@@ -3273,21 +3573,21 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
          if(motherParticle) motherPDGCode = motherParticle->GetPdgCode();
          
          if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
-           if(fAnalysisEtaMode)
+           if(fProtonAnalysisBase->GetEtaMode())
              ((TH2D *)(fEfficiencyList->At(8)))->Fill(particle->Eta(),
                                                       particle->Pt());
            else
-             ((TH2D *)(fEfficiencyList->At(8)))->Fill(Rapidity(particle->Px(),
+             ((TH2D *)(fEfficiencyList->At(8)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                                particle->Py(),
                                                                particle->Pz()),
                                                       particle->Pt());
          }//weak decays
          if((particle->GetUniqueID() == 13)) {
-           if(fAnalysisEtaMode)
+           if(fProtonAnalysisBase->GetEtaMode())
              ((TH2D *)(fEfficiencyList->At(10)))->Fill(particle->Eta(),
                                                        particle->Pt());
            else
-             ((TH2D *)(fEfficiencyList->At(10)))->Fill(Rapidity(particle->Px(),
+             ((TH2D *)(fEfficiencyList->At(10)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                                 particle->Py(),
                                                                 particle->Pz()),
                                                        particle->Pt());
@@ -3295,20 +3595,20 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
        }//secondaries
       }//initial protons
       if(pdgcode == -2212) {   
-       if(fAnalysisEtaMode)
+       if(fProtonAnalysisBase->GetEtaMode())
          ((TH2D *)(fEfficiencyList->At(12)))->Fill(particle->Eta(),
                                                    particle->Pt());
        else
-         ((TH2D *)(fEfficiencyList->At(12)))->Fill(Rapidity(particle->Px(),
+         ((TH2D *)(fEfficiencyList->At(12)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                             particle->Py(),
                                                             particle->Pz()),
                                                    particle->Pt());
        if(label <= stack->GetNprimary()) {
-         if(fAnalysisEtaMode)
+         if(fProtonAnalysisBase->GetEtaMode())
            ((TH2D *)(fEfficiencyList->At(7)))->Fill(particle->Eta(),
                                                     particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(7)))->Fill(Rapidity(particle->Px(),
+           ((TH2D *)(fEfficiencyList->At(7)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                              particle->Py(),
                                                              particle->Pz()),
                                                     particle->Pt());
@@ -3321,21 +3621,21 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
          if(motherParticle) motherPDGCode = motherParticle->GetPdgCode();
          
          if((particle->GetUniqueID() == 4)&&(TMath::Abs(motherPDGCode) == 3122)) {
-           if(fAnalysisEtaMode)
+           if(fProtonAnalysisBase->GetEtaMode())
              ((TH2D *)(fEfficiencyList->At(9)))->Fill(particle->Eta(),
                                                       particle->Pt());
            else
-             ((TH2D *)(fEfficiencyList->At(9)))->Fill(Rapidity(particle->Px(),
+             ((TH2D *)(fEfficiencyList->At(9)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                                particle->Py(),
                                                                particle->Pz()),
                                                       particle->Pt());
          }//weak decays
          if((particle->GetUniqueID() == 13)) {
-           if(fAnalysisEtaMode)
+           if(fProtonAnalysisBase->GetEtaMode())
              ((TH2D *)(fEfficiencyList->At(11)))->Fill(particle->Eta(),
                                                        particle->Pt());
            else
-             ((TH2D *)(fEfficiencyList->At(11)))->Fill(Rapidity(particle->Px(),
+             ((TH2D *)(fEfficiencyList->At(11)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                                 particle->Py(),
                                                                 particle->Pz()),
                                                        particle->Pt());
@@ -3344,39 +3644,30 @@ void AliProtonQAAnalysis::RunEfficiencyAnalysis(AliStack *stack,
       }//initial antiprotons
       
       //pid
-      track->GetESDpid(probability);
-      Double_t rcc = 0.0;
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++)
-       rcc += probability[i]*GetParticleFraction(i,P);
-      if(rcc == 0.0) continue;
-      Double_t w[5];
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++)
-       w[i] = probability[i]*GetParticleFraction(i,P)/rcc;
-      Long64_t fParticleType = TMath::LocMax(AliPID::kSPECIES,w);
-      if(fParticleType == 4) {
-       if(fAnalysisEtaMode)
+      if(fProtonAnalysisBase->IsProton(track)) {
+       if(fProtonAnalysisBase->GetEtaMode())
          ((TH2D *)(fEfficiencyList->At(14)))->Fill(particle->Eta(),
                                                    particle->Pt());
-       else ((TH2D *)(fEfficiencyList->At(14)))->Fill(Rapidity(particle->Px(),
+       else ((TH2D *)(fEfficiencyList->At(14)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                                particle->Py(),
                                                                particle->Pz()),
                                                       particle->Pt());
        if(TMath::Abs(pdgcode) == 2212) {
-         if(fAnalysisEtaMode)
+         if(fProtonAnalysisBase->GetEtaMode())
            ((TH2D *)(fEfficiencyList->At(13)))->Fill(particle->Eta(),
                                                      particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(13)))->Fill(Rapidity(particle->Px(),
+           ((TH2D *)(fEfficiencyList->At(13)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                               particle->Py(),
                                                               particle->Pz()),
                                                      particle->Pt());
        }//properly identified as proton
        else {
-         if(fAnalysisEtaMode)
+         if(fProtonAnalysisBase->GetEtaMode())
            ((TH2D *)(fEfficiencyList->At(15)))->Fill(particle->Eta(),
                                                      particle->Pt());
          else
-           ((TH2D *)(fEfficiencyList->At(15)))->Fill(Rapidity(particle->Px(),
+           ((TH2D *)(fEfficiencyList->At(15)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                               particle->Py(),
                                                               particle->Pz()),
                                                      particle->Pt());
@@ -3403,15 +3694,15 @@ Bool_t AliProtonQAAnalysis::IsLabelUsed(TArrayI labelArray,
 
 //____________________________________________________________________//
 void AliProtonQAAnalysis::RunVertexQA(AliGenEventHeader *header,
-                                     AliStack *stack, 
-                                     AliESDEvent *esd) {
+                                     AliStack *const stack, 
+                                     AliESDEvent *const esd) {
   //Runs the vertex QA
   //MC vertex
   TArrayF primaryVertex(3);
   header->PrimaryVertex(primaryVertex);
 
-  Int_t nPrimaries = stack->GetNprimary();
-  ((TH1F *)(fQAVertexList->At(0)))->Fill(nPrimaries);
+  //Int_t nPrimaries = stack->GetNprimary();
+  ((TH1F *)(fQAVertexList->At(0)))->Fill(primaryVertex[2]);
 
   //TPC vertex
   const AliESDVertex *vertexTPC = esd->GetPrimaryVertexTPC();
@@ -3420,7 +3711,7 @@ void AliProtonQAAnalysis::RunVertexQA(AliGenEventHeader *header,
     return;
   }
   if(vertexTPC->GetNContributors() > 0) {
-    ((TH1F *)(fQAVertexList->At(1)))->Fill(nPrimaries);
+    ((TH1F *)(fQAVertexList->At(1)))->Fill(primaryVertex[2]);
     ((TH2F *)(fQAVertexList->At(2)))->Fill(vertexTPC->GetXv(),
                                           vertexTPC->GetNContributors());
     ((TH2F *)(fQAVertexList->At(3)))->Fill(vertexTPC->GetYv(),
@@ -3442,7 +3733,7 @@ void AliProtonQAAnalysis::RunVertexQA(AliGenEventHeader *header,
     return;
   }
   if(vertexSPD->GetNContributors() > 0) {
-    ((TH1F *)(fQAVertexList->At(11)))->Fill(nPrimaries);
+    ((TH1F *)(fQAVertexList->At(11)))->Fill(primaryVertex[2]);
     ((TH2F *)(fQAVertexList->At(12)))->Fill(vertexSPD->GetXv(),
                                            vertexSPD->GetNContributors());
     ((TH2F *)(fQAVertexList->At(13)))->Fill(vertexSPD->GetYv(),
@@ -3464,7 +3755,7 @@ void AliProtonQAAnalysis::RunVertexQA(AliGenEventHeader *header,
     return;
   }
   if(vertexTracks->GetNContributors() > 0) {
-    ((TH1F *)(fQAVertexList->At(21)))->Fill(nPrimaries);
+    ((TH1F *)(fQAVertexList->At(21)))->Fill(primaryVertex[2]);
     ((TH2F *)(fQAVertexList->At(22)))->Fill(vertexTracks->GetXv(),
                                            vertexTracks->GetNContributors());
     ((TH2F *)(fQAVertexList->At(23)))->Fill(vertexTracks->GetYv(),
@@ -3493,29 +3784,29 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
 
     if(TMath::Abs(particle->Eta()) > 1.0) continue;//acceptance
     if((particle->Pt() > fMaxPt)||(particle->Pt() < fMinPt)) continue;
-    if(fAnalysisEtaMode) {
+    if(fProtonAnalysisBase->GetEtaMode()) {
       if((particle->Eta() > fMaxY)||(particle->Eta() < fMinY)) continue;
     }
     else {
-      if((Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
+      if((fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
     }
     Int_t pdgcode = particle->GetPdgCode();
     if(pdgcode == 2212) {
-      if(fAnalysisEtaMode)
+      if(fProtonAnalysisBase->GetEtaMode())
        ((TH2D *)(fQA2DList->At(8)))->Fill(particle->Eta(),
                                           particle->Pt());
       else
-       ((TH2D *)(fQA2DList->At(8)))->Fill(Rapidity(particle->Px(),
+       ((TH2D *)(fQA2DList->At(8)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                    particle->Py(),
                                                    particle->Pz()),
                                           particle->Pt());
     }
     if(pdgcode == -2212) {
-      if(fAnalysisEtaMode)
+      if(fProtonAnalysisBase->GetEtaMode())
        ((TH2D *)(fQA2DList->At(9)))->Fill(particle->Eta(),
                                           particle->Pt());
       else
-       ((TH2D *)(fQA2DList->At(9)))->Fill(Rapidity(particle->Px(),
+       ((TH2D *)(fQA2DList->At(9)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                    particle->Py(),
                                                    particle->Pz()),
                                           particle->Pt());
@@ -3542,7 +3833,8 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
     AliESDtrack trackTPC;
     
     //in case it's a TPC only track relate it to the proper vertex
-    if((fUseTPCOnly)&&(!fUseHybridTPC)) {
+    if((fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kTPC)&&(!fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kHybrid)) {
+      //if((fUseTPCOnly)&&(!fUseHybridTPC)) {
       Float_t p[2],cov[3];
       track->GetImpactParametersTPC(p,cov);
       if (p[0]==0 && p[1]==0)  
@@ -3553,10 +3845,10 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
       track = &trackTPC ;
     }
     
-    Double_t Pt = 0.0, P = 0.0;
-    Double_t probability[5];
+    Double_t gPt = 0.0, gP = 0.0;
+    //Double_t probability[5];
     Float_t dcaXY = 0.0, dcaZ = 0.0;
-    Double_t nSigmaToVertex = GetSigmaToVertex(track);
+    Double_t nSigmaToVertex = fProtonAnalysisBase->GetSigmaToVertex(track);
     Int_t  fIdxInt[200];
     Int_t nClustersITS = track->GetITSclusters(fIdxInt);
     Int_t nClustersTPC = track->GetTPCclusters(fIdxInt);
@@ -3570,31 +3862,24 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
     Double_t chi2ConstrainVertex = TMath::Log(track->GetConstrainedChi2());    
     Double_t extCov[15];
     track->GetExternalCovariance(extCov);
-    
+    Int_t npointsTPCdEdx = track->GetTPCsignalN();
+
     //TPC only
-    if(fUseTPCOnly) {
+    if((fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kTPC)||(fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kHybrid)) {
       AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
       if(!tpcTrack) continue;
-      Pt = tpcTrack->Pt();
-      P = tpcTrack->P();
-      if(fUseHybridTPC) track->GetImpactParameters(dcaXY,dcaZ);
+      gPt = tpcTrack->Pt();
+      gP = tpcTrack->P();
+      if(fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kHybrid)
+       track->GetImpactParameters(dcaXY,dcaZ);
       else track->GetImpactParametersTPC(dcaXY,dcaZ);
       
       //pid
-      track->GetTPCpid(probability);
-      Double_t rcc = 0.0;
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++)
-       rcc += probability[i]*GetParticleFraction(i,P);
-      if(rcc == 0.0) continue;
-      Double_t w[5];
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++)
-       w[i] = probability[i]*GetParticleFraction(i,P)/rcc;
-      Long64_t fParticleType = TMath::LocMax(AliPID::kSPECIES,w);
-      if(fParticleType == 4) {
-       if(!IsInPhaseSpace(track)) continue; //track outside the analyzed y-Pt
+      if(fProtonAnalysisBase->IsProton(track)) {
+       if(!fProtonAnalysisBase->IsInPhaseSpace(track)) continue; //track outside the analyzed y-Pt
 
        FillQA(stack,esd,vertex,track);
-       if(IsAccepted(esd,vertex,track)) {
+       if(fProtonAnalysisBase->IsAccepted(esd,vertex,track)) {
          if(label <= stack->GetNprimary()) {
            if(track->Charge() > 0) {
              for(Int_t iLayer = 0; iLayer < 6; iLayer++) {
@@ -3614,17 +3899,24 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
              ((TH3D *)(fAcceptedCutList->At(44)))->Fill(tpcTrack->Eta(),
                                                         tpcTrack->Phi()*180./TMath::Pi(),
                                                         nClustersTPC);
+             ((TH3D *)(fAcceptedCutList->At(48)))->Fill(tpcTrack->Eta(),
+                                                        tpcTrack->Phi()*180./TMath::Pi(),
+                                                        chi2PerClusterTPC);
+             ((TH3D *)(fAcceptedCutList->At(52)))->Fill(tpcTrack->Eta(),
+                                                        tpcTrack->Phi()*180./TMath::Pi(),
+                                                        npointsTPCdEdx);
+             ((TH1D *)(fAcceptedCutList->At(56)))->Fill(npointsTPCdEdx);
              
              ((TH1F *)(fAcceptedDCAList->At(0)))->Fill(TMath::Abs(dcaXY));
              ((TH1F *)(fAcceptedDCAList->At(4)))->Fill(TMath::Abs(dcaZ));
              ((TH1F *)(fAcceptedDCAList->At(8)))->Fill(nSigmaToVertex);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(0)))->Fill(tpcTrack->Eta(),Pt);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(0)))->Fill(tpcTrack->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(0)))->Fill(Rapidity(tpcTrack->Px(),
+               ((TH2D *)(fQA2DList->At(0)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
                                                            tpcTrack->Py(),
                                                            tpcTrack->Pz()),
-                                                  Pt);
+                                                  gPt);
            }//accepted primary protons
            else if(track->Charge() < 0) {
              for(Int_t iLayer = 0; iLayer < 6; iLayer++) {
@@ -3644,17 +3936,24 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
              ((TH3D *)(fAcceptedCutList->At(45)))->Fill(tpcTrack->Eta(),
                                                         tpcTrack->Phi()*180./TMath::Pi(),
                                                         nClustersTPC);
+             ((TH3D *)(fAcceptedCutList->At(49)))->Fill(tpcTrack->Eta(),
+                                                        tpcTrack->Phi()*180./TMath::Pi(),
+                                                        chi2PerClusterTPC);
+             ((TH3D *)(fAcceptedCutList->At(53)))->Fill(tpcTrack->Eta(),
+                                                        tpcTrack->Phi()*180./TMath::Pi(),
+                                                        npointsTPCdEdx);
+             ((TH1D *)(fAcceptedCutList->At(57)))->Fill(npointsTPCdEdx);
              
              ((TH1F *)(fAcceptedDCAList->At(1)))->Fill(TMath::Abs(dcaXY));
              ((TH1F *)(fAcceptedDCAList->At(5)))->Fill(TMath::Abs(dcaZ));
              ((TH1F *)(fAcceptedDCAList->At(9)))->Fill(nSigmaToVertex);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(4)))->Fill(tpcTrack->Eta(),Pt);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(4)))->Fill(tpcTrack->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(4)))->Fill(Rapidity(tpcTrack->Px(),
+               ((TH2D *)(fQA2DList->At(4)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
                                                            tpcTrack->Py(),
                                                            tpcTrack->Pz()),
-                                                  Pt);
+                                                  gPt);
            }//accepted primary antiprotons
          }//accepted primary particles
          else if(label > stack->GetNprimary()) {
@@ -3689,25 +3988,32 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
              ((TH3D *)(fAcceptedCutList->At(46)))->Fill(tpcTrack->Eta(),
                                                         tpcTrack->Phi()*180./TMath::Pi(),
                                                         nClustersTPC);
-             
+             ((TH3D *)(fAcceptedCutList->At(50)))->Fill(tpcTrack->Eta(),
+                                                        tpcTrack->Phi()*180./TMath::Pi(),
+                                                        chi2PerClusterTPC);
+             ((TH3D *)(fAcceptedCutList->At(54)))->Fill(tpcTrack->Eta(),
+                                                        tpcTrack->Phi()*180./TMath::Pi(),
+                                                        npointsTPCdEdx);
+             ((TH1D *)(fAcceptedCutList->At(58)))->Fill(npointsTPCdEdx);
+
              ((TH1F *)(fAcceptedDCAList->At(2)))->Fill(TMath::Abs(dcaXY));
              ((TH1F *)(fAcceptedDCAList->At(6)))->Fill(TMath::Abs(dcaZ));
              ((TH1F *)(fAcceptedDCAList->At(10)))->Fill(nSigmaToVertex);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(2)))->Fill(tpcTrack->Eta(),Pt);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(2)))->Fill(tpcTrack->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(2)))->Fill(Rapidity(tpcTrack->Px(),
+               ((TH2D *)(fQA2DList->At(2)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
                                                            tpcTrack->Py(),
                                                            tpcTrack->Pz()),
-                                                  Pt);
-             if(fAnalysisEtaMode)
-             ((TH3F *)(fQA2DList->At(10)))->Fill(tpcTrack->Eta(),Pt,
+                                                  gPt);
+             if(fProtonAnalysisBase->GetEtaMode())
+             ((TH3F *)(fQA2DList->At(10)))->Fill(tpcTrack->Eta(),gPt,
                                                  ConvertPDGToInt(motherPDGCode));
              else
-               ((TH3F *)(fQA2DList->At(10)))->Fill(Rapidity(tpcTrack->Px(),
+               ((TH3F *)(fQA2DList->At(10)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
                                                             tpcTrack->Py(),
                                                             tpcTrack->Pz()),
-                                                   Pt,
+                                                   gPt,
                                                    ConvertPDGToInt(motherPDGCode));
            }//accepted secondary protons
            else if(track->Charge() < 0) {
@@ -3728,25 +4034,32 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
              ((TH3D *)(fAcceptedCutList->At(47)))->Fill(tpcTrack->Eta(),
                                                         tpcTrack->Phi()*180./TMath::Pi(),
                                                         nClustersTPC);
-             
+             ((TH3D *)(fAcceptedCutList->At(51)))->Fill(tpcTrack->Eta(),
+                                                        tpcTrack->Phi()*180./TMath::Pi(),
+                                                        chi2PerClusterTPC);
+             ((TH3D *)(fAcceptedCutList->At(55)))->Fill(tpcTrack->Eta(),
+                                                        tpcTrack->Phi()*180./TMath::Pi(),
+                                                        npointsTPCdEdx);
+             ((TH1F *)(fAcceptedCutList->At(59)))->Fill(npointsTPCdEdx);
+
              ((TH1F *)(fAcceptedDCAList->At(3)))->Fill(TMath::Abs(dcaXY));
              ((TH1F *)(fAcceptedDCAList->At(7)))->Fill(TMath::Abs(dcaZ));
              ((TH1F *)(fAcceptedDCAList->At(11)))->Fill(nSigmaToVertex);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(6)))->Fill(tpcTrack->Eta(),Pt);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(6)))->Fill(tpcTrack->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(6)))->Fill(Rapidity(tpcTrack->Px(),
+               ((TH2D *)(fQA2DList->At(6)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
                                                            tpcTrack->Py(),
                                                            tpcTrack->Pz()),
-                                                  Pt);
-             if(fAnalysisEtaMode)
-               ((TH3F *)(fQA2DList->At(11)))->Fill(tpcTrack->Eta(),Pt,
+                                                  gPt);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH3F *)(fQA2DList->At(11)))->Fill(tpcTrack->Eta(),gPt,
                                                    ConvertPDGToInt(motherPDGCode));
              else
-               ((TH3F *)(fQA2DList->At(11)))->Fill(Rapidity(tpcTrack->Px(),
+               ((TH3F *)(fQA2DList->At(11)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
                                                             tpcTrack->Py(),
                                                             tpcTrack->Pz()),
-                                                   Pt,
+                                                   gPt,
                                                    ConvertPDGToInt(motherPDGCode));
            }//accepted secondary antiprotons
          }//accepted secondary particles
@@ -3757,25 +4070,38 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
              ((TH3D *)(fRejectedCutList->At(0)))->Fill(tpcTrack->Eta(),
                                                        tpcTrack->Phi()*180./TMath::Pi(),
                                                        nClustersTPC);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(1)))->Fill(tpcTrack->Eta(),Pt);
+             ((TH3D *)(fRejectedCutList->At(4)))->Fill(tpcTrack->Eta(),
+                                                       tpcTrack->Phi()*180./TMath::Pi(),
+                                                       chi2PerClusterTPC);
+             ((TH3D *)(fRejectedCutList->At(8)))->Fill(tpcTrack->Eta(),
+                                                       tpcTrack->Phi()*180./TMath::Pi(),
+                                                       npointsTPCdEdx);
+
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(1)))->Fill(tpcTrack->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(1)))->Fill(Rapidity(tpcTrack->Px(),
+               ((TH2D *)(fQA2DList->At(1)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
                                                            tpcTrack->Py(),
                                                            tpcTrack->Pz()),
-                                                  Pt);
+                                                  gPt);
            }
            else if(track->Charge() < 0) {
              ((TH3D *)(fRejectedCutList->At(1)))->Fill(tpcTrack->Eta(),
                                                        tpcTrack->Phi()*180./TMath::Pi(),
                                                        nClustersTPC);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(5)))->Fill(tpcTrack->Eta(),Pt);
+             ((TH3D *)(fRejectedCutList->At(5)))->Fill(tpcTrack->Eta(),
+                                                       tpcTrack->Phi()*180./TMath::Pi(),
+                                                       chi2PerClusterTPC);
+             ((TH3D *)(fRejectedCutList->At(9)))->Fill(tpcTrack->Eta(),
+                                                       tpcTrack->Phi()*180./TMath::Pi(),
+                                                       npointsTPCdEdx);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(5)))->Fill(tpcTrack->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(5)))->Fill(Rapidity(tpcTrack->Px(),
+               ((TH2D *)(fQA2DList->At(5)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
                                                            tpcTrack->Py(),
                                                            tpcTrack->Pz()),
-                                                  Pt);
+                                                  gPt);
            }
          }//rejected primary particles
          else if(label > stack->GetNprimary()) {
@@ -3783,51 +4109,55 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
              ((TH3D *)(fRejectedCutList->At(2)))->Fill(tpcTrack->Eta(),
                                                        tpcTrack->Phi()*180./TMath::Pi(),
                                                        nClustersTPC);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(3)))->Fill(tpcTrack->Eta(),Pt);
+             ((TH3D *)(fRejectedCutList->At(6)))->Fill(tpcTrack->Eta(),
+                                                       tpcTrack->Phi()*180./TMath::Pi(),
+                                                       chi2PerClusterTPC);
+             ((TH3D *)(fRejectedCutList->At(10)))->Fill(tpcTrack->Eta(),
+                                                        tpcTrack->Phi()*180./TMath::Pi(),
+                                                        npointsTPCdEdx);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(3)))->Fill(tpcTrack->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(3)))->Fill(Rapidity(tpcTrack->Px(),
+               ((TH2D *)(fQA2DList->At(3)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
                                                            tpcTrack->Py(),
                                                            tpcTrack->Pz()),
-                                                  Pt);
+                                                  gPt);
            }
            else if(track->Charge() < 0) {
              ((TH3D *)(fRejectedCutList->At(3)))->Fill(tpcTrack->Eta(),
                                                        tpcTrack->Phi()*180./TMath::Pi(),
                                                        nClustersTPC);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(7)))->Fill(tpcTrack->Eta(),Pt);
+             ((TH3D *)(fRejectedCutList->At(7)))->Fill(tpcTrack->Eta(),
+                                                       tpcTrack->Phi()*180./TMath::Pi(),
+                                                       chi2PerClusterTPC);
+             ((TH3D *)(fRejectedCutList->At(11)))->Fill(tpcTrack->Eta(),
+                                                        tpcTrack->Phi()*180./TMath::Pi(),
+                                                        npointsTPCdEdx);
+
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(7)))->Fill(tpcTrack->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(7)))->Fill(Rapidity(tpcTrack->Px(),
+               ((TH2D *)(fQA2DList->At(7)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
                                                            tpcTrack->Py(),
                                                            tpcTrack->Pz()),
-                                                  Pt);
+                                                  gPt);
            }
          }//rejected secondary particles
        }//rejected - track cuts
       }//proton check
     }//TPC only tracks
     //combined tracking
-    else if(!fUseTPCOnly) {
-      Pt = track->Pt();
-      P = track->P();
+    else {
+      gPt = track->Pt();
+      gP = track->P();
       track->GetImpactParameters(dcaXY,dcaZ);
       
       //pid
-      track->GetESDpid(probability);
-      Double_t rcc = 0.0;
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++)
-       rcc += probability[i]*GetParticleFraction(i,P);
-      if(rcc == 0.0) continue;
-      Double_t w[5];
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++)
-       w[i] = probability[i]*GetParticleFraction(i,P)/rcc;
-      Long64_t fParticleType = TMath::LocMax(AliPID::kSPECIES,w);
-      if(fParticleType == 4) {
-       if(!IsInPhaseSpace(track)) continue; //track outside the analyzed y-Pt
+      if(fProtonAnalysisBase->IsProton(track)) {
+       if(!fProtonAnalysisBase->IsInPhaseSpace(track)) continue; //track outside the analyzed y-Pt
 
        FillQA(stack,esd,vertex,track);
-       if(IsAccepted(esd,vertex,track)) {
+       if(fProtonAnalysisBase->IsAccepted(esd,vertex,track)) {
          if(label <= stack->GetNprimary()) {
            if(track->Charge() > 0) {
              for(Int_t iLayer = 0; iLayer < 6; iLayer++) {
@@ -3847,17 +4177,24 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
              ((TH3D *)(fAcceptedCutList->At(44)))->Fill(track->Eta(),
                                                         track->Phi()*180./TMath::Pi(),
                                                         nClustersTPC);
+             ((TH3D *)(fAcceptedCutList->At(48)))->Fill(track->Eta(),
+                                                        track->Phi()*180./TMath::Pi(),
+                                                        chi2PerClusterTPC);
+             ((TH3D *)(fAcceptedCutList->At(52)))->Fill(track->Eta(),
+                                                        track->Phi()*180./TMath::Pi(),
+                                                        npointsTPCdEdx);
+             ((TH1F *)(fAcceptedCutList->At(56)))->Fill(npointsTPCdEdx);
              
              ((TH1F *)(fAcceptedDCAList->At(0)))->Fill(TMath::Abs(dcaXY));
              ((TH1F *)(fAcceptedDCAList->At(4)))->Fill(TMath::Abs(dcaZ));
              ((TH1F *)(fAcceptedDCAList->At(8)))->Fill(nSigmaToVertex);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(0)))->Fill(track->Eta(),Pt);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(0)))->Fill(track->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(0)))->Fill(Rapidity(track->Px(),
+               ((TH2D *)(fQA2DList->At(0)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),
                                                            track->Py(),
                                                            track->Pz()),
-                                                  Pt);
+                                                  gPt);
            }
            else if(track->Charge() < 0) {
              for(Int_t iLayer = 0; iLayer < 6; iLayer++) {
@@ -3877,17 +4214,24 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
              ((TH3D *)(fAcceptedCutList->At(45)))->Fill(track->Eta(),
                                                         track->Phi()*180./TMath::Pi(),
                                                         nClustersTPC);
+             ((TH3D *)(fAcceptedCutList->At(49)))->Fill(track->Eta(),
+                                                        track->Phi()*180./TMath::Pi(),
+                                                        chi2PerClusterTPC);
+             ((TH3D *)(fAcceptedCutList->At(53)))->Fill(track->Eta(),
+                                                        track->Phi()*180./TMath::Pi(),
+                                                        npointsTPCdEdx);
+             ((TH1F *)(fAcceptedCutList->At(57)))->Fill(npointsTPCdEdx);
              
              ((TH1F *)(fAcceptedDCAList->At(1)))->Fill(TMath::Abs(dcaXY));
              ((TH1F *)(fAcceptedDCAList->At(5)))->Fill(TMath::Abs(dcaZ));
              ((TH1F *)(fAcceptedDCAList->At(9)))->Fill(nSigmaToVertex);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(4)))->Fill(track->Eta(),Pt);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(4)))->Fill(track->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(4)))->Fill(Rapidity(track->Px(),
+               ((TH2D *)(fQA2DList->At(4)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),
                                                            track->Py(),
                                                            track->Pz()),
-                                                  Pt);
+                                                  gPt);
            }
          }//primary particles
          else if(label > stack->GetNprimary()) {
@@ -3922,25 +4266,32 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
              ((TH3D *)(fAcceptedCutList->At(46)))->Fill(track->Eta(),
                                                         track->Phi()*180./TMath::Pi(),
                                                         nClustersTPC);
+             ((TH3D *)(fAcceptedCutList->At(50)))->Fill(track->Eta(),
+                                                        track->Phi()*180./TMath::Pi(),
+                                                        chi2PerClusterTPC);
+             ((TH3D *)(fAcceptedCutList->At(54)))->Fill(track->Eta(),
+                                                        track->Phi()*180./TMath::Pi(),
+                                                        npointsTPCdEdx);
+             ((TH1F *)(fAcceptedCutList->At(58)))->Fill(npointsTPCdEdx);
              
              ((TH1F *)(fAcceptedDCAList->At(2)))->Fill(TMath::Abs(dcaXY));
              ((TH1F *)(fAcceptedDCAList->At(6)))->Fill(TMath::Abs(dcaZ));
              ((TH1F *)(fAcceptedDCAList->At(10)))->Fill(nSigmaToVertex);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(2)))->Fill(track->Eta(),Pt);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(2)))->Fill(track->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(2)))->Fill(Rapidity(track->Px(),
+               ((TH2D *)(fQA2DList->At(2)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),
                                                            track->Py(),
                                                            track->Pz()),
-                                                  Pt);
-             if(fAnalysisEtaMode)
-               ((TH3F *)(fQA2DList->At(10)))->Fill(track->Eta(),Pt,
+                                                  gPt);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH3F *)(fQA2DList->At(10)))->Fill(track->Eta(),gPt,
                                                    ConvertPDGToInt(motherPDGCode));
              else
-               ((TH3F *)(fQA2DList->At(10)))->Fill(Rapidity(track->Px(),
+               ((TH3F *)(fQA2DList->At(10)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),
                                                             track->Py(),
                                                             track->Pz()),
-                                                   Pt,
+                                                   gPt,
                                                    ConvertPDGToInt(motherPDGCode));
            }
            else if(track->Charge() < 0) {
@@ -3961,54 +4312,74 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
              ((TH3D *)(fAcceptedCutList->At(47)))->Fill(track->Eta(),
                                                         track->Phi()*180./TMath::Pi(),
                                                         nClustersTPC);
+             ((TH3D *)(fAcceptedCutList->At(51)))->Fill(track->Eta(),
+                                                        track->Phi()*180./TMath::Pi(),
+                                                        chi2PerClusterTPC);
+             ((TH3D *)(fAcceptedCutList->At(55)))->Fill(track->Eta(),
+                                                        track->Phi()*180./TMath::Pi(),
+                                                        npointsTPCdEdx);
+             ((TH1F *)(fAcceptedCutList->At(59)))->Fill(npointsTPCdEdx);
              
              ((TH1F *)(fAcceptedDCAList->At(3)))->Fill(TMath::Abs(dcaXY));
              ((TH1F *)(fAcceptedDCAList->At(7)))->Fill(TMath::Abs(dcaZ));
              ((TH1F *)(fAcceptedDCAList->At(11)))->Fill(nSigmaToVertex);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(6)))->Fill(track->Eta(),Pt);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(6)))->Fill(track->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(6)))->Fill(Rapidity(track->Px(),
+               ((TH2D *)(fQA2DList->At(6)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),
                                                            track->Py(),
                                                            track->Pz()),
-                                                  Pt);
-             if(fAnalysisEtaMode)
-               ((TH3F *)(fQA2DList->At(11)))->Fill(track->Eta(),Pt,
+                                                  gPt);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH3F *)(fQA2DList->At(11)))->Fill(track->Eta(),gPt,
                                                    ConvertPDGToInt(motherPDGCode));
              else
-               ((TH3F *)(fQA2DList->At(11)))->Fill(Rapidity(track->Px(),
+               ((TH3F *)(fQA2DList->At(11)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),
                                                             track->Py(),
                                                             track->Pz()),
-                                                   Pt,
+                                                   gPt,
                                                    ConvertPDGToInt(motherPDGCode));
            }
          }//secondary particles
        }//accepted - track cuts
-       else if(!IsAccepted(esd,vertex,track)) {
+       else if(!fProtonAnalysisBase->IsAccepted(esd,vertex,track)) {
          if(label <= stack->GetNprimary()) {
            if(track->Charge() > 0) {
              ((TH3D *)(fRejectedCutList->At(0)))->Fill(track->Eta(),
                                                        track->Phi()*180./TMath::Pi(),
                                                        nClustersTPC);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(1)))->Fill(track->Eta(),Pt);
+             ((TH3D *)(fRejectedCutList->At(4)))->Fill(track->Eta(),
+                                                       track->Phi()*180./TMath::Pi(),
+                                                       chi2PerClusterTPC);
+             ((TH3D *)(fRejectedCutList->At(8)))->Fill(track->Eta(),
+                                                       track->Phi()*180./TMath::Pi(),
+                                                       npointsTPCdEdx);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(1)))->Fill(track->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(1)))->Fill(Rapidity(track->Px(),
+               ((TH2D *)(fQA2DList->At(1)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),
                                                            track->Py(),
                                                            track->Pz()),
-                                                  Pt);
+                                                  gPt);
            }
            else if(track->Charge() < 0) {
              ((TH3D *)(fRejectedCutList->At(1)))->Fill(track->Eta(),
                                                        track->Phi()*180./TMath::Pi(),
                                                        nClustersTPC);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(5)))->Fill(track->Eta(),Pt);
+             ((TH3D *)(fRejectedCutList->At(5)))->Fill(track->Eta(),
+                                                       track->Phi()*180./TMath::Pi(),
+                                                       chi2PerClusterTPC);
+             ((TH3D *)(fRejectedCutList->At(9)))->Fill(track->Eta(),
+                                                       track->Phi()*180./TMath::Pi(),
+                                                       npointsTPCdEdx);
+                                               
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(5)))->Fill(track->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(5)))->Fill(Rapidity(track->Px(),
+               ((TH2D *)(fQA2DList->At(5)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),
                                                            track->Py(),
                                                            track->Pz()),
-                                                  Pt);
+                                                  gPt);
            }
          }//primary particles
          else if(label > stack->GetNprimary()) {
@@ -4016,25 +4387,37 @@ void AliProtonQAAnalysis::RunQAAnalysis(AliStack *stack,
              ((TH3D *)(fRejectedCutList->At(2)))->Fill(track->Eta(),
                                                        track->Phi()*180./TMath::Pi(),
                                                        nClustersTPC);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(3)))->Fill(track->Eta(),Pt);
+             ((TH3D *)(fRejectedCutList->At(6)))->Fill(track->Eta(),
+                                                       track->Phi()*180./TMath::Pi(),
+                                                       chi2PerClusterTPC);
+             ((TH3D *)(fRejectedCutList->At(10)))->Fill(track->Eta(),
+                                                       track->Phi()*180./TMath::Pi(),
+                                                       npointsTPCdEdx);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(3)))->Fill(track->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(3)))->Fill(Rapidity(track->Px(),
+               ((TH2D *)(fQA2DList->At(3)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),
                                                            track->Py(),
                                                            track->Pz()),
-                                                  Pt);
+                                                  gPt);
            }
            else if(track->Charge() < 0) {
              ((TH3D *)(fRejectedCutList->At(3)))->Fill(track->Eta(),
                                                        track->Phi()*180./TMath::Pi(),
                                                        nClustersTPC);
-             if(fAnalysisEtaMode)
-               ((TH2D *)(fQA2DList->At(7)))->Fill(track->Eta(),Pt);
+             ((TH3D *)(fRejectedCutList->At(7)))->Fill(track->Eta(),
+                                                       track->Phi()*180./TMath::Pi(),
+                                                       chi2PerClusterTPC);
+             ((TH3D *)(fRejectedCutList->At(11)))->Fill(track->Eta(),
+                                                       track->Phi()*180./TMath::Pi(),
+                                                       npointsTPCdEdx);
+             if(fProtonAnalysisBase->GetEtaMode())
+               ((TH2D *)(fQA2DList->At(7)))->Fill(track->Eta(),gPt);
              else
-               ((TH2D *)(fQA2DList->At(7)))->Fill(Rapidity(track->Px(),
+               ((TH2D *)(fQA2DList->At(7)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),
                                                            track->Py(),
                                                            track->Pz()),
-                                                  Pt);
+                                                  gPt);
            }
          }//secondary particles
        }//rejected - track cuts
@@ -4053,7 +4436,7 @@ void AliProtonQAAnalysis::InitMCAnalysis() {
                                      fNBinsY,fMinY,fMaxY,
                                      fNBinsPt,fMinPt,fMaxPt,
                                      14,-0.5,13.5);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtPDGProtons->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtPDGProtons->GetXaxis()->SetTitle("y");
@@ -4063,7 +4446,7 @@ void AliProtonQAAnalysis::InitMCAnalysis() {
                                          fNBinsY,fMinY,fMaxY,
                                          fNBinsPt,fMinPt,fMaxPt,
                                          14,-0.5,13.5);
-  if(fAnalysisEtaMode
+  if(fProtonAnalysisBase->GetEtaMode()
     gHistYPtPDGAntiProtons->GetXaxis()->SetTitle("#eta");
   else 
     gHistYPtPDGAntiProtons->GetXaxis()->SetTitle("y");
@@ -4115,7 +4498,7 @@ void AliProtonQAAnalysis::InitMCAnalysis() {
 }
 
 //____________________________________________________________________//
-void AliProtonQAAnalysis::RunMCAnalysis(AliStack* stack) {
+void AliProtonQAAnalysis::RunMCAnalysis(AliStack* const stack) {
   //Main analysis part - MC 
   for(Int_t iParticle = 0; iParticle < stack->GetNtrack(); iParticle++) {
     TParticle *particle = stack->Particle(iParticle);
@@ -4123,20 +4506,20 @@ void AliProtonQAAnalysis::RunMCAnalysis(AliStack* stack) {
 
     if(TMath::Abs(particle->Eta()) > 1.0) continue;//acceptance
     if((particle->Pt() > fMaxPt)||(particle->Pt() < fMinPt)) continue;
-    if(fAnalysisEtaMode) {
+    if(fProtonAnalysisBase->GetEtaMode()) {
       if((particle->Eta() > fMaxY)||(particle->Eta() < fMinY)) continue;
     }
     else {
-      if((Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
+      if((fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) > fMaxY)||(fProtonAnalysisBase->Rapidity(particle->Px(),particle->Py(),particle->Pz()) < fMinY)) continue;
     }
 
     Int_t pdgcode = particle->GetPdgCode();
     if(pdgcode == 2212) {
       if(iParticle <= stack->GetNprimary()) {
-       if(fAnalysisEtaMode)
+       if(fProtonAnalysisBase->GetEtaMode())
          ((TH3F *)(fPDGList->At(0)))->Fill(particle->Eta(),particle->Pt(),0);
        else
-         ((TH3F *)(fPDGList->At(0)))->Fill(Rapidity(particle->Px(),
+         ((TH3F *)(fPDGList->At(0)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                     particle->Py(),
                                                     particle->Pz()),
                                            particle->Pt(),0);
@@ -4151,12 +4534,12 @@ void AliProtonQAAnalysis::RunMCAnalysis(AliStack* stack) {
        if(fMotherParticlePDGCodeFlag)
          if(TMath::Abs(motherPDGCode) != fMotherParticlePDGCode) continue;
 
-       if(fAnalysisEtaMode)
+       if(fProtonAnalysisBase->GetEtaMode())
          ((TH3F *)(fPDGList->At(0)))->Fill(particle->Eta(),
                                            particle->Pt(),
                                            ConvertPDGToInt(motherParticle->GetPdgCode()));
        else
-         ((TH3F *)(fPDGList->At(0)))->Fill(Rapidity(particle->Px(),
+         ((TH3F *)(fPDGList->At(0)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                     particle->Py(),
                                                     particle->Pz()),
                                            particle->Pt(),
@@ -4191,10 +4574,10 @@ void AliProtonQAAnalysis::RunMCAnalysis(AliStack* stack) {
 
     if(pdgcode == -2212) {
       if(iParticle <= stack->GetNprimary()) {
-       if(fAnalysisEtaMode)
+       if(fProtonAnalysisBase->GetEtaMode())
          ((TH3F *)(fPDGList->At(1)))->Fill(particle->Eta(),particle->Pt(),0);
        else
-         ((TH3F *)(fPDGList->At(1)))->Fill(Rapidity(particle->Px(),
+         ((TH3F *)(fPDGList->At(1)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                     particle->Py(),
                                                     particle->Pz()),
                                            particle->Pt(),0);
@@ -4209,12 +4592,12 @@ void AliProtonQAAnalysis::RunMCAnalysis(AliStack* stack) {
        if(fMotherParticlePDGCodeFlag)
          if(TMath::Abs(motherPDGCode) != fMotherParticlePDGCode) continue;
 
-       if(fAnalysisEtaMode)
+       if(fProtonAnalysisBase->GetEtaMode())
          ((TH3F *)(fPDGList->At(1)))->Fill(particle->Eta(),
                                            particle->Pt(),
                                            ConvertPDGToInt(motherParticle->GetPdgCode()));
        else
-         ((TH3F *)(fPDGList->At(1)))->Fill(Rapidity(particle->Px(),
+         ((TH3F *)(fPDGList->At(1)))->Fill(fProtonAnalysisBase->Rapidity(particle->Px(),
                                                     particle->Py(),
                                                     particle->Pz()),
                                            particle->Pt(),
@@ -4244,7 +4627,7 @@ void AliProtonQAAnalysis::RunMCAnalysis(AliStack* stack) {
 }
 
 //____________________________________________________________________//
-Int_t AliProtonQAAnalysis::ConvertPDGToInt(Int_t pdgCode) {
+Int_t AliProtonQAAnalysis::ConvertPDGToInt(Int_t pdgCode) const {
   //Converts the pdg code to an int based on the following scheme:
   //1: PDG code: 130 - Name: K_L0
   //2: PDG code: 211 - Name: pi+
@@ -4317,52 +4700,6 @@ Int_t AliProtonQAAnalysis::ConvertPDGToInt(Int_t pdgCode) {
   return code;
 }
 
-//________________________________________________________________________
-/*const AliESDVertex* AliProtonQAAnalysis::GetVertex(AliESDEvent* esd,
-                                                  Double_t gVxMax,
-                                                  Double_t gVyMax,
-                                                  Double_t gVzMax) {
-  // Get the vertex from the ESD and returns it if the vertex is valid
-  // depending on the analysis mode: TPC - Hybrid - Global
-  const AliESDVertex* vertex = 0;
-  if((fUseTPCOnly)&&(!fUseHybridTPC)) {
-    Double_t kBz = esd->GetMagneticField();
-    AliVertexerTracks vertexer(kBz);
-    vertexer.SetTPCMode();
-    AliESDVertex *vTPC = vertexer.FindPrimaryVertex(esd);
-    esd->SetPrimaryVertexTPC(vTPC);
-    for (Int_t i=0; i<esd->GetNumberOfTracks(); i++) {
-      AliESDtrack *t = esd->GetTrack(i);
-      t->RelateToVertexTPC(vTPC, kBz, kVeryBig);
-    }
-    delete vTPC;
-    vertex = esd->GetPrimaryVertexTPC();
-  }
-  else if(fUseHybridTPC)
-    vertex = esd->GetPrimaryVertexSPD();
-  else if(!fUseTPCOnly)
-    vertex = esd->GetPrimaryVertex();
-  else
-    Printf("GetVertex: ERROR: Invalid analysis mode");
-  
-  if(!vertex) return 0;
-  
-  // check Ncontributors
-  if(vertex->GetNContributors() <= 0) return 0;
-  
-  // check resolution
-  Double_t zRes = vertex->GetZRes();
-  if(zRes == 0) return 0;
-  
-  //check position
-  if(TMath::Abs(vertex->GetXv()) > gVxMax) return 0;
-  if(TMath::Abs(vertex->GetYv()) > gVyMax) return 0;
-  if(TMath::Abs(vertex->GetZv()) > gVzMax) return 0;
-
-  return vertex;
-  }*/
-
-