]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGCF/FLOW/macros/extractFlowVZERO.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / FLOW / macros / extractFlowVZERO.C
index 94ec7c179df31bddf9e3fe2aa22db2895cde6536..27732ea424bf98af1a634e2a8292cba3c164bd1d 100644 (file)
-extractFlowVZERO(Int_t itech=0,Int_t ibin = 3,Int_t step = 0,Int_t arm=2,Float_t pTh = 0.9,Int_t charge=0,Int_t addbins=0){
-  TCanvas *can1 = new TCanvas("cV0Acheck","cV0Acheck");
+TFile *fo = NULL;
+TF1 *fPsi = NULL;
+
+Bool_t kLib = kFALSE;
+Bool_t kVZEROrescorr = kTRUE; // VZERO resolution corrections
+Bool_t kNUAcorr = kTRUE; // NUA corrections
+Bool_t kNUOcorr = kFALSE; // Not Uniform Occupancy (TOF) corrections
+Bool_t kPIDcorr = kFALSE; // PID corrections
+Bool_t kFEEDcorr = kFALSE; // antiproton feed-down corrections
+Bool_t kCleanMemory = kTRUE; // if kFALSE take care of the large numbers of TCanvases
+
+TH1D *hNUO[8]; // NUO corrections
+
+void LoadLib();
+void extractFlowVZERO(Int_t icentr,const char *type="",Int_t arm=2,Float_t pTh=0.8,Bool_t isMC=kFALSE,Int_t addbin=0);
+TProfile *extractFlowVZEROsingle(Int_t icentr,Int_t spec,Int_t arm=2,Bool_t isMC=kFALSE,Float_t pTh=0.9,Int_t addbin=0,const char *nameSp="",Float_t detMin=0,Float_t detMax=1,Int_t chMin=-1,Int_t chMax=1);
+void compareTPCTOF(Int_t icentr,Int_t spec,Int_t arm=2,Float_t pTh=0.9,Int_t addbin=0);
+void plotQApid(Int_t ic,Float_t pt,Int_t addbin=0);
+
+void LoadLib(){
+  if(! kLib){
+    gSystem->Load("libVMC");
+    gSystem->Load("libPhysics");
+    gSystem->Load("libTree");
+    gSystem->Load("libSTEERBase");
+    gSystem->Load("libANALYSIS");
+    gSystem->Load("libAOD");
+    gSystem->Load("libESD");
+    gSystem->Load("libANALYSIS");
+    gSystem->Load("libANALYSISalice");
+    gSystem->Load("libCORRFW");
+    gSystem->Load("libNetx");
+    gSystem->Load("libPWGflowBase");
+    gSystem->Load("libPWGflowTasks");
+    
+    kLib = kTRUE;
+  }
+}
 
-/*
-read outVZEROv2.root or outVZEROv3.root files
+void extractFlowVZERO(Int_t icentr,const char *type,Int_t arm,Float_t pTh,Bool_t isMC,Int_t addbin){
+  LoadLib();
 
-itech=0 TPC stand alone PID and selection
-itech=1 TPC stand alone PID but TOF track selection
-itech=2 TPC&TOF PID (TOF strictly required)
-itech=3 TPC|TOF PID (the same of before but using TPC stand alone when TOF not available)
+  char name[100];
+  snprintf(name,100,"AnalysisResults%s.root",type);
+  if(!fo) fo = new TFile(name);
 
-ibin = centrality bin
+  new TCanvas();
 
-step = species (0=all charges, 1=pi, 2=K, 3=p, 4=e, 5=d, 6=t, 7=3He
+  Int_t cMin[] = {0,5,10,20,30,40,50,60,70};
+  Int_t cMax[] = {5,10,20,30,40,50,60,70,80};
 
-arm = armonic 2 (v2) or 3 (v3)
+  if(kNUOcorr){ // Compute correction for NUO in TOF
+    compareTPCTOF(icentr,0,arm,pTh,addbin);
+//     compareTPCTOF(icentr,1,arm,pTh,addbin);
+//     compareTPCTOF(icentr,2,arm,pTh,addbin);
+//     compareTPCTOF(icentr,3,arm,pTh,addbin);
+//     compareTPCTOF(icentr,4,arm,pTh,addbin);
+  }
 
-pTh = probability threshold = 0.6 , 0.8 , 0.9 , 0.95
+  TProfile *pAll;
+  pAll=extractFlowVZEROsingle(icentr,0,arm,0,pTh,addbin,"all",0,1);
+  pAll->SetMarkerStyle(24);
+  TProfile *pPiTOF,*pPiTPC,*pPiTPC2;
+  pPiTOF=extractFlowVZEROsingle(icentr,1,arm,0,pTh,addbin,"piTOF",1,1);
+  pPiTPC=extractFlowVZEROsingle(icentr,1,arm,0,pTh,addbin,"piTPC",0,0);
+  pPiTPC2=extractFlowVZEROsingle(icentr,1,arm,0,pTh,addbin,"piTPC2",2,2);
+  pPiTPC->Add(pPiTPC2);
+
+  TH1D *hPi = pPiTOF->ProjectionX("hPi");
+  hPi->SetLineColor(4);
+  hPi->SetMarkerColor(4);
+  hPi->SetMarkerStyle(20);
+  for(Int_t i=1;i <=hPi->GetNbinsX();i++){
+    Float_t x = hPi->GetBinCenter(i);
+    if(x < 0.2){
+      hPi->SetBinContent(i,0);
+      hPi->SetBinError(i,0);
+    }
+    else if(x < 0.5){
+      hPi->SetBinContent(i,pPiTPC->GetBinContent(i));
+      hPi->SetBinError(i,pPiTPC->GetBinError(i));      
+    }
+    else{
+      if(kNUOcorr){
+       hPi->SetBinContent(i,pPiTOF->GetBinContent(i) + hNUO[0]->GetBinContent(i));
+       hPi->SetBinError(i,pPiTOF->GetBinError(i));      
+      }
+      else{
+       hPi->SetBinContent(i,pPiTOF->GetBinContent(i));
+       hPi->SetBinError(i,pPiTOF->GetBinError(i));      
+      }
+    }
+  }
 
-charge = 1(pos), -1(neg), 0(both)
+  TProfile *pElTOF,*pElTPC,*pElTPC2;
+  pElTOF=extractFlowVZEROsingle(icentr,4,arm,0,pTh,addbin,"piTOF",1,1);
+  pElTPC=extractFlowVZEROsingle(icentr,4,arm,0,pTh,addbin,"piTPC",0,0);
+  pElTPC2=extractFlowVZEROsingle(icentr,4,arm,0,pTh,addbin,"piTPC2",2,2);
+  pElTPC->Add(pElTPC2);
+
+  TH1D *hEl = pElTOF->ProjectionX("hEl");
+  hEl->SetLineColor(6);
+  hEl->SetMarkerColor(6);
+  hEl->SetMarkerStyle(20);
+  for(Int_t i=1;i <=hEl->GetNbinsX();i++){
+    Float_t x = hEl->GetBinCenter(i);
+    if(x < 0.2){
+      hEl->SetBinContent(i,0);
+      hEl->SetBinError(i,0);
+    }
+    else if(x < 0.3){
+      hEl->SetBinContent(i,pElTPC->GetBinContent(i));
+      hEl->SetBinError(i,pElTPC->GetBinError(i));      
+    }
+    else{
+      if(kNUOcorr){
+       hEl->SetBinContent(i,pElTOF->GetBinContent(i) + hNUO[0]->GetBinContent(i));
+       hEl->SetBinError(i,pElTOF->GetBinError(i));      
+      }
+      else{
+       hEl->SetBinContent(i,pElTOF->GetBinContent(i));
+       hEl->SetBinError(i,pElTOF->GetBinError(i));      
+      }
+    }
+  }
 
-addbins = to merge more centrality bin (i.e. ibin = 2, addbins = 3 merge 2,3,4,5 centrality bins) - preliminary version!!!!!!
+  TProfile *pKTOF,*pKTPC,*pKTPC2;
+  pKTOF=extractFlowVZEROsingle(icentr,2,arm,0,pTh,addbin,"kaTOF",1,1);
+  pKTPC=extractFlowVZEROsingle(icentr,2,arm,0,pTh,addbin,"kaTPC",0,0);
+  pKTPC2=extractFlowVZEROsingle(icentr,2,arm,0,pTh,addbin,"kaTPC2",2,2);
+  pKTPC->Add(pKTPC2);
+
+  TH1D *hK = pKTOF->ProjectionX("hKa");
+  hK->SetLineColor(1);
+  hK->SetMarkerColor(1);
+  hK->SetMarkerStyle(21);
+  for(Int_t i=1;i <=hK->GetNbinsX();i++){
+    Float_t x = hK->GetBinCenter(i);
+    if(x < 0.25){
+      hK->SetBinContent(i,0);
+      hK->SetBinError(i,0);
+    }
+    else if(x < 0.45){
+      hK->SetBinContent(i,pKTPC->GetBinContent(i));
+      hK->SetBinError(i,pKTPC->GetBinError(i));      
+    }
+    else{
+      if(kNUOcorr){
+       hK->SetBinContent(i,pKTOF->GetBinContent(i) + hNUO[0]->GetBinContent(i));
+       hK->SetBinError(i,pKTOF->GetBinError(i));      
+      }
+      else{
+       hK->SetBinContent(i,pKTOF->GetBinContent(i));
+       hK->SetBinError(i,pKTOF->GetBinError(i));      
+      }
+    }
+  }
 
-*/
+  TProfile *pPrTOF,*pPrTOF2,*pPrTPC,*pPrTPC2;
+  pPrTOF=extractFlowVZEROsingle(icentr,3,arm,0,pTh,addbin,"prTOF",1,1,-1,-1);
+  pPrTOF2=extractFlowVZEROsingle(icentr,3,arm,0,pTh,addbin,"prTOF2",1,1,-1,1);
+  pPrTPC=extractFlowVZEROsingle(icentr,3,arm,0,pTh,addbin,"prTPC",0,0,-1,-1);
+  pPrTPC2=extractFlowVZEROsingle(icentr,3,arm,0,pTh,addbin,"prTPC2",2,2,-1,-1);
+  pPrTPC->Add(pPrTPC2);
+
+  TH1D *hPr = pPrTOF->ProjectionX("hPr");
+  hPr->SetLineColor(2);
+  hPr->SetMarkerColor(2);
+  hPr->SetMarkerStyle(22);
+  for(Int_t i=1;i <=hPr->GetNbinsX();i++){
+    Float_t x = hPr->GetBinCenter(i);
+    if(x < 0.3){
+      hPr->SetBinContent(i,0);
+      hPr->SetBinError(i,0);
+    }
+    else if(x < 1.0){
+      hPr->SetBinContent(i,pPrTPC->GetBinContent(i));
+      hPr->SetBinError(i,pPrTPC->GetBinError(i));      
+    }
+    else{
+      if(x < 3){
+       if(kNUOcorr){
+         hPr->SetBinContent(i,pPrTOF->GetBinContent(i) + hNUO[0]->GetBinContent(i));
+         hPr->SetBinError(i,pPrTOF->GetBinError(i));      
+       }
+       else{
+         hPr->SetBinContent(i,pPrTOF->GetBinContent(i));
+         hPr->SetBinError(i,pPrTOF->GetBinError(i));      
+       }
+      }
+      else{
+       if(kNUOcorr){
+         hPr->SetBinContent(i,pPrTOF2->GetBinContent(i) + hNUO[0]->GetBinContent(i));
+         hPr->SetBinError(i,pPrTOF2->GetBinError(i));      
+       }
+       else{
+         hPr->SetBinContent(i,pPrTOF2->GetBinContent(i));
+         hPr->SetBinError(i,pPrTOF2->GetBinError(i));      
+       }
+      }
+    }
+  }
+  
+  pAll->Draw();
+  hPi->Draw("SAME");
+  hK->Draw("SAME");
+  hPr->Draw("SAME");
 
-  // load libraries
-  gSystem->Load("libANALYSIS");
-  gSystem->Load("libANALYSISalice");
-  gSystem->Load("libCORRFW.so");
 
-  // get objects
-  char filein[100];
-  sprintf(filein,"outVZEROv%i.root",arm);
-  TFile *f=new TFile(filein);
-  sprintf(filein,"contVZEROv%i",arm);
-  TList *l = f->Get(filein);
-  l->ls();
-  AliCFContainer *c = l->At(0);
-  AliCFContainer *c3 = l->At(1);
-  TProfile *p1 = l->At(2);
-  TProfile *p2 = l->At(3);
-  TProfile *p3 = l->At(4);
-  Int_t iVar[2] = {1,3};
+  char name[100];
 
-  Int_t iVarPsi[1] = {5};
-  /* 0=centrality , 1= cos(arm*deltaphi) , 2=charge , 3=pt , 4=probability , 5=EP , 6=PIDmask*/
-  Double_t iMin[7] = {ibin,-1,-1.5,0,pTh+0.00001,-3.14,0};
-  Double_t iMax[7] = {ibin+addbins,1,1.5,20,1.1,3.14,1};
 
-  char *iTechName[4] = {"tpc","tpcInTof","tof","tpcORtof"};
+  // PID correction
+  if(kPIDcorr){
+    TFile *fPidTOF = new TFile("$ALICE_ROOT/PWGCF/FLOW/other/BayesianPIDcontTPCTOF.root");
+    TFile *fPidTPC = new TFile("$ALICE_ROOT/PWGCF/FLOW/other/BayesianPIDcontTPC.root");
+    // pi histos
+    sprintf(name,"Pi_IDas_Picentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPiPi=(TH1D *) fPidTOF->Get(name);
+    sprintf(name,"Pi_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPiEl=(TH1D *) fPidTOF->Get(name);
+    sprintf(name,"Pi_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPiKa=(TH1D *) fPidTOF->Get(name);
+    sprintf(name,"Pi_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPiPr=(TH1D *) fPidTOF->Get(name);
+    TH1D *hPidAll = new TH1D(*hPidPiPi);
+    hPidAll->Add(hPidPiKa);
+    hPidAll->Add(hPidPiPr);
+    hPidAll->Add(hPidPiEl);
+    hPidPiPi->Divide(hPidAll);
+    hPidPiKa->Divide(hPidAll);
+    hPidPiPr->Divide(hPidAll);
+    hPidPiEl->Divide(hPidAll);
+
+    sprintf(name,"Pi_IDas_Picentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPiPiTPC=(TH1D *) fPidTPC->Get(name);
+    sprintf(name,"Pi_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPiElTPC=(TH1D *) fPidTPC->Get(name);
+    sprintf(name,"Pi_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPiKaTPC=(TH1D *) fPidTPC->Get(name);
+    sprintf(name,"Pi_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPiPrTPC=(TH1D *) fPidTPC->Get(name);
+    hPidAll->Reset();
+    hPidAll->Add(hPidPiPiTPC);
+    hPidAll->Add(hPidPiKaTPC);
+    hPidAll->Add(hPidPiPrTPC);
+    hPidAll->Add(hPidPiElTPC);
+    hPidPiPiTPC->Divide(hPidAll);
+    hPidPiKaTPC->Divide(hPidAll);
+    hPidPiPrTPC->Divide(hPidAll);
+    hPidPiElTPC->Divide(hPidAll);
+
+    // K histos
+    sprintf(name,"Ka_IDas_Picentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidKaPi=(TH1D *) fPidTOF->Get(name);
+    sprintf(name,"Ka_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidKaEl=(TH1D *) fPidTOF->Get(name);
+    sprintf(name,"Ka_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidKaKa=(TH1D *) fPidTOF->Get(name);
+    sprintf(name,"Ka_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidKaPr=(TH1D *) fPidTOF->Get(name);
+    hPidAll->Reset();
+    hPidAll->Add(hPidKaPi);
+    hPidAll->Add(hPidKaKa);
+    hPidAll->Add(hPidKaPr);
+    hPidAll->Add(hPidKaEl);
+    hPidKaPi->Divide(hPidAll);
+    hPidKaKa->Divide(hPidAll);
+    hPidKaPr->Divide(hPidAll);
+    hPidKaEl->Divide(hPidAll);
+
+    sprintf(name,"Ka_IDas_Picentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidKaPiTPC=(TH1D *) fPidTPC->Get(name);
+    sprintf(name,"Ka_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidKaElTPC=(TH1D *) fPidTPC->Get(name);
+    sprintf(name,"Ka_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidKaKaTPC=(TH1D *) fPidTPC->Get(name);
+    sprintf(name,"Ka_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidKaPrTPC=(TH1D *) fPidTPC->Get(name);
+    hPidAll->Reset();
+    hPidAll->Add(hPidKaPiTPC);
+    hPidAll->Add(hPidKaKaTPC);
+    hPidAll->Add(hPidKaPrTPC);
+    hPidAll->Add(hPidKaElTPC);
+    hPidKaPiTPC->Divide(hPidAll);
+    hPidKaKaTPC->Divide(hPidAll);
+    hPidKaPrTPC->Divide(hPidAll);
+    hPidKaElTPC->Divide(hPidAll);
+
+    // pr histos
+    sprintf(name,"Pr_IDas_Picentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPrPi=(TH1D *) fPidTOF->Get(name);
+    sprintf(name,"Pr_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPrEl=(TH1D *) fPidTOF->Get(name);
+    sprintf(name,"Pr_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPrKa=(TH1D *) fPidTOF->Get(name);
+    sprintf(name,"Pr_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPrPr=(TH1D *) fPidTOF->Get(name);
+    hPidAll->Reset();
+    hPidAll->Add(hPidPrPi);
+    hPidAll->Add(hPidPrKa);
+    hPidAll->Add(hPidPrPr);
+    hPidAll->Add(hPidPrEl);
+    hPidPrPi->Divide(hPidAll);
+    hPidPrKa->Divide(hPidAll);
+    hPidPrPr->Divide(hPidAll);
+    hPidPrEl->Divide(hPidAll);
+
+    sprintf(name,"Pr_IDas_Picentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPrPiTPC=(TH1D *) fPidTPC->Get(name);
+    sprintf(name,"Pr_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPrElTPC=(TH1D *) fPidTPC->Get(name);
+    sprintf(name,"Pr_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPrKaTPC=(TH1D *) fPidTPC->Get(name);
+    sprintf(name,"Pr_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
+    TH1D *hPidPrPrTPC=(TH1D *) fPidTPC->Get(name);
+    hPidAll->Reset();
+    hPidAll->Add(hPidPrPiTPC);
+    hPidAll->Add(hPidPrKaTPC);
+    hPidAll->Add(hPidPrPrTPC);
+    hPidAll->Add(hPidPrElTPC);
+    hPidPrPiTPC->Divide(hPidAll);
+    hPidPrKaTPC->Divide(hPidAll);
+    hPidPrPrTPC->Divide(hPidAll);
+    hPidPrElTPC->Divide(hPidAll);
+    for(Int_t k=1;k <=hPi->GetNbinsX();k++){
+      Float_t pt = hPi->GetBinCenter(k);
+      Float_t xPi=hPi->GetBinContent(k)*hPidPiPi->Interpolate(pt) + hK->GetBinContent(k)*hPidPiKa->Interpolate(pt) + hPr->GetBinContent(k)*hPidPiPr->Interpolate(pt) + hEl->GetBinContent(k)*hPidPiEl->Interpolate(pt);
+      if(pt < 0.5)
+       xPi=hPi->GetBinContent(k)*hPidPiPiTPC->Interpolate(pt) + hK->GetBinContent(k)*hPidPiKaTPC->Interpolate(pt) + hPr->GetBinContent(k)*hPidPiPrTPC->Interpolate(pt) + hEl->GetBinContent(k)*hPidPiElTPC->Interpolate(pt);
+      Float_t xKa=hPi->GetBinContent(k)*hPidKaPi->Interpolate(pt) + hK->GetBinContent(k)*hPidKaKa->Interpolate(pt) + hPr->GetBinContent(k)*hPidKaPr->Interpolate(pt) + hEl->GetBinContent(k)*hPidKaEl->Interpolate(pt);
+      if(pt < 0.45)
+       xKa=hPi->GetBinContent(k)*hPidKaPiTPC->Interpolate(pt) + hK->GetBinContent(k)*hPidKaKaTPC->Interpolate(pt) + hPr->GetBinContent(k)*hPidKaPrTPC->Interpolate(pt) + hEl->GetBinContent(k)*hPidKaElTPC->Interpolate(pt);
+      Float_t xPr=hPi->GetBinContent(k)*hPidPrPi->Interpolate(pt) + hK->GetBinContent(k)*hPidPrKa->Interpolate(pt) + hPr->GetBinContent(k)*hPidPrPr->Interpolate(pt) + hEl->GetBinContent(k)*hPidPrEl->Interpolate(pt);
+      if(pt < 1)
+       xPr=hPi->GetBinContent(k)*hPidPrPiTPC->Interpolate(pt) + hK->GetBinContent(k)*hPidPrKaTPC->Interpolate(pt) + hPr->GetBinContent(k)*hPidPrPrTPC->Interpolate(pt) + hEl->GetBinContent(k)*hPidPrElTPC->Interpolate(pt);
+
+      hPi->SetBinContent(k,hPi->GetBinContent(k)*2 - xPi);
+      hK->SetBinContent(k,hK->GetBinContent(k)*2 - xKa);
+      hPr->SetBinContent(k,hPr->GetBinContent(k)*2 - xPr);    
+    }
+  }
 
-  Bool_t kOnlyTPC = kFALSE;
 
-  if(itech==0 && (step!=0)){
-      kOnlyTPC = kTRUE;
-  }
-  else if(itech==1 && (step!=0)){
-      iMin[6] = 2;
-      iMax[6] = 2;
-  }
-  else if(itech==2 || itech==1){
-      iMin[6] = 1;
-      iMax[6] = 1;
+  // antiproton Feed down
+  TProfile *pFromLambda = extractFlowVZEROsingle(icentr,11,arm,0,pTh,addbin,"pFromLambda",1,1);
+  TProfile *piFromK = extractFlowVZEROsingle(icentr,12,arm,0,pTh,addbin,"piFromK",1,1,1,1);
+  TProfile *pFromLambda2 = extractFlowVZEROsingle(icentr,11,arm,0,0.6,addbin,"pFromLambdanoPID",0,1);
+  TProfile *piFromK2 = extractFlowVZEROsingle(icentr,12,arm,0,0.6,addbin,"piFromKnoPID",0,1);
+  TProfile *piFromK3 = extractFlowVZEROsingle(icentr,12,arm,0,0.6,addbin,"piFromKnoPIDtof",1,1);
+
+  TH1D *hFeedSyst = NULL;
+
+  if(kFEEDcorr){
+    hFeedSyst = new TH1D(*hPr);
+    hFeedSyst->SetName("hFeedSyst");
+    hFeedSyst->Reset();
+    for(Int_t k=1;k <=hPr->GetNbinsX();k++){
+      Float_t contam = 3.23174e-01 * TMath::Exp(- 9.46743e-01 *  hPr->GetBinCenter(k));
+      Float_t corr = contam * pFromLambda->GetBinContent(k)/(1-contam);
+      Float_t corrErr = contam * pFromLambda->GetBinError(k)/(1-contam);
+      Float_t value = hPr->GetBinContent(k)/(1-contam) - corr;
+      Float_t valueErr = hPr->GetBinError(k)/(1-contam);
+
+      hFeedSyst->SetBinContent(k,hPr->GetBinContent(k) - value);
+      hFeedSyst->SetBinContent(k,sqrt(corrErr*corrErr + valueErr*valueErr - hPr->GetBinError(k)*hPr->GetBinError(k)));
+
+      hPr->SetBinContent(k,value);
+      hPr->SetBinError(k,sqrt(corrErr*corrErr + valueErr*valueErr));
+
+    }
+    hFeedSyst->Divide(hPr);
   }
-  else{
-      iMin[6] = 0;
-      iMax[6] = 1;
+    
+  // write output
+  snprintf(name,100,"results%03i-%03iv%i_pTh%3.1f%s.root",cMin[icentr],cMax[icentr+addbin],arm,pTh,type);
+  TFile *fout = new TFile(name,"RECREATE");
+  pAll->ProjectionX()->Write();
+  hPi->Write();
+  hK->Write();
+  hPr->Write();
+  if(isMC){
+    TH1D *pTmp = extractFlowVZEROsingle(icentr,0,arm,1,pTh,addbin,"allMC",1,1,-1,1)->ProjectionX();
+    pTmp->SetLineColor(6);
+    pTmp->SetMarkerColor(6);
+    pTmp->SetMarkerStyle(24);
+    pTmp->Write();
+    pTmp = extractFlowVZEROsingle(icentr,1,arm,1,pTh,addbin,"piMC",1,1,-1,1)->ProjectionX();
+    pTmp->SetLineColor(4);
+    pTmp->SetMarkerColor(4);
+    pTmp->SetMarkerStyle(24);
+    pTmp->Write();
+    pTmp = extractFlowVZEROsingle(icentr,2,arm,1,pTh,addbin,"kaMC",1,1,-1,1)->ProjectionX();
+    pTmp->SetLineColor(1);
+    pTmp->SetMarkerColor(1);
+    pTmp->SetMarkerStyle(25);
+    pTmp->Write();
+    pTmp = extractFlowVZEROsingle(icentr,3,arm,1,pTh,addbin,"prMC",1,1,-1,-1)->ProjectionX();
+    pTmp->SetLineColor(2);
+    pTmp->SetMarkerColor(2);
+    pTmp->SetMarkerStyle(26);
+    pTmp->Write();
   }
+  extractFlowVZEROsingle(icentr,2,arm,0,pTh,addbin,"kProf")->Write();
+  extractFlowVZEROsingle(icentr,9,arm,0,pTh,addbin,"ks",0,1,1,1)->Write();
+  extractFlowVZEROsingle(icentr,9,arm,0,pTh,addbin,"ksMy",0,1,-1,-1)->Write();
+  extractFlowVZEROsingle(icentr,10,arm,0,pTh,addbin,"lambda")->Write();
+  pFromLambda->Write();
+  piFromK->Write();
+  pFromLambda2->Write();
+  piFromK2->Write();
+  piFromK3->Write();
+  if(hFeedSyst) hFeedSyst->Write();
+  fout->Close();
+}
+
+TProfile *extractFlowVZEROsingle(Int_t icentr,Int_t spec,Int_t arm,Bool_t isMC,Float_t pTh,Int_t addbin,const char *nameSp,Float_t detMin,Float_t detMax,Int_t chMin,Int_t chMax){
+  LoadLib();
+
+  pTh += 0.00001;
+
+  // NUA correction currently are missing
+  char name[100];
+  char stringa[200];
+
+  snprintf(name,100,"AnalysisResults.root");
+  if(!fo) fo = new TFile(name);
+  snprintf(name,100,"contVZEROv%i",arm);
+  TList *cont = (TList *) fo->Get(name);
+
+  cont->ls();
+
+  Float_t xMin[5] = {icentr/*centrality bin*/,chMin/*charge*/,pTh/*prob*/,-TMath::Pi()/arm/*Psi*/,detMin/*PID mask*/};
+  Float_t xMax[5] = {icentr+addbin,chMax,1.0,TMath::Pi()/arm,detMax};
+
+  cont->ls();
+
+  TProfile *p1 = cont->At(2);
+  TProfile *p2 = cont->At(3);
+  TProfile *p3 = cont->At(4);
 
-  if(charge==-1) iMax[2]=0;
-  if(charge==1) iMin[2]=0;
+  TH2F *hPsi2DA = cont->At(5);
+  TH2F *hPsi2DC = cont->At(6);
 
-  // EP distribution needed for NUA corrections
-  TH2F *hPhiA = l->At(5);
-  TH2F *hPhiC = l->At(6);
+  TH1D *hPsiA = hPsi2DA->ProjectionY("PsiA",icentr+1,icentr+addbin+1);
+  TH1D *hPsiC = hPsi2DC->ProjectionY("PsiC",icentr+1,icentr+addbin+1);
 
-  TH1D *hPhiPA = hPhiA->ProjectionY("_py",iMin[0]+1,iMax[0]+1);
-  TH1D *hPhiPC = hPhiC->ProjectionY("_py",iMin[0]+1,iMax[0]+1);
+  if(!fPsi) fPsi = new TF1("fPsi","pol0",-TMath::Pi()/arm,TMath::Pi()/arm);
+  hPsiA->Fit(fPsi,"0");
+  Float_t offsetA = fPsi->GetParameter(0);
+  hPsiC->Fit(fPsi,"0");
+  Float_t offsetC = fPsi->GetParameter(0);
+
+  Int_t nbinPsi = hPsiA->GetNbinsX();
+
+  Float_t *NUAcorrA = new Float_t[nbinPsi];
+  Float_t *NUAcorrC = new Float_t[nbinPsi];
+
+  for(Int_t i=0;i < nbinPsi;i++){
+    NUAcorrA[i] = offsetA/(hPsiA->GetBinContent(i+1));
+    NUAcorrC[i] = offsetC/(hPsiC->GetBinContent(i+1));
+  }
 
-  // EP resolution variables
   Float_t res1=0,res2=0,res3=0; 
   Float_t eres1=0,eres2=0,eres3=0; 
 
-  for(Int_t i=iMin[0];i<=iMax[0];i++){ // in case of more centrality bins weighting with the errors
+  for(Int_t i = icentr; i <= icentr+addbin;i++){
     if(p1->GetBinError(i+1)){
       eres1 += 1./p1->GetBinError(i+1)/p1->GetBinError(i+1);
       res1 += p1->GetBinContent(i+1)/p1->GetBinError(i+1)/p1->GetBinError(i+1);      
@@ -94,186 +478,255 @@ addbins = to merge more centrality bin (i.e. ibin = 2, addbins = 3 merge 2,3,4,5
       eres3 += 1./p3->GetBinError(i+1)/p3->GetBinError(i+1);
       res3 += p3->GetBinContent(i+1)/p3->GetBinError(i+1)/p3->GetBinError(i+1);      
     }
+  }
+
+  res1 /= eres1;
+  res2 /= eres2;
+  res3 /= eres3;
+  
+  eres1 = sqrt(1./eres1);
+  eres2 = sqrt(1./eres2);
+  eres3 = sqrt(1./eres3);
+
+  AliFlowVZEROResults *a = (AliFlowVZEROResults *) cont->At(0);
+  AliFlowVZEROResults *b = (AliFlowVZEROResults *) cont->At(1);
+  TProfile *pp,*pp2;
+  if(kNUAcorr){ // with NUA corrections
+    pp = a->GetV2reweight(spec,xMin,xMax,3,NUAcorrA);
+    pp2 = b->GetV2reweight(spec,xMin,xMax,3,NUAcorrC);
+  }
+  else{
+    pp = a->GetV2(spec,xMin,xMax);
+    pp2 = b->GetV2(spec,xMin,xMax);
+  }
+  
+  Float_t scaling = sqrt(res1*res3/res2);
+  if(kVZEROrescorr){
+    pp->Scale(1./scaling);
+  }
 
-    if(eres1) res1 /= eres1;
-    if(eres2) res2 /= eres2;
-    if(eres3) res3 /= eres3;
+  Float_t err1_2 = eres1*eres1/res1/res1/4 +
+    eres2*eres2/res2/res2/4 +
+    eres3*eres3/res3/res3/4;
+  Float_t err2_2 = err1_2;
+  err1_2 /= scaling*scaling;
+  printf("resolution V0A = %f +/- %f\n",scaling,err1_2);
+  scaling = sqrt(res2*res3/res1);
+  err2_2 /= scaling*scaling;
+  if(kVZEROrescorr){
+    pp2->Scale(1./scaling);
+  }
+  printf("resolution V0C =%f +/- %f\n",scaling,err2_2);
 
-    if(eres1) eres1 = TMath::Sqrt(1./eres1);
-    if(eres1) eres2 = TMath::Sqrt(1./eres2);
-    if(eres1) eres3 = TMath::Sqrt(1./eres3);
+  pp->SetName("V0A");
+  pp2->SetName("V0C");
+
+  if(! kCleanMemory){
+    new TCanvas();  
+    pp->Draw();
+    pp2->Draw("SAME");
   }
 
-  // NUA correction (fit to EP distribution)
-  TF1 *fpol = new TF1("fPol","pol0");
-  hPhiPA->Fit("fPol","","",-TMath::Pi()/arm,TMath::Pi()/arm);
-  Float_t scalA = fPol->GetParameter(0);
-  hPhiPC->Fit("fPol","","",-TMath::Pi()/arm,TMath::Pi()/arm);
-  Float_t scalC = fPol->GetParameter(0);
-
-  AliCFContainer *c2[20];
-  AliCFContainer *c4[20];
-  TH2D *h[20],*h2[20];
-
-  AliCFContainer *c2bis[20];
-  AliCFContainer *c4bis[20];
-
-  AliCFContainer *cPsi2[20];
-  AliCFContainer *cPsi4[20];
-  TH1D *hPsi[20],*hPsi2[20];
-  AliCFContainer *cPsi2bis[20];
-  AliCFContainer *cPsi4bis[20];
-
-  Float_t intA = 0;
-  Float_t intC = 0;
-
-  for(Int_t i=5;i<15;i++){
-    printf("%i\n",i);
-    iMin[5] = hPhiPA->GetBinCenter(i+1);
-    iMax[5] = hPhiPA->GetBinCenter(i+1);
-    if(!kOnlyTPC){
-      c2[i] = c->MakeSlice(2,iVar,iMin,iMax);
-      c4[i]= c3->MakeSlice(2,iVar,iMin,iMax);
+  TProfile *pData = new TProfile(*pp);
+  pData->Add(pp2);
+  snprintf(stringa,100,"%sData",nameSp);
+  pData->SetName(stringa);
+
+  TProfile *pMc = NULL;
+  
+  TProfile *ppMC;
+  TProfile *ppMC2;
+  
+  if(isMC){
+    snprintf(name,100,"contVZEROmc");
+    cont = (TList *) fo->Get(name);
+    cont->ls();
+    if(arm == 2){
+      AliFlowVZEROResults *c = (AliFlowVZEROResults *) cont->At(0);
+      if(! kCleanMemory) c->GetV2(spec,xMin,xMax)->Draw("SAME");
     }
-    else{ // merge to maskPID bins (TPC standalone without TOF + TPC stand alone with TOF)
-      iMin[6] = 0;
-      iMax[6] = 0;
-      c2[i] = c->MakeSlice(2,iVar,iMin,iMax);
-      c4[i]= c3->MakeSlice(2,iVar,iMin,iMax);
-
-      iMin[6] = 2;
-      iMax[6] = 2;
-      c2bis[i] = c->MakeSlice(2,iVar,iMin,iMax);
-      c4bis[i]= c3->MakeSlice(2,iVar,iMin,iMax);
-   }
-
-
-    if(!kOnlyTPC){
-      cPsi2[i] = c->MakeSlice(1,iVarPsi,iMin,iMax);
-      cPsi4[i]= c3->MakeSlice(1,iVarPsi,iMin,iMax);
+    AliFlowVZEROResults *cA;
+    if(fo->Get("contVZEROv2")) cA = (AliFlowVZEROResults *) cont->At(1+2*(arm==3));
+    else cA = (AliFlowVZEROResults *) cont->At(0);
+    AliFlowVZEROResults *cC;
+    if(fo->Get("contVZEROv2")) cC = (AliFlowVZEROResults *) cont->At(2+2*(arm==3));
+    else cC = (AliFlowVZEROResults *) cont->At(1);
+
+    TProfile *p1mc = cont->At(5+3*(arm==3));
+    TProfile *p2mc = cont->At(6+3*(arm==3));
+    TProfile *p3mc = cont->At(7+3*(arm==3));
+
+    Float_t resMC1=0,resMC2=0,resMC3=0; 
+    Float_t eresMC1=0,eresMC2=0,eresMC3=0; 
+
+    for(Int_t i = icentr; i <= icentr+addbin;i++){
+      if(p1mc->GetBinError(i+1)){
+       eresMC1 += 1./p1mc->GetBinError(i+1)/p1mc->GetBinError(i+1);
+       resMC1 += p1mc->GetBinContent(i+1)/p1mc->GetBinError(i+1)/p1mc->GetBinError(i+1);      
+      }
+      if(p2mc->GetBinError(i+1)){
+       eresMC2 += 1./p2mc->GetBinError(i+1)/p2mc->GetBinError(i+1);
+       resMC2 += p2mc->GetBinContent(i+1)/p2mc->GetBinError(i+1)/p2mc->GetBinError(i+1);      
+      }
+      if(p3mc->GetBinError(i+1)){
+       eresMC3 += 1./p3mc->GetBinError(i+1)/p3mc->GetBinError(i+1);
+       resMC3 += p3mc->GetBinContent(i+1)/p3mc->GetBinError(i+1)/p3mc->GetBinError(i+1);      
+      }
     }
-    else{ // merge to maskPID bins (TPC standalone without TOF + TPC stand alone with TOF)
-      iMin[6] = 0;
-      iMax[6] = 0;
-      cPsi2[i] = c->MakeSlice(1,iVarPsi,iMin,iMax);
-      cPsi4[i]= c3->MakeSlice(1,iVarPsi,iMin,iMax);
-
-      iMin[6] = 2;
-      iMax[6] = 2;
-      cPsi2bis[i] = c->MakeSlice(1,iVarPsi,iMin,iMax);
-      cPsi4bis[i]= c3->MakeSlice(1,iVarPsi,iMin,iMax);
+    
+    resMC1 /= eresMC1;
+    resMC2 /= eresMC2;
+    resMC3 /= eresMC3;
+    
+    eresMC1 = sqrt(1./eresMC1);
+    eresMC2 = sqrt(1./eresMC2);
+    eresMC3 = sqrt(1./eresMC3);
+
+    ppMC = cA->GetV2(spec,xMin,xMax);
+    ppMC2 = cC->GetV2(spec,xMin,xMax);
+    
+    scaling = sqrt(resMC1*resMC3/resMC2);
+    ppMC->Scale(1./scaling);
+  
+    err1_2 = eresMC1*eresMC1/resMC1/resMC1/4 +
+      eresMC2*eresMC2/resMC2/resMC2/4 +
+      eresMC3*eresMC3/resMC3/resMC3/4;
+    err2_2 = err1_2;
+    err1_2 /= scaling*scaling;
+    printf("resolution V0A (MC) = %f +/- %f\n",scaling,err1_2);
+    scaling = sqrt(resMC2*resMC3/resMC1);
+    err2_2 /= scaling*scaling;
+    ppMC2->Scale(1./scaling);
+    printf("resolution V0C (MC) =%f +/- %f\n",scaling,err2_2);
+
+    ppMC->SetName("V0Amc");
+    ppMC2->SetName("V0Cmc");
+
+    if(! kCleanMemory){
+      ppMC->Draw("SAME");
+      ppMC2->Draw("SAME");
     }
 
-    h[i] = (TH2D *) c2[i]->Project(step,0,1);
-    h2[i] = (TH2D *) c4[i]->Project(step,0,1);
-    if(kOnlyTPC){
-      TH2D *htemp = (TH2D *) c2bis[i]->Project(step,0,1);
-      h[i]->Add(htemp);
-      htemp = (TH2D *) c4bis[i]->Project(step,0,1);
-      h2[i]->Add(htemp);
-    }
+    pMc = new TProfile(*ppMC);
+    pMc->Add(ppMC2);
+    snprintf(stringa,100,"%sMC",nameSp);
+    pMc->SetName(stringa);
+    pMc->SetLineColor(2);
+  }
+
+  if(! kCleanMemory){
+    new TCanvas();  
+    pData->Draw();
+  }
+  if(pMc && !kCleanMemory){
+    pMc->Draw("SAME");
+    TH1D *hData = pData->ProjectionX();
+    TH1D *hMc = pMc->ProjectionX();
+    hData->Divide(hMc);
+    new TCanvas();  
+    hData->Draw();
+  }
 
-    if(hPhiPA->GetBinContent(i)) h[i]->Scale(scalA/hPhiPA->GetBinContent(i+1)); // reweighting for NUA correction
-    if(hPhiPC->GetBinContent(i)) h2[i]->Scale(scalC/hPhiPC->GetBinContent(i+1)); // reweighting for NUA correction
+  delete[] NUAcorrA;
+  delete[] NUAcorrC;
 
-    hPsi[i] = (TH1D *) cPsi2[i]->Project(step,0);
-    hPsi2[i] = (TH1D *) cPsi4[i]->Project(step,0);
+  if(kCleanMemory){
+    if(pp) delete pp;
+    if(pp2) delete pp2;
+    if(ppMC) delete ppMC;
+    if(ppMC2) delete ppMC2;
+  }
 
-    if(kOnlyTPC){ // merge to maskPID bins (TPC standalone without TOF + TPC stand alone with TOF)
-      TH1D *htemp2 = (TH1D *) cPsi2bis[i]->Project(step,0);
-      hPsi[i]->Add(htemp2);
-      htemp2 = (TH1D *) cPsi4bis[i]->Project(step,0);
-      hPsi2[i]->Add(htemp2);
-    }
+  delete cont;
 
-    if(hPhiPA->GetBinContent(i+1)) hPsi[i]->Scale(scalA/hPhiPA->GetBinContent(i+1)); // check of reweighting for NUA correction
-    if(hPhiPC->GetBinContent(i+1)) hPsi2[i]->Scale(scalC/hPhiPC->GetBinContent(i+1)); // check of reweighting for NUA correction
+  if(isMC) return pMc;
+  return pData;
+}
+void compareTPCTOF(Int_t icentr,Int_t spec,Int_t arm,Float_t pTh,Int_t addbin){
+  LoadLib();
+  Float_t ptMaxFit[8] = {20,0.7,0.55,1.2,2,2,2,2};
 
-    intA += hPsi[i]->Integral();
-    intC += hPsi2[i]->Integral();
+  TProfile *pTPC = extractFlowVZEROsingle(icentr,spec,arm,0,pTh,addbin,"TPC",0,0,-1,-1+2*(spec!=3)); // TPC && !TOF (TPC PID)
+  TProfile *pTPC2 = extractFlowVZEROsingle(icentr,spec,arm,0,pTh,addbin,"TPCextra",2,2,-1,-1+2*(spec!=3)); //TPC && TOF (TPC PID)
 
-  }
+  TProfile *pTOF = extractFlowVZEROsingle(icentr,spec,arm,0,pTh,addbin,"TOF",1,1,-1,-1+2*(spec!=3)); //TPC && TOF (TPC&TOF PID)
 
-//   hPhiPA->Scale(intA / (scalA)/10);
-//   hPhiPC->Scale(intC / (scalC)/10);
-
-  // NUA correction check V0A
-  hPhiPA->Draw();
-  hPsi[5]->Draw("SAME");
-  hPsi[5]->Scale(scalA / intA * 10);
-  for(Int_t i=6;i<15;i++){
-    h[5]->Add(h[i]);
-    h2[5]->Add(h2[i]);
-    hPsi[i]->Draw("SAME");
-    hPsi[i]->Scale(scalA / intA * 10);
-  }
+  if(spec > 0) pTPC->Add(pTPC2);
+  else pTPC->Add(pTOF);
 
-  // NUA correction check V0C
-  TCanvas *can2 = new TCanvas("cV0Ccheck","cV0Ccheck");
-  hPhiPC->Draw();
-  hPsi2[5]->Draw("SAME");
-  for(Int_t i=6;i<15;i++){
-    h[5]->Add(h[i]);
-    h2[5]->Add(h2[i]);
-    hPsi2[i]->Draw("SAME");
-    hPsi2[i]->Scale(scalC /intC * 10);
-  }
-  hPsi2[5]->Scale(scalC /intC * 10);
+  char name[100];
+  snprintf(name,100,"NUO_%i",spec);
 
-  // Flow for V0A and V0C separately
-  TCanvas *can3 = new TCanvas("cFlowComp","cFlowComp");
-  TProfile *pp = h[5]->ProfileY();
-  pp->Draw();
-  TProfile *pp2 = h2[5]->ProfileY();
-  pp2->Draw("SAME");
+  hNUO[spec] = pTPC->ProjectionX(name);
+  hNUO[spec]->Add(pTOF,-1);
 
-  printf("nev (selected within 0-80%) = %i\n",p1->GetEntries());
+  if(spec && hNUO[0]) hNUO[spec]->Add(hNUO[0],-1);
 
+  if(! kCleanMemory){
+    new TCanvas();
+    pTPC->Draw();
+    pTOF->Draw("SAME");
 
-  // correction for resoltion
-  Float_t scaling = sqrt(res1*res3/res2);
-  pp->Scale(1./scaling);
-  printf("resolution V0A = %f\n",scaling);
-  Float_t err1_2 = eres1*eres1/res1/res1/4 +
-                   eres2*eres2/res2/res2/4 +
-                   eres3*eres3/res3/res3/4;
-  Float_t err2_2 = err1_2;
-  err1_2 /= scaling*scaling;
-  scaling = sqrt(res2*res3/res1);
-  err2_2 /= scaling*scaling;
-  pp2->Scale(1./scaling);
-  printf("resolution V0C =%f\n",scaling);
-
-  char title[100];
-  sprintf(title,"VZERO EP;p_{t} (GeV/c);v_{%i}",arm);
-  pp->SetTitle(title);
-
-  // Average V0A-V0C
-  TH1D *pAll = pp->ProjectionX();
-
-  for(Int_t i=1;i <= pAll->GetNbinsX();i++){
-       Float_t e1 = err1_2*pp->GetBinContent(i)*pp->GetBinContent(i) + pp->GetBinError(i)*pp->GetBinError(i);
-       Float_t e2 = err2_2*pp2->GetBinContent(i)*pp2->GetBinContent(i) + pp2->GetBinError(i)*pp2->GetBinError(i);
-       Float_t xval = 0,exval = 0;
-       if(e1 >0 && e2>0){
-         xval = (pp->GetBinContent(i)/e1 + pp2->GetBinContent(i)/e2)/(1/e1 + 1/e2);     
-         exval = 1./sqrt(1/e1 + 1/e2);
-       }
-       pAll->SetBinContent(i,xval);
-       pAll->SetBinError(i,exval);
+    new TCanvas();  
+    pTPC->SetLineColor(1);
+    pTOF->SetLineColor(2);
   }
-  // combined measurement
-  TCanvas *can4 = new TCanvas("cFlowCombined","cFlowCombined");
-  pAll->Draw();
 
-  char name[100];
-  sprintf(name,"out%i-%i_%i_%4.2f_%i%sv%i.root",iMin[0],iMax[0],step,pTh,charge,iTechName[itech],arm);
-  TFile *fout = new TFile(name,"RECREATE");
+  hNUO[spec]->Draw();
 
-  pAll->SetName("histo");
-  pAll->Write();
-  can1->Write();
-  can2->Write();
-  can3->Write();
-  fout->Close();
+  if(kCleanMemory){
+    if(pTPC) delete pTPC;
+    if(pTPC2) delete pTPC2;
+    if(pTOF) delete pTOF;
+  }
+}
+
+void plotQApid(Int_t ic,Float_t pt,Int_t addbin){
+  char name[100];
+  char stringa[200];
+  LoadLib();
+
+  snprintf(name,100,"AnalysisResults.root");
+  if(!fo) fo = new TFile(name);
+  snprintf(name,100,"contVZEROv2");
+  TList *cont = (TList *) fo->Get(name);
+  AliFlowVZEROResults *pidqa = cont->FindObject("qaPID");
+  Float_t xval[2] = {2.,pt+0.00001};
+  Float_t xval2[2] = {2.+addbin,pt+0.00001};
+
+  TProfile *proTPCpi = pidqa->GetV2(0,xval,xval2);
+  TProfile *proTOFpi = pidqa->GetV2(1,xval,xval2);
+  TProfile *proTPCka = pidqa->GetV2(2,xval,xval2);
+  TProfile *proTOFka = pidqa->GetV2(3,xval,xval2);
+  TProfile *proTPCpr = pidqa->GetV2(4,xval,xval2);
+  TProfile *proTOFpr = pidqa->GetV2(5,xval,xval2);
+
+  proTPCpi->SetName("hPiTPC");
+  proTOFpi->SetName("hPiTOF");
+  proTPCka->SetName("hKaTPC");
+  proTOFka->SetName("hKaTOF");
+  proTPCpr->SetName("hPrTPC");
+  proTOFpr->SetName("hPrTOF");
+  
+  proTPCpi->GetXaxis()->SetTitle("dE/dx - dE/dx_{calc}^{#pi} (a.u)");
+  proTOFpi->GetXaxis()->SetTitle("t_{tof} - t_{calc}^{#pi} (ps)");
+  proTPCka->GetXaxis()->SetTitle("dE/dx - dE/dx_{calc}^{K} (a.u)");
+  proTOFka->GetXaxis()->SetTitle("t_{tof} - t_{calc}^{K} (ps)");
+  proTPCpr->GetXaxis()->SetTitle("dE/dx - dE/dx_{calc}^{p} (a.u)");
+  proTOFpr->GetXaxis()->SetTitle("t_{tof} - t_{calc}^{p} (ps)");
+
+  TCanvas *c = new TCanvas("cVproj","cVproj");
+  c->Divide(2,3);
+  c->cd(1);
+  proTPCpi->Draw();
+  c->cd(2);
+  proTOFpi->Draw();
+  c->cd(3);
+  proTPCka->Draw();
+  c->cd(4);
+  proTOFka->Draw();
+  c->cd(5);
+  proTPCpr->Draw();
+  c->cd(6);
+  proTOFpr->Draw();
 }