]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/SPECTRA/AliProtonAnalysis.cxx
HWCF configuration: switching on deconvolution in time after fix r51236
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliProtonAnalysis.cxx
index 815fe216872ab13e7ff7ea054271cc11b32eac41..5ae751b62967ea1678304c48d5ee915746c91d4f 100644 (file)
@@ -68,14 +68,16 @@ AliProtonAnalysis::AliProtonAnalysis() :
   fHistCorrectionForCrossSectionFlag(kFALSE),
   fHistYPtCorrectionForCutsProtons(0), fHistYPtCorrectionForCutsAntiProtons(0),
   fCorrectForCutsFlag(kFALSE),
+  fHistYPtCorrectionForTrackingProtons(0), 
+  fHistYPtCorrectionForTrackingAntiProtons(0),
+  fCorrectForTrackingFlag(kFALSE),
   fHistYPtCorrectionForFeedDownProtons(0), 
   fHistYPtCorrectionForFeedDownAntiProtons(0),
   fCorrectForFeedDownFlag(kFALSE),
   fHistYPtCorrectionForSecondaries(0), fCorrectForSecondariesFlag(kFALSE),
   fGlobalQAList(0), fQA2DList(0),
   fQAProtonsAcceptedList(0), fQAProtonsRejectedList(0),
-  fQAAntiProtonsAcceptedList(0), fQAAntiProtonsRejectedList(0),
-  fInitQAFlag(kFALSE) {
+  fQAAntiProtonsAcceptedList(0), fQAAntiProtonsRejectedList(0) {
   //Default constructor
 }
 
@@ -102,14 +104,16 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY,
   fHistCorrectionForCrossSectionFlag(kFALSE),
   fHistYPtCorrectionForCutsProtons(0), fHistYPtCorrectionForCutsAntiProtons(0),
   fCorrectForCutsFlag(kFALSE),
+  fHistYPtCorrectionForTrackingProtons(0), 
+  fHistYPtCorrectionForTrackingAntiProtons(0),
+  fCorrectForTrackingFlag(kFALSE),
   fHistYPtCorrectionForFeedDownProtons(0), 
   fHistYPtCorrectionForFeedDownAntiProtons(0),
   fCorrectForFeedDownFlag(kFALSE),
   fHistYPtCorrectionForSecondaries(0), fCorrectForSecondariesFlag(kFALSE),
   fGlobalQAList(0), fQA2DList(0),
   fQAProtonsAcceptedList(0), fQAProtonsRejectedList(0),
-  fQAAntiProtonsAcceptedList(0), fQAAntiProtonsRejectedList(0),
-  fInitQAFlag(kFALSE) {
+  fQAAntiProtonsAcceptedList(0), fQAAntiProtonsRejectedList(0) {
   //Default constructor
   fHistEvents = new TH1I("fHistEvents","Analyzed events",2,0.5,2.5);
   fHistEvents->GetXaxis()->SetBinLabel(1,"Analyzed events");
@@ -120,7 +124,7 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY,
                             fNBinsPt,fMinPt,fMaxPt);
   fHistYPtProtons->SetStats(kTRUE);
   fHistYPtProtons->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtProtons->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtProtons->GetXaxis()->SetTitle("y");
@@ -131,7 +135,7 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY,
                                 fNBinsPt,fMinPt,fMaxPt);
   fHistYPtAntiProtons->SetStats(kTRUE);
   fHistYPtAntiProtons->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtAntiProtons->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtAntiProtons->GetXaxis()->SetTitle("y");
@@ -142,7 +146,7 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY,
                                      fNBinsPt,fMinPt,fMaxPt);
   fHistYPtProtonsCorrected->SetStats(kTRUE);
   fHistYPtProtonsCorrected->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtProtonsCorrected->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtProtonsCorrected->GetXaxis()->SetTitle("y");
@@ -154,7 +158,7 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY,
                                          fNBinsPt,fMinPt,fMaxPt);
   fHistYPtAntiProtonsCorrected->SetStats(kTRUE);
   fHistYPtAntiProtonsCorrected->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtAntiProtonsCorrected->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtAntiProtonsCorrected->GetXaxis()->SetTitle("y");
@@ -184,7 +188,7 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY,
   fAntiProtonContainer->SetBinLimits(1,binLimPt); //pT
 
   //Initialize the QA
-  if(!fInitQAFlag) InitQA();
+  if(fProtonAnalysisBase && fProtonAnalysisBase->IsQARun()) InitQA();
 } 
 
 //____________________________________________________________________//
@@ -208,14 +212,16 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY, Double_t *gY,
   fHistCorrectionForCrossSectionFlag(kFALSE),
   fHistYPtCorrectionForCutsProtons(0), fHistYPtCorrectionForCutsAntiProtons(0),
   fCorrectForCutsFlag(kFALSE),
+  fHistYPtCorrectionForTrackingProtons(0), 
+  fHistYPtCorrectionForTrackingAntiProtons(0),
+  fCorrectForTrackingFlag(kFALSE),
   fHistYPtCorrectionForFeedDownProtons(0), 
   fHistYPtCorrectionForFeedDownAntiProtons(0),
   fCorrectForFeedDownFlag(kFALSE),
   fHistYPtCorrectionForSecondaries(0), fCorrectForSecondariesFlag(kFALSE),
   fGlobalQAList(0), fQA2DList(0),
   fQAProtonsAcceptedList(0), fQAProtonsRejectedList(0),
-  fQAAntiProtonsAcceptedList(0), fQAAntiProtonsRejectedList(0),
-  fInitQAFlag(kFALSE) {
+  fQAAntiProtonsAcceptedList(0), fQAAntiProtonsRejectedList(0) {
   //Default constructor
   fHistEvents = new TH1I("fHistEvents","Analyzed events",2,0.5,2.5);
   fHistEvents->GetXaxis()->SetBinLabel(1,"Analyzed events");
@@ -225,7 +231,7 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY, Double_t *gY,
                             fNBinsY,gY,fNBinsPt,gPt);
   fHistYPtProtons->SetStats(kTRUE);
   fHistYPtProtons->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtProtons->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtProtons->GetXaxis()->SetTitle("y");
@@ -235,7 +241,7 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY, Double_t *gY,
                                 fNBinsY,gY,fNBinsPt,gPt);
   fHistYPtAntiProtons->SetStats(kTRUE);
   fHistYPtAntiProtons->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtAntiProtons->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtAntiProtons->GetXaxis()->SetTitle("y");
@@ -246,7 +252,7 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY, Double_t *gY,
                                      fNBinsPt,fMinPt,fMaxPt);
   fHistYPtProtonsCorrected->SetStats(kTRUE);
   fHistYPtProtonsCorrected->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtProtonsCorrected->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtProtonsCorrected->GetXaxis()->SetTitle("y");
@@ -258,7 +264,7 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY, Double_t *gY,
                                          fNBinsPt,fMinPt,fMaxPt);
   fHistYPtAntiProtonsCorrected->SetStats(kTRUE);
   fHistYPtAntiProtonsCorrected->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtAntiProtonsCorrected->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtAntiProtonsCorrected->GetXaxis()->SetTitle("y");
@@ -280,7 +286,7 @@ AliProtonAnalysis::AliProtonAnalysis(Int_t nbinsY, Double_t *gY,
   fAntiProtonContainer->SetBinLimits(1,gPt); //pT
 
   //Initialize the QA
-  if(!fInitQAFlag) InitQA();
+  if(fProtonAnalysisBase && fProtonAnalysisBase->IsQARun()) InitQA();
 } 
 
 //____________________________________________________________________//
@@ -315,6 +321,8 @@ AliProtonAnalysis::~AliProtonAnalysis() {
   if(fHistCorrectionForCrossSectionYPtAntiProtons) delete fHistCorrectionForCrossSectionYPtAntiProtons;
   if(fHistYPtCorrectionForCutsProtons) delete fHistYPtCorrectionForCutsProtons;
   if(fHistYPtCorrectionForCutsAntiProtons) delete fHistYPtCorrectionForCutsAntiProtons;
+  if(fHistYPtCorrectionForTrackingProtons) delete fHistYPtCorrectionForTrackingProtons;
+  if(fHistYPtCorrectionForTrackingAntiProtons) delete fHistYPtCorrectionForTrackingAntiProtons;
   if(fHistYPtCorrectionForFeedDownProtons) delete fHistYPtCorrectionForFeedDownProtons;
   if(fHistYPtCorrectionForFeedDownAntiProtons) delete fHistYPtCorrectionForFeedDownAntiProtons;
   if(fHistYPtCorrectionForSecondaries) delete fHistYPtCorrectionForSecondaries;
@@ -350,7 +358,7 @@ void AliProtonAnalysis::InitAnalysisHistograms(Int_t nbinsY,
                             fNBinsPt,fMinPt,fMaxPt);
   fHistYPtProtons->SetStats(kTRUE);
   fHistYPtProtons->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtProtons->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtProtons->GetXaxis()->SetTitle("y");
@@ -361,7 +369,7 @@ void AliProtonAnalysis::InitAnalysisHistograms(Int_t nbinsY,
                                 fNBinsPt,fMinPt,fMaxPt);
   fHistYPtAntiProtons->SetStats(kTRUE);
   fHistYPtAntiProtons->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtAntiProtons->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtAntiProtons->GetXaxis()->SetTitle("y");
@@ -372,7 +380,7 @@ void AliProtonAnalysis::InitAnalysisHistograms(Int_t nbinsY,
                                      fNBinsPt,fMinPt,fMaxPt);
   fHistYPtProtonsCorrected->SetStats(kTRUE);
   fHistYPtProtonsCorrected->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtProtonsCorrected->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtProtonsCorrected->GetXaxis()->SetTitle("y");
@@ -384,7 +392,7 @@ void AliProtonAnalysis::InitAnalysisHistograms(Int_t nbinsY,
                                          fNBinsPt,fMinPt,fMaxPt);
   fHistYPtAntiProtonsCorrected->SetStats(kTRUE);
   fHistYPtAntiProtonsCorrected->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtAntiProtonsCorrected->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtAntiProtonsCorrected->GetXaxis()->SetTitle("y");
@@ -413,8 +421,11 @@ void AliProtonAnalysis::InitAnalysisHistograms(Int_t nbinsY,
   fAntiProtonContainer->SetBinLimits(0,binLimY); //rapidity
   fAntiProtonContainer->SetBinLimits(1,binLimPt); //pT
 
+  delete [] binLimY;
+  delete [] binLimPt;
+
   //Initialize the QA
-  if(!fInitQAFlag) InitQA();
+  if(fProtonAnalysisBase && fProtonAnalysisBase->IsQARun()) InitQA();
 }
 
 //____________________________________________________________________//
@@ -436,7 +447,7 @@ void AliProtonAnalysis::InitAnalysisHistograms(Int_t nbinsY, Double_t *gY,
                             fNBinsY,gY,fNBinsPt,gPt);
   fHistYPtProtons->SetStats(kTRUE);
   fHistYPtProtons->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtProtons->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtProtons->GetXaxis()->SetTitle("y");
@@ -446,7 +457,7 @@ void AliProtonAnalysis::InitAnalysisHistograms(Int_t nbinsY, Double_t *gY,
                                 fNBinsY,gY,fNBinsPt,gPt);
   fHistYPtAntiProtons->SetStats(kTRUE);
   fHistYPtAntiProtons->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtAntiProtons->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtAntiProtons->GetXaxis()->SetTitle("y");
@@ -456,7 +467,7 @@ void AliProtonAnalysis::InitAnalysisHistograms(Int_t nbinsY, Double_t *gY,
                                      fNBinsY,gY,fNBinsPt,gPt);
   fHistYPtProtonsCorrected->SetStats(kTRUE);
   fHistYPtProtonsCorrected->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtProtonsCorrected->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtProtonsCorrected->GetXaxis()->SetTitle("y");
@@ -467,7 +478,7 @@ void AliProtonAnalysis::InitAnalysisHistograms(Int_t nbinsY, Double_t *gY,
                                          fNBinsY,gY,fNBinsPt,gPt);
   fHistYPtAntiProtonsCorrected->SetStats(kTRUE);
   fHistYPtAntiProtonsCorrected->GetYaxis()->SetTitle("P_{T} [GeV/c]");
-  if(fProtonAnalysisBase->GetEtaMode())
+  if(fProtonAnalysisBase && fProtonAnalysisBase->GetEtaMode())
     fHistYPtAntiProtonsCorrected->GetXaxis()->SetTitle("#eta");
   else
     fHistYPtAntiProtonsCorrected->GetXaxis()->SetTitle("y");
@@ -490,7 +501,7 @@ void AliProtonAnalysis::InitAnalysisHistograms(Int_t nbinsY, Double_t *gY,
   fAntiProtonContainer->SetBinLimits(1,gPt); //pT
 
   //Initialize the QA
-  if(!fInitQAFlag) InitQA();
+  if(fProtonAnalysisBase && fProtonAnalysisBase->IsQARun()) InitQA();
 }
 
 //____________________________________________________________________//
@@ -503,38 +514,38 @@ Bool_t AliProtonAnalysis::ReadFromFile(const char* filename) {
     cout<<"Could not find the input file "<<filename<<endl;
     status = kFALSE;
   }
-
-  TList *list = (TList *)file->Get("outputList");
-  if(list) {
-    cout<<"Retrieving objects from the list "<<list->GetName()<<"..."<<endl; 
-    fHistYPtProtons = (TH2D *)list->At(0);
-    fHistYPtAntiProtons = (TH2D *)list->At(1);
-    fHistEvents = (TH1I *)list->At(2);
-    fProtonContainer = (AliCFContainer *)list->At(3);
-    fAntiProtonContainer = (AliCFContainer *)list->At(4);
-    fHistEventStats = (TH1F *)list->At(5);
-  }
-  else if(!list) {
-    cout<<"Retrieving objects from the file... "<<endl;
-    fHistYPtProtons = (TH2D *)file->Get("fHistYPtProtons");
-    fHistYPtAntiProtons = (TH2D *)file->Get("fHistYPtAntiProtons");
-    fHistEvents = (TH1I *)file->Get("fHistEvents");
-    fProtonContainer = (AliCFContainer *)file->Get("containerProtons");
-    fAntiProtonContainer = (AliCFContainer *)file->Get("containerAntiProtons");
-    fHistEventStats = (TH1F *)file->Get("fHistEventStats");
-  }
-  if((!fHistYPtProtons)||(!fHistYPtAntiProtons)||(!fHistEvents)
-     ||(!fProtonContainer)||(!fAntiProtonContainer)||(!fHistEventStats)) {
-    cout<<"Input containers were not found!!!"<<endl;
-    status = kFALSE;
-  }
   else {
-    //fHistYPtProtons = fProtonContainer->ShowProjection(0,1,0);
-    //fHistYPtAntiProtons = fAntiProtonContainer->ShowProjection(0,1,0);
-    fHistYPtProtons->Sumw2();
-    fHistYPtAntiProtons->Sumw2();
+    TList *list = (TList *)file->Get("outputList");
+    if(list) {
+      cout<<"Retrieving objects from the list "<<list->GetName()<<"..."<<endl; 
+      fHistYPtProtons = (TH2D *)list->At(0);
+      fHistYPtAntiProtons = (TH2D *)list->At(1);
+      fHistEvents = (TH1I *)list->At(2);
+      fProtonContainer = (AliCFContainer *)list->At(3);
+      fAntiProtonContainer = (AliCFContainer *)list->At(4);
+      fHistEventStats = (TH1F *)list->At(5);
+    }
+    else if(!list) {
+      cout<<"Retrieving objects from the file... "<<endl;
+      fHistYPtProtons = (TH2D *)file->Get("fHistYPtProtons");
+      fHistYPtAntiProtons = (TH2D *)file->Get("fHistYPtAntiProtons");
+      fHistEvents = (TH1I *)file->Get("fHistEvents");
+      fProtonContainer = (AliCFContainer *)file->Get("containerProtons");
+      fAntiProtonContainer = (AliCFContainer *)file->Get("containerAntiProtons");
+      fHistEventStats = (TH1F *)file->Get("fHistEventStats");
+    }
+    if((!fHistYPtProtons)||(!fHistYPtAntiProtons)||(!fHistEvents)
+       ||(!fProtonContainer)||(!fAntiProtonContainer)||(!fHistEventStats)) {
+      cout<<"Input containers were not found!!!"<<endl;
+      status = kFALSE;
+    }
+    else {
+      //fHistYPtProtons = fProtonContainer->ShowProjection(0,1,0);
+      //fHistYPtAntiProtons = fAntiProtonContainer->ShowProjection(0,1,0);
+      fHistYPtProtons->Sumw2();
+      fHistYPtAntiProtons->Sumw2();
+    }
   }
-
   return status;
 }
 
@@ -711,7 +722,8 @@ TH1D *AliProtonAnalysis::GetProtonCorrectedPtHistogram() {
   //Get the corrected Pt histogram for protons
   Int_t nAnalyzedEvents = GetNumberOfAnalyzedEvents();
 
-  TH1D *fPtProtons = (TH1D *)fHistYPtProtonsCorrected->ProjectionY("fPtProtons",2,fHistYPtProtons->GetXaxis()->GetNbins()-1,"e");
+  //TH1D *fPtProtons = (TH1D *)fHistYPtProtonsCorrected->ProjectionY("fPtProtons",2,fHistYPtProtons->GetXaxis()->GetNbins()-1,"e");
+  TH1D *fPtProtons = (TH1D *)fHistYPtProtonsCorrected->ProjectionY("fPtProtons",3,7,"e"); //3,7: |y| < 0.5
   //TH1D *fPtProtons = fCorrectProtons->Project(0); //0: rapidity
    
   fPtProtons->SetStats(kFALSE);
@@ -731,7 +743,8 @@ TH1D *AliProtonAnalysis::GetAntiProtonCorrectedPtHistogram() {
   //Get the corrected Pt histogram for antiprotons
   Int_t nAnalyzedEvents = GetNumberOfAnalyzedEvents();
 
-  TH1D *fPtAntiProtons = (TH1D *)fHistYPtAntiProtonsCorrected->ProjectionY("fPtAntiProtons",2,fHistYPtAntiProtons->GetXaxis()->GetNbins()-1,"e");
+  //TH1D *fPtAntiProtons = (TH1D *)fHistYPtAntiProtonsCorrected->ProjectionY("fPtAntiProtons",2,fHistYPtAntiProtons->GetXaxis()->GetNbins()-1,"e");
+  TH1D *fPtAntiProtons = (TH1D *)fHistYPtAntiProtonsCorrected->ProjectionY("fPtAntiProtons",3,7,"e"); //3,7: |y| < 0.5
 //TH1D *fPtAntiProtons = fCorrectAntiProtons->Project(0); //0: rapidity
    
   fPtAntiProtons->SetStats(kFALSE);
@@ -887,6 +900,8 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
   Int_t nTracks = 0;
   Int_t nIdentifiedProtons = 0, nIdentifiedAntiProtons = 0;
   Int_t nSurvivedProtons = 0, nSurvivedAntiProtons = 0;
+
+  if(!fProtonAnalysisBase) return;
   
   //=========================================//
   //Aleph parametrization
@@ -905,9 +920,9 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
     fAlephParameters[3] = 2.12543e+00;
     fAlephParameters[4] = 4.88663e+00;
   }
-  AliESDpid *fESDpid = new AliESDpid();
-  AliTPCPIDResponse tpcResponse = fESDpid->GetTPCResponse(); 
-  tpcResponse.SetBetheBlochParameters(fAlephParameters[0],fAlephParameters[1],fAlephParameters[2],fAlephParameters[3],fAlephParameters[4]);
+
+  AliTPCPIDResponse *tpcResponse = new AliTPCPIDResponse();
+  tpcResponse->SetBetheBlochParameters(fAlephParameters[0],fAlephParameters[1],fAlephParameters[2],fAlephParameters[3],fAlephParameters[4]);
   //=========================================//  
 
   fHistEvents->Fill(1); //number of analyzed events
@@ -920,20 +935,7 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
     AliESDtrack* track = esd->GetTrack(iTracks);
     AliESDtrack trackTPC;
 
-    //in case it's a TPC only track relate it to the proper vertex
-    /*if(fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kTPC) {
-      Float_t p[2],cov[3];
-      track->GetImpactParametersTPC(p,cov);
-      if (p[0]==0 && p[1]==0)  
-       track->RelateToVertexTPC(((AliESDEvent*)esd)->GetPrimaryVertexTPC(),esd->GetMagneticField(),kVeryBig);
-      if (!track->FillTPCOnlyTrack(trackTPC)) {
-       continue;
-      }
-      track = &trackTPC ;
-      }*/
-
-    Int_t  fIdxInt[200];
-    Int_t nClustersTPC = track->GetTPCclusters(fIdxInt);
+    Int_t nClustersTPC = track->GetTPCclusters(0x0);
     Int_t npointsTPCdEdx = track->GetTPCsignalN();
     Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};  //The impact parameters and their covariance.
     Double_t dca3D = 0.0;
@@ -942,7 +944,6 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
       AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
       if(!tpcTrack) continue;
       gPt = tpcTrack->Pt();
-      //gP = tpcTrack->P();
       gP = track->GetInnerParam()->P();
       tpcTrack->PropagateToDCA(vertex,
                               esd->GetMagneticField(),
@@ -950,43 +951,92 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
       dca3D = TMath::Sqrt(TMath::Power(dca[0],2) +
                          TMath::Power(dca[1],2));
 
-      if(fProtonAnalysisBase->IsPrimary(esd,vertex,track)) {
-       if(fProtonAnalysisBase->IsAccepted(track)) {
-         ((TH2F *)(fQA2DList->At(0)))->Fill(gP,track->GetTPCsignal());
-         ((TH2F *)(fQA2DList->At(2)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse.GetExpectedSignal(gP,AliPID::kProton)));
-         ((TH3F *)(fQA2DList->At(4)))->Fill(tpcTrack->Eta(),
+      if(fProtonAnalysisBase->GetEtaMode())
+       containerInput[0] = tpcTrack->Eta();
+      else
+       containerInput[0] = fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
+                                                         tpcTrack->Py(),
+                                                         tpcTrack->Pz());
+      containerInput[1] = gPt;
+
+       //Step: kStepSurvived
+      if(fProtonAnalysisBase->IsAccepted(track)) {
+       if(fProtonAnalysisBase->IsQARun()) {
+         ((TH2F *)(fQA2DList->At(1)))->Fill(gP,track->GetTPCsignal());
+         ((TH2F *)(fQA2DList->At(3)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse->GetExpectedSignal(gP,AliPID::kProton)));
+         ((TH3F *)(fQA2DList->At(5)))->Fill(tpcTrack->Eta(),
                                             tpcTrack->Phi()*180./TMath::Pi(),
                                             npointsTPCdEdx);
-         ((TH3F *)(fQA2DList->At(6)))->Fill(tpcTrack->Eta(),
+         ((TH3F *)(fQA2DList->At(7)))->Fill(tpcTrack->Eta(),
                                             tpcTrack->Phi()*180./TMath::Pi(),
                                             nClustersTPC);
-         ((TH3F *)(fQA2DList->At(8)))->Fill(gPt,
+         ((TH3F *)(fQA2DList->At(9)))->Fill(gPt,
                                             tpcTrack->Phi()*180./TMath::Pi(),
                                             npointsTPCdEdx);
-         ((TH3F *)(fQA2DList->At(10)))->Fill(gPt,
-                                            tpcTrack->Phi()*180./TMath::Pi(),
-                                            nClustersTPC);     
-       }//quality cuts
-      }//primary cuts
-      
-      if(fProtonAnalysisBase->IsProton(track)) {
-       //Step: kStepIdentified
-       if(fProtonAnalysisBase->GetEtaMode())
-         containerInput[0] = tpcTrack->Eta();
-       else
-         containerInput[0] = fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
-                                                           tpcTrack->Py(),
-                                                           tpcTrack->Pz());
-       containerInput[1] = gPt;
+         ((TH3F *)(fQA2DList->At(11)))->Fill(gPt,
+                                             tpcTrack->Phi()*180./TMath::Pi(),
+                                             nClustersTPC);
+       }//run the qa
+       
        if(tpcTrack->Charge() > 0) {
-         nIdentifiedProtons += 1;
-         fProtonContainer->Fill(containerInput,kStepIdentified);
+         fProtonContainer->Fill(containerInput,kStepSurvived);   
+         if(fProtonAnalysisBase->IsQARun()) {
+           ((TH2F *)(fQA2DList->At(12)))->Fill(tpcTrack->Eta(),
+                                               tpcTrack->Phi()*180./TMath::Pi());
+           if(fProtonAnalysisBase->GetEtaMode()) {
+             ((TH3F *)(fQA2DList->At(14)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(15)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(18)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+           else {
+             ((TH3F *)(fQA2DList->At(14)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(15)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(18)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+         }//run the qa
        }//protons
        else if(tpcTrack->Charge() < 0) {
-         nIdentifiedAntiProtons += 1;
-         fAntiProtonContainer->Fill(containerInput,kStepIdentified);
-       }//protons
-       
+         fAntiProtonContainer->Fill(containerInput,kStepSurvived);   
+         if(fProtonAnalysisBase->IsQARun()) {
+           ((TH2F *)(fQA2DList->At(13)))->Fill(tpcTrack->Eta(),
+                                               tpcTrack->Phi()*180./TMath::Pi());
+           if(fProtonAnalysisBase->GetEtaMode()) {
+             ((TH3F *)(fQA2DList->At(16)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(17)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(19)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+           else {
+             ((TH3F *)(fQA2DList->At(16)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(17)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(19)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+         }//run the qa
+       }//antiprotons
+
        //Step: kStepIsPrimary
        if(fProtonAnalysisBase->IsPrimary(esd,vertex,track)) {
          if(tpcTrack->Charge() > 0)
@@ -994,79 +1044,39 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
          else if(tpcTrack->Charge() < 0) 
            fAntiProtonContainer->Fill(containerInput,kStepIsPrimary);   
          
-         FillQA(esd,vertex,track);       
-         
-         //Step: kStepSurvived
-         if(fProtonAnalysisBase->IsAccepted(track)) {
-           ((TH2F *)(fQA2DList->At(1)))->Fill(gP,track->GetTPCsignal());
-           ((TH2F *)(fQA2DList->At(3)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse.GetExpectedSignal(gP,AliPID::kProton)));
-           ((TH3F *)(fQA2DList->At(5)))->Fill(tpcTrack->Eta(),
+         if(fProtonAnalysisBase->IsQARun()) {
+           ((TH2F *)(fQA2DList->At(0)))->Fill(gP,track->GetTPCsignal());
+           ((TH2F *)(fQA2DList->At(2)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse->GetExpectedSignal(gP,AliPID::kProton)));
+           ((TH3F *)(fQA2DList->At(4)))->Fill(tpcTrack->Eta(),
                                               tpcTrack->Phi()*180./TMath::Pi(),
                                               npointsTPCdEdx);
-           ((TH3F *)(fQA2DList->At(7)))->Fill(tpcTrack->Eta(),
+           ((TH3F *)(fQA2DList->At(6)))->Fill(tpcTrack->Eta(),
                                               tpcTrack->Phi()*180./TMath::Pi(),
                                               nClustersTPC);
-           ((TH3F *)(fQA2DList->At(9)))->Fill(gPt,
+           ((TH3F *)(fQA2DList->At(8)))->Fill(gPt,
                                               tpcTrack->Phi()*180./TMath::Pi(),
                                               npointsTPCdEdx);
-           ((TH3F *)(fQA2DList->At(11)))->Fill(gPt,
-                                              tpcTrack->Phi()*180./TMath::Pi(),
-                                              nClustersTPC);
-           
+           ((TH3F *)(fQA2DList->At(10)))->Fill(gPt,
+                                               tpcTrack->Phi()*180./TMath::Pi(),
+                                               nClustersTPC);  
+           if(track->Charge() > 0)
+             ((TH2F *)(fQA2DList->At(20)))->Fill(gP,track->GetTPCsignal());
+           if(track->Charge() < 0)
+             ((TH2F *)(fQA2DList->At(21)))->Fill(gP,track->GetTPCsignal());
+         }//run the qa
+
+         //Step: kStepIdentified         
+         if(fProtonAnalysisBase->IsProton(track)) {
            if(tpcTrack->Charge() > 0) {
-             fProtonContainer->Fill(containerInput,kStepSurvived);   
-             ((TH2F *)(fQA2DList->At(12)))->Fill(tpcTrack->Eta(),
-                                                 tpcTrack->Phi()*180./TMath::Pi());
-             if(fProtonAnalysisBase->GetEtaMode()) {
-               ((TH3F *)(fQA2DList->At(14)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(15)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(18)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   TMath::Abs(dca3D));
-             }
-             else {
-               ((TH3F *)(fQA2DList->At(14)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(15)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(18)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   TMath::Abs(dca3D));
-             }
+             nIdentifiedProtons += 1;
+             fProtonContainer->Fill(containerInput,kStepIdentified);
            }//protons
            else if(tpcTrack->Charge() < 0) {
-             fAntiProtonContainer->Fill(containerInput,kStepSurvived);   
-             ((TH2F *)(fQA2DList->At(13)))->Fill(tpcTrack->Eta(),
-                                                 tpcTrack->Phi()*180./TMath::Pi());
-             if(fProtonAnalysisBase->GetEtaMode()) {
-               ((TH3F *)(fQA2DList->At(16)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(17)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(19)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   TMath::Abs(dca3D));
-             }
-             else {
-               ((TH3F *)(fQA2DList->At(16)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(17)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(19)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   TMath::Abs(dca3D));
-             }
-           }//antiprotons
+             nIdentifiedAntiProtons += 1;
+             fAntiProtonContainer->Fill(containerInput,kStepIdentified);
+           }//protons
+       
+           if(fProtonAnalysisBase->IsQARun()) FillQA(esd,vertex,track);
            
            //Step: kStepInPhaseSpace
            if(fProtonAnalysisBase->IsInPhaseSpace(track)) {
@@ -1083,22 +1093,16 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
                fAntiProtonContainer->Fill(containerInput,kStepInPhaseSpace);
              }//antiprotons
            }//Step: kStepInPhaseSpace
-         }//Step: kStepSurvived
+         }//Step: kStepIdentified
        }//Step: kStepIsPrimary
-      }//Step: kStepIdentified
+      }//Step: kStepSurvived
     }//TPC only tracks
     if(fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kFullHybrid) {
       AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
       if(!tpcTrack) continue;
 
       AliExternalTrackParam cParam;
-      /*Double_t phi = tpcTrack->Phi();
-      Double_t eta = tpcTrack->Eta();
-      Double_t gPx = tpcTrack->Px();
-      Double_t gPy = tpcTrack->Py();
-      Double_t gPz = tpcTrack->Pz();*/
       gPt = tpcTrack->Pt();
-      //gP = tpcTrack->P();
       gP = track->GetInnerParam()->P();
       track->RelateToVertex(vertex,
                            esd->GetMagneticField(),
@@ -1107,44 +1111,91 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
       dca[0] = dcaXY; dca[1] = dcaZ;
       dca3D = TMath::Sqrt(TMath::Power(dca[0],2) +
                          TMath::Power(dca[1],2));
-
-      if(fProtonAnalysisBase->IsPrimary(esd,vertex,track)) {
-       if(fProtonAnalysisBase->IsAccepted(track)) {
-         ((TH2F *)(fQA2DList->At(0)))->Fill(gP,track->GetTPCsignal());
-         ((TH2F *)(fQA2DList->At(2)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse.GetExpectedSignal(gP,AliPID::kProton)));
-         ((TH3F *)(fQA2DList->At(4)))->Fill(tpcTrack->Eta(),
+      if(fProtonAnalysisBase->GetEtaMode())
+       containerInput[0] = tpcTrack->Eta();
+      else
+       containerInput[0] = fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
+                                                         tpcTrack->Py(),
+                                                         tpcTrack->Pz());
+      containerInput[1] = gPt;
+            
+      //Step: kStepSurvived
+      if(fProtonAnalysisBase->IsAccepted(track)) {
+       if(fProtonAnalysisBase->IsQARun()) {
+         ((TH2F *)(fQA2DList->At(1)))->Fill(gP,track->GetTPCsignal());
+         ((TH2F *)(fQA2DList->At(3)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse->GetExpectedSignal(gP,AliPID::kProton)));
+         ((TH3F *)(fQA2DList->At(5)))->Fill(tpcTrack->Eta(),
                                             tpcTrack->Phi()*180./TMath::Pi(),
                                             npointsTPCdEdx);
-         ((TH3F *)(fQA2DList->At(6)))->Fill(tpcTrack->Eta(),
+         ((TH3F *)(fQA2DList->At(7)))->Fill(tpcTrack->Eta(),
                                             tpcTrack->Phi()*180./TMath::Pi(),
                                             nClustersTPC);
-         ((TH3F *)(fQA2DList->At(8)))->Fill(gPt,
+         ((TH3F *)(fQA2DList->At(9)))->Fill(gPt,
                                             tpcTrack->Phi()*180./TMath::Pi(),
                                             npointsTPCdEdx);
-         ((TH3F *)(fQA2DList->At(10)))->Fill(gPt,
-                                            tpcTrack->Phi()*180./TMath::Pi(),
-                                            nClustersTPC);     
-       }//quality cuts
-      }//primary cuts
-      
-      if(fProtonAnalysisBase->IsProton(track)) {
-       //Step: kStepIdentified
-       if(fProtonAnalysisBase->GetEtaMode())
-         containerInput[0] = tpcTrack->Eta();
-       else
-         containerInput[0] = fProtonAnalysisBase->Rapidity(tpcTrack->Px(),
-                                                           tpcTrack->Py(),
-                                                           tpcTrack->Pz());
-       containerInput[1] = gPt;
+         ((TH3F *)(fQA2DList->At(11)))->Fill(gPt,
+                                             tpcTrack->Phi()*180./TMath::Pi(),
+                                             nClustersTPC);
+       }//run the qa
        if(tpcTrack->Charge() > 0) {
-         nIdentifiedProtons += 1;
-         fProtonContainer->Fill(containerInput,kStepIdentified);
+         fProtonContainer->Fill(containerInput,kStepSurvived);   
+         if(fProtonAnalysisBase->IsQARun()) {
+           ((TH2F *)(fQA2DList->At(12)))->Fill(tpcTrack->Eta(),
+                                               tpcTrack->Phi()*180./TMath::Pi());
+           if(fProtonAnalysisBase->GetEtaMode()) {
+             ((TH3F *)(fQA2DList->At(14)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(15)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(18)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+           else {
+             ((TH3F *)(fQA2DList->At(14)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(15)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(18)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+         }//run the qa
        }//protons
        else if(tpcTrack->Charge() < 0) {
-         nIdentifiedAntiProtons += 1;
-         fAntiProtonContainer->Fill(containerInput,kStepIdentified);
-       }//protons
-       
+         fAntiProtonContainer->Fill(containerInput,kStepSurvived);   
+         if(fProtonAnalysisBase->IsQARun()) {
+           ((TH2F *)(fQA2DList->At(13)))->Fill(tpcTrack->Eta(),
+                                               tpcTrack->Phi()*180./TMath::Pi());
+           if(fProtonAnalysisBase->GetEtaMode()) {
+             ((TH3F *)(fQA2DList->At(16)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(17)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(19)))->Fill(tpcTrack->Eta(),
+                                                 tpcTrack->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+           else {
+             ((TH3F *)(fQA2DList->At(16)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(17)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(19)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
+                                                 tpcTrack->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+         }//run the qa
+       }//antiprotons
+
        //Step: kStepIsPrimary
        if(fProtonAnalysisBase->IsPrimary(esd,vertex,track)) {
          if(tpcTrack->Charge() > 0)
@@ -1152,80 +1203,40 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
          else if(tpcTrack->Charge() < 0) 
            fAntiProtonContainer->Fill(containerInput,kStepIsPrimary);   
          
-         FillQA(esd,vertex,track);       
-         
-         //Step: kStepSurvived
-         if(fProtonAnalysisBase->IsAccepted(track)) {
-           ((TH2F *)(fQA2DList->At(1)))->Fill(gP,track->GetTPCsignal());
-           ((TH2F *)(fQA2DList->At(3)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse.GetExpectedSignal(gP,AliPID::kProton)));
-           ((TH3F *)(fQA2DList->At(5)))->Fill(tpcTrack->Eta(),
+         if(fProtonAnalysisBase->IsQARun()) {
+           ((TH2F *)(fQA2DList->At(0)))->Fill(gP,track->GetTPCsignal());
+           ((TH2F *)(fQA2DList->At(2)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse->GetExpectedSignal(gP,AliPID::kProton)));
+           ((TH3F *)(fQA2DList->At(4)))->Fill(tpcTrack->Eta(),
                                               tpcTrack->Phi()*180./TMath::Pi(),
                                               npointsTPCdEdx);
-           ((TH3F *)(fQA2DList->At(7)))->Fill(tpcTrack->Eta(),
+           ((TH3F *)(fQA2DList->At(6)))->Fill(tpcTrack->Eta(),
                                               tpcTrack->Phi()*180./TMath::Pi(),
                                               nClustersTPC);
-           ((TH3F *)(fQA2DList->At(9)))->Fill(gPt,
+           ((TH3F *)(fQA2DList->At(8)))->Fill(gPt,
                                               tpcTrack->Phi()*180./TMath::Pi(),
                                               npointsTPCdEdx);
-           ((TH3F *)(fQA2DList->At(11)))->Fill(gPt,
-                                              tpcTrack->Phi()*180./TMath::Pi(),
-                                              nClustersTPC);
-           
+           ((TH3F *)(fQA2DList->At(10)))->Fill(gPt,
+                                               tpcTrack->Phi()*180./TMath::Pi(),
+                                               nClustersTPC);  
+           if(track->Charge() > 0)
+             ((TH2F *)(fQA2DList->At(20)))->Fill(gP,track->GetTPCsignal());
+           if(track->Charge() < 0)
+             ((TH2F *)(fQA2DList->At(21)))->Fill(gP,track->GetTPCsignal());
+         }//run the qa
+         
+         //Step: kStepIdentified
+         if(fProtonAnalysisBase->IsProton(track)) {
            if(tpcTrack->Charge() > 0) {
-             fProtonContainer->Fill(containerInput,kStepSurvived);   
-             ((TH2F *)(fQA2DList->At(12)))->Fill(tpcTrack->Eta(),
-                                                 tpcTrack->Phi()*180./TMath::Pi());
-             if(fProtonAnalysisBase->GetEtaMode()) {
-               ((TH3F *)(fQA2DList->At(14)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(15)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(18)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   TMath::Abs(dca3D));
-             }
-             else {
-               ((TH3F *)(fQA2DList->At(14)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(15)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(18)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   TMath::Abs(dca3D));
-             }
+             nIdentifiedProtons += 1;
+             fProtonContainer->Fill(containerInput,kStepIdentified);
            }//protons
            else if(tpcTrack->Charge() < 0) {
-             fAntiProtonContainer->Fill(containerInput,kStepSurvived);   
-             ((TH2F *)(fQA2DList->At(13)))->Fill(tpcTrack->Eta(),
-                                                 tpcTrack->Phi()*180./TMath::Pi());
-             if(fProtonAnalysisBase->GetEtaMode()) {
-               ((TH3F *)(fQA2DList->At(16)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(17)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(19)))->Fill(tpcTrack->Eta(),
-                                                   tpcTrack->Pt(),
-                                                   TMath::Abs(dca3D));
-             }
-             else {
-               ((TH3F *)(fQA2DList->At(16)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(17)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(19)))->Fill(fProtonAnalysisBase->Rapidity(tpcTrack->Px(),tpcTrack->Py(),tpcTrack->Pz()),
-                                                   tpcTrack->Pt(),
-                                                   TMath::Abs(dca3D));
-             }
-           }//antiprotons
+             nIdentifiedAntiProtons += 1;
+             fAntiProtonContainer->Fill(containerInput,kStepIdentified);
+           }//protons
            
+           if(fProtonAnalysisBase->IsQARun()) FillQA(esd,vertex,track);
+   
            //Step: kStepInPhaseSpace
            if(fProtonAnalysisBase->IsInPhaseSpace(track)) {
              if(tpcTrack->Charge() > 0) {
@@ -1241,13 +1252,12 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
                fAntiProtonContainer->Fill(containerInput,kStepInPhaseSpace);
              }//antiprotons
            }//Step: kStepInPhaseSpace
-         }//Step: kStepSurvived
+         }//Step: kStepIdentified
        }//Step: kStepIsPrimary
-      }//Step: kStepIdentified
+      }//Step: kStepSurvived
     }//Full hybrid
     else if(fProtonAnalysisBase->GetAnalysisMode() == AliProtonAnalysisBase::kGlobal) {
       gPt = track->Pt();
-      //gP = track->P();
       gP = track->GetInnerParam()->P();
 
       track->PropagateToDCA(vertex,
@@ -1256,42 +1266,90 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
       dca3D = TMath::Sqrt(TMath::Power(dca[0],2) +
                          TMath::Power(dca[1],2));
 
-      if(fProtonAnalysisBase->IsPrimary(esd,vertex,track)) {
-       if(fProtonAnalysisBase->IsAccepted(track)) {
-         ((TH2F *)(fQA2DList->At(0)))->Fill(gP,track->GetTPCsignal());
-         ((TH2F *)(fQA2DList->At(2)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse.GetExpectedSignal(gP,AliPID::kProton)));
-         ((TH3F *)(fQA2DList->At(4)))->Fill(track->Eta(),
+      if(fProtonAnalysisBase->GetEtaMode())
+       containerInput[0] = track->Eta();
+      else
+       containerInput[0] = fProtonAnalysisBase->Rapidity(track->Px(),
+                                                         track->Py(),
+                                                         track->Pz());
+      containerInput[1] = gPt;
+      
+      //Step: kStepSurvived
+      if(fProtonAnalysisBase->IsAccepted(track)) {
+       if(fProtonAnalysisBase->IsQARun()) {
+         ((TH2F *)(fQA2DList->At(1)))->Fill(gP,track->GetTPCsignal());
+         ((TH2F *)(fQA2DList->At(3)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse->GetExpectedSignal(gP,AliPID::kProton)));
+         ((TH3F *)(fQA2DList->At(5)))->Fill(track->Eta(),
                                             track->Phi()*180./TMath::Pi(),
                                             npointsTPCdEdx);
-         ((TH3F *)(fQA2DList->At(6)))->Fill(track->Eta(),
+         ((TH3F *)(fQA2DList->At(7)))->Fill(track->Eta(),
                                             track->Phi()*180./TMath::Pi(),
                                             nClustersTPC);
-         ((TH3F *)(fQA2DList->At(8)))->Fill(gPt,
+         ((TH3F *)(fQA2DList->At(9)))->Fill(gPt,
                                             track->Phi()*180./TMath::Pi(),
                                             npointsTPCdEdx);
-         ((TH3F *)(fQA2DList->At(10)))->Fill(gPt,
-                                            track->Phi()*180./TMath::Pi(),
-                                            nClustersTPC);     
-       }//quality cuts
-      }//primary cuts
-      
-      if(fProtonAnalysisBase->IsProton(track)) {
-       //Step: kStepIdentified
-       if(fProtonAnalysisBase->GetEtaMode())
-         containerInput[0] = track->Eta();
-       else
-         containerInput[0] = fProtonAnalysisBase->Rapidity(track->Px(),
-                                                           track->Py(),
-                                                           track->Pz());
-       containerInput[1] = gPt;
+         ((TH3F *)(fQA2DList->At(11)))->Fill(gPt,
+                                             track->Phi()*180./TMath::Pi(),
+                                             nClustersTPC);
+       }//run the qa
        if(track->Charge() > 0) {
-         nIdentifiedProtons += 1;
-         fProtonContainer->Fill(containerInput,kStepIdentified);
+         fProtonContainer->Fill(containerInput,kStepSurvived);   
+         if(fProtonAnalysisBase->IsQARun()) {
+           ((TH2F *)(fQA2DList->At(12)))->Fill(track->Eta(),
+                                               track->Phi()*180./TMath::Pi());
+           if(fProtonAnalysisBase->GetEtaMode()) {
+             ((TH3F *)(fQA2DList->At(14)))->Fill(track->Eta(),
+                                                 track->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(15)))->Fill(track->Eta(),
+                                                 track->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(18)))->Fill(track->Eta(),
+                                                 track->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+           else {
+             ((TH3F *)(fQA2DList->At(14)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
+                                                 track->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(15)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
+                                                 track->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(18)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
+                                                 track->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+         }//run the qa
        }//protons
        else if(track->Charge() < 0) {
-         nIdentifiedAntiProtons += 1;
-         fAntiProtonContainer->Fill(containerInput,kStepIdentified);
-       }//protons
+         fAntiProtonContainer->Fill(containerInput,kStepSurvived);   
+         if(fProtonAnalysisBase->IsQARun()) {
+           ((TH2F *)(fQA2DList->At(13)))->Fill(track->Eta(),
+                                               track->Phi()*180./TMath::Pi());
+           if(fProtonAnalysisBase->GetEtaMode()) {
+             ((TH3F *)(fQA2DList->At(16)))->Fill(track->Eta(),
+                                                 track->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(17)))->Fill(track->Eta(),
+                                                 track->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(19)))->Fill(track->Eta(),
+                                                 track->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+           else {
+             ((TH3F *)(fQA2DList->At(16)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
+                                                 track->Pt(),
+                                                 dca[0]);
+             ((TH3F *)(fQA2DList->At(17)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
+                                                 track->Pt(),
+                                                 dca[1]);
+             ((TH3F *)(fQA2DList->At(19)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
+                                                 track->Pt(),
+                                                 TMath::Abs(dca3D));
+           }
+         }//run the qa
+       }//antiprotons
        
        //Step: kStepIsPrimary
        if(fProtonAnalysisBase->IsPrimary(esd,vertex,track)) {
@@ -1300,80 +1358,39 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
          else if(track->Charge() < 0) 
            fAntiProtonContainer->Fill(containerInput,kStepIsPrimary);   
          
-         FillQA(esd,vertex,track);       
-         
-         //Step: kStepSurvived
-         if(fProtonAnalysisBase->IsAccepted(track)) {
-           ((TH2F *)(fQA2DList->At(1)))->Fill(gP,track->GetTPCsignal());
-           ((TH2F *)(fQA2DList->At(3)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse.GetExpectedSignal(gP,AliPID::kProton)));
-           ((TH3F *)(fQA2DList->At(5)))->Fill(track->Eta(),
+         if(fProtonAnalysisBase->IsQARun()) {
+           ((TH2F *)(fQA2DList->At(0)))->Fill(gP,track->GetTPCsignal());
+           ((TH2F *)(fQA2DList->At(2)))->Fill(gP,TMath::Log(track->GetTPCsignal()/tpcResponse->GetExpectedSignal(gP,AliPID::kProton)));
+           ((TH3F *)(fQA2DList->At(4)))->Fill(track->Eta(),
                                               track->Phi()*180./TMath::Pi(),
                                               npointsTPCdEdx);
-           ((TH3F *)(fQA2DList->At(7)))->Fill(track->Eta(),
+           ((TH3F *)(fQA2DList->At(6)))->Fill(track->Eta(),
                                               track->Phi()*180./TMath::Pi(),
                                               nClustersTPC);
-           ((TH3F *)(fQA2DList->At(9)))->Fill(gPt,
+           ((TH3F *)(fQA2DList->At(8)))->Fill(gPt,
                                               track->Phi()*180./TMath::Pi(),
                                               npointsTPCdEdx);
-           ((TH3F *)(fQA2DList->At(11)))->Fill(gPt,
-                                              track->Phi()*180./TMath::Pi(),
-                                              nClustersTPC);
-           
+           ((TH3F *)(fQA2DList->At(10)))->Fill(gPt,
+                                               track->Phi()*180./TMath::Pi(),
+                                               nClustersTPC);  
+           if(track->Charge() > 0)
+             ((TH2F *)(fQA2DList->At(20)))->Fill(gP,track->GetTPCsignal());
+           if(track->Charge() < 0)
+             ((TH2F *)(fQA2DList->At(21)))->Fill(gP,track->GetTPCsignal());
+         }//run the qa
+
+         //Step: kStepIdentified
+         if(fProtonAnalysisBase->IsProton(track)) {
            if(track->Charge() > 0) {
-             fProtonContainer->Fill(containerInput,kStepSurvived);   
-             ((TH2F *)(fQA2DList->At(12)))->Fill(track->Eta(),
-                                                 track->Phi()*180./TMath::Pi());
-             if(fProtonAnalysisBase->GetEtaMode()) {
-               ((TH3F *)(fQA2DList->At(14)))->Fill(track->Eta(),
-                                                   track->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(15)))->Fill(track->Eta(),
-                                                   track->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(18)))->Fill(track->Eta(),
-                                                   track->Pt(),
-                                                   TMath::Abs(dca3D));
-
-             }
-             else {
-               ((TH3F *)(fQA2DList->At(14)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
-                                                   track->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(15)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
-                                                   track->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(18)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
-                                                   track->Pt(),
-                                                   TMath::Abs(dca3D));
-             }
+             nIdentifiedProtons += 1;
+             fProtonContainer->Fill(containerInput,kStepIdentified);
            }//protons
            else if(track->Charge() < 0) {
-             fAntiProtonContainer->Fill(containerInput,kStepSurvived);   
-             ((TH2F *)(fQA2DList->At(13)))->Fill(track->Eta(),
-                                                 track->Phi()*180./TMath::Pi());
-             if(fProtonAnalysisBase->GetEtaMode()) {
-               ((TH3F *)(fQA2DList->At(16)))->Fill(track->Eta(),
-                                                   track->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(17)))->Fill(track->Eta(),
-                                                   track->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(19)))->Fill(track->Eta(),
-                                                   track->Pt(),
-                                                   TMath::Abs(dca3D));
-             }
-             else {
-               ((TH3F *)(fQA2DList->At(16)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
-                                                   track->Pt(),
-                                                   dca[0]);
-               ((TH3F *)(fQA2DList->At(17)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
-                                                   track->Pt(),
-                                                   dca[1]);
-               ((TH3F *)(fQA2DList->At(19)))->Fill(fProtonAnalysisBase->Rapidity(track->Px(),track->Py(),track->Pz()),
-                                                   track->Pt(),
-                                                   TMath::Abs(dca3D));
-             }
-           }//antiprotons
+             nIdentifiedAntiProtons += 1;
+             fAntiProtonContainer->Fill(containerInput,kStepIdentified);
+           }//protons
+           
+           if(fProtonAnalysisBase->IsQARun()) FillQA(esd,vertex,track);
            
            //Step: kStepInPhaseSpace
            if(fProtonAnalysisBase->IsInPhaseSpace(track)) {
@@ -1390,15 +1407,17 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
                fAntiProtonContainer->Fill(containerInput,kStepInPhaseSpace);
              }//antiprotons
            }//Step: kStepInPhaseSpace
-         }//Step: kStepSurvived
+         }//Step: kStepIdentified
        }//Step: kStepIsPrimary
-      }//Step: kStepIdentified
+      }//Step: kStepSurvived
     }//Global tracking
   }//track loop 
   
+  delete tpcResponse;
+  
   if((nIdentifiedProtons > 0)||(nIdentifiedAntiProtons > 0))
     fHistEvents->Fill(2); //number of analyzed events with at least one (anti)proton
-
+  
   if(fProtonAnalysisBase->GetDebugMode())
     Printf("Initial number of tracks: %d | Identified (anti)protons: %d - %d | Survived (anti)protons: %d - %d",nTracks,nIdentifiedProtons,nIdentifiedAntiProtons,nSurvivedProtons,nSurvivedAntiProtons);
 }
@@ -1406,6 +1425,7 @@ void AliProtonAnalysis::Analyze(AliESDEvent* esd,
 //____________________________________________________________________//
 void AliProtonAnalysis::Analyze(AliAODEvent* const fAOD) {
   //Main analysis part - AOD
+  if(!fProtonAnalysisBase) return;
   fHistEvents->Fill(1); //number of analyzed events
   Int_t nTracks = fAOD->GetNumberOfTracks();
   for(Int_t iTracks = 0; iTracks < nTracks; iTracks++) {
@@ -1435,6 +1455,7 @@ void AliProtonAnalysis::Analyze(AliAODEvent* const fAOD) {
 void AliProtonAnalysis::Analyze(AliStack* const stack, 
                                Bool_t iInclusive) {
   //Main analysis part - MC
+  if(!fProtonAnalysisBase) return;
   fHistEvents->Fill(1); //number of analyzed events
 
   Int_t nParticles = 0;
@@ -1553,6 +1574,23 @@ void AliProtonAnalysis::SetCorrectionMapForCuts(const char* filename) {
   fCorrectForCutsFlag = kTRUE;
 }
 
+//____________________________________________________________________//
+void AliProtonAnalysis::SetCorrectionMapForTracking(const char* filename) {
+  //Reads the file with the correction maps for the tracking efficiency
+  TFile *gCorrectionForTracking = TFile::Open(filename);
+  if(!gCorrectionForTracking) {
+    Printf("The TFile object is not valid!!!");
+    return;
+  }
+  if(!gCorrectionForTracking->IsOpen()) {
+    Printf("The file is not found!!!");
+    return;
+  }
+  fHistYPtCorrectionForTrackingProtons = dynamic_cast<TH2D *>(gCorrectionForTracking->Get("gHistCorrectionForTrackingProtons"));
+  fHistYPtCorrectionForTrackingAntiProtons = dynamic_cast<TH2D *>(gCorrectionForTracking->Get("gHistCorrectionForTrackingAntiProtons"));
+  fCorrectForTrackingFlag = kTRUE;
+}
+
 //____________________________________________________________________//
 void AliProtonAnalysis::SetCorrectionMapForFeedDown(const char* filename) {
   //Reads the file with the correction maps for the feed-down contamination
@@ -1623,6 +1661,9 @@ void AliProtonAnalysis::Correct() {
   //Correct the protons for the cut efficiency
   if(fCorrectForCutsFlag)
     fHistYPtProtonsCorrected->Multiply(fHistYPtCorrectionForCutsProtons);
+  //Correct the protons for the tracking efficiency
+  if(fCorrectForTrackingFlag)
+    fHistYPtProtonsCorrected->Multiply(fHistYPtCorrectionForTrackingProtons);
  
   //Correct the antiprotons for the efficiency
   fHistYPtAntiProtonsCorrected = fAntiProtonContainer->ShowProjection(0,1,kStepInPhaseSpace);
@@ -1636,6 +1677,9 @@ void AliProtonAnalysis::Correct() {
   //Correct the antiprotons for the cut efficiency
    if(fCorrectForCutsFlag)
      fHistYPtAntiProtonsCorrected->Multiply(fHistYPtCorrectionForCutsAntiProtons);
+  //Correct the antiprotons for the tracking efficiency
+   if(fCorrectForTrackingFlag)
+     fHistYPtAntiProtonsCorrected->Multiply(fHistYPtCorrectionForTrackingAntiProtons);
 }
 
 //____________________________________________________________________//
@@ -1643,14 +1687,14 @@ void AliProtonAnalysis::Correct(Int_t step) {
   //Applies the correction maps to the initial containers
   fCorrectProtons = new AliCFDataGrid("correctProtons",
                                      "corrected data",
-                                     *fProtonContainer);
-  fCorrectProtons->SetMeasured(0);
+                                     *fProtonContainer,0);
+  //fCorrectProtons->SetMeasured(0);
   fCorrectProtons->ApplyEffCorrection(*(AliCFEffGrid *)fEffGridListProtons->At(step));
 
   fCorrectAntiProtons = new AliCFDataGrid("correctAntiProtons",
                                          "corrected data",
-                                         *fAntiProtonContainer);
-  fCorrectAntiProtons->SetMeasured(0);
+                                         *fAntiProtonContainer,0);
+  //fCorrectAntiProtons->SetMeasured(0);
   fCorrectAntiProtons->ApplyEffCorrection(*(AliCFEffGrid *)fEffGridListAntiProtons->At(step));
 }
 
@@ -1666,29 +1710,42 @@ Bool_t AliProtonAnalysis::ReadCorrectionContainer(const char* filename) {
     cout<<"Could not find the input CORRFW file "<<filename<<endl;
     status = kFALSE;
   }
-  TList *list = dynamic_cast<TList *>(file->Get("outputList"));
-  Int_t iRap = 0, iPt = 1;
-
-  //Calculation of efficiency/correction: Protons
-  AliCFContainer *gProtonContainer = dynamic_cast<AliCFContainer *>(list->At(0));
-  AliCFEffGrid *effProtonsStep0Step2 = new AliCFEffGrid("eff20",
-                                                       "effProtonsStep0Step2",
-                                                       *gProtonContainer);
-  effProtonsStep0Step2->CalculateEfficiency(2,0); 
-  fHistEfficiencyYPtProtons = effProtonsStep0Step2->Project(iRap,iPt);
-  fHistEfficiencyYPtProtons->Sumw2();
-
-  //Calculation of efficiency/correction: Protons
-  AliCFContainer *gAntiProtonContainer = dynamic_cast<AliCFContainer *>(list->At(1));
-  AliCFEffGrid *effAntiProtonsStep0Step2 = new AliCFEffGrid("eff20",
-                                                           "effAntiProtonsStep0Step2",
-                                                           *gAntiProtonContainer);
-  effAntiProtonsStep0Step2->CalculateEfficiency(2,0); 
-  fHistEfficiencyYPtAntiProtons = effAntiProtonsStep0Step2->Project(iRap,iPt);
-  fHistEfficiencyYPtAntiProtons->Sumw2();
-
-  Correct();
-
+  else {
+    TList *list = dynamic_cast<TList *>(file->Get("outputList"));
+    Int_t iRap = 0, iPt = 1;
+    if (list){
+      //Calculation of efficiency/correction: Protons
+      AliCFContainer *gProtonContainer = dynamic_cast<AliCFContainer *>(list->At(0));
+      AliCFContainer *gAntiProtonContainer = dynamic_cast<AliCFContainer *>(list->At(1));
+
+      if (gProtonContainer && gAntiProtonContainer){
+       AliCFEffGrid *effProtonsStep0Step2 = new AliCFEffGrid("eff20",
+                                                             "effProtonsStep0Step2",
+                                                             *gProtonContainer);
+       effProtonsStep0Step2->CalculateEfficiency(2,0);
+       fHistEfficiencyYPtProtons = (TH2D*)effProtonsStep0Step2->Project(iRap,iPt);
+       fHistEfficiencyYPtProtons->Sumw2();
+
+       //Calculation of efficiency/correction: Protons
+       AliCFEffGrid *effAntiProtonsStep0Step2 = new AliCFEffGrid("eff20",
+                                                                 "effAntiProtonsStep0Step2",
+                                                                 *gAntiProtonContainer);
+       effAntiProtonsStep0Step2->CalculateEfficiency(2,0);
+       fHistEfficiencyYPtAntiProtons = (TH2D*)effAntiProtonsStep0Step2->Project(iRap,iPt);
+       fHistEfficiencyYPtAntiProtons->Sumw2();
+       
+       Correct();
+      }
+      else {
+       cout<<"Could not retreive the proton and anti-proton correction containers"<<endl;
+       status = kFALSE;
+      }
+    }
+    else {
+      cout<<"Could not retreive the output list from the CORRW file"<<endl;
+      status = kFALSE;
+    }
+  }
   return status;
 }
 
@@ -1911,8 +1968,8 @@ Bool_t AliProtonAnalysis::ReadCorrectionContainer(const char* filename) {
  
 //____________________________________________________________________//
 void AliProtonAnalysis::InitQA() {
+  if(!fProtonAnalysisBase) return;
   //Applies the correction maps to the initial containers
-  fInitQAFlag = kTRUE;
   fGlobalQAList = new TList();
   fGlobalQAList->SetName("fGlobalQAList");
 
@@ -2011,34 +2068,20 @@ void AliProtonAnalysis::InitQA() {
   gHistAntiProtonsEtaPhi->SetStats(kTRUE);
   fQA2DList->Add(gHistAntiProtonsEtaPhi);
 
-  const Int_t nBinsdca = 290;
+  const Int_t nBinsdca = 1000;
   Double_t dcaBins[nBinsdca+1];
-  Double_t dcamin = -10., dcamax = 10.;
-  Double_t dca = -10.;
-  Double_t dcaStepLarge = 0.1;
+  Double_t dcamin = -5., dcamax = 5.;
+  Double_t dca = -5.;
   Double_t dcaStepSmall = 0.01;
   Int_t iCounter = 0;
-  while(dca <= -0.6) {
-    dcaBins[iCounter] = dcamin;
-    dcamax = dcamin + dcaStepLarge;
-    dca = dcamax;
-    dcamin = dcamax;
-    iCounter += 1;
-  }
-  while(dca <= 0.49) {
+  while(dca <= 5.) {
     dcaBins[iCounter] = dcamin;
     dcamax = dcamin + dcaStepSmall;
     dca = dcamax;
     dcamin = dcamax;
     iCounter += 1;
   }
-  while(dca <= 10.) {
-    dcaBins[iCounter] = dcamin;
-    dcamax = dcamin + dcaStepLarge;
-    dca = dcamax;
-    dcamin = dcamax;
-    iCounter += 1;
-  }
+
   const Int_t nBinsY = 9;
   const Int_t nBinsPt = 6;
   Double_t gY[nBinsY+1] = {-0.9,-0.7,-0.5,-0.3,-0.1,0.1,0.3,0.5,0.7,0.9};
@@ -2109,6 +2152,11 @@ void AliProtonAnalysis::InitQA() {
   gHistAntiProtonsDCA3DEtaPt->SetStats(kTRUE);
   fQA2DList->Add(gHistAntiProtonsDCA3DEtaPt);
 
+  TH2F *gHistPosdEdxP = new TH2F("gHistPosdEdxP","dE/dx (TPC); P [GeV/c]; dE/dx [a.u]",1000,0.05,20.05,600,0,600);
+  fQA2DList->Add(gHistPosdEdxP);
+  TH2F *gHistNegdEdxP = new TH2F("gHistNegdEdxP","dE/dx (TPC); P [GeV/c]; dE/dx [a.u]",1000,0.05,20.05,600,0,600);
+  fQA2DList->Add(gHistNegdEdxP);
+
   //========================================================//
   fQAProtonsAcceptedList = new TList();
   fQAProtonsAcceptedList->SetName("fQAProtonsAcceptedList");
@@ -2609,6 +2657,7 @@ void AliProtonAnalysis::FillQA(AliESDEvent *esd,
   Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};  //The impact parameters and their covariance.
   Double_t dca3D = 0.0;
   Float_t dcaXY = 0.0, dcaZ = 0.0;
+  if(!fProtonAnalysisBase) return;
 
   if((fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kTPC)||(fProtonAnalysisBase->GetAnalysisMode()==AliProtonAnalysisBase::kHybrid)) {
     AliExternalTrackParam *tpcTrack = (AliExternalTrackParam *)track->GetTPCInnerParam();
@@ -2660,9 +2709,11 @@ void AliProtonAnalysis::FillQA(AliESDEvent *esd,
   dca3D = TMath::Sqrt(TMath::Power(dca[0],2) +
                      TMath::Power(dca[1],2));
 
-  Int_t  fIdxInt[200];
-  Int_t nClustersITS = track->GetITSclusters(fIdxInt);
-  Int_t nClustersTPC = track->GetTPCclusters(fIdxInt);
+  //Int_t  fIdxInt[200];
+  //Int_t nClustersITS = track->GetITSclusters(fIdxInt);
+  //Int_t nClustersTPC = track->GetTPCclusters(fIdxInt);
+  Int_t nClustersITS = track->GetITSclusters(0x0);
+  Int_t nClustersTPC = track->GetTPCclusters(0x0);
 
   Float_t chi2PerClusterITS = -1;
   if (nClustersITS!=0)