]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/SPECTRA/PiKaPr/TestAOD/AliSpectraAODEventCuts.cxx
TENDER becomes Tender
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TestAOD / AliSpectraAODEventCuts.cxx
index 8e4f57d04bf6a81d65b258f84e2d2066aad52cab..c2a7b2f52c0254edf8bfab46b51a3191b2d57ecf 100644 (file)
@@ -46,564 +46,611 @@ using namespace std;
 ClassImp(AliSpectraAODEventCuts)
 
 AliSpectraAODEventCuts::AliSpectraAODEventCuts(const char *name) : 
-  TNamed(name, "AOD Event Cuts"),
-  fAOD(0),
-  fSelectBit(AliVEvent::kMB),
-  fCentralityMethod("V0M"),
-  fTrackBits(1),
-  fIsMC(0),
-  fIsLHC10h(1),
-  fTrackCuts(0),
-  fIsSelected(0),
-  fCentralityCutMin(0.),
-  fCentralityCutMax(999),
-  fQVectorCutMin(-999.),
-  fQVectorCutMax(999.),
-  fVertexCutMin(-10.),
-  fVertexCutMax(10.),
-  fMultiplicityCutMin(-999.),
-  fMultiplicityCutMax(99999.),
-  fqV0C(-999.),
-  fqV0A(-999.),
-  fqV0Cx(-999.),
-  fqV0Ax(-999.),
-  fqV0Cy(-999.),
-  fqV0Ay(-999.),
-  fPsiV0C(-999.),
-  fPsiV0A(-999.),
-  fCent(-999.),
-  fOutput(0),
-  fCalib(0),
-  fRun(-1),
-  fMultV0(0),
-  fV0Cpol1(-1),
-  fV0Cpol2(-1),
-  fV0Cpol3(-1),
-  fV0Cpol4(-1),
-  fV0Apol1(-1),
-  fV0Apol2(-1),
-  fV0Apol3(-1),
-  fV0Apol4(-1),
-  fQvecIntList(0),
-  fQvecIntegral(0), 
-  fSplineArrayV0A(0),
-  fSplineArrayV0C(0),
-  fQgenIntegral(0), 
-  fSplineArrayV0Agen(0),
-  fSplineArrayV0Cgen(0),
-  fQvecMC(0),
-  fNch(0),
-  fQvecCalibType(0),
-  fV0Aeff(0)
+TNamed(name, "AOD Event Cuts"),
+fAOD(0),
+fSelectBit(AliVEvent::kMB),
+fCentralityMethod("V0M"),
+fTrackBits(1),
+fIsMC(0),
+fIsLHC10h(1),
+fTrackCuts(0),
+fIsSelected(0),
+fCentralityCutMin(0.),
+fCentralityCutMax(999),
+fQVectorCutMin(-999.),
+fQVectorCutMax(999.),
+fVertexCutMin(-10.),
+fVertexCutMax(10.),
+fMultiplicityCutMin(-999.),
+fMultiplicityCutMax(99999.),
+fqTPC(-999.),
+fqV0C(-999.),
+fqV0A(-999.),
+fqV0Cx(-999.),
+fqV0Ax(-999.),
+fqV0Cy(-999.),
+fqV0Ay(-999.),
+fPsiV0C(-999.),
+fPsiV0A(-999.),
+fCent(-999.),
+fOutput(0),
+fCalib(0),
+fRun(-1),
+fMultV0(0),
+fV0Cpol1(-1),
+fV0Cpol2(-1),
+fV0Cpol3(-1),
+fV0Cpol4(-1),
+fV0Apol1(-1),
+fV0Apol2(-1),
+fV0Apol3(-1),
+fV0Apol4(-1),
+fQvecIntList(0),
+fQvecIntegral(0),
+fSplineArrayV0A(0),
+fSplineArrayV0C(0),
+fSplineArrayTPC(0),
+fQgenIntegral(0),
+fSplineArrayV0Agen(0),
+fSplineArrayV0Cgen(0),
+fQvecMC(0),
+fNch(0),
+fQvecCalibType(0),
+fV0Aeff(0)
 {
-  // Constructor
-  fOutput=new TList();
-  fOutput->SetOwner();
-  fOutput->SetName("fOutput");
-  
-  fCalib=new TList();
-  fCalib->SetOwner();
-  fCalib->SetName("fCalib");
-  
-  fQvecIntList=new TList();
-  fQvecIntList->SetOwner();
-  fQvecIntList->SetName("fQvecIntList");
-  
-  TH1I *fHistoCuts = new TH1I("fHistoCuts", "Event Cuts", kNVtxCuts, -0.5, kNVtxCuts - 0.5);
-  TH1F *fHistoVtxBefSel = new TH1F("fHistoVtxBefSel", "Vtx distr before event selection;z (cm)",500,-15,15);
-  TH1F *fHistoVtxAftSel = new TH1F("fHistoVtxAftSel", "Vtx distr after event selection;z (cm)",500,-15,15);
-  TH1F *fHistoEtaBefSel = new TH1F("fHistoEtaBefSel", "Eta distr before event selection;eta",500,-2,2);
-  TH1F *fHistoEtaAftSel = new TH1F("fHistoEtaAftSel", "Eta distr after event selection;eta",500,-2,2);
-  TH1F *fHistoNChAftSel = new TH1F("fHistoNChAftSel", "NCh distr after event selection;Nch",2000,-0.5,1999.5);
-  TH2F *fHistoQVector = new TH2F("fHistoQVector", "QVector with VZERO distribution;centrality;Q vector from EP task",20,0,100,100,0,10);
-  TH2F *fHistoEP = new TH2F("fHistoEP", "EP with VZERO distribution;centrality;Psi_{EP} from EP task",20,0,100,100,-2,2);
-  TH2F *fPsiACor = new TH2F("fPsiACor", "EP with VZERO A distribution;centrality;Psi_{EP} VZERO-A",20,0,100,100,-2,2);
-  TH2F *fPsiCCor = new TH2F("fPsiCCor", "EP with VZERO C distribution;centrality;Psi_{EP} VZERO-C",20,0,100,100,-2,2);
-  TH2F *fQVecACor = new TH2F("fQVecACor", "QVec VZERO A;centrality;Qvector VZERO-A",20,0,100,100,0,10);
-  TH2F *fQVecCCor = new TH2F("fQVecCCor", "QVec VZERO C;centrality;Qvector VZERO-C",20,0,100,100,0,10);
-  TH2F *fV0M = new TH2F("fV0M", "V0 Multiplicity, before correction;V0 sector",64,-.5,63.5,500,0,1000);
-  TH2F *fV0MCor = new TH2F("fV0MCor", "V0 Multiplicity, after correction;V0 sector",64,-.5,63.5,500,0,1000);
-  TH2F *fV0Mmc = new TH2F("fV0Mmc", "V0 Multiplicity, before correction;V0 sector",64,-.5,63.5,500,0,1000);
-  
-  fSplineArrayV0A = new TObjArray();
-  fSplineArrayV0A->SetOwner();
-  fSplineArrayV0C = new TObjArray();
-  fSplineArrayV0C->SetOwner();
-  fSplineArrayV0Agen = new TObjArray();
-  fSplineArrayV0Agen->SetOwner();
-  fSplineArrayV0Cgen = new TObjArray();
-  fSplineArrayV0Cgen->SetOwner();
-  
-  fOutput->Add(fHistoCuts);
-  fOutput->Add(fHistoVtxBefSel);
-  fOutput->Add(fHistoVtxAftSel);
-  fOutput->Add(fHistoEtaBefSel);
-  fOutput->Add(fHistoEtaAftSel);
-  fOutput->Add(fHistoNChAftSel);
-  fOutput->Add(fHistoQVector);
-  fOutput->Add(fHistoEP);
-  fOutput->Add(fPsiACor);
-  fOutput->Add(fPsiCCor);
-  fOutput->Add(fQVecACor);
-  fOutput->Add(fQVecCCor);
-  fOutput->Add(fV0M);
-  fOutput->Add(fV0MCor);
-  fOutput->Add(fV0Mmc);
-  
-  for (Int_t i = 0; i<10; i++){
-    fMeanQxa2[i] = -1;
-    fMeanQya2[i] = -1;
-    fMeanQxc2[i] = -1;
-    fMeanQyc2[i] = -1;   
-  }
+       // Constructor
+       fOutput=new TList();
+       fOutput->SetOwner();
+       fOutput->SetName("fOutput");
+
+       fCalib=new TList();
+       fCalib->SetOwner();
+       fCalib->SetName("fCalib");
+
+       fQvecIntList=new TList();
+       fQvecIntList->SetOwner();
+       fQvecIntList->SetName("fQvecIntList");
+
+       TH1I *fHistoCuts = new TH1I("fHistoCuts", "Event Cuts", kNVtxCuts, -0.5, kNVtxCuts - 0.5);
+       TH1F *fHistoVtxBefSel = new TH1F("fHistoVtxBefSel", "Vtx distr before event selection;z (cm)",500,-15,15);
+       TH1F *fHistoVtxAftSel = new TH1F("fHistoVtxAftSel", "Vtx distr after event selection;z (cm)",500,-15,15);
+       TH1F *fHistoEtaBefSel = new TH1F("fHistoEtaBefSel", "Eta distr before event selection;eta",500,-2,2);
+       TH1F *fHistoEtaAftSel = new TH1F("fHistoEtaAftSel", "Eta distr after event selection;eta",500,-2,2);
+       TH1F *fHistoNChAftSel = new TH1F("fHistoNChAftSel", "NCh distr after event selection;Nch",2000,-0.5,1999.5);
+       TH2F *fHistoQVector = new TH2F("fHistoQVector", "QVector with VZERO distribution;centrality;Q vector from EP task",20,0,100,100,0,10);
+       TH2F *fHistoEP = new TH2F("fHistoEP", "EP with VZERO distribution;centrality;Psi_{EP} from EP task",20,0,100,100,-2,2);
+       TH2F *fPsiACor = new TH2F("fPsiACor", "EP with VZERO A distribution;centrality;Psi_{EP} VZERO-A",20,0,100,100,-2,2);
+       TH2F *fPsiCCor = new TH2F("fPsiCCor", "EP with VZERO C distribution;centrality;Psi_{EP} VZERO-C",20,0,100,100,-2,2);
+       TH2F *fQVecACor = new TH2F("fQVecACor", "QVec VZERO A;centrality;Qvector VZERO-A",20,0,100,100,0,10);
+       TH2F *fQVecCCor = new TH2F("fQVecCCor", "QVec VZERO C;centrality;Qvector VZERO-C",20,0,100,100,0,10);
+       TH2F *fV0M = new TH2F("fV0M", "V0 Multiplicity, before correction;V0 sector",64,-.5,63.5,500,0,1000);
+       TH2F *fV0MCor = new TH2F("fV0MCor", "V0 Multiplicity, after correction;V0 sector",64,-.5,63.5,500,0,1000);
+       TH2F *fV0Mmc = new TH2F("fV0Mmc", "V0 Multiplicity, before correction;V0 sector",64,-.5,63.5,500,0,1000);
+
+       fSplineArrayV0A = new TObjArray();
+       fSplineArrayV0A->SetOwner();
+       fSplineArrayV0C = new TObjArray();
+       fSplineArrayV0C->SetOwner();
+       fSplineArrayTPC = new TObjArray();
+       fSplineArrayTPC->SetOwner();
+       fSplineArrayV0Agen = new TObjArray();
+       fSplineArrayV0Agen->SetOwner();
+       fSplineArrayV0Cgen = new TObjArray();
+       fSplineArrayV0Cgen->SetOwner();
+
+       fOutput->Add(fHistoCuts);
+       fOutput->Add(fHistoVtxBefSel);
+       fOutput->Add(fHistoVtxAftSel);
+       fOutput->Add(fHistoEtaBefSel);
+       fOutput->Add(fHistoEtaAftSel);
+       fOutput->Add(fHistoNChAftSel);
+       fOutput->Add(fHistoQVector);
+       fOutput->Add(fHistoEP);
+       fOutput->Add(fPsiACor);
+       fOutput->Add(fPsiCCor);
+       fOutput->Add(fQVecACor);
+       fOutput->Add(fQVecCCor);
+       fOutput->Add(fV0M);
+       fOutput->Add(fV0MCor);
+       fOutput->Add(fV0Mmc);
+
+       for (Int_t i = 0; i<10; i++){
+               fMeanQxa2[i] = -1;
+               fMeanQya2[i] = -1;
+               fMeanQxc2[i] = -1;
+               fMeanQyc2[i] = -1;
+       }
 }
 
 //______________________________________________________
 Bool_t AliSpectraAODEventCuts::IsSelected(AliAODEvent * aod,AliSpectraAODTrackCuts     *trackcuts)
 {
-  // Returns true if Event Cuts are selected and applied
-  fAOD = aod;
-  fTrackCuts = trackcuts; // FIXME: if track cuts is 0, do not set (use the pre-set member). Do we need to pass this here at all??
-  // FIXME: all those references by name are slow.
-  ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kProcessedEvents);
-  Bool_t IsPhysSel = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fSelectBit);
-  if(!IsPhysSel)return IsPhysSel;
-  ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kPhysSelEvents);
-  //loop on tracks, before event selection, filling QA histos
-  AliAODVertex * vertex = fAOD->GetPrimaryVertex();//FIXME vertex is recreated
-  if(vertex)((TH1F*)fOutput->FindObject("fHistoVtxBefSel"))->Fill(vertex->GetZ());
-  fIsSelected =kFALSE;
-  if(CheckVtxRange() && CheckCentralityCut() && CheckMultiplicityCut()){ //selection on vertex and Centrality
-    fIsSelected=CheckQVectorCut(); // QVector is calculated only if the centrality and vertex are correct (performance)
-  }
-  if(fIsSelected){
-    ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kAcceptedEvents);
-    if(vertex)((TH1F*)fOutput->FindObject("fHistoVtxAftSel"))->Fill(vertex->GetZ());
-  }
-  Int_t Nch=0;
-  for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) {
-    AliAODTrack* track = fAOD->GetTrack(iTracks);
-    if (!fTrackCuts->IsSelected(track,kFALSE)) continue;
-    ((TH1F*)fOutput->FindObject("fHistoEtaBefSel"))->Fill(track->Eta());
-    if(fIsSelected){
-      ((TH1F*)fOutput->FindObject("fHistoEtaAftSel"))->Fill(track->Eta());
-      Nch++;
-    }
-  }
-  fNch = Nch;
-  if(fIsSelected)((TH1F*)fOutput->FindObject("fHistoNChAftSel"))->Fill(Nch);
-  return fIsSelected;
+       // Returns true if Event Cuts are selected and applied
+       fAOD = aod;
+       fTrackCuts = trackcuts; // FIXME: if track cuts is 0, do not set (use the pre-set member). Do we need to pass this here at all??
+       // FIXME: all those references by name are slow.
+       ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kProcessedEvents);
+       Bool_t IsPhysSel = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fSelectBit);
+       if(!IsPhysSel)return IsPhysSel;
+       ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kPhysSelEvents);
+       //loop on tracks, before event selection, filling QA histos
+       AliAODVertex * vertex = fAOD->GetPrimaryVertex();//FIXME vertex is recreated
+       if(vertex)((TH1F*)fOutput->FindObject("fHistoVtxBefSel"))->Fill(vertex->GetZ());
+       fIsSelected =kFALSE;
+       if(CheckVtxRange() && CheckCentralityCut() && CheckMultiplicityCut()){ //selection on vertex and Centrality
+               fIsSelected=CheckQVectorCut(); // QVector is calculated only if the centrality and vertex are correct (performance)
+       }
+       if(fIsSelected){
+               ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kAcceptedEvents);
+               if(vertex)((TH1F*)fOutput->FindObject("fHistoVtxAftSel"))->Fill(vertex->GetZ());
+       }
+       Int_t Nch=0;
+       for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) {
+               AliAODTrack* track = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iTracks));
+               if(!track) AliFatal("Not a standard AOD");
+               if (!fTrackCuts->IsSelected(track,kFALSE)) continue;
+               ((TH1F*)fOutput->FindObject("fHistoEtaBefSel"))->Fill(track->Eta());
+               if(fIsSelected){
+                       ((TH1F*)fOutput->FindObject("fHistoEtaAftSel"))->Fill(track->Eta());
+                       Nch++;
+               }
+       }
+       fNch = Nch;
+       if(fIsSelected)((TH1F*)fOutput->FindObject("fHistoNChAftSel"))->Fill(Nch);
+       return fIsSelected;
 }
 
 //______________________________________________________
 Bool_t AliSpectraAODEventCuts::CheckVtxRange()
 {
-  // reject events outside of range
-  AliAODVertex * vertex = fAOD->GetPrimaryVertex();
-  //when moving to 2011 wìone has to add a cut using SPD vertex.
-  //The point is that for events with |z|>20 the vertexer tracks is not working (only 2011!). One has to put a safety cut using SPD vertex large e.g. 15cm
-  if (!vertex)
-    {
-      ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kVtxNoEvent);
-      return kFALSE;
-    }
-  if (vertex->GetZ() > fVertexCutMin && vertex->GetZ() < fVertexCutMax)
-    {
-      return kTRUE;
-    }
-  ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kVtxRange);
-  return kFALSE;
+       // reject events outside of range
+       AliAODVertex * vertex = fAOD->GetPrimaryVertex();
+       //when moving to 2011 wìone has to add a cut using SPD vertex.
+       //The point is that for events with |z|>20 the vertexer tracks is not working (only 2011!). One has to put a safety cut using SPD vertex large e.g. 15cm
+       if (!vertex)
+       {
+               ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kVtxNoEvent);
+               return kFALSE;
+       }
+       if (vertex->GetZ() > fVertexCutMin && vertex->GetZ() < fVertexCutMax)
+       {
+               return kTRUE;
+       }
+       ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kVtxRange);
+       return kFALSE;
 }
 
 //______________________________________________________
 Bool_t AliSpectraAODEventCuts::CheckCentralityCut()
 {
-  // Check centrality cut
-  fCent=-999.;
-  fCent=fAOD->GetCentrality()->GetCentralityPercentile(fCentralityMethod.Data());
-  if ( (fCent <= fCentralityCutMax)  &&  (fCent >= fCentralityCutMin) )  return kTRUE;   
-  ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kVtxCentral);
-  return kFALSE;
+       // Check centrality cut
+       fCent=-999.;
+       fCent=fAOD->GetCentrality()->GetCentralityPercentile(fCentralityMethod.Data());
+       if ( (fCent <= fCentralityCutMax)  &&  (fCent >= fCentralityCutMin) )  return kTRUE;
+       ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kVtxCentral);
+       return kFALSE;
 }
 
 //______________________________________________________
 Bool_t AliSpectraAODEventCuts::CheckMultiplicityCut()
 {
-  // Check multiplicity cut
-  // FIXME: why this is not tracket in the track stats histos?
-  Int_t Ncharged=0;
-  for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++){
-    AliAODTrack* track = fAOD->GetTrack(iTracks);
-    if (!fTrackCuts->IsSelected(track,kFALSE)) continue;
-    Ncharged++;
-  }
-  if(Ncharged>fMultiplicityCutMin && Ncharged<fMultiplicityCutMax)return kTRUE;
-  
-  return kFALSE;
+       // Check multiplicity cut
+       // FIXME: why this is not tracket in the track stats histos?
+       Int_t Ncharged=0;
+       for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++){
+               AliAODTrack* track = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iTracks));
+               if(!track) AliFatal("Not a standard AOD");
+               if (!fTrackCuts->IsSelected(track,kFALSE)) continue;
+               Ncharged++;
+       }
+       if(Ncharged>fMultiplicityCutMin && Ncharged<fMultiplicityCutMax)return kTRUE;
+
+       return kFALSE;
 }
 
 //______________________________________________________
+
 Bool_t AliSpectraAODEventCuts::CheckQVectorCut()
 { 
-  Double_t qVZERO = -999.;
-  Double_t psi=-999.;
-  
-  if(fIsLHC10h){
-    qVZERO=CalculateQVectorLHC10h();
-    psi=fPsiV0A;
-  }else{
-    qVZERO=CalculateQVector();
-    psi=fPsiV0A;
-  }
-  
-  //cut on q vector
-  if(qVZERO<fQVectorCutMin || qVZERO>fQVectorCutMax)return kFALSE;
-  Double_t cent=fAOD->GetCentrality()->GetCentralityPercentile(fCentralityMethod.Data());
-  ((TH2F*)fOutput->FindObject("fHistoQVector"))->Fill(cent,qVZERO);
-  ((TH2F*)fOutput->FindObject("fHistoEP"))->Fill(cent,psi);
-  ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kQVector);
-  
-
-  return kTRUE;
+       Double_t qVZERO = -999.;
+       Double_t psi=-999.;
+
+       if(fIsLHC10h){
+               qVZERO=CalculateQVectorLHC10h();
+               psi=fPsiV0A;
+       }else{
+               qVZERO=CalculateQVector();
+               psi=fPsiV0A;
+       }
+       //q vector from TPC
+       fqTPC=CalculateQVectorTPC();
+
+       //cut on q vector
+       if(qVZERO<fQVectorCutMin || qVZERO>fQVectorCutMax)return kFALSE;
+       Double_t cent=fAOD->GetCentrality()->GetCentralityPercentile(fCentralityMethod.Data());
+       ((TH2F*)fOutput->FindObject("fHistoQVector"))->Fill(cent,qVZERO);
+       ((TH2F*)fOutput->FindObject("fHistoEP"))->Fill(cent,psi);
+       ((TH1I*)fOutput->FindObject("fHistoCuts"))->Fill(kQVector);
+
+
+       return kTRUE;
 }
 
 //______________________________________________________
 Double_t AliSpectraAODEventCuts::CalculateQVectorLHC10h(){
-  
-  Int_t run = fAOD->GetRunNumber();
-  if(run != fRun){
-    // Load the calibrations run dependent
-    if(OpenInfoCalbration(run))fRun=run;
-    else{
-      fqV0C=-999.;
-      fqV0A=-999.;
-      return -999.;
-    }
-  }
-  
-  //V0 info    
-  Double_t Qxa2 = 0, Qya2 = 0;
-  Double_t Qxc2 = 0, Qyc2 = 0;
-  Double_t sumMc = 0, sumMa = 0;
-  
-  AliAODVZERO* aodV0 = fAOD->GetVZEROData();
-  
-  for (Int_t iv0 = 0; iv0 < 64; iv0++) {
-    
-    Double_t phiV0 = TMath::PiOver4()*(0.5 + iv0 % 8);
-    
-    Float_t multv0 = aodV0->GetMultiplicity(iv0);
-    ((TH2F*)fOutput->FindObject("fV0M"))->Fill(iv0,multv0);
-    
-    if (iv0 < 32){
-      
-      Double_t multCorC = -10;
-      
-      if (iv0 < 8)
-       multCorC = multv0*fV0Cpol1/fMultV0->GetBinContent(iv0+1);
-      else if (iv0 >= 8 && iv0 < 16)
-       multCorC = multv0*fV0Cpol2/fMultV0->GetBinContent(iv0+1);
-      else if (iv0 >= 16 && iv0 < 24)
-       multCorC = multv0*fV0Cpol3/fMultV0->GetBinContent(iv0+1);
-      else if (iv0 >= 24 && iv0 < 32)
-       multCorC = multv0*fV0Cpol4/fMultV0->GetBinContent(iv0+1);
-      
-      if (multCorC < 0){
-       cout<<"Problem with multiplicity in V0C"<<endl;
-       fqV0C=-999.;
-       fqV0A=-999.;
-       return -999.;
-      }
-      
-      Qxc2 += TMath::Cos(2*phiV0) * multCorC;
-      Qyc2 += TMath::Sin(2*phiV0) * multCorC;
-      
-      sumMc += multCorC;
-      ((TH2F*)fOutput->FindObject("fV0MCor"))->Fill(iv0,multCorC);
-      
-    } else {
-      
-      Double_t multCorA = -10;
-      
-      if (iv0 >= 32 && iv0 < 40)
-       multCorA = multv0*fV0Apol1/fMultV0->GetBinContent(iv0+1);
-      else if (iv0 >= 40 && iv0 < 48)
-       multCorA = multv0*fV0Apol2/fMultV0->GetBinContent(iv0+1);
-      else if (iv0 >= 48 && iv0 < 56)
-       multCorA = multv0*fV0Apol3/fMultV0->GetBinContent(iv0+1);
-      else if (iv0 >= 56 && iv0 < 64)
-       multCorA = multv0*fV0Apol4/fMultV0->GetBinContent(iv0+1);
-      
-      if (multCorA < 0){
-       cout<<"Problem with multiplicity in V0A"<<endl;
-       fqV0C=-999.;
-       fqV0A=-999.;
-       return -999.;
-      }
-      
-      Qxa2 += TMath::Cos(2*phiV0) * multCorA;
-      Qya2 += TMath::Sin(2*phiV0) * multCorA;
-      
-      sumMa += multCorA;
-      ((TH2F*)fOutput->FindObject("fV0MCor"))->Fill(iv0,multCorA);
-    }
-  }
-  
-  Short_t centrV0  = GetCentrCode(fAOD);
-  
-  Double_t Qxamean2 = 0.;
-  Double_t Qyamean2 = 0.;
-  Double_t Qxcmean2 = 0.;
-  Double_t Qycmean2 = 0.;
-  
-  if(centrV0!=-1){
-    Qxamean2 = fMeanQxa2[centrV0];
-    Qyamean2 = fMeanQya2[centrV0];
-    Qxcmean2 = fMeanQxc2[centrV0];
-    Qycmean2 = fMeanQyc2[centrV0];
-  }
-  
-  Double_t QxaCor2 = Qxa2 - Qxamean2*sumMa;
-  Double_t QyaCor2 = Qya2 - Qyamean2*sumMa;
-  Double_t QxcCor2 = Qxc2 - Qxcmean2*sumMc;
-  Double_t QycCor2 = Qyc2 - Qycmean2*sumMc;
-  
-  fPsiV0A = TMath::ATan2(QyaCor2, QxaCor2)/2.;
-  fPsiV0C = TMath::ATan2(QycCor2, QxcCor2)/2.;
-  
-  ((TH2F*)fOutput->FindObject("fPsiACor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fPsiV0A);
-  ((TH2F*)fOutput->FindObject("fPsiCCor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fPsiV0C);
-  
-  fqV0A = TMath::Sqrt((QxaCor2*QxaCor2 + QyaCor2*QyaCor2)/sumMa);
-  fqV0C = TMath::Sqrt((QxcCor2*QxcCor2 + QycCor2*QycCor2)/sumMc);
-  fqV0Ax = QxaCor2*TMath::Sqrt(1./sumMa);
-  fqV0Cx = QxcCor2*TMath::Sqrt(1./sumMc);
-  fqV0Ay = QyaCor2*TMath::Sqrt(1./sumMa);
-  fqV0Cy = QycCor2*TMath::Sqrt(1./sumMc);
-  
-  ((TH2F*)fOutput->FindObject("fQVecACor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fqV0A);
-  ((TH2F*)fOutput->FindObject("fQVecCCor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fqV0C);
-  
-  return fqV0A; //FIXME we have to combine VZERO-A and C
+
+       Int_t run = fAOD->GetRunNumber();
+       if(run != fRun){
+               // Load the calibrations run dependent
+               if(OpenInfoCalbration(run))fRun=run;
+               else{
+                       fqV0C=-999.;
+                       fqV0A=-999.;
+                       return -999.;
+               }
+       }
+
+       //V0 info
+       Double_t Qxa2 = 0, Qya2 = 0;
+       Double_t Qxc2 = 0, Qyc2 = 0;
+       Double_t sumMc = 0, sumMa = 0;
+
+       AliAODVZERO* aodV0 = fAOD->GetVZEROData();
+
+       for (Int_t iv0 = 0; iv0 < 64; iv0++) {
+
+               Double_t phiV0 = TMath::PiOver4()*(0.5 + iv0 % 8);
+
+               Float_t multv0 = aodV0->GetMultiplicity(iv0);
+               ((TH2F*)fOutput->FindObject("fV0M"))->Fill(iv0,multv0);
+
+               if (iv0 < 32){
+
+                       Double_t multCorC = -10;
+
+                       if (iv0 < 8)
+                               multCorC = multv0*fV0Cpol1/fMultV0->GetBinContent(iv0+1);
+                       else if (iv0 >= 8 && iv0 < 16)
+                               multCorC = multv0*fV0Cpol2/fMultV0->GetBinContent(iv0+1);
+                       else if (iv0 >= 16 && iv0 < 24)
+                               multCorC = multv0*fV0Cpol3/fMultV0->GetBinContent(iv0+1);
+                       else if (iv0 >= 24 && iv0 < 32)
+                               multCorC = multv0*fV0Cpol4/fMultV0->GetBinContent(iv0+1);
+
+                       if (multCorC < 0){
+                               cout<<"Problem with multiplicity in V0C"<<endl;
+                               fqV0C=-999.;
+                               fqV0A=-999.;
+                               return -999.;
+                       }
+
+                       Qxc2 += TMath::Cos(2*phiV0) * multCorC;
+                       Qyc2 += TMath::Sin(2*phiV0) * multCorC;
+
+                       sumMc += multCorC;
+                       ((TH2F*)fOutput->FindObject("fV0MCor"))->Fill(iv0,multCorC);
+
+               } else {
+
+                       Double_t multCorA = -10;
+
+                       if (iv0 >= 32 && iv0 < 40)
+                               multCorA = multv0*fV0Apol1/fMultV0->GetBinContent(iv0+1);
+                       else if (iv0 >= 40 && iv0 < 48)
+                               multCorA = multv0*fV0Apol2/fMultV0->GetBinContent(iv0+1);
+                       else if (iv0 >= 48 && iv0 < 56)
+                               multCorA = multv0*fV0Apol3/fMultV0->GetBinContent(iv0+1);
+                       else if (iv0 >= 56 && iv0 < 64)
+                               multCorA = multv0*fV0Apol4/fMultV0->GetBinContent(iv0+1);
+
+                       if (multCorA < 0){
+                               cout<<"Problem with multiplicity in V0A"<<endl;
+                               fqV0C=-999.;
+                               fqV0A=-999.;
+                               return -999.;
+                       }
+
+                       Qxa2 += TMath::Cos(2*phiV0) * multCorA;
+                       Qya2 += TMath::Sin(2*phiV0) * multCorA;
+
+                       sumMa += multCorA;
+                       ((TH2F*)fOutput->FindObject("fV0MCor"))->Fill(iv0,multCorA);
+               }
+       }
+
+       Short_t centrV0  = GetCentrCode(fAOD);
+
+       Double_t Qxamean2 = 0.;
+       Double_t Qyamean2 = 0.;
+       Double_t Qxcmean2 = 0.;
+       Double_t Qycmean2 = 0.;
+
+       if(centrV0!=-1){
+               Qxamean2 = fMeanQxa2[centrV0];
+               Qyamean2 = fMeanQya2[centrV0];
+               Qxcmean2 = fMeanQxc2[centrV0];
+               Qycmean2 = fMeanQyc2[centrV0];
+       }
+
+       Double_t QxaCor2 = Qxa2 - Qxamean2*sumMa;
+       Double_t QyaCor2 = Qya2 - Qyamean2*sumMa;
+       Double_t QxcCor2 = Qxc2 - Qxcmean2*sumMc;
+       Double_t QycCor2 = Qyc2 - Qycmean2*sumMc;
+
+       fPsiV0A = TMath::ATan2(QyaCor2, QxaCor2)/2.;
+       fPsiV0C = TMath::ATan2(QycCor2, QxcCor2)/2.;
+
+       ((TH2F*)fOutput->FindObject("fPsiACor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fPsiV0A);
+       ((TH2F*)fOutput->FindObject("fPsiCCor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fPsiV0C);
+
+       fqV0A = TMath::Sqrt((QxaCor2*QxaCor2 + QyaCor2*QyaCor2)/sumMa);
+       fqV0C = TMath::Sqrt((QxcCor2*QxcCor2 + QycCor2*QycCor2)/sumMc);
+       fqV0Ax = QxaCor2*TMath::Sqrt(1./sumMa);
+       fqV0Cx = QxcCor2*TMath::Sqrt(1./sumMc);
+       fqV0Ay = QyaCor2*TMath::Sqrt(1./sumMa);
+       fqV0Cy = QycCor2*TMath::Sqrt(1./sumMc);
+
+       ((TH2F*)fOutput->FindObject("fQVecACor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fqV0A);
+       ((TH2F*)fOutput->FindObject("fQVecCCor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fqV0C);
+
+       return fqV0A; //FIXME we have to combine VZERO-A and C
+}
+
+//______________________________________________________
+
+Double_t AliSpectraAODEventCuts::CalculateQVectorTPC(Double_t etaMin,Double_t etaMax){
+
+       Double_t Qx2 = 0, Qy2 = 0;
+       Int_t mult = 0;
+       for(Int_t iT = 0; iT < fAOD->GetNumberOfTracks(); iT++) {
+               AliAODTrack* aodTrack = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iT));
+               if(!aodTrack) AliFatal("Not a standard AOD");
+               if (!aodTrack->TestFilterBit(128)) continue;  //FIXME track type hard coded -> TPC only constrained to the vertex
+               if (aodTrack->Eta() <etaMin || aodTrack->Eta() > etaMax)continue;
+               mult++;
+               Qx2 += TMath::Cos(2*aodTrack->Phi());
+               Qy2 += TMath::Sin(2*aodTrack->Phi());
+       }
+       if(mult!=0)fqTPC= TMath::Sqrt((Qx2*Qx2 + Qy2*Qy2)/mult);
+       return fqTPC;
 }
 
 //______________________________________________________
+
 Double_t AliSpectraAODEventCuts::CalculateQVector(){
-  
-  //V0 info    
-  Double_t Qxa2 = 0, Qya2 = 0;
-  Double_t Qxc2 = 0, Qyc2 = 0;
-  
-  AliAODVZERO* aodV0 = fAOD->GetVZEROData();
-  
-  for (Int_t iv0 = 0; iv0 < 64; iv0++) {
-    
-    Float_t multv0 = aodV0->GetMultiplicity(iv0);
-  
-    ((TH2F*)fOutput->FindObject("fV0M"))->Fill(iv0,multv0);
-    
-  }
-
-  fPsiV0A = fAOD->GetEventplane()->CalculateVZEROEventPlane(fAOD,8,2,Qxa2,Qya2); // V0A
-  fPsiV0C = fAOD->GetEventplane()->CalculateVZEROEventPlane(fAOD,9,2,Qxc2,Qyc2); // V0C
-  
-  ((TH2F*)fOutput->FindObject("fPsiACor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fPsiV0A);
-  ((TH2F*)fOutput->FindObject("fPsiCCor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fPsiV0C);
-  
-  fqV0A = TMath::Sqrt((Qxa2*Qxa2 + Qya2*Qya2));
-  fqV0C = TMath::Sqrt((Qxc2*Qxc2 + Qyc2*Qyc2));
-  fqV0Ax = Qxa2;
-  fqV0Cx = Qxc2;
-  fqV0Ay = Qya2;
-  fqV0Cy = Qyc2;
-  
-  ((TH2F*)fOutput->FindObject("fQVecACor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fqV0A);
-  ((TH2F*)fOutput->FindObject("fQVecCCor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fqV0C);
-  
-  return fqV0A; //FIXME we have to combine VZERO-A and C
-  
+
+       //V0 info
+       Double_t Qxa2 = 0, Qya2 = 0;
+       Double_t Qxc2 = 0, Qyc2 = 0;
+
+       AliAODVZERO* aodV0 = fAOD->GetVZEROData();
+
+       for (Int_t iv0 = 0; iv0 < 64; iv0++) {
+
+               Float_t multv0 = aodV0->GetMultiplicity(iv0);
+
+               ((TH2F*)fOutput->FindObject("fV0M"))->Fill(iv0,multv0);
+
+       }
+
+       fPsiV0A = fAOD->GetEventplane()->CalculateVZEROEventPlane(fAOD,8,2,Qxa2,Qya2); // V0A
+       fPsiV0C = fAOD->GetEventplane()->CalculateVZEROEventPlane(fAOD,9,2,Qxc2,Qyc2); // V0C
+
+       ((TH2F*)fOutput->FindObject("fPsiACor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fPsiV0A);
+       ((TH2F*)fOutput->FindObject("fPsiCCor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fPsiV0C);
+
+       if(fIsMC){
+         //in MC, when the EPSelectionTask is not called the q-vectors are no longer self-normalized
+         
+         Double_t multA = aodV0->GetMTotV0A();
+         fqV0A = TMath::Sqrt((Qxa2*Qxa2 + Qya2*Qya2)/multA);
+         
+         Double_t multC = aodV0->GetMTotV0C();
+         fqV0C = TMath::Sqrt((Qxc2*Qxc2 + Qyc2*Qyc2)/multC);
+         
+         fqV0Ax = Qxa2*TMath::Sqrt(1./multA);
+         fqV0Cx = Qxc2*TMath::Sqrt(1./multC);
+         fqV0Ay = Qya2*TMath::Sqrt(1./multA);
+         fqV0Cy = Qyc2*TMath::Sqrt(1./multC);
+
+       } else {
+       
+         fqV0A = TMath::Sqrt((Qxa2*Qxa2 + Qya2*Qya2));
+         fqV0C = TMath::Sqrt((Qxc2*Qxc2 + Qyc2*Qyc2));
+         fqV0Ax = Qxa2;
+         fqV0Cx = Qxc2;
+         fqV0Ay = Qya2;
+         fqV0Cy = Qyc2;
+         
+       }
+
+       ((TH2F*)fOutput->FindObject("fQVecACor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fqV0A);
+       ((TH2F*)fOutput->FindObject("fQVecCCor"))->Fill((Float_t)fAOD->GetCentrality()->GetCentralityPercentile("V0M"), fqV0C);
+
+       return fqV0A; //FIXME we have to combine VZERO-A and C
+
 }
 
 //______________________________________________________
 Short_t AliSpectraAODEventCuts::GetCentrCode(AliVEvent* ev)
 {
-  
-  Short_t centrCode = -1;
-  
-  AliCentrality* centrality = 0;
-  AliAODEvent* aod = (AliAODEvent*)ev;  
-  centrality = aod->GetHeader()->GetCentralityP();
-  
-  Float_t centV0 = centrality->GetCentralityPercentile("V0M");
-  Float_t centTrk = centrality->GetCentralityPercentile("TRK"); 
-  
-  
-  if (TMath::Abs(centV0 - centTrk) < 5.0 && centV0 <= 80 && centV0 > 0){  
-    
-     if ((centV0 > 0) && (centV0 <= 5.0))
-       centrCode = 0; 
-     else if ((centV0 > 5.0) && (centV0 <= 10.0))
-       centrCode = 1;
-     else if ((centV0 > 10.0) && (centV0 <= 20.0))
-       centrCode = 2;
-     else if ((centV0 > 20.0) && (centV0 <= 30.0))
-       centrCode = 3;   
-     else if ((centV0 > 30.0) && (centV0 <= 40.0))
-       centrCode = 4; 
-     else if ((centV0 > 40.0) && (centV0 <= 50.0))
-       centrCode = 5;  
-     else if ((centV0 > 50.0) && (centV0 <= 60.0))
-       centrCode = 6;
-     else if ((centV0 > 60.0) && (centV0 <= 70.0))
-       centrCode = 7;                                 
-     else if ((centV0 > 70.0) && (centV0 <= 80.0))
-       centrCode = 8;  
-  }
-  
-  return centrCode;
-  
+
+       Short_t centrCode = -1;
+
+       AliCentrality* centrality = 0;
+       AliAODEvent* aod = (AliAODEvent*)ev;
+       centrality = ((AliVAODHeader*)aod->GetHeader())->GetCentralityP();
+
+       Float_t centV0 = centrality->GetCentralityPercentile("V0M");
+       Float_t centTrk = centrality->GetCentralityPercentile("TRK");
+
+
+       if (TMath::Abs(centV0 - centTrk) < 5.0 && centV0 <= 80 && centV0 > 0){
+
+               if ((centV0 > 0) && (centV0 <= 5.0))
+                       centrCode = 0;
+               else if ((centV0 > 5.0) && (centV0 <= 10.0))
+                       centrCode = 1;
+               else if ((centV0 > 10.0) && (centV0 <= 20.0))
+                       centrCode = 2;
+               else if ((centV0 > 20.0) && (centV0 <= 30.0))
+                       centrCode = 3;
+               else if ((centV0 > 30.0) && (centV0 <= 40.0))
+                       centrCode = 4;
+               else if ((centV0 > 40.0) && (centV0 <= 50.0))
+                       centrCode = 5;
+               else if ((centV0 > 50.0) && (centV0 <= 60.0))
+                       centrCode = 6;
+               else if ((centV0 > 60.0) && (centV0 <= 70.0))
+                       centrCode = 7;
+               else if ((centV0 > 70.0) && (centV0 <= 80.0))
+                       centrCode = 8;
+       }
+
+       return centrCode;
+
 }
 
 //______________________________________________________
 void AliSpectraAODEventCuts::PrintCuts()
 {
-  // print info about event cuts
-  cout << "Event Stats" << endl;
-  cout << " > Trigger Selection: " << fSelectBit << endl;
-  cout << " > Centrality estimator: " << fCentralityMethod << endl;
-  cout << " > Number of accepted events: " << NumberOfEvents() << endl;
-  cout << " > Number of processed events: " << NumberOfProcessedEvents() << endl;
-  cout << " > Number of PhysSel events: " <<  NumberOfPhysSelEvents()  << endl;
-  cout << " > Vertex out of range: " << ((TH1I*)fOutput->FindObject("fHistoCuts"))->GetBinContent(kVtxRange + 1) << endl;
-  cout << " > Events cut by centrality: " << ((TH1I*)fOutput->FindObject("fHistoCuts"))->GetBinContent(kVtxCentral + 1) << endl;
-  cout << " > Events without vertex: " << ((TH1I*)fOutput->FindObject("fHistoCuts"))->GetBinContent(kVtxNoEvent + 1) << endl;
-  cout << " > QVector cut: " << ((TH1I*)fOutput->FindObject("fHistoCuts"))->GetBinContent(kQVector + 1) << endl;
-  cout << " > Track type used for the QVector calculation: " << fTrackBits << endl;
-  cout << " > QRange: [" << fQVectorCutMin <<"," <<fQVectorCutMax<<"]"<< endl;
-  cout << " > Vertex: [" << fVertexCutMin <<"," <<fVertexCutMax<<"]"<< endl;
-  cout << " > Multiplicity: [" << fMultiplicityCutMin <<"," <<fMultiplicityCutMax<<"]"<< endl;
-  cout << " > Centrality: [" << fCentralityCutMin <<"," <<fCentralityCutMax<<"]"<< endl;
+       // print info about event cuts
+       cout << "Event Stats" << endl;
+       cout << " > Trigger Selection: " << fSelectBit << endl;
+       cout << " > Centrality estimator: " << fCentralityMethod << endl;
+       cout << " > Number of accepted events: " << NumberOfEvents() << endl;
+       cout << " > Number of processed events: " << NumberOfProcessedEvents() << endl;
+       cout << " > Number of PhysSel events: " <<  NumberOfPhysSelEvents()  << endl;
+       cout << " > Vertex out of range: " << ((TH1I*)fOutput->FindObject("fHistoCuts"))->GetBinContent(kVtxRange + 1) << endl;
+       cout << " > Events cut by centrality: " << ((TH1I*)fOutput->FindObject("fHistoCuts"))->GetBinContent(kVtxCentral + 1) << endl;
+       cout << " > Events without vertex: " << ((TH1I*)fOutput->FindObject("fHistoCuts"))->GetBinContent(kVtxNoEvent + 1) << endl;
+       cout << " > QVector cut: " << ((TH1I*)fOutput->FindObject("fHistoCuts"))->GetBinContent(kQVector + 1) << endl;
+       cout << " > Track type used for the QVector calculation: " << fTrackBits << endl;
+       cout << " > QRange: [" << fQVectorCutMin <<"," <<fQVectorCutMax<<"]"<< endl;
+       cout << " > Vertex: [" << fVertexCutMin <<"," <<fVertexCutMax<<"]"<< endl;
+       cout << " > Multiplicity: [" << fMultiplicityCutMin <<"," <<fMultiplicityCutMax<<"]"<< endl;
+       cout << " > Centrality: [" << fCentralityCutMin <<"," <<fCentralityCutMax<<"]"<< endl;
 }
 
 //_____________________________________________________________________________
 Bool_t AliSpectraAODEventCuts::OpenInfoCalbration(Int_t run)
 {
-  
-  AliOADBContainer* cont = (AliOADBContainer*) fCalib->FindObject("hMultV0BefCorr");
-  if(!cont){
-    printf("OADB object hMultV0BefCorr is not available in the file\n");
-    return 0;  
-  }
-  
-  if(!(cont->GetObject(run))){
-    printf("OADB object hMultV0BefCorr is not available for run %i\n",run);
-    return 0;  
-  }
-  fMultV0 = ((TH2F*) cont->GetObject(run))->ProfileX();
-  
-  TF1* fpolc1 = new TF1("fpolc1","pol0", 0, 7); 
-  fMultV0->Fit(fpolc1, "RN");
-  fV0Cpol1 = fpolc1->GetParameter(0);
-  
-  TF1* fpolc2 = new TF1("fpolc2","pol0", 8, 15); 
-  fMultV0->Fit(fpolc2, "RN");
-  fV0Cpol2 = fpolc2->GetParameter(0);
-  
-  TF1* fpolc3 = new TF1("fpolc3","pol0", 16, 23); 
-  fMultV0->Fit(fpolc3, "RN");
-  fV0Cpol3 = fpolc3->GetParameter(0);
-  
-  TF1* fpolc4 = new TF1("fpolc4","pol0", 24, 31); 
-  fMultV0->Fit(fpolc4, "RN");
-  fV0Cpol4 = fpolc4->GetParameter(0);
-  
-  TF1* fpola1 = new TF1("fpola1","pol0", 32, 39);
-  fMultV0->Fit(fpola1, "RN");
-  fV0Apol1 = fpola1->GetParameter(0);
-
-  TF1* fpola2 = new TF1("fpola2","pol0", 40, 47);
-  fMultV0->Fit(fpola2, "RN");
-  fV0Apol2 = fpola2->GetParameter(0);
-  
-  TF1* fpola3 = new TF1("fpola3","pol0", 48, 55);
-  fMultV0->Fit(fpola3, "RN");
-  fV0Apol3 = fpola3->GetParameter(0);
-  
-  TF1* fpola4 = new TF1("fpola4","pol0", 56, 63);
-  fMultV0->Fit(fpola4, "RN");
-  fV0Apol4 = fpola4->GetParameter(0);
-
-  for(Int_t i=0; i < 10; i++){
-
-    char nameQxa2[100];
-    snprintf(nameQxa2,100, "hQxa2m_%i", i);
-
-    char nameQya2[100];
-    snprintf(nameQya2,100, "hQya2m_%i", i);
-
-    char nameQxc2[100];
-    snprintf(nameQxc2,100, "hQxc2m_%i", i);
-
-    char nameQyc2[100];
-    snprintf(nameQyc2,100, "hQyc2m_%i", i);
-       
-    AliOADBContainer* contQxa2 = (AliOADBContainer*) fCalib->FindObject(nameQxa2);
-    if(!contQxa2){
-      printf("OADB object %s is not available in the file\n", nameQxa2);
-      return 0;        
-    }
-       
-    if(!(contQxa2->GetObject(run))){
-      printf("OADB object %s is not available for run %i\n", nameQxa2, run);
-      return 0;        
-    }
-
-    fMeanQxa2[i] = ((TH1F*) contQxa2->GetObject(run))->GetMean();
-
-    AliOADBContainer* contQya2 = (AliOADBContainer*) fCalib->FindObject(nameQya2);
-    if(!contQya2){
-      printf("OADB object %s is not available in the file\n", nameQya2);
-      return 0;        
-    }
-       
-    if(!(contQya2->GetObject(run))){
-      printf("OADB object %s is not available for run %i\n", nameQya2, run);
-      return 0;        
-    }
 
-    fMeanQya2[i] = ((TH1F*) contQya2->GetObject(run))->GetMean();
+       AliOADBContainer* cont = (AliOADBContainer*) fCalib->FindObject("hMultV0BefCorr");
+       if(!cont){
+               printf("OADB object hMultV0BefCorr is not available in the file\n");
+               return 0;
+       }
 
+       if(!(cont->GetObject(run))){
+               printf("OADB object hMultV0BefCorr is not available for run %i\n",run);
+               return 0;
+       }
+       fMultV0 = ((TH2F*) cont->GetObject(run))->ProfileX();
 
-    AliOADBContainer* contQxc2 = (AliOADBContainer*) fCalib->FindObject(nameQxc2);
-    if(!contQxc2){
-      printf("OADB object %s is not available in the file\n", nameQxc2);
-      return 0;        
-    }
-       
-    if(!(contQxc2->GetObject(run))){
-      printf("OADB object %s is not available for run %i\n", nameQxc2, run);
-      return 0;        
-    }
-
-    fMeanQxc2[i] = ((TH1F*) contQxc2->GetObject(run))->GetMean();
-
-    AliOADBContainer* contQyc2 = (AliOADBContainer*) fCalib->FindObject(nameQyc2);
-    if(!contQyc2){
-      printf("OADB object %s is not available in the file\n", nameQyc2);
-      return 0;        
-    }
-       
-    if(!(contQyc2->GetObject(run))){
-      printf("OADB object %s is not available for run %i\n", nameQyc2, run);
-      return 0;        
-    }
+       TF1* fpolc1 = new TF1("fpolc1","pol0", 0, 7);
+       fMultV0->Fit(fpolc1, "RN");
+       fV0Cpol1 = fpolc1->GetParameter(0);
+
+       TF1* fpolc2 = new TF1("fpolc2","pol0", 8, 15);
+       fMultV0->Fit(fpolc2, "RN");
+       fV0Cpol2 = fpolc2->GetParameter(0);
+
+       TF1* fpolc3 = new TF1("fpolc3","pol0", 16, 23);
+       fMultV0->Fit(fpolc3, "RN");
+       fV0Cpol3 = fpolc3->GetParameter(0);
+
+       TF1* fpolc4 = new TF1("fpolc4","pol0", 24, 31);
+       fMultV0->Fit(fpolc4, "RN");
+       fV0Cpol4 = fpolc4->GetParameter(0);
+
+       TF1* fpola1 = new TF1("fpola1","pol0", 32, 39);
+       fMultV0->Fit(fpola1, "RN");
+       fV0Apol1 = fpola1->GetParameter(0);
+
+       TF1* fpola2 = new TF1("fpola2","pol0", 40, 47);
+       fMultV0->Fit(fpola2, "RN");
+       fV0Apol2 = fpola2->GetParameter(0);
+
+       TF1* fpola3 = new TF1("fpola3","pol0", 48, 55);
+       fMultV0->Fit(fpola3, "RN");
+       fV0Apol3 = fpola3->GetParameter(0);
+
+       TF1* fpola4 = new TF1("fpola4","pol0", 56, 63);
+       fMultV0->Fit(fpola4, "RN");
+       fV0Apol4 = fpola4->GetParameter(0);
+
+       for(Int_t i=0; i < 10; i++){
+
+               char nameQxa2[100];
+               snprintf(nameQxa2,100, "hQxa2m_%i", i);
+
+               char nameQya2[100];
+               snprintf(nameQya2,100, "hQya2m_%i", i);
+
+               char nameQxc2[100];
+               snprintf(nameQxc2,100, "hQxc2m_%i", i);
+
+               char nameQyc2[100];
+               snprintf(nameQyc2,100, "hQyc2m_%i", i);
+
+               AliOADBContainer* contQxa2 = (AliOADBContainer*) fCalib->FindObject(nameQxa2);
+               if(!contQxa2){
+                       printf("OADB object %s is not available in the file\n", nameQxa2);
+                       return 0;
+               }
+
+               if(!(contQxa2->GetObject(run))){
+                       printf("OADB object %s is not available for run %i\n", nameQxa2, run);
+                       return 0;
+               }
+
+               fMeanQxa2[i] = ((TH1F*) contQxa2->GetObject(run))->GetMean();
+
+
+               AliOADBContainer* contQya2 = (AliOADBContainer*) fCalib->FindObject(nameQya2);
+               if(!contQya2){
+                       printf("OADB object %s is not available in the file\n", nameQya2);
+                       return 0;
+               }
+
+               if(!(contQya2->GetObject(run))){
+                       printf("OADB object %s is not available for run %i\n", nameQya2, run);
+                       return 0;
+               }
 
-    fMeanQyc2[i] = ((TH1F*) contQyc2->GetObject(run))->GetMean();
+               fMeanQya2[i] = ((TH1F*) contQya2->GetObject(run))->GetMean();
 
-  }
-  return 1;
+
+               AliOADBContainer* contQxc2 = (AliOADBContainer*) fCalib->FindObject(nameQxc2);
+               if(!contQxc2){
+                       printf("OADB object %s is not available in the file\n", nameQxc2);
+                       return 0;
+               }
+
+               if(!(contQxc2->GetObject(run))){
+                       printf("OADB object %s is not available for run %i\n", nameQxc2, run);
+                       return 0;
+               }
+
+               fMeanQxc2[i] = ((TH1F*) contQxc2->GetObject(run))->GetMean();
+
+
+               AliOADBContainer* contQyc2 = (AliOADBContainer*) fCalib->FindObject(nameQyc2);
+               if(!contQyc2){
+                       printf("OADB object %s is not available in the file\n", nameQyc2);
+                       return 0;
+               }
+
+               if(!(contQyc2->GetObject(run))){
+                       printf("OADB object %s is not available for run %i\n", nameQyc2, run);
+                       return 0;
+               }
+
+               fMeanQyc2[i] = ((TH1F*) contQyc2->GetObject(run))->GetMean();
+
+       }
+       return 1;
 }
 
 //______________________________________________________
@@ -611,329 +658,340 @@ Bool_t AliSpectraAODEventCuts::OpenInfoCalbration(Int_t run)
 
 Long64_t AliSpectraAODEventCuts::Merge(TCollection* list)
 {
-  // Merge a list of AliSpectraAODEventCuts objects with this.
-  // Returns the number of merged objects (including this).
-  
-  AliInfo("Merging");
-  
-  if (!list)
-    return 0;
-
-  if (list->IsEmpty())
-    return 1;
-  
-  TIterator* iter = list->MakeIterator();
-  TObject* obj;
-  
-  // collections of all histograms
-  TList collections;
-  
-  Int_t count = 0;
-
-  while ((obj = iter->Next())) {
-    AliSpectraAODEventCuts* entry = dynamic_cast<AliSpectraAODEventCuts*> (obj);
-    if (entry == 0) 
-      continue;
-
-    TList * l = entry->GetOutputList();      
-    collections.Add(l);
-    count++;
-  }
-  
-  fOutput->Merge(&collections);
-  
-  delete iter;
-
-  return count+1;
+       // Merge a list of AliSpectraAODEventCuts objects with this.
+       // Returns the number of merged objects (including this).
+
+       AliInfo("Merging");
+
+       if (!list)
+               return 0;
+
+       if (list->IsEmpty())
+               return 1;
+
+       TIterator* iter = list->MakeIterator();
+       TObject* obj;
+
+       // collections of all histograms
+       TList collections;
+
+       Int_t count = 0;
+
+       while ((obj = iter->Next())) {
+               AliSpectraAODEventCuts* entry = dynamic_cast<AliSpectraAODEventCuts*> (obj);
+               if (entry == 0)
+                       continue;
+
+               TList * l = entry->GetOutputList();
+               collections.Add(l);
+               count++;
+       }
+
+       fOutput->Merge(&collections);
+
+       delete iter;
+
+       return count+1;
 }
 
 //______________________________________________________
 Double_t AliSpectraAODEventCuts::GetQvecPercentile(Int_t v0side){
-  //check Qvec and Centrality consistency
-  if(fCent>90.) return -999.;
-  if(v0side==0/*V0A*/){ if(fqV0A== -999.) return -999.; }
-  if(v0side==1/*V0C*/){ if(fqV0C== -999.) return -999.; }
-  
-  fQvecIntegral = 0x0;
-
-  if(v0side==0/*V0A*/){ fQvecIntegral = (TH2D*)fQvecIntList->FindObject("VZEROA"); }
-  if(v0side==1/*V0C*/){ fQvecIntegral = (TH2D*)fQvecIntList->FindObject("VZEROC"); }
-
-
-  Int_t ic = -999;
-  
-  if(fQvecCalibType==1){
-    if(fNch<0.) return -999.;
-    ic = GetNchBin();
-  } else ic = (Int_t)fCent; //fQvecIntegral: 1% centrality bin
-  
-  TH1D *h1D = (TH1D*)fQvecIntegral->ProjectionY("h1D",ic+1,ic+1);
-  
-  TSpline *spline = 0x0;
-  
-  if(v0side==0/*V0A*/){
-    if( CheckSplineArray(fSplineArrayV0A, ic) ) {
-      spline = (TSpline*)fSplineArrayV0A->At(ic);
-      //cout<<"Qvec V0A - ic: "<<ic<<" - Found TSpline..."<<endl;
-    } else {
-      spline = new TSpline3(h1D,"sp3");
-      fSplineArrayV0A->AddAtAndExpand(spline,ic);
-      //cout<<"Qvec V0A - ic: "<<ic<<" - TSpline not found. Creating..."<<endl;
-    }
-  }
-  else if(v0side==1/*V0C*/){
-    if( CheckSplineArray(fSplineArrayV0C, ic) ) {
-      spline = (TSpline*)fSplineArrayV0C->At(ic);
-    } else {
-      spline = new TSpline3(h1D,"sp3");
-      fSplineArrayV0C->AddAtAndExpand(spline,ic);
-    }
-  }
-  
-  Double_t percentile =  -999.;
-  if(v0side==0/*V0A*/){ percentile = 100*spline->Eval(fqV0A); }
-  if(v0side==1/*V0C*/){ percentile = 100*spline->Eval(fqV0C); }
-  
-  if(percentile>100. || percentile<0.) return -999.;
-
-  return percentile;
+
+       //check Qvec and Centrality consistency
+       if(fCent>90.) return -999.;
+       if(v0side==0/*V0A*/){ if(fqV0A== -999.) return -999.; }
+       if(v0side==1/*V0C*/){ if(fqV0C== -999.) return -999.; }
+       if(v0side==2/*TPC*/){ if(fqTPC== -999.) return -999.; }
+
+       fQvecIntegral = 0x0;
+
+       if(v0side==0/*V0A*/){ fQvecIntegral = (TH2D*)fQvecIntList->FindObject("VZEROA"); }
+       if(v0side==1/*V0C*/){ fQvecIntegral = (TH2D*)fQvecIntList->FindObject("VZEROC"); }
+       if(v0side==2/*TPC*/){ fQvecIntegral = (TH2D*)fQvecIntList->FindObject("TPC"); }
+
+
+       Int_t ic = -999;
+
+       if(fQvecCalibType==1){
+               if(fNch<0.) return -999.;
+               ic = GetNchBin(fQvecIntegral);
+       } else ic = (Int_t)fCent; //fQvecIntegral: 1% centrality bin
+
+       TH1D *h1D = (TH1D*)fQvecIntegral->ProjectionY("h1D",ic+1,ic+1);
+
+       TSpline *spline = 0x0;
+
+       if(v0side==0/*V0A*/){
+               if( CheckSplineArray(fSplineArrayV0A, ic) ) {
+                       spline = (TSpline*)fSplineArrayV0A->At(ic);
+                       //cout<<"Qvec V0A - ic: "<<ic<<" - Found TSpline..."<<endl;
+               } else {
+                       spline = new TSpline3(h1D,"sp3");
+                       fSplineArrayV0A->AddAtAndExpand(spline,ic);
+                       //cout<<"Qvec V0A - ic: "<<ic<<" - TSpline not found. Creating..."<<endl;
+               }
+       }
+       else if(v0side==1/*V0C*/){
+               if( CheckSplineArray(fSplineArrayV0C, ic) ) {
+                       spline = (TSpline*)fSplineArrayV0C->At(ic);
+               } else {
+                       spline = new TSpline3(h1D,"sp3");
+                       fSplineArrayV0C->AddAtAndExpand(spline,ic);
+               }
+       }
+       else if(v0side==2/*TPC*/){
+               if( CheckSplineArray(fSplineArrayTPC, ic) ) {
+                       spline = (TSpline*)fSplineArrayTPC->At(ic);
+               } else {
+                       spline = new TSpline3(h1D,"sp3");
+                       fSplineArrayTPC->AddAtAndExpand(spline,ic);
+               }
+       }
+
+       Double_t percentile =  -999.;
+       if(v0side==0/*V0A*/){ percentile = 100*spline->Eval(fqV0A); }
+       if(v0side==1/*V0C*/){ percentile = 100*spline->Eval(fqV0C); }
+       if(v0side==2/*TPC*/){ percentile = 100*spline->Eval(fqTPC); }
+
+       if(percentile>100. || percentile<0.) return -999.;
+
+       return percentile;
 }
 
 //______________________________________________________
 Double_t AliSpectraAODEventCuts::CalculateQVectorMC(Int_t v0side, Int_t type=1){
-  
-  if(!fIsMC) return -999.;
-  
-  // V0A efficiecy
-  if(type==1){
-    fV0Aeff = 0x0;
-    fV0Aeff = (TH1F*)fQvecIntList->FindObject("vzeroa_efficiency_prim_plus_sec_over_gen");
-    if(!fV0Aeff) return -999.;
-  }
-  
-  // get MC array
-  TClonesArray *arrayMC = (TClonesArray*) fAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName());
-  
-  if (!arrayMC) AliFatal("Error: MC particles branch not found!\n");
-  
-  Double_t Qx2mc = 0., Qy2mc = 0.;
-  Double_t mult2mc = 0;
-  
-  Int_t nMC = arrayMC->GetEntries();
-      
-  if(type==0){ // type==0: q-vec from tracks in vzero acceptance
-   
-    // loop on generated
-    for (Int_t iMC = 0; iMC < nMC; iMC++){
-      AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(iMC);
-      if(!partMC->Charge()) continue;//Skip neutrals
-
-      // check vzero side
-      if( CheckVZEROacceptance(partMC->Eta()) != v0side ) continue;
-    
-      // Calculate Qvec components
-      Qx2mc += TMath::Cos(2.*partMC->Phi());
-      Qy2mc += TMath::Sin(2.*partMC->Phi());
-      mult2mc++;
-  
-    }// end loop on generated.
-
-  }//end if on type==0
-  
-  else if(type==1){ // type==1 (default): q-vec from vzero 
-      
-    // only used in qgen_vzero
-    Double_t multv0mc[64];
-    for(Int_t iCh=0;iCh<64;iCh++) multv0mc[iCh]=0; // initialize multv0mc to zero
-    
-    // loop on generated
-    for (Int_t iMC = 0; iMC < nMC; iMC++){
-        
-      AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(iMC);
-      if(!partMC->Charge()) continue;//Skip neutrals
-      
-      // check vzero side
-      if( CheckVZEROacceptance(partMC->Eta()) != v0side ) continue;
-      
-      //get v0 channel of gen track
-      Int_t iv0 = CheckVZEROchannel(v0side, partMC->Eta(), partMC->Phi());
-    
-      //use the efficiecy as a weigth
-      multv0mc[iv0] += fV0Aeff->GetFunction("f")->Eval(partMC->Pt());
-
-      //calculate multiplicity for each vzero channell
-      //multv0mc[iv0]++;
-
-    }// end loop on generated.
-      
-    Int_t firstCh=-1,lastCh=-1;
-    if (v0side == 0) {
-      firstCh = 32;
-      lastCh = 64;
-    }
-    else if (v0side == 1) {
-      firstCh = 0;
-      lastCh = 32;
-    }
-    for(Int_t iCh = firstCh; iCh < lastCh; ++iCh) {
-      Double_t phi = TMath::Pi()/8. + TMath::Pi()/4.*(iCh%8);
-      Double_t mult = multv0mc[iCh];
-      Qx2mc += mult*TMath::Cos(2*phi);
-      Qy2mc += mult*TMath::Sin(2*phi);
-      mult2mc += mult;
-         
-      ((TH2F*)fOutput->FindObject("fV0Mmc"))->Fill(iCh,multv0mc[iCh]);
-    }      
-    
-  }//end if on type==1
-  
-  // return q vector
-  fQvecMC = TMath::Sqrt((Qx2mc*Qx2mc + Qy2mc*Qy2mc)/mult2mc);
-  
-  return fQvecMC;
-  
+
+       if(!fIsMC) return -999.;
+
+       // V0A efficiecy
+       if(type==1){
+               fV0Aeff = 0x0;
+               fV0Aeff = (TH1F*)fQvecIntList->FindObject("vzeroa_efficiency_prim_plus_sec_over_gen");
+               if(!fV0Aeff) return -999.;
+       }
+
+       // get MC array
+       TClonesArray *arrayMC = (TClonesArray*) fAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName());
+
+       if (!arrayMC) AliFatal("Error: MC particles branch not found!\n");
+
+       Double_t Qx2mc = 0., Qy2mc = 0.;
+       Double_t mult2mc = 0;
+
+       Int_t nMC = arrayMC->GetEntries();
+
+       if(type==0){ // type==0: q-vec from tracks in vzero acceptance
+
+               // loop on generated
+               for (Int_t iMC = 0; iMC < nMC; iMC++){
+                       AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(iMC);
+                       if(!partMC->Charge()) continue;//Skip neutrals
+
+                       // check vzero side
+                       if( CheckVZEROacceptance(partMC->Eta()) != v0side ) continue;
+
+                       // Calculate Qvec components
+                       Qx2mc += TMath::Cos(2.*partMC->Phi());
+                       Qy2mc += TMath::Sin(2.*partMC->Phi());
+                       mult2mc++;
+
+               }// end loop on generated.
+
+       }//end if on type==0
+
+       else if(type==1){ // type==1 (default): q-vec from vzero
+
+               // only used in qgen_vzero
+               Double_t multv0mc[64];
+               for(Int_t iCh=0;iCh<64;iCh++) multv0mc[iCh]=0; // initialize multv0mc to zero
+
+               // loop on generated
+               for (Int_t iMC = 0; iMC < nMC; iMC++){
+
+                       AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(iMC);
+                       if(!partMC->Charge()) continue;//Skip neutrals
+
+                       // check vzero side
+                       if( CheckVZEROacceptance(partMC->Eta()) != v0side ) continue;
+
+                       //get v0 channel of gen track
+                       Int_t iv0 = CheckVZEROchannel(v0side, partMC->Eta(), partMC->Phi());
+
+                       //use the efficiecy as a weigth
+                       multv0mc[iv0] += fV0Aeff->GetFunction("f")->Eval(partMC->Pt());
+
+                       //calculate multiplicity for each vzero channell
+                       //multv0mc[iv0]++;
+
+               }// end loop on generated.
+
+               Int_t firstCh=-1,lastCh=-1;
+               if (v0side == 0) {
+                       firstCh = 32;
+                       lastCh = 64;
+               }
+               else if (v0side == 1) {
+                       firstCh = 0;
+                       lastCh = 32;
+               }
+               for(Int_t iCh = firstCh; iCh < lastCh; ++iCh) {
+                       Double_t phi = TMath::Pi()/8. + TMath::Pi()/4.*(iCh%8);
+                       Double_t mult = multv0mc[iCh];
+                       Qx2mc += mult*TMath::Cos(2*phi);
+                       Qy2mc += mult*TMath::Sin(2*phi);
+                       mult2mc += mult;
+
+                       ((TH2F*)fOutput->FindObject("fV0Mmc"))->Fill(iCh,multv0mc[iCh]);
+               }
+
+       }//end if on type==1
+
+       // return q vector
+       fQvecMC = TMath::Sqrt((Qx2mc*Qx2mc + Qy2mc*Qy2mc)/mult2mc);
+
+       return fQvecMC;
+
 }
 
 //______________________________________________________
 Int_t AliSpectraAODEventCuts::CheckVZEROchannel(Int_t vzeroside, Double_t eta, Double_t phi){
-  
-  //VZEROA eta acceptance
-  Int_t ring = -1.;
-  
-  if ( vzeroside == 0){
-    if (eta > 4.5 && eta <= 5.1 ) ring = 0;
-    if (eta > 3.9 && eta <= 4.5 ) ring = 1;
-    if (eta > 3.4 && eta <= 3.9 ) ring = 2;
-    if (eta > 2.8 && eta <= 3.4 ) ring = 3;
-  } else if (vzeroside == 1){
-    if (eta > -3.7 && eta <= -3.2 ) ring = 0;
-    if (eta > -3.2 && eta <= -2.7 ) ring = 1;
-    if (eta > -2.7 && eta <= -2.2 ) ring = 2;
-    if (eta > -2.2 && eta <= -1.7 ) ring = 3;
-  }
-
-  
-  //VZEROAC phi acceptance
-  Int_t phisector= -1;
-  
-  
-  if ( phi > 0. && phi <= TMath::Pi()/4. ) phisector = 0;
-  
-  else if (phi > TMath::Pi()/4. && phi <= TMath::Pi()/2.) phisector = 1;
-  
-  else if (phi > TMath::Pi()/2 && phi <= (3./4.)*TMath::Pi() ) phisector =2;
-  
-  else if (phi > (3./4.)*TMath::Pi() && phi <= TMath::Pi() ) phisector = 3;
-  
-  else if (phi > TMath::Pi() && phi <= (5./4.)*TMath::Pi() ) phisector = 4;
-  
-  else if (phi > (5./4.)*TMath::Pi() && phi <= (3./2.)*TMath::Pi() ) phisector = 5;
-  
-  else if (phi > (3./2.)*TMath::Pi() && phi <= (7./4.)*TMath::Pi() ) phisector = 6;
-  
-  else if (phi > (7./4.)*TMath::Pi() && phi <= TMath::TwoPi() ) phisector = 7;
-  
-  if (vzeroside ==0) return Int_t(32+(phisector+(ring*8.))); // iv0 >= 32 -> V0A
-  if (vzeroside ==1) return Int_t(phisector+(ring*8.));  // iv0 < 32 -> V0C
-  
-  else return -999.;
+
+       //VZEROA eta acceptance
+       Int_t ring = -1.;
+
+       if ( vzeroside == 0){
+               if (eta > 4.5 && eta <= 5.1 ) ring = 0;
+               if (eta > 3.9 && eta <= 4.5 ) ring = 1;
+               if (eta > 3.4 && eta <= 3.9 ) ring = 2;
+               if (eta > 2.8 && eta <= 3.4 ) ring = 3;
+       } else if (vzeroside == 1){
+               if (eta > -3.7 && eta <= -3.2 ) ring = 0;
+               if (eta > -3.2 && eta <= -2.7 ) ring = 1;
+               if (eta > -2.7 && eta <= -2.2 ) ring = 2;
+               if (eta > -2.2 && eta <= -1.7 ) ring = 3;
+       }
+
+
+       //VZEROAC phi acceptance
+       Int_t phisector= -1;
+
+
+       if ( phi > 0. && phi <= TMath::Pi()/4. ) phisector = 0;
+
+       else if (phi > TMath::Pi()/4. && phi <= TMath::Pi()/2.) phisector = 1;
+
+       else if (phi > TMath::Pi()/2 && phi <= (3./4.)*TMath::Pi() ) phisector =2;
+
+       else if (phi > (3./4.)*TMath::Pi() && phi <= TMath::Pi() ) phisector = 3;
+
+       else if (phi > TMath::Pi() && phi <= (5./4.)*TMath::Pi() ) phisector = 4;
+
+       else if (phi > (5./4.)*TMath::Pi() && phi <= (3./2.)*TMath::Pi() ) phisector = 5;
+
+       else if (phi > (3./2.)*TMath::Pi() && phi <= (7./4.)*TMath::Pi() ) phisector = 6;
+
+       else if (phi > (7./4.)*TMath::Pi() && phi <= TMath::TwoPi() ) phisector = 7;
+
+       if (vzeroside ==0) return Int_t(32+(phisector+(ring*8.))); // iv0 >= 32 -> V0A
+       if (vzeroside ==1) return Int_t(phisector+(ring*8.));  // iv0 < 32 -> V0C
+
+       else return -999.;
 }
 
 //______________________________________________________
 Int_t AliSpectraAODEventCuts::CheckVZEROacceptance(Double_t eta){
-  
-  // eval VZERO side - FIXME Add TPC!
-    
-  if(eta > 2.8  && eta < 5.1) return 0; //VZEROA
-
-  else if (eta > -3.7  && eta < -1.7) return 1; //VZEROC
-    
-  return -999.;
-  
+
+       // eval VZERO side - FIXME Add TPC!
+
+       if(eta > 2.8  && eta < 5.1) return 0; //VZEROA
+
+       else if (eta > -3.7  && eta < -1.7) return 1; //VZEROC
+
+       return -999.;
+
 }
 
 //______________________________________________________
 Double_t AliSpectraAODEventCuts::GetQvecPercentileMC(Int_t v0side, Int_t type=1){
-  //check Qvec and Centrality consistency
-  if(fCent>90.) return -999.;
-  
-  Double_t qvec = CalculateQVectorMC(v0side, type);
-  if(qvec==-999.) return -999.;
-  
-  fQgenIntegral = 0x0;
-
-  if(type==0){
-    if(v0side==0/*V0A*/){ fQgenIntegral = (TH2D*)fQvecIntList->FindObject("VZEROAgen"); }
-    if(v0side==1/*V0C*/){ fQgenIntegral = (TH2D*)fQvecIntList->FindObject("VZEROCgen"); }
-  } else if (type==1){
-    if(v0side==0/*V0A*/){ fQgenIntegral = (TH2D*)fQvecIntList->FindObject("VZEROAgen_vzero"); }
-    if(v0side==1/*V0C*/){ fQgenIntegral = (TH2D*)fQvecIntList->FindObject("VZEROCgen_vzero"); }
-  }
-  
-  
-  //FIXME you need a check on the TH2D, add AliFatal or a return.
-
-  Int_t ic = -999;
-  
-  if(fQvecCalibType==1){
-    if(fNch<0.) return -999.;
-    ic = GetNchBin();
-  } else ic = (Int_t)fCent; //fQvecIntegral: 1% centrality bin
-  
-  TH1D *h1D = (TH1D*)fQgenIntegral->ProjectionY("h1Dgen",ic+1,ic+1);
-  
-  TSpline *spline = 0x0;
-  
-  if(v0side==0/*V0A*/){
-    if( CheckSplineArray(fSplineArrayV0Agen, ic) ) {
-      spline = (TSpline*)fSplineArrayV0Agen->At(ic);
-      //cout<<"Qvec V0A - ic: "<<ic<<" - Found TSpline..."<<endl;
-    } else {
-      spline = new TSpline3(h1D,"sp3");
-      fSplineArrayV0Agen->AddAtAndExpand(spline,ic);
-    }
-  }
-  else if(v0side==1/*V0C*/){
-    if( CheckSplineArray(fSplineArrayV0Cgen, ic) ) {
-      spline = (TSpline*)fSplineArrayV0Cgen->At(ic);
-    } else {
-      spline = new TSpline3(h1D,"sp3");
-      fSplineArrayV0Cgen->AddAtAndExpand(spline,ic);
-    }
-  }
-  
-  Double_t percentile = 100*spline->Eval(qvec);
-  
-  if(percentile>100. || percentile<0.) return -999.;
-
-  return percentile;
+
+       //check Qvec and Centrality consistency
+       if(fCent>90.) return -999.;
+
+       Double_t qvec = CalculateQVectorMC(v0side, type);
+       if(qvec==-999.) return -999.;
+
+       fQgenIntegral = 0x0;
+
+       if(type==0){
+               if(v0side==0/*V0A*/){ fQgenIntegral = (TH2D*)fQvecIntList->FindObject("VZEROAgen"); }
+               if(v0side==1/*V0C*/){ fQgenIntegral = (TH2D*)fQvecIntList->FindObject("VZEROCgen"); }
+       } else if (type==1){
+               if(v0side==0/*V0A*/){ fQgenIntegral = (TH2D*)fQvecIntList->FindObject("VZEROAgen_vzero"); }
+               if(v0side==1/*V0C*/){ fQgenIntegral = (TH2D*)fQvecIntList->FindObject("VZEROCgen_vzero"); }
+       }
+
+
+       //FIXME you need a check on the TH2D, add AliFatal or a return.
+
+       Int_t ic = -999;
+
+       if(fQvecCalibType==1){
+               if(fNch<0.) return -999.;
+               ic = GetNchBin(fQgenIntegral);
+       } else ic = (Int_t)fCent; //fQvecIntegral: 1% centrality bin
+
+       TH1D *h1D = (TH1D*)fQgenIntegral->ProjectionY("h1Dgen",ic+1,ic+1);
+
+       TSpline *spline = 0x0;
+
+       if(v0side==0/*V0A*/){
+               if( CheckSplineArray(fSplineArrayV0Agen, ic) ) {
+                       spline = (TSpline*)fSplineArrayV0Agen->At(ic);
+                       //cout<<"Qvec V0A - ic: "<<ic<<" - Found TSpline..."<<endl;
+               } else {
+                       spline = new TSpline3(h1D,"sp3");
+                       fSplineArrayV0Agen->AddAtAndExpand(spline,ic);
+               }
+       }
+       else if(v0side==1/*V0C*/){
+               if( CheckSplineArray(fSplineArrayV0Cgen, ic) ) {
+                       spline = (TSpline*)fSplineArrayV0Cgen->At(ic);
+               } else {
+                       spline = new TSpline3(h1D,"sp3");
+                       fSplineArrayV0Cgen->AddAtAndExpand(spline,ic);
+               }
+       }
+
+       Double_t percentile = 100*spline->Eval(qvec);
+
+       if(percentile>100. || percentile<0.) return -999.;
+
+       return percentile;
 
 }
 
 //______________________________________________________
 Bool_t AliSpectraAODEventCuts::CheckSplineArray(TObjArray * splarr, Int_t n){
-  //check TSpline array consistency
-  
-//   Int_t n = (Int_t)fCent; //FIXME should be ok for icentr and nch
-  
-  if(splarr->GetSize()<n) return kFALSE;
-  
-  if(!splarr->At(n)) return kFALSE;
-    
-  return kTRUE;
-  
+       //check TSpline array consistency
+
+       //   Int_t n = (Int_t)fCent; //FIXME should be ok for icentr and nch
+
+       if(splarr->GetSize()<n) return kFALSE;
+
+       if(!splarr->At(n)) return kFALSE;
+
+       return kTRUE;
+
 }
 
 //______________________________________________________
-Int_t AliSpectraAODEventCuts::GetNchBin(){
-  
-  Double_t xmax = fQvecIntegral->GetXaxis()->GetXmax();
-  
-  if(fNch>xmax) return fQvecIntegral->GetNbinsX();
-  
-  return (fNch*fQvecIntegral->GetNbinsX())/fQvecIntegral->GetXaxis()->GetXmax();
-  
+Int_t AliSpectraAODEventCuts::GetNchBin(TH2D * h){
+
+       Double_t xmax = h->GetXaxis()->GetXmax();
+
+       if(fNch>xmax) return (Int_t)h->GetNbinsX();
+
+       return (fNch*h->GetNbinsX())/h->GetXaxis()->GetXmax();
+
 }