]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
small fix, update of the postprocessing macro
authorlmilano <lmilano@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 11 May 2012 16:23:41 +0000 (16:23 +0000)
committerlmilano <lmilano@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 11 May 2012 16:23:41 +0000 (16:23 +0000)
PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraAOD.cxx
PWGLF/SPECTRA/PiKaPr/TestAOD/AliSpectraAODHistoManager.cxx
PWGLF/SPECTRA/PiKaPr/TestAOD/AliSpectraAODHistoManager.h
PWGLF/SPECTRA/PiKaPr/TestAOD/MainAnalysis.C

index e8cf39abd5a714d454caf5de3d1f4acbf5d279a7..f3f63e641362ff7ecb5e640205f9d2a0531880bc 100644 (file)
@@ -115,7 +115,7 @@ void AliAnalysisTaskSpectraAOD::UserExec(Option_t *)
          if(!partMC->Charge()) continue;//Skip neutrals\r
          if(TMath::Abs(partMC->Eta()) > fTrackCuts->GetEta()) continue;\r
          fHistMan->GetPtHistogram(kHistPtGen)->Fill(partMC->Pt(),partMC->IsPhysicalPrimary());\r
-\r
+         \r
          if(TMath::Abs(partMC->Y())   > fTrackCuts->GetY()  ) continue;            \r
          // check for true PID + and fill P_t histos \r
          Int_t charge = partMC->Charge() > 0 ? kChPos : kChNeg ;\r
@@ -125,37 +125,37 @@ void AliAnalysisTaskSpectraAOD::UserExec(Option_t *)
          }\r
        }\r
     }\r
-    \r
+  \r
   //main loop on tracks\r
   for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) {\r
     AliAODTrack* track = fAOD->GetTrack(iTracks);\r
     if (!fTrackCuts->IsSelected(track)) continue;\r
     \r
     fPID->FillQAHistos(fHistMan, track, fTrackCuts);\r
-\r
+    \r
     // //cut on q vectors track-by-track FIXME\r
     // if ((qPos>fTrackCuts->GetQvecMin() && qPos<fTrackCuts->GetQvecMax() && track->Eta()<0) || (qNeg>fTrackCuts->GetQvecMin() && qNeg<fTrackCuts->GetQvecMax() && track->Eta()>=0)){\r
-         \r
+    \r
     //calculate DCA for AOD track\r
     Double_t d[2], covd[3];\r
     AliAODTrack* track_clone=(AliAODTrack*)track->Clone("track_clone"); // need to clone because PropagateToDCA updates the track parameters\r
     Bool_t isDCA = track_clone->PropagateToDCA(fAOD->GetPrimaryVertex(),fAOD->GetMagneticField(),9999.,d,covd);\r
     delete track_clone;\r
     if(!isDCA)d[0]=-999;\r
-         \r
+    \r
     fHistMan->GetPtHistogram(kHistPtRec)->Fill(track->Pt(),d[0]);  // PT histo\r
-         \r
+    \r
     // get identity and charge\r
     Int_t idRec  = fPID->GetParticleSpecie(track, fTrackCuts);\r
     if(idRec == kSpUndefined) continue;\r
     Int_t charge = track->Charge() > 0 ? kChPos : kChNeg;\r
-\r
+    \r
     // rapidity cut\r
     if(!fTrackCuts->CheckYCut ((AODParticleSpecies_t)idRec)) continue;\r
-\r
+    \r
     // Fill histograms\r
     fHistMan->GetHistogram2D(kHistPtRecSigma,idRec,charge)->Fill(track->Pt(),d[0]);\r
-         \r
+    \r
     /* MC Part */\r
     if (arrayMC) {\r
       AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(track->GetLabel()));\r
@@ -178,18 +178,20 @@ void AliAnalysisTaskSpectraAOD::UserExec(Option_t *)
        if(mfl==3) isSecondaryWeak     = kTRUE; // add if(partMC->GetStatus() & kPDecay)? FIXME\r
        else       isSecondaryMaterial = kTRUE;\r
       }\r
-\r
-\r
+      \r
+     \r
       // Get true ID\r
-      Bool_t idGen     = fPID->GetParticleSpecie(partMC);\r
-      //           if(TMath::Abs(partMC->Y())   > fTrackCuts->GetY()  ) continue;          // FIXME: do we need a rapidity cut on the generated?\r
-\r
+      Int_t idGen     = fPID->GetParticleSpecie(partMC);\r
+      //if(TMath::Abs(partMC->Y())   > fTrackCuts->GetY()  ) continue;     // FIXME: do we need a rapidity cut on the generated?\r
+      \r
       // Fill histograms for primaries\r
+      //if (idRec == idGen) fHistMan->GetHistogram2D(kHistPtRecTrue,  idGen, charge)->Fill(track->Pt(),d[0]); \r
+\r
       if (isPrimary) {\r
-       fHistMan                    ->GetHistogram2D(kHistPtRecPrimary,      idGen, charge)->Fill(track->Pt(),d[0]);  // PT histo\r
+       //fHistMan                    ->GetPtHistogram(kHistPtRecPrimary)->Fill(track->Pt(),d[0]);  // PT histo\r
+       fHistMan                    ->GetHistogram2D(kHistPtRecPrimary,      idGen, charge)->Fill(track->Pt(),d[0]);\r
        if (idRec == idGen) fHistMan->GetHistogram2D(kHistPtRecTruePrimary,  idGen, charge)->Fill(track->Pt(),d[0]); \r
        fHistMan                    ->GetHistogram2D(kHistPtRecSigmaPrimary, idRec, charge)->Fill(track->Pt(),d[0]); \r
-             \r
       }\r
       //25th Apr - Muons are added to Pions -- FIXME\r
       if ( partMC->PdgCode() == 13 && idRec == kSpPion) { \r
@@ -203,7 +205,7 @@ void AliAnalysisTaskSpectraAOD::UserExec(Option_t *)
          fHistMan->GetPtHistogram(kHistPtRecTruePrimaryMuonMinus)->Fill(track->Pt(),d[0]); \r
        }\r
       }\r
-\r
+      \r
       ///..... END FIXME\r
 \r
       // Fill secondaries\r
index dd83ba84016d36875c8a45e44f6d91cb28acdfa3..9e0c7af70632652007745541bb1a67bc00219ca1 100644 (file)
@@ -262,6 +262,9 @@ TH1* AliSpectraAODHistoManager::GetHistogram1D(UInt_t histoType, UInt_t particle
   case kHistPtRecSigma:
     baseId = kHistPtRecSigmaPionPlus;
     break;
+  case kHistPtRecTrue:
+    baseId = kHistPtRecTruePionPlus;
+    break;
   case kHistPtRecTruePrimary:
     baseId = kHistPtRecTruePrimaryPionPlus;
     break;
index f5d48ed2bdc809d15d1b9eb6a3df514894b6b8c0..0b0c47f35d22d186c455c28640b62c1759a9895b 100644 (file)
@@ -51,6 +51,7 @@ namespace AliSpectraNameSpace
    {
      kHistPtGenTruePrimary,
      kHistPtRecSigma,
+     kHistPtRecTrue,
      kHistPtRecTruePrimary,
      kHistPtRecSigmaPrimary,
      kHistPtRecSigmaSecondaryMaterial,
index b55a86cb4e526ea32e56e9c6b3427e78fa7588e4..0aacd38548646c7f1f253ec5d1cc84cbf6be412a 100644 (file)
@@ -1,14 +1,5 @@
-#include <TString.h>
-#include <TStyle.h>
-#include <TSystem.h>
-#include <TFile.h>
-#include <iostream>
-#include "TFile.h"
-#include "TH1I.h"
-#include "TH2.h"
-#include "TCanvas.h"
-#include "TLegend.h"
-#include "TROOT.h"
+class AliPID;
+#include "QAPlots.C"
 
 TString Charge[]={"Pos","Neg"};
 TString Sign[]={"Plus","Minus"};
@@ -17,30 +8,22 @@ Int_t Color[3]={1,2,4};
 Int_t Marker[6]={20,21,22,24,25,26};
 Double_t projl[3]={0,20,80};
 Double_t proju[3]={10,40,90};
+Double_t Range[3]={0.3,0.3,0.5}; // LowPt range for pi k p
+enum ECharge_t {
+  kPositive,
+  kNegative,
+  kNCharges
+};
 
 
-void MainAnalysis() {
-
-  //TString fold="5SigmaPID_AOD086";
-  TString fold="5SigmaPID_AOD046";
-  Int_t ibinToCompare=-1;
-  
-  TString sname="Cent0to5_QVec0.0to100.0";ibinToCompare=0;
-  
-  //TString sname="Cent5to10_QVec0.0to100.0";ibinToCompare=1;
-  //TString sname="Cent10to20_QVec0.0to100.0";ibinToCompare=2;
-  //TString sname="Cent20to30_QVec0.0to100.0";ibinToCompare=3;
-  //TString sname="Cent30to40_QVec0.0to100.0";ibinToCompare=4;
-  
-  TString dataFile = Form("output/%s/Pt.AOD.1._data_ptcut_%s.root",fold.Data(),sname.Data());
-  TString mcFile =Form("output/%s/Pt.AOD.1._MC_%s.root",fold.Data(),sname.Data());
+void MainAnalysis()  {
   
   gSystem->Load("libCore.so");  
-  gSystem->Load("libGeom.so");
+  //gSystem->Load("libGeom.so");
   gSystem->Load("libPhysics.so");
-  gSystem->Load("libVMC");
+  //gSystem->Load("libVMC");
   gSystem->Load("libTree");
-  gSystem->Load("libProof");
+  //gSystem->Load("libProof");
   gSystem->Load("libMatrix");
   gSystem->Load("libSTEERBase");
   gSystem->Load("libESD");
@@ -51,10 +34,25 @@ void MainAnalysis() {
   gSystem->Load("libTENDER");
   gSystem->Load("libCORRFW");
   //gSystem->Load("libPWG0base");
-  gSystem->Load("libMinuit");
+  //gSystem->Load("libMinuit");
   gSystem->Load("libPWGTools");
   gSystem->Load("libPWGLFSPECTRA");
   gSystem->AddIncludePath("-I$ALICE_ROOT/include");
+  // Set Masses
+  Double_t mass[3];
+  mass[0]   = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
+  mass[1]   = TDatabasePDG::Instance()->GetParticle("K+")->Mass();
+  mass[2] = TDatabasePDG::Instance()->GetParticle("proton")->Mass();
+  
+  //TString fold="3SigmaPID_AOD086-090_FilterBit10";
+  TString fold="5SigmaPID_AOD046_FilterBit6";
+  Int_t ibinToCompare=-1;
+  
+  TString sname="Cent0to5_QVec0.0to100.0";ibinToCompare=0;
+  
+  TString dataFile = Form("output/%s/Pt.AOD.1._data_ptcut_%s.root",fold.Data(),sname.Data());
+  TString mcFile =Form("output/%s/Pt.AOD.1._MC_%s.root",fold.Data(),sname.Data());
   gStyle->SetPalette(1);
   
   // Open root MC file and get classes
@@ -78,122 +76,8 @@ void MainAnalysis() {
   ecuts_data->PrintCuts();
   tcuts_data->PrintCuts();
   
-  //dedx in data and MC
-  TCanvas *cPIDSig=new TCanvas("cPIDSig","cPIDSig",700,500);
-  cPIDSig->Divide(2,2);
-  cPIDSig->cd(1);
-  TH2F *PIDSig_data = (TH2F*)((TH2F*)hman_data->GetPIDHistogram("histPIDTPC"))->Clone();
-  gPad->SetLogz();
-  gPad->SetGridy();
-  gPad->SetGridx();
-  PIDSig_data->DrawClone("colz");
-  cPIDSig->cd(2);
-  TH2F *PIDSig_mc = (TH2F*)((TH2F*)hman_mc->GetPIDHistogram("histPIDTPC"))->Clone();
-  gPad->SetLogz();
-  gPad->SetGridy();
-  gPad->SetGridx();
-  PIDSig_mc->DrawClone("colz");
-  cPIDSig->cd(3);
-  TH2F *PIDSig_data = (TH2F*)((TH2F*)hman_data->GetPIDHistogram("histPIDTOF"))->Clone();
-  gPad->SetLogz();
-  gPad->SetGridy();
-  gPad->SetGridx();
-  PIDSig_data->DrawClone("colz");
-  cPIDSig->cd(4);
-  TH2F *PIDSig_mc = (TH2F*)((TH2F*)hman_mc->GetPIDHistogram("histPIDTOF"))->Clone();
-  gPad->SetLogz();
-  gPad->SetGridy();
-  gPad->SetGridx();
-  PIDSig_mc->DrawClone("colz");
+  //QAPlots(hman_data,hman_mc);
 
-  //nsig in data and MC
-  for(Int_t ipart=0;ipart<3;ipart++){
-    TCanvas *cnsig=new TCanvas(Form("cnsig%s",Particle[ipart].Data()),Form("cnsig%s",Particle[ipart].Data()),700,500);
-    cnsig->Divide(2,3);
-    cnsig->cd(1);
-    TH2F *nsig_data = (TH2F*)((TH2F*)hman_data->GetNSigHistogram(Form("histNSig%sPtTPC",Particle[ipart].Data())))->Clone();
-    nsig_data->SetXTitle("Pt (GeV/c)");
-    gPad->SetLogz();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    nsig_data->DrawClone("colz");
-    cnsig->cd(2);
-    TH2F *nsig_mc = (TH2F*)((TH2F*)hman_mc->GetNSigHistogram(Form("histNSig%sPtTPC",Particle[ipart].Data())))->Clone();
-    nsig_mc->SetXTitle("Pt (GeV/c)");
-    gPad->SetLogz();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    nsig_mc->DrawClone("colz");
-    cnsig->cd(3);
-    TH2F *nsig_data = (TH2F*)((TH2F*)hman_data->GetNSigHistogram(Form("histNSig%sPtTOF",Particle[ipart].Data())))->Clone();
-    nsig_data->SetXTitle("Pt (GeV/c)");
-    gPad->SetLogz();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    nsig_data->DrawClone("colz");
-    cnsig->cd(4);
-    TH2F *nsig_mc = (TH2F*)((TH2F*)hman_mc->GetNSigHistogram(Form("histNSig%sPtTOF",Particle[ipart].Data())))->Clone();
-    nsig_mc->SetXTitle("Pt (GeV/c)");
-    gPad->SetLogz();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    nsig_mc->DrawClone("colz");
-    cnsig->cd(5);
-    TH2F *nsig_data = (TH2F*)((TH2F*)hman_data->GetNSigHistogram(Form("histNSig%sPtTPCTOF",Particle[ipart].Data())))->Clone();
-    nsig_data->SetXTitle("Pt (GeV/c)");
-    gPad->SetLogz();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    nsig_data->DrawClone("colz");
-    cnsig->cd(6);
-    TH2F *nsig_mc = (TH2F*)((TH2F*)hman_mc->GetNSigHistogram(Form("histNSig%sPtTPCTOF",Particle[ipart].Data())))->Clone();
-    nsig_mc->SetXTitle("Pt (GeV/c)");
-    gPad->SetLogz();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    nsig_mc->DrawClone("colz");
-  }
-  //qvec in data and MC
-  for (Int_t icharge=0;icharge<2;icharge++){
-    TCanvas *cqvec=new TCanvas(Form("cqvec%s",Charge[icharge].Data()),Form("cqvec%s",Charge[icharge].Data()),700,500);
-    cqvec->Divide(2,1);
-    cqvec->cd(1);
-    TString hname=Form("histq%s",Charge[icharge].Data());
-    TH2F *qvec_data = (TH2F*)((TH2F*)hman_data->GetqVecHistogram(hname.Data()))->Clone();
-    gPad->SetLogz();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    qvec_data->DrawClone("colz");
-    cqvec->cd(2);
-    TH2F *qvec_mc = (TH2F*)((TH2F*)hman_mc->GetqVecHistogram(hname.Data()))->Clone();
-    gPad->SetLogz();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    qvec_mc->DrawClone("colz");
-    
-    TCanvas *cProjqvec=new TCanvas(Form("cProjqvec%s",Charge[icharge].Data()),Form("cProjqvec%s",Charge[icharge].Data()),700,500);
-    cProjqvec->Divide(3,2);
-    for(Int_t iproj=0;iproj<3;iproj++){
-      TH1F *proj_data=(TH1F*)qvec_data->ProjectionX("data",qvec_data->GetYaxis()->FindBin(projl[iproj]),qvec_data->GetYaxis()->FindBin(proju[iproj]));
-      if(proj_data->GetEntries()==0)continue;
-      proj_data->Scale(1/proj_data->GetEntries());
-      proj_data->SetTitle(Form("data q%s [%.0f,%.0f]",Charge[icharge].Data(),projl[iproj],proju[iproj]));
-      TH1F *proj_mc=(TH1F*)qvec_mc->ProjectionX("mc",qvec_mc->GetYaxis()->FindBin(projl[iproj]),qvec_mc->GetYaxis()->FindBin(proju[iproj]));
-      proj_mc->Scale(1/proj_mc->GetEntries());
-      proj_mc->SetTitle(Form("mc q%s [%.0f,%.0f]",Charge[icharge].Data(),projl[iproj],proju[iproj]));
-      proj_mc->SetLineColor(2);
-      cProjqvec->cd(iproj+1);
-      gPad->SetGridy();
-      gPad->SetGridx();
-      proj_data->DrawClone();
-      proj_mc->DrawClone("same");
-      gPad->BuildLegend();
-      proj_data->Divide(proj_mc);
-      cProjqvec->cd(iproj+4);
-      proj_data->DrawClone();
-    }
-  }
-  
   //efficiencies
   Printf("\n\n-> Calculating MC Correction Factors");
   TH1F *CorrFact[6];
@@ -204,10 +88,10 @@ void MainAnalysis() {
       Int_t index=ipart+3*icharge;
       //BE CAREFUL! depending on the efficiency you choose, you must change the DCA correction (data or data/mc)
       
-      TString hname=Form("histPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data()); //MC correction for Prim+Cont+Eff
-      //TString hname=Form("histPtRecTrue%s%s",Particle[ipart].Data(),Sign[icharge].Data());//MC correction for Prim+Eff
-      //TString hname=Form("histPtRecSigmaPrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());UseMCDCACorrection=kFALSE; //MC correction for Cont+Eff
-      //TString hname=Form("histPtRecTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());UseMCDCACorrection=kFALSE; // Pure MC efficiency for Prim. BE CAREFUL WITH MUONS!!!
+      TString hname=Form("hHistPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data()); //MC correction for Prim+Cont+Eff
+      //TString hname=Form("hHistPtRecTrue%s%s",Particle[ipart].Data(),Sign[icharge].Data());//MC correction for Prim+Eff
+      //TString hname=Form("hHistPtRecSigmaPrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());UseMCDCACorrection=kFALSE; //MC correction for Cont+Eff
+      //TString hname=Form("hHistPtRecTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());UseMCDCACorrection=kFALSE; // Pure MC efficiency for Prim. BE CAREFUL WITH MUONS!!!
       Printf("Getting %s",hname.Data());
       CorrFact[index]=(TH1F*)((TH1F*) hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
       CorrFact[index]->SetName(Form("CorrFact_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
@@ -215,23 +99,26 @@ void MainAnalysis() {
       CorrFact[index]->SetMarkerStyle(Marker[index]);
       CorrFact[index]->SetMarkerColor(Color[ipart]);
       CorrFact[index]->SetLineColor(Color[ipart]);
-      hname=Form("histPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
+      hname=Form("hHistPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
       Printf("... and divide it by %s",hname.Data());
       CorrFact[index]->Divide(CorrFact[index],(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),1,1))->Clone(),1,1,"B");//binomial error
       if(index==0)CorrFact[index]->DrawClone();
       else CorrFact[index]->DrawClone("same");
     }
   } 
+  
   TFile *fESD=new TFile("EffAlex/pionEffPbPb.root");
   TH1F *hEffESD=(TH1F*)fESD->Get("effMapPionTpcOnlyNeg0");
   hEffESD->DrawClone("same");
   gPad->BuildLegend();
   
-    //Normalization
+  //Normalization
   printf("\n\n-> Spectra Normalization");
   AliSpectraAODEventCuts* ecuts_data = (AliSpectraAODEventCuts*) _data->Get("Event Cuts");
   Double_t events_data =  ecuts_data->NumberOfEvents();
   Printf(": accepted events: %.0f",events_data);
+  Double_t events_mc =  ecuts_mc->NumberOfEvents();
+  Printf(": accepted events (MC): %.0f",events_mc);
   
   //divide RAW for Correction Factor
   Printf("\n\n-> Using MC correction factor to correct RAW spectra");
@@ -239,7 +126,7 @@ void MainAnalysis() {
   for(Int_t icharge=0;icharge<2;icharge++){
     for(Int_t ipart=0;ipart<3;ipart++){
       Int_t index=ipart+3*icharge;
-      TString hname=Form("histPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data());
+      TString hname=Form("hHistPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data());
       printf("Getting %s",hname.Data());
       Spectra[index] =(TH1F*)((TH1F*) hman_data->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
       Spectra[index]->SetName(Form("Spectra_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
@@ -248,122 +135,65 @@ void MainAnalysis() {
       Spectra[index]->SetMarkerColor(Color[ipart]);
       Spectra[index]->SetLineColor(Color[ipart]);
       Printf("... and divide it by %s",hname.Data());
-      Spectra[index]->Divide(CorrFact[index]);//////////////////////////////////////////////////////////////////////////////////////////FIXME
-      // if(index!=3)Spectra[index]->Divide(CorrFact[index]);
-      // else{
-      //       Spectra[index]=AliPWGHistoTools::MyDivideHistosDifferentBins(Spectra[index],hEffESD);
-      // }
+      Spectra[index]->Divide(CorrFact[index]);
       Spectra[index]->Scale(1./events_data,"width");//NORMALIZATION
     }
   } 
   
-  
-  //Geant/Fluka Correction
-  Printf("\nGF correction for Kaons");
-  TString fnameGeanFlukaK="GFCorrection/correctionForCrossSection.321.root";
-  TFile *fGeanFlukaK= new TFile(fnameGeanFlukaK.Data());
-  TH1F *hGeantFlukaKPos=(TH1F*)fGeanFlukaK->Get("gHistCorrectionForCrossSectionParticles");
-  TH1F *hGeantFlukaKNeg=(TH1F*)fGeanFlukaK->Get("gHistCorrectionForCrossSectionAntiParticles");
-  for(Int_t binK=0;binK<=Spectra[1]->GetNbinsX();binK++){
-    Float_t FlukaCorrKPos=hGeantFlukaKPos->GetBinContent(hGeantFlukaKPos->FindBin(Spectra[1]->GetBinCenter(binK)));
-    Float_t FlukaCorrKNeg=hGeantFlukaKNeg->GetBinContent(hGeantFlukaKNeg->FindBin(Spectra[4]->GetBinCenter(binK)));
-    Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrKPos);
-    Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrKNeg);
-    Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrKPos);
-    Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrKNeg);
-  }
-  
-  //Geant Fluka for P
-  Printf("\nGF correction for Protons");
-  const Int_t kNCharge=2;
-  Int_t kPos=0;
-  Int_t kNeg=1;
-  TFile* fGFProtons = new TFile ("GFCorrection/correctionForCrossSection.root");
-  TH2D * hCorrFluka[kNCharge];
-  TH2D * hCorrFluka[2];
-  hCorrFluka[kPos] = (TH2D*)fGFProtons->Get("gHistCorrectionForCrossSectionProtons");
-  hCorrFluka[kNeg] = (TH2D*)fGFProtons->Get("gHistCorrectionForCrossSectionAntiProtons");
-  for(Int_t icharge = 0; icharge < kNCharge; icharge++){
-    Int_t nbins = Spectra[2]->GetNbinsX();
-    Int_t nbinsy=hCorrFluka[icharge]->GetNbinsY();
-    for(Int_t ibin = 0; ibin < nbins; ibin++){
-      Float_t pt = Spectra[2]->GetBinCenter(ibin);
-      Float_t minPtCorrection = hCorrFluka[icharge]->GetYaxis()->GetBinLowEdge(1);
-      Float_t maxPtCorrection = hCorrFluka[icharge]->GetYaxis()->GetBinLowEdge(nbinsy+1);
-      if (pt < minPtCorrection) pt = minPtCorrection+0.0001;
-      if (pt > maxPtCorrection) pt = maxPtCorrection;
-      Float_t correction = hCorrFluka[icharge]->GetBinContent(1,hCorrFluka[icharge]->GetYaxis()->FindBin(pt));
-      //cout<<correction<<"     charge "<<icharge<<endl;
-      if(icharge==0){
-       if (correction != 0) {// If the bin is empty this is a  0
-         Spectra[2]->SetBinContent(ibin,Spectra[2]->GetBinContent(ibin)*correction);
-         Spectra[2]->SetBinError(ibin,Spectra[2]->GetBinError  (ibin)*correction);
-       }else if (Spectra[2]->GetBinContent(ibin) > 0) { // If we are skipping a non-empty bin, we notify the user
-         cout << "Fluka/GEANT: Not correcting bin "<<ibin << " for protons secondaries," << endl;
-         cout << " Bin content: " << Spectra[2]->GetBinContent(ibin)  << endl;
-       }
-      }
-      if(icharge==1){
-       if (correction != 0) {// If the bin is empty this is a  0
-         Spectra[5]->SetBinContent(ibin,Spectra[5]->GetBinContent(ibin)*correction);
-         Spectra[5]->SetBinError(ibin,Spectra[5]->GetBinError  (ibin)*correction);
-       }else if (Spectra[5]->GetBinContent(ibin) > 0) { // If we are skipping a non-empty bin, we notify the user
-         cout << "Fluka/GEANT: Not correcting bin "<<ibin << " for Antiprotons secondaries," << endl;
-         cout << " Bin content: " << Spectra[5]->GetBinContent(ibin)  << endl;
-       }
+  //Put Bin Content = 0
+  for(Int_t icharge=0;icharge<2;icharge++){
+    for(Int_t ipart=0;ipart<3;ipart++){
+      Int_t index=ipart+3*icharge;
+      for(Int_t ibin=0;ibin<Spectra[index]->GetNbinsX();ibin++){
+       if(Spectra[index]->GetBinCenter(ibin)<Range[ipart]){
+         Spectra[index]->SetBinContent(ibin,0);
+         Spectra[index]->SetBinError(ibin,0);
+       }
       }
-    }  
+    }
   }
-  
-  //DCA Correction
-  printf("\n\n-> DCA Correction");
+  //DCA Correction with the "right" DCA sample
   DCACorrection(Spectra,hman_data,hman_mc,UseMCDCACorrection);
   
+  //DCA Correction forcing loose DCA
+  // TString fold_LooseDCA="5SigmaPID_AOD046_FilterBit5";
+  // TString dataFile_LooseDCA = Form("output/%s/Pt.AOD.1._data_ptcut_%s.root",fold_LooseDCA.Data(),sname.Data());
+  // TString mcFile_LooseDCA =Form("output/%s/Pt.AOD.1._MC_%s.root",fold_LooseDCA.Data(),sname.Data());
+  // TFile *_mc_LooseDCA = TFile::Open(mcFile_LooseDCA.Data());
+  // AliSpectraAODHistoManager* hman_mc_LooseDCA = (AliSpectraAODHistoManager*) _mc_LooseDCA->Get("SpectraHistos");
+  // TFile *_data_LooseDCA = TFile::Open(dataFile_LooseDCA.Data());
+  // AliSpectraAODHistoManager* hman_data_LooseDCA = (AliSpectraAODHistoManager*) _data_LooseDCA->Get("SpectraHistos");
+  // DCACorrection(Spectra,hman_data_LooseDCA,hman_mc_LooseDCA,UseMCDCACorrection);
+  
+  
+  
+  
+  
+  //GFCorrection
+  GFCorrection(Spectra,tcuts_data);
   
   TH1F *MCTruth[6];
   for(Int_t icharge=0;icharge<2;icharge++){
     for(Int_t ipart=0;ipart<3;ipart++){
       Int_t index=ipart+3*icharge;
-      hname=Form("histPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
-      MCTruth[index]=(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),0.9,1.1))->Clone();
-      MCTruth[index]->Scale(1./events_data,"width");//NORMALIZATION
+      hname=Form("hHistPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
+      MCTruth[index]=(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),1,1))->Clone();
+      MCTruth[index]->SetName(Form("MCTruth_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
+      MCTruth[index]->SetTitle(Form("MCTruth_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
+      MCTruth[index]->Scale(1./events_mc,"width");//NORMALIZATION
     }
   }
   
-  //Contamination
-  Printf("\n\n-> Contamination from MC");
-  TH1F *Cont[6];
-  TCanvas *ccont=new TCanvas("ccont","ccont",700,500);
-  for(Int_t icharge=0;icharge<2;icharge++){
-    for(Int_t ipart=0;ipart<3;ipart++){
-      Int_t index=ipart+3*icharge;
-      TString hname=Form("histPtRecTrue%s%s",Particle[ipart].Data(),Sign[icharge].Data());
-      Printf("Getting %s",hname.Data());
-      Cont[index] =(TH1F*)((TH1F*) hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
-      Cont[index]->SetName(Form("Cont_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
-      Cont[index]->SetTitle(Form("RecTrue/RecSigma %s%s",Particle[ipart].Data(),Sign[icharge].Data()));
-      Cont[index]->SetMarkerStyle(Marker[index]);
-      Cont[index]->SetMarkerColor(Color[ipart]);
-      Cont[index]->SetLineColor(Color[ipart]);
-      hname=Form("histPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data());
-      Printf("... and divide it by %s",hname.Data());
-      Cont[index]->Divide((TH1F*) hman_mc->GetPtHistogram1D(hname.Data(),-1,-1));
-      if(index==0)Cont[index]->DrawClone();
-      else Cont[index]->DrawClone("same");
-      //Spectra[index]->Multiply(Cont[index]);
-    }
-  } 
-  gPad->BuildLegend();
-  
-  
   //Drawing Final Spectra
   TCanvas *cspectra=new TCanvas("cspectra","cspectra",700,500);
+  gPad->SetGridy();
+  gPad->SetGridy();
+  gPad->SetLogy();
   for(Int_t icharge=0;icharge<2;icharge++){
     for(Int_t ipart=0;ipart<3;ipart++){
       Int_t index=ipart+3*icharge;
       if(index==0)Spectra[index]->DrawClone();
       else Spectra[index]->DrawClone("same");
-      //MCTruth[index]->DrawClone("same");
     }
   } 
   gPad->BuildLegend();
@@ -380,156 +210,237 @@ void MainAnalysis() {
     }
   }
   
-  
   //if Bin 0-5% with no cut ratio with combined analysis
   if(ibinToCompare!=-1){
     TCanvas *CratioComb=new TCanvas("CratioComb","CratioComb",700,500);
     CratioComb->Divide(3,2);
     TString nameComb[6]={Form("cent%d_pion_plus",ibinToCompare),Form("cent%d_kaon_plus",ibinToCompare),Form("cent%d_proton_plus",ibinToCompare),
                         Form("cent%d_pion_minus",ibinToCompare),Form("cent%d_kaon_minus",ibinToCompare),Form("cent%d_proton_minus",ibinToCompare)};
-    TFile *fComb=new TFile("Combined05/SPECTRA_COMB_20120323.root");
+    TFile *fComb=new TFile("Combined05/SPECTRA_COMB_20120412.root");
+    TH1F *Spectra_copy[6]=0x0;
     for(Int_t icharge=0;icharge<2;icharge++){
       for(Int_t ipart=0;ipart<3;ipart++){
-       Int_t index=ipart+3*icharge;
-       Spectra[index]->GetXaxis()->SetRangeUser(0,2.5);
+       Int_t index=ipart+3*icharge;
+       TH1F *htmp=(TH1F*)((TH1F*)Spectra[index])->Clone("");
+       htmp->GetXaxis()->SetRangeUser(0,2.5);
        TH1F *hcomb=fComb->Get(nameComb[index].Data())->Clone();
        CratioComb->cd(ipart+1);
        gPad->SetGridy();
        gPad->SetGridx();
-       if(icharge==0)Spectra[index]->DrawClone();
-       else Spectra[index]->DrawClone("same");
+       if(icharge==0)htmp->DrawClone();
+       else htmp->DrawClone("same");
        hcomb->DrawClone("same");
-       Spectra[index]->Divide(hcomb);
-       Spectra[index]->SetMaximum(1.3);
-       Spectra[index]->SetMinimum(0.7);
+       htmp->Divide(hcomb);
+       htmp->SetMaximum(1.3);
+       htmp->SetMinimum(0.7);
        CratioComb->cd(ipart+4);
        gPad->SetGridy();
        gPad->SetGridx();
-       if(icharge==0)Spectra[index]->DrawClone();
-       else Spectra[index]->DrawClone("same");
+       if(icharge==0)htmp->DrawClone();
+       else htmp->DrawClone("same");
       }
     }
   }    
   
-
-  
   //comparison with charged hadron
   Printf("\n\n-> ChargedHadron comparison");
   TCanvas *cAllCh=new TCanvas("cAllCh","cAllCh",700,500);
-  cAllCh->Divide(1,4);
-  TH1F *hChHad_data=(TH1F*)((TH1F*)hman_data->GetPtHistogram1D("histPtRec",-1,-1))->Clone();
+  cAllCh->Divide(1,2);
+  TH1F *hChHad_data=(TH1F*)((TH1F*)hman_data->GetPtHistogram1D("hHistPtRec",-1,-1))->Clone();
   //fraction of sec in MC
-  TH1F *hPrimRec_mc=(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("histPtRecPrimary",-1,-1))->Clone();
-  TH1F *hAllRec_mc=(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("histPtRec",-1,-1))->Clone();
+  TH1F *hPrimRec_mc=(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("hHistPtRecPrimary",-1,-1))->Clone();
+  TH1F *hAllRec_mc=(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("hHistPtRec",-1,-1))->Clone();
   for(Int_t ibin=1;ibin<=hChHad_data->GetNbinsX();ibin++){
     Double_t en_data=hChHad_data->GetBinContent(ibin);
     Double_t en_mc=hAllRec_mc->GetBinContent(ibin);
     Double_t prim_mc=hPrimRec_mc->GetBinContent(ibin);
-    if(en_mc!=0)hChHad_data->SetBinContent(ibin,en_data-(en_data*(en_mc-prim_mc)*1.2/en_mc));
+    if(en_mc!=0)hChHad_data->SetBinContent(ibin,en_data-(en_data*(en_mc-prim_mc)*1.1/en_mc));
     Printf("Before: %.0f After: %.0f  fraction: %.1f",en_data,hChHad_data->GetBinContent(ibin),hChHad_data->GetBinContent(ibin)/en_data);
   }
-  cAllCh->cd(1);
-  gPad->SetGridy();
-  gPad->SetGridx();
   hPrimRec_mc->Divide(hAllRec_mc);
-  hPrimRec_mc->DrawClone();
   //efficiency for primaries
-  TH1F *hEff_mc=(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("histPtRecPrimary",-1,-1))->Clone();
-  hEff_mc->Divide((TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("histPtGen",1,1))->Clone());
-  Printf("+-------------------------------------%f ",((TH1F*)hman_mc->GetPtHistogram1D("histPtGen",1,1))->GetEntries()/1.6/ecuts_mc->NumberOfEvents());
+  TH1F *hEff_mc=(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("hHistPtRecPrimary",-1,-1))->Clone();
+  hEff_mc->Divide((TH1F*)((TH1F*)hman_mc->GetPtHistogram1D("hHistPtGen",1,1))->Clone());
+  //Printf("--------%f ",((TH1F*)hman_mc->GetPtHistogram1D("hHistPtGen",1,1))->GetEntries()/1.6/ecuts_mc->NumberOfEvents());
   hChHad_data->Scale(1./events_data,"width");//NORMALIZATION
   hChHad_data->Divide(hEff_mc);//Efficiency
   hChHad_data->Scale(1./(2*tcuts_data->GetEta()));
-  cAllCh->cd(2);
-  gPad->SetGridy();
-  gPad->SetGridx();
-  hEff_mc->DrawClone();
-  cAllCh->cd(3);
+  hChHad_data->SetTitle("All Ch from AOD");
+  cAllCh->cd(1);
   gPad->SetGridy();
   gPad->SetGridx();
   hChHad_data->DrawClone();
   TFile *fCh=new TFile("ChargedHadron/SPECTRA_UNID_110906.root");
   TH1F *hCh=fCh->Get("hpt_c0_5");
+  hCh->SetTitle("All Ch from Jacek");
+  hCh->SetMarkerColor(2);
+  hCh->SetLineColor(2);
   //invariant yield
   for(Int_t ibin=0;ibin<hCh->GetNbinsX();ibin++){
     hCh->SetBinContent(ibin,hCh->GetBinContent(ibin)*(2*TMath::Pi()*hCh->GetBinCenter(ibin)));
     hCh->SetBinError(ibin,hCh->GetBinError(ibin)*(2*TMath::Pi()*hCh->GetBinCenter(ibin)));
   }
   hCh->DrawClone("same");
+  gPad->BuildLegend();
   TH1F *gRatio=AliPWGHistoTools::MyDivideHistosDifferentBins(hChHad_data,hCh);
-  gRatio->SetMaximum(1.5);
-  gRatio->SetMinimum(.5);
-  cAllCh->cd(4);
+  gRatio->SetMaximum(1.3);
+  gRatio->SetMinimum(.7);
+  cAllCh->cd(2);
   gPad->SetGridy();
   gPad->SetGridx();
   gRatio->DrawClone("");
-  
-  // //Comparison of efficiency with TPCTOF ESD analysis
-  Printf("\n\n-> Calculating Efficiency to be compared with ESD analysis");
-  TH1F *EffTRUEPions;
-  TH1F *EffSIGMAPions;
-  TCanvas *cEffESD=new TCanvas("cEffESD","cEffESD",700,500);
-  cEffESD->Divide(1,2);
-  Int_t icharge=1;
-  Int_t ipart=0;
-  //using MC truth
-  TString hname=Form("histPtRecTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
-  Printf("Getting %s",hname.Data());
-  EffTRUEPions=(TH1F*)((TH1F*) hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
-  EffTRUEPions->SetName(Form("Eff TRUE_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
-  EffTRUEPions->SetTitle(Form("Eff TRUE %s%s",Particle[ipart].Data(),Sign[icharge].Data()));
-  EffTRUEPions->SetMarkerStyle(Marker[icharge]);
-  EffTRUEPions->SetMarkerColor(Color[ipart]);
-  EffTRUEPions->SetLineColor(Color[ipart]);
-  hname=Form("histPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
-  Printf("... and divide it by %s",hname.Data());
-  EffTRUEPions->Divide(EffTRUEPions,(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),1,1))->Clone(),1,1,"B");//binomial error
-  //using NSigma
-  hname=Form("histPtRecSigmaPrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
-  Printf("Getting %s",hname.Data());
-  EffSIGMAPions=(TH1F*)((TH1F*) hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
-  EffSIGMAPions->SetName(Form("Eff SIGMA_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
-  EffSIGMAPions->SetTitle(Form("Eff SIGMA %s%s",Particle[ipart].Data(),Sign[icharge].Data()));
-  EffSIGMAPions->SetMarkerStyle(Marker[icharge]);
-  EffSIGMAPions->SetMarkerColor(Color[ipart+1]);
-  EffSIGMAPions->SetLineColor(Color[ipart+1]);
-  hname=Form("histPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
-  Printf("... and divide it by %s",hname.Data());
-  EffSIGMAPions->Divide(EffSIGMAPions,(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),1,1))->Clone(),1,1,"B");//binomial error
-  cEffESD->cd(1);
-  EffTRUEPions->DrawClone("lhist");
-  EffSIGMAPions->DrawClone("lhistsame");
-  hEffESD->DrawClone("lhistsame");
+  //fitting
+  TCanvas *cFitChargHad=new TCanvas("cFitChargHad","cFitChargHad",700,500);
+  gPad->SetGridy();
+  gPad->SetGridx();
+  hChHad_data->DrawClone();
+  //Fitting the sum of all particles
+  AliPWGFunc * fm = new AliPWGFunc;
+  fm->SetVarType(AliPWGFunc::kdNdpt);
+  Float_t fitmin = 0.3;
+  Float_t fitmax = 3;
+  TF1 * func = 0;
+  Int_t normPar = 0;
+  func = fm->GetBGBW(0.13,0.6,0.3, 1, 1e5);
+  func->SetParLimits(1, 0.1, 0.99);
+  func->SetParLimits(2, 0.01, 1);
+  func->SetParLimits(3, 0.01, 2);
+  TH1F * hToFit = hChHad_data;
+  hToFit->Fit(func,"N","VMRN",fitmin,fitmax);
+  // // if(!AliPWGHistoTools::Fit(hToFit,func,fitmin,fitmax)) {
+  // //   cout << " FIT ERROR " << endl;
+  // //   return;      
+  // // }
+  Double_t yieldTools, yieldETools;
+  Double_t partialYields[3],partialYieldsErrors[3]; 
+  AliPWGHistoTools::GetYield(hToFit, func, yieldTools, yieldETools,0, 100, partialYields,partialYieldsErrors);
+  func->DrawClone("same");   
+  Printf("TOTAL YIELD (AOD Charged Hadron) : %f +- %f",yieldTools,yieldETools);
+  //Fit All Charged
+  hToFit = hCh;
+  hToFit->Fit(func,"N","VMRN",fitmin,fitmax);
+  AliPWGHistoTools::GetYield(hToFit, func, yieldTools, yieldETools,0, 100, partialYields,partialYieldsErrors);
+  func->SetLineColor(2);
+  hCh->DrawClone("same");
+  func->DrawClone("same");   
+  gPad->BuildLegend();
+  Printf("TOTAL YIELD (JACEK): %f +- %f",yieldTools,yieldETools);
+  //sumID vs AllCh
+  //Convert spectra to dNdeta and sum
+  TH1F * hsum = (TH1F*) Spectra[0]->Clone();
+  hsum->Reset("all");
+  Double_t epsilon = 0.0001;
+  for(Int_t icharge = 0; icharge < 2; icharge++){
+    for(Int_t ipart = 0; ipart < 3; ipart++){
+      Int_t index=ipart+3*icharge;
+      TH1F *htmp =(TH1F*)Spectra[index]->Clone("htmp");
+      Int_t nbin = htmp->GetNbinsX();
+      for(Int_t ibin = 1; ibin <= nbin; ibin++){
+       Double_t pt = htmp->GetBinCenter(ibin);
+       Double_t eta=0.8;//////////////////eta range///////////////////////////////////////
+       Double_t jacobian =eta2y(pt,mass[ipart],eta)/eta;
+       //Printf("jacobian: %f pt:%f   BinContent:%f  mass:%f",jacobian,pt,htmp->GetBinContent(ibin),mass[ipart]);
+       htmp->SetBinContent(ibin,htmp->GetBinContent(ibin)*jacobian);
+       htmp->SetBinError(ibin,htmp->GetBinError(ibin)*jacobian);
+       Int_t ibinSum = hsum->FindBin(pt);
+       if ( htmp->GetBinContent(ibin) > 0 && 
+            (TMath::Abs(htmp->GetBinLowEdge(ibin)   - hsum->GetBinLowEdge(ibinSum)) > epsilon || 
+             TMath::Abs(htmp->GetBinLowEdge(ibin+1) - hsum->GetBinLowEdge(ibinSum+1)) )
+            ) {
+         cout << "DISCREPANCY IN BIN RANGES" << endl;
+         cout << pt << " " << ibinSum << " " << ibin  << "; " << h->GetBinContent(ibin) << endl
+              << h->GetBinLowEdge(ibin) << "-"  << h->GetBinLowEdge(ibin+1) << endl
+              << hsum->GetBinLowEdge(ibinSum) << "-"  << hsum->GetBinLowEdge(ibinSum+1) << endl;
+         cout << "" << endl;       
+       }
+      }
+      hsum->Add(htmp);
+    }
+  }
+  hsum->SetTitle("Sum ID from AOD");
+  TCanvas *cChargHadComp=new TCanvas("cChargHadComp","cChargHadComp",700,500);
+  cChargHadComp->Divide(1,2);
+  cChargHadComp->cd(1);
+  gPad->SetGridy();
+  gPad->SetGridx();
+  hsum->DrawClone();
+  hToFit = hsum;
+  hToFit->Fit(func,"N","VMRN",fitmin,fitmax);
+  AliPWGHistoTools::GetYield(hToFit, func, yieldTools, yieldETools,0, 100, partialYields,partialYieldsErrors);
+  func->SetLineColor(2);
+  Printf("TOTAL YIELD (Pi+K+p): %f +- %f",yieldTools,yieldETools);
+  hChHad_data->SetMarkerColor(2);
+  hChHad_data->SetLineColor(2);
+  hChHad_data->DrawClone("same");
   gPad->BuildLegend();
-  cEffESD->cd(2);
-  TH1F *hRatioTRUE=AliPWGHistoTools::MyDivideHistosDifferentBins(EffTRUEPions,hEffESD);
-  hRatioTRUE->DrawClone("lhist");
-  TH1F *hRatioSIGMA=AliPWGHistoTools::MyDivideHistosDifferentBins(EffSIGMAPions,hEffESD);
-  hRatioSIGMA->DrawClone("lhistsame");
+  cChargHadComp->cd(2);
+  gPad->SetGridy();
+  gPad->SetGridx();
+  hsum->Divide(hChHad_data);
+  hsum->SetMaximum(1.2);
+  hsum->SetMinimum(.8);
+  hsum->DrawClone("");
   
+  return;
+  // //Comparison of efficiency with TPCTOF ESD analysis
+  // Printf("\n\n-> Calculating Efficiency to be compared with ESD analysis");
+  // TH1F *EffTRUEPions;
+  // TH1F *EffSIGMAPions;
+  // TCanvas *cEffESD=new TCanvas("cEffESD","cEffESD",700,500);
+  // cEffESD->Divide(1,2);
+  // Int_t icharge=1;
+  // Int_t ipart=0;
+  // //using MC truth
+  // TString hname=Form("hHistPtRecTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
+  // Printf("Getting %s",hname.Data());
+  // EffTRUEPions=(TH1F*)((TH1F*) hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
+  // EffTRUEPions->SetName(Form("Eff TRUE_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
+  // EffTRUEPions->SetTitle(Form("Eff TRUE %s%s",Particle[ipart].Data(),Sign[icharge].Data()));
+  // EffTRUEPions->SetMarkerStyle(Marker[icharge]);
+  // EffTRUEPions->SetMarkerColor(Color[ipart]);
+  // EffTRUEPions->SetLineColor(Color[ipart]);
+  // hname=Form("hHistPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
+  // Printf("... and divide it by %s",hname.Data());
+  // EffTRUEPions->Divide(EffTRUEPions,(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),1,1))->Clone(),1,1,"B");//binomial error
+  // //using NSigma
+  // hname=Form("hHistPtRecSigmaPrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
+  // Printf("Getting %s",hname.Data());
+  // EffSIGMAPions=(TH1F*)((TH1F*) hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
+  // EffSIGMAPions->SetName(Form("Eff SIGMA_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
+  // EffSIGMAPions->SetTitle(Form("Eff SIGMA %s%s",Particle[ipart].Data(),Sign[icharge].Data()));
+  // EffSIGMAPions->SetMarkerStyle(Marker[icharge]);
+  // EffSIGMAPions->SetMarkerColor(Color[ipart+1]);
+  // EffSIGMAPions->SetLineColor(Color[ipart+1]);
+  // hname=Form("hHistPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
+  // Printf("... and divide it by %s",hname.Data());
+  // EffSIGMAPions->Divide(EffSIGMAPions,(TH1F*)((TH1F*)hman_mc->GetPtHistogram1D(hname.Data(),1,1))->Clone(),1,1,"B");//binomial error
+  // cEffESD->cd(1);
+  // EffTRUEPions->DrawClone("lhist");
+  // EffSIGMAPions->DrawClone("lhistsame");
+  // hEffESD->DrawClone("lhistsame");
+  // gPad->BuildLegend();
+  // cEffESD->cd(2);
+  // TH1F *hRatioTRUE=AliPWGHistoTools::MyDivideHistosDifferentBins(EffTRUEPions,hEffESD);
+  // hRatioTRUE->DrawClone("lhist");
+  // TH1F *hRatioSIGMA=AliPWGHistoTools::MyDivideHistosDifferentBins(EffSIGMAPions,hEffESD);
+  // hRatioSIGMA->DrawClone("lhistsame");
+  // return;
   
-  // //Muon over Pion Ratio
-  // TCanvas *cMu=new TCanvas("cMu","cMu");
-  // TH1F *hMuOverPi[2];
-  // for(Int_t icharge=0;icharge<2;icharge++){
-  //   TString hname=Form("histPtRecTruePrimaryMuon%s",Sign[icharge].Data());
-  //   hMuOverPi[icharge]=(TH1F*)((TH1F*) hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone();
-  //   hname=Form("histPtRecTruePrimaryPion%s",Sign[icharge].Data());
-  //   hMuOverPi[icharge]->Divide((TH1F*)((TH1F*) hman_mc->GetPtHistogram1D(hname.Data(),-1,-1))->Clone());
-  //   if(icharge==0)hMuOverPi[icharge]->DrawClone();
-  //   else hMuOverPi[icharge]->DrawClone("same");
-  // }
 }
 
 
 
+
 void DCACorrection(TH1F **Spectra, AliSpectraAODHistoManager* hman_data, AliSpectraAODHistoManager* hman_mc,Bool_t UseMCDCACorrection){
+  printf("\n\n-> DCA Correction");
   
-  Double_t FitRange[2]={-3,3};
-  Int_t nrebin=20;
+  Double_t FitRange[2]={-1.,1.};
+  Int_t nrebin=2;
   Printf("\DCACorr");
   TH1F *hcorrection[2];
   TCanvas *ccorrection=new TCanvas("DCAcorrection","DCAcorrection",700,500);
+  TCanvas *cRatiocorrection=new TCanvas("DCARatiocorrection","DCARatiocorrection",700,500);
+  cRatiocorrection->Divide(2,1);
   ccorrection->Divide(2,1);
   TString sample[2]={"data","mc"};
   for(Int_t icharge=0;icharge<2;icharge++){
@@ -543,13 +454,13 @@ void DCACorrection(TH1F **Spectra, AliSpectraAODHistoManager* hman_data, AliSpec
        for(Int_t ibin_data=6;ibin_data<38;ibin_data++){
          Double_t lowedge=Spectra[index]->GetBinLowEdge(ibin_data);
          Double_t binwidth=Spectra[index]->GetBinWidth(ibin_data);
-         if(isample==0)TH1F *hToFit =(TH1F*) ((TH1F*)hman_data->GetDCAHistogram1D(Form("histPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge+binwidth))->Clone();
-         if(isample==1)TH1F *hToFit =(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("histPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge+binwidth))->Clone();
-         TH1F *hmc1=(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("histPtRecSigmaPrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge+binwidth))->Clone();
-         TH1F *hmc2=(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("histPtRecSigmaSecondaryWeakDecay%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge+binwidth))->Clone();
-         TH1F *hmc3=(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("histPtRecSigmaSecondaryMaterial%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge+binwidth))->Clone();
-         Double_t minentries=5;
-         if(hToFit->GetEntries()<=minentries || hmc1->GetEntries()<=minentries || hmc2->GetEntries()<=minentries || hmc3->GetEntries()<=minentries)continue;
+         if(isample==0)TH1F *hToFit =(TH1F*) ((TH1F*)hman_data->GetDCAHistogram1D(Form("hHistPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge+binwidth))->Clone();
+         if(isample==1)TH1F *hToFit =(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("hHistPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge+binwidth))->Clone();
+         TH1F *hmc1=(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("hHistPtRecSigmaPrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge+binwidth))->Clone();
+         TH1F *hmc2=(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("hHistPtRecSigmaSecondaryWeakDecay%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge+binwidth))->Clone();
+         TH1F *hmc3=(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("hHistPtRecSigmaSecondaryMaterial%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge+binwidth))->Clone();
+         //Double_t minentries=200;
+         //if(hToFit->GetEntries()<=minentries || hmc1->GetEntries()<=minentries || hmc2->GetEntries()<=minentries || hmc3->GetEntries()<=minentries)continue;
          hmc1->Rebin(nrebin);
          hmc2->Rebin(nrebin);
          hmc3->Rebin(nrebin);
@@ -588,25 +499,35 @@ void DCACorrection(TH1F **Spectra, AliSpectraAODHistoManager* hman_data, AliSpec
            TH1F* PrimMCPred=(TH1F*)fit->GetMCPrediction(0);
            TH1F* secStMCPred=(TH1F*)fit->GetMCPrediction(1);
            TH1F* secMCPred=(TH1F*)fit->GetMCPrediction(2);
+           
+           Double_t v1=0,v2=0,v3=0;
+           Double_t ev1=0,ev2=0,ev3=0;
+           //first method, use directly the fit result
+           fit->GetResult(0,v1,ev1);
+           fit->GetResult(1,v2,ev2);
+           fit->GetResult(2,v3,ev3);
+           result->Scale(hToFit->GetSumOfWeights()/result->GetSumOfWeights());
+           PrimMCPred->Scale(hToFit->GetSumOfWeights()*v1/PrimMCPred->GetSumOfWeights());
+           secStMCPred->Scale(hToFit->GetSumOfWeights()*v2/secStMCPred->GetSumOfWeights());
+           secMCPred->Scale(hToFit->GetSumOfWeights()*v3/secMCPred->GetSumOfWeights());
+           //second method, integrated the MC predisction, it should give the same as the first method
+           // v1=PrimMCPred->Integral();
+           // v2=secStMCPred->Integral();
+           // v3=secMCPred->Integral();
+           //Printf("\n\n\n\n\nv1:%f  v2:%f  v3:%f   ev1:%f  ev2:%f  ev3:%f   ",v1,v2,v3,ev1,ev2,ev3);
+           hcorrection[isample]->SetBinContent(ibin_data,v1/(v1+v2+v3));
+           hcorrection[isample]->SetBinError(ibin_data,0);
            //Drawing section
            PrimMCPred->SetLineColor(2);
            secStMCPred->SetLineColor(6);
            secMCPred->SetLineColor(4);
+           hToFit->SetMinimum(0.0001);
            hToFit->DrawClone("lhist");
            result->SetTitle("Fit result");
            result->DrawClone("lhistsame");
            PrimMCPred->DrawClone("lhistsame");
            secStMCPred->DrawClone("lhistsame");
            secMCPred->DrawClone("lhistsame");
-           Double_t v1=0,v2=0,v3=0;
-           Double_t ev1=0,ev2=0,ev3=0;
-           fit->GetResult(0,v1,ev1);
-           fit->GetResult(1,v2,ev2);
-           fit->GetResult(2,v3,ev3);
-           Printf("\n\n\n\n\nv1:%f  v2:%f  v3:%f   ev1:%f  ev2:%f  ev3:%f   ",v1,v2,v3,ev1,ev2,ev3);
-           hcorrection[isample]->SetBinContent(ibin_data,v1/(v1+v2+v3));
-           //hcorrection[isample]->SetBinError(ibin_data,TMath::Sqrt(ev1*ev1+ev2*ev2+ev3*ev3));
-           hcorrection[isample]->SetBinError(ibin_data,0);
          }
          else{
            hcorrection[isample]->SetBinContent(ibin_data,1);
@@ -627,16 +548,15 @@ void DCACorrection(TH1F **Spectra, AliSpectraAODHistoManager* hman_data, AliSpec
        hcorrection[isample]->GetXaxis()->SetRangeUser(0.2,2.5);
        if(ipart==0 && isample==0)hcorrection[isample]->DrawClone("lhist");
        else hcorrection[isample]->DrawClone("lhistsame");
-       //else hcorrection[isample]->DrawClone("psame");
        // smooth the DCA correction
-       // TF1 *fitfun = new TF1("fitfun","[0]+[1]/x^[2]",0.2,0.8);
-       // hcorrection[isample]->Fit(fitfun,"WRVMN","",0.35,0.8);
+       // TF1 *fitfun = new TF1("fitfun","[0]+[1]*x^[2]+[3]*x^[4]",0.2,2.5);
+       // hcorrection[isample]->Fit(fitfun,"WRN","N",0.35,2);
        // fitfun->SetLineWidth(1.5);
-       // fitfun->SetLineColor(ipart+1);
-       // fitfun->SetLineStyle(ipart+1);
+       // fitfun->SetLineColor(Color[ipart]);
+       // fitfun->SetLineStyle(isample);
        // fitfun->DrawClone("same");
        // for(Int_t ibin=1;ibin<30;ibin++){
-       //      hcorrection[isample]->SetBinContent(ibin,fitfun->Eval(hcorrection[isample]->GetBinCenter(ibin)));
+       //   hcorrection[isample]->SetBinContent(ibin,fitfun->Eval(hcorrection[isample]->GetBinCenter(ibin)));
        // }
       }
       Spectra[index]->Multiply(hcorrection[0]);//multiply for data
@@ -645,6 +565,12 @@ void DCACorrection(TH1F **Spectra, AliSpectraAODHistoManager* hman_data, AliSpec
          Spectra[index]->Divide(hcorrection[1]); //divide by Monte Carlo
          Printf("DCACorrection for MC used: Spectra[index]->Divide(hcorrection[1]")
            }
+      cRatiocorrection->cd(icharge+1);
+      gPad->SetGridy();
+      gPad->SetGridx();
+      hcorrection[0]->Divide(hcorrection[1]);
+      if(ipart==0)hcorrection[0]->DrawClone("lhist");
+      else hcorrection[0]->DrawClone("lhistsame");
     }
   }
   ccorrection->cd(1);
@@ -654,3 +580,264 @@ void DCACorrection(TH1F **Spectra, AliSpectraAODHistoManager* hman_data, AliSpec
 }
 
 
+//////////////
+
+Double_t eta2y(Double_t pt, Double_t mass, Double_t eta){
+  Double_t mt = TMath::Sqrt(mass * mass + pt * pt);
+  return TMath::ASinH(pt / mt * TMath::SinH(eta));
+}
+///////////////////////
+void GFCorrection(TH1F **Spectra,AliSpectraAODTrackCuts* tcuts_data){
+  //Geant/Fluka Correction
+  Printf("\nGF correction for Kaons");
+  //Getting GF For Kaons in TPC
+  TGraph *gGFCorrectionKaonPlus=new TGraph();
+  gGFCorrectionKaonPlus->SetName("gGFCorrectionKaonPlus");
+  gGFCorrectionKaonPlus->SetTitle("gGFCorrectionKaonPlus");
+  TGraph *gGFCorrectionKaonMinus=new TGraph();
+  gGFCorrectionKaonMinus->SetName("gGFCorrectionKaonMinus");
+  gGFCorrectionKaonMinus->SetTitle("gGFCorrectionKaonMinus");
+  TString fnameGeanFlukaK="GFCorrection/correctionForCrossSection.321.root";
+  TFile *fGeanFlukaK= new TFile(fnameGeanFlukaK.Data());
+  TH1F *hGeantFlukaKPos=(TH1F*)fGeanFlukaK->Get("gHistCorrectionForCrossSectionParticles");
+  TH1F *hGeantFlukaKNeg=(TH1F*)fGeanFlukaK->Get("gHistCorrectionForCrossSectionAntiParticles");
+  //getting GF func for Kaons with TOF
+  TF1 *fGFKPosTracking;
+  fGFKPosTracking = TrackingEff_geantflukaCorrection(3,kPositive);
+  TF1 *fGFKNegTracking;
+  fGFKNegTracking = TrackingEff_geantflukaCorrection(3,kNegative);
+  TF1 *fGFKPosMatching;
+  fGFKPosMatching = TOFmatchMC_geantflukaCorrection(3,kPositive);
+  TF1 *fGFKNegMatching;
+  fGFKNegMatching = TOFmatchMC_geantflukaCorrection(3,kNegative);
+  for(Int_t binK=0;binK<=Spectra[1]->GetNbinsX();binK++){
+    if(Spectra[1]->GetBinCenter(binK)<tcuts_data->GetPtTOFMatching()){//use TPC GeantFlukaCorrection
+      Float_t FlukaCorrKPos=hGeantFlukaKPos->GetBinContent(hGeantFlukaKPos->FindBin(Spectra[1]->GetBinCenter(binK)));
+      Float_t FlukaCorrKNeg=hGeantFlukaKNeg->GetBinContent(hGeantFlukaKNeg->FindBin(Spectra[4]->GetBinCenter(binK)));
+      Printf("TPC Geant/Fluka: pt:%f  Pos:%f  Neg:%f",Spectra[1]->GetBinCenter(binK),FlukaCorrKPos,FlukaCorrKNeg);
+      Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrKPos);
+      Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrKNeg);
+      Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrKPos);
+      Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrKNeg);
+      gGFCorrectionKaonPlus->SetPoint(binK,Spectra[1]->GetBinCenter(binK),FlukaCorrKPos);
+      gGFCorrectionKaonMinus->SetPoint(binK,Spectra[4]->GetBinCenter(binK),FlukaCorrKNeg);
+    }else{
+      gGFCorrectionKaonPlus->SetPoint(binK,Spectra[1]->GetBinCenter(binK),0);
+      gGFCorrectionKaonMinus->SetPoint(binK,Spectra[4]->GetBinCenter(binK),0);
+      Float_t FlukaCorrKPosTracking=fGFKPosTracking->Eval(Spectra[1]->GetBinCenter(binK));
+      Float_t FlukaCorrKNegTracking=fGFKNegTracking->Eval(Spectra[1]->GetBinCenter(binK));
+      Printf("TPC/TOF Geant/Fluka Tracking: pt:%f  Pos:%f  Neg:%f",Spectra[1]->GetBinCenter(binK),FlukaCorrKPosTracking,FlukaCorrKNegTracking);
+      Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrKPosTracking);
+      Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrKNegTracking);
+      Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrKPosTracking);
+      Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrKNegTracking);
+      Float_t FlukaCorrKPosMatching=fGFKPosMatching->Eval(Spectra[1]->GetBinCenter(binK));
+      Float_t FlukaCorrKNegMatching=fGFKNegMatching->Eval(Spectra[1]->GetBinCenter(binK));
+      Printf("TPC/TOF Geant/Fluka Matching: pt:%f  Pos:%f  Neg:%f",Spectra[1]->GetBinCenter(binK),FlukaCorrKPosMatching,FlukaCorrKNegMatching);
+      Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrKPosMatching);
+      Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrKNegMatching);
+      Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrKPosMatching);
+      Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrKNegMatching);
+    }
+  }
+  
+  //Geant Fluka for P in TPC
+  Printf("\nGF correction for Protons");
+  const Int_t kNCharge=2;
+  Int_t kPos=0;
+  Int_t kNeg=1;
+  TFile* fGFProtons = new TFile ("GFCorrection/correctionForCrossSection.root");
+  TH2D * hCorrFluka[kNCharge];
+  TH2D * hCorrFluka[2];
+  hCorrFluka[kPos] = (TH2D*)fGFProtons->Get("gHistCorrectionForCrossSectionProtons");
+  hCorrFluka[kNeg] = (TH2D*)fGFProtons->Get("gHistCorrectionForCrossSectionAntiProtons");
+  TGraph *gGFCorrectionProtonPlus=new TGraph();
+  gGFCorrectionProtonPlus->SetName("gGFCorrectionProtonPlus");
+  gGFCorrectionProtonPlus->SetTitle("gGFCorrectionProtonPlus");
+  TGraph *gGFCorrectionProtonMinus=new TGraph();
+  gGFCorrectionProtonMinus->SetName("gGFCorrectionProtonMinus");
+  gGFCorrectionProtonMinus->SetTitle("gGFCorrectionProtonMinus");
+   //getting GF func for Kaons with TPCTOF
+  TF1 *fGFpPosTracking;
+  fGFpPosTracking = TrackingEff_geantflukaCorrection(4,kPositive);
+  TF1 *fGFpNegTracking;
+  fGFpNegTracking = TrackingEff_geantflukaCorrection(4,kNegative);
+  TF1 *fGFpPosMatching;
+  fGFpPosMatching = TOFmatchMC_geantflukaCorrection(4,kPositive);
+  TF1 *fGFpNegMatching;
+  fGFpNegMatching = TOFmatchMC_geantflukaCorrection(4,kNegative);
+  
+  for(Int_t icharge = 0; icharge < kNCharge; icharge++){
+    Int_t nbins = Spectra[2]->GetNbinsX();
+    Int_t nbinsy=hCorrFluka[icharge]->GetNbinsY();
+    for(Int_t ibin = 0; ibin < nbins; ibin++){
+      if(Spectra[2]->GetBinCenter(ibin)<tcuts_data->GetPtTOFMatching()){//use TPC GeantFlukaCorrection
+      Float_t pt = Spectra[2]->GetBinCenter(ibin);
+      Float_t minPtCorrection = hCorrFluka[icharge]->GetYaxis()->GetBinLowEdge(1);
+      Float_t maxPtCorrection = hCorrFluka[icharge]->GetYaxis()->GetBinLowEdge(nbinsy+1);
+      if (pt < minPtCorrection) pt = minPtCorrection+0.0001;
+      if (pt > maxPtCorrection) pt = maxPtCorrection;
+      Float_t correction = hCorrFluka[icharge]->GetBinContent(1,hCorrFluka[icharge]->GetYaxis()->FindBin(pt));
+      //cout<<correction<<"     charge "<<icharge<<endl;
+      if(icharge==0){
+       if (correction != 0) {// If the bin is empty this is a  0
+         Spectra[2]->SetBinContent(ibin,Spectra[2]->GetBinContent(ibin)*correction);
+         Spectra[2]->SetBinError(ibin,Spectra[2]->GetBinError  (ibin)*correction);
+         gGFCorrectionProtonPlus->SetPoint(ibin,pt,correction);
+       }else if (Spectra[2]->GetBinContent(ibin) > 0) { // If we are skipping a non-empty bin, we notify the user
+         cout << "Fluka/GEANT: Not correcting bin "<<ibin << " for protons secondaries, Pt:"<< pt<< endl;
+         cout << " Bin content: " << Spectra[2]->GetBinContent(ibin)  << endl;
+       }
+      }
+      if(icharge==1){
+       if (correction != 0) {// If the bin is empty this is a  0
+         Spectra[5]->SetBinContent(ibin,Spectra[5]->GetBinContent(ibin)*correction);
+         Spectra[5]->SetBinError(ibin,Spectra[5]->GetBinError  (ibin)*correction);
+         gGFCorrectionProtonMinus->SetPoint(ibin,pt,correction);
+       }else if (Spectra[5]->GetBinContent(ibin) > 0) { // If we are skipping a non-empty bin, we notify the user
+         cout << "Fluka/GEANT: Not correcting bin "<<ibin << " for Antiprotons secondaries, Pt:"<< pt<< endl;
+         cout << " Bin content: " << Spectra[5]->GetBinContent(ibin)  << endl;
+       }
+      }
+      }else{
+       gGFCorrectionProtonPlus->SetPoint(binK,Spectra[1]->GetBinCenter(binK),0);
+       gGFCorrectionProtonMinus->SetPoint(binK,Spectra[4]->GetBinCenter(binK),0);
+       Float_t FlukaCorrpPosTracking=fGFpPosTracking->Eval(Spectra[1]->GetBinCenter(binK));
+       Float_t FlukaCorrpNegTracking=fGFpNegTracking->Eval(Spectra[1]->GetBinCenter(binK));
+       Printf("TPC/TOF Geant/Fluka Tracking: pt:%f  Pos:%f  Neg:%f",Spectra[1]->GetBinCenter(binK),FlukaCorrpPosTracking,FlukaCorrpNegTracking);
+       Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrpPosTracking);
+       Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrpNegTracking);
+       Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrpPosTracking);
+       Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrpNegTracking);
+       Float_t FlukaCorrpPosMatching=fGFpPosMatching->Eval(Spectra[1]->GetBinCenter(binK));
+       Float_t FlukaCorrpNegMatching=fGFpNegMatching->Eval(Spectra[1]->GetBinCenter(binK));
+       Printf("TPC/TOF Geant/Fluka Matching: pt:%f  Pos:%f  Neg:%f",Spectra[1]->GetBinCenter(binK),FlukaCorrpPosMatching,FlukaCorrpNegMatching);
+       Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrpPosMatching);
+       Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrpNegMatching);
+       Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrpPosMatching);
+       Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrpNegMatching);
+      }
+    }//end loop on bins        
+  }
+  gGFCorrectionKaonPlus->SetLineColor(kRed);
+  gGFCorrectionKaonMinus->SetLineColor(kRed+2);
+  gGFCorrectionProtonPlus->SetLineColor(kGreen);
+  gGFCorrectionProtonMinus->SetLineColor(kGreen+2);
+  fGFKPosTracking->SetLineColor(kRed);
+  fGFKNegTracking->SetLineColor(kRed+2);
+  fGFKPosMatching->SetLineColor(kRed);
+  fGFKNegMatching->SetLineColor(kRed+2);
+  fGFpPosTracking->SetLineColor(kGreen);
+  fGFpNegTracking->SetLineColor(kGreen+2);
+  fGFpPosMatching->SetLineColor(kGreen);
+  fGFpNegMatching->SetLineColor(kGreen+2);
+  fGFKPosTracking->SetLineStyle(2);
+  fGFKNegTracking->SetLineStyle(2);
+  fGFKPosMatching->SetLineStyle(3);
+  fGFKNegMatching->SetLineStyle(3);
+  fGFpPosTracking->SetLineStyle(2);
+  fGFpNegTracking->SetLineStyle(2);
+  fGFpPosMatching->SetLineStyle(3);
+  fGFpNegMatching->SetLineStyle(3);
+  fGFKPosTracking->SetRange(.6,5);
+  fGFKNegTracking->SetRange(.6,5);
+  fGFKPosMatching->SetRange(.6,5);
+  fGFKNegMatching->SetRange(.6,5);
+  fGFpPosTracking->SetRange(.6,5);
+  fGFpNegTracking->SetRange(.6,5);
+  fGFpPosMatching->SetRange(.6,5);
+  fGFpNegMatching->SetRange(.6,5);
+  TCanvas * GFCorrection = new TCanvas ("GFCorrection","GFCorrection",700,500);
+  gPad->SetGridx();
+  gPad->SetGridy();
+  gGFCorrectionKaonPlus->DrawClone("al");
+  gGFCorrectionKaonMinus->DrawClone("lsame");
+  gGFCorrectionProtonPlus->DrawClone("lsame");
+  gGFCorrectionProtonMinus->DrawClone("lsame");
+  fGFKPosTracking->DrawClone("lsame");
+  fGFKNegTracking->DrawClone("lsame");
+  fGFKPosMatching->DrawClone("lsame");
+  fGFKNegMatching->DrawClone("lsame");
+  fGFpPosTracking->DrawClone("lsame");
+  fGFpNegTracking->DrawClone("lsame");
+  fGFpPosMatching->DrawClone("lsame");
+  fGFpNegMatching->DrawClone("lsame");
+  gPad->BuildLegend();
+}
+
+
+
+///////////
+TF1 *
+TrackingEff_geantflukaCorrection(Int_t ipart, Int_t icharge)
+{
+
+  if (ipart == 3 && icharge == kNegative) {
+    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "TrackingPtGeantFlukaCorrectionKaMinus(x)", 0., 5.);
+    return f;
+  }
+  else if (ipart == 4 && icharge == kNegative) {
+    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "TrackingPtGeantFlukaCorrectionPrMinus(x)", 0., 5.);
+  }
+  else
+    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "TrackingPtGeantFlukaCorrectionNull(x)", 0., 5.);
+
+  return f;
+}
+
+Double_t
+TrackingPtGeantFlukaCorrectionNull(Double_t pTmc)
+{
+  return 1.;
+}
+
+Double_t
+TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
+{
+  return (1 - 0.129758 *TMath::Exp(-pTmc*0.679612));
+}
+
+Double_t
+TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
+{
+  return TMath::Min((0.972865 + 0.0117093*pTmc), 1.);
+}
+///////////////////////////////////////////
+TF1 *
+TOFmatchMC_geantflukaCorrection(Int_t ipart, Int_t icharge)
+{
+
+  if (ipart == 3 && icharge == kNegative) {
+    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "MatchingPtGeantFlukaCorrectionKaMinus(x)", 0., 5.);
+    return f;
+  }
+  else if (ipart == 4 && icharge == kNegative) {
+    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "MatchingPtGeantFlukaCorrectionPrMinus(x)", 0., 5.);
+  }
+  else
+    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "MatchingPtGeantFlukaCorrectionNull(x)", 0., 5.);
+
+  return f;
+}
+
+
+Double_t
+MatchingPtGeantFlukaCorrectionNull(Double_t pTmc)
+{
+  return 1.;
+}
+
+Double_t 
+MatchingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
+{
+  Float_t ptTPCoutP =pTmc*(1-6.81059e-01*TMath::Exp(-pTmc*4.20094));
+  return (TMath::Power(1 - 0.129758*TMath::Exp(-ptTPCoutP*0.679612),0.07162/0.03471));
+}
+
+Double_t
+MatchingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
+{
+  Float_t ptTPCoutK=pTmc*(1- 3.37297e-03/pTmc/pTmc - 3.26544e-03/pTmc);
+  return TMath::Min((TMath::Power(0.972865 + 0.0117093*ptTPCoutK,0.07162/0.03471)), 1.);
+}