]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Merge remote-tracking branch 'remotes/origin/master' into TPCdev
authormivanov <marian.ivanov@cern.ch>
Wed, 23 Apr 2014 14:46:49 +0000 (16:46 +0200)
committermivanov <marian.ivanov@cern.ch>
Wed, 23 Apr 2014 14:46:49 +0000 (16:46 +0200)
Conflicts:
STEER/ESD/AliESDtrack.cxx

207 files changed:
AD/AliAD.cxx
AD/AliADReconstructor.cxx
ANALYSIS/AliCentralitySelectionTask.h
ANALYSIS/TenderSupplies/AliPHOSTenderSupply.cxx
ANALYSIS/TenderSupplies/AliPHOSTenderSupply.h
ANALYSIS/macros/train/AddMCGenPythia8.C [new file with mode: 0644]
CMakeLists.txt
EVE/alice-macros/geom_mft.C [new file with mode: 0644]
EVGEN/AliGenEMCocktail.cxx
EVGEN/AliGenEMCocktail.h
EVGEN/AliGenEMlib.cxx
EVGEN/AliGenEMlib.h
EVGEN/AliGenParam.cxx
EVGEN/AliGenParam.h
JETAN/AliAnalysisTaskJetCluster.cxx
JETAN/AliAnalysisTaskJetCluster.h
MFT/AliMFTAnalysisTools.cxx
MFT/AliMFTTrackerMU.cxx
MICROCERN/CMakelibmicrocern.pkg
PWG/CaloTrackCorrBase/AliCalorimeterUtils.cxx
PWG/CaloTrackCorrBase/AliCalorimeterUtils.h
PWG/FLOW/Tasks/AliAnalysisTaskJetFlowMC.cxx
PWG/FLOW/Tasks/AliAnalysisTaskJetFlowMC.h
PWG/FLOW/Tasks/AliJetFlowTools.cxx
PWG/FLOW/Tasks/AliJetFlowTools.h
PWG/TRD/AliTRDTriggerAnalysis.cxx
PWG/TRD/AliTRDTriggerAnalysis.h
PWGCF/CMakelibPWGCFChaoticity.pkg
PWGCF/CMakelibPWGCFK0Analysis.pkg
PWGCF/CMakelibPWGCFfemtoscopy.pkg
PWGCF/CMakelibPWGCFfemtoscopyUser.pkg
PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.cxx
PWGCF/Correlations/DPhi/AliLeadingV0Correlation.cxx
PWGCF/Correlations/DPhi/AliLeadingV0Correlation.h
PWGCF/Correlations/macros/AddTaskLV0Correlation.C
PWGCF/Correlations/macros/AddTaskLongRangeCorrelations.C
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderAOD.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoTrack.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoTrack.h
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx [new file with mode: 0644]
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.h [new file with mode: 0644]
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.cxx
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.h
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoModelBPLCMSCorrFctn.cxx
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.cxx
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.h
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx [new file with mode: 0644]
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.h [new file with mode: 0644]
PWGCF/FEMTOSCOPY/Chaoticity/AliChaoticity.cxx
PWGCF/FEMTOSCOPY/K0Analysis/AliFemtoK0Analysis.cxx
PWGCF/FEMTOSCOPY/macros/Train/MC_KK_pPb_V0M/AddTaskFemto.C [new file with mode: 0644]
PWGCF/FEMTOSCOPY/macros/Train/MC_KK_pPb_V0M/ConfigFemtoAnalysis.C [new file with mode: 0644]
PWGCF/FLOW/macros/AddTaskPIDFlowQC.C [new file with mode: 0644]
PWGCF/FLOW/macros/AddTaskPIDFlowSP.C [new file with mode: 0644]
PWGCF/PWGCFfemtoscopyUserLinkDef.h
PWGDQ/dielectron/AliDielectron.cxx
PWGDQ/dielectron/AliDielectronHistos.cxx
PWGDQ/dielectron/AliDielectronVarManager.cxx
PWGDQ/dielectron/macrosJPSI/ConfigJpsi_nano_PbPb.C
PWGGA/CMakelibPWGGAPHOSTasks.pkg
PWGGA/CaloTrackCorrelations/AliAnaCalorimeterQA.cxx
PWGGA/CaloTrackCorrelations/AliAnaCalorimeterQA.h
PWGGA/CaloTrackCorrelations/AliAnaPhoton.cxx
PWGGA/CaloTrackCorrelations/AliAnaPhoton.h
PWGGA/CaloTrackCorrelations/AliAnaPi0.cxx
PWGGA/CaloTrackCorrelations/AliAnaPi0.h
PWGGA/CaloTrackCorrelations/AliAnaPi0EbE.cxx
PWGGA/CaloTrackCorrelations/AliAnaPi0EbE.h
PWGGA/CaloTrackCorrelations/macros/AddTaskCaloTrackCorr.C
PWGGA/CaloTrackCorrelations/macros/AddTaskCaloTrackCorrM.C
PWGGA/CaloTrackCorrelations/macros/AddTaskIsoPhoton.C
PWGGA/CaloTrackCorrelations/macros/AddTaskPi0.C
PWGGA/CaloTrackCorrelations/macros/AddTaskPi0EMCALPbPb.C
PWGGA/CaloTrackCorrelations/macros/AddTaskShowerShapeStudies.C
PWGGA/CaloTrackCorrelations/macros/QA/AddTaskCalorimeterQA.C
PWGGA/CaloTrackCorrelations/macros/QA/AddTaskPi0IMGammaCorrQA.C
PWGGA/EMCALTasks/AliAnalysisTaskEMCALIsoPhoton.cxx
PWGGA/EMCALTasks/AliAnalysisTaskEMCALIsoPhoton.h
PWGGA/EMCALTasks/macros/AddTaskEMCALIsoPhoton.C
PWGGA/GammaConv/AliAnalysisTaskGammaConvDalitzV1.cxx
PWGGA/GammaConv/AliAnalysisTaskGammaConvDalitzV1.h
PWGGA/GammaConv/AliAnalysisTaskGammaConvV1.cxx
PWGGA/GammaConv/AliAnalysisTaskGammaConvV1.h
PWGGA/GammaConv/AliConversionCuts.cxx
PWGGA/GammaConv/AliConversionCuts.h
PWGGA/GammaConv/AliDalitzElectronCuts.cxx
PWGGA/GammaConv/macros/AddTask_GammaConvDalitzQAV1_pPb.C
PWGGA/GammaConv/macros/AddTask_GammaConvDalitzV1_pPb.C
PWGGA/GammaConv/macros/AddTask_GammaConvV1_PbPb.C
PWGGA/GammaConv/macros/AddTask_GammaConvV1_PbPb2.C
PWGGA/GammaConv/macros/AddTask_GammaConvV1_pPb.C
PWGGA/GammaConv/macros/AddTask_GammaConvV1_pp.C
PWGGA/PHOSTasks/PHOS_Correlation/AddTaskPi0Correlations.C [new file with mode: 0644]
PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx [new file with mode: 0644]
PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.h [new file with mode: 0644]
PWGGA/PWGGAPHOSTasksLinkDef.h
PWGHF/CMakelibPWGHFcorrelationHF.pkg
PWGHF/correlationHF/AliHFDhadronCorrSystUnc.cxx [new file with mode: 0644]
PWGHF/correlationHF/AliHFDhadronCorrSystUnc.h [new file with mode: 0644]
PWGHF/hfe/AliAnalysisTaskFlowITSTPCTOFQCSP.cxx
PWGHF/hfe/AliAnalysisTaskFlowITSTPCTOFQCSP.h
PWGHF/hfe/AliAnalysisTaskFlowTPCEMCalQCSP.cxx
PWGHF/hfe/macros/AddTaskFlowITSTPCTOFQCSP.C
PWGHF/vertexingHF/AliAnalysisTaskSELc2V0bachelor.cxx
PWGHF/vertexingHF/AliAnalysisTaskSELc2V0bachelorTMVA.cxx [changed mode: 0644->0755]
PWGHF/vertexingHF/AliAnalysisTaskSELc2V0bachelorTMVA.h [changed mode: 0644->0755]
PWGHF/vertexingHF/AliCFTaskVertexingHF.cxx
PWGHF/vertexingHF/AliCFVertexingHF2Prong.cxx
PWGHF/vertexingHF/AliCFVertexingHF3Prong.cxx
PWGHF/vertexingHF/AliCFVertexingHFCascade.cxx
PWGHF/vertexingHF/macros/AddTaskCFVertexingHF3Prong.C
PWGHF/vertexingHF/macros/AddTaskCFVertexingHF3ProngDs.C
PWGJE/AliAnalysisTaskFragmentationFunction.cxx
PWGJE/AliAnalysisTaskFragmentationFunction.h
PWGJE/AliAnalysisTaskJetCorePP.cxx
PWGJE/AliAnalysisTaskJetProperties.cxx
PWGJE/AliAnalysisTaskJetProperties.h
PWGJE/AliAnalysisTaskJetSpectrum2.cxx
PWGJE/AliAnalysisTaskJetSpectrum2.h
PWGJE/CMakelibPWGJE.pkg
PWGJE/EMCALJetTasks/AliAnalysisTaskScale.cxx
PWGJE/EMCALJetTasks/AliAnalysisTaskScale.h
PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetHadEPpid.cxx
PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetHadEPpid.h
PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetPatchTriggerQA.cxx
PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetSpectra.cxx
PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskRhoVnModulation.cxx
PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskRhoVnModulation.h
PWGJE/EMCALJetTasks/macros/AddTaskEmcalJetHadEPpid.C
PWGJE/FlavourJetTasks/AliAnalysisTaskFlavourJetCorrelations.cxx
PWGJE/FlavourJetTasks/AliAnalysisTaskFlavourJetCorrelations.h
PWGJE/PWGJELinkDef.h
PWGJE/StrangenessInJets/AliAnalysisTaskJetChem.cxx
PWGJE/StrangenessInJets/AliAnalysisTaskJetChem.h
PWGJE/StrangenessInJets/AliAnalysisTaskV0sInJets.cxx
PWGJE/StrangenessInJets/AliAnalysisTaskV0sInJets.h
PWGJE/StrangenessInJets/macros/AddTaskJetChem.C
PWGJE/UserTasks/AliAnalysisTaskIDFFTCF.cxx
PWGJE/UserTasks/AliAnalysisTaskIDFFTCF.h
PWGJE/UserTasks/AliAnalysisTaskJetProtonCorr.cxx
PWGJE/UserTasks/AliAnalysisTaskJetProtonCorr.h
PWGJE/UserTasks/AliAnalysisTaskPID.cxx
PWGJE/UserTasks/AliAnalysisTaskPID.h
PWGJE/UserTasks/AliAnalysisTaskPPJetSpectra.cxx [new file with mode: 0755]
PWGJE/UserTasks/AliAnalysisTaskPPJetSpectra.h [new file with mode: 0755]
PWGJE/UserTasks/AliIDFFUtils.cxx
PWGJE/UserTasks/AliIDFFUtils.h
PWGJE/macros/AddTaskJetCorePP.C
PWGJE/macros/AddTaskJetProperties.C
PWGJE/macros/AddTaskPPJetSpectra.C [new file with mode: 0755]
PWGLF/FORWARD/analysis2/corrs/RunTestF.C [moved from PWGLF/FORWARD/analysis2/corrs/testF.C with 100% similarity]
PWGLF/FORWARD/analysis2/qa/QAPlotter.C
PWGLF/FORWARD/analysis2/qa/QATrender.C
PWGLF/FORWARD/analysis2/qa/RunQAOld.C
PWGLF/FORWARD/analysis2/qa/RunQAOld.sh [moved from PWGLF/FORWARD/analysis2/qa/RunQA.sh with 99% similarity]
PWGLF/RESONANCES/macros/mini/ConfigD0.C
PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtAnalysisPbPbAOD.cxx
PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtAnalysisPbPbAOD.h
PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/AddTask_dNdPt_PbPbAOD.C
PWGLF/SPECTRA/Nuclei/masses/AliAnalysisNucleiMass.cxx
PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraAllChAOD.cxx
PWGLF/SPECTRA/PiKaPr/TestAOD/AnalysisBoth.C
PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskAntiHe4.cxx
PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskAntiHe4.h
PWGLF/STRANGENESS/LambdaK0PbPb/AddTaskV0ForRAA.C
PWGLF/ThermalFits/AliParticleYield.cxx
PWGLF/ThermalFits/AliParticleYield.h
PWGLF/ThermalFits/AverageAndExtrapolate.C [new file with mode: 0644]
PWGLF/ThermalFits/InterpolateRatiosAndYields.C [new file with mode: 0644]
PWGLF/ThermalFits/PlotRatiosForQM14.C [new file with mode: 0644]
PWGLF/totEt/AliAnalysisEtSelector.cxx
PWGLF/totEt/AliAnalysisEtSelector.h
PWGPP/QA/detectorQAscripts/EXAMPLE.sh.template
PWGPP/QA/detectorQAscripts/T0.sh
PWGPP/QA/detectorQAscripts/TOF.sh
PWGPP/QA/detectorQAscripts/TPC.sh
PWGPP/QA/detectorQAscripts/TRK.sh
PWGPP/QA/scripts/runQA.example.config
PWGPP/QA/scripts/runQA.sh
PWGPP/TOF/trending/MakeTrendingTOFQA.C
PWGPP/benchmark/benchmark.sh
PWGUD/UPC/AddTaskUpcPsi2s.C
PWGUD/UPC/AliAnalysisTaskUpcPsi2s.cxx
PWGUD/UPC/AliAnalysisTaskUpcPsi2s.h
SHUTTLE/schema/ACO.ldif
SHUTTLE/schema/TRD.ldif
SHUTTLE/schema_prod/ACO.ldif
SHUTTLE/schema_prod/TRD.ldif
STAT/TKDInterpolatorBase.h
STEER/AOD/AliAODCaloCluster.cxx
STEER/AOD/AliAODCaloCluster.h
STEER/AOD/AliAODTrack.cxx
STEER/AODLinkDef.h
STEER/ESD/AliESDCaloCluster.cxx
STEER/ESD/AliESDCaloCluster.h
STEER/ESD/AliESDtrack.cxx
STEER/STEER/AliReconstruction.cxx
STEER/STEERBase/AliExternalTrackParam.cxx
STEER/STEERBase/AliExternalTrackParam.h
STEER/STEERBase/AliVCluster.h
T0/MakeTrendT0.C
TRD/AliTRDtrackOnline.cxx
TRD/AliTRDtrackOnline.h
VZERO/CheckCalibOCDB.C
cmake/ALICE_CMake.cmake
cmake/CMakemacosx64.cmake
cmake/FindROOT.cmake

index d370296a5fc2519a83c142cc7331523c2419bb50..ecac3bdf2d4fe68c4c06765b6497b0b00a42cc01 100644 (file)
@@ -263,7 +263,7 @@ void AliAD::Digits2Raw()
 
 //_____________________________________________________________________________
 
-Bool_t AliAD::Raw2SDigits(AliRawReader* rawReader)
+Bool_t AliAD::Raw2SDigits(AliRawReader* /*rawReader*/)
 {
        // reads raw data to produce digits
        // for AD not implemented yet (needs detailed hardware info)
index ddc2dc29c55074a4dffc06b93d45c92d56b740a9..a87acfdcb4fc6e8930d798fc2266171d1139a2c8 100644 (file)
@@ -63,7 +63,7 @@ void AliADReconstructor::Init()
     fESDAD  = new AliESDAD;
 }
 
-void AliADReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const
+void AliADReconstructor::ConvertDigits(AliRawReader* /*rawReader*/, TTree* /*digitsTree*/) const
 {
 
   printf("Converting digits for AD .. not implemented \n");
index b298c446cf12fe9cde33b37f3ee235ebb7861b1b..5b92603e2ee4a957f28d3608f6b32943594a90ff 100644 (file)
@@ -314,7 +314,7 @@ class AliCentralitySelectionTask : public AliAnalysisTaskSE {
   TH1F *fHOutVertex ;           //control histogram for vertex SPD
   TH1F *fHOutVertexT0 ;         //control histogram for vertex T0
 
-  ClassDef(AliCentralitySelectionTask, 29); 
+  ClassDef(AliCentralitySelectionTask, 30); 
 };
 
 #endif
index 5ae72bfe1ba13432e327bf13c7653c61dc98ccde..05b4cf804b6a5345dde016fa500d802e64e11f5a 100644 (file)
@@ -309,6 +309,9 @@ void AliPHOSTenderSupply::ProcessEvent()
       cluPHOS.EvalAll(logWeight,vertex);         // recalculate the cluster parameters
       cluPHOS.SetE(CorrectNonlinearity(cluPHOS.E()));// Users's nonlinearity
 
+      Double_t ecore=CoreEnergy(&cluPHOS) ; 
+      ecore=CorrectNonlinearity(ecore) ;
+      
       //Correct Misalignment
 //      CorrectPHOSMisalignment(global,mod) ;
 //      position[0]=global.X() ;
@@ -324,7 +327,9 @@ void AliPHOSTenderSupply::ProcessEvent()
       Float_t  xyz[3];
       cluPHOS.GetPosition(xyz);
       clu->SetPosition(xyz);                       //rec.point position in MARS
-      clu->SetE(cluPHOS.E());                           //total or core particle energy
+      clu->SetE(cluPHOS.E());                      //total particle energy
+      clu->SetMCEnergyFraction(ecore);                            //core particle energy
+      
       //    clu->SetDispersion(cluPHOS.GetDispersion());  //cluster dispersion
       //    ec->SetPID(rp->GetPID()) ;            //array of particle identification
       clu->SetM02(cluPHOS.GetM02()) ;               //second moment M2x
@@ -342,7 +347,10 @@ void AliPHOSTenderSupply::ProcessEvent()
      
       clu->SetEmcCpvDistance(r);    
       clu->SetChi2(TestLambda(clu->E(),clu->GetM20(),clu->GetM02()));                     //not yet implemented
-      clu->SetTOF(EvalTOF(&cluPHOS,cells));       
+      Double_t tof=EvalTOF(&cluPHOS,cells); 
+      if(TMath::Abs(tof-clu->GetTOF())>100.e-9) //something wrong in cell TOF!
+       tof=clu->GetTOF() ;
+      clu->SetTOF(tof);       
       Double_t minDist=clu->GetDistanceToBadChannel() ;//Already calculated
       DistanceToBadChannel(mod,&locPos,minDist);
       clu->SetDistanceToBadChannel(minDist) ;
@@ -378,6 +386,10 @@ void AliPHOSTenderSupply::ProcessEvent()
       cluPHOS.EvalAll(logWeight,vertex);         // recalculate the cluster parameters
       cluPHOS.SetE(CorrectNonlinearity(cluPHOS.E()));// Users's nonlinearity
 
+      Double_t ecore=CoreEnergy(&cluPHOS) ; 
+      ecore=CorrectNonlinearity(ecore) ;
+
+      
       //Correct Misalignment
 //      cluPHOS.GetPosition(position);
 //      global.SetXYZ(position[0],position[1],position[2]);
@@ -387,7 +399,8 @@ void AliPHOSTenderSupply::ProcessEvent()
 //      position[2]=global.Z() ;
 
       clu->SetPosition(position);                       //rec.point position in MARS
-      clu->SetE(cluPHOS.E());                           //total or core particle energy
+      clu->SetE(cluPHOS.E());                           //total particle energy
+      clu->SetMCEnergyFraction(ecore);                  //core particle energy
       clu->SetDispersion(cluPHOS.GetDispersion());  //cluster dispersion
       //    ec->SetPID(rp->GetPID()) ;            //array of particle identification
       clu->SetM02(cluPHOS.GetM02()) ;               //second moment M2x
@@ -415,7 +428,10 @@ void AliPHOSTenderSupply::ProcessEvent()
       clu->SetEmcCpvDistance(r); //Distance in sigmas
      
       clu->SetChi2(TestLambda(clu->E(),clu->GetM20(),clu->GetM02()));                     //not yet implemented
-      clu->SetTOF(EvalTOF(&cluPHOS,cells));       
+      Double_t tof=EvalTOF(&cluPHOS,cells); 
+      if(TMath::Abs(tof-clu->GetTOF())>100.e-9) //something wrong in cell TOF!
+       tof=clu->GetTOF() ;
+      clu->SetTOF(tof);       
       Double_t minDist=clu->GetDistanceToBadChannel() ;//Already calculated
       DistanceToBadChannel(mod,&locPos,minDist);
       clu->SetDistanceToBadChannel(minDist) ;
@@ -748,6 +764,51 @@ void AliPHOSTenderSupply::EvalLambdas(AliVCluster * clu, Double_t &m02, Double_t
   }
 
 }
+//____________________________________________________________________________
+Double_t  AliPHOSTenderSupply::CoreEnergy(AliVCluster * clu){  
+  //calculate energy of the cluster in the circle with radius distanceCut around the maximum
+  
+  //Can not use already calculated coordinates?
+  //They have incidence correction...
+  const Double_t distanceCut =3.5 ;
+  const Double_t logWeight=4.5 ;
+  
+  Double32_t * elist = clu->GetCellsAmplitudeFraction() ;  
+// Calculates the center of gravity in the local PHOS-module coordinates
+  Float_t wtot = 0;
+  Double_t xc[100]={0} ;
+  Double_t zc[100]={0} ;
+  Double_t x = 0 ;
+  Double_t z = 0 ;
+  Int_t mulDigit=TMath::Min(100,clu->GetNCells()) ;
+  for(Int_t iDigit=0; iDigit<mulDigit; iDigit++) {
+    Int_t relid[4] ;
+    Float_t xi ;
+    Float_t zi ;
+    fPHOSGeo->AbsToRelNumbering(clu->GetCellAbsId(iDigit), relid) ;
+    fPHOSGeo->RelPosInModule(relid, xi, zi);
+    xc[iDigit]=xi ;
+    zc[iDigit]=zi ;
+    if (clu->E()>0 && elist[iDigit]>0) {
+      Float_t w = TMath::Max( 0., logWeight + TMath::Log( elist[iDigit] / clu->E() ) ) ;
+      x    += xc[iDigit] * w ;
+      z    += zc[iDigit] * w ;
+      wtot += w ;
+    }
+  }
+  if (wtot>0) {
+    x /= wtot ;
+    z /= wtot ;
+  }
+  Double_t coreE=0. ;
+  for(Int_t iDigit=0; iDigit < mulDigit; iDigit++) {
+    Double_t distance = TMath::Sqrt((xc[iDigit]-x)*(xc[iDigit]-x)+(zc[iDigit]-z)*(zc[iDigit]-z)) ;
+    if(distance < distanceCut)
+      coreE += elist[iDigit] ;
+  }
+  //Apply non-linearity correction
+  return coreE ;
+}
 //________________________________________________________________________
 Double_t AliPHOSTenderSupply::EvalTOF(AliVCluster * clu,AliVCaloCells * cells){ 
   //Evaluate TOF of the cluster after re-calibration
@@ -771,7 +832,6 @@ Double_t AliPHOSTenderSupply::EvalTOF(AliVCluster * clu,AliVCaloCells * cells){
       eMax=elist[iDigit] ;
     }
   }
-
   
    //Try to improve accuracy 
   //Do not account time of soft cells:
index 7c5460a9ceb1e6f3c49e1355ba9322708d50377c..fe9a1c80622057c7af489604dfb1f6f2cadccb71 100644 (file)
@@ -60,6 +60,7 @@ protected:
   Bool_t IsGoodChannel(Int_t mod, Int_t ix, Int_t iz) ;
   void   CorrectPHOSMisalignment(TVector3 & globalPos, Int_t module);
   void   EvalLambdas(AliVCluster * clu, Double_t &m02, Double_t &m20) ;
+  Double_t CoreEnergy(AliVCluster * clu) ;  
   Double_t EvalTOF(AliVCluster * clu,AliVCaloCells * cells); 
   Double_t CalibrateTOF(Double_t tof, Int_t absId, Bool_t isHG); 
   void DistanceToBadChannel(Int_t mod, TVector3 * locPos, Double_t &minDist) ;
diff --git a/ANALYSIS/macros/train/AddMCGenPythia8.C b/ANALYSIS/macros/train/AddMCGenPythia8.C
new file mode 100644 (file)
index 0000000..efabf57
--- /dev/null
@@ -0,0 +1,46 @@
+AliGenerator* AddMCGenPythia8(Float_t e_cms = 2760., Bool_t kCR = kTRUE) 
+{
+  // Add Pythia 8 generator: 
+  //    - Color reconnection = ON/OFF
+
+  gSystem->Load("liblhapdf.so");
+  AliGenerator *genP = NULL;
+  genP = CreatePythia8Gen(e_cms, kCR);
+  
+  return genP;
+}
+
+AliGenerator* CreatePythia8Gen(Float_t e_cms, Bool_t kCR) {
+    
+   gSystem->Load("libpythia6.so");
+   gSystem->Load("libEGPythia6.so");
+   gSystem->Load("libAliPythia6.so");
+   gSystem->Load("libpythia8.so");
+   gSystem->Load("libAliPythia8.so");
+   gSystem->Setenv("PYTHIA8DATA", gSystem->ExpandPathName("$ALICE_ROOT/PYTHIA8/pythia8175/xmldoc"));
+   gSystem->Setenv("LHAPDF",      gSystem->ExpandPathName("$ALICE_ROOT/LHAPDF"));
+   gSystem->Setenv("LHAPATH",     gSystem->ExpandPathName("$ALICE_ROOT/LHAPDF/PDFsets"));
+
+
+  AliGenPythiaPlus* gener = new AliGenPythiaPlus(AliPythia8::Instance());
+
+  // set process (MB)
+  gener->SetProcess(kPyMbDefault);
+  
+  //   Centre of mass energy 
+  gener->SetEnergyCMS(e_cms); // in GeV
+
+  // Event list
+  gener->SetEventListRange(-1, 2);
+
+  // color reconnection
+  (AliPythia8::Instance())->ReadString("Tune:pp = 5");//CR
+
+  if(kCR)             
+    (AliPythia8::Instance())->ReadString("BeamRemnants:reconnectColours = on");
+  else
+    (AliPythia8::Instance())->ReadString("BeamRemnants:reconnectColours = off");
+  
+  return gener;
+}
index eddf81a017e1036ab140c829558183f5c09e1389..d0307e613e8092aee3fdc8ade6fc16bdfd2862dc 100644 (file)
@@ -323,7 +323,7 @@ set(AEXT a)
 set(LIBPATH ${CMAKE_BINARY_DIR}/lib/tgt_${ALICE_TARGET})
 set(BINPATH ${CMAKE_BINARY_DIR}/bin/tgt_${ALICE_TARGET})
 set(EXPORTDIR ${ALICE_ROOT}/include)
-set(BINLIBDIRS -L${ALICE_ROOT}/${LIBPATH})
+#set(BINLIBDIRS -L${ALICE_ROOT}/${LIBPATH})
 set(RAWDIRO ${CMAKE_BINARY_DIR}/RAW)
 set(ALIMDCSPECFILE ${RAWDIRO}/alimdc.spec)
 set(RAWDatabaseALIB ${LIBPATH}/libRAWDatabase.${AEXT})
diff --git a/EVE/alice-macros/geom_mft.C b/EVE/alice-macros/geom_mft.C
new file mode 100644 (file)
index 0000000..477e574
--- /dev/null
@@ -0,0 +1,42 @@
+// $Id$
+// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
+
+/**************************************************************************
+* Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+* See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
+* full copyright notice.                                                 *
+**************************************************************************/
+
+#if !defined(__CINT__) || defined(__MAKECINT__)
+#include <TGeoManager.h>
+#include <TGeoNode.h>
+#include <TEveManager.h>
+#include <TEveGeoNode.h>
+
+#include <AliEveEventManager.h>
+#endif
+
+void geom_mft()
+
+{
+  //  AliEveEventManager::AssertGeometry();
+
+  gGeoManager = gEve->GetGeometry("geometry.root");
+
+  TEveElementList* list = new TEveElementList("MFT");
+  gEve->AddGlobalElement(list);
+  TGeoNode *node1 = gGeoManager->GetTopVolume()->FindNode("MFT_0");
+  if (!node1) {
+    Warning("geom_mft()", "Node MFT_0 not found !");
+    return;
+  }
+  
+  TEveGeoTopNode* re1 = new TEveGeoTopNode(gGeoManager,node1);
+  re1->UseNodeTrans();
+  gEve->AddGlobalElement(re1,list);
+  
+  gEve->Redraw3D();
+  
+  Info("geom_mft.C", "Done");
+}
index 2d73011794d5a780b798d021222ff01762e5d137..bb6f8d36d6ab4c3184ab7d0864513b7eff1a7453 100644 (file)
@@ -61,7 +61,7 @@ AliGenEMCocktail::AliGenEMCocktail()
   fCentrality(0),
   fV2Systematic(0),
   fForceConv(kFALSE),
-  fHeaviestParticle(kGenJpsi)
+  fSelectedParticles(kGenHadrons)
 {
   // Constructor
 
@@ -97,7 +97,7 @@ void AliGenEMCocktail::CreateCocktail()
 
   // Create and add electron sources to the generator
   // pizero
-  if(fHeaviestParticle<kGenPizero)return;
+  if(fSelectedParticles&kGenPizero){
   AliGenParam *genpizero=0;
   Char_t namePizero[10];    
   snprintf(namePizero,10,"Pizero");    
@@ -106,13 +106,14 @@ void AliGenEMCocktail::CreateCocktail()
   AddSource2Generator(namePizero,genpizero);
   TF1 *fPtPizero = genpizero->GetPt();
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,99,0)
-  fYieldArray[kGenPizero] = fPtPizero->Integral(fPtMin,fPtMax,1.e-6);
+    fYieldArray[kPizero] = fPtPizero->Integral(fPtMin,fPtMax,1.e-6);
 #else
-  fYieldArray[kGenPizero] = fPtPizero->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
+    fYieldArray[kPizero] = fPtPizero->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
 #endif
+  }
 
   // eta  
-  if(fHeaviestParticle<kGenEta)return;
+  if(fSelectedParticles&kGenEta){
   AliGenParam *geneta=0;
   Char_t nameEta[10];    
   snprintf(nameEta,10,"Eta");    
@@ -121,13 +122,14 @@ void AliGenEMCocktail::CreateCocktail()
   AddSource2Generator(nameEta,geneta);
   TF1 *fPtEta = geneta->GetPt();
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,99,0)
-  fYieldArray[kGenEta] = fPtEta->Integral(fPtMin,fPtMax,1.e-6);
+    fYieldArray[kEta] = fPtEta->Integral(fPtMin,fPtMax,1.e-6);
 #else
-  fYieldArray[kGenEta] = fPtEta->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
+    fYieldArray[kEta] = fPtEta->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
 #endif
+  }
 
   // rho  
-  if(fHeaviestParticle<kGenRho)return;
+  if(fSelectedParticles&kGenRho){
   AliGenParam *genrho=0;
   Char_t nameRho[10];    
   snprintf(nameRho,10,"Rho");    
@@ -136,13 +138,14 @@ void AliGenEMCocktail::CreateCocktail()
   AddSource2Generator(nameRho,genrho);
   TF1 *fPtRho = genrho->GetPt();
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,99,0)
-  fYieldArray[kGenRho] = fPtRho->Integral(fPtMin,fPtMax,1.e-6);
+    fYieldArray[kRho] = fPtRho->Integral(fPtMin,fPtMax,1.e-6);
 #else
-  fYieldArray[kGenRho] = fPtRho->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
+    fYieldArray[kRho] = fPtRho->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
 #endif
+  }
   
   // omega
-  if(fHeaviestParticle<kGenOmega)return;
+  if(fSelectedParticles&kGenOmega){
   AliGenParam *genomega=0;
   Char_t nameOmega[10];    
   snprintf(nameOmega,10,"Omega");    
@@ -151,13 +154,14 @@ void AliGenEMCocktail::CreateCocktail()
   AddSource2Generator(nameOmega,genomega);
   TF1 *fPtOmega = genomega->GetPt();
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,99,0)
-  fYieldArray[kGenOmega] = fPtOmega->Integral(fPtMin,fPtMax,1.e-6);
+    fYieldArray[kOmega] = fPtOmega->Integral(fPtMin,fPtMax,1.e-6);
 #else
-  fYieldArray[kGenOmega] = fPtOmega->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
+    fYieldArray[kOmega] = fPtOmega->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
 #endif
+  }
 
   // etaprime
-  if(fHeaviestParticle<kGenEtaprime)return;
+  if(fSelectedParticles&kGenEtaprime){
   AliGenParam *genetaprime=0;
   Char_t nameEtaprime[10];    
   snprintf(nameEtaprime,10,"Etaprime");    
@@ -166,13 +170,14 @@ void AliGenEMCocktail::CreateCocktail()
   AddSource2Generator(nameEtaprime,genetaprime);
   TF1 *fPtEtaprime = genetaprime->GetPt();
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,99,0)
-  fYieldArray[kGenEtaprime] = fPtEtaprime->Integral(fPtMin,fPtMax,1.e-6);
+    fYieldArray[kEtaprime] = fPtEtaprime->Integral(fPtMin,fPtMax,1.e-6);
 #else
-  fYieldArray[kGenEtaprime] = fPtEtaprime->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
+    fYieldArray[kEtaprime] = fPtEtaprime->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
 #endif
+  }
 
   // phi  
-  if(fHeaviestParticle<kGenPhi)return;
+  if(fSelectedParticles&kGenPhi){
   AliGenParam *genphi=0;
   Char_t namePhi[10];    
   snprintf(namePhi,10,"Phi");    
@@ -181,13 +186,14 @@ void AliGenEMCocktail::CreateCocktail()
   AddSource2Generator(namePhi,genphi);
   TF1 *fPtPhi = genphi->GetPt();
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,99,0)
-  fYieldArray[kGenPhi] = fPtPhi->Integral(fPtMin,fPtMax,1.e-6);
+    fYieldArray[kPhi] = fPtPhi->Integral(fPtMin,fPtMax,1.e-6);
 #else
-  fYieldArray[kGenPhi] = fPtPhi->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
+    fYieldArray[kPhi] = fPtPhi->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
 #endif
+  }
 
   // jpsi  
-  if(fHeaviestParticle<kGenJpsi)return;
+  if(fSelectedParticles&kGenJpsi){
   AliGenParam *genjpsi=0;
   Char_t nameJpsi[10];    
   snprintf(nameJpsi,10,"Jpsi");    
@@ -196,76 +202,44 @@ void AliGenEMCocktail::CreateCocktail()
   AddSource2Generator(nameJpsi,genjpsi);
   TF1 *fPtJpsi = genjpsi->GetPt();
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,99,0)
-  fYieldArray[kGenJpsi] = fPtJpsi->Integral(fPtMin,fPtMax,1.e-6);
+    fYieldArray[kJpsi] = fPtJpsi->Integral(fPtMin,fPtMax,1.e-6);
 #else
-  fYieldArray[kGenJpsi] = fPtJpsi->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
-#endif
-
-  // prompt gamma
-  if(fDecayMode==kGammaEM){
-    if(fHeaviestParticle<kGenPromptRealGamma)return;
-    TDatabasePDG::Instance()->AddParticle("PromptRealGamma","PromptRealGamma",0,true,0,0,"GaugeBoson",221000);
-    //gMC->DefineParticle(221000, "PromptGamma", kPTGamma, 0, 0, 0,"Gamma", 0.0, 0, 0, 0, 0, 0, 0, 0, 0, kFALSE);
-    AliGenParam *genPromptRealG=0;
-    Char_t namePromptRealG[10];    
-    snprintf(namePromptRealG,10,"PromptRealGamma");    
-    genPromptRealG = new AliGenParam(fNPart*0.5, new AliGenEMlib(), AliGenEMlib::kPromptRealGamma, "DUMMY");
-    genPromptRealG->SetYRange(fYMin, fYMax);
-    AddSource2Generator(namePromptRealG,genPromptRealG);
-    TF1 *fPtPromptRealG = genPromptRealG->GetPt();
-#if ROOT_VERSION_CODE >= ROOT_VERSION(5,99,0)
-    fYieldArray[kGenPromptRealGamma] = fPtPromptRealG->Integral(fPtMin,fPtMax,1.e-6);
-#else
-    fYieldArray[kGenPromptRealGamma] = fPtPromptRealG->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
-#endif
-
-    if(fHeaviestParticle<kGenThermRealGamma)return;
-    TDatabasePDG::Instance()->AddParticle("ThermRealGamma","ThermRealGamma",0,true,0,0,"GaugeBoson",222000);
-    //gMC->DefineParticle(221000, "ThermGamma", kPTGamma, 0, 0, 0,"Gamma", 0.0, 0, 0, 0, 0, 0, 0, 0, 0, kFALSE);
-    AliGenParam *genThermRealG=0;
-    Char_t nameThermRealG[10];    
-    snprintf(nameThermRealG,10,"ThermRealGamma");    
-    genThermRealG = new AliGenParam(fNPart*0.5, new AliGenEMlib(), AliGenEMlib::kThermRealGamma, "DUMMY");
-    genThermRealG->SetYRange(fYMin, fYMax);
-    AddSource2Generator(nameThermRealG,genThermRealG);
-    TF1 *fPtThermRealG = genThermRealG->GetPt();
-#if ROOT_VERSION_CODE >= ROOT_VERSION(5,99,0)
-    fYieldArray[kGenThermRealGamma] = fPtThermRealG->Integral(fPtMin,fPtMax,1.e-6);
-#else
-    fYieldArray[kGenThermRealGamma] = fPtThermRealG->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
+    fYieldArray[kJpsi] = fPtJpsi->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
 #endif
+  }
 
-    if(fHeaviestParticle<kGenPromptVirtGamma)return;
-    TDatabasePDG::Instance()->AddParticle("PromptVirtGamma","PromptVirtGamma",0,true,0,0,"GaugeBoson",223000);
-    AliGenParam *genPromptVirtG=0;
-    Char_t namePromptVirtG[10];    
-    snprintf(namePromptVirtG,10,"PromptVirtGamma");    
-    genPromptVirtG = new AliGenParam(fNPart*0.5, new AliGenEMlib(), AliGenEMlib::kPromptVirtGamma, "DUMMY");
-    genPromptVirtG->SetYRange(fYMin, fYMax);
-    AddSource2Generator(namePromptVirtG,genPromptVirtG);
-    TF1 *fPtPromptVirtG = genPromptVirtG->GetPt();
+  // direct gamma
+  if(fDecayMode!=kGammaEM) return;
+  if(fSelectedParticles&kGenDirectRealGamma){
+    AliGenParam *genDirectRealG=0;
+    Char_t nameDirectRealG[10];    
+    snprintf(nameDirectRealG,10,"DirectRealGamma");    
+    genDirectRealG = new AliGenParam(fNPart, new AliGenEMlib(), AliGenEMlib::kDirectRealGamma, "DUMMY");
+    genDirectRealG->SetYRange(fYMin, fYMax);
+    AddSource2Generator(nameDirectRealG,genDirectRealG);
+    TF1 *fPtDirectRealG = genDirectRealG->GetPt();
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,99,0)
-    fYieldArray[kGenPromptVirtGamma] = fPtPromptVirtG->Integral(fPtMin,fPtMax,1.e-6);
+    fYieldArray[kDirectRealGamma] = fPtDirectRealG->Integral(fPtMin,fPtMax,1.e-6);
 #else
-    fYieldArray[kGenPromptVirtGamma] = fPtPromptVirtG->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
+    fYieldArray[kDirectRealGamma] = fPtDirectRealG->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
 #endif
+  }
 
-    if(fHeaviestParticle<kGenThermVirtGamma)return;
-    TDatabasePDG::Instance()->AddParticle("ThermVirtGamma","ThermVirtGamma",0,true,0,0,"GaugeBoson",224000);
-    AliGenParam *genThermVirtG=0;
-    Char_t nameThermVirtG[10];    
-    snprintf(nameThermVirtG,10,"ThermVirtGamma");    
-    genThermVirtG = new AliGenParam(fNPart*0.5, new AliGenEMlib(), AliGenEMlib::kThermVirtGamma, "DUMMY");
-    genThermVirtG->SetYRange(fYMin, fYMax);
-    AddSource2Generator(nameThermVirtG,genThermVirtG);
-    TF1 *fPtThermVirtG = genThermVirtG->GetPt();
+  if(fSelectedParticles&kGenDirectVirtGamma){
+    TDatabasePDG::Instance()->AddParticle("DirectVirtGamma","DirectVirtGamma",0,true,0,0,"GaugeBoson",220000);
+    AliGenParam *genDirectVirtG=0;
+    Char_t nameDirectVirtG[10];    
+    snprintf(nameDirectVirtG,10,"DirectVirtGamma");    
+    genDirectVirtG = new AliGenParam(fNPart/0.775, new AliGenEMlib(), AliGenEMlib::kDirectVirtGamma, "DUMMY");
+    genDirectVirtG->SetYRange(fYMin/0.775, fYMax/0.775);
+    AddSource2Generator(nameDirectVirtG,genDirectVirtG);
+    TF1 *fPtDirectVirtG = genDirectVirtG->GetPt();
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,99,0)
-    fYieldArray[kGenThermVirtGamma] = fPtThermVirtG->Integral(fPtMin,fPtMax,1.e-6);
+    fYieldArray[kDirectVirtGamma] = fPtDirectVirtG->Integral(fPtMin,fPtMax,1.e-6);
 #else
-    fYieldArray[kGenThermVirtGamma] = fPtThermVirtG->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
+    fYieldArray[kDirectVirtGamma] = fPtDirectVirtG->Integral(fPtMin,fPtMax,(Double_t *)0,1.e-6);
 #endif
   }
-  
 }
 
 //-------------------------------------------------------------------
@@ -362,44 +336,37 @@ void AliGenEMCocktail::Generate()
 
     switch (pdgMother){
     case 111:
-      dNdy = fYieldArray[kGenPizero];
+      dNdy = fYieldArray[kPizero];
       break;
     case 221:
-      dNdy = fYieldArray[kGenEta];
+      dNdy = fYieldArray[kEta];
       break;
     case 113:
-      dNdy = fYieldArray[kGenRho];
+      dNdy = fYieldArray[kRho];
       break;
     case 223:
-      dNdy = fYieldArray[kGenOmega];
+      dNdy = fYieldArray[kOmega];
       break;
     case 331:
-      dNdy = fYieldArray[kGenEtaprime];
+      dNdy = fYieldArray[kEtaprime];
       break;
     case 333:
-      dNdy = fYieldArray[kGenPhi];
+      dNdy = fYieldArray[kPhi];
       break;
     case 443:
-      dNdy = fYieldArray[kGenJpsi];
+      dNdy = fYieldArray[kJpsi];
+      break;
+    case 22:
+      dNdy = fYieldArray[kDirectRealGamma];
       break;
+    case 220000:
+      dNdy = fYieldArray[kDirectVirtGamma];
+      break;
+      
     default:
       dNdy = 0.;
     }
 
-    switch (pdgMother){
-    case 221000:
-      dNdy = fYieldArray[kGenPromptRealGamma];
-      break;
-    case 223000:
-      dNdy = fYieldArray[kGenPromptVirtGamma];
-      break;
-    case 222000:
-      dNdy = fYieldArray[kGenThermRealGamma];
-      break;      
-    case 224000:
-      dNdy = fYieldArray[kGenThermVirtGamma];
-      break;   
-    }
     weight = dNdy*part->GetWeight();
     part->SetWeight(weight);
   }    
index 96ed2497244226586eb2947f5de3b1da3db2fe25..89b7a50554e7b723c2c287307c5c01354ece6dd7 100644 (file)
@@ -23,7 +23,8 @@ class AliGenEMCocktail : public AliGenCocktail
 public:
 
     AliGenEMCocktail();
-  enum GeneratorCode { kGenPizero=0, kGenEta, kGenRho, kGenOmega, kGenEtaprime, kGenPhi, kGenJpsi, kGenPromptRealGamma, kGenThermRealGamma, kGenPromptVirtGamma, kGenThermVirtGamma, kGENs };
+  enum GeneratorCode { kPizero=0, kEta, kRho, kOmega, kEtaprime, kPhi, kJpsi, kDirectRealGamma, kDirectVirtGamma, kGENs };
+  enum SelectPartice { kGenPizero=0x001, kGenEta=0x002, kGenRho=0x004, kGenOmega=0x008, kGenEtaprime=0x010, kGenPhi=0x020, kGenJpsi=0x040, kGenDirectRealGamma=0x100, kGenDirectVirtGamma=0x200, kGenHadrons=0x7f, kGenGammas=0x300 };
 
     virtual ~AliGenEMCocktail();    
     virtual void Init();
@@ -39,7 +40,7 @@ public:
   void    SetCentrality(Int_t cent){ fCentrality = cent; }
   void    SetV2Systematic(Int_t v2sys){ fV2Systematic = v2sys; }
   void    SetForceGammaConversion(Bool_t force=kTRUE){ fForceConv=force; }
-  void    SetHeaviestParticle(Int_t part){ fHeaviestParticle=part; }
+  void    SelectMotherParticles(Int_t part){ fSelectedParticles=part; }
     
 private:
     AliGenEMCocktail(const AliGenEMCocktail &cocktail); 
@@ -59,7 +60,7 @@ private:
   Int_t fV2Systematic; //selected systematic error for v2 parameters
 
   Bool_t fForceConv; //select whether you want to force all gammas to convert imidediately
-  Int_t fHeaviestParticle; //select up to which particle to simulate
+  Int_t fSelectedParticles; //which particles to simulate
 
     ClassDef(AliGenEMCocktail,1)  //  cocktail for EM physics
 };
index 9c80a67a776721c3c13996d0d7e219583bbdea75..ff46597e64be7535b841fe20fb9c43b1c9fdfa91 100644 (file)
@@ -50,15 +50,15 @@ Double_t AliGenEMlib::CrossOverRc(const double a, const double b, const double x
 }
 
 const Double_t AliGenEMlib::fgkV2param[16][15] = {
-  // charged pion                                                                                                                        cent, based on
+  // charged pion                                                                                                                        cent, based on: https://twiki.cern.ch/twiki/bin/viewauth/ALICE/FlowPAGQM2012talkIdentified
   {  0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 }   // pp no V2
-  ,{ 6.551541e-02, 1.438274e+00, 4.626379e-02, 2.512477e+00, 1.371824e+00, 2.964543e-02, 4.630670e+00, 4.228889e+00, 6.037970e-02, 1.425269e-03, 1.144124e+00, 0, 1, 9.154016e-04, 1.288285e+00 }  // 0-5,  Francesco
-  ,{ 1.171360e-01, 1.333046e+00, 4.536752e-02, 3.046448e+00, 3.903714e+00, 4.407124e-02, 9.122534e-01, 4.834519e+00, 1.186237e-01, 2.179274e-03, 8.968478e-01, 0, 1, 1.501201e-03, 9.902785e-01 }  // 5-10, Francesco
-  ,{ 1.748423e-01, 1.285211e+00, 4.219624e-02, 4.019148e+00, 4.255047e+00, 7.956751e-03, 1.184731e-01,-9.211391e+00, 5.768716e-01, 3.127110e-03, 6.808650e-01, 0, 1, 2.786807e-03, 6.159338e-01 }  // 10-20,Francesco
-  ,{ 2.152937e-01, 1.405391e+00, 5.037925e-02, 3.214458e+00, 3.991894e+00, 3.655882e-02, 1.968766e-01,-1.637650e+01, 7.023397e+00, 4.573453e-03, 6.031381e-01, 0, 1, 3.564348e-03, 5.748053e-01 }  // 20-30,Francesco
-  ,{ 2.409800e-01, 1.476557e+00, 5.759362e-02, 3.339713e+00, 3.642386e+00,-1.544366e-02, 1.098611e-01,-1.373154e+01, 1.471955e+00, 5.200180e-03, 6.315474e-01, 0, 1, 3.776112e-03, 6.298605e-01 }  // 30-40,Francesco
-  ,{ 2.495087e-01, 1.543711e+00, 6.217817e-02, 3.517101e+00, 4.558221e+00, 6.021316e-02, 1.486822e-01,-5.769155e+00, 5.576843e-01, 5.348029e-03, 7.255976e-01, 0, 1, 3.531350e-03, 7.661694e-01 }  // 40-50,Francesco
-  ,{ 2.166449e-01, 1.931014e+00, 8.195656e-02, 2.226742e+00, 3.106472e+00, 1.058786e-01, 8.558786e-01, 4.006680e+00, 2.476313e-01, 5.137623e-03, 9.104401e-01, 0, 1, 2.477450e-03, 1.109649e+00 }  // 50-60,Francesco
+  ,{ 6.551541e-02, 1.438274e+00, 4.626379e-02, 2.512477e+00, 1.371824e+00, 2.964543e-02, 4.630670e+00, 4.228889e+00, 6.037970e-02, 1.425269e-03, 1.144124e+00, 0, 1, 9.154016e-04, 1.288285e+00 }  // 0-5
+  ,{ 1.171360e-01, 1.333046e+00, 4.536752e-02, 3.046448e+00, 3.903714e+00, 4.407124e-02, 9.122534e-01, 4.834519e+00, 1.186237e-01, 2.179274e-03, 8.968478e-01, 0, 1, 1.501201e-03, 9.902785e-01 }  // 5-10
+  ,{ 1.748423e-01, 1.285211e+00, 4.219624e-02, 4.019148e+00, 4.255047e+00, 7.956751e-03, 1.184731e-01,-9.211391e+00, 5.768716e-01, 3.127110e-03, 6.808650e-01, 0, 1, 2.786807e-03, 6.159338e-01 }  // 10-20
+  ,{ 2.152937e-01, 1.405391e+00, 5.037925e-02, 3.214458e+00, 3.991894e+00, 3.655882e-02, 1.968766e-01,-1.637650e+01, 7.023397e+00, 4.573453e-03, 6.031381e-01, 0, 1, 3.564348e-03, 5.748053e-01 }  // 20-30
+  ,{ 2.409800e-01, 1.476557e+00, 5.759362e-02, 3.339713e+00, 3.642386e+00,-1.544366e-02, 1.098611e-01,-1.373154e+01, 1.471955e+00, 5.200180e-03, 6.315474e-01, 0, 1, 3.776112e-03, 6.298605e-01 }  // 30-40
+  ,{ 2.495087e-01, 1.543711e+00, 6.217817e-02, 3.517101e+00, 4.558221e+00, 6.021316e-02, 1.486822e-01,-5.769155e+00, 5.576843e-01, 5.348029e-03, 7.255976e-01, 0, 1, 3.531350e-03, 7.661694e-01 }  // 40-50
+  ,{ 2.166449e-01, 1.931014e+00, 8.195656e-02, 2.226742e+00, 3.106472e+00, 1.058786e-01, 8.558786e-01, 4.006680e+00, 2.476313e-01, 5.137623e-03, 9.104401e-01, 0, 1, 2.477450e-03, 1.109649e+00 }  // 50-60
   ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 }   // 0-10
   ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 }   // 20-40
   ,{ 0.0000000000, 0.0000000000, 0.0000000000,-1.0000000000, 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000, 2.0000000000, 0.0000000000, 1.0000000000, 0, 1, 0.0000000000, 1.0000000000 }   // 40-60
@@ -92,17 +92,17 @@ const Double_t AliGenEMlib::fgkThermPtParam[16][2] = {
   {  0.0000000000, 0.0000000000 } // pp no V2
   ,{ 0.0000000000, 0.0000000000 } // 0-5
   ,{ 0.0000000000, 0.0000000000 } // 5-10
-  ,{ 2.581823e+01, 3.187900e+00 } // 10-20 //from: https://aliceinfo.cern.ch/Notes/node/249
+  ,{ 3.447105e+01, 3.416818e+00 } // 10-20 //based on: https://aliceinfo.cern.ch/Notes/node/249
   ,{ 0.0000000000, 0.0000000000 } // 20-30
   ,{ 0.0000000000, 0.0000000000 } // 30-40
   ,{ 0.0000000000, 0.0000000000 } // 40-50
   ,{ 0.0000000000, 0.0000000000 } // 50-60
-  ,{ 7.177551e+02, 4.946179e+00 } // 0-10  //from: https://aliceinfo.cern.ch/Notes/node/249
-  ,{ 2.328661e+00, 2.635257e+00 } // 20-40 //from: https://twiki.cern.ch/twiki/pub/ALICE/ALICEDirectPhotonSpectrumPaper/directPbPb.pdf
+  ,{ 3.888847e+02, 4.502683e+00 } // 0-10  //based on: https://aliceinfo.cern.ch/Notes/node/249
+  ,{ 1.766210e+00, 2.473812e+00 } // 20-40 //based on: https://twiki.cern.ch/twiki/pub/ALICE/ALICEDirectPhotonSpectrumPaper/directPbPb.pdf
   ,{ 0.0000000000, 0.0000000000 } // 40-60
   ,{ 0.0000000000, 0.0000000000 } // 60-80
-  ,{ 1.919280e+01, 2.946472e+00 } // 0-20  //from: https://twiki.cern.ch/twiki/pub/ALICE/ALICEDirectPhotonSpectrumPaper/directPbPb.pdf
-  ,{ 0.0000000000, 0.0000000000 } // 0-40 
+  ,{ 1.576151e+01, 2.841202e+00 } // 0-20  //based on: https://twiki.cern.ch/twiki/pub/ALICE/ALICEDirectPhotonSpectrumPaper/directPbPb.pdf
+  ,{ 4.263499e+01, 3.249843e+00 } // 0-40  //based on: https://aliceinfo.cern.ch/Figure/node/2866
   ,{ 0.0000000000, 0.0000000000 } // 20-80
   ,{ 0.0000000000, 0.0000000000 } // 40-80
 };
@@ -119,11 +119,10 @@ const Double_t AliGenEMlib::fgkMtFactor[2][8] = {
   //https://aliceinfo.cern.ch/Figure/node/2634
   //https://aliceinfo.cern.ch/Figure/node/2788
   //https://aliceinfo.cern.ch/Figure/node/4403
-  //J/Psi PbPb from Comparison with Julian Books J/Psi -> e+e-, might be contradicting with https://aliceinfo.cern.ch/Figure/node/3457
   //https://aliceinfo.cern.ch/Notes/node/87
   //best guess:
-  {1., 0.48, 1.0, 0.9, 0.4, 0.25, 0.004, 0.}, //pp
-  {1., 0.48, 1.0, 0.9, 0.4, 0.25, 0.0195, 0.}  //PbPb
+  {1., 0.48, 1.0, 0.9, 0.4, 0.25, 0., 0.}, //pp
+  {1., 0.48, 1.0, 0.9, 0.4, 0.25, 0., 0.}  //PbPb
 };
 
 //==========================================================================
@@ -211,120 +210,108 @@ Double_t AliGenEMlib::PtExponential(const Double_t *px, const Double_t *c){
 
 // Hagedorn with additional Powerlaw
 Double_t AliGenEMlib::PtModifiedHagedornPowerlaw(const Double_t *px, const Double_t *c){
-  double pt=px[0]+0.0001;
-  Double_t invYield = c[0]*pow(c[1]+pt*c[2],-c[3])*CrossOverLc(c[5],c[4],pt)+CrossOverRc(c[7],c[6],pt)*c[8]*pow(pt,-c[9]);
+  const double &pt=px[0];
+  Double_t invYield = c[0]*pow(c[1]+pt*c[2],-c[3])*CrossOverLc(c[5],c[4],pt)+CrossOverRc(c[7],c[6],pt)*c[8]*pow(pt+0.001,-c[9]); //pt+0.001: prevent powerlaw from exploding for pt->0
   
   return invYield*(2*TMath::Pi()*pt);
 }
 
-Double_t AliGenEMlib::IntegratedKrollWada(Double_t mh){
-  if(mh<0.003) return 0;
-  const double me=0.000511;
-  return 2*log(mh/me/exp(7.0/4.0))/411.0/TMath::Pi();
+// double powerlaw for J/Psi yield
+Double_t AliGenEMlib::PtDoublePowerlaw(const Double_t *px, const Double_t *c){
+  const double &pt=px[0];
+  Double_t yield = c[0]*pt*pow(1+pow(pt*c[1],2),-c[2]);
+  
+  return yield;
+}
+
+// integral over krollwada with S=1^2*(1-mee^2/mh^2)^3 from mee=0 up to mee=mh
+// approximation is perfect for mh>20MeV
+Double_t AliGenEMlib::IntegratedKrollWada(const Double_t *mh, const Double_t *){
+  if(*mh<0.002941) return 0;
+  return 2*log(*mh/0.000511/exp(1.75))/411.11/TMath::Pi();
 }
 
 //--------------------------------------------------------------------------
 //
-//                             PromptRealGamma
+//                             DirectRealGamma
 //
 //--------------------------------------------------------------------------
-Int_t AliGenEMlib::IpPromptRealGamma(TRandom *)
-{
-  return 221000;
-}
-
 Double_t AliGenEMlib::PtPromptRealGamma( const Double_t *px, const Double_t */*dummy*/ )
 {
-  //if(*px<0.001) return 0;
-  const static Double_t promptGammaPtParam[10] = { 7.019259e-02, 6.771695e-01, 8.249346e-01, 5.720419e+00, 1.848869e+01, 2.629075e+01, 1.061126e+01, 3.699205e+01, 5.253572e-02, 5.167275e+00 };
-  //{ 5.449971e-02, 3.843241e-01, 9.469766e-01, 4.993039e+00, 5.342451e+00, 4.457944e+00, 5.555146e+00, 4.458580e+00, 6.035177e-02, 5.102109e+00 };
+  const static Double_t promptGammaPtParam[10] = { 8.715017e-02, 4.439243e-01, 1.011650e+00, 5.193789e+00, 2.194442e+01, 1.062124e+01, 2.469876e+01, 6.052479e-02, 5.611410e-02, 5.169743e+00 };
  
   return PtModifiedHagedornPowerlaw(px,promptGammaPtParam)*GetTAA(fgSelectedCentrality);
 }
 
-Double_t AliGenEMlib::YPromptRealGamma( const Double_t *px, const Double_t */*dummy*/ )
+Double_t AliGenEMlib::PtThermalRealGamma( const Double_t *px, const Double_t */*dummy*/ )
 {
-  return YFlat(*px);
-}
-
-Double_t AliGenEMlib::V2PromptRealGamma( const Double_t */*px*/, const Double_t */*dummy*/ )
-{
-  return 0.0;
+  return PtExponential(px,fgkThermPtParam[fgSelectedCentrality]);
 }
 
-//--------------------------------------------------------------------------
-//
-//                             PromptVirtGamma
-//
-//--------------------------------------------------------------------------
-Int_t AliGenEMlib::IpPromptVirtGamma(TRandom *)
+Double_t AliGenEMlib::PtDirectRealGamma( const Double_t *px, const Double_t */*dummy*/ )
 {
-  return 223000;
+  return PtPromptRealGamma(px,px)+PtThermalRealGamma(px,px);
 }
 
-Double_t AliGenEMlib::PtPromptVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
+Int_t AliGenEMlib::IpDirectRealGamma(TRandom *)
 {
-  return IntegratedKrollWada(*px)*PtPromptRealGamma(px,px);
+  return 22;
 }
 
-Double_t AliGenEMlib::YPromptVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
+Double_t AliGenEMlib::YDirectRealGamma( const Double_t *px, const Double_t */*dummy*/ )
 {
   return YFlat(*px);
 }
 
-Double_t AliGenEMlib::V2PromptVirtGamma( const Double_t */*px*/, const Double_t */*dummy*/ )
+Double_t AliGenEMlib::V2DirectRealGamma( const Double_t *px, const Double_t */*dummy*/ )
 {
-  return 0.0;
+  const static Double_t v2Param[3][15] = {
+    { 1.211795e-01, 9.813671e-01, 0.000000e+00, 3.056960e+00, 2.380183e+00, -7.833212e-02, 5.000000e-01, 3.056960e+00, 1.195000e-01, 1.183293e-02, 1.252249e+00, 0, 1, 4.876263e-03, 1.518526e+00 }  // 00-20, based on: https://aliceinfo.cern.ch/Notes/node/249
+    ,{ 1.619000e-01, 2.185695e+00, 0.000000e+00, 1.637681e+00, 1.000000e+00, -1.226399e-06, 3.092027e+00, 3.064692e+00, 1.619000e-01, 2.264320e-02, 1.028641e+00, 0, 1, 8.172203e-03, 1.271637e+00 } // 20-40
+    ,{ 1.335000e-01, 1.331963e+00, 0.000000e+00, 2.252315e+00, 1.198383e+00, -5.861987e-02, 7.132859e-01, 2.252315e+00, 2.934249e-01, 1.571589e-02, 1.001131e+00, 0, 1, 5.179715e-03, 1.329344e+00 } // 00-40
+  };
+  switch(fgSelectedCentrality) {
+  case k0020: return V2Param(px,v2Param[0]); break;
+  case k2040: return V2Param(px,v2Param[1]); break;
+  case k0040: return V2Param(px,v2Param[2]); break;
+  }
+  return 0;
 }
 
+
 //--------------------------------------------------------------------------
 //
-//                             ThermRealGamma
+//                             DirectVirtGamma
 //
 //--------------------------------------------------------------------------
-Int_t AliGenEMlib::IpThermRealGamma(TRandom *)
-{
-  return 222000;
-}
-
-Double_t AliGenEMlib::PtThermRealGamma( const Double_t *px, const Double_t */*dummy*/ )
-{
-  return PtExponential(px,fgkThermPtParam[fgSelectedCentrality]);
-}
-
-Double_t AliGenEMlib::YThermRealGamma( const Double_t *px, const Double_t */*dummy*/ )
+Double_t AliGenEMlib::PtPromptVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
 {
-  return YFlat(*px);
+  return IntegratedKrollWada(px,px)*PtPromptRealGamma(px,px);
 }
 
-Double_t AliGenEMlib::V2ThermRealGamma( const Double_t *px, const Double_t */*dummy*/ )
+Double_t AliGenEMlib::PtThermalVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
 {
-  return KEtScal(*px,8);
+  return IntegratedKrollWada(px,px)*PtThermalRealGamma(px,px);
 }
 
-//--------------------------------------------------------------------------
-//
-//                             ThermVirtGamma
-//
-//--------------------------------------------------------------------------
-Int_t AliGenEMlib::IpThermVirtGamma(TRandom *)
+Double_t AliGenEMlib::PtDirectVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
 {
-  return 224000;
+  return IntegratedKrollWada(px,px)*(PtPromptRealGamma(px,px)+PtThermalRealGamma(px,px));
 }
 
-Double_t AliGenEMlib::PtThermVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
+Int_t AliGenEMlib::IpDirectVirtGamma(TRandom *)
 {
-  return IntegratedKrollWada(*px)*PtThermRealGamma(px,px);
+  return 220000;
 }
 
-Double_t AliGenEMlib::YThermVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
+Double_t AliGenEMlib::YDirectVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
 {
   return YFlat(*px);
 }
 
-Double_t AliGenEMlib::V2ThermVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
+Double_t AliGenEMlib::V2DirectVirtGamma( const Double_t *px, const Double_t */*dummy*/ )
 {
-  return KEtScal(*px,8);
+  return V2DirectRealGamma(px,px);
 }
 
 //--------------------------------------------------------------------------
@@ -340,9 +327,12 @@ Int_t AliGenEMlib::IpPizero(TRandom *)
 
 Double_t AliGenEMlib::PtPizero( const Double_t *px, const Double_t */*dummy*/ )
 {
-  // double pigammacorr=2.385389e-01*log(*px+0.001)+1.557687e+00;
-  // pigammacorr*=9.513666e-03*log(*px+0.001)+9.509347e-01;
-  // return pigammacorr*PtPromptRealGamma(px,px);  //misuse pion for direct gammas
+  // double pigammacorr=1; //misuse pion for direct gammas, tuned for 0040, iteration 0
+  // pigammacorr*=2.258900e-01*log(*px+0.001)+1.591291e+00;  //iteration 1
+  // pigammacorr*=6.601943e-03*log(*px+0.001)+9.593698e-01;  //iteration 2
+  // pigammacorr*=4.019933e-03*log(*px+0.001)+9.843412e-01;  //iteration 3
+  // pigammacorr*=-4.543991e-03*log(*px+0.001)+1.010886e+00; //iteration 4
+  // return pigammacorr*PtPromptRealGamma(px,px); //now the gammas from the pi->gg decay have the pt spectrum of prompt real gammas
   
   // fit functions and corresponding parameter of Pizero pT for pp @ 2.76 TeV and @ 7 TeV and for PbPb @ 2.76 TeV 
 
@@ -358,6 +348,9 @@ Double_t AliGenEMlib::PtPizero( const Double_t *px, const Double_t */*dummy*/ )
   Double_t kb=0.;
   Double_t kd=0.;
 
+  double n1,n2,n3;
+  int oldCent;
+
   switch(fgSelectedPtParam|fgSelectedCentrality) {
     // fit to pi charged v1
     // charged pion from ToF, unidentified hadrons scaled with pion from TPC
@@ -407,7 +400,26 @@ Double_t AliGenEMlib::PtPizero( const Double_t *px, const Double_t */*dummy*/ )
     kc=2842.0; kp0=1.465; kp1=0.8324; kn=8.167; kcT=0.0001049; kT=2.29;
     return PtModifiedHagedornThermal(*px,kc,kp0,kp1,kn,kcT,kT);
     break;
-   
+  case kPichargedPbPb|k0020:
+    oldCent=fgSelectedCentrality;
+    fgSelectedCentrality=k0010;
+    n1=PtPizero(px,px);
+    fgSelectedCentrality=k1020;
+    n2=PtPizero(px,px);
+    fgSelectedCentrality=oldCent;
+    return (n1+n2)/2;
+    break;
+  case kPichargedPbPb|k0040:
+    oldCent=fgSelectedCentrality;
+    fgSelectedCentrality=k0010;
+    n1=PtPizero(px,px);
+    fgSelectedCentrality=k1020;
+    n2=PtPizero(px,px);
+    fgSelectedCentrality=k2040;
+    n3=PtPizero(px,px);
+    fgSelectedCentrality=oldCent;
+    return (n1+n2+2*n3)/4;
+    break;
 
     // fit to pizero from conversion analysis
     // for PbPb @ 2.76 TeV
@@ -502,7 +514,8 @@ Double_t AliGenEMlib::YPizero( const Double_t *py, const Double_t */*dummy*/ )
 
 Double_t AliGenEMlib::V2Pizero( const Double_t *px, const Double_t */*dummy*/ )
 {
-  double n1,n2,v1,v2;
+  double n1,n2,n3,n4,n5;
+  double v1,v2,v3,v4,v5;
   switch(fgSelectedCentrality) {
   case k0010:
     n1=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k0005]);
@@ -511,6 +524,15 @@ Double_t AliGenEMlib::V2Pizero( const Double_t *px, const Double_t */*dummy*/ )
     v2=V2Param(px,fgkV2param[k0510]);
     return (n1*v1+n2*v2)/(n1+n2);
     break;
+  case k0020:
+    n1=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k0005]);
+    v1=V2Param(px,fgkV2param[k0005]);
+    n2=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k0510]);
+    v2=V2Param(px,fgkV2param[k0510]);
+    n3=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k1020]);
+    v3=V2Param(px,fgkV2param[k1020]);
+    return (n1*v1+n2*v2+2*n3*v3)/(n1+n2+2*n3);
+    break;
   case k2040:
     n1=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k2030]);
     v1=V2Param(px,fgkV2param[k2030]);
@@ -518,6 +540,19 @@ Double_t AliGenEMlib::V2Pizero( const Double_t *px, const Double_t */*dummy*/ )
     v2=V2Param(px,fgkV2param[k3040]);
     return (n1*v1+n2*v2)/(n1+n2);
     break;
+  case k0040:
+    n1=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k0005]);
+    v1=V2Param(px,fgkV2param[k0005]);
+    n2=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k0510]);
+    v2=V2Param(px,fgkV2param[k0510]);
+    n3=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k1020]);
+    v3=V2Param(px,fgkV2param[k1020]);
+    n4=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k2030]);
+    v4=V2Param(px,fgkV2param[k2030]);
+    n5=PtModifiedHagedornPowerlaw(px,fgkRawPtOfV2Param[k3040]);
+    v5=V2Param(px,fgkV2param[k3040]);
+    return (n1*v1+n2*v2+2*n3*v3+2*n4*v4+2*n5*v5)/(n1+n2+2*n3+2*n4+2*n5);
+    break;
 
   default:
     return V2Param(px,fgkV2param[fgSelectedCentrality]);
@@ -717,7 +752,18 @@ Int_t AliGenEMlib::IpJpsi(TRandom *)
 Double_t AliGenEMlib::PtJpsi( const Double_t *px, const Double_t */*dummy*/ )
 {
   // Jpsi pT
-  return MtScal(*px,6);
+  // based on: //https://aliceinfo.cern.ch/Notes/node/242, https://aliceinfo.cern.ch/Figure/node/3457, www.sciencedirect.com/science/article/pii/S0370269312011446
+  const static Double_t jpsiPtParam[2][3] = {
+    {  9.686337e-03, 2.629441e-01, 4.552044e+00 }
+    ,{ 3.403549e-03, 2.897061e-01, 3.644278e+00 }
+  };
+  const double pt=px[0]*2.28/2.613;
+  switch(fgSelectedCentrality) {
+  case k0020: return 2.405*PtDoublePowerlaw(&pt,jpsiPtParam[0]); break;
+  case k2040: return 2.405*PtDoublePowerlaw(&pt,jpsiPtParam[1]); break;
+  case k0040: return 0.5*2.405*(PtDoublePowerlaw(&pt,jpsiPtParam[0])+PtDoublePowerlaw(&pt,jpsiPtParam[1])); break;
+  }
+  return 0;
 }
 
 Double_t AliGenEMlib::YJpsi( const Double_t *py, const Double_t */*dummy*/ )
@@ -786,7 +832,7 @@ Double_t AliGenEMlib::KEtScal(const Double_t pt, Int_t np)
   // double val=V2Pizero(&scaledPt, (Double_t*) 0);
   // static const double syserr[12]={0., 0.09, 0.07, 0.06, 0.04, 0.04, 0.04, 0.05, 0., 0., 0., 0.}; //based on pi vs kaon
   // double sys=fgSelectedV2Systematic*min(fgkV2param[fgSelectedCentrality][0],fgkV2param[fgSelectedCentrality][8])*syserr[fgSelectedCentrality];
-  // return TMath::Max(val+sys,0.0);
+  // return std::max(val+sys,0.0);
   return V2Pizero(&scaledPt, (Double_t*) 0);
 }
 
@@ -797,7 +843,7 @@ Double_t AliGenEMlib::V2Param(const Double_t *px, const Double_t *par)
   const double &pt=px[0];
   double val=CrossOverLc(par[4],par[3],pt)*(2*par[0]/(1+TMath::Exp(par[1]*(par[2]-pt)))-par[0])+CrossOverRc(par[4],par[3],pt)*((par[8]-par[5])/(1+TMath::Exp(par[6]*(pt-par[7])))+par[5]);
   double sys=fgSelectedV2Systematic*par[11+fgSelectedV2Systematic*2]*pow(pt,par[12+fgSelectedV2Systematic*2]);
-  return TMath::Max(val+sys,0.0);
+  return std::max(val+sys,0.0);
 }
 
 Double_t AliGenEMlib::V2Flat(const Double_t */*px*/, const Double_t */*param*/)
@@ -845,17 +891,11 @@ GenFunc AliGenEMlib::GetPt(Int_t param, const char * tname) const
 
    switch (param) 
     {
-    case kPromptRealGamma:
-      func=PtPromptRealGamma;
-      break;
-    case kPromptVirtGamma:
-      func=PtPromptVirtGamma;
+     case kDirectRealGamma:
+       func=PtDirectRealGamma;
       break;
-    case kThermRealGamma:
-      func=PtThermRealGamma;
-      break;
-    case kThermVirtGamma:
-      func=PtThermVirtGamma;
+     case kDirectVirtGamma:
+       func=PtDirectVirtGamma;
       break;
     case kPizero:
       func=PtPizero;
@@ -894,17 +934,11 @@ GenFunc AliGenEMlib::GetY(Int_t param, const char * tname) const
 
    switch (param) 
     {
-    case kPromptRealGamma:
-      func=YPromptRealGamma;
-      break;
-    case kPromptVirtGamma:
-      func=YPromptVirtGamma;
+    case kDirectRealGamma:
+      func=YDirectRealGamma;
       break;
-    case kThermRealGamma:
-      func=YThermRealGamma;
-      break;
-    case kThermVirtGamma:
-      func=YThermVirtGamma;
+    case kDirectVirtGamma:
+      func=YDirectVirtGamma;
       break;
     case kPizero:
          func=YPizero;
@@ -943,17 +977,11 @@ GenFuncIp AliGenEMlib::GetIp(Int_t param, const char * tname) const
 
    switch (param) 
     {
-    case kPromptRealGamma:
-      func=IpPromptRealGamma;
-      break;
-    case kPromptVirtGamma:
-      func=IpPromptVirtGamma;
+    case kDirectRealGamma:
+      func=IpDirectRealGamma;
       break;
-    case kThermRealGamma:
-      func=IpThermRealGamma;
-      break;
-    case kThermVirtGamma:
-      func=IpThermVirtGamma;
+    case kDirectVirtGamma:
+      func=IpDirectVirtGamma;
       break;
     case kPizero:
          func=IpPizero;
@@ -992,17 +1020,11 @@ GenFunc AliGenEMlib::GetV2(Int_t param, const char * tname) const
 
   switch (param) 
     {
-    case kPromptRealGamma:
-      func=V2PromptRealGamma;
-      break;
-    case kPromptVirtGamma:
-      func=V2PromptVirtGamma;
-      break;
-    case kThermRealGamma:
-      func=V2ThermRealGamma;
+    case kDirectRealGamma:
+      func=V2DirectRealGamma;
       break;
-    case kThermVirtGamma:
-      func=V2ThermVirtGamma;
+    case kDirectVirtGamma:
+      func=V2DirectVirtGamma;
       break;
     case kPizero:
       func=V2Pizero;
index 6372507799bb3410a6c124d67e4a0e81d952af58..95af1587e9173acff50860e1698e7c2fe04a3383 100644 (file)
@@ -21,7 +21,7 @@ class TRandom;
 class AliGenEMlib :public AliGenLib {
 public:
     
-  enum Particle_t{kPromptRealGamma, kPromptVirtGamma, kThermRealGamma, kThermVirtGamma, kPizero, kEta, kRho, kOmega, kEtaprime, kPhi, kJpsi};
+  enum Particle_t{kPizero=0, kEta, kRho, kOmega, kEtaprime, kPhi, kJpsi, kDirectRealGamma, kDirectVirtGamma };
   enum Centrality_t{kpp=0x0, k0005=0x1, k0510=0x2, k1020=0x3, k2030=0x4, k3040=0x5, k4050=0x6, k5060=0x7, k0010=0x8, k2040=0x9, k4060=0xA, k6080=0xB, k0020=0xC, k0040=0xD, k2080=0xE, k4080=0xF, kCentralities=0x10};
   enum PtParamSet_t{kPizero7TeVpp=0x10, kPizeroEta7TeVpp=0x20, kPizero7TeVpplow=0x30, kPizeroEta7TeVpplow=0x40, kPizero7TeVpphigh=0x50, kPizeroEta7TeVpphigh=0x60, kPizero2760GeVpp=0x70, kPizeroEta2760GeVpp=0x80, kPizero2760GeVpplow=0x90, kPizeroEta2760GeVpplow=0xA0, kPizero2760GeVpphigh=0xB0, kPizeroEta2760GeVpphigh=0xC0, kPichargedPbPb=0xD0, kPizeroPbPb=0xE0, kPichargedPPb=0xF0 };
   enum v2Sys_t{kLoV2Sys=-1, kNoV2Sys=0, kUpV2Sys=+1};
@@ -81,29 +81,24 @@ public:
 
   static Double_t PtExponential(const Double_t *pt, const Double_t *param);
   static Double_t PtModifiedHagedornPowerlaw(const Double_t *pt, const Double_t *param);
-  static Double_t IntegratedKrollWada(Double_t mh);
+  static Double_t PtDoublePowerlaw(const Double_t *pt, const Double_t *param);
+  static Double_t IntegratedKrollWada(const Double_t *mh, const Double_t *);
 
-  // prompt gamma
-  static Int_t    IpPromptRealGamma(TRandom *ran);
+  // direct gamma
   static Double_t PtPromptRealGamma(const Double_t *px, const Double_t *dummy);
-  static Double_t YPromptRealGamma(const Double_t *py, const Double_t *dummy);
-  static Double_t V2PromptRealGamma(const Double_t *px, const Double_t *dummy);
-
-  static Int_t    IpPromptVirtGamma(TRandom *ran);
   static Double_t PtPromptVirtGamma(const Double_t *px, const Double_t *dummy);
-  static Double_t YPromptVirtGamma(const Double_t *py, const Double_t *dummy);
-  static Double_t V2PromptVirtGamma(const Double_t *px, const Double_t *dummy);
-
-  // thermal gamma
-  static Int_t    IpThermRealGamma(TRandom *ran);
-  static Double_t PtThermRealGamma(const Double_t *px, const Double_t *dummy);
-  static Double_t YThermRealGamma(const Double_t *py, const Double_t *dummy);
-  static Double_t V2ThermRealGamma(const Double_t *px, const Double_t *dummy);
-
-  static Int_t    IpThermVirtGamma(TRandom *ran);
-  static Double_t PtThermVirtGamma(const Double_t *px, const Double_t *dummy);
-  static Double_t YThermVirtGamma(const Double_t *py, const Double_t *dummy);
-  static Double_t V2ThermVirtGamma(const Double_t *px, const Double_t *dummy);
+  static Double_t PtThermalRealGamma(const Double_t *px, const Double_t *dummy);
+  static Double_t PtThermalVirtGamma(const Double_t *px, const Double_t *dummy);
+
+  static Int_t    IpDirectRealGamma(TRandom *ran);
+  static Double_t PtDirectRealGamma(const Double_t *px, const Double_t *dummy);
+  static Double_t YDirectRealGamma(const Double_t *py, const Double_t *dummy);
+  static Double_t V2DirectRealGamma(const Double_t *px, const Double_t *dummy);
+
+  static Int_t    IpDirectVirtGamma(TRandom *ran);
+  static Double_t PtDirectVirtGamma(const Double_t *px, const Double_t *dummy);
+  static Double_t YDirectVirtGamma(const Double_t *py, const Double_t *dummy);
+  static Double_t V2DirectVirtGamma(const Double_t *px, const Double_t *dummy);
 
   // Pizero
     static Int_t    IpPizero(TRandom *ran);
index 3e92b14c9c3e1f9db3d7060ddc42fcbf21288ec5..a2dafd2b1ba6acad2dc6eb0b30e561f463b49bc8 100644 (file)
@@ -225,11 +225,6 @@ void AliGenParam::RotateVector(Double_t *pin, Double_t *pout, Double_t costheta,
   return;
 }
 
-Double_t AliGenParam::IntegratedKrollWada(Double_t mh){
-  if(mh<0.003) return 0;
-  return 2*log(mh/0.000511/exp(7.0/4.0))/411.0/TMath::Pi();
-}
-
 double AliGenParam::ScreenFunction1(double screenVariable){
   if(screenVariable>1)
     return 42.24 - 8.368 * log(screenVariable + 0.952);
@@ -321,8 +316,8 @@ Double_t AliGenParam::RandomMass(Double_t mh){
   while(true){
     double y=fRandom->Rndm();
     double mee=2*0.000511*TMath::Power(2*0.000511/mh,-y); //inverse of the enveloping cumulative distribution
-    double apxkw=2.0/3.0/137.036/TMath::Pi()/mee;
-    double val=fRandom->Uniform(0,apxkw);  //enveloping probability density0
+    double apxkw=2.0/3.0/137.036/TMath::Pi()/mee; //enveloping probability density
+    double val=fRandom->Uniform(0,apxkw);
     double kw=apxkw*sqrt(1-4*0.000511*0.000511/mee/mee)*(1+2*0.000511*0.000511/mee/mee)*1*1*TMath::Power(1-mee*mee/mh/mh,3);
     if(val<kw)
       return mee;
@@ -334,8 +329,8 @@ Int_t AliGenParam::VirtualGammaPairProduction(TClonesArray *particles, Int_t nPa
   Int_t nPartNew=nPart;
   for(int iPart=0; iPart<nPart; iPart++){      
     TParticle *gamma = (TParticle *) particles->At(iPart);
-    if(gamma->GetPdgCode()!=223000 || gamma->GetPdgCode()!=224000) continue;
-    //if(gamma->Energy()<0.001022) continue; //can never be
+    if(gamma->GetPdgCode()!=220000) continue;
+    if(gamma->Pt()<0.002941) continue;  //approximation of kw in AliGenEMlib is 0 below 0.002941
     double mass=RandomMass(gamma->Pt());
 
     // lepton pair kinematics in virtual photon rest frame 
@@ -378,6 +373,7 @@ Int_t AliGenParam::VirtualGammaPairProduction(TClonesArray *particles, Int_t nPa
     new((*particles)[nPartNew]) TParticle(-11, gamma->GetStatusCode(), iPart+1, -1, 0, 0, e2V4, vtx);
     nPartNew++;
   }
+  return nPartNew;
 }
 
 Int_t AliGenParam::ForceGammaConversion(TClonesArray *particles, Int_t nPart)
@@ -390,7 +386,6 @@ Int_t AliGenParam::ForceGammaConversion(TClonesArray *particles, Int_t nPart)
     TParticle *gamma = (TParticle *) particles->At(iPart);
     if(gamma->GetPdgCode()!=22) continue;
     if(gamma->Energy()<0.001022) continue;
-
     TVector3 gammaV3(gamma->Px(),gamma->Py(),gamma->Pz());
     double frac=RandomEnergyFraction(1,gamma->Energy());
     double Ee1=frac*gamma->Energy();
@@ -424,8 +419,7 @@ Int_t AliGenParam::ForceGammaConversion(TClonesArray *particles, Int_t nPart)
     new((*particles)[nPartNew]) TParticle(-11, gamma->GetStatusCode(), iPart+1, -1, 0, 0, TLorentzVector(e2V3,Ee2), vtx);
     nPartNew++;
   }
-  // particles->Compress();
-  return particles->GetEntriesFast();
+  return nPartNew;
 }
 
 //____________________________________________________________
@@ -579,7 +573,7 @@ void AliGenParam::GenerateN(Int_t ntimes)
       Int_t iTemp = iPart;
 
       // custom pdg codes for to destinguish direct photons
-      if((iPart>=221000) && (iPart<=229000)) iPart=22;
+      if(iPart==220000) iPart=22;
 
          fChildWeight=(fDecayer->GetPartialBranchingRatio(iPart))*fParentWeight;          
          TParticlePDG *particle = pDataBase->GetParticle(iPart);
@@ -664,13 +658,12 @@ void AliGenParam::GenerateN(Int_t ntimes)
              Int_t np=fDecayer->ImportParticles(particles);
 
        iPart=iTemp;
-       if(fForceConv) np=ForceGammaConversion(particles,np);
-       if(iPart==223000 || iPart==224000){
-         // wgtp*=IntegratedKrollWada(pt);
-         // wgtch*=IntegratedKrollWada(pt);
-         // np=VirtualGammaPairProduction(particles,np)
+       if(iPart==220000){
+         TParticle *gamma = (TParticle *)particles->At(0);
+         gamma->SetPdgCode(iPart);
+         np=VirtualGammaPairProduction(particles,np);
        }
-
+       if(fForceConv) np=ForceGammaConversion(particles,np);
 
              //  Selecting  GeometryAcceptance for particles fPdgCodeParticleforAcceptanceCut;
              if (fGeometryAcceptance) 
index 522096aee8ee89b755eeb1791d830cbfceffa502..b00789c619862c9dc7365bea035b000afece47b4 100644 (file)
@@ -55,7 +55,6 @@ public:
     static TVector3 OrthogonalVector(TVector3 &inVec);
     static void RotateVector(Double_t *pin, Double_t *pout, Double_t costheta, Double_t sintheta,
                           Double_t cosphi, Double_t sinphi);
-    static double IntegratedKrollWada(Double_t mh);
     static double ScreenFunction1(double d);
     static double ScreenFunction2(double d);
     double RandomEnergyFraction(double Z, double E);
index e6639177642a62d682f8950e21bd61168fe519a9..8173f51041f1c3a62c4f2234669ba11073332811 100644 (file)
@@ -1901,12 +1901,9 @@ Int_t  AliAnalysisTaskJetCluster::GetListOfTracks(TList *list,Int_t type){
          if (trPt <= 20. && (ntpcClus < NTPCClsCut.Eval(trPt))) continue;
          else if (trPt > 20. && ntpcClus < 100) continue;
 
-         Int_t idtr1 = tr->GetID(); 
-         Bool_t flagSame = kFALSE;
-         AvoidDoubleCountingHF(aod, idtr1, flagSame);
-         if (flagSame) continue; 
+         if (AvoidDoubleCountingHF(aod,tr)) continue;
        }
-       // 
+       //
 
         if(fRequireITSRefit){if((tr->GetStatus()&AliESDtrack::kITSrefit)==0)continue;}
         if (fApplySharedClusterCut) {
@@ -2109,23 +2106,25 @@ Int_t AliAnalysisTaskJetCluster::AddDaughters(TList * list, AliAODMCParticle *pa
        }                       
 return count;  
 }
-void AliAnalysisTaskJetCluster::AvoidDoubleCountingHF(AliAODEvent *aod, Int_t idtr1,  Bool_t &fFlagSameTr){
+
+
+Bool_t AliAnalysisTaskJetCluster::AvoidDoubleCountingHF(AliAODEvent *aod, AliAODTrack *tr1){
   
-       Bool_t sametr = kFALSE;
+  if(!(tr1->TestFilterBit(BIT(9)))) return kFALSE;
 
-     for(int jt = 0;jt < aod->GetNumberOfTracks();++jt){
+  Int_t idtr1 = tr1->GetID();
 
-       AliAODTrack *tr2 = aod->GetTrack(jt);
-       Int_t idtr2 = tr2->GetID();
-       if (idtr2>-1) continue;
+  for(int jt = 0;jt < aod->GetNumberOfTracks();++jt){
 
-       idtr2=-1*idtr2;
-       if (idtr1==idtr2-1) sametr = kTRUE;
+    const AliAODTrack *tr2 = aod->GetTrack(jt);
+    Int_t idtr2 = tr2->GetID();
+       
+    if (!(tr2->TestFilterBit(BIT(4)))) continue;
+    if (idtr1==(idtr2+1)*-1.) return kTRUE;
        
-     }
-     fFlagSameTr = sametr;
+  }
+  return kFALSE;
 }
-
 void AliAnalysisTaskJetCluster::LoadTrPtResolutionRootFileFromOADB() {
 
    if (!gGrid) {
index 8424bd5b5ce068c107e1ce53650132bde1ed5a75..042de7309c020801960244a6f13a7ed053cb17a4 100644 (file)
@@ -27,6 +27,7 @@ namespace fastjet {
 class AliJetHeader;
 class AliESDEvent;
 class AliAODEvent;
+class AliAODTrack;
 class AliAODExtension;
 class AliAODJet;
 class AliGenPythiaEventHeader;
@@ -158,7 +159,7 @@ class AliAnalysisTaskJetCluster : public AliAnalysisTaskSE
 
     Int_t GetListOfTracks(TList *list,Int_t type);
        Int_t AddDaughters(TList * list, AliAODMCParticle *part, TClonesArray * tca);
-    void AvoidDoubleCountingHF(AliAODEvent *aod, Int_t idtr1, Bool_t &fFlagSameTr);
+    Bool_t AvoidDoubleCountingHF(AliAODEvent *aod, AliAODTrack *tr1);
        
     AliAODEvent     *fAOD;                // ! where we take the jets from can be input or output AOD
     AliAODExtension *fAODExtension;       // ! AOD extension in case we write a non-sdt branch to a separate file and the aod is standard
index 66c0e9f5263da43377a9b8ae56eee331f8caec06..7782fde3d3019dd5fe5094ffdec5a097b3b92b6d 100644 (file)
@@ -225,8 +225,8 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double
   
   Double_t fXPointOfClosestApproach=0, fYPointOfClosestApproach=0, fZPointOfClosestApproach=0;
   
-  AliAODTrack *muon[nMuons];
-  AliMUONTrackParam *param[nMuons];
+  AliAODTrack *muon[AliMFTConstants::fNMaxMuonsForPCA]        = {0};
+  AliMUONTrackParam *param[AliMFTConstants::fNMaxMuonsForPCA] = {0};
 
   // Finding AliMUONTrackParam objects for each muon
   
@@ -249,7 +249,7 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double
 
   Double_t r[3]={0}, z[3]={startPoint, startPoint+step, startPoint+2*step};
   
-  TVector3 **points = new TVector3*[nMuons];
+  TVector3 **points = new TVector3*[AliMFTConstants::fNMaxMuonsForPCA];
   
   for (Int_t i=0; i<3; i++) {
     for (Int_t iMu=0; iMu<nMuons; iMu++) {
@@ -285,8 +285,6 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double
       return kFALSE;
     }
     
-    for (Int_t iMu=0; iMu<nMuons; iMu++) delete points[iMu];
-    
     for (Int_t i=0; i<3; i++) {
       for (Int_t iMu=0; iMu<nMuons; iMu++) {
         AliMUONTrackExtrap::ExtrapToZ(param[iMu], z[i]);
@@ -300,7 +298,7 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double
 
   }
 
-  // now we now that the minimum is between z[0] and z[2] and we search for it
+  // now we know that the minimum is between z[0] and z[2] and we search for it
   
   step *= 0.5;
   while (step>AliMFTConstants::fPrecisionPointOfClosestApproach) {
@@ -318,6 +316,7 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double
     else step *= 0.5;
   }
   
+  //  for (Int_t iMuon=0; iMuon<AliMFTConstants::fNMaxMuonsForPCA; iMuon++) if (points[iMuon]) delete points[iMuon];
   delete [] points;
 
   // Once z of minimum is found, we evaluate the x and y coordinates by averaging over the contributing tracks
@@ -363,6 +362,9 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double
   if (sum > 0.) pcaQuality =  (sum-squareSum/sum) / (nMuons-1);
   else pcaQuality = 0.;
 
+  for (Int_t iMu=0; iMu<AliMFTConstants::fNMaxMuonsForPCA; iMu++) if (param[iMu]) delete param[iMu];
+  //  delete param;
+
   return kTRUE;
   
 }
index b1d292400903dcac6cbbc5c6b0457bd0a3f7d5fb..1c4c56721ccb5ad51b1d128bf766fc89621097bd 100644 (file)
@@ -336,7 +336,7 @@ Int_t AliMFTTrackerMU::Clusters2Tracks(AliESDEvent *event) {
       myESDTrack -> SetFirstTrackingPoint(newTrack->GetMFTCluster(0)->GetX(), newTrack->GetMFTCluster(0)->GetY(), newTrack->GetMFTCluster(0)->GetZ());
       myESDTrack -> SetXYAtVertex(newTrack->GetOffsetX(0., AliMFTConstants::fZEvalKinem), newTrack->GetOffsetY(0., AliMFTConstants::fZEvalKinem));
       myESDTrack -> SetRAtAbsorberEnd(newTrack->GetRAtAbsorberEnd());
-      myESDTrack -> SetCovariances(newTrack->GetTrackParamAtMFTCluster(0)->GetCovariances());    // waiting for commit from Peter...
+      myESDTrack -> SetCovariances(newTrack->GetTrackParamAtMFTCluster(0)->GetCovariances());
       myESDTrack -> SetChi2MatchTrigger(esdTrack->GetChi2MatchTrigger());
       myESDTrack -> SetMuonClusterMap(esdTrack->GetMuonClusterMap());
       myESDTrack -> SetHitsPatternInTrigCh(esdTrack->GetHitsPatternInTrigCh());
index 7dcfeec12407d7d5f20e7fbfc89ca447621eb477..efef57658b6bd579c10edb985f2264bfaf654f0f 100644 (file)
@@ -38,5 +38,5 @@ endif(ALICE_TARGET MATCHES "macosx")
 
 set ( EINCLUDE MICROCERN MICROCERN/kerngen)
 
-set ( PACKFFLAGS  "${FFLAGS} -IMICROCERN/kerngen")
+set ( PACKFFLAGS  "${FFLAGS} -I${CMAKE_SOURCE_DIR}/MICROCERN/kerngen")
 
index 0c34cbb5900be024062b93a2c4c1c3b3079e5e84..f9976abbd4fea563caec74de230cc427a41ffe0f 100755 (executable)
@@ -71,7 +71,8 @@ ClassImp(AliCalorimeterUtils)
     fPlotCluster(0),                  fOADBSet(kFALSE),
     fOADBForEMCAL(kFALSE),            fOADBForPHOS(kFALSE),
     fOADBFilePathEMCAL(""),           fOADBFilePathPHOS(""),
-    fImportGeometryFromFile(0),       fImportGeometryFilePath("")
+    fImportGeometryFromFile(0),       fImportGeometryFilePath(""),
+    fNSuperModulesUsed(0)
 {
   //Ctor
   
@@ -1218,6 +1219,8 @@ void AliCalorimeterUtils::InitParameters()
   
   fImportGeometryFromFile = kTRUE;
   fImportGeometryFilePath = "";
+  fNSuperModulesUsed = 22;
   
 }
 
index bf7408fb5cf74c68803ac78055970cc57f33ef63..41cbad2bc43eb3e10d99c4141b26ad4d674c7ae4 100755 (executable)
@@ -285,6 +285,8 @@ class AliCalorimeterUtils : public TObject {
   void          SetEMCALOADBFilePath(TString path)              { fOADBFilePathEMCAL  = path    ; }
   void          SetPHOSOADBFilePath (TString path)              { fOADBFilePathPHOS   = path    ; }
 
+  void          SetNumberOfSuperModulesUsed(Int_t nSM)          { fNSuperModulesUsed  = nSM     ; }
+  Int_t         GetNumberOfSuperModulesUsed()             const { return fNSuperModulesUsed     ; }
   
  private:
 
@@ -326,10 +328,14 @@ class AliCalorimeterUtils : public TObject {
   Bool_t             fImportGeometryFromFile;// Import geometry settings in geometry.root file
   TString            fImportGeometryFilePath;// path fo geometry.root file
 
+  Int_t              fNSuperModulesUsed;     // Number of supermodules to be used in analysis, can be different than the real geo,
+                                             // to be used at initialization of histograms
+
+  
   AliCalorimeterUtils(              const AliCalorimeterUtils & cu) ; // cpy ctor
   AliCalorimeterUtils & operator = (const AliCalorimeterUtils & cu) ; // cpy assignment
   
-  ClassDef(AliCalorimeterUtils,15)
+  ClassDef(AliCalorimeterUtils,16)
 } ;
 
 
index ff043944bf3e87a5079bca21e632c61b57f162dd..513fd1594603c0bcbdb3fef30c4e2edd3e5283d8 100644 (file)
@@ -21,7 +21,7 @@ using namespace std;
 ClassImp(AliAnalysisTaskJetFlowMC)
 
 //_____________________________________________________________________________
-AliAnalysisTaskJetFlowMC::AliAnalysisTaskJetFlowMC() : AliAnalysisTaskSE("AliAnalysisTaskJetFlowMC"), fTracksOutName("JetFlowMC"),  fTracksInName("PicoTrack"), fTracksIn(0),  fTracksOut(0), fCenBin(-1), fCentralityClasses(0), fFuncVn(0), fOutputList(0), fTrackSpectrum(0), fRandomizeEta(kTRUE), fJetSpectrumSF(0), fNoOfSFJets(0), fHistIntV2(0), fHistIntV3(0), fFlowFluctuations(-10), fMaxNumberOfIterations(100), fPsi2(-10), fPsi3(-10), fPrecisionPhi(1e-10), fDetectorType(kVZEROC), fHistSFJetSpectrum(0), fHistSFJetEtaPhi(0) {
+AliAnalysisTaskJetFlowMC::AliAnalysisTaskJetFlowMC() : AliAnalysisTaskSE("AliAnalysisTaskJetFlowMC"), fTracksOutName("JetFlowMC"),  fTracksInName("PicoTrack"), fTracksIn(0),  fTracksOut(0), fReuseTracks(kFALSE), fMult(2200), fCenBin(-1), fCentralityClasses(0), fFuncVn(0), fOutputList(0), fTrackSpectrum(0), fRandomizeEta(kTRUE), fJetSpectrumSF(0), fNoOfSFJets(0), fHistIntV2(0), fHistIntV3(0), fFlowFluctuations(-10), fMaxNumberOfIterations(100), fPsi2(-10), fPsi3(-10), fPrecisionPhi(1e-10), fDetectorType(kVZEROC), fHistSFJetSpectrum(0), fHistSFJetEtaPhi(0) {
     // default constructor for root IO
     for(Int_t i(0); i < 10; i++) {
         fFuncDiffV2[i]                  = 0x0;
@@ -38,7 +38,7 @@ AliAnalysisTaskJetFlowMC::AliAnalysisTaskJetFlowMC() : AliAnalysisTaskSE("AliAna
     }
 }
 //_____________________________________________________________________________
-AliAnalysisTaskJetFlowMC::AliAnalysisTaskJetFlowMC(const char *name) : AliAnalysisTaskSE(name), fTracksOutName("JetFlowMC"), fTracksInName("PicoTrack"), fTracksIn(0), fTracksOut(0), fCenBin(-1), fCentralityClasses(0), fFuncVn(0), fOutputList(0), fTrackSpectrum(0), fRandomizeEta(kTRUE), fJetSpectrumSF(0), fNoOfSFJets(0), fHistIntV2(0), fHistIntV3(0), fFlowFluctuations(-10), fMaxNumberOfIterations(100), fPsi2(-10), fPsi3(-10), fPrecisionPhi(1e-10), fDetectorType(kVZEROC), fHistSFJetSpectrum(0), fHistSFJetEtaPhi(0) {
+AliAnalysisTaskJetFlowMC::AliAnalysisTaskJetFlowMC(const char *name) : AliAnalysisTaskSE(name), fTracksOutName("JetFlowMC"), fTracksInName("PicoTrack"), fTracksIn(0), fTracksOut(0), fReuseTracks(kFALSE), fMult(2200), fCenBin(-1), fCentralityClasses(0), fFuncVn(0), fOutputList(0), fTrackSpectrum(0), fRandomizeEta(kTRUE), fJetSpectrumSF(0), fNoOfSFJets(0), fHistIntV2(0), fHistIntV3(0), fFlowFluctuations(-10), fMaxNumberOfIterations(100), fPsi2(-10), fPsi3(-10), fPrecisionPhi(1e-10), fDetectorType(kVZEROC), fHistSFJetSpectrum(0), fHistSFJetEtaPhi(0) {
     // constructor
     DefineInput(0, TChain::Class());
     DefineOutput(1, TList::Class());
@@ -189,19 +189,35 @@ void AliAnalysisTaskJetFlowMC::UserExec(Option_t *)
     fTracksOut->Clear();
     // get the event plane
     CalculateEventPlane();
-    const Int_t Ntracks = fTracksIn->GetEntriesFast();
     Int_t nacc(0);
-    for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
-        AliPicoTrack* track = static_cast<AliPicoTrack*>(fTracksIn->At(iTracks));
-        if(!track) continue;
-        Double_t phi(track->Phi()), pt((fTrackSpectrum) ? GetTrackPt() : track->Pt()), eta(fRandomizeEta ? GetTrackEta() : track->Eta());
-        // fill qa histo's before applying any (possible) afterburner
-        FillHistogramsOriginalData(pt, eta, phi);
-        if(fHistDiffV2[fCenBin] || fFuncDiffV2[fCenBin])        V2AfterBurner(phi, eta, pt);
-        else if(fHistDiffV3[fCenBin] || fFuncDiffV3[fCenBin])   V3AfterBurner(phi, eta, pt);
-        else if(fHistIntV2 || fHistIntV3)                       SampleVnFromTF1(phi);        
-        /*AliPicoTrack *picotrack =*/ new ((*fTracksOut)[nacc]) AliPicoTrack(pt, eta, phi, track->Charge(), track->GetLabel(), 4, track->GetTrackEtaOnEMCal(), track->GetTrackPhiOnEMCal(), track->GetTrackPtOnEMCal(), 1); 
-        nacc++;
+    if(fReuseTracks) {
+        const Int_t Ntracks = fTracksIn->GetEntriesFast();
+        for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
+            AliPicoTrack* track = static_cast<AliPicoTrack*>(fTracksIn->At(iTracks));
+            if(!track) continue;
+            Double_t phi(track->Phi()), pt((fTrackSpectrum) ? GetTrackPt() : track->Pt()), eta(fRandomizeEta ? GetTrackEta() : track->Eta());
+            // fill qa histo's before applying any (possible) afterburner
+            FillHistogramsOriginalData(pt, eta, phi);
+            if(fHistDiffV2[fCenBin] || fFuncDiffV2[fCenBin])        V2AfterBurner(phi, eta, pt);
+            else if(fHistDiffV3[fCenBin] || fFuncDiffV3[fCenBin])   V3AfterBurner(phi, eta, pt);
+            else if(fHistIntV2 || fHistIntV3)                       SampleVnFromTF1(phi);        
+            /*AliPicoTrack *picotrack =*/ new ((*fTracksOut)[nacc]) AliPicoTrack(pt, eta, phi, track->Charge(), track->GetLabel(), 4, track->GetTrackEtaOnEMCal(), track->GetTrackPhiOnEMCal(), track->GetTrackPtOnEMCal(), 1); 
+            nacc++;
+        }
+    } else {
+        Double_t pt(0), eta(0), phi(0);
+        for (Int_t iTracks = 0; iTracks < fMult; ++iTracks) {
+            pt = GetTrackPt();
+            eta = gRandom->Uniform(-.9, .9);
+            phi = gRandom->Uniform(0., TMath::TwoPi());
+            // fill qa histo's before applying any (possible) afterburner
+            FillHistogramsOriginalData(pt, eta, phi);
+            if(fHistDiffV2[fCenBin] || fFuncDiffV2[fCenBin])        V2AfterBurner(phi, eta, pt);
+            else if(fHistDiffV3[fCenBin] || fFuncDiffV3[fCenBin])   V3AfterBurner(phi, eta, pt);
+            else if(fHistIntV2 || fHistIntV3)                       SampleVnFromTF1(phi);        
+            /*AliPicoTrack *picotrack =*/ new ((*fTracksOut)[nacc]) AliPicoTrack(pt, eta, phi, 1, 0, 4, eta, phi, pt, 1); 
+            nacc++;
+        }
     }
     if(fJetSpectrumSF && fNoOfSFJets > 0) InjectSingleFragmentationJetSpectrum(nacc);
     PostData(1, fOutputList);
index d1b6e564c9d6f27711d7c186a3b4356c3940e634..bf5473dbed29c0bc60d4cc919a93df3e55264758 100644 (file)
@@ -42,6 +42,8 @@ class AliAnalysisTaskJetFlowMC : public AliAnalysisTaskSE
         void    SetIntegratedV3(TH1* v3)                        { fHistIntV3 = v3; }
         void    SetTrackSpectrum(TF1* ts)                       { fTrackSpectrum = ts; }
         void    SetRandomizeEta(Bool_t b)                       { fRandomizeEta = b; }
+        void    SetMultiplicity(Int_t m)                        { fMult = m; }
+        void    SetReuseTracks(Bool_t r)                        { fReuseTracks = r; }
         void    SetSingleFragmentationJetSpectrum(TF1* js)      { fJetSpectrumSF = js; }
         void    SetNoOfSFJets(Int_t n)                          { fNoOfSFJets = n; }
         // additional methods
@@ -92,6 +94,8 @@ class AliAnalysisTaskJetFlowMC : public AliAnalysisTaskSE
         TString         fTracksInName;          // name of input track array
         TClonesArray   *fTracksIn;              //!track array in
         TClonesArray   *fTracksOut;             //!track array out
+        Bool_t          fReuseTracks;           // use original event as template
+        Int_t           fMult;                  // multiplicity of new event
         Int_t           fCenBin;                //! centrality bin
         TArrayI*        fCentralityClasses;     // centrality classes (max 10) 
         TF1*            fFuncVn;                //! vn function
@@ -126,6 +130,6 @@ class AliAnalysisTaskJetFlowMC : public AliAnalysisTaskSE
         AliAnalysisTaskJetFlowMC(const AliAnalysisTaskJetFlowMC&);            // not implemented
         AliAnalysisTaskJetFlowMC &operator=(const AliAnalysisTaskJetFlowMC&); // not implemented
 
-        ClassDef(AliAnalysisTaskJetFlowMC, 1); // Task to generate toy mc PicoTracks based on real events
+        ClassDef(AliAnalysisTaskJetFlowMC, 2); // Task to generate toy mc PicoTracks based on real events
 };
 #endif
index 28b8a8ad1ab755f8dd5249eb75d476ee684ebc49..8dee14f5348ad3907983153f651ebc37dc3f8b34 100644 (file)
@@ -73,6 +73,8 @@ using namespace std;
 //_____________________________________________________________________________
 AliJetFlowTools::AliJetFlowTools() :
     fResponseMaker      (new AliAnaChargedJetResponseMaker()),
+    fRMS                (kTRUE),
+    fSymmRMS            (kTRUE),
     fPower              (new TF1("fPower","[0]*TMath::Power(x,-([1]))",0.,300.)),
     fSaveFull           (kTRUE),
     fActiveString       (""),
@@ -1454,7 +1456,7 @@ void AliJetFlowTools::Style(TGraph* h, EColor col, histoType type)
     h->SetLineWidth(2.);
     h->SetMarkerSize(1.);
     h->SetTitle("");
-    h->SetFillColor(kYellow);
+    h->SetFillColor(kCyan);
     h->GetYaxis()->SetLabelSize(0.05);
     h->GetXaxis()->SetLabelSize(0.05);
     h->GetYaxis()->SetTitleOffset(1.6);
@@ -1689,6 +1691,7 @@ void AliJetFlowTools::GetCorrelatedUncertainty(
         if(sym) dInUp += aInLow*aInLow;
         if(dInUp > 0) relativeErrorInUp->SetBinContent(b+1, TMath::Sqrt(dInUp));
         dOutUp = aOutUp*aOutUp + bOutUp*bOutUp + cOutUp*cOutUp;
+        if(sym) dOutUp += aOutLow*aOutLow;
         if(dOutUp > 0) relativeErrorOutUp->SetBinContent(b+1, TMath::Sqrt(dOutUp));
         // for the lower bound
         if(relativeErrorVariationInLow) aInLow = relativeErrorVariationInLow->GetBinContent(b+1);
@@ -1699,6 +1702,7 @@ void AliJetFlowTools::GetCorrelatedUncertainty(
         if(sym) dInLow += aInUp*aInUp;
         if(dInLow > 0) relativeErrorInLow->SetBinContent(b+1, -1*TMath::Sqrt(dInLow));
         dOutLow = aOutLow*aOutLow + bOutLow*bOutLow + cOutLow*cOutLow;
+        if(sym) dOutLow += aOutUp*aOutUp;
         if(dOutLow > 0) relativeErrorOutLow->SetBinContent(b+1, -1.*TMath::Sqrt(dOutLow));
     }
     // project the estimated errors on the nominal ratio
@@ -1741,9 +1745,9 @@ void AliJetFlowTools::GetCorrelatedUncertainty(
         nominalCanvas->Divide(2);
         nominalCanvas->cd(1);
         Style(nominal, kBlack);
-        Style(nominalError, kYellow, kRatio);
-        nominalError->SetLineColor(kYellow);
-        nominalError->SetMarkerColor(kYellow);
+        Style(nominalError, kCyan, kRatio);
+        nominalError->SetLineColor(kCyan);
+        nominalError->SetMarkerColor(kCyan);
         nominalError->GetXaxis()->SetRangeUser(rangeLow, rangeUp);
         nominalError->GetYaxis()->SetRangeUser(.7, 2.2);
         nominalError->DrawClone("a2");
@@ -1767,9 +1771,9 @@ void AliJetFlowTools::GetCorrelatedUncertainty(
         TGraphErrors* nominalV2(GetV2(nominalIn, nominalOut, fEventPlaneRes, "v_{2}"));
         nominalCanvas->cd(2);
         Style(nominalV2, kBlack);
-        Style(nominalV2Error, kYellow, kV2);
-        nominalV2Error->SetLineColor(kYellow);
-        nominalV2Error->SetMarkerColor(kYellow);
+        Style(nominalV2Error, kCyan, kV2);
+        nominalV2Error->SetLineColor(kCyan);
+        nominalV2Error->SetMarkerColor(kCyan);
         nominalV2Error->GetXaxis()->SetRangeUser(rangeLow, rangeUp);
         nominalV2Error->DrawClone("a2");
         nominalV2->DrawClone("same E1");
@@ -1881,7 +1885,8 @@ void AliJetFlowTools::GetShapeUncertainty(
                 rangeLow, 
                 rangeUp,
                 readMe,
-                "regularization");
+                "regularization",
+                fRMS);
         if(relativeErrorRegularizationInUp) {
             // canvas with the error from regularization strength
             TCanvas* relativeErrorRegularization(new TCanvas("relativeErrorRegularization", "relativeErrorRegularization"));
@@ -1988,7 +1993,8 @@ void AliJetFlowTools::GetShapeUncertainty(
                 rangeLow, 
                 rangeUp,
                 readMe,
-                "method");
+                "method"
+                );
         if(relativeErrorMethodInUp) {
             TCanvas* relativeErrorMethod(new TCanvas("relativeErrorMethod", "relativeErrorMethod"));
             relativeErrorMethod->Divide(2);
@@ -2046,6 +2052,13 @@ void AliJetFlowTools::GetShapeUncertainty(
         if(relativeErrorRecBinOutLow) cOutLow = relativeErrorRecBinOutLow->GetBinContent(b+1);
         if(relativeErrorMethodInLow) dInLow = relativeErrorMethodInLow->GetBinContent(b+1);
         if(relativeErrorMethodOutLow) dOutLow = relativeErrorMethodOutLow->GetBinContent(b+1);
+        if(fSymmRMS) {  // take first category as symmetric
+            aInLow = aInUp;
+            aOutLow = aOutUp;
+            if(dInLow < dInUp) dInLow = dInUp;
+            if(dOutLow < dOutUp) dOutLow = dOutUp;
+        }
+
         eInLow  = aInLow*aInLow + bInLow*bInLow + cInLow*cInLow + dInLow*dInLow;
         if(eInLow > 0) relativeErrorInLow->SetBinContent(b+1, -1.*TMath::Sqrt(eInLow));
         eOutLow = aOutLow*aOutLow + bOutLow*bOutLow + cOutLow*cOutLow + dOutLow*dOutLow;
@@ -2085,9 +2098,9 @@ void AliJetFlowTools::GetShapeUncertainty(
         nominalCanvas->Divide(2);
         nominalCanvas->cd(1);
         Style(nominal, kBlack);
-        Style(nominalError, kYellow, kRatio);
-        nominalError->SetLineColor(kYellow);
-        nominalError->SetMarkerColor(kYellow);
+        Style(nominalError, kCyan, kRatio);
+        nominalError->SetLineColor(kCyan);
+        nominalError->SetMarkerColor(kCyan);
         nominalError->GetXaxis()->SetRangeUser(rangeLow, rangeUp);
         nominalError->GetYaxis()->SetRangeUser(.7, 2.2);
         nominalError->DrawClone("a2");
@@ -2109,9 +2122,9 @@ void AliJetFlowTools::GetShapeUncertainty(
         TGraphErrors* nominalV2(GetV2(nominalIn, nominalOut, fEventPlaneRes, "v_{2}"));
         nominalCanvas->cd(2);
         Style(nominalV2, kBlack);
-        Style(nominalV2Error, kYellow, kV2);
-        nominalV2Error->SetLineColor(kYellow);
-        nominalV2Error->SetMarkerColor(kYellow);
+        Style(nominalV2Error, kCyan, kV2);
+        nominalV2Error->SetLineColor(kCyan);
+        nominalV2Error->SetMarkerColor(kCyan);
         nominalV2Error->GetXaxis()->SetRangeUser(rangeLow, rangeUp);
         nominalV2Error->DrawClone("a2");
         nominalV2->DrawClone("same E1");
@@ -2168,11 +2181,11 @@ void AliJetFlowTools::GetShapeUncertainty(
             Float_t rangeLow,                       // lower pt range
             Float_t rangeUp,                        // upper pt range
             TFile* readMe,                          // input file name (created by this unfolding class)
-            TString source                          // source of the variation
+            TString source,                         // source of the variation
+            Bool_t RMS                              // return RMS of distribution of variations as error
             ) const
 {
    // intermediate systematic check function. first index of supplied array is nominal value
-   //
    TList* listOfKeys((TList*)readMe->GetListOfKeys());
    if(!listOfKeys) {
        printf(" > Fatal error, couldn't retrieve list of keys. Input file might have been corrupted ! < \n");
@@ -2201,20 +2214,40 @@ void AliJetFlowTools::GetShapeUncertainty(
    lineUp->SetLineWidth(3);
 
    // define an output histogram with the maximum relative error from this systematic constribution
+   // if the option RMS is set to false, sigma is not really a standard deviation but holds the maximum (or minimum) relative value that the data has
+   // reached in this function call.
+   // if the option RMS is set to true, sigma holds the RMS value (equal to sigma as the mean is zero for relative errors) of the distribution of variations
+   // which should correspond to a 68% confidence level
    relativeErrorInUp = new TH1D(Form("max #sigma/|x| from %s", source.Data()), Form("max #sigma/|x| from %s", source.Data()), fBinsTrue->GetSize()-1, fBinsTrue->GetArray());
    relativeErrorInLow = new TH1D(Form("min #sigma/|x| from  %s", source.Data()), Form("min #sigma/|x| from %s", source.Data()), fBinsTrue->GetSize()-1, fBinsTrue->GetArray());
    relativeErrorOutUp = new TH1D(Form("max #sigma/|x| from  %s", source.Data()), Form("max #sigma/|x| from %s", source.Data()), fBinsTrue->GetSize()-1, fBinsTrue->GetArray());
    relativeErrorOutLow = new TH1D(Form("min #sigma/|x| from %s", source.Data()), Form("min #sigma/|x| from %s", source.Data()), fBinsTrue->GetSize()-1, fBinsTrue->GetArray());
    for(Int_t b(0); b < fBinsTrue->GetSize()-1; b++) {
-       relativeErrorInUp->SetBinContent(b+1, 1.);
-       relativeErrorInUp->SetBinError(b+1, 0.);
-       relativeErrorOutUp->SetBinContent(b+1, 1.);
-       relativeErrorOutUp->SetBinError(b+1, .0);
-       relativeErrorInLow->SetBinContent(b+1, 1.);
-       relativeErrorInLow->SetBinError(b+1, 0.);
-       relativeErrorOutLow->SetBinContent(b+1, 1.);
-       relativeErrorOutLow->SetBinError(b+1, .0);
+       if(!RMS) {
+           relativeErrorInUp->SetBinContent(b+1, 1.);
+           relativeErrorInUp->SetBinError(b+1, 0.);
+           relativeErrorOutUp->SetBinContent(b+1, 1.);
+           relativeErrorOutUp->SetBinError(b+1, .0);
+           relativeErrorInLow->SetBinContent(b+1, 1.);
+           relativeErrorInLow->SetBinError(b+1, 0.);
+           relativeErrorOutLow->SetBinContent(b+1, 1.);
+           relativeErrorOutLow->SetBinError(b+1, .0);
+       } else if(RMS) {
+           relativeErrorInUp->SetBinContent(b+1, 0.);
+           relativeErrorInUp->SetBinError(b+1, 0.);
+           relativeErrorOutUp->SetBinContent(b+1, 0.);
+           relativeErrorOutUp->SetBinError(b+1, 0.);
+           relativeErrorInLow->SetBinContent(b+1, 0.);
+           relativeErrorInLow->SetBinError(b+1, 0.);
+           relativeErrorOutLow->SetBinContent(b+1, 0.);
+           relativeErrorOutLow->SetBinError(b+1, 0.);
+       } 
    }
+   Int_t relativeErrorInUpN[100] = {0};
+   Int_t relativeErrorOutUpN[100] = {0};
+   Int_t relativeErrorInLowN[100] = {0};
+   Int_t relativeErrorOutLowN[100] = {0};
+   
    // define an output histogram with the systematic error from this systematic constribution
    if(!relativeStatisticalErrorIn && !relativeStatisticalErrorOut) {
        relativeStatisticalErrorIn = new TH1D("relative statistical error, in plane", "#sigma/|x|, statistical, in plane", fBinsTrue->GetSize()-1, fBinsTrue->GetArray());
@@ -2384,15 +2417,32 @@ void AliJetFlowTools::GetShapeUncertainty(
                    temp->Divide(unfoldedSpectrum);
                    // get the absolute relative error
                    for(Int_t b(0); b < fBinsTrue->GetSize()-1; b++) {
-                       // the variation is HIGHER than the nominal point, so the bar goes UP
-                       if( temp->GetBinContent(b+1) < 1 && temp->GetBinContent(b+1) < relativeErrorInUp->GetBinContent(b+1)) {
-                           relativeErrorInUp->SetBinContent(b+1, temp->GetBinContent(b+1));
-                           relativeErrorInUp->SetBinError(b+1, 0.);
-                       }
-                       // the variation is LOWER than the nominal point, so the bar goes DOWN
-                       else if(temp->GetBinContent(b+1) > 1 && temp->GetBinContent(b+1) > relativeErrorInLow->GetBinContent(b+1)) {
-                           relativeErrorInLow->SetBinContent(b+1, temp->GetBinContent(b+1));
-                           relativeErrorInLow->SetBinError(b+1, 0.);
+                       if(!RMS) {       // save the maximum deviation that a variation can cause
+                           // the variation is HIGHER than the nominal point, so the bar goes UP
+                           if( temp->GetBinContent(b+1) < 1 && temp->GetBinContent(b+1) < relativeErrorInUp->GetBinContent(b+1)) {
+                               relativeErrorInUp->SetBinContent(b+1, temp->GetBinContent(b+1));
+                               relativeErrorInUp->SetBinError(b+1, 0.);
+                           }
+                           // the variation is LOWER than the nominal point, so the bar goes DOWN
+                           else if(temp->GetBinContent(b+1) > 1 && temp->GetBinContent(b+1) > relativeErrorInLow->GetBinContent(b+1)) {
+                               relativeErrorInLow->SetBinContent(b+1, temp->GetBinContent(b+1));
+                               relativeErrorInLow->SetBinError(b+1, 0.);
+                           }
+                       } else if (RMS && !fSymmRMS) { // save info necessary for evaluating the RMS of a distribution of variations
+                           printf(" oops shouldnt be here \n " );
+                           if(temp->GetBinContent(b+1) < 1) {
+                               relativeErrorInUp->SetBinContent(b+1, relativeErrorInUp->GetBinContent(b+1)+TMath::Power(1.-temp->GetBinContent(b+1), 2));
+                               relativeErrorInUpN[b]++;
+                           }
+                           // the variation is LOWER than the nominal point, so the bar goes DOWN
+                           else if(temp->GetBinContent(b+1) > 1) {
+                               relativeErrorInLow->SetBinContent(b+1, relativeErrorInLow->GetBinContent(b+1)+TMath::Power(1.-temp->GetBinContent(b+1), 2));
+                               relativeErrorInLowN[b]++;
+                           }
+                       } else if (fSymmRMS) {
+                           // save symmetric sum of square to get a symmetric rms
+                           relativeErrorInUp->SetBinContent(b+1, relativeErrorInUp->GetBinContent(b+1)+TMath::Power(temp->GetBinContent(b+1)-1., 2));
+                           relativeErrorInUpN[b]++;
                        }
                        if(temp->GetBinError(b+1) > 0) relativeStatisticalErrorIn->SetBinContent(b+1, temp->GetBinError(b+1)/temp->GetBinContent(b+1));
                    }
@@ -2511,18 +2561,34 @@ void AliJetFlowTools::GetShapeUncertainty(
                    temp->Divide(unfoldedSpectrum);
                    // get the absolute relative error 
                    for(Int_t b(0); b < fBinsTrue->GetSize()-1; b++) {
-                       // check if the error is larger than the current maximum
-                       if(temp->GetBinContent(b+1) < 1 && temp->GetBinContent(b+1) < relativeErrorOutUp->GetBinContent(b+1)) {
-                           relativeErrorOutUp->SetBinContent(b+1, temp->GetBinContent(b+1));
-                           relativeErrorOutUp->SetBinError(b+1, 0.);
-                       }
-                       // check if the error is smaller than the current minimum
-                       else if(temp->GetBinContent(b+1) > 1 && temp->GetBinContent(b+1) > relativeErrorOutLow->GetBinContent(b+1)) {
-                           relativeErrorOutLow->SetBinContent(b+1, temp->GetBinContent(b+1));
-                           relativeErrorOutLow->SetBinError(b+1, 0.);
+                       if(!RMS) {
+                           // check if the error is larger than the current maximum
+                           if(temp->GetBinContent(b+1) < 1 && temp->GetBinContent(b+1) < relativeErrorOutUp->GetBinContent(b+1)) {
+                               relativeErrorOutUp->SetBinContent(b+1, temp->GetBinContent(b+1));
+                               relativeErrorOutUp->SetBinError(b+1, 0.);
+                           }
+                           // check if the error is smaller than the current minimum
+                           else if(temp->GetBinContent(b+1) > 1 && temp->GetBinContent(b+1) > relativeErrorOutLow->GetBinContent(b+1)) {
+                               relativeErrorOutLow->SetBinContent(b+1, temp->GetBinContent(b+1));
+                               relativeErrorOutLow->SetBinError(b+1, 0.);
+                           }
+                       } else if (RMS && !fSymmRMS) {
+                           printf(" OOps \n ");
+                           if(temp->GetBinContent(b+1) < 1) {
+                               relativeErrorOutUp->SetBinContent(b+1, relativeErrorOutUp->GetBinContent(b+1)+TMath::Power(1.-temp->GetBinContent(b+1), 2));
+                               relativeErrorOutUpN[b]++;
+                           }
+                           else if(temp->GetBinContent(b+1) > 1) {
+                               relativeErrorOutLow->SetBinContent(b+1, relativeErrorOutLow->GetBinContent(b+1)+TMath::Power(1.-temp->GetBinContent(b+1), 2));
+                               relativeErrorOutLowN[b]++;
+                           }
+                       } else if (fSymmRMS) {
+                           // save symmetric rms value
+                           relativeErrorOutUp->SetBinContent(b+1, relativeErrorOutUp->GetBinContent(b+1)+TMath::Power(temp->GetBinContent(b+1)-1., 2));
+                           relativeErrorOutUpN[b]++;
                        }
                        if(temp->GetBinError(b+1) > 0) relativeStatisticalErrorOut->SetBinContent(b+1, temp->GetBinError(b+1)/temp->GetBinContent(b+1));
-                    }
+                   }
                    temp->SetTitle(Form("[%s] / [%s]", defOut.Data(), dirNameOut.Data()));
                    temp->GetXaxis()->SetTitle("p_{T, jet} [GeV/c]");
                    temp->GetYaxis()->SetTitle("ratio");
@@ -2707,17 +2773,40 @@ void AliJetFlowTools::GetShapeUncertainty(
 
    // save the relative errors
    for(Int_t b(0); b < fBinsTrue->GetSize()-1; b++) {
-
        // to arrive at a min and max from here, combine in up and out low
-       
-       relativeErrorInUp->SetBinContent(b+1, -1.*(relativeErrorInUp->GetBinContent(b+1)-1));
-       relativeErrorInUp->SetBinError(b+1, 0.);
-       relativeErrorOutUp->SetBinContent(b+1, -1.*(relativeErrorOutUp->GetBinContent(b+1)-1));
-       relativeErrorOutUp->SetBinError(b+1, .0);
-       relativeErrorInLow->SetBinContent(b+1, -1.*(relativeErrorInLow->GetBinContent(b+1)-1));
-       relativeErrorInLow->SetBinError(b+1, 0.);
-       relativeErrorOutLow->SetBinContent(b+1, -1.*(relativeErrorOutLow->GetBinContent(b+1)-1));
-       relativeErrorOutLow->SetBinError(b+1, .0);
+       if(!RMS) {
+           relativeErrorInUp->SetBinContent(b+1, -1.*(relativeErrorInUp->GetBinContent(b+1)-1));
+           relativeErrorInUp->SetBinError(b+1, 0.);
+           relativeErrorOutUp->SetBinContent(b+1, -1.*(relativeErrorOutUp->GetBinContent(b+1)-1));
+           relativeErrorOutUp->SetBinError(b+1, .0);
+           relativeErrorInLow->SetBinContent(b+1, -1.*(relativeErrorInLow->GetBinContent(b+1)-1));
+           relativeErrorInLow->SetBinError(b+1, 0.);
+           relativeErrorOutLow->SetBinContent(b+1, -1.*(relativeErrorOutLow->GetBinContent(b+1)-1));
+           relativeErrorOutLow->SetBinError(b+1, .0);
+       } else if (RMS) {
+           // these guys are already stored as percentages, so no need to remove the offset of 1
+           // RMS is defined as sqrt(sum(squared))/N
+           // min is defined as negative, max is defined as positive
+           if(!fSymmRMS) {
+               if(relativeErrorInUpN[b] < 1) relativeErrorInUpN[b] = 1;
+               if(relativeErrorInLowN[b] < 1) relativeErrorInLowN[b] = 1;
+               if(relativeErrorOutUpN[b] < 1) relativeErrorOutUpN[b] = 1;
+               if(relativeErrorOutLowN[b] < 1) relativeErrorOutLowN[b] = 1;
+               relativeErrorInUp->SetBinContent(b+1, TMath::Sqrt(relativeErrorInUp->GetBinContent(b+1)/relativeErrorInUpN[b]));
+               relativeErrorInUp->SetBinError(b+1, 0.);
+               relativeErrorOutUp->SetBinContent(b+1, TMath::Sqrt(relativeErrorOutUp->GetBinContent(b+1)/relativeErrorOutUpN[b]));
+               relativeErrorOutUp->SetBinError(b+1, .0);
+               relativeErrorInLow->SetBinContent(b+1, -1.*TMath::Sqrt(relativeErrorInLow->GetBinContent(b+1)/relativeErrorInLowN[b]));
+               relativeErrorInLow->SetBinError(b+1, 0.);
+               relativeErrorOutLow->SetBinContent(b+1, -1.*TMath::Sqrt(relativeErrorOutLow->GetBinContent(b+1)/relativeErrorOutLowN[b]));
+               relativeErrorOutLow->SetBinError(b+1, .0);
+           } else if (fSymmRMS) {
+               if(relativeErrorInUpN[b] < 1) relativeErrorInUpN[b] = 1;
+               if(relativeErrorOutUpN[b] < 1) relativeErrorOutUpN[b] = 1;
+               relativeErrorInUp->SetBinContent(b+1, TMath::Sqrt(relativeErrorInUp->GetBinContent(b+1)/relativeErrorInUpN[b]));
+               relativeErrorOutUp->SetBinContent(b+1, TMath::Sqrt(relativeErrorOutUp->GetBinContent(b+1)/relativeErrorOutUpN[b]));
+           }
+       }
    }
    relativeErrorInUp->SetYTitle("relative uncertainty");
    relativeErrorOutUp->SetYTitle("relative uncertainty");
index 671d633ea614a8496d5f13f1b88682c17ec6f7c7..0af2f2ce76b8a6cd9bd0de6812bb0f0db73769ce 100644 (file)
@@ -133,6 +133,8 @@ class AliJetFlowTools {
         void            SetDphiDptUnfolding(Bool_t i)           {fDphiDptUnfolding      = i;}
         void            SetExLJDpt(Bool_t i)                    {fExLJDpt               = i;}
         void            SetWeightFunction(TF1* w)               {fResponseMaker->SetRMMergeWeightFunction(w);}
+        void            SetRMS(Bool_t r)                        {fRMS                   = r;}
+        void            SetSymmRMS(Bool_t r)                    {fSymmRMS               = r; fRMS               = r;}
         void            Make();
         void            MakeAU();       // test function, use with caution (09012014)
         void            Finish() {
@@ -236,17 +238,26 @@ class AliJetFlowTools {
         }
         static TPaveText*       AddTPaveText(TString text, Int_t r = 2) {
             TPaveText* t(new TPaveText(.35, .27, .76, .33,"NDC"));
-//            t->SetFillStyle(0);
             t->SetFillColor(0);            
             t->SetBorderSize(0);
             t->AddText(0.,0.,text.Data());
             t->AddText(0., 0., Form("#it{R} = 0.%i #it{k}_{T} charged jets", r));
             t->SetTextColor(kBlack);
-//            t->SetTextSize(0.03);
             t->SetTextFont(42);
             t->Draw("same");
             return t;
         } 
+        static TPaveText*       AddText(TString text, EColor col) {
+            TPaveText* t(new TPaveText(.35, .27, .76, .33,"NDC"));
+            t->SetFillColor(0);            
+            t->SetBorderSize(0);
+            t->AddText(0.,0.,text.Data());
+            t->SetTextColor(col);
+            t->SetTextFont(42);
+            t->Draw("same");
+            return t;
+        } 
+
         static void     SavePadToPDF(TVirtualPad* pad)  {pad->SaveAs(Form("%s.pdf", pad->GetName()));}
         // interface to AliUnfolding, not necessary but nice to have all parameters in one place
         static void     SetMinuitStepSize(Float_t s)    {AliUnfolding::SetMinuitStepSize(s);}
@@ -309,7 +320,8 @@ class AliJetFlowTools {
                 Float_t rangeLow,
                 Float_t rangeUp,
                 TFile* readMe, 
-                TString source = "") const;
+                TString source = "",
+                Bool_t RMS = kFALSE) const;
         static void     ResetAliUnfolding();
         // give object a unique name via the 'protect heap' functions. 
         // may seem redundant, but some internal functions of root (e.g.
@@ -319,6 +331,8 @@ class AliJetFlowTools {
         TGraphErrors*   ProtectHeap(TGraphErrors* protect, Bool_t kill = kTRUE, TString suffix = "") const;
         // members, accessible via setters
         AliAnaChargedJetResponseMaker*  fResponseMaker; // utility object
+        Bool_t                  fRMS;                   // systematic method
+        Bool_t                  fSymmRMS;               // symmetric systematic method
         TF1*                    fPower;                 // smoothening fit
         Bool_t                  fSaveFull;              // save all generated histograms to file
         TString                 fActiveString;          // identifier of active output
index 4fb21538ba00f403c3ceeaaa8d276573af8fcad6..dc2dfe49567f1612bfccfef247bece151f8539ba 100644 (file)
@@ -39,6 +39,7 @@ AliTRDTriggerAnalysis::AliTRDTriggerAnalysis() :
   fRequireMatch(kFALSE),
   fRequireMatchElectron(kFALSE),
   fRequireInTime(kTRUE),
+  fJetTriggerMode(kHJTDefault),
   fTRDlayerMaskEl(0x1),
   fTRDnTrackletsEl(5),
   fTRDptHSE(3.),
@@ -168,7 +169,8 @@ Bool_t AliTRDTriggerAnalysis::CalcTriggers(const AliVEvent *event)
     MarkInput(kHEE);
 
   // evaluate TRD GTU tracks
-  Int_t nTracks[90]      = { 0 }; // stack-wise counted number of tracks above pt threshold
+  const Int_t nStacks = (fJetTriggerMode == kHJTWindowZPhi) ? 360 : 90;
+  Int_t nTracks[360] = { 0 }; // stack-wise counted number of tracks above pt threshold
 
   Int_t nTrdTracks = event->GetNumberOfTrdTracks();
 
@@ -209,7 +211,33 @@ Bool_t AliTRDTriggerAnalysis::CalcTriggers(const AliVEvent *event)
 
     // stack-wise counting of tracks above pt threshold for jet trigger
     if (TMath::Abs(trdTrack->Pt()) >= fTRDptHJT) {
-      ++nTracks[globalStack];
+      if (fJetTriggerMode == kHJTDefault)
+       ++nTracks[globalStack];
+      else if (fJetTriggerMode == kHJTWindowZPhi) {
+       AliESDTrdTrack *esdTrdTrack = dynamic_cast<AliESDTrdTrack*> (trdTrack);
+       if (esdTrdTrack) {
+         Double_t a = esdTrdTrack->GetA()/128.;
+         Double_t b = esdTrdTrack->GetB()/128.;
+         Double_t c = esdTrdTrack->GetC()/256. / TMath::Tan( -2.0 / 180.0 * TMath::Pi() );
+         Double_t x = 297.759; // L0: 297.759, L1: 309.17
+
+         Double_t ypos = -a + x*b + (a >= 0. ? -0.253 : 0.253);
+         Double_t zpos = c*x + (c >= 0. ? -0.84 : 0.84);
+
+         const Float_t zStackCenter[5] = {241, 117, 0, -117, -241};
+
+         Bool_t upperHalfPhi = ypos >= 0.;
+         Bool_t upperHalfZ = zpos >= zStackCenter[esdTrdTrack->GetStack()];
+
+         Int_t stackIdx = 20 * esdTrdTrack->GetSector() + (upperHalfPhi ? 10 : 0) + 2 * esdTrdTrack->GetStack() + (upperHalfZ ? 1 : 0);
+         ++nTracks[stackIdx];
+         ++nTracks[stackIdx - 10 + (((stackIdx - 10) < 0) ? 360 : 0)];
+         if ((stackIdx % 10) != 0) {
+           ++nTracks[stackIdx -  1];
+           ++nTracks[stackIdx - 11 + (((stackIdx - 11) < 0) ? 360 : 0)];
+         }
+       }
+      }
     }
 
     // ignore the track for the electron triggers
@@ -237,7 +265,7 @@ Bool_t AliTRDTriggerAnalysis::CalcTriggers(const AliVEvent *event)
   }
 
   // check if HJT condition is fulfilled in any stack
-  for (Int_t iStack = 0; iStack < 90; ++iStack) {
+  for (Int_t iStack = 0; iStack < nStacks; ++iStack) {
     if (nTracks[iStack] >= fTRDnHJT) {
       MarkCondition(kHJT, iStack);
       break;
index 3156f5293cd8e1d9d9bf764a3e8b78c454d7b66f..08b0c8fbc1de41fc35ac5fd071a1b918f94138ca 100644 (file)
@@ -21,6 +21,8 @@ public:
 
   enum TRDTrigger_t { kHCO = 0, kHJT, kHSE, kHQU, kHEE, kHlast };
 
+  enum JetTriggerMode_t { kHJTDefault = 0, kHJTWindowZPhi };
+
   void ResetTriggers();
   Bool_t CalcTriggers(const AliVEvent* event);
 
@@ -61,6 +63,9 @@ public:
   void SetRequireInTime(Bool_t val) { fRequireInTime = val; }
   Bool_t GetRequireInTime() const { return fRequireInTime; }
 
+  void SetJetTriggerMode(Int_t mode) { fJetTriggerMode = mode; }
+  Int_t GetJetTriggerMode() const { return fJetTriggerMode; }
+
   void SetVerbosity(UChar_t val) { fVerbosity = val; }
   UChar_t GetVerbosity() const { return fVerbosity; }
 
@@ -87,6 +92,9 @@ protected:
   Bool_t fRequireMatchElectron;        // require a matched global track
                                // for the electron conditions
   Bool_t fRequireInTime;       // require the tracks to be in time
+  Int_t  fJetTriggerMode;       // select mode for jet trigger
+                               // 0: default (stack-wise counting, as hw)
+                               // 1: count in overlapping windows of stack size
 
   // trigger thresholds
   UChar_t fTRDlayerMaskEl;      // mask for tracklet requirements
index 90611425c8d69557acb9332741d5cfc5498d64a1..14483609e262212bb6d7db932183d3099a51d1af 100644 (file)
@@ -38,7 +38,7 @@ set ( DHDR  PWGCFChaoticityLinkDef.h)
 
 set ( EXPORT )
 
-set ( EINCLUDE FEMTOSCOPY/Chaoticity STEER/AOD STEER/ESD STEER/STEERBase ANALYSIS)
+set ( EINCLUDE PWGCF/FEMTOSCOPY/Chaoticity STEER/AOD STEER/ESD STEER/STEERBase ANALYSIS)
 
 install (DIRECTORY FEMTOSCOPY/macros
          DESTINATION PWGCF/FEMTOSCOPY 
index 0517a851b7581ea020335ad69d12a9464f7d6f06..25941d7a9591cba6143ef219ff1f6c1adf411bf8 100644 (file)
@@ -38,7 +38,7 @@ set ( DHDR  PWGCFK0AnalysisLinkDef.h)
 
 set ( EXPORT )
 
-set ( EINCLUDE FEMTOSCOPY/K0Analysis STEER/AOD STEER/ESD STEER/STEERBase ANALYSIS)
+set ( EINCLUDE PWGCF/FEMTOSCOPY/K0Analysis STEER/AOD STEER/ESD STEER/STEERBase ANALYSIS)
 
 install (DIRECTORY FEMTOSCOPY/macros
          DESTINATION PWGCF/FEMTOSCOPY 
index 668a8772f1ed427436c3b4e1e5a1ae5b8e536aa5..b59994dba5f4778fa97f3eda00ff697f5a01f8f4 100644 (file)
@@ -147,7 +147,7 @@ set ( DHDR  PWGCFfemtoscopyLinkDef.h)
 
 set ( EXPORT )
 
-set ( EINCLUDE  PWGCF/FEMTOSCOPY/AliFemto PWGCF/AOD PWGCF/FORWARD/analysis STEER/AOD STEER/ESD STEER/STEERBase ANALYSIS)
+set ( EINCLUDE  PWGCF/FEMTOSCOPY/AliFemto  STEER/AOD STEER/ESD STEER/STEERBase ANALYSIS)
 
 install (DIRECTORY FEMTOSCOPY/macros
          DESTINATION PWGCF/FEMTOSCOPY 
index d365181a058d7ca8cf5fc997545c89afc14ea288..ba785fe23ea73944b064e156ae89f69f3d388b90 100644 (file)
@@ -25,7 +25,7 @@
 # SHLIBS - Shared Libraries and objects for linking (Executables only)           #
 #--------------------------------------------------------------------------------#
 
-set ( SRCS  FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityKTPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoKKTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoTPCInnerCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoChi2CorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnSource.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelBPLCMSCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelGausRinvFreezeOutGenerator.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnTrueQ.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnNonIdDR.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DLCMSSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleMomRes.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelAllHiddenInfo.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCchiNdof.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQATrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQAEventCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCncls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDG.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnTPCNcls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnGammaMonitor.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQinvCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctn3DSphericalEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoBPLCMS3DCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutAntiGamma.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleEtCorr.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutPt.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAvgSepCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDGV0.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAnalysisAzimuthalPbPb.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceLM.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPicoEventRP.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceKK.cxx)
+set ( SRCS  FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityKTPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoKKTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoTPCInnerCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoChi2CorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnSource.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelBPLCMSCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelGausRinvFreezeOutGenerator.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnTrueQ.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnNonIdDR.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DLCMSSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleMomRes.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelAllHiddenInfo.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCchiNdof.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQATrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQAEventCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCncls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDG.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnTPCNcls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnGammaMonitor.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQinvCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctn3DSphericalEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoBPLCMS3DCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutAntiGamma.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleEtCorr.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutPt.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAvgSepCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDGV0.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAnalysisAzimuthalPbPb.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceLM.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPicoEventRP.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceKK.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx)
 
 string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" )
 
index 6056fe1abc1a4e8b1fac5fd4b0e6af6816e2f905..05a0abd40f7cae2f7825fdcfc67b8eefcb8666b8 100644 (file)
@@ -142,7 +142,7 @@ fUseChargeHadrons(kFALSE),
 fParticleSpeciesTrigger(-1),
 fParticleSpeciesAssociated(-1),
 fCheckMotherPDG(kTRUE),
-fTrackletDphiCut(999.),
+fTrackletDphiCut(9999999.),
 fSelectCharge(0),
 fTriggerSelectCharge(0),
 fAssociatedSelectCharge(0),
@@ -339,7 +339,7 @@ void  AliAnalysisTaskPhiCorrelations::CreateOutputObjects()
   if (fTriggersFromDetector == 1 || fTriggersFromDetector == 2 || fAssociatedFromDetector == 1 || fAssociatedFromDetector == 2)
     fListOfHistos->Add(new TH1F("V0SingleCells", "V0 single cell multiplicity;multiplicity;events", 100, -0.5, 99.5));
   if (fTriggersFromDetector == 3 || fAssociatedFromDetector == 3)
-    fListOfHistos->Add(new TH1F("DphiTrklets", "tracklets Dphi;#Delta#phi,trklets;entries", 100, -0.1, 0.1));
+    fListOfHistos->Add(new TH1F("DphiTrklets", "tracklets Dphi;#Delta#phi,trklets (mrad);entries", 100, -100, 100));
   
   PostData(0,fListOfHistos);
   
@@ -661,6 +661,17 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseCorrectionMode()
   if (fFillOnlyStep0)
     zVtx = 0;
   
+  // Event selection based on number of number of MC particles
+  if (fRejectZeroTrackEvents && tracksMC->GetEntriesFast() == 0)
+  {
+    AliInfo(Form("Rejecting event due to kinematic selection: %f %d", centrality, tracksMC->GetEntriesFast()));
+    fHistos->FillEvent(centrality, AliUEHist::kCFStepAnaTopology);
+    if (tracksMC != tracksCorrelateMC)
+      delete tracksCorrelateMC;
+    delete tracksMC;
+    return;
+  }
+  
   // (MC-true all particles)
   // STEP 0
   fHistos->FillCorrelations(centrality, zVtx, AliUEHist::kCFStepAll, tracksMC, tracksCorrelateMC, weight);
@@ -1498,10 +1509,11 @@ TObjArray* AliAnalysisTaskPhiCorrelations::GetParticlesFromDetector(AliVEvent* i
        {
          Double_t eta=-TMath::Log(TMath::Tan(trklets->GetTheta(itrklets)/2));
          if(TMath::Abs(eta)>fTrackEtaCut)continue;
-         if(TMath::Abs(trklets->GetDeltaPhi(itrklets))>fTrackletDphiCut)continue;
+         Double_t pT=1000*TMath::Abs(trklets->GetDeltaPhi(itrklets));//in mrad
+         if(pT>fTrackletDphiCut)continue;
          TH1F* DphiTrklets = (TH1F*)fListOfHistos->FindObject("DphiTrklets");
-         DphiTrklets->Fill(trklets->GetDeltaPhi(itrklets));
-         AliDPhiBasicParticle* particle = new AliDPhiBasicParticle(eta,trklets->GetPhi(itrklets), 1.1, 0); // fit pT = 1.1 and charge = 0
+         DphiTrklets->Fill(1000*trklets->GetDeltaPhi(itrklets)); //in mrad
+         AliDPhiBasicParticle* particle = new AliDPhiBasicParticle(eta,trklets->GetPhi(itrklets), pT, 0); // pT = TMath::Abs(trklets->GetDeltaPhi(itrklets)) in mrad and charge = 0
          particle->SetUniqueID(fAnalyseUE->GetEventCounter()* 100000 + itrklets);
          
          obj->Add(particle);
@@ -1516,11 +1528,12 @@ TObjArray* AliAnalysisTaskPhiCorrelations::GetParticlesFromDetector(AliVEvent* i
        if (!track->IsMuonTrack()) continue;
        //Float_t dca    = track->DCA();
        //Float_t chi2   = track->Chi2perNDF();
-       //Int_t   mask   = track->GetMatchTrigger();
-       Float_t eta    = track->Eta();
        Float_t rabs   = track->GetRAtAbsorberEnd();
+       Float_t eta    = track->Eta();
+       Int_t   matching   = track->GetMatchTrigger();
        if (rabs < 17.6 || rabs > 89.5) continue;
        if (eta < -4 || eta > -2.5) continue;
+       if (matching < 2) continue;
        
        AliDPhiBasicParticle* particle = new AliDPhiBasicParticle(eta,track->Phi(), track->Pt(), track->Charge()); 
        particle->SetUniqueID(fAnalyseUE->GetEventCounter() * 100000 + iTrack);
index 824c6e346170f46eed5bee7129a24bca63af06e4..c317679d1164c02907d4a1f559756c0e968406d8 100644 (file)
@@ -40,8 +40,8 @@
 
 #include "AliLeadingV0Correlation.h"
 
-#define CorrBinsX 24
-#define CorrBinsY 26
+#define CorrBinsX 240
+#define CorrBinsY 260
 
 
 Double_t PI =TMath::Pi();
@@ -105,12 +105,16 @@ AliLeadingV0Correlation::AliLeadingV0Correlation()
        fHistMCGenK0                            (0),
        fHistMCGenLAM                           (0),
        fHistMCGenALAM                          (0),
+       fHistMCGenLAMXIPLS                      (0),
+       fHistMCGenLAMXI                         (0),
        fHistReconstK0                          (0),
        fHistReconstLA                          (0),
        fHistReconstALA                         (0),
        fHistMCAssoK0                           (0),
        fHistMCAssoLA                           (0),
        fHistMCAssoALA                          (0),
+       fHistMCAssoLAXI                         (0),
+       fHistMCAssoALAXiPlus            (0),
        fHistReconstSib                         (0),
        fHistReconstMix                         (0),
        fHistReconstSibGEN                      (0),
@@ -188,12 +192,16 @@ AliLeadingV0Correlation::AliLeadingV0Correlation(const char *name)
        fHistMCGenK0                            (0),
        fHistMCGenLAM                           (0),
        fHistMCGenALAM                          (0),
+       fHistMCGenLAMXIPLS                      (0),
+       fHistMCGenLAMXI                         (0),
        fHistReconstK0                          (0),
        fHistReconstLA                          (0),
        fHistReconstALA                         (0),
        fHistMCAssoK0                           (0),
        fHistMCAssoLA                           (0),
        fHistMCAssoALA                          (0),
+       fHistMCAssoLAXI                         (0),
+       fHistMCAssoALAXiPlus            (0),
        fHistReconstSib                         (0),
        fHistReconstMix                         (0),
        fHistReconstSibGEN                      (0),
@@ -279,26 +287,32 @@ void AliLeadingV0Correlation::UserCreateOutputObjects()
        fHistEventViceReconst= new TH2F("fHistEventViceReconst", "fHistEventViceReconst", 200, -20, 20, 10,0,1000);
        fOutputList->Add(fHistEventViceReconst);
        
-       fHistMCGenLAM  = new TH2F("fHistMCGenLAM" , "fHistMCGenLAM" ,140,1.06,1.2, 120, 0, 6);
+       fHistMCGenLAM  = new TH2F("fHistMCGenLAM" , "fHistMCGenLAM" ,140,1.06,1.2, 120, 0, fTriglow);
        fOutputList->Add(fHistMCGenLAM);
        
-       fHistMCGenALAM = new TH2F("fHistMCGenALAM", "fHistMCGenALAM",140,1.06,1.2, 120, 0, 6);
+       fHistMCGenALAM = new TH2F("fHistMCGenALAM", "fHistMCGenALAM",140,1.06,1.2, 120, 0, fTriglow);
        fOutputList->Add(fHistMCGenALAM);
        
-       fHistMCGenK0   = new TH2F("fHistMCGenK0"  , "fHistMCGenK0"  ,200,0.4,0.6, 120, 0, 6);
+       fHistMCGenK0   = new TH2F("fHistMCGenK0"  , "fHistMCGenK0"  ,200,0.4,0.6, 120, 0, fTriglow);
        fOutputList->Add(fHistMCGenK0);
        
+       fHistMCGenLAMXIPLS = new TH2F("fHistMCGenLAMXIPLS", "fHistMCGenLAMXIPLS",140,1.06,1.2, 120, 0, fTriglow);
+       fOutputList->Add(fHistMCGenLAMXIPLS);
+       
+       fHistMCGenLAMXI   = new TH2F("fHistMCGenLAMXI"  , "fHistMCGenLAMXI"  ,140,1.06,1.2, 120, 0, fTriglow);
+       fOutputList->Add(fHistMCGenLAMXI);
+       
        //New dimension for feed down corection 
        
        const Int_t ndimsK0 = 4;       
-       Int_t    binsK0[ndimsK0] = {200, 120,500, 1000};
-       Double_t xminK0[ndimsK0] = {0.4,   0,  0,  0.9};
-       Double_t xmaxK0[ndimsK0] = {0.6,   6, 10,    1};
+       Int_t    binsK0[ndimsK0] = {200, 120,500,1000};
+       Double_t xminK0[ndimsK0] = {0.4,   0,  0,0.99};
+       Double_t xmaxK0[ndimsK0] = {0.6,   fTriglow, 10,   1};
        
        const Int_t ndimsLA = 4;       
        Int_t    binsLA[ndimsLA] = { 140, 120,500,1000};
-       Double_t xminLA[ndimsLA] = {1.06,   0,  0,   0};
-       Double_t xmaxLA[ndimsLA] = { 1.2,   6, 10,   1};
+       Double_t xminLA[ndimsLA] = {1.06,   0,  0,0.99};
+       Double_t xmaxLA[ndimsLA] = { 1.2,   fTriglow, 10,   1};
        
        fHistReconstK0= new THnSparseD("fHistReconstK0"  , "fHistReconstK0",ndimsK0,binsK0,xminK0,xmaxK0);
        fHistReconstK0->Sumw2();
@@ -324,15 +338,23 @@ void AliLeadingV0Correlation::UserCreateOutputObjects()
        fHistMCAssoALA->Sumw2();
        fOutputList->Add(fHistMCAssoALA);
        
+       fHistMCAssoLAXI= new THnSparseD("fHistMCAssoLAXI" , "fHistMCAssoLAXI" , ndimsLA,binsLA,xminLA,xmaxLA);
+       fHistMCAssoLAXI->Sumw2();
+       fOutputList->Add(fHistMCAssoLAXI);
+       
+       fHistMCAssoALAXiPlus= new THnSparseD("fHistMCAssoALAXiPlus" , "fHistMCAssoALAXiPlus" , ndimsLA,binsLA,xminLA,xmaxLA);
+       fHistMCAssoALAXiPlus->Sumw2();
+       fOutputList->Add(fHistMCAssoALAXiPlus);
+       
        //--------------------------------------------Correlation Histos -----------------------------------------------------//
        
        //0-pTK0,1-PhiK0,2-EtaK0,3-DPhiK0,4-DEtaK0,5-TYPE,6-CutSet
        const Int_t ndimsv0CORR = 8;       
        Int_t    binsv0CORR[ndimsv0CORR] = {120, 200,          200,CorrBinsX,      CorrBinsY,4,500,1000};
        
-       Double_t xminv0CORR[ndimsv0CORR] = {  0,   0,-fTrackEtaCut,    -PI/2,-2*fTrackEtaCut,0,  0,   0};
+       Double_t xminv0CORR[ndimsv0CORR] = {  0,   0,-fTrackEtaCut,    -PI/2,-2*fTrackEtaCut,0,  0,0.99};
        
-       Double_t xmaxv0CORR[ndimsv0CORR] = {  6,2*PI, fTrackEtaCut,   3*PI/2, 2*fTrackEtaCut,4, 10,   1};
+       Double_t xmaxv0CORR[ndimsv0CORR] = {  fTriglow,2*PI, fTrackEtaCut,   3*PI/2, 2*fTrackEtaCut,4, 10,   1};
        
        fHistReconstSib= new THnSparseD("fHistReconstSib", "fHistReconstSib", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR);
        fHistReconstSib->Sumw2();
@@ -367,27 +389,27 @@ void AliLeadingV0Correlation::UserCreateOutputObjects()
        fOutputList->Add(fHistReconstMixFEED);
        
        
-       fHistTriggerSib= new TH2F("fHistTriggerSib", "fHistTriggerSib", 100, fTriglow, fTrighigh,200,0,2*PI);
+       fHistTriggerSib= new TH1F("fHistTriggerSib", "fHistTriggerSib", 100, fTriglow, fTrighigh);
        fHistTriggerSib->Sumw2();
        fOutputList->Add(fHistTriggerSib);
        
-       fHistTriggerMix= new TH2F("fHistTriggerMix", "fHistTriggerMix", 100, fTriglow, fTrighigh,200,0,2*PI);
+       fHistTriggerMix= new TH1F("fHistTriggerMix", "fHistTriggerMix", 100, fTriglow, fTrighigh);
        fHistTriggerMix->Sumw2();
        fOutputList->Add(fHistTriggerMix);
        
-       fHistTriggerSibGEN= new TH2F("fHistTriggerSibGEN", "fHistTriggerSibGEN", 100, fTriglow, fTrighigh,200,0,2*PI);
+       fHistTriggerSibGEN= new TH1F("fHistTriggerSibGEN", "fHistTriggerSibGEN", 100, fTriglow, fTrighigh);
        fHistTriggerSibGEN->Sumw2();
        fOutputList->Add(fHistTriggerSibGEN);
        
-       fHistTriggerMixGEN= new TH2F("fHistTriggerMixGEN", "fHistTriggerMixGEN", 100, fTriglow, fTrighigh,200,0,2*PI);
+       fHistTriggerMixGEN= new TH1F("fHistTriggerMixGEN", "fHistTriggerMixGEN", 100, fTriglow, fTrighigh);
        fHistTriggerMixGEN->Sumw2();
        fOutputList->Add(fHistTriggerMixGEN);
        
-       fHistTriggerSibASO= new TH2F("fHistTriggerSibASO", "fHistTriggerSibASO", 100, fTriglow, fTrighigh,200,0,2*PI);
+       fHistTriggerSibASO= new TH1F("fHistTriggerSibASO", "fHistTriggerSibASO", 100, fTriglow, fTrighigh);
        fHistTriggerSibASO->Sumw2();
        fOutputList->Add(fHistTriggerSibASO);
        
-       fHistTriggerMixASO= new TH2F("fHistTriggerMixASO", "fHistTriggerMixASO", 100, fTriglow, fTrighigh,200,0,2*PI);
+       fHistTriggerMixASO= new TH1F("fHistTriggerMixASO", "fHistTriggerMixASO", 100, fTriglow, fTrighigh);
        fHistTriggerMixASO->Sumw2();
        fOutputList->Add(fHistTriggerMixASO);
        
@@ -466,7 +488,7 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                        if (!mcTrack) continue;
                        // Charged track Generated level
                        Double_t mcTrackPt  = mcTrack->Pt();
-                       if ((mcTrackPt<fPtMin)||(mcTrackPt>6.0)) continue;
+                       if ((mcTrackPt<fPtMin)||(mcTrackPt>fTriglow)) continue;
                        
                        Double_t mcTrackEta = mcTrack->Eta();
                        Double_t mcTrackPhi = mcTrack->Phi();
@@ -479,8 +501,7 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                        // V0 Generated level
                        Int_t mcPartPdg           = mcTrack->GetPdgCode();
                        
-                       Double_t mcRapidity   = mcTrack->Y();
-                       Bool_t V0RapMax       = TMath::Abs(mcRapidity)<fRapidityCut;
+                       Bool_t V0EtaMax       = TMath::Abs(mcTrackEta)<fTrackEtaCut;
                        Double_t mcMass       = mcTrack->M();
                        
                        Double_t mcK0[3] = {mcMass,mcTrackPt,nMCTracks};
@@ -494,21 +515,21 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                        Int_t MotherPdg            = mcMother->GetPdgCode();
                        
                        Bool_t IsK0 = mcPartPdg==310;
-                       if (IsK0 && V0RapMax && TrIsPrime) 
+                       if (IsK0 && V0EtaMax && TrIsPrime) 
                        {
                                fHistMCGenK0->Fill(mcK0[0],mcK0[1]);
                                selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
                        } 
                        
                        Bool_t IsLambda = mcPartPdg==3122;
-                       if (IsLambda && V0RapMax && TrIsPrime) 
+                       if (IsLambda && V0EtaMax && TrIsPrime) 
                        {
                                fHistMCGenLAM->Fill(mcLa[0],mcLa[1]);
                                selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
                        }
                        
                        Bool_t IsAntiLambda = mcPartPdg==-3122;
-                       if (IsAntiLambda && V0RapMax && TrIsPrime) 
+                       if (IsAntiLambda && V0EtaMax && TrIsPrime) 
                        {       
                                fHistMCGenALAM->Fill(mcAl[0],mcAl[1]);
                                selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
@@ -516,21 +537,24 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                        
                        Bool_t IsXImin  =MotherPdg== 3312;
                        Bool_t IsXIPlus =MotherPdg==-3312;
-                       Bool_t IsOmega  =MotherPdg==-3334;
+                       Bool_t IsXizero =MotherPdg== 3322;
+                       Bool_t IsOmega  =MotherPdg== 3334;
                        
-                       if (IsLambda && V0RapMax && IsOmega
+                       if (IsLambda && V0EtaMax && (IsXizero || IsXImin)
                        {       
                                selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0));
+                               fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]);
                        }
                        
-                       if (IsLambda && V0RapMax && IsXImin
+                       if (IsLambda && V0EtaMax && IsOmega
                        {       
                                selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0));
                        }
                        
-                       if (IsAntiLambda && V0RapMax && IsXIPlus) 
+                       if (IsAntiLambda && V0EtaMax && IsXIPlus) 
                        {       
                                selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0));
+                               fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]);
                        }
                }
                
@@ -624,12 +648,11 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
        Double_t lDcaPosToPrimVertex = 0;Double_t lDcaNegToPrimVertex = 0;Double_t lDcaV0Daughters     = 0;
        Double_t lV0cosPointAngle    = 0;Double_t lV0DecayLength      = 0;Double_t lV0Radius           = 0;
        Double_t lcTauLambda         = 0;Double_t lcTauAntiLambda     = 0;   
-       Double_t lcTauK0s            = 0;
-       Double_t lDCAV0toPVz         = 0;
+       Double_t lcTauK0s            = 0; 
+       Double_t lDCAV0PVz           = 0; 
        
        Double_t lInvMassK0   = 0, lInvMassLambda    = 0, lInvMassAntiLambda = 0;
        Double_t lPtV0s       = 0; Double_t lPhiV0s  = 0; Double_t lEtaV0s   = 0;
-       Double_t lRapK0s      = 0, lRapLambda        = 0, lRapAntiLambda     = 0;
        Double_t lPzV0s       = 0; Double_t lAlphaV0 = 0, lPtArmV0           = 0;
        Double_t lPV0s        = 0;
        
@@ -651,7 +674,7 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                AliAODv0* aodV0 = dynamic_cast<AliAODv0 *>(fAODEvent->GetV0(i));
                if (!aodV0) continue;
                
-               if (((aodV0->Pt())<fPtMin)||((aodV0->Pt())>6.0)) continue;
+               if (((aodV0->Pt())<fPtMin)||((aodV0->Pt())>fTriglow)) continue;
                
                // get daughters
            AliAODTrack *myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
@@ -674,8 +697,8 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                
                // DCA between daughter and Primary Vertex:
                if (myTrackPos) lDcaPosToPrimVertex = aodV0->DcaPosToPrimVertex();
-               if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex(); 
-               lDCAV0toPVz = aodV0->DcaV0ToPrimVertex(); 
+               if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex();   
+               lDCAV0PVz   = aodV0->DcaV0ToPrimVertex(); 
                
                // Quality tracks cuts:
                if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) { continue;}
@@ -694,11 +717,6 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                lEtaV0s= aodV0->Eta();
                lPzV0s = aodV0->Pz();
                
-               // Rapidity:
-               lRapK0s    = aodV0->RapK0Short();
-               lRapLambda = aodV0->RapLambda();
-               lRapAntiLambda = aodV0->Y(-3122);               
-               
                if (lPtV0s==0) {continue;}
                
         Float_t nSigmaPosPion   = 0.;
@@ -762,69 +780,67 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
 
                Bool_t k0APcut = (lPtArmV0>(TMath::Abs(0.2*lAlphaV0)));
                
-               Bool_t k0Rapcut = (TMath::Abs(lRapK0s)        < fRapidityCut);
-               Bool_t laRapcut = (TMath::Abs(lRapLambda)     < fRapidityCut);
-               Bool_t alaRapcut= (TMath::Abs(lRapAntiLambda) < fRapidityCut);
+               Bool_t V0Etacut = (TMath::Abs(lEtaV0s)        < fTrackEtaCut);
                
                Bool_t k0cutset = IsAcseptedK0(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassLambda,lInvMassAntiLambda);
                Bool_t lacutset = IsAcseptedLA(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
                Bool_t alacutset= IsAcseptedLA(lV0Radius,lDcaNegToPrimVertex,lDcaPosToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0);
                
-               Double_t spK0[4] = {lInvMassK0,lPtV0s,lDCAV0toPVz,lV0cosPointAngle};
-               Double_t spLa[4] = {lInvMassLambda,lPtV0s,lDCAV0toPVz,lV0cosPointAngle};
-               Double_t spAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0toPVz,lV0cosPointAngle};
+               Double_t spK0[4] = {lInvMassK0,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
+               Double_t spLa[4] = {lInvMassLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
+               Double_t spAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
        
                switch (fCase) {
                        case 1:
                                fHistReconstK0->Fill(spK0); 
-                               if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0toPVz,lV0cosPointAngle));
+                               if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
                                
                                fHistReconstLA->Fill(spLa); 
-                               if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0toPVz,lV0cosPointAngle));
+                               if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
                                
                                fHistReconstALA->Fill(spAl);
-                               if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0toPVz,lV0cosPointAngle));
+                               if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
                                
                                break;
                                
                        case 2:
-                               if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid)
+                               if(k0ctcut && V0Etacut && k0cutset && cutK0Pid)
                                {
                                        fHistReconstK0->Fill(spK0); 
-                                       if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0toPVz,lV0cosPointAngle));
+                                       if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
                                }
                                
-                               if (lactcut && laRapcut && lacutset && cutLambdaPid)
+                               if (lactcut && V0Etacut && lacutset && cutLambdaPid)
                                {
                                        fHistReconstLA->Fill(spLa); 
-                                       if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0toPVz,lV0cosPointAngle));
+                                       if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
                                }
                                
-                               if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid)
+                               if (alactcut && V0Etacut && alacutset && cutAntiLambdaPid)
                                {
                                        fHistReconstALA->Fill(spAl);
-                                       if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0toPVz,lV0cosPointAngle));
+                                       if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
                                }
 
                                break;
                                
                        case 3:
-                               if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid && k0APcut)
+                               if(k0ctcut && V0Etacut && k0cutset && cutK0Pid && k0APcut)
                                {
                                        fHistReconstK0->Fill(spK0); 
-                                       if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0toPVz,lV0cosPointAngle));
+                                       if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
                                }
                                
-                               if (lactcut && laRapcut && lacutset && cutLambdaPid)
+                               if (lactcut && V0Etacut && lacutset && cutLambdaPid)
                                {
                                        fHistReconstLA->Fill(spLa); 
-                                       if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0toPVz,lV0cosPointAngle));
+                                       if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
                                }
                                
-                               if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid)
+                               if (alactcut && V0Etacut && alacutset && cutAntiLambdaPid)
                                {
                                        fHistReconstALA->Fill(spAl);
-                                       if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0toPVz,lV0cosPointAngle));
+                                       if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
                                }
                                break;
                                
@@ -860,79 +876,99 @@ void AliLeadingV0Correlation::UserExec(Option_t *)
                        Int_t MotherPdg  = mcPosMother->GetPdgCode();
                        Bool_t IsPrime   = mcPosMother->IsPhysicalPrimary();
                        
-                       Double_t rcK0[4] = {lInvMassK0,lPtV0s,lDCAV0toPVz,lDcaNegToPrimVertex};
-                       Double_t rcLa[4] = {lInvMassLambda,lPtV0s,lDCAV0toPVz,lDcaNegToPrimVertex};
-                       Double_t rcAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0toPVz,lDcaNegToPrimVertex};
+                       Int_t myGrandMotherLabel = mcPosMother->GetMother();
+                       AliAODMCParticle *mcGrandMother = (AliAODMCParticle*)mcArray->At(myGrandMotherLabel);
+                       Int_t GrandMotherPdg     = mcGrandMother->GetPdgCode();
+                       
+                       Double_t rcK0[4] = {lInvMassK0,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
+                       Double_t rcLa[4] = {lInvMassLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
+                       Double_t rcAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle};
                        
                        switch (fCase) {
                                case 1:
                                        fHistMCAssoK0->Fill(rcK0);
-                                       if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0toPVz,lV0cosPointAngle));
+                                       if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
                                        
                                        fHistMCAssoLA->Fill(rcLa);
-                                       if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0toPVz,lV0cosPointAngle));
+                                       if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
                                        
                                        fHistMCAssoALA->Fill(rcAl);
-                                       if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0toPVz,lV0cosPointAngle));
+                                       if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
                                        
                                        break;
                                        
                                case 2:
-                                       if ((k0ctcut && k0Rapcut && k0cutset)&&(MotherPdg     ==  310 && 
+                                       if ((k0ctcut && V0Etacut && k0cutset)&&(MotherPdg     ==  310 && 
                                                                                                                        PosDaughterPdg==  211 && 
                                                                                                                        NegDaughterPdg== -211 &&
                                                                                                                        IsPrime))
                                        {
                                                fHistMCAssoK0->Fill(rcK0);
-                                               if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0toPVz,lV0cosPointAngle));
+                                               if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
                                        }
                                        
-                                       if ((lactcut && laRapcut && lacutset)&&(MotherPdg     == 3122 && 
+                                       if ((lactcut && V0Etacut && lacutset)&&(MotherPdg     == 3122 && 
                                                                                                                        PosDaughterPdg== 2212 && 
                                                                                                                        NegDaughterPdg== -211 &&
                                                                                                                        IsPrime)) 
                                        {
                                                fHistMCAssoLA->Fill(rcLa);
-                                               if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0toPVz,lV0cosPointAngle));
+                                               if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
                                        }
                                        
-                                       if ((alactcut && alaRapcut && alacutset)&&(MotherPdg     == -3122 && 
+                                       if ((alactcut && V0Etacut && alacutset)&&(MotherPdg     == -3122 && 
                                                                                                                           PosDaughterPdg==   211 && 
                                                                                                                           NegDaughterPdg== -2212 &&
                                                                                                                           IsPrime))
                                        {
                                                fHistMCAssoALA->Fill(rcAl);
-                                               if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0toPVz,lV0cosPointAngle));
+                                               if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
+                                       }
+                                       
+                                       if ((lactcut && V0Etacut && lacutset)&&(MotherPdg     == 3122 && 
+                                                                                                                       PosDaughterPdg== 2212 && 
+                                                                                                                       NegDaughterPdg== -211 &&
+                                                                                                                       (GrandMotherPdg==3322 ||GrandMotherPdg==3312))) 
+                                       {
+                                               fHistMCAssoLAXI->Fill(rcLa);
+                                       }
+                                       
+                                       if ((alactcut && V0Etacut && alacutset)&&(MotherPdg      == -3122 && 
+                                                                                                                          PosDaughterPdg==   211 && 
+                                                                                                                          NegDaughterPdg== -2212 &&
+                                                                                                                          GrandMotherPdg== -3312))
+                                       {
+                                               fHistMCAssoALAXiPlus->Fill(rcAl);
                                        }
                                        
                                        break;
                                        
                                case 3:
-                                       if ((k0ctcut && k0Rapcut && k0cutset && k0APcut)&&(MotherPdg     ==  310 && 
+                                       if ((k0ctcut && V0Etacut && k0cutset && k0APcut)&&(MotherPdg     ==  310 && 
                                                                                                                                           PosDaughterPdg==  211 && 
                                                                                                                                           NegDaughterPdg== -211 &&
                                                                                                                                           IsPrime))
                                        {
                                                fHistMCAssoK0->Fill(rcK0); 
-                                               if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0toPVz,lV0cosPointAngle));
+                                               if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle));
                                        }
                                        
-                                       if ((lactcut && laRapcut && lacutset)&&(MotherPdg     == 3122 && 
+                                       if ((lactcut && V0Etacut && lacutset)&&(MotherPdg     == 3122 && 
                                                                                                                        PosDaughterPdg== 2212 && 
                                                                                                                        NegDaughterPdg== -211 &&
                                                                                                                        IsPrime)) 
                                        {
                                                fHistMCAssoLA->Fill(rcLa);
-                                               if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0toPVz,lV0cosPointAngle));
+                                               if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle));
                                        }
                                        
-                                       if ((alactcut && alaRapcut && alacutset)&&(MotherPdg     == -3122 && 
+                                       if ((alactcut && V0Etacut && alacutset)&&(MotherPdg     == -3122 && 
                                                                                                                           PosDaughterPdg==   211 && 
                                                                                                                           NegDaughterPdg== -2212 &&
                                                                                                                           IsPrime))
                                        {
                                                fHistMCAssoALA->Fill(rcAl);
-                                               if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0toPVz,lV0cosPointAngle));
+                                               if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle));
                                        }
                                        break;
                                        
@@ -958,9 +994,7 @@ void AliLeadingV0Correlation::Terminate(Option_t *)
 }
 //---------------------------------------------------------------------------------------
 Bool_t AliLeadingV0Correlation::IsAcseptedDaughterTrack(const AliAODTrack *itrack)
-{
-       if(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE;
-       
+{      
        if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE;
        
        Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1);
@@ -1081,11 +1115,11 @@ Bool_t AliLeadingV0Correlation::IsTrackFromV0(AliAODTrack* track)
 void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent,
                                                                          TObjArray*triggerArray,
                                                                          TObjArray*selectedV0Array,
-                                                                         TH2F*triggerHist,
+                                                                         TH1F*triggerHist,
                                                                          THnSparse*associateHist)
 {
        Double_t  binsv0CORR[8];
-       Double_t  binsTrigSib[3];
+       Double_t  binsTrigSib[2];
        Int_t counterSibMCA=0;
        
     for(Int_t i=0;i<triggerArray->GetEntriesFast();i++)
@@ -1106,10 +1140,9 @@ void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent,
                if(counterSibMCA==triggerArray->GetEntriesFast()){
                        
                        binsTrigSib[0]=triggerPt;
-                       binsTrigSib[1]=triggerPhi;
-                       binsTrigSib[2]=MultipOrCent;
+                       binsTrigSib[1]=MultipOrCent;
                        
-                       if(triggerHist)triggerHist->Fill(binsTrigSib[0],binsTrigSib[1]);
+                       if(triggerHist)triggerHist->Fill(binsTrigSib[0]);
                        
                        for (Int_t j=0; j<selectedV0Array->GetEntriesFast(); j++){
                                
@@ -1140,7 +1173,7 @@ void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
                                                                   Double_t poolmin,
                                                                   TObjArray*triggerArray,
                                                                   TObjArray*selectedV0Array,
-                                                                  TH2F*triggerHist,
+                                                                  TH1F*triggerHist,
                                                                   THnSparse*associateHist)
 {
        if(TMath::Abs(pvxMix)>=fpvzcut || MultipOrCentMix>poolmax || MultipOrCentMix < poolmin)
@@ -1180,10 +1213,9 @@ void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix,
                                if(counterMix==triggerArray->GetEntriesFast()){
                                        
                                        binsTrigMix[0]=trigPt;
-                                       binsTrigMix[1]=trigPhi;
-                                       binsTrigMix[2]=MultipOrCentMix;
+                                       binsTrigMix[1]=MultipOrCentMix;
                                        
-                                       if(triggerHist)triggerHist->Fill(binsTrigMix[0],binsTrigMix[1]);
+                                       if(triggerHist)triggerHist->Fill(binsTrigMix[0]);
                                        
                                        for (Int_t j=0; j<mixEvents->GetEntriesFast(); j++){
                                                
index 130e771a9b60c76c36fa3069ce90fecab2785f68..820081b78a6ac655bdd45522eb2e63a12b3d1e30 100644 (file)
@@ -105,11 +105,11 @@ private:
        Bool_t IsTrackFromV0(AliAODTrack* track);
        void FillCorrelationSibling(Double_t MultipOrCent,
                                                                TObjArray*triggerArray,TObjArray*selectedV0Array,
-                                                               TH2F*triggerHist,THnSparse*associateHist);
+                                                               TH1F*triggerHist,THnSparse*associateHist);
        void FillCorrelationMixing(Double_t MultipOrCentMix,Double_t pvxMix,
                                                           Double_t poolmax,Double_t poolmin,
                                                           TObjArray*triggerArray,TObjArray*selectedV0Array,
-                                                          TH2F*triggerHist,THnSparse*associateHist);
+                                                          TH1F*triggerHist,THnSparse*associateHist);
        
        AliAODEvent              * fAODEvent;                   //  AOD Event
        AliEventPoolManager      * fPoolMgr;                    //  event pool manager for Event Mixing
@@ -176,12 +176,16 @@ private:
        TH2F            *fHistMCGenK0;
        TH2F            *fHistMCGenLAM;
        TH2F            *fHistMCGenALAM;
+       TH2F            *fHistMCGenLAMXIPLS;
+       TH2F            *fHistMCGenLAMXI;
        THnSparse   *fHistReconstK0;
        THnSparse   *fHistReconstLA;
        THnSparse   *fHistReconstALA;
        THnSparse   *fHistMCAssoK0;
        THnSparse   *fHistMCAssoLA;
        THnSparse   *fHistMCAssoALA;
+       THnSparse   *fHistMCAssoLAXI;
+       THnSparse   *fHistMCAssoALAXiPlus;
        
        THnSparse   *fHistReconstSib;
        THnSparse   *fHistReconstMix;
@@ -192,12 +196,12 @@ private:
        THnSparse   *fHistReconstSibFEED;
        THnSparse   *fHistReconstMixFEED;
        
-       TH2F        *fHistTriggerSib;
-       TH2F            *fHistTriggerMix;
-       TH2F            *fHistTriggerSibGEN;
-       TH2F            *fHistTriggerMixGEN;
-       TH2F            *fHistTriggerSibASO;
-       TH2F            *fHistTriggerMixASO;
+       TH1F        *fHistTriggerSib;
+       TH1F            *fHistTriggerMix;
+       TH1F            *fHistTriggerSibGEN;
+       TH1F            *fHistTriggerMixGEN;
+       TH1F            *fHistTriggerSibASO;
+       TH1F            *fHistTriggerMixASO;
 
        ClassDef(AliLeadingV0Correlation, 1); 
 };
@@ -209,14 +213,14 @@ public:
                                                        Float_t phi, 
                                                        Float_t pt, 
                                                        Short_t candidate,
-                                                   Double_t dcaV0toP,
-                                                   Double_t cosp):
+                                                   Double_t dcapostoP,
+                                                   Double_t dcanegtoP):
          fEta(eta), 
          fPhi(phi), 
          fpT(pt), 
          fCandidate(candidate),
-         fdcaV0toP(dcaV0toP),
-         fcosp(cosp)
+         fdcapostoP(dcapostoP),
+         fdcanegtoP(dcanegtoP)
     {
     }
     virtual ~V0Correlationparticle(){}
@@ -243,8 +247,8 @@ public:
     virtual Int_t    PdgCode()            const { AliFatal("Not implemented"); return 0;}
     virtual const    Double_t *PID()      const { AliFatal("Not implemented"); return 0;}
     virtual Short_t  WhichCandidate()     const { return fCandidate;}
-       virtual Double_t DCAPostoP()     const { return fdcaV0toP;}
-       virtual Double_t DCANegtoP()     const { return fcosp;}
+       virtual Double_t DCAPostoP()     const { return fdcapostoP;}
+       virtual Double_t DCANegtoP()     const { return fdcanegtoP;}
 
        
 private:
@@ -252,8 +256,8 @@ private:
     Float_t  fPhi;            // Phi
     Float_t  fpT;             // pT
     Short_t  fCandidate;      // 1-K0,2-Lam,3-Alam
-       Double_t fdcaV0toP;
-       Double_t fcosp;
+       Double_t fdcapostoP;
+       Double_t fdcanegtoP;
        
        
     ClassDef( V0Correlationparticle, 1);
index ce82ab07df671552ded1f4060a8c8752f4905b2d..9b150fae0dea1f383b1c24e6d41305e5bb7c9ca9 100644 (file)
@@ -27,7 +27,6 @@ AliLeadingV0Correlation* AddTaskLV0Correlation(TString  fListName
                                                                                           Double_t fTPCClusters                         = 70,
                                                                                           Double_t fTPCfindratio            = 0.8) 
 {
-
        // Get the current analysis manager.
     AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
     if (!mgr) {Error("AddTaskLV0Correlation.C", "No Analysis Manager ");return 0;}
index a8cc519d5eda93ef4850493eddf2a3b9c8761dbe..72d367de3c07e5a95b509e61e5d727ee65736b95 100644 (file)
@@ -67,7 +67,10 @@ AddTaskLongRangeCorrelations(Int_t    trackFilter  = 128, // TPC only
   for (Int_t i=0; i<sizeof(centMin)/sizeof(Double_t); ++i) {
     size_t jMin = (nMin[i] < 0) ? 0 : size_t(cutDeltaEta != 0);
     size_t jMax = (nMin[i] < 0) ? 1 : nDeltaEta[cutDeltaEta];
+    if (cutDeltaEta==1 && nMin[i] < 0) continue;
+    if (cutDeltaEta==1 && nMax[i] < 0) continue;
     for (Int_t j=jMin; j<jMax; ++j) {      
+      if (cutDeltaEta==1 && deltaEta1[j] < 0) continue;
       taskLRC = new AliAnalysisTaskLongRangeCorrelations("TaskLongRangeCorrelations");
       taskLRC->SetRunMixing(runMixing);
       taskLRC->SetMixingTracks(mixingTracks);
index f4e7ed0604940ddd45d98af6c00d03011891e682..c5b2a0b67d5f650f2c1bb0d5d6f17101020f5982 100644 (file)
@@ -1335,6 +1335,7 @@ void AliFemtoEventReaderAOD::CopyPIDtoFemtoTrack(AliAODTrack *tAodTrack,
   float nsigmaTPCK=-1000.;
   float nsigmaTPCPi=-1000.;
   float nsigmaTPCP=-1000.;
+  float nsigmaTPCE=-1000.;
 
   //   cout<<"in reader fESDpid"<<fESDpid<<endl;
 
@@ -1342,11 +1343,13 @@ void AliFemtoEventReaderAOD::CopyPIDtoFemtoTrack(AliAODTrack *tAodTrack,
     nsigmaTPCK = fAODpidUtil->NumberOfSigmasTPC(tAodTrack,AliPID::kKaon);
     nsigmaTPCPi = fAODpidUtil->NumberOfSigmasTPC(tAodTrack,AliPID::kPion);
     nsigmaTPCP = fAODpidUtil->NumberOfSigmasTPC(tAodTrack,AliPID::kProton);
+    nsigmaTPCE = fAODpidUtil->NumberOfSigmasTPC(tAodTrack,AliPID::kElectron);
   }
 
   tFemtoTrack->SetNSigmaTPCPi(nsigmaTPCPi);
   tFemtoTrack->SetNSigmaTPCK(nsigmaTPCK);
   tFemtoTrack->SetNSigmaTPCP(nsigmaTPCP);
+  tFemtoTrack->SetNSigmaTPCE(nsigmaTPCE);
 
   tFemtoTrack->SetTPCchi2(tAodTrack->Chi2perNDF());
   tFemtoTrack->SetTPCncls(tAodTrack->GetTPCNcls());
@@ -1362,6 +1365,7 @@ void AliFemtoEventReaderAOD::CopyPIDtoFemtoTrack(AliAODTrack *tAodTrack,
   float nsigmaTOFPi=-1000.;
   float nsigmaTOFK=-1000.;
   float nsigmaTOFP=-1000.;
+  float nsigmaTOFE=-1000.;
 
   if ((tAodTrack->GetStatus() & AliESDtrack::kTOFpid) && //AliESDtrack::kTOFpid=0x8000
       (tAodTrack->GetStatus() & AliESDtrack::kTOFout) && //AliESDtrack::kTOFout=0x2000
@@ -1374,6 +1378,7 @@ void AliFemtoEventReaderAOD::CopyPIDtoFemtoTrack(AliAODTrack *tAodTrack,
            nsigmaTOFPi = fAODpidUtil->NumberOfSigmasTOF(tAodTrack,AliPID::kPion);
            nsigmaTOFK = fAODpidUtil->NumberOfSigmasTOF(tAodTrack,AliPID::kKaon);
            nsigmaTOFP = fAODpidUtil->NumberOfSigmasTOF(tAodTrack,AliPID::kProton);
+           nsigmaTOFE = fAODpidUtil->NumberOfSigmasTOF(tAodTrack,AliPID::kElectron);
 
            Double_t len=200;// esdtrack->GetIntegratedLength(); !!!!!
            Double_t tof=tAodTrack->GetTOFsignal();
@@ -1384,6 +1389,7 @@ void AliFemtoEventReaderAOD::CopyPIDtoFemtoTrack(AliAODTrack *tAodTrack,
   tFemtoTrack->SetNSigmaTOFPi(nsigmaTOFPi);
   tFemtoTrack->SetNSigmaTOFK(nsigmaTOFK);
   tFemtoTrack->SetNSigmaTOFP(nsigmaTOFP);
+  tFemtoTrack->SetNSigmaTOFE(nsigmaTOFE);
 
 
   //////////////////////////////////////
index 31f68b136b9b4a128db28cd360f1d4fe6972cd98..808a3f00d58e425ec83fe6b5d70b5dfd4f35c77a 100644 (file)
@@ -59,9 +59,11 @@ AliFemtoTrack::AliFemtoTrack():
   fNSigmaTPCPi(0),
   fNSigmaTPCK(0),
   fNSigmaTPCP(0),
+  fNSigmaTPCE(0),
   fNSigmaTOFPi(0),
   fNSigmaTOFK(0),
   fNSigmaTOFP(0),
+  fNSigmaTOFE(0),
   fSigmaToVertex(0),
   fClusters(159),
   fShared(159),
@@ -134,9 +136,11 @@ AliFemtoTrack::AliFemtoTrack(const AliFemtoTrack& t) :
   fNSigmaTPCPi(0),
   fNSigmaTPCK(0),
   fNSigmaTPCP(0),
+  fNSigmaTPCE(0),
   fNSigmaTOFPi(0),
   fNSigmaTOFK(0),
   fNSigmaTOFP(0),
+  fNSigmaTOFE(0),
   fSigmaToVertex(0),
   fClusters(159),
   fShared(159),
@@ -189,9 +193,11 @@ AliFemtoTrack::AliFemtoTrack(const AliFemtoTrack& t) :
   fNSigmaTPCPi=t.fNSigmaTPCPi;
   fNSigmaTPCK=t.fNSigmaTPCK;
   fNSigmaTPCP=t.fNSigmaTPCP;
+  fNSigmaTPCE=t.fNSigmaTPCE;
   fNSigmaTOFPi=t.fNSigmaTOFPi;
   fNSigmaTOFK=t.fNSigmaTOFK;
   fNSigmaTOFP=t.fNSigmaTOFP;
+  fNSigmaTOFE=t.fNSigmaTOFE;
   fSigmaToVertex=t.fSigmaToVertex;
   fClusters=t.fClusters;
   fShared=t.fShared;
@@ -281,9 +287,11 @@ AliFemtoTrack& AliFemtoTrack::operator=(const AliFemtoTrack& aTrack)
   fNSigmaTPCPi=aTrack.fNSigmaTPCPi;    
   fNSigmaTPCK=aTrack.fNSigmaTPCK;    
   fNSigmaTPCP=aTrack.fNSigmaTPCP;    
+  fNSigmaTPCE=aTrack.fNSigmaTPCE;    
   fNSigmaTOFPi=aTrack.fNSigmaTOFPi;    
   fNSigmaTOFK=aTrack.fNSigmaTOFK;    
   fNSigmaTOFP=aTrack.fNSigmaTOFP;    
+  fNSigmaTOFE=aTrack.fNSigmaTOFE;    
   fClusters=aTrack.fClusters;
   fShared=aTrack.fShared;
   fNominalTpcEntrancePoint=aTrack.fNominalTpcEntrancePoint;
@@ -384,9 +392,11 @@ void AliFemtoTrack::SetVTOF(const float& aVTOF){fVTOF=aVTOF;}
 void AliFemtoTrack::SetNSigmaTPCPi(const float& aNSigmaTPCPi){fNSigmaTPCPi=aNSigmaTPCPi;}
 void AliFemtoTrack::SetNSigmaTPCK(const float& aNSigmaTPCK){fNSigmaTPCK=aNSigmaTPCK;}
 void AliFemtoTrack::SetNSigmaTPCP(const float& aNSigmaTPCP){fNSigmaTPCP=aNSigmaTPCP;}
+void AliFemtoTrack::SetNSigmaTPCE(const float& aNSigmaTPCE){fNSigmaTPCE=aNSigmaTPCE;}
 void AliFemtoTrack::SetNSigmaTOFPi(const float& aNSigmaTOFPi){fNSigmaTOFPi=aNSigmaTOFPi;}
 void AliFemtoTrack::SetNSigmaTOFK(const float& aNSigmaTOFK){fNSigmaTOFK=aNSigmaTOFK;}
 void AliFemtoTrack::SetNSigmaTOFP(const float& aNSigmaTOFP){fNSigmaTOFP=aNSigmaTOFP;}
+void AliFemtoTrack::SetNSigmaTOFE(const float& aNSigmaTOFE){fNSigmaTOFE=aNSigmaTOFE;}
 void AliFemtoTrack::SetSigmaToVertex(const float& aSigma){fSigmaToVertex=aSigma;} 
 
 void AliFemtoTrack::SetXatDCA(const double& x) {fXatDCA=x;}
@@ -424,9 +434,11 @@ float AliFemtoTrack::VTOF() const{return fVTOF;}
 float AliFemtoTrack::NSigmaTPCPi() const{return fNSigmaTPCPi;}
 float AliFemtoTrack::NSigmaTPCK() const{return fNSigmaTPCK;}
 float AliFemtoTrack::NSigmaTPCP() const{return fNSigmaTPCP;}
+float AliFemtoTrack::NSigmaTPCE() const{return fNSigmaTPCE;}
 float AliFemtoTrack::NSigmaTOFPi() const{return fNSigmaTOFPi;}
 float AliFemtoTrack::NSigmaTOFK() const{return fNSigmaTOFK;}
 float AliFemtoTrack::NSigmaTOFP() const{return fNSigmaTOFP;}
+float AliFemtoTrack::NSigmaTOFE() const{return fNSigmaTOFE;}
 float AliFemtoTrack::SigmaToVertex() const{return fSigmaToVertex;} 
 float AliFemtoTrack::TOFpionTime() const{return fTofPionTime;}
 float AliFemtoTrack::TOFkaonTime() const{return fTofKaonTime;}
index b3b491a3bd0db0694849845e9c64022898eefab3..69f38958c47ec247fad84510c4e030029eb99cd0 100644 (file)
@@ -80,10 +80,12 @@ public:
   float NSigmaTPCPi() const;   
   float NSigmaTPCK() const;   
   float NSigmaTPCP() const;   
+  float NSigmaTPCE() const;   
   float VTOF() const;   
   float NSigmaTOFPi() const;   
   float NSigmaTOFK() const;   
   float NSigmaTOFP() const;   
+  float NSigmaTOFE() const;   
 
 
   float TOFpionTime() const;
@@ -136,10 +138,12 @@ public:
   void SetNSigmaTPCPi(const float& x);   
   void SetNSigmaTPCK(const float& x);   
   void SetNSigmaTPCP(const float& x);   
+  void SetNSigmaTPCE(const float& x);   
   void SetVTOF(const float& x);   
   void SetNSigmaTOFPi(const float& x);   
   void SetNSigmaTOFK(const float& x);   
-  void SetNSigmaTOFP(const float& x);  
+  void SetNSigmaTOFP(const float& x);   
+  void SetNSigmaTOFE(const float& x);  
 
   void SetTPCcluster(const short& aNBit, const Bool_t& aValue);
   void SetTPCshared(const short& aNBit, const Bool_t& aValue);
@@ -252,9 +256,11 @@ public:
   float fNSigmaTPCPi;     // nsigma TPC for pion
   float fNSigmaTPCK;     // nsigma TPC for K
   float fNSigmaTPCP;     // nsigma TPC for P
+  float fNSigmaTPCE;     // nsigma TPC for electron
   float fNSigmaTOFPi;     // nsigma TPC for pion
   float fNSigmaTOFK;     // nsigma TPC for K
   float fNSigmaTOFP;     // nsigma TPC for P
+  float fNSigmaTOFE;     // nsigma TPC for electron
 
   float fSigmaToVertex;  // Distance from track to vertex in sigmas
   TBits fClusters;       // Cluster per padrow map
diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx
new file mode 100644 (file)
index 0000000..5238637
--- /dev/null
@@ -0,0 +1,208 @@
+////////////////////////////////////////////////////////////////////////////////
+//                                                                            //
+// AliFemtoCorrFctnGammaMonitor - A correlation function that analyzes            //
+// two particle mass minvariant with various mass assumptions                     //
+//                                                                            //
+// Authors: MaÅ‚gorzata Janik majanik@cern.ch
+//          Anna Zaborowska azaborow@cern.ch                                   //
+//                                                                            //
+////////////////////////////////////////////////////////////////////////////////
+
+#include "AliFemtoCorrFctnMinvMonitor.h"
+#include <cstdio>
+#include <TMath.h>
+
+#ifdef __ROOT__
+ClassImp(AliFemtoCorrFctnMinvMonitor)
+#endif
+
+//____________________________
+AliFemtoCorrFctnMinvMonitor::AliFemtoCorrFctnMinvMonitor(char* title):
+   AliFemtoCorrFctn(),
+   fMinveeFail(0),
+   fMinvee(0),
+   fMinv2piFail(0),
+   fMinv2pi(0),
+   fMinvppiFail(0),
+   fMinvppi(0)
+{
+  fMinveeFail = new TH1D(Form("MinveeGamma%s",title), "ee mass assumption GAMMA, minv",1000, 0.0, 10.0);
+   fMinvee = new TH1D(Form("Minvee%s",title), "ee mass assumption, minv",1000, 0.0, 10.0);
+   fMinv2piFail = new TH1D(Form("Minv2piResonances%s",title), "pipi mass assumption RESONANCES, minv",1000, 0.0, 10.0);
+   fMinv2pi = new TH1D(Form("Minv2pi%s",title), "pipi mass assumption, minv",1000, 0.0, 10.0);
+   fMinvppiFail = new TH1D(Form("MinvppiResonances%s",title), "ppi mass assumption RESONANCES, minv",1000, 0.0, 10.0);
+   fMinvppi = new TH1D(Form("Minvppi%s",title), "ppi mass assumption, minv",1000, 0.0, 10.0);
+}
+
+//____________________________
+AliFemtoCorrFctnMinvMonitor::AliFemtoCorrFctnMinvMonitor(const AliFemtoCorrFctnMinvMonitor& aCorrFctn) :
+  AliFemtoCorrFctn(),
+   fMinveeFail(0),
+   fMinvee(0),
+   fMinv2piFail(0),
+   fMinv2pi(0),
+   fMinvppiFail(0),
+   fMinvppi(0)
+{
+  // copy constructor
+  if (fMinveeFail) delete fMinveeFail;
+  fMinveeFail = new TH1D(*aCorrFctn.fMinveeFail);
+  if (fMinvee) delete fMinvee;
+  fMinvee = new TH1D(*aCorrFctn.fMinvee);
+  if (fMinv2piFail) delete fMinv2piFail;
+  fMinv2piFail = new TH1D(*aCorrFctn.fMinv2piFail);
+  if (fMinv2pi) delete fMinv2pi;
+  fMinv2pi = new TH1D(*aCorrFctn.fMinv2pi);
+  if (fMinvppiFail) delete fMinvppiFail;
+  fMinvppiFail = new TH1D(*aCorrFctn.fMinvppiFail);
+  if (fMinvppi) delete fMinvppi;
+  fMinvppi = new TH1D(*aCorrFctn.fMinvppi);
+}
+//____________________________
+AliFemtoCorrFctnMinvMonitor::~AliFemtoCorrFctnMinvMonitor(){
+  // destructor
+    delete fMinveeFail;
+  delete fMinvee;
+  delete fMinv2piFail;
+  delete fMinv2pi;
+  delete fMinvppiFail;
+  delete fMinvppi;
+}
+//_________________________
+AliFemtoCorrFctnMinvMonitor& AliFemtoCorrFctnMinvMonitor::operator=(const AliFemtoCorrFctnMinvMonitor& aCorrFctn)
+{
+  // assignment operator
+  if (this == &aCorrFctn)
+    return *this;
+
+  if (fMinveeFail) delete fMinveeFail;
+  fMinveeFail = new TH1D(*aCorrFctn.fMinveeFail);
+  if (fMinvee) delete fMinvee;
+  fMinvee = new TH1D(*aCorrFctn.fMinvee);
+  if (fMinv2piFail) delete fMinv2piFail;
+  fMinv2piFail = new TH1D(*aCorrFctn.fMinv2piFail);
+  if (fMinv2pi) delete fMinv2pi;
+  fMinv2pi = new TH1D(*aCorrFctn.fMinv2pi);
+  if (fMinvppiFail) delete fMinvppiFail;
+  fMinvppiFail = new TH1D(*aCorrFctn.fMinvppiFail);
+  if (fMinvppi) delete fMinvppi;
+  fMinvppi = new TH1D(*aCorrFctn.fMinvppi);
+
+  return *this;
+}
+//_________________________
+void AliFemtoCorrFctnMinvMonitor::Finish(){
+  // here is where we should normalize, fit, etc...
+  // we should NOT Draw() the histos (as I had done it below),
+  // since we want to insulate ourselves from root at this level
+  // of the code.  Do it instead at root command line with browser.
+  //  mShareNumerator->Draw();
+  //mShareDenominator->Draw();
+  //mRatio->Draw();
+
+}
+
+//____________________________
+AliFemtoString AliFemtoCorrFctnMinvMonitor::Report(){
+  // create report
+  string stemp = "Mass invariant Monitor Function Report\n";
+  AliFemtoString returnThis = stemp;
+  return returnThis;
+}
+//____________________________
+void AliFemtoCorrFctnMinvMonitor::AddRealPair( AliFemtoPair* pair){
+   double me = 0.000511;
+  double mPi = 0.13957018;
+  double mp = 0.938272046;
+
+  double mgammamax = 0.04;
+  double mK0min = 0.00049;
+  double mK0max = 0.00051;
+  double mK0 = 0.000497614;
+  double mRhomin = 0.000765;
+  double mRhomax = 0.000785;
+  double mRho = 0.00077526;
+  double mLmin = 1.095;
+  double mLmax = 1.135;
+  double mL = 1.115683;
+
+  if ((pair->Track1()->Track()->Charge() * pair->Track2()->Track()->Charge()) < 0.0) {
+
+    // check on ee pairs (gamma)
+    double e1 = TMath::Sqrt(me*me + pair->Track1()->Track()->P().Mag2());
+    double e2 = TMath::Sqrt(me*me + pair->Track2()->Track()->P().Mag2());
+    double minvGamma = 2*me*me + 2*(e1*e2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if ( minvGamma < mgammamax )
+    {
+       fMinveeFail->Fill(minvGamma);
+    }
+    else fMinvee->Fill(minvGamma);
+    //check on resonances
+    double pi1 =  TMath::Sqrt(mPi*mPi + pair->Track1()->Track()->P().Mag2());
+    double pi2 =  TMath::Sqrt(mPi*mPi + pair->Track2()->Track()->P().Mag2());
+    double p1 =  TMath::Sqrt(mp*mp + pair->Track1()->Track()->P().Mag2());
+    double p2 =  TMath::Sqrt(mp*mp + pair->Track2()->Track()->P().Mag2());
+    //check on K0 and Rho
+    double minv2pi = 2*mPi*mPi + 2*(pi1*pi2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if ( ((minv2pi>mK0min && minv2pi<mK0max) || (minv2pi>mRhomin && minv2pi<mRhomax)) )
+    {
+       fMinv2piFail->Fill(minv2pi);
+    }
+    else fMinv2pi->Fill(minv2pi);
+    //check on L0
+    double minvpPi = 2*mp*mPi + 2*(p1*pi2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    double minvPip = 2*mPi*mp + 2*(pi1*p2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if( (minvpPi>mLmin) && (minvpPi<mLmax) )
+    {
+       fMinvppiFail->Fill(minvpPi);
+    }
+    else fMinvppi->Fill(minvpPi);
+    if( (minvPip>mLmin) && (minvPip<mLmax) )
+    {
+       fMinvppiFail->Fill(minvPip);
+    }
+    else fMinvppi->Fill(minvPip);
+  }
+}
+//____________________________
+void AliFemtoCorrFctnMinvMonitor::AddMixedPair( AliFemtoPair* pair){
+  }
+
+
+void AliFemtoCorrFctnMinvMonitor::WriteHistos()
+{
+  // Write out result histograms
+  fMinveeFail->Write();
+  fMinvee->Write();
+  fMinv2piFail->Write();
+  fMinv2pi->Write();
+  fMinvppiFail->Write();
+  fMinvppi->Write();
+}
+
+TList* AliFemtoCorrFctnMinvMonitor::GetOutputList()
+{
+  // Prepare the list of objects to be written to the output
+  TList *tOutputList = new TList();
+
+  tOutputList->Add(fMinveeFail);
+  tOutputList->Add(fMinvee);
+  tOutputList->Add(fMinv2piFail);
+  tOutputList->Add(fMinv2pi);
+  tOutputList->Add(fMinvppiFail);
+  tOutputList->Add(fMinvppi);
+
+  return tOutputList;
+}
diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.h b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.h
new file mode 100644 (file)
index 0000000..22b1f99
--- /dev/null
@@ -0,0 +1,49 @@
+////////////////////////////////////////////////////////////////////////////////
+//                                                                            //
+// AliFemtoCorrFctnGammaMonitor - A correlation function that analyzes            //
+// two particle mass minvariant with various mass assumptions                     //
+//                                                                            //
+// Authors: MaÅ‚gorzata Janik majanik@cern.ch
+//          Anna Zaborowska azaborow@cern.ch                                   //
+//                                                                            //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef ALIFEMTOCORRFCTNMINVMONITOR_H
+#define ALIFEMTOCORRFCTNMINVMONITOR_H
+
+#include "TH1D.h"
+#include "AliFemtoCorrFctn.h"
+
+class AliFemtoCorrFctnMinvMonitor : public AliFemtoCorrFctn {
+public:
+  AliFemtoCorrFctnMinvMonitor(char* title);
+  AliFemtoCorrFctnMinvMonitor(const AliFemtoCorrFctnMinvMonitor& aCorrFctn);
+  virtual ~AliFemtoCorrFctnMinvMonitor();
+
+  AliFemtoCorrFctnMinvMonitor& operator=(const AliFemtoCorrFctnMinvMonitor& aCorrFctn);
+
+  virtual AliFemtoString Report();
+  virtual void AddRealPair(AliFemtoPair* aPair);
+  virtual void AddMixedPair(AliFemtoPair* aPair);
+
+  virtual void Finish();
+
+  void WriteHistos();
+  virtual TList* GetOutputList();
+private:
+  
+  TH1D *fMinveeFail;   // ee mass assumption - failed pairs
+  TH1D *fMinvee;   // ee mass assumption - passed pairs
+  TH1D *fMinv2piFail;   // 2 pi mass assumption - failed pairs
+  TH1D *fMinv2pi;   // 2 pi mass assumption - passed pairs
+  TH1D *fMinvppiFail;   // p pi mass assumption - failed pairs
+  TH1D *fMinvppi;   // p pi mass assumption - passed pairs
+
+#ifdef __ROOT__
+  ClassDef(AliFemtoCorrFctnMinvMonitor, 1)
+#endif
+};
+
+
+#endif
+
index f0a9c78c86453714f0a080be94c81b2e866af35c..d01f333aa6f6f0d3cf8b4a8d3d1d6957932ef39a 100644 (file)
@@ -113,7 +113,8 @@ ClassImp(AliFemtoESDTrackCut)
     fMinPforTPCpid(0.0),
     fMaxPforTPCpid(10000.0),
     fMinPforITSpid(0.0),
-    fMaxPforITSpid(10000.0)
+   fMaxPforITSpid(10000.0),
+   fElectronRejection(0)
 {
   // Default constructor
   fNTracksPassed = fNTracksFailed = 0;
@@ -359,6 +360,10 @@ bool AliFemtoESDTrackCut::Pass(const AliFemtoTrack* track)
     tMost[4] = track->PidProbProton()*PidFractionProton(track->P().Mag());
     float ipidmax = 0.0;
 
+    //****N Sigma Method -- electron rejection****
+    if(fElectronRejection) 
+      if(!IsElectron(track->NSigmaTPCE(),track->NSigmaTPCPi(),track->NSigmaTPCK(), track->NSigmaTPCP())) 
+       return false;
 
     //****N Sigma Method****
        if(fPIDMethod==0){
@@ -1042,6 +1047,7 @@ void AliFemtoESDTrackCut::SetNsigma(Double_t nsigma)
   fNsigma = nsigma;
 }
 
+
 void AliFemtoESDTrackCut::SetClusterRequirementITS(AliESDtrackCuts::Detector det, AliESDtrackCuts::ITSClusterRequirement req)
 {
   fCutClusterRequirementITS[det] = req;
@@ -1065,3 +1071,11 @@ Bool_t AliFemtoESDTrackCut::CheckITSClusterRequirement(AliESDtrackCuts::ITSClust
 
   return kFALSE;
 }
+
+bool AliFemtoESDTrackCut::IsElectron(float nsigmaTPCE, float nsigmaTPCPi,float nsigmaTPCK, float nsigmaTPCP)
+{
+   if(nsigmaTPCE<3 && nsigmaTPCPi>3 && nsigmaTPCK>3 && nsigmaTPCP>3)
+      return false;
+   else
+     return true;
+}
index 01da48863e8513bfe00a8f04d1bc80d7709d3b7c..f42a619954b951abaa92e3ff6ca5554555bca1b9 100644 (file)
@@ -1,12 +1,7 @@
 ///////////////////////////////////////////////////////////////////////////
 //                                                                       //
 // AliFemtoESDTrackCut: A basic track cut that used information from     //
-// ALICE ESD to accept or reject the track.                              //
-// Enables the selection on charge, transverse momentum, rapidity,       //
-// pid probabilities, number of ITS and TPC clusters                     //
-// Author: Marek Chojnacki (WUT), mchojnacki@knf.pw.edu.pl               //
-//                                                                       //
-///////////////////////////////////////////////////////////////////////////
+// ALICE ESD to accept or reject the track.                             ////////////////////////////////////////////////
 #include "AliESDtrackCuts.h"
 
 #ifndef ALIFEMTOESDTRACKCUT_H
@@ -73,6 +68,7 @@ class AliFemtoESDTrackCut : public AliFemtoTrackCut
   void SetMomRangeTOFpidIs(const float& minp, const float& maxp);
   void SetMomRangeTPCpidIs(const float& minp, const float& maxp);
   void SetMomRangeITSpidIs(const float& minp, const float& maxp);
+  void SetElectronRejection(Bool_t);
 
  private:   // here are the quantities I want to cut on...
 
@@ -120,6 +116,7 @@ class AliFemtoESDTrackCut : public AliFemtoTrackCut
   float             fMaxPforTPCpid;  // momentum till which TPC PID is requested
   float             fMinPforITSpid;  // momentum from which ITS PID is requested
   float             fMaxPforITSpid;  // momentum till which ITS PID is requested
+  bool fElectronRejection;
 
   float PidFractionElectron(float mom) const;
   float PidFractionPion(float mom) const;
@@ -139,6 +136,7 @@ class AliFemtoESDTrackCut : public AliFemtoTrackCut
   bool IsKaonNSigma(float mom, float nsigmaTPC, float nsigmaTOF);
   bool IsPionNSigma(float mom, float nsigmaTPC, float nsigmaTOF);
   bool IsProtonNSigma(float mom, float nsigmaTPC, float nsigmaTOF);
+  bool IsElectron(float nsigmaTPCE, float nsigmaTPCPi,float nsigmaTPCK, float nsigmaTPCP);
 
   Bool_t CheckITSClusterRequirement(AliESDtrackCuts::ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2); //the same as in AliESDtrackCuts
 
@@ -156,7 +154,8 @@ inline void AliFemtoESDTrackCut::SetCharge(const int& ch){fCharge = ch;}
 inline void AliFemtoESDTrackCut::SetPidProbElectron(const float& lo,const float& hi){fPidProbElectron[0]=lo; fPidProbElectron[1]=hi;}
 inline void AliFemtoESDTrackCut::SetPidProbPion(const float& lo,const float& hi){fPidProbPion[0]=lo; fPidProbPion[1]=hi;}
 inline void AliFemtoESDTrackCut::SetPidProbKaon(const float& lo,const float& hi){fPidProbKaon[0]=lo; fPidProbKaon[1]=hi;}
-inline void AliFemtoESDTrackCut::SetPidProbProton(const float& lo,const float& hi){fPidProbProton[0]=lo; fPidProbProton[1]=hi;}
+inline void AliFemtoESDTrackCut::SetPidProbProton
+(const float& lo,const float& hi){fPidProbProton[0]=lo; fPidProbProton[1]=hi;}
 inline void AliFemtoESDTrackCut::SetPidProbMuon(const float& lo,const float& hi){fPidProbMuon[0]=lo; fPidProbMuon[1]=hi;}
 inline void AliFemtoESDTrackCut::SetLabel(const bool& flag){fLabel=flag;}
 inline void AliFemtoESDTrackCut::SetStatus(const long& status){fStatus=status;}
@@ -175,6 +174,6 @@ inline void AliFemtoESDTrackCut::SetMaxImpactXY(const float& maximpxy) { fMaxImp
 inline void AliFemtoESDTrackCut::SetMinImpactXY(const float& minimpxy) { fMinImpactXY = minimpxy; }
 inline void AliFemtoESDTrackCut::SetMaxImpactXYPtDep(const float& maxoff, const float& maxnrm, const float& maxpow) { fMaxImpactXYPtOff = maxoff; fMaxImpactXYPtNrm = maxnrm; fMaxImpactXYPtPow = maxpow; }
 inline void AliFemtoESDTrackCut::SetMaxImpactZ(const float& maximpz) { fMaxImpactZ = maximpz; }
-
+inline void AliFemtoESDTrackCut::SetElectronRejection(Bool_t setE) { fElectronRejection = setE; }
 
 #endif
index d086e5fa0f1f13b0af45676dad4abd23aea476a8..789cd645a02a6c0e9e2250dcb2d138c35102a47a 100644 (file)
@@ -13,7 +13,7 @@
 #include "AliFemtoAnalysisReactionPlane.h"
 #include <cstdio>
 
-#ifdef __ROOT__ 
+#ifdef __ROOT__
 ClassImp(AliFemtoModelBPLCMSCorrFctn)
 #endif
 
@@ -114,17 +114,17 @@ TList* AliFemtoModelBPLCMSCorrFctn::GetOutputList()
   // Prepare the list of objects to be written to the output
   TList *tOutputList = AliFemtoModelCorrFctn::GetOutputList();
 
-  tOutputList->Add(fNumerator3DTrue); 
-  tOutputList->Add(fNumerator3DFake);  
-  tOutputList->Add(fDenominator3D);  
-  tOutputList->Add(fQinvHisto);  
+  tOutputList->Add(fNumerator3DTrue);
+  tOutputList->Add(fNumerator3DFake);
+  tOutputList->Add(fDenominator3D);
+  tOutputList->Add(fQinvHisto);
 
   return tOutputList;
 }
 
 //_________________________
 void AliFemtoModelBPLCMSCorrFctn::Finish(){
-  fQinvHisto->Divide(fDenominator);
+  //fQinvHisto->Divide(fDenominator);
 }
 
 //____________________________
@@ -148,7 +148,7 @@ AliFemtoString AliFemtoModelBPLCMSCorrFctn::Report(){
       stemp += ctemp;
   */
 
-  //  
+  //
   AliFemtoString returnThis = stemp;
   return returnThis;
 }
@@ -159,7 +159,7 @@ void AliFemtoModelBPLCMSCorrFctn::AddRealPair( AliFemtoPair* pair)
   if (fPairCut){
     if (fUseRPSelection) {
       AliFemtoKTPairCut *ktc = dynamic_cast<AliFemtoKTPairCut *>(fPairCut);
-      if (!ktc) { 
+      if (!ktc) {
        cout << "RP aware cut requested, but not connected to the CF" << endl;
        if (!(fPairCut->Pass(pair))) return;
       }
@@ -178,7 +178,7 @@ void AliFemtoModelBPLCMSCorrFctn::AddRealPair( AliFemtoPair* pair)
 //   if (fPairCut){
 //     if (!(fPairCut->Pass(pair))) return;
 //   }
-  
+
   Double_t weight = fManager->GetWeight(pair);
 
   double qOut = (pair->QOutCMS());
@@ -194,17 +194,17 @@ void AliFemtoModelBPLCMSCorrFctn::AddMixedPair( AliFemtoPair* pair){
   if (fPairCut){
     if (fUseRPSelection) {
       AliFemtoKTPairCut *ktc = dynamic_cast<AliFemtoKTPairCut *>(fPairCut);
-      if (!ktc) { 
-       cout << "RP aware cut requested, but not connected to the CF" << endl;
-       if (!(fPairCut->Pass(pair))) return;
+      if (!ktc) {
+        cout << "RP aware cut requested, but not connected to the CF" << endl;
+        if (!(fPairCut->Pass(pair))) return;
       }
       else {
-       AliFemtoAnalysisReactionPlane *arp = dynamic_cast<AliFemtoAnalysisReactionPlane *> (HbtAnalysis());
-       if (!arp) {
-         cout << "RP aware cut requested, but not connected to the CF" << endl;
-         if (!(fPairCut->Pass(pair))) return;
-       }
-       else if (!(ktc->Pass(pair, arp->GetCurrentReactionPlane()))) return;
+        AliFemtoAnalysisReactionPlane *arp = dynamic_cast<AliFemtoAnalysisReactionPlane *> (HbtAnalysis());
+        if (!arp) {
+          cout << "RP aware cut requested, but not connected to the CF" << endl;
+          if (!(fPairCut->Pass(pair))) return;
+        }
+        else if (!(ktc->Pass(pair, arp->GetCurrentReactionPlane()))) return;
       }
     }
     else
@@ -224,14 +224,14 @@ void AliFemtoModelBPLCMSCorrFctn::AddMixedPair( AliFemtoPair* pair){
   fDenominator3D->Fill(qOut, qSide, qLong, 1.0);
   fNumeratorFake->Fill(pair->QInv(), weight);
   fDenominator->Fill(pair->QInv(), 1.0);
-
+  fQinvHisto->Fill(qOut, qSide, qLong, pair->QInv() );
 }
 //_______________________
 AliFemtoModelCorrFctn* AliFemtoModelBPLCMSCorrFctn::Clone()
 {
   // Clone the correlation function
   AliFemtoModelBPLCMSCorrFctn *tCopy = new AliFemtoModelBPLCMSCorrFctn(*this);
-  
+
   return tCopy;
 }
 
index e67581a7b576e0bed0ddf6444855210beddb2617..2dbdfdbef9d1e91166b31a8518952be23fc58dd4 100644 (file)
@@ -28,6 +28,7 @@ AliFemtoPairCutAntiGamma(),
   fDPhiStarMin(0),
   fEtaMin(0),
   fMinRad(0.8),
+  fMaxRad(2.5),
   fMagSign(1),
   fPhistarmin(kTRUE)
 {
@@ -38,12 +39,14 @@ AliFemtoPairCutRadialDistance::AliFemtoPairCutRadialDistance(const AliFemtoPairC
   fDPhiStarMin(0),
   fEtaMin(0),
   fMinRad(0.8),
+  fMaxRad(2.5),
   fMagSign(1),
   fPhistarmin(kTRUE)
 {
   fDPhiStarMin = c.fDPhiStarMin;
   fEtaMin = c.fEtaMin;
   fMinRad = c.fMinRad;
+  fMaxRad = c.fMaxRad;
   fMagSign = c.fMagSign;
   fPhistarmin = c.fPhistarmin;
 }
@@ -58,6 +61,7 @@ AliFemtoPairCutRadialDistance& AliFemtoPairCutRadialDistance::operator=(const Al
     fDPhiStarMin = c.fDPhiStarMin;
     fEtaMin = c.fEtaMin;
     fMinRad = c.fMinRad;
+    fMaxRad = c.fMaxRad;
     fMagSign = c.fMagSign;
     fPhistarmin = c.fPhistarmin;
 
@@ -94,6 +98,7 @@ bool AliFemtoPairCutRadialDistance::Pass(const AliFemtoPair* pair){
   else {
     AliAODEvent *fAOD;
     fAOD = aodH->GetEvent();
+    //cout<<fAOD<<endl;
     magsign = fAOD->GetMagneticField();
   }
 
@@ -112,7 +117,7 @@ bool AliFemtoPairCutRadialDistance::Pass(const AliFemtoPair* pair){
   rad = fMinRad;
 
   if (fPhistarmin) {
-    for (rad = 0.8; rad < 2.5; rad += 0.01) {
+    for (rad = fMinRad; rad < fMaxRad; rad += 0.01) {
       Double_t dps = (phi2-phi1+(TMath::ASin(-0.075*chg2*fMagSign*rad/ptv2))-(TMath::ASin(-0.075*chg1*fMagSign*rad/ptv1)));
       dps = TVector2::Phi_mpi_pi(dps);
       Double_t etad = eta2 - eta1;
@@ -189,6 +194,11 @@ void AliFemtoPairCutRadialDistance::SetMinimumRadius(double minrad)
   fMinRad = minrad;
 }
 
+void AliFemtoPairCutRadialDistance::SetMaximumRadius(double maxrad)
+{
+  fMaxRad = maxrad;
+}
+
 void AliFemtoPairCutRadialDistance::SetMagneticFieldSign(int magsign)
 {
   if(magsign>1) fMagSign = 1;
index e5370be58ca47ede2fd6e7eb06b0e338ee1d2597..a65e5019193e04ea3bca6fe400384ea0ae300222 100644 (file)
@@ -45,6 +45,7 @@ public:
   void SetPhiStarDifferenceMinimum(double dtpc);
   void SetEtaDifferenceMinimum(double etpc);
   void SetMinimumRadius(double minrad);
+  void SetMaximumRadius(double maxrad);
   void SetMagneticFieldSign(int magsign);
   void SetPhiStarMin(Bool_t);
 
@@ -54,6 +55,7 @@ public:
   //Double_t fRadius;           // Radius at which the separation is calculated
   Double_t fEtaMin;           // Minimum allowed pair separation in eta
   Double_t fMinRad;
+  Double_t fMaxRad;
   Int_t fMagSign;
   Bool_t fPhistarmin;
 
diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx
new file mode 100644 (file)
index 0000000..74fda38
--- /dev/null
@@ -0,0 +1,189 @@
+/////////////////////////////////////////////////////////////////////////////
+//                                                                         //
+// AliFemtoPairCutResonances - a pair cut which checks     //
+// for some pair qualities that attempt to identify slit/doubly            //
+// reconstructed tracks and also selects pairs based on their separation   //
+// at the entrance to the TPC                                              //
+//                                                                         //
+/////////////////////////////////////////////////////////////////////////////
+
+#include "AliFemtoPairCutResonances.h"
+#include <string>
+#include <cstdio>
+#include <TMath.h>
+
+#ifdef __ROOT__
+ClassImp(AliFemtoPairCutResonances)
+#endif
+
+//__________________
+AliFemtoPairCutResonances::AliFemtoPairCutResonances():
+   AliFemtoShareQualityPairCut(),
+   fMaxEEMinv(0.0),
+   fMaxDTheta(0.0),
+   fDataType(kAOD),
+   fSwitchPassFail(0)
+{
+}
+//__________________
+AliFemtoPairCutResonances::AliFemtoPairCutResonances(const AliFemtoPairCutResonances& c) : 
+  AliFemtoShareQualityPairCut(c),
+  fMaxEEMinv(0.0),
+  fMaxDTheta(0.0),
+  fDataType(kAOD),
+  fSwitchPassFail(0)
+{
+  fMaxEEMinv = c.fMaxEEMinv;
+  fMaxDTheta = c.fMaxDTheta;
+  fDataType = c.fDataType;
+  fSwitchPassFail=c.fSwitchPassFail;
+}
+
+AliFemtoPairCutResonances& AliFemtoPairCutResonances::operator=(const AliFemtoPairCutResonances& c)
+{
+  if (this != &c) {
+    fMaxEEMinv = c.fMaxEEMinv;
+    fMaxDTheta = c.fMaxDTheta;
+    fDataType = c.fDataType;
+    fSwitchPassFail=c.fSwitchPassFail;
+  }
+
+  return *this;
+
+}
+//__________________
+AliFemtoPairCutResonances::~AliFemtoPairCutResonances(){
+}
+//__________________
+bool AliFemtoPairCutResonances::Pass(const AliFemtoPair* pair){
+  // Accept pairs based on their TPC entrance separation and
+  // quality and sharity
+  bool temp = true;
+
+  if(fDataType==kKine)
+    return true;
+
+  double me = 0.000511;
+  double mPi = 0.13957018;
+  double mp = 0.938272046;
+
+  double mK0min = 0.00049;
+  double mK0max = 0.00051;
+  double mK0 = 0.000497614;
+  double mRhomin = 0.000765;
+  double mRhomax = 0.000785;
+  double mRho = 0.00077526;
+  double mLmin = 1.095;
+  double mLmax = 1.135;
+  double mL = 1.115683;
+
+  if ((pair->Track1()->Track()->Charge() * pair->Track2()->Track()->Charge()) < 0.0) {
+    double theta1 = pair->Track1()->Track()->P().Theta();
+    double theta2 = pair->Track2()->Track()->P().Theta();
+    double dtheta = TMath::Abs(theta1 - theta2);
+
+    // check on ee pairs (gamma)
+    double e1 = TMath::Sqrt(me*me + pair->Track1()->Track()->P().Mag2());
+    double e2 = TMath::Sqrt(me*me + pair->Track2()->Track()->P().Mag2());
+    double minvGamma = 2*me*me + 2*(e1*e2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if ( minvGamma < fMaxEEMinv )
+       temp = false;
+    //check on resonances
+    double pi1 =  TMath::Sqrt(mPi*mPi + pair->Track1()->Track()->P().Mag2());
+    double pi2 =  TMath::Sqrt(mPi*mPi + pair->Track2()->Track()->P().Mag2());
+    double p1 =  TMath::Sqrt(mp*mp + pair->Track1()->Track()->P().Mag2());
+    double p2 =  TMath::Sqrt(mp*mp + pair->Track2()->Track()->P().Mag2());
+    //check on K0 and Rho
+    double minv2pi = 2*mPi*mPi + 2*(pi1*pi2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if ( ((minv2pi>mK0min && minv2pi<mK0max) || (minv2pi>mRhomin && minv2pi<mRhomax)) )
+       temp = false;
+    //check on L0
+    double minvpPi = 2*mp*mPi + 2*(p1*pi2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    double minvPip = 2*mPi*mp + 2*(pi1*p2 -
+                              pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
+                              pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
+                              pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
+    if( ((minvpPi>mLmin) && (minvpPi<mLmax)) || ((minvPip>mLmin) && (minvPip<mLmax)) )
+       temp = false;
+  }
+  if (fSwitchPassFail) // choose only resonances
+  {
+     if (!temp) {
+        temp = AliFemtoShareQualityPairCut::Pass(pair);
+        if (temp) {fNPairsPassed++;}
+        else fNPairsFailed++;
+        return temp;
+     }
+     else
+     {
+        fNPairsFailed++;
+        return false;
+     }
+  }
+  else // cut resonances
+  {
+     if (temp) {
+        temp = AliFemtoShareQualityPairCut::Pass(pair);
+        if (temp) {fNPairsPassed++;}
+        else fNPairsFailed++;
+        return temp;
+     }
+     else
+     {
+        fNPairsFailed++;
+        return false;
+     }
+  }
+}
+//__________________
+AliFemtoString AliFemtoPairCutResonances::Report(){
+  // Prepare a report from the execution
+  string stemp = "AliFemtoPairCutResonances Pair Cut - remove pairs possibly coming from Gamma conversions\n";  
+  char ctemp[100];
+  stemp += ctemp;
+  snprintf(ctemp , 100, "Number of pairs which passed:\t%ld  Number which failed:\t%ld\n",fNPairsPassed,fNPairsFailed);
+  stemp += ctemp;
+  AliFemtoString returnThis = stemp;
+  return returnThis;}
+//__________________
+
+TList *AliFemtoPairCutResonances::ListSettings()
+{
+  // return a list of settings in a writable form
+  TList *tListSetttings =  AliFemtoShareQualityPairCut::ListSettings();
+  char buf[200];
+  snprintf(buf, 200, "AliFemtoPairCutResonances.maxeeminv=%f", fMaxEEMinv);
+  snprintf(buf, 200, "AliFemtoPairCutResonances.maxdtheta=%f", fMaxDTheta);
+  tListSetttings->AddLast(new TObjString(buf));
+
+  return tListSetttings;
+}
+
+void AliFemtoPairCutResonances::SetMaxEEMinv(Double_t maxeeminv)
+{
+  fMaxEEMinv = maxeeminv;
+}
+
+void AliFemtoPairCutResonances::SetMaxThetaDiff(Double_t maxdtheta)
+{
+  fMaxDTheta = maxdtheta;
+}
+
+void AliFemtoPairCutResonances::SetDataType(AliFemtoDataType type)
+{
+  fDataType = type;
+}
+
+void AliFemtoPairCutResonances::SetChooseResonances(bool onlyResonances)
+{
+  fSwitchPassFail = onlyResonances;
+}
diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.h b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.h
new file mode 100644 (file)
index 0000000..5c4e781
--- /dev/null
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////////////
+//                                                                         //
+// AliFemtoPairCutResonances - a pair cut which checks     //
+// for some pair qualities that attempt to identify slit/doubly            //
+// reconstructed tracks and also selects pairs based on their separation   //
+// at the entrance to the TPC                                              //
+//                                                                         //
+/////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef ALIFEMTOPAIRCUTRESONANCES_H
+#define ALIFEMTOPAIRCUTRESONANCES_H
+
+#include "AliFemtoPairCut.h"
+#include "AliFemtoShareQualityPairCut.h"
+
+class AliFemtoPairCutResonances : public AliFemtoShareQualityPairCut{
+public:
+  AliFemtoPairCutResonances();
+  AliFemtoPairCutResonances(const AliFemtoPairCutResonances& c);
+  virtual ~AliFemtoPairCutResonances();
+  AliFemtoPairCutResonances& operator=(const AliFemtoPairCutResonances& c);
+
+  virtual bool Pass(const AliFemtoPair* pair);
+  virtual AliFemtoString Report();
+  virtual TList *ListSettings();
+  virtual AliFemtoPairCut* Clone();
+  void SetMaxEEMinv(Double_t maxeeminv);
+  void SetMaxThetaDiff(Double_t maxdtheta);
+  void SetDataType(AliFemtoDataType type);
+  void SetChooseResonances(bool onlyResonances);
+
+ protected:
+  Double_t fMaxEEMinv; // Maximum allowed ee Minv
+  Double_t fMaxDTheta; // Maximum polar angle difference
+  AliFemtoDataType fDataType; //Use ESD / AOD / Kinematics.
+  bool fSwitchPassFail; // cut resonances (false), choose resonances (true)
+
+#ifdef __ROOT__
+  ClassDef(AliFemtoPairCutResonances, 0)
+#endif
+};
+
+inline AliFemtoPairCut* AliFemtoPairCutResonances::Clone() { AliFemtoPairCutResonances* c = new AliFemtoPairCutResonances(*this); return c;}
+
+#endif
index 2c3cb8671b47c76724a49ac846206fde4df365cd..7a0d3302820e3a8ea76011b216b2dc43a438d094 100644 (file)
@@ -501,7 +501,7 @@ AliChaoticity &AliChaoticity::operator=(const AliChaoticity &obj)
   fEvt = obj.fEvt;
   fTempStruct = obj.fTempStruct;
   fRandomNumber = obj.fRandomNumber;
-  fLEGO = fLEGO;
+  fLEGO = obj.fLEGO;
   fMCcase = obj.fMCcase;
   fAODcase = obj.fAODcase;
   fPbPbcase = obj.fPbPbcase; 
index 17dd8ee6b5c761c96aff858cf5eb2ce94657e438..a296c1f6f66364dfbe41bc252ac847c91d215b78 100644 (file)
@@ -674,7 +674,7 @@ void AliFemtoK0Analysis::Exec(Option_t *)
   double kCheckDCAK0   [5] = {0.1,0.2,0.3,0.5,1.0};
   double kCheckDCAPi   [5] = {1.0,0.6,0.4,0.2,0.1};
   double kCheckDCAPiPi [5] = {0.1,0.2,0.3,0.5,1.0};
-  double kCheckAvgSep  [5] = {0.0,2.5,5.0,7.5,10.0};
+  double kCheckAvgSep  [5] = {10.0,7.5,5.0,2.5,0.0};
 
 ////////////////////////////////////////////////////////////////  
   //v0 tester
@@ -1210,7 +1210,7 @@ void AliFemtoK0Analysis::Exec(Option_t *)
         else{
          if(pMean < kCheckAvgSep[4] || nMean < kCheckAvgSep[4]) continue;
          for(int jCut=0;jCut<5;jCut++){
-          if(pMean > kCheckAvgSep[4] && nMean > kCheckAvgSep[4]) SepPass[jCut] = kTRUE;
+          if(pMean > kCheckAvgSep[jCut] && nMean > kCheckAvgSep[jCut]) SepPass[jCut] = kTRUE;
          }
         }
 
@@ -1319,7 +1319,7 @@ void AliFemtoK0Analysis::Exec(Option_t *)
             
             //for avg sep
             bool asSkip = kFALSE;
-            for(int iCut=0;iCut<4;iCut++){
+            for(int iCut=0;iCut<4;iCut++){ //other parameters
              if(!(fEvt)->fK0Particle[i].fCutPass[iCut][2] || !(fEvt+evnum)->fK0Particle[j].fCutPass[iCut][2]) asSkip=kTRUE;
             }
             if(asSkip) continue;
diff --git a/PWGCF/FEMTOSCOPY/macros/Train/MC_KK_pPb_V0M/AddTaskFemto.C b/PWGCF/FEMTOSCOPY/macros/Train/MC_KK_pPb_V0M/AddTaskFemto.C
new file mode 100644 (file)
index 0000000..983bca7
--- /dev/null
@@ -0,0 +1,97 @@
+//=============================================================================
+//
+// *** AddTaskFemto.C ***
+// ---train version ---
+// This macro initialize a complete AnalysisTask object for femtoscopy.
+// from:
+// alicepc100/cern/users/erogocha/PbPb2.76/2011/AOD115_0-10_newPID/to_alien_newtag/AddTaskFemto.C
+// ---modified to train---
+//  KM: March 25, 2013
+//=============================================================================
+
+//this line for local: AliAnalysisTaskFemto *AddTaskFemtoKchHBT(const char *configMacroName="ConfigFemtoAnalysis.C", const char *configMacroParameters="" )
+
+AliAnalysisTaskFemto *AddTaskFemto(TString configMacroName, const char *containerName="femtolist", const char *configMacroParameters="" )
+{
+// Creates a proton analysis task and adds it to the analysis manager.
+  
+  // A. Get the pointer to the existing analysis manager via the static access method.
+  //==============================================================================
+  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+  if (!mgr) {
+    Error("AddTaskFemto", "No analysis manager to connect to.");
+    return NULL;
+  }  
+
+  // B. Check the analysis type using the event handlers connected to the analysis
+  //    manager. The availability of MC handler cann also be checked here.
+  //==============================================================================
+  if (!mgr->GetInputEventHandler()) {
+    ::Error("AddTaskFemto", "This task requires an input event handler");
+    return NULL;
+  }  
+  TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
+  cout << "Found " <<type << " event handler" << endl;
+
+  // C. Create the task, add it to manager.
+  //===========================================================================
+//  gSystem->SetIncludePath("-I$ROOTSYS/include  -I./PWG2AOD/AOD -I./PWG2femtoscopy/FEMTOSCOPY/AliFemto -I./PWG2femtoscopyUser/FEMTOSCOPY/AliFemtoUser -I$ALICE_ROOT/include");
+
+  if (TProofMgr::GetListOfManagers()->GetEntries()) {
+//     if (dynamic_cast<TProofLite *> gProof) {
+//       char *macrocommand[10000];
+//       sprintf(macrocommand, ".L %s", configMacroName);
+//       gProof->Exec(macrocommand);
+//     }
+//     else
+    gProof->Load(configMacroName);
+  }  
+  //  gROOT->LoadMacro("ConfigFemtoAnalysis.C++");
+
+  //was befere aliroot 5.04.33: AliAnalysisTaskFemto *taskfemto = new AliAnalysisTaskFemto("TaskFemto",configMacroName);
+  //  AliAnalysisTaskFemto *taskfemto = new AliAnalysisTaskFemto("TaskFemto",configMacroName,kFALSE);
+  //March 2013:
+  //to check localy before new tag I did symbolic link on my laplot
+  //in $ALICE_ROOT/PWGCF/FEMTOSCOPY/macros/Train/
+  //[root@alicethinks Train]# ln -s /scratch/AliWork/PbPb2.76/Train2013/KchHBT KchHBT
+  //
+<<<<<<< HEAD
+  AliAnalysisTaskFemto *taskfemto = new AliAnalysisTaskFemto("TaskFemto","$ALICE_ROOT/"+configMacroName,configMacroParameters,kFALSE);
+=======
+  //Train:
+  AliAnalysisTaskFemto *taskfemto = new AliAnalysisTaskFemto("TaskFemto","$ALICE_ROOT/"+configMacroName,configMacroParameters,kFALSE);
+  //Local:
+  //AliAnalysisTaskFemto *taskfemto = new AliAnalysisTaskFemto("TaskFemto",configMacroName,configMacroParameters,kFALSE);
+>>>>>>> new macros for Kaon Femto in pPb
+  //10-90% only two triggers: SemiCentral and MB
+  //taskfemto->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kSemiCentral);// this a new line for train
+  taskfemto->SelectCollisionCandidates(AliVEvent::kINT7);
+  //0-10 % all three triggers
+  //taskfemto->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral);// this a new line for train
+  mgr->AddTask(taskfemto);
+
+<<<<<<< HEAD
+=======
+  //MC PID (not needed for data):
+  AliAnalysisTaskSE *pidresponse = AddTaskPIDResponse(kTRUE);
+
+>>>>>>> new macros for Kaon Femto in pPb
+  // D. Configure the analysis task. Extra parameters can be used via optional
+  // arguments of the AddTaskXXX() function.
+  //===========================================================================
+  
+  // E. Create ONLY the output containers for the data produced by the task.
+  // Get and connect other common input/output containers via the manager as below
+  //==============================================================================
+  TString outputfile = AliAnalysisManager::GetCommonFileName();  
+  outputfile += ":PWG2FEMTO";
+  AliAnalysisDataContainer *cout_femto  = mgr->CreateContainer("femtolist_V0M",  TList::Class(),
+                                                              AliAnalysisManager::kOutputContainer,outputfile);
+
+
+   mgr->ConnectInput(taskfemto, 0, mgr->GetCommonInputContainer());
+   mgr->ConnectOutput(taskfemto, 0, cout_femto);
+
+   // Return task pointer at the end
+   return taskfemto;
+}
diff --git a/PWGCF/FEMTOSCOPY/macros/Train/MC_KK_pPb_V0M/ConfigFemtoAnalysis.C b/PWGCF/FEMTOSCOPY/macros/Train/MC_KK_pPb_V0M/ConfigFemtoAnalysis.C
new file mode 100644 (file)
index 0000000..50a604b
--- /dev/null
@@ -0,0 +1,354 @@
+
+/*********************************************************************
+ *                                                                   *
+ * ConfigFemtoAnalysis.C - configuration macro for the femtoscopic   *
+ * analysis, meant as a QA process for two-particle effects          *
+ *                                                                   *
+ * Author: Adam Kisiel (Adam.Kisiel@cern.ch)                         *
+ *                                                                   *
+ *********************************************************************/
+
+#if !defined(__CINT__) || defined(__MAKECINT_)
+#include "AliFemtoManager.h"
+#include "AliFemtoEventReaderESDChain.h"
+#include "AliFemtoEventReaderESDChainKine.h"
+#include "AliFemtoEventReaderAODChain.h"
+#include "AliFemtoSimpleAnalysis.h"
+#include "AliFemtoBasicEventCut.h"
+#include "AliFemtoESDTrackCut.h"
+#include "AliFemtoKKTrackCut.h"
+#include "AliFemtoCorrFctn.h"
+#include "AliFemtoCutMonitorParticleYPt.h"
+#include "AliFemtoCutMonitorParticleVertPos.h"
+#include "AliFemtoCutMonitorParticleMomRes.h"
+#include "AliFemtoCutMonitorParticlePID.h"
+#include "AliFemtoCutMonitorEventMult.h"
+#include "AliFemtoCutMonitorEventVertex.h"
+#include "AliFemtoShareQualityTPCEntranceSepPairCut.h"
+#include "AliFemtoPairCutAntiGamma.h"
+#include "AliFemtoPairCutRadialDistance.h"
+#include "AliFemtoQinvCorrFctn.h"
+#include "AliFemtoShareQualityCorrFctn.h"
+#include "AliFemtoTPCInnerCorrFctn.h"
+#include "AliFemtoVertexMultAnalysis.h"
+#include "AliFemtoCorrFctn3DSpherical.h"
+#include "AliFemtoChi2CorrFctn.h"
+#include "AliFemtoCorrFctnTPCNcls.h"
+#include "AliFemtoBPLCMS3DCorrFctn.h"
+#include "AliFemtoCorrFctn3DLCMSSym.h"
+#include "AliFemtoModelBPLCMSCorrFctn.h"
+#include "AliFemtoModelCorrFctn3DSpherical.h"
+#include "AliFemtoModelGausLCMSFreezeOutGenerator.h"
+#include "AliFemtoModelGausRinvFreezeOutGenerator.h"
+#include "AliFemtoModelManager.h"
+#include "AliFemtoModelWeightGeneratorBasic.h"
+#include "AliFemtoModelWeightGeneratorLednicky.h"
+#include "AliFemtoCorrFctnDirectYlm.h"
+#include "AliFemtoModelCorrFctnDirectYlm.h"
+#include "AliFemtoModelCorrFctnSource.h"
+#include "AliFemtoCutMonitorParticlePtPDG.h"
+#include "AliFemtoKTPairCut.h"
+#include "AliFemtoCutMonitorCollections.h"
+#endif
+
+//________________________________________________________________________
+AliFemtoManager* ConfigFemtoAnalysis() {
+
+  double PionMass = 0.13956995;
+  double KaonMass = 0.493677;
+       
+  //multiplicity bins
+ // int runmults[10] = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0};
+ // int multbins[11] = {0.01, 200, 400, 600, 900, 950, 500, 600, 700, 800, 900};
+   int runmults[3] = {1, 1, 1};
+    int multbins[4] = {0.01, 200, 400, 900};
+
+  // int runmults[6] = {1, 1, 1, 1, 1, 1};
+  // int multbins[7] = {0.01, 50, 100, 200, 400, 600, 900};
+  // int runmults[4] = {1, 1, 1, 1};
+  // int multbins[5] = {0.01, 200, 400, 600, 900};
+
+  int runch[2] = {1, 1};
+  // const char *chrgs[2] = { "pip", "pim" };
+  const char *chrgs[2] = { "Kp", "Km"};
+
+  int runktdep = 1;
+  //double ktrng[8] = {0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 1.0};
+  double ktrng[3] = {0.2, 0.5, 1.0};
+
+  int run3d = 0; // Do 3D cartesian analysis?
+  //int runshlcms = 1;
+  int runshlcms = 0;
+
+  //PhysicsSelection set only in runBatch with trigger + Physics Selection Task
+
+
+  double shqmax;
+  //int nbinssh = 200;
+  int nbinssh = 100;
+
+  //if (runshlcms) shqmax = 2.0;
+  if (runshlcms) shqmax = 0.25;
+  else shqmax = 2.0;
+
+  AliFemtoEventReaderAODChain *Reader = new AliFemtoEventReaderAODChain();
+<<<<<<< HEAD
+  Reader->SetUseMultiplicity(AliFemtoEventReaderAODChain::kCentralityV0);
+=======
+  //V0M estimator:
+  Reader->SetUseMultiplicity(AliFemtoEventReaderAODChain::kCentrality);
+>>>>>>> new macros for Kaon Femto in pPb
+  Reader->SetFilterBit(7);
+  Reader->SetpA2013(kTRUE);
+  //Reader->SetUseMultiplicity(AliFemtoEventReaderAODChain::kCentralityV0A);
+ // Reader->SetCentralityPreSelection(0.01, 900);
+
+  //AliFemtoEventReaderESDChainKine* Reader=new AliFemtoEventReaderESDChainKine();
+  //Reader->SetConstrained(true);
+  // Reader->SetUseTPCOnly(false);
+
+ // AliFemtoEventReaderESDChain *Reader = new AliFemtoEventReaderESDChain();
+ // Reader->SetUseMultiplicity(AliFemtoEventReaderESDChain::kV0Centrality);
+ // Reader->SetReadTrackType(AliFemtoEventReaderESDChain::kGlobal);
+
+
+  AliFemtoManager* Manager=new AliFemtoManager();
+  Manager->SetEventReader(Reader);
+
+  AliFemtoVertexMultAnalysis    *anetaphitpc[20];
+  AliFemtoBasicEventCut         *mecetaphitpc[20];
+  AliFemtoCutMonitorEventMult   *cutPassEvMetaphitpc[20];
+  AliFemtoCutMonitorEventMult   *cutFailEvMetaphitpc[20];
+  AliFemtoCutMonitorEventVertex *cutPassEvVetaphitpc[20];
+  AliFemtoCutMonitorEventVertex *cutFailEvVetaphitpc[20];
+  AliFemtoCutMonitorCollections   *cutPassColletaphitpc[20];
+  AliFemtoCutMonitorCollections   *cutFailColletaphitpc[20];
+  AliFemtoKKTrackCut           *dtc1etaphitpc[20];
+  AliFemtoKKTrackCut           *dtc2etaphitpc[20];
+  //AliFemtoESDTrackCut           *dtc1etaphitpc[20];
+  //AliFemtoESDTrackCut           *dtc2etaphitpc[20];
+  AliFemtoCutMonitorParticleYPt *cutPass1YPtetaphitpc[20];
+  AliFemtoCutMonitorParticleYPt *cutFail1YPtetaphitpc[20];
+  AliFemtoCutMonitorParticlePID *cutPass1PIDetaphitpc[20];
+  AliFemtoCutMonitorParticlePID *cutFail1PIDetaphitpc[20];
+  AliFemtoCutMonitorParticleYPt *cutPass2YPtetaphitpc[20];
+  AliFemtoCutMonitorParticleYPt *cutFail2YPtetaphitpc[20];
+  AliFemtoCutMonitorParticlePID *cutPass2PIDetaphitpc[20];
+  AliFemtoCutMonitorParticlePID *cutFail2PIDetaphitpc[20];
+  //  AliFemtoPairCutAntiGamma      *sqpcetaphitpc[20];
+  AliFemtoShareQualityPairCut      *sqpcetaphitpc[20];
+  //AliFemtoPairCutRadialDistance      *sqpcetaphitpc[20];
+  AliFemtoCorrFctnDirectYlm     *cylmetaphitpc[20];
+  AliFemtoCorrFctnDEtaDPhi      *cdedpetaphi[20];
+  AliFemtoChi2CorrFctn          *cchiqinvetaphitpc[20];
+  //AliFemtoKTPairCut             *ktpcuts[20*7];
+  //AliFemtoCorrFctnDirectYlm     *cylmkttpc[20*7];
+  //AliFemtoQinvCorrFctn          *cqinvkttpc[20*7];
+  //AliFemtoCorrFctn3DLCMSSym     *cq3dlcmskttpc[20*7];
+  AliFemtoKTPairCut             *ktpcuts[20*8];
+  AliFemtoCorrFctnDirectYlm     *cylmkttpc[20*8];
+  AliFemtoQinvCorrFctn          *cqinvkttpc[20*8];
+  AliFemtoCorrFctn3DLCMSSym     *cq3dlcmskttpc[20*8];
+  AliFemtoCorrFctnTPCNcls       *cqinvnclstpc[20];
+  AliFemtoShareQualityCorrFctn  *cqinvsqtpc[20*10];
+  AliFemtoChi2CorrFctn          *cqinvchi2tpc[20];
+  AliFemtoTPCInnerCorrFctn      *cqinvinnertpc[20*10];
+
+  // *** Begin pion-pion analysis ***
+  int aniter = 0;
+
+  for (int imult=0; imult<3; imult++) {
+    if (runmults[imult]) {
+      for (int ichg=0; ichg<2; ichg++) {
+       if (runch[ichg]) {
+         aniter = ichg*3+imult;
+
+         anetaphitpc[aniter] = new AliFemtoVertexMultAnalysis(10, -10.0, 10.0, 4, multbins[imult], multbins[imult+1]);
+         anetaphitpc[aniter]->SetNumEventsToMix(5);
+         anetaphitpc[aniter]->SetMinSizePartCollection(1);
+         anetaphitpc[aniter]->SetVerboseMode(kTRUE);
+      
+         mecetaphitpc[aniter] = new AliFemtoBasicEventCut();
+         mecetaphitpc[aniter]->SetEventMult(0,10000);
+         mecetaphitpc[aniter]->SetVertZPos(-10,10);
+
+         cutPassEvMetaphitpc[aniter] = new AliFemtoCutMonitorEventMult(Form("cutPass%stpcM%i", chrgs[ichg], imult));
+         cutFailEvMetaphitpc[aniter] = new AliFemtoCutMonitorEventMult(Form("cutFail%stpcM%i", chrgs[ichg], imult));
+         mecetaphitpc[aniter]->AddCutMonitor(cutPassEvMetaphitpc[aniter], cutFailEvMetaphitpc[aniter]);
+         
+         cutPassEvVetaphitpc[aniter] = new AliFemtoCutMonitorEventVertex(Form("cutPass%stpcM%i", chrgs[ichg], imult));
+         cutFailEvVetaphitpc[aniter] = new AliFemtoCutMonitorEventVertex(Form("cutFail%stpcM%i", chrgs[ichg], imult));
+         mecetaphitpc[aniter]->AddCutMonitor(cutPassEvVetaphitpc[aniter], cutFailEvVetaphitpc[aniter]);
+         
+         cutPassColletaphitpc[aniter] = new AliFemtoCutMonitorCollections(Form("cutPass%stpcM%i", chrgs[ichg], imult));
+          cutFailColletaphitpc[aniter] = new AliFemtoCutMonitorCollections(Form("cutFail%stpcM%i", chrgs[ichg], imult));
+          mecetaphitpc[aniter]->AddCutMonitor(cutPassColletaphitpc[aniter], cutFailColletaphitpc[aniter]);
+
+        // dtc1etaphitpc[aniter] = new AliFemtoESDTrackCut();
+        dtc1etaphitpc[aniter] = new AliFemtoKKTrackCut();
+
+         if (ichg == 0)
+           dtc1etaphitpc[aniter]->SetCharge(1.0);
+         else if (ichg == 1)
+           dtc1etaphitpc[aniter]->SetCharge(-1.0);
+
+         //  dtc1etaphitpc[aniter]->SetPt(0.12,4.0);
+         // dtc1etaphitpc[aniter]->SetEta(-1.2,1.2);
+          dtc1etaphitpc[aniter]->SetPt(0.14,1.5);
+          dtc1etaphitpc[aniter]->SetEta(-0.8,0.8);
+
+         //PID method
+          // dtc1etaphitpc[aniter]->SetMass(PionMass);
+          // dtc1etaphitpc[aniter]->SetMostProbablePion();
+          dtc1etaphitpc[aniter]->SetMass(KaonMass);
+          dtc1etaphitpc[aniter]->SetMostProbableKaon();
+         //dtc1etaphitpc[aniter]->SetPIDMethod(AliFemtoESDTrackCut::kContour);
+//------------------- November 2013 -----------------------------------< 
+         // new cuts to remove electron (do not take into analysis if 400<p<500) 
+        dtc1etaphitpc[aniter]->SetNsigmaTPCle250(2.0);
+        dtc1etaphitpc[aniter]->SetNsigmaTPC250_400(2.0);
+         dtc1etaphitpc[aniter]->SetNsigmaTPC400_450(2.0);
+         dtc1etaphitpc[aniter]->SetNsigmaTPC450_500(2.0);
+         dtc1etaphitpc[aniter]->SetNsigmaTPCge500(3.0);    
+         // new cuts are stronger, better separation of pion in TOF 
+         // when momentum is greater then 800 MeV/c
+         dtc1etaphitpc[aniter]->SetNsigmaTOF500_800(2.0);
+         dtc1etaphitpc[aniter]->SetNsigmaTOF800_1000(1.5);
+         dtc1etaphitpc[aniter]->SetNsigmaTOFge1000(1.0);
+         //------------------- November 2013 ----------------------------------->
+         //Track quality cuts
+        dtc1etaphitpc[aniter]->SetStatus(AliESDtrack::kTPCrefit|AliESDtrack::kITSrefit);
+         dtc1etaphitpc[aniter]->SetminTPCncls(50);
+         dtc1etaphitpc[aniter]->SetRemoveKinks(kTRUE);
+
+
+         dtc1etaphitpc[aniter]->SetMaxTPCChiNdof(4.0);
+         dtc1etaphitpc[aniter]->SetMaxITSChiNdof(36);    
+         dtc1etaphitpc[aniter]->SetLabel(kFALSE);
+         
+         //primary particles: hits in ITS + DCA cut
+         //dtc1etaphitpc[aniter]->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+         //                             AliESDtrackCuts::kAny);
+         dtc1etaphitpc[aniter]->SetMaxImpactZ(2.0);
+         dtc1etaphitpc[aniter]->SetMaxImpactXY(2.4);
+         //dtc1etaphitpc[aniter]->SetMaxImpactXYPtDep(0.0105, 0.0350, -1.1);
+         //dtc1etaphitpc[aniter]->SetMaxImpactXYPtDep(0.0182, 0.0350, -1.01);
+         //dtc1etaphitpc[aniter]->SetMaxSigmaToVertex(6.0);
+
+         //cutPass1YPtetaphitpc[aniter] = new AliFemtoCutMonitorParticleYPt(Form("cutPass1%stpcM%i", chrgs[ichg], imult), 0.13957);
+         //cutFail1YPtetaphitpc[aniter] = new AliFemtoCutMonitorParticleYPt(Form("cutFail1%stpcM%i", chrgs[ichg], imult), 0.13957);
+         cutPass1YPtetaphitpc[aniter] = new AliFemtoCutMonitorParticleYPt(Form("cutPass1%stpcM%i", chrgs[ichg], imult), 0.493677);
+         cutFail1YPtetaphitpc[aniter] = new AliFemtoCutMonitorParticleYPt(Form("cutFail1%stpcM%i", chrgs[ichg], imult), 0.493677);
+         dtc1etaphitpc[aniter]->AddCutMonitor(cutPass1YPtetaphitpc[aniter], cutFail1YPtetaphitpc[aniter]);
+         
+         //cutPass1PIDetaphitpc[aniter] = new AliFemtoCutMonitorParticlePID(Form("cutPass1%stpcM%i", chrgs[ichg], imult),0);
+         //cutFail1PIDetaphitpc[aniter] = new AliFemtoCutMonitorParticlePID(Form("cutFail1%stpcM%i", chrgs[ichg], imult),0);
+         cutPass1PIDetaphitpc[aniter] = new AliFemtoCutMonitorParticlePID(Form("cutPass1%stpcM%i", chrgs[ichg], imult),1);
+         cutFail1PIDetaphitpc[aniter] = new AliFemtoCutMonitorParticlePID(Form("cutFail1%stpcM%i", chrgs[ichg], imult),1);
+         dtc1etaphitpc[aniter]->AddCutMonitor(cutPass1PIDetaphitpc[aniter], cutFail1PIDetaphitpc[aniter]);
+         
+      dtc1etaphitpc[aniter]->SetStatus(AliESDtrack::kTPCin); ///my
+
+      
+         //sqpcetaphitpc[aniter] = new AliFemtoPairCutAntiGamma();
+         sqpcetaphitpc[aniter] = new AliFemtoShareQualityPairCut();
+         //sqpcetaphitpc[aniter] = new AliFemtoShareQualityTPCEntranceSepPairCut();
+         //sqpcetaphitpc[aniter] = new AliFemtoPairCutRadialDistance();
+         sqpcetaphitpc[aniter]->SetShareQualityMax(1.0);
+         sqpcetaphitpc[aniter]->SetShareFractionMax(0.05);
+         sqpcetaphitpc[aniter]->SetRemoveSameLabel(kFALSE);
+         //sqpcetaphitpc[aniter]->SetEtaDifferenceMinimum(0.016);
+         //sqpcetaphitpc[aniter]->SetPhiStarDifferenceMinimum(0.02);
+         //runtype==0
+         // sqpcetaphitpc[aniter]->SetMaxEEMinv(0.0);
+         // sqpcetaphitpc[aniter]->SetMaxThetaDiff(0.0);
+         // sqpcetaphitpc[aniter]->SetTPCEntranceSepMinimum(1.5);
+         // sqpcetaphitpc[aniter]->SetPhiStarDistanceMinimum(0.03);
+         // sqpcetaphitpc[aniter]->SetRadialDistanceMinimum(0.12, 0.03);
+         //sqpcetaphitpc[aniter]->SetEtaDifferenceMinimum(0.02);
+         //runtype==1
+         //        sqpcetaphitpc[aniter]->SetTPCEntranceSepMinimum(5.0);
+         //        sqpcetaphitpc[aniter]->SetPhiStarDistanceMinimum(0.03);
+         //sqpcetaphitpc[aniter]->SetRadialDistanceMinimum(1.2, 0.03);
+         //sqpcetaphitpc[aniter]->SetEtaDifferenceMinimum(0.02);
+         //runtype==2
+         //        sqpcetaphitpc[aniter]->SetTPCEntranceSepMinimum(1.0);
+         //        sqpcetaphitpc[aniter]->SetPhiStarDistanceMinimum(0.03);
+         //sqpcetaphitpc[aniter]->SetRadialDistanceMinimum(1.2, 0.045);
+         //sqpcetaphitpc[aniter]->SetEtaDifferenceMinimum(0.016);
+         //sqpcetaphitpc[aniter]->SetPhiStarDifferenceMinimum(0.02);
+         
+         anetaphitpc[aniter]->SetEventCut(mecetaphitpc[aniter]);
+         anetaphitpc[aniter]->SetFirstParticleCut(dtc1etaphitpc[aniter]);
+         anetaphitpc[aniter]->SetSecondParticleCut(dtc1etaphitpc[aniter]);
+         anetaphitpc[aniter]->SetPairCut(sqpcetaphitpc[aniter]);
+         
+         //Correlation functions
+
+         //Spherical harmonics (without kT bins)
+         //cylmetaphitpc[aniter] = new AliFemtoCorrFctnDirectYlm(Form("cylm%stpcM%i", chrgs[ichg], imult),3,nbinssh,0.0,shqmax,runshlcms);
+         //anetaphitpc[aniter]->AddCorrFctn(cylmetaphitpc[aniter]);
+
+         //Qinv (without kT bins)
+         cqinvkttpc[aniter] = new AliFemtoQinvCorrFctn(Form("cqinv%stpcM%i", chrgs[ichg], imult),nbinssh,0.0,shqmax);
+         anetaphitpc[aniter]->AddCorrFctn(cqinvkttpc[aniter]);
+
+         //3D cartesian (without kT bins)
+         if(run3d){
+           //cq3dlcmskttpc[aniter] = new AliFemtoCorrFctn3DLCMSSym(Form("cq3d%stpcM%i", chrgs[ichg], imult),60,0.5);
+           cq3dlcmskttpc[aniter] = new AliFemtoCorrFctn3DLCMSSym(Form("cq3d%stpcM%i", chrgs[ichg], imult),100,0.5);
+           anetaphitpc[aniter]->AddCorrFctn(cq3dlcmskttpc[aniter]);
+         }
+         
+         // cqinvnclstpc[aniter] = new AliFemtoCorrFctnTPCNcls(Form("cqinvncls%stpcM%i", chrgs[ichg], imult),nbinssh,0.0,shqmax);
+         // anetaphitpc[aniter]->AddCorrFctn(cqinvnclstpc[aniter]);
+
+         // cqinvchi2tpc[aniter] = new AliFemtoChi2CorrFctn(Form("cqinvchi2%stpcM%i", chrgs[ichg], imult),nbinssh,0.0,shqmax);
+         // anetaphitpc[aniter]->AddCorrFctn(cqinvchi2tpc[aniter]);
+
+         if (runktdep) {
+           int ktm;
+           for (int ikt=0; ikt<2; ikt++) {
+             ktm = aniter*2 + ikt;
+             ktpcuts[ktm] = new AliFemtoKTPairCut(ktrng[ikt], ktrng[ikt+1]);
+             
+             //cylmkttpc[ktm] = new AliFemtoCorrFctnDirectYlm(Form("cylm%stpcM%ikT%i", chrgs[ichg], imult, ikt),3,
+             //                                                             nbinssh, 0.0, shqmax, runshlcms);
+           //cylmkttpc[ktm]->SetPairSelectionCut(ktpcuts[ktm]);
+           //anetaphitpc[aniter]->AddCorrFctn(cylmkttpc[ktm]);
+             
+             cqinvkttpc[ktm] = new AliFemtoQinvCorrFctn(Form("cqinv%stpcM%ikT%i", chrgs[ichg], imult, ikt),nbinssh,0.0, shqmax);
+             cqinvkttpc[ktm]->SetPairSelectionCut(ktpcuts[ktm]);
+             anetaphitpc[aniter]->AddCorrFctn(cqinvkttpc[ktm]);
+
+             cqinvsqtpc[ktm] = new AliFemtoShareQualityCorrFctn(Form("cqinvsq%stpcM%ikT%i", chrgs[ichg], imult, ikt),nbinssh,0.0,shqmax);
+             cqinvsqtpc[ktm]->SetPairSelectionCut(ktpcuts[ktm]);
+             anetaphitpc[aniter]->AddCorrFctn(cqinvsqtpc[ktm]);
+
+             cqinvinnertpc[ktm] = new AliFemtoTPCInnerCorrFctn(Form("cqinvinner%stpcM%ikT%i", chrgs[ichg], imult, ikt),nbinssh,0.0,shqmax);
+             cqinvinnertpc[ktm]->SetPairSelectionCut(ktpcuts[ktm]);
+             cqinvinnertpc[ktm]->SetRadius(1.2);
+             anetaphitpc[aniter]->AddCorrFctn(cqinvinnertpc[ktm]);
+
+             if (run3d) {
+               //              cq3dlcmskttpc[ktm] = new AliFemtoCorrFctn3DLCMSSym(Form("cq3d%stpcM%ikT%i", chrgs[ichg], imult, ikt),60,(imult>3)?((imult>6)?((imult>7)?0.6:0.4):0.25):0.15);
+               cq3dlcmskttpc[ktm] = new AliFemtoCorrFctn3DLCMSSym(Form("cq3d%stpcM%ikT%i", chrgs[ichg], imult, ikt),60,0.5);
+               cq3dlcmskttpc[ktm]->SetPairSelectionCut(ktpcuts[ktm]);
+               anetaphitpc[aniter]->AddCorrFctn(cq3dlcmskttpc[ktm]);
+             }
+           }
+         }
+         
+         //cdedpetaphi[aniter] = new AliFemtoCorrFctnDEtaDPhi(Form("cdedp%stpcM%i", chrgs[ichg], imult),39, 39);
+         //anetaphitpc[aniter]->AddCorrFctn(cdedpetaphi[aniter]);
+         
+         Manager->AddAnalysis(anetaphitpc[aniter]);    
+       }
+      }
+    }
+  }
+  // *** End pion-pion analysis
+
+  return Manager;
+}                         
+                      
diff --git a/PWGCF/FLOW/macros/AddTaskPIDFlowQC.C b/PWGCF/FLOW/macros/AddTaskPIDFlowQC.C
new file mode 100644 (file)
index 0000000..2a92305
--- /dev/null
@@ -0,0 +1,287 @@
+//AddTask macro for higher harmonic flow analysis with QC method only.
+
+class AliAnalysisDataContainer;
+class AliFlowTrackCuts;
+class AliFlowEventCuts;
+
+
+void AddTaskPIDFlowQC(Int_t triggerSelectionString=AliVEvent::kMB,
+                                   Float_t etamin=-0.8,
+                                   Float_t etamax=0.8,
+                                   TString fileNameBase="AnalysisResults",
+                                   TString uniqueStr="Pion_02",
+                                   Int_t AODfilterBitRP = 272,
+                                   Int_t AODfilterBitPOI = 272,
+                                   Int_t charge=0,
+                                   Int_t MinTPCdedx = 10,
+                                   Int_t ncentrality = 6,
+                                   Bool_t doQA=kTRUE,
+                                   Bool_t isPID = kTRUE,
+                                   AliPID::EParticleType particleType=AliPID::kPion,
+                                   AliFlowTrackCuts::PIDsource sourcePID=AliFlowTrackCuts::kTOFbayesian) {
+
+// Define a range of the detector to exclude
+Bool_t ExcludeRegion = kFALSE;
+Double_t excludeEtaMin = -0.;
+Double_t excludeEtaMax = 0.;
+Double_t excludePhiMin = 0.;
+Double_t excludePhiMax = 0.;
+    
+int centrMin[9] = {0,5,10,20,30,40,50,60,70};
+int centrMax[9] = {5,10,20,30,40,50,60,70,80};
+const int ncentr = ncentrality;
+    
+    
+//---------Data selection----------
+//kMC, kGlobal, kESD_TPConly, kESD_SPDtracklet
+AliFlowTrackCuts::trackParameterType rptype = AliFlowTrackCuts::kTPCstandalone;
+AliFlowTrackCuts::trackParameterType poitype = AliFlowTrackCuts::kTPCstandalone;
+    
+//---------Parameter mixing--------
+//kPure - no mixing, kTrackWithMCkine, kTrackWithMCPID, kTrackWithMCpt
+AliFlowTrackCuts::trackParameterMix rpmix = AliFlowTrackCuts::kPure;
+AliFlowTrackCuts::trackParameterMix poimix = AliFlowTrackCuts::kPure;
+    
+const char* rptypestr = AliFlowTrackCuts::GetParamTypeName(rptype);
+const char* poitypestr = AliFlowTrackCuts::GetParamTypeName(poitype);
+
+
+//===========================================================================
+// EVENTS CUTS:
+AliFlowEventCuts* cutsEvent[ncentr];
+AliFlowTrackCuts* cutsRP[ncentr];
+AliFlowTrackCuts* cutsPOI[ncentr];
+TString outputSlotName[ncentr][4];
+TString suffixName[ncentr];
+    
+for(int icentr=0;icentr<ncentr;icentr++){
+    cutsEvent[icentr] = new AliFlowEventCuts(Form("eventcuts_%d",icentr));
+    //cutsEvent[icentr]->SetUsedDataset(is2011);
+    cutsEvent[icentr]->SetCentralityPercentileRange(centrMin[icentr],centrMax[icentr]);
+    cutsEvent[icentr]->SetCentralityPercentileMethod(AliFlowEventCuts::kV0);
+    //  cutsEvent->SetRefMultMethod(AliFlowEventCuts::kVZERO);
+    //cutsEvent->SetCentralityPercentileMethod(AliFlowEventCuts::kSPD1tracklets);
+    //cutsEvent->SetNContributorsRange(2);
+    cutsEvent[icentr]->SetPrimaryVertexZrange(-10.,10.);
+    cutsEvent[icentr]->SetQA(doQA);
+    cutsEvent[icentr]->SetCutTPCmultiplicityOutliers();
+    
+    
+    // RP TRACK CUTS:
+    cutsRP[icentr] = new AliFlowTrackCuts(Form("TPConlyRP_%d",icentr));
+    cutsRP[icentr]->SetParamType(rptype);
+    cutsRP[icentr]->SetParamMix(rpmix);
+    cutsRP[icentr]->SetPtRange(0.2,5.);
+    cutsRP[icentr]->SetEtaRange(etamin,etamax);
+    cutsRP[icentr]->SetMinNClustersTPC(70);
+    //  cutsRP->SetMinChi2PerClusterTPC(0.1);//
+    // cutsRP->SetMaxChi2PerClusterTPC(4.0);//
+    cutsRP[icentr]->SetMaxDCAToVertexXY(3.0);
+    cutsRP[icentr]->SetMaxDCAToVertexZ(3.0);
+    cutsRP[icentr]->SetAcceptKinkDaughters(kFALSE);
+    cutsRP[icentr]->SetMinimalTPCdedx(MinTPCdedx);
+    cutsRP[icentr]->SetAODfilterBit(AODfilterBitRP);
+    cutsRP[icentr]->SetQA(doQA);
+
+    
+    //POIs for SP and QC method
+    //===========================================================================
+    AliFlowTrackCuts  *SP_POI[ncentr];
+    //half window for POIs
+    //=======================SP POI Cuts
+    SP_POI[icentr] = DefinePOIcuts(icentr);
+
+    SP_POI[icentr]->GetBayesianResponse()->ForceOldDedx(); // for 2010 data to use old TPC PID Response instead of the official one
+    SP_POI[icentr]->SetParamType(poitype);
+    SP_POI[icentr]->SetParamMix(poimix);
+    SP_POI[icentr]->SetPtRange(0.2,5.);//
+    SP_POI[icentr]->SetMinNClustersTPC(70);
+    SP_POI[icentr]->SetEtaRange( etamin,etamax );
+  
+    // SP_POI->SetMinChi2PerClusterTPC(0.1); //
+    // SP_POI->SetMaxChi2PerClusterTPC(4.0); //
+    //  SP_POI->SetRequireITSRefit(kTRUE);
+    //  SP_POI->SetRequireTPCRefit(kTRUE);
+    //  SP_POI->SetMinNClustersITS(2);
+    //  SP_POI->SetMaxChi2PerClusterITS(1.e+09);
+    SP_POI[icentr]->SetMaxDCAToVertexXY(3.0);
+    SP_POI[icentr]->SetMaxDCAToVertexZ(3.0);
+    //SP_POI->SetDCAToVertex2D(kTRUE);
+    //SP_POI->SetMaxNsigmaToVertex(1.e+10);
+    //SP_POI->SetRequireSigmaToVertex(kFALSE);
+    SP_POI[icentr]->SetAcceptKinkDaughters(kFALSE);
+    if(isPID) SP_POI[icentr]->SetPID(particleType, sourcePID);//particleType, sourcePID
+    if (charge!=0) SP_POI[icentr]->SetCharge(charge);
+    //SP_POI->SetAllowTOFmismatch(kFALSE);
+    SP_POI[icentr]->SetRequireStrictTOFTPCagreement(kTRUE);
+    SP_POI[icentr]->SetMinimalTPCdedx(MinTPCdedx);
+    SP_POI[icentr]->SetAODfilterBit(AODfilterBitPOI);
+    SP_POI[icentr]->SetQA(doQA);
+    SP_POI[icentr]->SetPriors((centrMin[icentr]+centrMax[icentr])*0.5);
+
+
+
+
+    //=====================================================================
+    suffixName[icentr] = "highharmflow";
+    suffixName[icentr] += Form("%i_", centrMin[icentr]);
+    suffixName[icentr] += Form("%i_", centrMax[icentr]);
+
+    if(isPID){
+        suffixName[icentr]+=AliFlowTrackCuts::PIDsourceName(sourcePID);
+        suffixName[icentr]+="_";
+        suffixName[icentr]+=AliPID::ParticleName(particleType);//particleType
+    }
+    else{
+        suffixName[icentr]+="AllCharged";
+    }
+    if (charge<0) suffixName[icentr]+="-";
+    if (charge>0) suffixName[icentr]+="+";
+
+
+    for(int harmonic=2;harmonic<6;harmonic++){  //for v2,v3,v4 and v5
+        outputSlotName[icentr][harmonic-2] = "";
+        outputSlotName[icentr][harmonic-2]+=uniqueStr;
+        outputSlotName[icentr][harmonic-2]+=Form("_v%i_",harmonic);
+        outputSlotName[icentr][harmonic-2]+=cutsRP[icentr]->GetName();
+        outputSlotName[icentr][harmonic-2]+="_";
+        outputSlotName[icentr][harmonic-2]+=SP_POI[icentr]->GetName();
+        outputSlotName[icentr][harmonic-2]+=Form("_%i-",centrMin[icentr]);
+        outputSlotName[icentr][harmonic-2]+=Form("%i_",centrMax[icentr]);
+        
+        
+        if(isPID){
+            outputSlotName[icentr][harmonic-2]+=AliFlowTrackCuts::PIDsourceName(sourcePID);//sourcePID
+            outputSlotName[icentr][harmonic-2]+="_";
+            outputSlotName[icentr][harmonic-2]+=AliPID::ParticleName(particleType);//particleType
+        }
+        else{
+            outputSlotName[icentr][harmonic-2]+="AllCharged";
+        }
+        if (charge<0) outputSlotName[icentr][harmonic-2]+="-";
+        if (charge>0) outputSlotName[icentr][harmonic-2]+="+";
+    }
+}
+
+
+TString fileName(fileNameBase);
+fileName.Append(".root");
+
+
+    
+//====================================FLOWPACKAGE TASKS=========================//
+AliAnalysisDataContainer *cinput1[ncentr];
+AliAnalysisDataContainer *coutputFE[ncentr];
+AliAnalysisDataContainer* coutputFEQA[ncentr];
+AliAnalysisTaskFlowEvent *taskFE[ncentr];
+
+
+AliAnalysisDataContainer *coutputQC[ncentr][4];
+AliAnalysisTaskQCumulants *taskQC[ncentr][4];
+
+TString outputQA[ncentr];
+
+for (int icentr=0; icentr<ncentr; icentr++) {
+        
+    // Get the pointer to the existing analysis manager via the static access method.
+        //==============================================================================
+    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+    if (!mgr) {
+        Error("AddTaskFlowEvent", "No analysis manager to connect to.");
+        return NULL;
+    }
+        
+    // Check the analysis type using the event handlers connected to the analysis
+    // manager. The availability of MC handler can also be checked here.
+    //==============================================================================
+    if (!mgr->GetInputEventHandler()) {
+        ::Error("AddTaskFlowEvent", "This task requires an input event handler");
+        return NULL;
+    }
+
+    taskFE[icentr] = new AliAnalysisTaskFlowEvent(Form("TaskFlowEvent_%s",suffixName[icentr].Data()),"",doQA);
+    taskFE[icentr]->SelectCollisionCandidates(triggerSelectionString);
+    mgr->AddTask(taskFE[icentr]);
+
+    // Pass cuts for RPs and POIs to the task:
+    taskFE[icentr]->SetCutsEvent(cutsEvent[icentr]);
+    taskFE[icentr]->SetCutsRP(cutsRP[icentr]);
+    taskFE[icentr]->SetCutsPOI(SP_POI[icentr]);
+    if (cutsRP[icentr]->GetParamType()==AliFlowTrackCuts::kVZERO)
+    {
+        //TODO: since this is set in a static object all analyses in an analysis train
+        //will be affected.
+        taskFE[icentr]->SetHistWeightvsPhiMin(0.);
+        taskFE[icentr]->SetHistWeightvsPhiMax(200.);
+    }
+    
+    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+    
+    cinput1[icentr] = mgr->GetCommonInputContainer();
+    
+    coutputFE[icentr] = mgr->CreateContainer(Form("FlowEvent_%s",suffixName[icentr].Data()),AliFlowEventSimple::Class(),AliAnalysisManager::kExchangeContainer);
+
+    mgr->ConnectInput(taskFE[icentr],0,cinput1[icentr]);
+    mgr->ConnectOutput(taskFE[icentr],1,coutputFE[icentr]);
+    //==========================================================
+
+    for(int harm=2;harm<6;harm++){
+        
+        taskQC[icentr][harm-2] = new AliAnalysisTaskQCumulants(Form("TaskQCumulants_%s",outputSlotName[icentr][harm-2].Data()),kFALSE);
+        taskQC[icentr][harm-2]->SelectCollisionCandidates(triggerSelectionString);
+      //  taskQC[icentr][harm-2]->SetUsePhiWeights(WEIGHTS[0]);
+      //  taskQC[icentr][harm-2]->SetUsePtWeights(WEIGHTS[1]);
+      //  taskQC[icentr][harm-2]->SetUseEtaWeights(WEIGHTS[2]);
+        taskQC[icentr][harm-2]->SetCalculateCumulantsVsM(kFALSE);
+        taskQC[icentr][harm-2]->SetnBinsMult(10000);
+        taskQC[icentr][harm-2]->SetMinMult(0.);
+        taskQC[icentr][harm-2]->SetMaxMult(10000.);
+        taskQC[icentr][harm-2]->SetHarmonic(harm);
+        taskQC[icentr][harm-2]->SetApplyCorrectionForNUA(kFALSE);
+        taskQC[icentr][harm-2]->SetFillMultipleControlHistograms(kFALSE);
+        mgr->AddTask(taskQC[icentr][harm-2]);
+
+        TString outputQC = fileName;
+        outputQC += ":outputQCanalysis";
+        outputQC+= rptypestr;
+        
+        coutputQC[icentr][harm-2] = mgr->CreateContainer(Form("QC_%s",outputSlotName[icentr][harm-2].Data()),
+                                            TList::Class(),AliAnalysisManager::kOutputContainer,outputQC);
+        mgr->ConnectInput(taskQC[icentr][harm-2],0,coutputFE[icentr]);
+        mgr->ConnectOutput(taskQC[icentr][harm-2],1,coutputQC[icentr][harm-2]);
+
+    }
+
+
+    if (taskFE[icentr]->GetQAOn()) {
+        outputQA[icentr] = fileName;
+        outputQA[icentr] += ":QA";
+        coutputFEQA[icentr] = mgr->CreateContainer(Form("QA_%s",suffixName[icentr].Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputQA[icentr]);
+        mgr->ConnectOutput(taskFE[icentr],2,coutputFEQA[icentr]);
+    }
+
+
+}
+
+}
+
+//===========================================================================
+
+AliFlowEventCuts* DefinecutsEvent(Int_t icentr){
+    AliFlowEventCuts* cutsEvent = new AliFlowEventCuts(Form("eventcuts_%d",icentr));
+    return cutsEvent;
+}
+AliFlowTrackCuts* DefineRPcuts(Int_t icentr){
+    AliFlowTrackCuts* cutsRP = new AliFlowTrackCuts(Form("TPConlyRP_%d",icentr));
+    return cutsRP;
+}
+AliFlowTrackCuts* DefinePOIcuts(Int_t icentr){
+    AliFlowTrackCuts* cutsPOI = new AliFlowTrackCuts(Form("TPConlyPOI_%d",icentr));
+    return cutsPOI;
+}
+
+
+
+
+
diff --git a/PWGCF/FLOW/macros/AddTaskPIDFlowSP.C b/PWGCF/FLOW/macros/AddTaskPIDFlowSP.C
new file mode 100644 (file)
index 0000000..f1c0c8e
--- /dev/null
@@ -0,0 +1,341 @@
+//AddTask macro for higher harmonic flow analysis with SP method only.
+
+class AliAnalysisDataContainer;
+class AliFlowTrackCuts;
+class AliFlowEventCuts;
+
+
+void AddTaskPIDFlowSP(Int_t triggerSelectionString=AliVEvent::kMB,
+                                   Float_t etamin=-0.8,
+                                   Float_t etamax=0.8,
+                                   Float_t EtaGap=0.2,
+                                   TString fileNameBase="AnalysisResults",
+                                   TString uniqueStr="Pion_02",
+                                   TString Qvector ="Qa",
+                                   Int_t AODfilterBitRP = 272,
+                                   Int_t AODfilterBitPOI = 272,
+                                   Int_t charge=0,
+                                   Int_t MinTPCdedx = 10,
+                                   Int_t ncentrality = 6,
+                                   Bool_t doQA=kTRUE,
+                                   Bool_t isPID = kTRUE,
+                                   Bool_t VZERO = kFALSE, // use vzero sp method
+                                   AliPID::EParticleType particleType=AliPID::kPion,
+                                   AliFlowTrackCuts::PIDsource sourcePID=AliFlowTrackCuts::kTOFbayesian) {
+
+// Define a range of the detector to exclude
+Bool_t ExcludeRegion = kFALSE;
+Double_t excludeEtaMin = -0.;
+Double_t excludeEtaMax = 0.;
+Double_t excludePhiMin = 0.;
+Double_t excludePhiMax = 0.;
+   
+//Define the range for eta subevents (for SP method)
+Double_t minA = -0.8;//
+Double_t maxA = -0.5*EtaGap;//
+Double_t minB = +0.5*EtaGap;//
+Double_t maxB = +0.8;//
+
+    
+int centrMin[9] = {0,5,10,20,30,40,50,60,70};
+int centrMax[9] = {5,10,20,30,40,50,60,70,80};
+const int ncentr = ncentrality;
+    
+    
+//---------Data selection---------- ESD only!!!
+//kMC, kGlobal, kESD_TPConly, kESD_SPDtracklet
+AliFlowTrackCuts::trackParameterType rptype = AliFlowTrackCuts::kTPCstandalone;
+AliFlowTrackCuts::trackParameterType poitype = AliFlowTrackCuts::kTPCstandalone;
+    
+//---------Parameter mixing--------
+//kPure - no mixing, kTrackWithMCkine, kTrackWithMCPID, kTrackWithMCpt
+AliFlowTrackCuts::trackParameterMix rpmix = AliFlowTrackCuts::kPure;
+AliFlowTrackCuts::trackParameterMix poimix = AliFlowTrackCuts::kPure;
+    
+const char* rptypestr = AliFlowTrackCuts::GetParamTypeName(rptype);  //ESD
+const char* poitypestr = AliFlowTrackCuts::GetParamTypeName(poitype); //ESD
+
+    
+//===========================================================================
+// EVENTS CUTS:
+AliFlowEventCuts* cutsEvent[ncentr];
+AliFlowTrackCuts* cutsRP[ncentr];
+AliFlowTrackCuts* cutsPOI[ncentr];
+TString outputSlotName[ncentr][4];
+TString suffixName[ncentr];
+    
+for(int icentr=0;icentr<ncentr;icentr++){
+    cutsEvent[icentr] = new AliFlowEventCuts(Form("eventcuts_%d",icentr));
+    //cutsEvent[icentr]->SetUsedDataset(is2011);
+    cutsEvent[icentr]->SetCentralityPercentileRange(centrMin[icentr],centrMax[icentr]);
+    cutsEvent[icentr]->SetCentralityPercentileMethod(AliFlowEventCuts::kV0);
+    //  cutsEvent->SetRefMultMethod(AliFlowEventCuts::kVZERO);
+    //cutsEvent->SetCentralityPercentileMethod(AliFlowEventCuts::kSPD1tracklets);
+    //cutsEvent->SetNContributorsRange(2);
+    cutsEvent[icentr]->SetPrimaryVertexZrange(-10.,10.);
+    cutsEvent[icentr]->SetQA(doQA);
+    cutsEvent[icentr]->SetCutTPCmultiplicityOutliers();
+    
+    // RP TRACK CUTS:
+    cutsRP[icentr] = new AliFlowTrackCuts(Form("RP_%d",icentr));
+    if(!VZERO){
+        //cutsRP[icentr]->SetParamType(rptype);
+        cutsRP[icentr]->SetParamMix(rpmix);
+        cutsRP[icentr]->SetPtRange(0.2,5.);
+        cutsRP[icentr]->SetEtaRange(etamin,etamax);
+        cutsRP[icentr]->SetMinNClustersTPC(70);
+        //  cutsRP->SetMinChi2PerClusterTPC(0.1);//
+        // cutsRP->SetMaxChi2PerClusterTPC(4.0);//
+        cutsRP[icentr]->SetMaxDCAToVertexXY(3.0);
+        cutsRP[icentr]->SetMaxDCAToVertexZ(3.0);
+        cutsRP[icentr]->SetAcceptKinkDaughters(kFALSE);
+        cutsRP[icentr]->SetMinimalTPCdedx(MinTPCdedx);
+        cutsRP[icentr]->SetAODfilterBit(AODfilterBitRP);
+    }
+    
+    if(VZERO) { // use vzero sub analysis
+        cutsRP[icentr] = cutsRP[icentr]->GetStandardVZEROOnlyTrackCuts(); // select vzero tracks
+      //  cutsRP[icentr]->SetV0gainEqualizationPerRing(kFALSE);
+        cutsRP[icentr]->SetApplyRecentering(kTRUE);
+        EtaGap = 0.;
+    }//vzero is not a tracking device it is just a scintillator. so pt range or DCAtoVertex are not set here.
+    cutsRP[icentr]->SetQA(doQA);
+
+    
+    //POIs for SP and QC method
+    //===========================================================================
+    AliFlowTrackCuts  *SP_POI[ncentr];
+    //half window for POIs
+    //=======================SP POI Cuts
+    SP_POI[icentr] = DefinePOIcuts(icentr);
+
+    SP_POI[icentr]->GetBayesianResponse()->ForceOldDedx(); // for 2010 data to use old TPC PID Response instead of the official one
+    SP_POI[icentr]->SetParamType(poitype);
+    SP_POI[icentr]->SetParamMix(poimix);
+    SP_POI[icentr]->SetPtRange(0.2,5.);//
+    SP_POI[icentr]->SetMinNClustersTPC(70);
+    if(!VZERO && Qvector=="Qa"){
+        SP_POI[icentr]->SetEtaRange( +0.5*EtaGap, etamax );
+        printf(" > NOTE: Using half TPC (Qa) as POI selection u < \n");
+
+    }
+    if(!VZERO && Qvector=="Qb"){
+        SP_POI[icentr]->SetEtaRange( etamin,-0.5*EtaGap );
+        printf(" > NOTE: Using half TPC (Qb) as POI selection u < \n");
+
+    }
+    if(VZERO){
+        SP_POI[icentr]->SetEtaRange( etamin,etamax );
+        printf(" > NOTE: Using full TPC as POI selection u < \n");
+    }
+    // SP_POI->SetMinChi2PerClusterTPC(0.1); //
+    // SP_POI->SetMaxChi2PerClusterTPC(4.0); //
+    //  SP_POI->SetRequireITSRefit(kTRUE);
+    //  SP_POI->SetRequireTPCRefit(kTRUE);
+    //  SP_POI->SetMinNClustersITS(2);
+    //  SP_POI->SetMaxChi2PerClusterITS(1.e+09);
+    SP_POI[icentr]->SetMaxDCAToVertexXY(3.0);
+    SP_POI[icentr]->SetMaxDCAToVertexZ(3.0);
+    //SP_POI->SetDCAToVertex2D(kTRUE);
+    //SP_POI->SetMaxNsigmaToVertex(1.e+10);
+    //SP_POI->SetRequireSigmaToVertex(kFALSE);
+    SP_POI[icentr]->SetAcceptKinkDaughters(kFALSE);
+    if(isPID) SP_POI[icentr]->SetPID(particleType, sourcePID);//particleType, sourcePID
+    if (charge!=0) SP_POI[icentr]->SetCharge(charge);
+    //SP_POI->SetAllowTOFmismatch(kFALSE);
+    SP_POI[icentr]->SetRequireStrictTOFTPCagreement(kTRUE);
+    SP_POI[icentr]->SetMinimalTPCdedx(MinTPCdedx);
+    SP_POI[icentr]->SetAODfilterBit(AODfilterBitPOI);
+    SP_POI[icentr]->SetQA(doQA);
+    SP_POI[icentr]->SetPriors((centrMin[icentr]+centrMax[icentr])*0.5);
+
+
+
+
+    //=====================================================================
+    if(Qvector=="Qa") suffixName[icentr] = "Qa";
+    if(Qvector=="Qb") suffixName[icentr] = "Qb";
+    suffixName[icentr] += "-highharmflow";
+    suffixName[icentr] += Form("%i_", centrMin[icentr]);
+    suffixName[icentr] += Form("%i_", centrMax[icentr]);
+    suffixName[icentr] += Form("%.f_", EtaGap*10);
+
+    if(isPID){
+        suffixName[icentr]+=AliFlowTrackCuts::PIDsourceName(sourcePID);
+        suffixName[icentr]+="_";
+        suffixName[icentr]+=AliPID::ParticleName(particleType);//particleType
+    }
+    else{
+        suffixName[icentr]+="AllCharged";
+    }
+    if (charge<0) suffixName[icentr]+="-";
+    if (charge>0) suffixName[icentr]+="+";
+
+
+    for(int harmonic=2;harmonic<6;harmonic++){  //for v2,v3,v4 and v5
+        outputSlotName[icentr][harmonic-2] = "";
+        outputSlotName[icentr][harmonic-2]+=uniqueStr;
+        outputSlotName[icentr][harmonic-2]+=Form("_v%i_",harmonic);
+        outputSlotName[icentr][harmonic-2]+=cutsRP[icentr]->GetName();
+        outputSlotName[icentr][harmonic-2]+="_";
+        outputSlotName[icentr][harmonic-2]+=SP_POI[icentr]->GetName();
+        outputSlotName[icentr][harmonic-2]+=Form("_%i-",centrMin[icentr]);
+        outputSlotName[icentr][harmonic-2]+=Form("%i_",centrMax[icentr]);
+        
+        
+        if(isPID){
+            outputSlotName[icentr][harmonic-2]+=AliFlowTrackCuts::PIDsourceName(sourcePID);//sourcePID
+            outputSlotName[icentr][harmonic-2]+="_";
+            outputSlotName[icentr][harmonic-2]+=AliPID::ParticleName(particleType);//particleType
+        }
+        else{
+            outputSlotName[icentr][harmonic-2]+="AllCharged";
+        }
+        if (charge<0) outputSlotName[icentr][harmonic-2]+="-";
+        if (charge>0) outputSlotName[icentr][harmonic-2]+="+";
+    }
+}
+
+
+TString fileName(fileNameBase);
+fileName.Append(".root");
+
+
+    
+//====================================FLOWPACKAGE TASKS=========================//
+AliAnalysisDataContainer *cinput1[ncentr];
+AliAnalysisDataContainer *coutputFE[ncentr];
+AliAnalysisDataContainer* coutputFEQA[ncentr];
+AliAnalysisTaskFlowEvent *taskFE[ncentr];
+
+AliAnalysisDataContainer *flowEvent[ncentr][4];
+AliAnalysisTaskFilterFE *tskFilter[ncentr][4];
+
+AliAnalysisDataContainer *coutputSP[ncentr][4];
+AliAnalysisTaskScalarProduct *taskSP[ncentr][4];
+
+TString outputQA[ncentr];
+TString myNameSP[ncentr][4];
+TString slot[ncentr][4];
+
+for (int icentr=0; icentr<ncentr; icentr++) {
+        
+    // Get the pointer to the existing analysis manager via the static access method.
+        //==============================================================================
+    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+    if (!mgr) {
+        Error("AddTaskFlowEvent", "No analysis manager to connect to.");
+        return NULL;
+    }
+        
+    // Check the analysis type using the event handlers connected to the analysis
+    // manager. The availability of MC handler can also be checked here.
+    //==============================================================================
+    if (!mgr->GetInputEventHandler()) {
+        ::Error("AddTaskFlowEvent", "This task requires an input event handler");
+        return NULL;
+    }
+
+    taskFE[icentr] = new AliAnalysisTaskFlowEvent(Form("TaskFlowEvent_%s",suffixName[icentr].Data()),"",doQA);
+    taskFE[icentr]->SelectCollisionCandidates(triggerSelectionString);
+    taskFE[icentr]->SetSubeventEtaRange(minA, maxA, minB, maxB);
+    mgr->AddTask(taskFE[icentr]);
+
+    // Pass cuts for RPs and POIs to the task:
+    taskFE[icentr]->SetCutsEvent(cutsEvent[icentr]);
+    taskFE[icentr]->SetCutsRP(cutsRP[icentr]);
+    taskFE[icentr]->SetCutsPOI(SP_POI[icentr]);
+    if (cutsRP[icentr]->GetParamType()==AliFlowTrackCuts::kVZERO)
+    {
+        //TODO: since this is set in a static object all analyses in an analysis train
+        //will be affected.
+        taskFE[icentr]->SetHistWeightvsPhiMin(0.);
+        taskFE[icentr]->SetHistWeightvsPhiMax(200.);
+    }
+    
+    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+    
+    cinput1[icentr] = mgr->GetCommonInputContainer();
+    
+    coutputFE[icentr] = mgr->CreateContainer(Form("FlowEvent_%s",suffixName[icentr].Data()),AliFlowEventSimple::Class(),AliAnalysisManager::kExchangeContainer);
+
+    mgr->ConnectInput(taskFE[icentr],0,cinput1[icentr]);
+    mgr->ConnectOutput(taskFE[icentr],1,coutputFE[icentr]);
+    //==========================================================
+    
+    TString Species = "";
+    if(isPID) Species += AliPID::ParticleName(particleType);
+    else      Species += "Allcharged";
+        
+
+    for(int harm=2;harm<6;harm++){
+        myNameSP[icentr][harm-2] = "SP_";
+        myNameSP[icentr][harm-2] += Qvector;
+        myNameSP[icentr][harm-2] += Form("_v%i_%s_%.f",harm,outputSlotName[icentr][harm-2].Data(),EtaGap*10);
+        
+        flowEvent[icentr][harm-2] = mgr->CreateContainer( Form("Filter_%s", myNameSP[icentr][harm-2].Data()),
+                                                                   AliFlowEventSimple::Class(),
+                                                                   AliAnalysisManager::kExchangeContainer );
+        
+        tskFilter[icentr][harm-2] = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myNameSP[icentr][harm-2].Data()),cutsRP[icentr], NULL);
+        if(!VZERO){
+            tskFilter[icentr][harm-2]->SetSubeventEtaRange(etamin, -.5*EtaGap, +.5*EtaGap, etamax);
+        }
+        else tskFilter[icentr][harm-2]->SetSubeventEtaRange(-10, -1, +1, 10);
+        mgr->AddTask(tskFilter[icentr][harm-2]);
+        mgr->ConnectInput( tskFilter[icentr][harm-2],0,coutputFE[icentr]);
+        mgr->ConnectOutput(tskFilter[icentr][harm-2],1,flowEvent[icentr][harm-2]);
+        
+        
+        taskSP[icentr][harm-2] = new AliAnalysisTaskScalarProduct(Form("TaskScalarProduct_%s",outputSlotName[icentr][harm-2].Data()),kFALSE);
+        taskSP[icentr][harm-2]->SetHarmonic(harm);
+        taskSP[icentr][harm-2]->SelectCollisionCandidates(triggerSelectionString);
+        taskSP[icentr][harm-2]->SetRelDiffMsub(1.0);
+        taskSP[icentr][harm-2]->SetTotalQvector(Qvector);
+        taskSP[icentr][harm-2]->SetApplyCorrectionForNUA(kTRUE);
+        
+        TString outputSP = fileName;
+        outputSP += ":outputSPanalysis";
+        outputSP+= rptypestr;
+        slot[icentr][harm-2] = "SP_";
+        slot[icentr][harm-2] += outputSlotName[icentr][harm-2];
+        slot[icentr][harm-2] += "_";
+        slot[icentr][harm-2] += Qvector;
+        coutputSP[icentr][harm-2] = mgr->CreateContainer(Form("%s_%.f",slot[icentr][harm-2].Data(),EtaGap*10),
+                                         TList::Class(),AliAnalysisManager::kOutputContainer,outputSP);
+        mgr->AddTask(taskSP[icentr][harm-2]);
+        mgr->ConnectInput(taskSP[icentr][harm-2],0,flowEvent[icentr][harm-2]);
+        mgr->ConnectOutput(taskSP[icentr][harm-2],1,coutputSP[icentr][harm-2]);
+    }
+
+
+    if (taskFE[icentr]->GetQAOn()) {
+        outputQA[icentr] = fileName;
+        outputQA[icentr] += ":QA";
+        coutputFEQA[icentr] = mgr->CreateContainer(Form("QA_%s",suffixName[icentr].Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputQA[icentr]);
+        mgr->ConnectOutput(taskFE[icentr],2,coutputFEQA[icentr]);
+    }
+
+
+}
+}
+
+//===========================================================================
+
+AliFlowEventCuts* DefinecutsEvent(Int_t icentr){
+    AliFlowEventCuts* cutsEvent = new AliFlowEventCuts(Form("eventcuts_%d",icentr));
+    return cutsEvent;
+}
+AliFlowTrackCuts* DefineRPcuts(Int_t icentr){
+    AliFlowTrackCuts* cutsRP = new AliFlowTrackCuts(Form("RP_%d",icentr));
+    return cutsRP;
+}
+AliFlowTrackCuts* DefinePOIcuts(Int_t icentr){
+    AliFlowTrackCuts* cutsPOI = new AliFlowTrackCuts(Form("POI_%d",icentr));
+    return cutsPOI;
+}
+
+
+
+
index 125486346d6fc88cce041d0996df722639865a39..4f0e8bda964330148adcd591d80cdc0902c6fb41 100644 (file)
@@ -39,7 +39,9 @@
 #pragma link C++ class AliFemtoCutMonitorParticlePtPDGV0;
 #pragma link C++ class AliFemtoCutMonitorParticleEtCorr;
 #pragma link C++ class AliFemtoCorrFctnGammaMonitor;
+#pragma link C++ class AliFemtoCorrFctnMinvMonitor;
 #pragma link C++ class AliFemtoPairCutAntiGamma;
+#pragma link C++ class AliFemtoPairCutResonances;
 //#pragma link C++ class AliFemtoPhiPairCut;
 #pragma link C++ class AliFemtoQinvCorrFctnEMCIC;
 #pragma link C++ class AliFemtoCorrFctn3DSphericalEMCIC;
index fd01824b02ce0795e5ed058904f6c4e8b3982313..53d3904eb2f4c7237b5aa1b0e393096eae0af9a8 100644 (file)
@@ -69,6 +69,7 @@ The names are available via the function PairClassName(Int_t i)
 #include "AliDielectronPairLegCuts.h"
 #include "AliDielectronV0Cuts.h"
 #include "AliDielectronPID.h"
+#include "AliDielectronHistos.h"
 
 #include "AliDielectron.h"
 
@@ -1447,24 +1448,51 @@ void AliDielectron::FillMCHistograms(const AliVEvent *ev) {
 //______________________________________________
 void AliDielectron::SetCentroidCorrFunction(TF1 *fun, UInt_t varx, UInt_t vary, UInt_t varz)
 {
-  fun->GetHistogram()->GetXaxis()->SetUniqueID(varx);
-  fun->GetHistogram()->GetYaxis()->SetUniqueID(vary);
-  fun->GetHistogram()->GetZaxis()->SetUniqueID(varz);
-  // clone temporare histogram since otherwise it will not be streamed to file!
+  UInt_t valType[20] = {0};
+  valType[0]=varx;     valType[1]=vary;     valType[2]=varz;
+  AliDielectronHistos::StoreVariables(fun->GetHistogram(), valType);
+  // clone temporare histogram, otherwise it will not be streamed to file!
   TString key = Form("cntrd%d%d%d",varx,vary,varz);
   fPostPIDCntrdCorr = (TH1*)fun->GetHistogram()->Clone(key.Data());
   fPostPIDCntrdCorr->GetListOfFunctions()->AddAt(fun,0);
+  // check for corrections and add their variables to the fill map
+  if(fPostPIDCntrdCorr)  {
+    printf("POST TPC PID CORRECTION added for centroids:  ");
+    switch(fPostPIDCntrdCorr->GetDimension()) {
+    case 3: printf(" %s, ",fPostPIDCntrdCorr->GetZaxis()->GetName());
+    case 2: printf(" %s, ",fPostPIDCntrdCorr->GetYaxis()->GetName());
+    case 1: printf(" %s ",fPostPIDCntrdCorr->GetXaxis()->GetName());
+    }
+    printf("\n");
+    fUsedVars->SetBitNumber(varx, kTRUE);
+    fUsedVars->SetBitNumber(vary, kTRUE);
+    fUsedVars->SetBitNumber(varz, kTRUE);
+  }
+
 }
 //______________________________________________
 void AliDielectron::SetWidthCorrFunction(TF1 *fun, UInt_t varx, UInt_t vary, UInt_t varz)
 {
-  fun->GetHistogram()->GetXaxis()->SetUniqueID(varx);
-  fun->GetHistogram()->GetYaxis()->SetUniqueID(vary);
-  fun->GetHistogram()->GetZaxis()->SetUniqueID(varz);
-  // clone temporare histogram since otherwise it will not be streamed to file!
+  UInt_t valType[20] = {0};
+  valType[0]=varx;     valType[1]=vary;     valType[2]=varz;
+  AliDielectronHistos::StoreVariables(fun->GetHistogram(), valType);
+  // clone temporare histogram, otherwise it will not be streamed to file!
   TString key = Form("wdth%d%d%d",varx,vary,varz);
   fPostPIDWdthCorr = (TH1*)fun->GetHistogram()->Clone(key.Data());
   fPostPIDWdthCorr->GetListOfFunctions()->AddAt(fun,0);
+  // check for corrections and add their variables to the fill map
+  if(fPostPIDWdthCorr)  {
+    printf("POST TPC PID CORRECTION added for widths:  ");
+    switch(fPostPIDWdthCorr->GetDimension()) {
+    case 3: printf(" %s, ",fPostPIDWdthCorr->GetZaxis()->GetName());
+    case 2: printf(" %s, ",fPostPIDWdthCorr->GetYaxis()->GetName());
+    case 1: printf(" %s ",fPostPIDWdthCorr->GetXaxis()->GetName());
+    }
+    printf("\n");
+    fUsedVars->SetBitNumber(varx, kTRUE);
+    fUsedVars->SetBitNumber(vary, kTRUE);
+    fUsedVars->SetBitNumber(varz, kTRUE);
+  }
 }
 
 //______________________________________________
@@ -1475,6 +1503,7 @@ TObject* AliDielectron::InitEffMap(TString filename)
 
   TFile* file=TFile::Open(filename.Data());
   if(!file) return 0x0;
+       else printf("[I] AliDielectron::InitEffMap efficiency maps %s loaded! \n",filename.Data());
 
   // NOTE: the spline must have the 'variable name' stored in its fHistogram
   TSpline3 *hEff = (TSpline3*) file->Get("hEfficiency");
@@ -1487,7 +1516,6 @@ TObject* AliDielectron::InitEffMap(TString filename)
   if(!hFnd || !hGen) return 0x0;
 
   hFnd->Divide(hGen);
-  printf("[I] AliDielectron::InitEffMap efficiency maps %s with %d dimensions loaded! \n",filename.Data(),hFnd->GetNdimensions());
   return (hFnd->Clone("effMap"));
 }
 
index ab7550524e60d2287578c227c6451e5bcc9db746..eb3aa9930efc2375fa0db0a9da3d1da57e255ab7 100644 (file)
@@ -235,8 +235,7 @@ void AliDielectronHistos::UserProfile(const char* histClass,const char *name, co
        if(arr->GetEntriesFast()>2) pmax=(((TObjString*)arr->At(2))->GetString()).Atof();
        delete arr;
       }
-      hist=new TProfile(name,title,binsX->GetNrows()-1,binsX->GetMatrixArray());
-      ((TProfile*)hist)->BuildOptions(pmin,pmax,opt.Data());
+      hist=new TProfile(name,title,binsX->GetNrows()-1,binsX->GetMatrixArray(),pmin,pmax,opt.Data());
       //      printf(" name %s PROFILE options: pmin %.1f pmax %.1f err %s \n",name,((TProfile*)hist)->GetYmin(),((TProfile*)hist)->GetYmax(),((TProfile*)hist)->GetErrorOption() );
     }
 
@@ -1139,10 +1138,13 @@ void AliDielectronHistos::StoreVariables(TH1 *obj, UInt_t valType[20])
     obj->SetUniqueID(valType[3]); // Tprofile3D variable
   case 3:
     obj->GetZaxis()->SetUniqueID(valType[2]);
+    obj->GetZaxis()->SetName(Form("%s", AliDielectronVarManager::GetValueName(valType[2])));
   case 2:
     obj->GetYaxis()->SetUniqueID(valType[1]);
+    obj->GetYaxis()->SetName(Form("%s", AliDielectronVarManager::GetValueName(valType[1])));
   case 1:
     obj->GetXaxis()->SetUniqueID(valType[0]);
+    obj->GetXaxis()->SetName(Form("%s", AliDielectronVarManager::GetValueName(valType[0])));
   }
 
   return;
index 06974440bdb22196347c557539f699365a0c5c08..627eb05e597cf231741460825be9fffc4b3488ce 100644 (file)
@@ -218,8 +218,8 @@ const char* AliDielectronVarManager::fgkParticleNames[AliDielectronVarManager::k
   {"RndmPair",               "P",                                                  ""},
   {"Pairs",                  "pairs/event",                                        ""},
   //
-  {"X",                      "x_{prim.vtx}",                                       "(cm)"},
-  {"Y",                      "y_{prim.vtx}",                                       "(cm)"},
+  {"Xprim",                  "x_{prim.vtx}",                                       "(cm)"},
+  {"Yprim",                  "y_{prim.vtx}",                                       "(cm)"},
   {"Z",                      "z_{prim.vtx}",                                       "(cm)"},
   {"XRes",                   "#Delta x_{prim.vtx}",                                "(cm)"},
   {"YRes",                   "#Delta y_{prim.vtx}",                                "(cm)"},
index 79eb647f422a89fce7e1fb6ef694715ae7f3b06c..a5bc90a1ee73b6476629310d91dda97f7ab01aa6 100644 (file)
@@ -109,7 +109,8 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
   // specific cuts
   varCuts->AddCut(AliDielectronVarManager::kPt,           0.85, 1e30);
   varCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9);
-  varCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7.,   8.0);
+  if(periodLHC.Contains("LHC11h"))
+    varCuts->AddCut(AliDielectronVarManager::kTPCclsSegments,7.,   8.0);
   varCuts->AddCut(AliDielectronVarManager::kNclsTPC,     70.0, 160.0);
   //  trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // SPD any
 
@@ -129,7 +130,7 @@ void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
   //  pidCuts->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE, AliDielectronPID::kIfAvailable);
   // TPC inclusion
   if(periodLHC.Contains("LHC10h"))
-    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-2.6,4.7); // when eta correction OFF (LHC10h) [-2.0,+3.]
+    pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.0,4.7); // when eta correction OFF (LHC10h) [/*-2.0*/,+3.]
   else
     pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.0,4.3); // when eta correction OFF (LHC11h) [-1.5,+3.]
   //  pidCuts->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.0,0.,0.,kTRUE);
index cd7691fba2683b108296d30940545fbaf59448f1..116b175d139146f1f8bd0d148e5bdafdd945e395 100644 (file)
@@ -48,6 +48,7 @@ set ( SRCS
  PHOSTasks/UserTasks/AliCaloClusterInfo.cxx
  PHOSTasks/UserTasks/AliPHOSpPbPi0Header.cxx
  PHOSTasks/UserTasks/AliAnalysisTaskSEPHOSpPbPi0.cxx
+ PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx
 )
 
 string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" )
index 9dd0d60c4dc6de89e38fdc33e4ae7e82abb6e26a..76dac4a5ad210b5eac206c24bd595516ef49f2df 100755 (executable)
@@ -1654,6 +1654,10 @@ TList * AliAnaCalorimeterQA::GetCreateOutputObjects()
   TList * outputContainer = new TList() ; 
   outputContainer->SetName("QAHistos") ; 
   
+  // Init the number of modules, set in the class AliCalorimeterUtils
+  fNModules = GetCaloUtils()->GetNumberOfSuperModulesUsed();
+  if(fCalorimeter=="PHOS" && fNModules > 4) fNModules = 4;
+  
   //Histograms
   Int_t nptbins     = GetHistogramRanges()->GetHistoPtBins();          Float_t ptmax     = GetHistogramRanges()->GetHistoPtMax();           Float_t ptmin     = GetHistogramRanges()->GetHistoPtMin();
   Int_t nfineptbins = GetHistogramRanges()->GetHistoFinePtBins();          Float_t ptfinemax = GetHistogramRanges()->GetHistoFinePtMax();       Float_t ptfinemin = GetHistogramRanges()->GetHistoFinePtMin();
@@ -3078,7 +3082,7 @@ void AliAnaCalorimeterQA::InitParameters()
   AddToHistogramsName("AnaCaloQA_");
   
   fCalorimeter     = "EMCAL"; //or PHOS
-  fNModules        = 12; // set maximum to maximum number of EMCAL modules
+  fNModules        = 22; // set maximum to maximum number of EMCAL modules
   fNRCU            = 2;  // set maximum number of RCU in EMCAL per SM
   fTimeCutMin      = -9999999;
   fTimeCutMax      =  9999999;
index 1782953d43e15c3804e58e3ed8b9462ef80f0fce..ff6b2f0016d3b59458072facadbb1cf77f7face3 100755 (executable)
@@ -98,8 +98,6 @@ public:
     
   TString      GetCalorimeter()          const  { return fCalorimeter        ; }
   void         SetCalorimeter(TString calo)     { fCalorimeter = calo        ; }
-    
-  void         SetNumberOfModules(Int_t nmod)   { fNModules   = nmod         ; }
   
   Double_t     GetTimeCutMin()           const  { return fTimeCutMin         ; }
   Double_t     GetTimeCutMax()           const  { return fTimeCutMax         ; }
index 86d566a3a14c220574e04c6f71b9bef3c3ea337e..4f951c5dd639894cc84fb8603a21b9c434869588 100755 (executable)
@@ -152,7 +152,9 @@ fhPtNPileUpSPDVtxTimeCut(0),          fhPtNPileUpTrkVtxTimeCut(0),
 fhPtNPileUpSPDVtxTimeCut2(0),         fhPtNPileUpTrkVtxTimeCut2(0),
 fhPtPhotonNPileUpSPDVtx(0),           fhPtPhotonNPileUpTrkVtx(0),
 fhPtPhotonNPileUpSPDVtxTimeCut(0),    fhPtPhotonNPileUpTrkVtxTimeCut(0),
-fhPtPhotonNPileUpSPDVtxTimeCut2(0),   fhPtPhotonNPileUpTrkVtxTimeCut2(0)
+fhPtPhotonNPileUpSPDVtxTimeCut2(0),   fhPtPhotonNPileUpTrkVtxTimeCut2(0),
+fhEClusterSM(0),                      fhEPhotonSM(0),
+fhPtClusterSM(0),                     fhPtPhotonSM(0)
 {
   //default ctor
   
@@ -292,7 +294,7 @@ Bool_t  AliAnaPhoton::ClusterSelected(AliVCluster* calo, TLorentzVector mom, Int
   Float_t l0cluster  = calo->GetM02();
   Float_t etacluster = mom.Eta();
   Float_t phicluster = mom.Phi();
-  if(phicluster<0) phicluster+=TMath::TwoPi();
+  if(phicluster < 0) phicluster+=TMath::TwoPi();
   Float_t tofcluster   = calo->GetTOF()*1.e9;
   
   Bool_t matched = IsTrackMatched(calo,GetReader()->GetInputEvent());
@@ -306,6 +308,13 @@ Bool_t  AliAnaPhoton::ClusterSelected(AliVCluster* calo, TLorentzVector mom, Int
   
   if(ecluster > 0.5) fhEtaPhi->Fill(etacluster, phicluster);
   
+  Int_t   nSM  = GetModuleNumber(calo);
+  if(nSM < GetCaloUtils()->GetNumberOfSuperModulesUsed() && nSM >=0)
+  {
+    fhEClusterSM ->Fill(ecluster ,nSM);
+    fhPtClusterSM->Fill(ptcluster,nSM);
+  }
+  
   FillEMCALTriggerClusterBCHistograms(calo->GetID(),ecluster,tofcluster,etacluster,phicluster);
   
   //.......................................
@@ -347,7 +356,7 @@ Bool_t  AliAnaPhoton::ClusterSelected(AliVCluster* calo, TLorentzVector mom, Int
     if(! in ) return kFALSE ;
   }
   
-  if(GetDebug() > 2) printf("Fiducial cut passed \n");
+  if(GetDebug() > 2) printf("\t Fiducial cut passed \n");
   
   fhClusterCuts[6]->Fill(ecluster);
   
@@ -1797,6 +1806,34 @@ TList *  AliAnaPhoton::GetCreateOutputObjects()
     outputContainer->Add(fhClusterCuts[i]) ;
   }
   
+  fhEClusterSM = new TH2F("hEClusterSM","Raw clusters E and super-module number",
+                          nptbins,ptmin,ptmax,
+                          GetCaloUtils()->GetNumberOfSuperModulesUsed(),0,GetCaloUtils()->GetNumberOfSuperModulesUsed());
+  fhEClusterSM->SetYTitle("SuperModule ");
+  fhEClusterSM->SetXTitle("E (GeV)");
+  outputContainer->Add(fhEClusterSM) ;
+
+  fhPtClusterSM = new TH2F("hPtClusterSM","Raw clusters p_{T} and super-module number",
+                          nptbins,ptmin,ptmax,
+                          GetCaloUtils()->GetNumberOfSuperModulesUsed(),0,GetCaloUtils()->GetNumberOfSuperModulesUsed());
+  fhPtClusterSM->SetYTitle("SuperModule ");
+  fhPtClusterSM->SetXTitle("E (GeV)");
+  outputContainer->Add(fhPtClusterSM) ;
+  
+  fhEPhotonSM = new TH2F("hEPhotonSM","Selected clusters E and super-module number",
+                          nptbins,ptmin,ptmax,
+                          GetCaloUtils()->GetNumberOfSuperModulesUsed(),0,GetCaloUtils()->GetNumberOfSuperModulesUsed());
+  fhEPhotonSM->SetYTitle("SuperModule ");
+  fhEPhotonSM->SetXTitle("E (GeV)");
+  outputContainer->Add(fhEPhotonSM) ;
+  
+  fhPtPhotonSM = new TH2F("hPtPhotonSM","Selected clusters p_{T} and super-module number",
+                           nptbins,ptmin,ptmax,
+                           GetCaloUtils()->GetNumberOfSuperModulesUsed(),0,GetCaloUtils()->GetNumberOfSuperModulesUsed());
+  fhPtPhotonSM->SetYTitle("SuperModule ");
+  fhPtPhotonSM->SetXTitle("E (GeV)");
+  outputContainer->Add(fhPtPhotonSM) ;
+  
   fhNCellsE  = new TH2F ("hNCellsE","# of cells in cluster vs E of clusters", nptbins,ptmin,ptmax, nbins,nmin,nmax);
   fhNCellsE->SetXTitle("E (GeV)");
   fhNCellsE->SetYTitle("# of cells in cluster");
@@ -3785,6 +3822,13 @@ void  AliAnaPhoton::MakeAnalysisFillAOD()
     
     fhClusterCuts[9]->Fill(calo->E());
     
+    Int_t   nSM  = GetModuleNumber(calo);
+    if(nSM < GetCaloUtils()->GetNumberOfSuperModulesUsed() && nSM >=0)
+    {
+      fhEPhotonSM ->Fill(mom.E (),nSM);
+      fhPtPhotonSM->Fill(mom.Pt(),nSM);
+    }
+    
     fhNLocMax->Fill(calo->E(),nMaxima);
     
     // Matching after cuts
index b71acc179ee877b3068cf3834840d3ebf416a770..13f066288b0a98dc857b6c02aa717d5cf08388bd 100755 (executable)
@@ -439,10 +439,15 @@ class AliAnaPhoton : public AliAnaCaloTrackCorrBaseClass {
   TH2F * fhPtPhotonNPileUpSPDVtxTimeCut2;           //! photon pt vs number of spd pile-up vertices, time cut +-75 ns
   TH2F * fhPtPhotonNPileUpTrkVtxTimeCut2;           //! photon pt vs number of track pile-up vertices, time cut +- 75 ns
        
+  TH2F * fhEClusterSM ;                             //! cluster E distribution per SM, before any selection, after reader
+  TH2F * fhEPhotonSM  ;                             //! photon-like cluster E distribution per SM
+  TH2F * fhPtClusterSM;                             //! cluster E distribution per SM, before any selection, after reader
+  TH2F * fhPtPhotonSM ;                             //! photon-like cluster E distribution per SM
+  
   AliAnaPhoton(              const AliAnaPhoton & g) ; // cpy ctor
   AliAnaPhoton & operator = (const AliAnaPhoton & g) ; // cpy assignment
   
-  ClassDef(AliAnaPhoton,35)
+  ClassDef(AliAnaPhoton,36)
 
 } ;
  
index cbb2c0cdc22096e975ef0e1249144f8d3d208b3f..d6d407446f2a0a1a446d6aa28e54b53d9991d5c7 100755 (executable)
@@ -10,7 +10,7 @@
  * copies and that both the copyright notice and this permission notice   *
  * appear in the supporting documentation. The authors make no claims     *
  * about the suitability of this software for any purpose. It is          *
- * provided "as is" without express or implied warranty.                  *
+ * provided "as is" xwithout express or implied warranty.                  *
  **************************************************************************/
 
 //_________________________________________________________________________
@@ -60,7 +60,7 @@ ClassImp(AliAnaPi0)
 //______________________________________________________
 AliAnaPi0::AliAnaPi0() : AliAnaCaloTrackCorrBaseClass(),
 fEventsList(0x0), 
-fCalorimeter(""),            fNModules(12),              
+fCalorimeter(""),            fNModules(22),
 fUseAngleCut(kFALSE),        fUseAngleEDepCut(kFALSE),     fAngleCut(0),                 fAngleMaxCut(7.),
 fMultiCutAna(kFALSE),        fMultiCutAnaSim(kFALSE),
 fNPtCuts(0),                 fNAsymCuts(0),                fNCellNCuts(0),               fNPIDBits(0),  
@@ -68,6 +68,7 @@ fMakeInvPtPlots(kFALSE),     fSameSM(kFALSE),
 fFillSMCombinations(kFALSE), fCheckConversion(kFALSE),
 fFillBadDistHisto(kFALSE),   fFillSSCombinations(kFALSE),  
 fFillAngleHisto(kFALSE),     fFillAsymmetryHisto(kFALSE),  fFillOriginHisto(0),          fFillArmenterosThetaStar(0),
+fCheckAccInSector(kFALSE),
 //Histograms
 fhAverTotECluster(0),        fhAverTotECell(0),            fhAverTotECellvsCluster(0),
 fhEDensityCluster(0),        fhEDensityCell(0),            fhEDensityCellvsCluster(0),
@@ -85,17 +86,19 @@ fhCentrality(0x0),           fhCentralityNoPair(0x0),
 fhEventPlaneResolution(0x0),
 fhRealOpeningAngle(0x0),     fhRealCosOpeningAngle(0x0),   fhMixedOpeningAngle(0x0),     fhMixedCosOpeningAngle(0x0),
 // MC histograms
-fhPrimPi0E(0x0),             fhPrimPi0Pt(0x0),
+fhPrimPi0E(0x0),             fhPrimPi0Pt(0x0),             fhPrimPi0PtRejected(0x0),
 fhPrimPi0AccE(0x0),          fhPrimPi0AccPt(0x0),
 fhPrimPi0Y(0x0),             fhPrimPi0AccY(0x0),
+fhPrimPi0Yeta(0x0),          fhPrimPi0YetaYcut(0x0),       fhPrimPi0AccYeta(0x0),
 fhPrimPi0Phi(0x0),           fhPrimPi0AccPhi(0x0),
 fhPrimPi0OpeningAngle(0x0),  fhPrimPi0OpeningAngleAsym(0x0),fhPrimPi0CosOpeningAngle(0x0),
 fhPrimPi0PtCentrality(0),    fhPrimPi0PtEventPlane(0),
 fhPrimPi0AccPtCentrality(0), fhPrimPi0AccPtEventPlane(0),
-fhPrimEtaE(0x0),             fhPrimEtaPt(0x0),
+fhPrimEtaE(0x0),             fhPrimEtaPt(0x0),             fhPrimEtaPtRejected(0x0),
 fhPrimEtaAccE(0x0),          fhPrimEtaAccPt(0x0),
 fhPrimEtaY(0x0),             fhPrimEtaAccY(0x0),
-fhPrimEtaPhi(0x0),           fhPrimEtaAccPhi(0x0),         
+fhPrimEtaYeta(0x0),          fhPrimEtaYetaYcut(0x0),       fhPrimEtaAccYeta(0x0),
+fhPrimEtaPhi(0x0),           fhPrimEtaAccPhi(0x0),
 fhPrimEtaOpeningAngle(0x0),  fhPrimEtaOpeningAngleAsym(0x0),fhPrimEtaCosOpeningAngle(0x0),
 fhPrimEtaPtCentrality(0),    fhPrimEtaPtEventPlane(0),
 fhPrimEtaAccPtCentrality(0), fhPrimEtaAccPtEventPlane(0),
@@ -150,7 +153,6 @@ void AliAnaPi0::InitParameters()
   SetInputAODName("PWG4Particle");
   
   AddToHistogramsName("AnaPi0_");
-  fNModules = 12; // set maximum to maximum number of EMCAL modules
   
   fCalorimeter  = "PHOS";
   fUseAngleCut = kFALSE;
@@ -230,6 +232,10 @@ TList * AliAnaPi0::GetCreateOutputObjects()
   // Create histograms to be saved in output file and 
   // store them in fOutputContainer
   
+  // Init the number of modules, set in the class AliCalorimeterUtils
+  fNModules = GetCaloUtils()->GetNumberOfSuperModulesUsed();
+  if(fCalorimeter=="PHOS" && fNModules > 4) fNModules = 4;
+  
   //create event containers
   fEventsList = new TList*[GetNCentrBin()*GetNZvertBin()*GetNRPBin()] ;
 
@@ -687,10 +693,12 @@ TList * AliAnaPi0::GetCreateOutputObjects()
     outputContainer->Add(fhPrimPi0E) ;
     outputContainer->Add(fhPrimPi0AccE) ;
     
+    fhPrimPi0PtRejected = new TH1F("hPrimPi0PtRejected","Primary pi0 pt",nptbins,ptmin,ptmax) ;
     fhPrimPi0Pt     = new TH1F("hPrimPi0Pt","Primary pi0 pt, Y<1",nptbins,ptmin,ptmax) ;
     fhPrimPi0AccPt  = new TH1F("hPrimPi0AccPt","Primary pi0 pt with both photons in acceptance",nptbins,ptmin,ptmax) ;
     fhPrimPi0Pt   ->SetXTitle("p_{T} (GeV/c)");
     fhPrimPi0AccPt->SetXTitle("p_{T} (GeV/c)");
+    outputContainer->Add(fhPrimPi0PtRejected) ;
     outputContainer->Add(fhPrimPi0Pt) ;
     outputContainer->Add(fhPrimPi0AccPt) ;
     
@@ -699,14 +707,29 @@ TList * AliAnaPi0::GetCreateOutputObjects()
     fhPrimPi0Y   ->SetYTitle("Rapidity");
     fhPrimPi0Y   ->SetXTitle("p_{T} (GeV/c)");
     outputContainer->Add(fhPrimPi0Y) ;
+
+    fhPrimPi0Yeta      = new TH2F("hPrimPi0PseudoRapidity","PseudoRapidity of primary pi0",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
+    fhPrimPi0Yeta   ->SetYTitle("#eta");
+    fhPrimPi0Yeta   ->SetXTitle("p_{T} (GeV/c)");
+    outputContainer->Add(fhPrimPi0Yeta) ;
+
+    fhPrimPi0YetaYcut      = new TH2F("hPrimPi0PseudoRapidityYcut","PseudoRapidity of primary pi0, |Y|<1",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
+    fhPrimPi0YetaYcut   ->SetYTitle("#eta");
+    fhPrimPi0YetaYcut   ->SetXTitle("p_{T} (GeV/c)");
+    outputContainer->Add(fhPrimPi0YetaYcut) ;
     
-    fhPrimPi0AccY   = new TH2F("hPrimPi0AccRapidity","Rapidity of primary pi0",nptbins,ptmin,ptmax,netabins,etamin,etamax) ; 
+    fhPrimPi0AccY   = new TH2F("hPrimPi0AccRapidity","Rapidity of primary pi0 with accepted daughters",nptbins,ptmin,ptmax,netabins,etamin,etamax) ;
     fhPrimPi0AccY->SetYTitle("Rapidity");
     fhPrimPi0AccY->SetXTitle("p_{T} (GeV/c)");
     outputContainer->Add(fhPrimPi0AccY) ;
     
+    fhPrimPi0AccYeta      = new TH2F("hPrimPi0AccPseudoRapidity","PseudoRapidity of primary pi0 with accepted daughters",nptbins,ptmin,ptmax,netabins,etamin,etamax) ;
+    fhPrimPi0AccYeta   ->SetYTitle("#eta");
+    fhPrimPi0AccYeta   ->SetXTitle("p_{T} (GeV/c)");
+    outputContainer->Add(fhPrimPi0AccYeta) ;
+    
     Int_t nphibinsopen = TMath::Nint(nphibins*TMath::TwoPi()/(phimax-phimin));
-    fhPrimPi0Phi    = new TH2F("hPrimPi0Phi","Azimuthal of primary pi0, Y<1",nptbins,ptmin,ptmax,nphibinsopen,0,360) ; 
+    fhPrimPi0Phi    = new TH2F("hPrimPi0Phi","Azimuthal of primary pi0, Y<1",nptbins,ptmin,ptmax,nphibinsopen,0,360) ;
     fhPrimPi0Phi->SetYTitle("#phi (deg)");
     fhPrimPi0Phi->SetXTitle("p_{T} (GeV/c)");
     outputContainer->Add(fhPrimPi0Phi) ;
@@ -744,23 +767,40 @@ TList * AliAnaPi0::GetCreateOutputObjects()
     outputContainer->Add(fhPrimEtaE) ;
     outputContainer->Add(fhPrimEtaAccE) ;
     
+    fhPrimEtaPtRejected = new TH1F("hPrimEtaPtRejected","Primary eta pt",nptbins,ptmin,ptmax) ;
     fhPrimEtaPt     = new TH1F("hPrimEtaPt","Primary eta pt",nptbins,ptmin,ptmax) ;
     fhPrimEtaAccPt  = new TH1F("hPrimEtaAccPt","Primary eta pt with both photons in acceptance",nptbins,ptmin,ptmax) ;
     fhPrimEtaPt   ->SetXTitle("p_{T} (GeV/c)");
     fhPrimEtaAccPt->SetXTitle("p_{T} (GeV/c)");
+    outputContainer->Add(fhPrimEtaPtRejected) ;
     outputContainer->Add(fhPrimEtaPt) ;
     outputContainer->Add(fhPrimEtaAccPt) ;
     
-    fhPrimEtaY      = new TH2F("hPrimEtaRapidity","Rapidity of primary eta",nptbins,ptmin,ptmax,netabins,etamin,etamax) ; 
+    fhPrimEtaY      = new TH2F("hPrimEtaRapidity","Rapidity of primary eta",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
     fhPrimEtaY->SetYTitle("Rapidity");
     fhPrimEtaY->SetXTitle("p_{T} (GeV/c)");
     outputContainer->Add(fhPrimEtaY) ;
+
+    fhPrimEtaYeta      = new TH2F("hPrimEtaPseudoRapidityEta","PsuedoRapidity of primary eta",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
+    fhPrimEtaYeta->SetYTitle("Rapidity");
+    fhPrimEtaYeta->SetXTitle("p_{T} (GeV/c)");
+    outputContainer->Add(fhPrimEtaYeta) ;
+
+    fhPrimEtaYetaYcut      = new TH2F("hPrimEtaPseudoRapidityEtaYcut","PseudoRapidity of primary eta, |Y|<1",nptbins,ptmin,ptmax,netabinsopen,-2, 2) ;
+    fhPrimEtaYetaYcut->SetYTitle("PseudoRapidity");
+    fhPrimEtaYetaYcut->SetXTitle("p_{T} (GeV/c)");
+    outputContainer->Add(fhPrimEtaYetaYcut) ;
     
     fhPrimEtaAccY   = new TH2F("hPrimEtaAccRapidity","Rapidity of primary eta",nptbins,ptmin,ptmax, netabins,etamin,etamax) ; 
     fhPrimEtaAccY->SetYTitle("Rapidity");
     fhPrimEtaAccY->SetXTitle("p_{T} (GeV/c)");
     outputContainer->Add(fhPrimEtaAccY) ;
-    
+    fhPrimEtaAccYeta  = new TH2F("hPrimEtaAccPseudoRapidity","PseudoRapidity of primary eta",nptbins,ptmin,ptmax, netabins,etamin,etamax) ;
+    fhPrimEtaAccYeta->SetYTitle("PSeudoRapidity");
+    fhPrimEtaAccYeta->SetXTitle("p_{T} (GeV/c)");
+    outputContainer->Add(fhPrimEtaAccYeta) ;
+
     fhPrimEtaPhi    = new TH2F("hPrimEtaPhi","Azimuthal of primary eta",nptbins,ptmin,ptmax, nphibins,phimin*TMath::RadToDeg(),phimax*TMath::RadToDeg()) ; 
     fhPrimEtaPhi->SetYTitle("#phi (deg)");
     fhPrimEtaPhi->SetXTitle("p_{T} (GeV/c)");
@@ -1201,9 +1241,17 @@ void AliAnaPi0::FillAcceptanceHistograms()
         {
           Double_t pi0Pt = prim->Pt() ;
           Double_t pi0E  = prim->Energy() ;
-          if(pi0E == TMath::Abs(prim->Pz()))  continue ; //Protection against floating point exception
-          Double_t pi0Y  = 0.5*TMath::Log((pi0E-prim->Pz())/(pi0E+prim->Pz())) ;
-          Double_t phi   = TMath::RadToDeg()*prim->Phi() ;
+          if(pi0E == TMath::Abs(prim->Pz()))
+          {
+            if( pdg == 111 ) fhPrimPi0PtRejected->Fill(pi0Pt);
+            else             fhPrimEtaPtRejected->Fill(pi0Pt);
+            continue ; //Protection against floating point exception
+          }
+          
+          Double_t pi0Y    = 0.5*TMath::Log((pi0E-prim->Pz())/(pi0E+prim->Pz())) ;
+          Double_t pi0Yeta = prim->Eta() ;
+          Double_t phi     = TMath::RadToDeg()*prim->Phi() ;
+          
           if(pdg == 111)
           {
             if(TMath::Abs(pi0Y) < 1.0)
@@ -1211,10 +1259,12 @@ void AliAnaPi0::FillAcceptanceHistograms()
               fhPrimPi0E  ->Fill(pi0E ) ;
               fhPrimPi0Pt ->Fill(pi0Pt) ;
               fhPrimPi0Phi->Fill(pi0Pt, phi) ;
+              fhPrimPi0YetaYcut    ->Fill(pi0Pt,pi0Yeta) ;
               fhPrimPi0PtCentrality->Fill(pi0Pt,cen) ;
               fhPrimPi0PtEventPlane->Fill(pi0Pt,ep ) ;
             }
-            fhPrimPi0Y  ->Fill(pi0Pt, pi0Y) ;
+            fhPrimPi0Y   ->Fill(pi0Pt, pi0Y) ;
+            fhPrimPi0Yeta->Fill(pi0Pt, pi0Yeta) ;
           }
           else if(pdg == 221)
           {
@@ -1223,10 +1273,12 @@ void AliAnaPi0::FillAcceptanceHistograms()
               fhPrimEtaE  ->Fill(pi0E ) ;
               fhPrimEtaPt ->Fill(pi0Pt) ;
               fhPrimEtaPhi->Fill(pi0Pt, phi) ;
+              fhPrimEtaYetaYcut    ->Fill(pi0Pt,pi0Yeta) ;
               fhPrimEtaPtCentrality->Fill(pi0Pt,cen) ;
               fhPrimEtaPtEventPlane->Fill(pi0Pt,ep ) ;
             }
-            fhPrimEtaY  ->Fill(pi0Pt, pi0Y) ;
+            fhPrimEtaY   ->Fill(pi0Pt, pi0Y) ;
+            fhPrimEtaYeta->Fill(pi0Pt, pi0Yeta) ;
           }
           
           //Origin of meson
@@ -1316,7 +1368,25 @@ void AliAnaPi0::FillAcceptanceHistograms()
                   if( absID1 >= 0 && absID2 >= 0) 
                     inacceptance = kTRUE;
                   
-                  //                  if(GetEMCALGeometry()->Impact(phot1) && GetEMCALGeometry()->Impact(phot2)) 
+                  if(inacceptance && fCheckAccInSector)
+                  {
+                    Int_t sm1 = GetEMCALGeometry()->GetSuperModuleNumber(absID1);
+                    Int_t sm2 = GetEMCALGeometry()->GetSuperModuleNumber(absID2);
+                    
+                    Int_t j=0;
+                    Bool_t sameSector = kFALSE;
+                    for(Int_t isector = 0; isector < fNModules/2; isector++)
+                    {
+                      j=2*isector;
+                      if((sm1==j && sm2==j+1) || (sm1==j+1 && sm2==j)) sameSector = kTRUE;
+                    }
+                    
+                    if(sm1!=sm2 && !sameSector)  inacceptance = kFALSE;
+
+                    //if(sm1!=sm2)printf("sm1 %d, sm2 %d, same sector %d, in acceptance %d\n",sm1,sm2,sameSector,inacceptance);
+                  }
+                
+                  //                  if(GetEMCALGeometry()->Impact(phot1) && GetEMCALGeometry()->Impact(phot2))
                   //                    inacceptance = kTRUE;
                   if(GetDebug() > 2) printf("In %s Real acceptance? %d\n",fCalorimeter.Data(),inacceptance);
                 }
@@ -1335,10 +1405,11 @@ void AliAnaPi0::FillAcceptanceHistograms()
                 
                 if(pdg==111)
                 {
-                  fhPrimPi0AccE  ->Fill(pi0E) ;
-                  fhPrimPi0AccPt ->Fill(pi0Pt) ;
-                  fhPrimPi0AccPhi->Fill(pi0Pt, phi) ;
-                  fhPrimPi0AccY  ->Fill(pi0Pt, pi0Y) ;
+                  fhPrimPi0AccE   ->Fill(pi0E) ;
+                  fhPrimPi0AccPt  ->Fill(pi0Pt) ;
+                  fhPrimPi0AccPhi ->Fill(pi0Pt, phi) ;
+                  fhPrimPi0AccY   ->Fill(pi0Pt, pi0Y) ;
+                  fhPrimPi0AccYeta->Fill(pi0Pt,pi0Yeta) ;
                   fhPrimPi0AccPtCentrality->Fill(pi0Pt,cen) ;
                   fhPrimPi0AccPtEventPlane->Fill(pi0Pt,ep ) ;
                   
@@ -1351,10 +1422,11 @@ void AliAnaPi0::FillAcceptanceHistograms()
                 }
                 else if(pdg==221)
                 {
-                  fhPrimEtaAccE  ->Fill(pi0E ) ;
-                  fhPrimEtaAccPt ->Fill(pi0Pt) ;
-                  fhPrimEtaAccPhi->Fill(pi0Pt, phi) ;
-                  fhPrimEtaAccY  ->Fill(pi0Pt, pi0Y) ;
+                  fhPrimEtaAccE   ->Fill(pi0E ) ;
+                  fhPrimEtaAccPt  ->Fill(pi0Pt) ;
+                  fhPrimEtaAccPhi ->Fill(pi0Pt, phi) ;
+                  fhPrimEtaAccY   ->Fill(pi0Pt, pi0Y) ;
+                  fhPrimEtaAccYeta->Fill(pi0Pt, pi0Yeta) ;
                   fhPrimEtaAccPtCentrality->Fill(pi0Pt,cen) ;
                   fhPrimEtaAccPtEventPlane->Fill(pi0Pt,ep ) ;
                   
@@ -1394,10 +1466,18 @@ void AliAnaPi0::FillAcceptanceHistograms()
           Double_t pi0Pt = prim->Pt() ;
           Double_t pi0E  = prim->E() ;
           //printf("pi0, pt %2.2f, eta %f, phi %f\n",pi0Pt, prim->Eta(), prim->Phi());
-          if(pi0E == TMath::Abs(prim->Pz()))  continue ; //Protection against floating point exception
           
-          Double_t pi0Y  = 0.5*TMath::Log((prim->E()-prim->Pz())/(prim->E()+prim->Pz())) ;
-          Double_t phi   = TMath::RadToDeg()*prim->Phi() ;
+          if(pi0E == TMath::Abs(prim->Pz()))
+          {
+            if( pdg == 111 ) fhPrimPi0PtRejected->Fill(pi0Pt);
+            else             fhPrimEtaPtRejected->Fill(pi0Pt);
+            continue ; //Protection against floating point exception
+          }
+
+          Double_t pi0Y    = 0.5*TMath::Log((prim->E()-prim->Pz())/(prim->E()+prim->Pz())) ;
+          Double_t pi0Yeta = prim->Eta() ;
+          Double_t phi     = TMath::RadToDeg()*prim->Phi() ;
+
           if(pdg == 111)
           {
             if(TMath::Abs(pi0Y) < 1)
@@ -1405,10 +1485,12 @@ void AliAnaPi0::FillAcceptanceHistograms()
               fhPrimPi0E  ->Fill(pi0E ) ;
               fhPrimPi0Pt ->Fill(pi0Pt) ;
               fhPrimPi0Phi->Fill(pi0Pt, phi) ;
+              fhPrimPi0YetaYcut    ->Fill(pi0Pt,pi0Yeta) ;
               fhPrimPi0PtCentrality->Fill(pi0Pt,cen) ;
               fhPrimPi0PtEventPlane->Fill(pi0Pt,ep ) ;
             }
-            fhPrimPi0Y  ->Fill(pi0Pt, pi0Y) ;
+            fhPrimPi0Y   ->Fill(pi0Pt, pi0Y   ) ;
+            fhPrimPi0Yeta->Fill(pi0Pt, pi0Yeta) ;
           }
           else if(pdg == 221)
           {
@@ -1417,10 +1499,12 @@ void AliAnaPi0::FillAcceptanceHistograms()
               fhPrimEtaE  ->Fill(pi0E ) ;
               fhPrimEtaPt ->Fill(pi0Pt) ;
               fhPrimEtaPhi->Fill(pi0Pt, phi) ;
+              fhPrimEtaYetaYcut    ->Fill(pi0Pt,pi0Yeta) ;
               fhPrimEtaPtCentrality->Fill(pi0Pt,cen) ;
               fhPrimEtaPtEventPlane->Fill(pi0Pt,ep ) ;
             }
-            fhPrimEtaY  ->Fill(pi0Pt, pi0Y) ;
+            fhPrimEtaY   ->Fill(pi0Pt, pi0Y   ) ;
+            fhPrimEtaYeta->Fill(pi0Pt, pi0Yeta) ;
           }
           
           //Origin of meson
@@ -1510,6 +1594,24 @@ void AliAnaPi0::FillAcceptanceHistograms()
                   if( absID1 >= 0 && absID2 >= 0) 
                     inacceptance = kTRUE;
                   
+                  if(inacceptance && fCheckAccInSector)
+                  {
+                    Int_t sm1 = GetEMCALGeometry()->GetSuperModuleNumber(absID1);
+                    Int_t sm2 = GetEMCALGeometry()->GetSuperModuleNumber(absID2);
+                    
+                    Int_t j=0;
+                    Bool_t sameSector = kFALSE;
+                    for(Int_t isector = 0; isector < fNModules/2; isector++)
+                    {
+                      j=2*isector;
+                      if((sm1==j && sm2==j+1) || (sm1==j+1 && sm2==j)) sameSector = kTRUE;
+                    }
+                    
+                    if(sm1!=sm2 && !sameSector)  inacceptance = kFALSE;
+                    
+                    //if(sm1!=sm2)printf("sm1 %d, sm2 %d, same sector %d, in acceptance %d\n",sm1,sm2,sameSector,inacceptance);
+                  }
+                  
                   if(GetDebug() > 2) printf("In %s Real acceptance? %d\n",fCalorimeter.Data(),inacceptance);
                 }
                 else
@@ -1528,10 +1630,11 @@ void AliAnaPi0::FillAcceptanceHistograms()
                 if(pdg==111)
                 {
                   //                printf("ACCEPTED pi0: pt %2.2f, phi %3.2f, eta %1.2f\n",pi0Pt,phi,pi0Y);
-                  fhPrimPi0AccE  ->Fill(pi0E ) ;
-                  fhPrimPi0AccPt ->Fill(pi0Pt) ;
-                  fhPrimPi0AccPhi->Fill(pi0Pt, phi) ;
-                  fhPrimPi0AccY  ->Fill(pi0Pt, pi0Y) ;
+                  fhPrimPi0AccE   ->Fill(pi0E ) ;
+                  fhPrimPi0AccPt  ->Fill(pi0Pt) ;
+                  fhPrimPi0AccPhi ->Fill(pi0Pt, phi) ;
+                  fhPrimPi0AccY   ->Fill(pi0Pt, pi0Y) ;
+                  fhPrimPi0AccYeta->Fill(pi0Pt, pi0Yeta) ;
                   fhPrimPi0AccPtCentrality->Fill(pi0Pt,cen) ;
                   fhPrimPi0AccPtEventPlane->Fill(pi0Pt,ep ) ;
                   
@@ -1544,10 +1647,11 @@ void AliAnaPi0::FillAcceptanceHistograms()
                 }
                 else if(pdg==221)
                 {
-                  fhPrimEtaAccE  ->Fill(pi0E ) ;
-                  fhPrimEtaAccPt ->Fill(pi0Pt) ;
-                  fhPrimEtaAccPhi->Fill(pi0Pt, phi) ;
-                  fhPrimEtaAccY  ->Fill(pi0Pt, pi0Y) ;
+                  fhPrimEtaAccE   ->Fill(pi0E ) ;
+                  fhPrimEtaAccPt  ->Fill(pi0Pt) ;
+                  fhPrimEtaAccPhi ->Fill(pi0Pt, phi) ;
+                  fhPrimEtaAccY   ->Fill(pi0Pt, pi0Y) ;
+                  fhPrimEtaAccYeta->Fill(pi0Pt, pi0Yeta) ;
                   fhPrimEtaAccPtCentrality->Fill(pi0Pt,cen) ;
                   fhPrimEtaAccPtEventPlane->Fill(pi0Pt,ep ) ;
                   
index 1d06afd9d80d64f7967c5d657933cce3e3ae1b70..419c32432a7db5c3d8676c65283812fe308f7a3c 100755 (executable)
@@ -48,7 +48,6 @@ class AliAnaPi0 : public AliAnaCaloTrackCorrBaseClass {
   //Calorimeter options
   TString      GetCalorimeter()         const   { return fCalorimeter           ; }
   void         SetCalorimeter(TString & det)    { fCalorimeter         = det    ; }
-  void         SetNumberOfModules(Int_t nmod)   { fNModules            = nmod   ; }
   
   //-------------------------------
   // EVENT Bin Methods
@@ -125,6 +124,9 @@ class AliAnaPi0 : public AliAnaCaloTrackCorrBaseClass {
   void         SwitchOnMultipleCutAnalysisInSimulation()  { fMultiCutAnaSim = kTRUE  ; }
   void         SwitchOffMultipleCutAnalysisInSimulation() { fMultiCutAnaSim = kFALSE ; }
   
+  void         SwitchOnCheckAcceptanceInSector() { fCheckAccInSector   = kTRUE  ; }
+  void         SwitchOffCheckAcceptanceInSector(){ fCheckAccInSector   = kFALSE ; }
+  
   void         FillAcceptanceHistograms();
   void         FillMCVersusRecDataHistograms(Int_t    index1,  Int_t    index2,
                                              Float_t  pt1,     Float_t  pt2,
@@ -172,6 +174,8 @@ class AliAnaPi0 : public AliAnaCaloTrackCorrBaseClass {
   Bool_t   fFillOriginHisto;           // Fill histograms depending on their origin
   Bool_t   fFillArmenterosThetaStar;   // Fill armenteros histograms
   
+  Bool_t   fCheckAccInSector;          // Check that the decay pi0 falls in the same SM or sector
+  
   //Histograms
   
   //Event characterization
@@ -244,10 +248,14 @@ class AliAnaPi0 : public AliAnaCaloTrackCorrBaseClass {
   //Pi0 Acceptance
   TH1F *   fhPrimPi0E ;                //! Spectrum of Primary
   TH1F *   fhPrimPi0Pt ;               //! Spectrum of Primary
+  TH1F *   fhPrimPi0PtRejected ;       //! Spectrum of Primary,rejected
   TH1F *   fhPrimPi0AccE ;             //! Spectrum of primary with accepted daughters
   TH1F *   fhPrimPi0AccPt ;            //! Spectrum of primary with accepted daughters
   TH2F *   fhPrimPi0Y ;                //! Rapidity distribution of primary particles  vs pT
   TH2F *   fhPrimPi0AccY ;             //! Rapidity distribution of primary with accepted daughters  vs pT
+  TH2F *   fhPrimPi0Yeta ;             //! PseudoRapidity distribution of primary particles  vs pT
+  TH2F *   fhPrimPi0YetaYcut ;         //! PseudoRapidity distribution of primary particles  vs pT, Y<1
+  TH2F *   fhPrimPi0AccYeta ;          //! PseudoRapidity distribution of primary with accepted daughters  vs pT
   TH2F *   fhPrimPi0Phi ;              //! Azimutal distribution of primary particles  vs pT
   TH2F *   fhPrimPi0AccPhi;            //! Azimutal distribution of primary with accepted daughters  vs pT
   TH2F *   fhPrimPi0OpeningAngle ;     //! Opening angle of pair versus pair energy, primaries
@@ -261,10 +269,14 @@ class AliAnaPi0 : public AliAnaCaloTrackCorrBaseClass {
   //Eta acceptance
   TH1F *   fhPrimEtaE ;                //! Spectrum of Primary
   TH1F *   fhPrimEtaPt ;               //! Spectrum of Primary
+  TH1F *   fhPrimEtaPtRejected ;       //! Spectrum of Primary, rejected
   TH1F *   fhPrimEtaAccE ;             //! Spectrum of primary with accepted daughters
   TH1F *   fhPrimEtaAccPt ;            //! Spectrum of primary with accepted daughters
   TH2F *   fhPrimEtaY ;                //! Rapidity distribution of primary particles vs pT
   TH2F *   fhPrimEtaAccY ;             //! Rapidity distribution of primary with accepted daughters  vs pT
+  TH2F *   fhPrimEtaYeta ;             //! PseudoRapidity distribution of primary particles vs pT
+  TH2F *   fhPrimEtaYetaYcut ;         //! PseudoRapidity distribution of primary particles vs pT, Y<1
+  TH2F *   fhPrimEtaAccYeta ;          //! PseudoRapidity distribution of primary with accepted daughters  vs pT
   TH2F *   fhPrimEtaPhi ;              //! Azimutal distribution of primary particles  vs pT
   TH2F *   fhPrimEtaAccPhi;            //! Azimutal distribution of primary with accepted daughters     vs pT
   TH2F *   fhPrimEtaOpeningAngle ;     //! Opening angle of pair versus pair energy, eta primaries
@@ -302,15 +314,15 @@ class AliAnaPi0 : public AliAnaCaloTrackCorrBaseClass {
   TH2F *   fhReMCFromNotConversion ;   //! Invariant mass of 2 clusters not originated in conversions
   TH2F *   fhReMCFromMixConversion ;   //! Invariant mass of 2 clusters one from conversion and the other not
 
-  TH2F *    fhArmPrimPi0[4];           //! Armenteros plots for primary pi0 in 6 energy bins
-  TH2F *    fhArmPrimEta[4];           //! Armenteros plots for primary eta in 6 energy bins
-  TH2F *    fhCosThStarPrimPi0;        //! cos(theta*) plots vs E for primary pi0, same as asymmetry ...
-  TH2F *    fhCosThStarPrimEta;        //! cos(theta*) plots vs E for primary eta, same as asymmetry ...
+  TH2F *   fhArmPrimPi0[4];            //! Armenteros plots for primary pi0 in 6 energy bins
+  TH2F *   fhArmPrimEta[4];            //! Armenteros plots for primary eta in 6 energy bins
+  TH2F *   fhCosThStarPrimPi0;         //! cos(theta*) plots vs E for primary pi0, same as asymmetry ...
+  TH2F *   fhCosThStarPrimEta;         //! cos(theta*) plots vs E for primary eta, same as asymmetry ...
   
   AliAnaPi0(              const AliAnaPi0 & api0) ; // cpy ctor
   AliAnaPi0 & operator = (const AliAnaPi0 & api0) ; // cpy assignment
   
-  ClassDef(AliAnaPi0,26)
+  ClassDef(AliAnaPi0,27)
 } ;
 
 
index 69a09a2a7fd35c9392bda4c65207aa30d031cc91..ebbcf95ebdedb22202550287e8f39bf268392ad3 100755 (executable)
@@ -57,7 +57,7 @@ fFillPileUpHistograms(0),
 fFillWeightHistograms(kFALSE),      fFillTMHisto(0),
 fFillSelectClHisto(0),              fFillOnlySimpleSSHisto(1),          fFillEMCALBCHistograms(0),
 fInputAODGammaConvName(""),
-fCheckSplitDistToBad(0),            fNSuperModules(0),
+fCheckSplitDistToBad(0),
 // Histograms
 fhPt(0),                            fhE(0),
 fhPtEta(0),                         fhPtPhi(0),                         fhEtaPhi(0),
@@ -531,7 +531,7 @@ void AliAnaPi0EbE::FillSelectedClusterHistograms(AliVCluster* cluster, Float_t p
   
   fhNLocMaxPt->Fill(pt,nMaxima);
   
-  if(nSM < fNSuperModules && nSM >=0)
+  if(nSM < GetCaloUtils()->GetNumberOfSuperModulesUsed() && nSM >=0)
     fhNLocMaxPtSM[nSM]->Fill(pt,nMaxima);
   
   fhPtLambda0LocMax   [indexMax]->Fill(pt,l0);
@@ -1044,7 +1044,7 @@ TList *  AliAnaPi0EbE::GetCreateOutputObjects()
       fhSelectedMassPtLocMax[inlm]->SetXTitle("p_{T} (GeV/c)");
       outputContainer->Add(fhSelectedMassPtLocMax[inlm]) ;
       
-      for(Int_t iSM = 0; iSM < fNSuperModules; iSM++)
+      for(Int_t iSM = 0; iSM < GetCaloUtils()->GetNumberOfSuperModulesUsed(); iSM++)
       {
         fhSelectedMassPtLocMaxSM[inlm][iSM]  = new TH2F
         (Form("hSelectedMassPtLocMax%d_SM%d",inlm+1,iSM),Form("Selected #pi^{0} (#eta) pairs mass: p_{T} vs mass, NLM=%s for SM=%d",nlm[inlm].Data(),iSM),nptbins,ptmin,ptmax, nmassbins,massmin,massmax);
@@ -1234,7 +1234,7 @@ TList *  AliAnaPi0EbE::GetCreateOutputObjects()
     fhNLocMaxPt ->SetXTitle("p_{T} (GeV/c)");
     outputContainer->Add(fhNLocMaxPt) ;
 
-    for(Int_t iSM = 0; iSM < fNSuperModules; iSM++)
+    for(Int_t iSM = 0; iSM < GetCaloUtils()->GetNumberOfSuperModulesUsed(); iSM++)
     {
       fhNLocMaxPtSM[iSM] = new TH2F(Form("hNLocMaxPt_SM%d",iSM),Form("Number of local maxima in cluster, selected clusters in SM %d",iSM),
                                nptbins,ptmin,ptmax,20,0,20);
@@ -2571,9 +2571,6 @@ void AliAnaPi0EbE::InitParameters()
   fNLMECutMin[0] = 10.;
   fNLMECutMin[1] = 6. ;
   fNLMECutMin[2] = 6. ;
-  
-  fNSuperModules = 10;
-  
 }
 
 //__________________________________________________________________
@@ -3200,7 +3197,7 @@ void  AliAnaPi0EbE::MakeShowerShapeIdentification()
     fhSelectedMassPtLocMax[indexMax]->Fill(mom.Pt(),mass);
     
     Int_t   nSM  = GetModuleNumber(calo);
-    if(nSM < fNSuperModules && nSM >=0)
+    if(nSM < GetCaloUtils()->GetNumberOfSuperModulesUsed() && nSM >=0)
     {
       fhSelectedMassPtLocMaxSM   [indexMax][nSM]->Fill(mom.Pt(),mass);
       fhSelectedLambda0PtLocMaxSM[indexMax][nSM]->Fill(mom.Pt(),calo->GetM02());
index 6be20925bae8c2d8acd01a77d8108f1832ed3a05..887e8212ff916b81c9ee3eadc442c59945f49889 100755 (executable)
@@ -119,9 +119,6 @@ class AliAnaPi0EbE : public AliAnaCaloTrackCorrBaseClass {
   
   void           SwitchOnSplitClusterDistToBad()             { fCheckSplitDistToBad   = kTRUE  ; }
   void           SwitchOffSplitClusterDistToBad()            { fCheckSplitDistToBad   = kFALSE ; }
-
-  void           SetNumberOfSuperModules(Int_t nSM)          { fNSuperModules         = nSM    ; }
-
   
   //For histograms
   enum mcTypes   { kmcPhoton = 0, kmcConversion = 1, kmcPi0    = 2,  
@@ -155,8 +152,6 @@ class AliAnaPi0EbE : public AliAnaCaloTrackCorrBaseClass {
 
   Bool_t         fCheckSplitDistToBad;     // Check the distance to bad channel and to EMCal borders of split clusters
   
-  Int_t          fNSuperModules;           // Number of supermodules
-  
   //Histograms
   
   TH1F         * fhPt  ;                   //! Number of identified  pi0/eta vs pT
@@ -404,7 +399,7 @@ class AliAnaPi0EbE : public AliAnaCaloTrackCorrBaseClass {
   AliAnaPi0EbE(              const AliAnaPi0EbE & pi0ebe) ; // cpy ctor
   AliAnaPi0EbE & operator = (const AliAnaPi0EbE & pi0ebe) ; // cpy assignment
   
-  ClassDef(AliAnaPi0EbE,36)
+  ClassDef(AliAnaPi0EbE,37)
 } ;
 
 
index 9c41a35df1cc6fd04b5ae78bea262f3adc0fd173..6828dffe9af9231dcf8da727fdf58fa657e3b5d1 100644 (file)
@@ -576,7 +576,19 @@ AliCalorimeterUtils* ConfigureCaloUtils()
   printf("ConfigureCaloUtils() - EMCAL Recalibration ON? %d %d\n",recou->IsRecalibrationOn(), cu->IsRecalibrationOn());
   printf("ConfigureCaloUtils() - EMCAL BadMap        ON? %d %d\n",recou->IsBadChannelsRemovalSwitchedOn(), cu->IsBadChannelsRemovalSwitchedOn());
   
-    
+  
+  if(kCalorimeter=="PHOS")
+  {
+    if (kYears <  2014) cu->SetNumberOfSuperModulesUsed(3);
+    else                cu->SetNumberOfSuperModulesUsed(4);
+  }
+  else
+  {
+    if      (kYears == 2010) cu->SetNumberOfSuperModulesUsed(4); //EMCAL first year
+    else if (kYears <  2014) cu->SetNumberOfSuperModulesUsed(10);
+    else                     cu->SetNumberOfSuperModulesUsed(20);
+  }
+  
   // PHOS 
   cu->SwitchOffLoadOwnPHOSGeometryMatrices();
     
@@ -1453,17 +1465,6 @@ AliAnaCalorimeterQA* ConfigureQAAnalysis()
   ana->SwitchOffStudyWeight();
   ana->SwitchOnFillAllTrackMatchingHistogram();
   ana->SwitchOnFillAllCellTimeHisto() ;
-
-  if(kCalorimeter=="EMCAL")
-  {
-    if     (kYears==2010)  ana->SetNumberOfModules(4); 
-    else if(kYears==2011)  ana->SetNumberOfModules(10);
-    else                   ana->SetNumberOfModules(12); 
-  }
-  else 
-  {//PHOS
-    ana->SetNumberOfModules(3); 
-  }
   
   ana->AddToHistogramsName("QA_"); //Begining of histograms name
   SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
index 8c2f04de63d28319481d6ddda9412ef7ad2c06d9..7dc43eff254b2a34a2468ce276cfe725cb3b73b5 100644 (file)
@@ -169,8 +169,7 @@ AliAnalysisTaskCaloTrackCorrelationM *AddTaskCaloTrackCorrM(TString data, TStrin
     anapi0->SetMultiplicity(80, 120);
     anapi0->SetMultiBin(1);  
     anapi0->SwitchOffDataMC() ;//Access MC stack and fill more histograms
-    if(calorimeter=="PHOS") anapi0->SetNumberOfModules(3); //PHOS first year
-    else if(calorimeter=="EMCAL") anapi0->SetNumberOfModules(4); //EMCAL first year
     anapi0->GetHistogramRanges()->SetHistoPtRangeAndNBins(0, 50, 100) ;
     //anapi0->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
     //anapi0->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-0.8, 0.8, 200) ;
index e15df7eb823a64fe47181e5eea64cec0e03ddb84..f948d85743e7e25baf503d9332f71bf84d7baf81 100644 (file)
@@ -343,7 +343,6 @@ AliCalorimeterUtils* ConfigureCaloUtils(Bool_t nonlin = kTRUE, Bool_t exotic = k
                           kFALSE); // time calib
   if(timecut) recou->SetExoticCellDiffTimeCut(50.);
 
-  
   if( nonlin)
   { 
     printf("ConfigureCaloUtils() - Apply non linearity to EMCAL\n");
@@ -353,10 +352,8 @@ AliCalorimeterUtils* ConfigureCaloUtils(Bool_t nonlin = kTRUE, Bool_t exotic = k
   printf("ConfigureCaloUtils() - EMCAL Recalibration ON? %d %d\n",recou->IsRecalibrationOn(), cu->IsRecalibrationOn());
   printf("ConfigureCaloUtils() - EMCAL BadMap        ON? %d %d\n",recou->IsBadChannelsRemovalSwitchedOn(), cu->IsBadChannelsRemovalSwitchedOn());
   
-    
-  // PHOS 
-  cu->SwitchOffLoadOwnPHOSGeometryMatrices();
-    
+  cu->SetNumberOfSuperModulesUsed(10);
+
   if(print) cu->Print("");
   
   return cu;
@@ -582,14 +579,6 @@ AliAnaCalorimeterQA* ConfigureQAAnalysis(TString calorimeter = "EMCAL", Bool_t s
   ana->SwitchOnFillAllTrackMatchingHistogram();
   ana->SwitchOnFillAllCellTimeHisto() ;
 
-  if(calorimeter=="EMCAL")
-  {
-    ana->SetNumberOfModules(10);
-  }
-  else 
-  {//PHOS
-    ana->SetNumberOfModules(3); 
-  }
   
   ana->AddToHistogramsName("QA_"); //Begining of histograms name
   SetHistoRangeAndNBins(ana->GetHistogramRanges(),calorimeter); // see method below
index b933a42b606c0ec47f69869349f64e4ff6e7141f..490b3fa3598e95bc03230f1b3e4ee60430ea3af8 100644 (file)
@@ -444,6 +444,17 @@ AliCalorimeterUtils* ConfigureCaloUtils()
     cu->SwitchOnCorrectClusterLinearity();
   }
   
+  if(kCalorimeter=="PHOS")
+  {
+    if (kYears <  2014) cu->SetNumberOfSuperModulesUsed(3);
+    else                cu->SetNumberOfSuperModulesUsed(4);
+  }
+  else
+  {
+    if      (kYears == 2010) cu->SetNumberOfSuperModulesUsed(4); //EMCAL first year
+    else if (kYears <  2014) cu->SetNumberOfSuperModulesUsed(10);
+    else                     cu->SetNumberOfSuperModulesUsed(20);
+  }
   
   // PHOS 
   cu->SwitchOffLoadOwnPHOSGeometryMatrices();
@@ -591,13 +602,6 @@ AliAnaPi0* ConfigurePi0Analysis()
   
   // Calorimeter settings
   ana->SetCalorimeter(kCalorimeter);
-  if(kCalorimeter=="PHOS") ana->SetNumberOfModules(3); //PHOS first year
-  else 
-  {                   
-    if     (kYears == 2010) ana->SetNumberOfModules( 4); // EMCAL first year
-    else if(kYears == 2011) ana->SetNumberOfModules(10); // Second year
-    else                    ana->SetNumberOfModules(12);
-  }
   
   //settings for pp collision mixing
   ana->SwitchOnOwnMix(); //Off when mixing done with general mixing frame
@@ -755,17 +759,6 @@ AliAnaCalorimeterQA* ConfigureQAAnalysis()
   ana->SwitchOffStudyWeight();
   ana->SwitchOnFillAllTrackMatchingHistogram();
   
-  if(kCalorimeter=="EMCAL")
-  {
-    if     (kYears==2010)  ana->SetNumberOfModules(4); 
-    else if(kYears==2011)  ana->SetNumberOfModules(10);
-    else                   ana->SetNumberOfModules(12); 
-  }
-  else 
-  {//PHOS
-    ana->SetNumberOfModules(3); 
-  }
-  
   ana->AddToHistogramsName("QA_"); //Begining of histograms name
   SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
   
index 46b2614519e7ebc0dd1ec2d2f465e433a98aa69a..f8403414833ea4f7e8f4f14d01afdcf202047fb8 100644 (file)
@@ -241,6 +241,19 @@ AliCalorimeterUtils* ConfigureCaloUtils(Int_t kYears, TString kCollisions, TStri
   if(kClusterArray == "") recou->SwitchOnRejectExoticCluster();
   else                    recou->SwitchOffRejectExoticCluster();
   
+  if(kCalorimeter=="PHOS")
+  {
+    if (kYears <  2014) cu->SetNumberOfSuperModulesUsed(3);
+    else                cu->SetNumberOfSuperModulesUsed(4);
+  }
+  else
+  {
+    if      (kYears == 2010) cu->SetNumberOfSuperModulesUsed(4); //EMCAL first year
+    else if (kYears <  2014) cu->SetNumberOfSuperModulesUsed(10);
+    else                     cu->SetNumberOfSuperModulesUsed(20);
+  }
+
+  
   if(kPrint) cu->Print("");
   
   return cu;
@@ -349,11 +362,6 @@ AliAnaPi0* ConfigurePi0Analysis(TString kData, TString kCalorimeter, Int_t kYear
   
   // Calorimeter settings
   anapi0->SetCalorimeter(kCalorimeter);
-  if(kCalorimeter=="PHOS") anapi0->SetNumberOfModules(3); //PHOS first year
-  else {                   
-    if(kYears==2010) anapi0->SetNumberOfModules(4); //EMCAL first year
-    else             anapi0->SetNumberOfModules(10);
-  }
   
   //settings for pp collision mixing
   anapi0->SwitchOnOwnMix(); //Off when mixing done with general mixing frame
index 16e0efb1a26fbf9899e620a722b047cd43c4a21b..6c73f263f56023417b280e34cbe360e7e4a26ed3 100644 (file)
@@ -431,7 +431,19 @@ AliCalorimeterUtils* ConfigureCaloUtils()
   printf("ConfigureCaloUtils() - EMCAL Recalibration ON? %d %d\n",recou->IsRecalibrationOn(), cu->IsRecalibrationOn());
   printf("ConfigureCaloUtils() - EMCAL BadMap        ON? %d %d\n",recou->IsBadChannelsRemovalSwitchedOn(), cu->IsBadChannelsRemovalSwitchedOn());
   
-    
+  
+  if(kCalorimeter=="PHOS")
+  {
+    if (kYears <  2014) cu->SetNumberOfSuperModulesUsed(3);
+    else                cu->SetNumberOfSuperModulesUsed(4);
+  }
+  else
+  {
+    if      (kYears == 2010) cu->SetNumberOfSuperModulesUsed(4); //EMCAL first year
+    else if (kYears <  2014) cu->SetNumberOfSuperModulesUsed(10);
+    else                     cu->SetNumberOfSuperModulesUsed(20);
+  }
+  
   // PHOS 
   cu->SwitchOffLoadOwnPHOSGeometryMatrices();
     
@@ -734,17 +746,6 @@ AliAnaCalorimeterQA* ConfigureQAAnalysis()
   ana->SwitchOffStudyWeight();
   ana->SwitchOnFillAllTrackMatchingHistogram();
   
-  if(kCalorimeter=="EMCAL")
-  {
-    if     (kYears==2010)  ana->SetNumberOfModules(4); 
-    else if(kYears==2011)  ana->SetNumberOfModules(10);
-    else                   ana->SetNumberOfModules(12); 
-  }
-  else 
-  {//PHOS
-    ana->SetNumberOfModules(3); 
-  }
-  
   ana->AddToHistogramsName("QA_"); //Begining of histograms name
   SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
   
index 48585daf557fd4cb26712cd7bea889f9fc1a2552..efacaf1ba945d8318f8564cdfe9b0a6adb560dd4 100644 (file)
@@ -90,6 +90,10 @@ AliAnalysisTaskCaloTrackCorrelation *AddTaskCalorimeterQA(const char *suffix="de
   // Remove clusters close to borders, at least max energy cell is 1 cell away 
   cu->SetNumberOfCellsFromEMCALBorder(1);
 
+  if      (year == 2010) cu->SetNumberOfSuperModulesUsed(4); //EMCAL first year
+  else if (year <  2014) cu->SetNumberOfSuperModulesUsed(10);
+  else                   cu->SetNumberOfSuperModulesUsed(20);
+  
   AliEMCALRecoUtils* reco = cu->GetEMCALRecoUtils();
   reco->SwitchOnRejectExoticCell() ; // reject exotic cells, fill different histograms for exotic clusters and good clusters
   reco->SetExoticCellDiffTimeCut(10000); // Open  
@@ -130,22 +134,19 @@ AliAnalysisTaskCaloTrackCorrelation *AddTaskCalorimeterQA(const char *suffix="de
   
   if     (year==2010)
   {  
-    emcalQA->SetNumberOfModules(4); 
     emcalQA->GetHistogramRanges()->SetHistoPhiRangeAndNBins(79*TMath::DegToRad(), 121*TMath::DegToRad(), 200) ;
     emcalQA->GetHistogramRanges()->SetHistoXRangeAndNBins(-230,90,120);
     emcalQA->GetHistogramRanges()->SetHistoYRangeAndNBins(370,450,40);
   }
-  else if(year==2011)
+  else if(year==2011 || year==2012)
   {            
-    emcalQA->SetNumberOfModules(10); 
     emcalQA->GetHistogramRanges()->SetHistoPhiRangeAndNBins(79*TMath::DegToRad(), 191*TMath::DegToRad(), 200) ;
     emcalQA->GetHistogramRanges()->SetHistoXRangeAndNBins(-600,90,200);
     emcalQA->GetHistogramRanges()->SetHistoYRangeAndNBins(100,450,100);
   }
   else 
   {
-    emcalQA->SetNumberOfModules(12); 
-    emcalQA->GetHistogramRanges()->SetHistoPhiRangeAndNBins(79*TMath::DegToRad(), 181*TMath::DegToRad(), 200) ; // revise
+    emcalQA->GetHistogramRanges()->SetHistoPhiRangeAndNBins(79*TMath::DegToRad(), 320*TMath::DegToRad(), 400) ; // revise
     emcalQA->GetHistogramRanges()->SetHistoXRangeAndNBins(-700,90,200); // revise
     emcalQA->GetHistogramRanges()->SetHistoYRangeAndNBins(50,450,100);  // revise     
   }
index 81822d5183514a2983f81484962bee58351eef89..bd77dd128ce9d52baf021b17db0b9596c8fe1c37 100644 (file)
@@ -276,6 +276,11 @@ AliCalorimeterUtils* ConfigureCaloUtils(Bool_t simulation, Int_t debugLevel)
 
   cu->SwitchOnCorrectClusterLinearity();
 
+  if(kCalorimeter=="PHOS")
+    cu->SetNumberOfSuperModulesUsed(3);
+  else
+    cu->SetNumberOfSuperModulesUsed(10);
+  
   // PHOS 
   cu->SwitchOffLoadOwnPHOSGeometryMatrices();
     
@@ -378,14 +383,6 @@ AliAnaPi0* ConfigurePi0Analysis(TString calorimeter, TString collision,
   
   // Calorimeter settings
   ana->SetCalorimeter(calorimeter);
-  if(calorimeter=="PHOS") ana->SetNumberOfModules(3); //PHOS first year
-  else 
-  {                   
-//    if     (year == 2010) ana->SetNumberOfModules( 4); // EMCAL first year
-//    else if(year == 2011) ana->SetNumberOfModules(10); // Second year
-//    else                    ana->SetNumberOfModules(12);
-    ana->SetNumberOfModules(12);
-  }
   
   //settings for pp collision mixing
   ana->SwitchOnOwnMix(); //Off when mixing done with general mixing frame
@@ -570,18 +567,6 @@ AliAnaCalorimeterQA* ConfigureQAAnalysis(TString calorimeter,  Bool_t simulation
   ana->SwitchOnFillAllTrackMatchingHistogram();
   ana->SwitchOnFillAllCellTimeHisto() ;
   
-  if(calorimeter=="EMCAL")
-  {
-//    if     (year==2010)  ana->SetNumberOfModules(4); 
-//    else if(year==2011)  ana->SetNumberOfModules(10);
-//    else
-    ana->SetNumberOfModules(12);
-  }
-  else 
-  {//PHOS
-    ana->SetNumberOfModules(3); 
-  }
-  
   ana->AddToHistogramsName("QA_"); //Begining of histograms name
   SetHistoRangeAndNBins(ana->GetHistogramRanges(),calorimeter); // see method below
   
index 54907f117d39353a5d842a6a9fa13c356186f2e7..7c63bb438f7890a9948aa0e122cf783d92b6b860 100644 (file)
@@ -75,8 +75,11 @@ AliAnalysisTaskEMCALIsoPhoton::AliAnalysisTaskEMCALIsoPhoton() :
   fMaxEClus(0),
   fNCells50(0),
   fFilterBit(0),
+  fSelHybrid(kFALSE),
+  fFillQA(kFALSE),
   fESD(0),
   fAOD(0),
+  fVEvent(0),
   fMCEvent(0),
   fStack(0),
   fOutputList(0),
@@ -157,8 +160,11 @@ AliAnalysisTaskEMCALIsoPhoton::AliAnalysisTaskEMCALIsoPhoton(const char *name) :
   fMaxEClus(0),
   fNCells50(0),
   fFilterBit(0),
+  fSelHybrid(kFALSE),
+  fFillQA(kFALSE),
   fESD(0),
   fAOD(0),
+  fVEvent(0),
   fMCEvent(0),
   fStack(0),
   fOutputList(0),
@@ -408,8 +414,8 @@ void AliAnalysisTaskEMCALIsoPhoton::UserExec(Option_t *)
     if(!filename.Contains(fPathStrOpt.Data()))
       return;
   }
-  AliVEvent *event = (AliVEvent*)InputEvent();
-  if (!event) {
+  fVEvent = (AliVEvent*)InputEvent();
+  if (!fVEvent) {
     printf("ERROR: event not available\n");
     return;
   }
@@ -417,9 +423,9 @@ void AliAnalysisTaskEMCALIsoPhoton::UserExec(Option_t *)
   if(fDebug)
     printf("run number = %d\n",runnumber);
 
-  fESD = dynamic_cast<AliESDEvent*>(event);
+  fESD = dynamic_cast<AliESDEvent*>(fVEvent);
   if(!fESD){
-    fAOD = dynamic_cast<AliAODEvent*>(event);
+    fAOD = dynamic_cast<AliAODEvent*>(fVEvent);
     if(!fAOD){
       printf("ERROR: Invalid type of event!!!\n");
       return;
@@ -433,7 +439,7 @@ void AliAnalysisTaskEMCALIsoPhoton::UserExec(Option_t *)
     printf("event is ok,\n run number=%d\n",runnumber);
 
   
-  AliVVertex *pv = (AliVVertex*)event->GetPrimaryVertex();
+  AliVVertex *pv = (AliVVertex*)fVEvent->GetPrimaryVertex();
   Bool_t pvStatus = kTRUE;
   if(fESD){
     AliESDVertex *esdv = (AliESDVertex*)fESD->GetPrimaryVertex();
@@ -480,7 +486,9 @@ void AliAnalysisTaskEMCALIsoPhoton::UserExec(Option_t *)
       //printf("pt,eta,phi:%1.1f,%1.1f,%1.1f \n",track->Pt(),track->Eta(), track->Phi());
     }
     else if(aodTrack){
-      if(!aodTrack->TestFilterBit(fFilterBit))
+      if (fSelHybrid && !aodTrack->IsHybridGlobalConstrainedGlobal())       
+       continue ;
+      if(!fSelHybrid && !aodTrack->TestFilterBit(fFilterBit))
        continue;
       fSelPrimTracks->Add(track);
       /*if(fTrackMaxPt<track->Pt())
@@ -495,7 +503,7 @@ void AliAnalysisTaskEMCALIsoPhoton::UserExec(Option_t *)
     /*if(fESD)
       fGeom->SetMisalMatrix(fESD->GetEMCALMatrix(mod), mod);
       else*/
-    // if(event->GetEMCALMatrix(mod))
+    // if(fVEvent->GetEMCALMatrix(mod))
     fGeomMatrix[mod] = (TGeoHMatrix*) matEMCAL->At(mod);
     fGeom->SetMisalMatrix(fGeomMatrix[mod] , mod);
   }
@@ -548,7 +556,7 @@ void AliAnalysisTaskEMCALIsoPhoton::UserExec(Option_t *)
   FillMcHists();
   if(fDebug)
     printf("passed calling of FillMcHists\n");
-  if(fESD)
+  if(fFillQA)
     FillQA();
   if(fDebug)
     printf("passed calling of FillQA\n");
@@ -1083,11 +1091,24 @@ Float_t AliAnalysisTaskEMCALIsoPhoton::GetMcPtSumInCone(Float_t etaclus, Float_t
 //________________________________________________________________________
 void AliAnalysisTaskEMCALIsoPhoton::FillQA() 
 {
+
+  TObjArray *clusters = fESDClusters;
+
+  if (!clusters){
+    clusters = fAODClusters;
+    if(fDebug)
+      printf("ESD clusters empty...");
+  }
+  if (!clusters){
+    if(fDebug)
+      printf("  and AOD clusters as well!!!\n"); 
+    return;
+  }
   if(!fSelPrimTracks)
     return;
   const int ntracks = fSelPrimTracks->GetEntriesFast();
   const int ncells = fNCells50;//fESDCells->GetNumberOfCells();
-  const Int_t nclus = fESDClusters->GetEntries();
+  const Int_t nclus = clusters->GetEntries();
 
   fNTracks->Fill(ntracks);
   fEmcNCells->Fill(ncells);
@@ -1109,8 +1130,8 @@ void AliAnalysisTaskEMCALIsoPhoton::FillQA()
     }
   }
   for(int ic=0;ic<nclus;ic++){
-    AliVCluster *c = dynamic_cast<AliVCluster*>(fESDClusters->At(ic));
-    //AliESDCaloCluster *c = (AliESDCaloCluster*)fESDClusters->At(ic);
+    AliVCluster *c = dynamic_cast<AliVCluster*>(clusters->At(ic));
+    //AliESDCaloCluster *c = (AliESDCaloCluster*)clusters->At(ic);
     if(!c)
       continue;
     if(!c->IsEMCAL())
index 64e0d679aa3bb730328249c59d85f3018b6b4773..3ee7be8891f11163dd4ce5960815e89ff6d73b51 100644 (file)
@@ -63,7 +63,8 @@ class AliAnalysisTaskEMCALIsoPhoton : public AliAnalysisTaskSE {
                                            TString pa = "")     { fImportGeometryFromFile = im ; 
                                                                   fImportGeometryFilePath = pa ; }    
   void                  SetTrackFilterBit(ULong_t bit)          { fFilterBit = bit;  }
-  
+  void                  SetHybridOn()                          { fSelHybrid = kTRUE; }
+  void                  SetFillQA()                            { fFillQA = kTRUE; }
 
  protected:
   TObjArray             *fESDClusters;           //!pointer to EMCal clusters
@@ -97,12 +98,15 @@ class AliAnalysisTaskEMCALIsoPhoton : public AliAnalysisTaskSE {
   Double_t               fMaxEClus;              //cluster with highest energy in event
   Int_t                  fNCells50;              // variable to keep the number of cells with E>50 MeV
   ULong_t                fFilterBit;             // Track selection bit, for AODs 
+  Bool_t                 fSelHybrid;             // bool to select hybrid tracks
+  Bool_t                 fFillQA;                // bool to fill the QA plots
 
 
   
  private:
   AliESDEvent *fESD;      //! ESD object
   AliAODEvent *fAOD;      //! AOD object
+  AliVEvent   *fVEvent;   //! AliVEvent
   AliMCEvent  *fMCEvent;  //! MC event object
   AliStack    *fStack;    //!MC particles stack object
   TGeoHMatrix *fGeomMatrix[12];//! Geometry misalignment matrices for EMCal
index cd82973a76093963fdbbe711e7957b97b5649f20..8ee9d5e9f7f00111521d66af706e33ec30fd53fe 100644 (file)
@@ -4,7 +4,8 @@ AliAnalysisTaskEMCALIsoPhoton *AddTaskEMCALIsoPhoton(
                                                     TString period = "LHC11d",
                                                     TString trigbitname = "kEMC7",
                                                     TString geoname="EMCAL_COMPLETEV1",
-                                                    TString pathstrsel = "/"
+                                                    TString pathstrsel = "/",
+                                                    TString trackSelType = "standard"
                                                     )
 {
   // Get the pointer to the existing analysis manager via the static access method.
@@ -30,17 +31,24 @@ AliAnalysisTaskEMCALIsoPhoton *AddTaskEMCALIsoPhoton(
   ana->SetTriggerBit(trigbitname);
   ana->SetMcMode(isMC);
   ana->SetPathStringSelect(pathstrsel.Data());
+  gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
   AliESDtrackCuts *cutsp = new AliESDtrackCuts;
-  cutsp->SetMinNClustersTPC(70);
-  cutsp->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
-  cutsp->SetMaxChi2PerClusterTPC(4);
-  cutsp->SetRequireTPCRefit(kTRUE);
-  cutsp->SetAcceptKinkDaughters(kFALSE);
-  cutsp->SetMaxDCAToVertexZ(3.2);
-  cutsp->SetMaxDCAToVertexXY(2.4);
-  cutsp->SetDCAToVertex2D(kTRUE);
-  cutsp->SetPtRange(0.2);
-  cutsp->SetEtaRange(-1.0,1.0);
+  if(trackSelType == "standard"){
+    cutsp->SetMinNClustersTPC(70);
+    cutsp->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
+    cutsp->SetMaxChi2PerClusterTPC(4);
+    cutsp->SetRequireTPCRefit(kTRUE);
+    cutsp->SetAcceptKinkDaughters(kFALSE);
+    cutsp->SetMaxDCAToVertexZ(3.2);
+    cutsp->SetMaxDCAToVertexXY(2.4);
+    cutsp->SetDCAToVertex2D(kTRUE);
+    cutsp->SetPtRange(0.2);
+    cutsp->SetEtaRange(-1.0,1.0);
+  }
+  if(trackSelType == "hybrid"){
+    cutsp = CreateTrackCutsPWGJE(10001008);
+    ana->SetHybridOn();
+  }
   ana->SetPrimTrackCuts(cutsp);
   ana->SetPeriod(period.Data());
   ana->SetGeoName(geoname.Data());  
index 53b299e5ba4055a35b17daa944174d6bea415f6a..2df96eb2d4fae6f2d269a09b16bb3b44194f80ac 100644 (file)
@@ -188,6 +188,8 @@ fV0Reader(NULL),
    hESDTruePi0DalitzSecElectronPt(NULL),
    hNEvents(NULL),
    hNGoodESDTracks(NULL),
+   hNGoodESDTracksVsNGoodGammas(NULL),
+   hNGoodESDTracksVsNGoodVGammas(NULL),
    hEtaShift(NULL),
    fRandom(0),
    fUnsmearedPx(NULL),
@@ -197,6 +199,7 @@ fV0Reader(NULL),
    fnCuts(0),
    fiCut(0),
    fNumberOfESDTracks(0),
+   fNumberOfESDTrackskBoth(0),
    fMoveParticleAccordingToVertex(kFALSE),
    fIsHeavyIon(kFALSE),
    fDoMesonAnalysis(kTRUE),
@@ -341,6 +344,8 @@ AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1( const char*
    hESDTruePi0DalitzSecElectronPt(NULL),
    hNEvents(NULL),
    hNGoodESDTracks(NULL),
+   hNGoodESDTracksVsNGoodGammas(NULL),
+   hNGoodESDTracksVsNGoodVGammas(NULL),
    hEtaShift(NULL),
    fRandom(0),
    fUnsmearedPx(NULL),
@@ -350,6 +355,7 @@ AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1( const char*
    fnCuts(0),
    fiCut(0),
    fNumberOfESDTracks(0),
+   fNumberOfESDTrackskBoth(0),
    fMoveParticleAccordingToVertex(kFALSE),
    fIsHeavyIon(kFALSE),
    fDoMesonAnalysis(kTRUE),
@@ -515,7 +521,9 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
    if( fDoMesonQA ) {
      
    fQAFolder  = new TList*[fnCuts];  
-     
+   
+   hNGoodESDTracksVsNGoodGammas    = new TH2F*[fnCuts];
+   hNGoodESDTracksVsNGoodVGammas   = new TH2F*[fnCuts]; 
    hESDDalitzElectronAfterPt      = new TH1F*[fnCuts];
    hESDDalitzPositronAfterPt       = new TH1F*[fnCuts];
    hESDDalitzElectronAfterEta      = new TH1F*[fnCuts];
@@ -656,8 +664,13 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
                
        }
         
-      
-        
+      hNGoodESDTracksVsNGoodGammas[iCut] = new TH2F("hNGoodESDTracksVsNGoodGammas","hNGoodESDTracksVsNGoodGammas",200,-0.5,199.5,100,-0.5,99.5);
+      fQAFolder[iCut]->Add(hNGoodESDTracksVsNGoodGammas[iCut]);
+     
+      hNGoodESDTracksVsNGoodVGammas[iCut] = new TH2F("hNGoodESDTracksVsNVGoodVGammas","hNGoodESDTracksVsNGoodVGammas",200,-0.5,199.5,100,-0.5,99.5);
+      fQAFolder[iCut]->Add(hNGoodESDTracksVsNGoodVGammas[iCut]);
+     
+       
       hESDConvGammaZR[iCut]= new TH2F("ESD_ConvGamma_ConversionPoint_ZR","ESD_ConvGamma_ConversionPoint_ZR",1200,-150,150,480,0,120);
       fQAFolder[iCut]->Add(hESDConvGammaZR[iCut]);
      
@@ -1220,7 +1233,7 @@ void AliAnalysisTaskGammaConvDalitzV1::UserExec(Option_t *)
    fSelectorElectronIndex = fElecSelector->GetReconstructedElectronsIndex(); // Electrons from default Cut
    fSelectorPositronIndex = fElecSelector->GetReconstructedPositronsIndex(); // Positrons from default Cut
 
-   //CountESDTracks(); // Estimate Event Multiplicity
+   CountESDTracks(); // Estimate Event Multiplicity
    fNumberOfESDTracks = fV0Reader->GetNumberOfPrimaryTracks();
    //AddTaskContainers(); //Add conatiner
 
@@ -1288,6 +1301,14 @@ void AliAnalysisTaskGammaConvDalitzV1::UserExec(Option_t *)
       CalculateBackground();
       UpdateEventByEventData();
       
+      if ( fDoMesonQA ) {
+       
+      hNGoodESDTracksVsNGoodGammas[iCut]->Fill(fNumberOfESDTrackskBoth,fGoodGammas->GetEntries());
+      hNGoodESDTracksVsNGoodVGammas[iCut]->Fill(fNumberOfESDTrackskBoth,fGoodVirtualGammas->GetEntries());
+      
+      
+      }
+      
       
       if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
        
@@ -2481,12 +2502,13 @@ void AliAnalysisTaskGammaConvDalitzV1::CountESDTracks(){
    EsdTrackCuts->SetMaxDCAToVertexZ(2);
    EsdTrackCuts->SetEtaRange(-0.8, 0.8);
    EsdTrackCuts->SetPtRange(0.15);
+   EsdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kBoth);
 
-   fNumberOfESDTracks = 0;
+   fNumberOfESDTrackskBoth = 0;
    for(Int_t iTracks = 0; iTracks < fESDEvent->GetNumberOfTracks(); iTracks++){
       AliESDtrack* curTrack = fESDEvent->GetTrack(iTracks);
       if(!curTrack) continue;
-      if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
+      if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTrackskBoth++;
    }
    delete EsdTrackCuts;
    EsdTrackCuts=0x0;
index c78c11ab61ed34749c9dfd5f0568013d7ba14891..108abd56a9a0c7ef939f76e978288ec942d811b2 100644 (file)
@@ -218,6 +218,8 @@ class AliAnalysisTaskGammaConvDalitzV1: public AliAnalysisTaskSE
 
     TH1I **hNEvents;
     TH1I **hNGoodESDTracks;
+    TH2F **hNGoodESDTracksVsNGoodGammas;
+    TH2F **hNGoodESDTracksVsNGoodVGammas;
     TProfile **hEtaShift;
         
     TRandom3 fRandom;
@@ -228,6 +230,7 @@ class AliAnalysisTaskGammaConvDalitzV1: public AliAnalysisTaskSE
     Int_t fnCuts;
     Int_t fiCut;
     Int_t fNumberOfESDTracks;
+    Int_t fNumberOfESDTrackskBoth;
     Bool_t fMoveParticleAccordingToVertex;
     Bool_t fIsHeavyIon;
     Bool_t fDoMesonAnalysis;
index 6b9bd7e392d024fa1181afc186d9e8203c6705d2..5c8af547426fbb1ac8bdba2b1875e6f4207ac3da 100644 (file)
@@ -164,6 +164,7 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
    hNEvents(NULL),
    hNGoodESDTracks(NULL),
    hNGammaCandidates(NULL),
+   hNGoodESDTracksVsNGammaCanditates(NULL),
    hNV0Tracks(NULL),
    hEtaShift(NULL),
    tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
@@ -305,6 +306,7 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
    hNEvents(NULL),
    hNGoodESDTracks(NULL),
    hNGammaCandidates(NULL),
+   hNGoodESDTracksVsNGammaCanditates(NULL),
    hNV0Tracks(NULL),
    hEtaShift(NULL),
    tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
@@ -448,6 +450,7 @@ void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects(){
        hNEvents = new TH1I*[fnCuts];
        hNGoodESDTracks = new TH1I*[fnCuts];
        hNGammaCandidates = new TH1I*[fnCuts];
+       hNGoodESDTracksVsNGammaCanditates = new TH2F*[fnCuts];
        hNV0Tracks = new TH1I*[fnCuts];
        hEtaShift = new TProfile*[fnCuts];
        hESDConvGammaPt = new TH1F*[fnCuts];
@@ -520,6 +523,12 @@ void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects(){
                else if(fIsHeavyIon == 2) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
                else hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
                fESDList[iCut]->Add(hNGammaCandidates[iCut]);
+               if(fIsHeavyIon == 1) hNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",4000,0,4000,100,0,100);
+               else if(fIsHeavyIon == 2) hNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",400,0,400,50,0,50);
+               else hNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",200,0,200,50,0,50);
+               fESDList[iCut]->Add(hNGoodESDTracksVsNGammaCanditates[iCut]);
+
+               
                if(fIsHeavyIon == 1) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
                else if(fIsHeavyIon == 2) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2500,0,2500);
                else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",1500,0,1500);
@@ -1046,6 +1055,7 @@ void AliAnalysisTaskGammaConvV1::UserExec(Option_t *)
       ProcessPhotonCandidates(); // Process this cuts gammas
 
       hNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
+         hNGoodESDTracksVsNGammaCanditates[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks(),fGammaCandidates->GetEntries());
       if(fDoMesonAnalysis){ // Meson Analysis
          if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
             fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
index 9588224f3fe26251468f0197c42dbb9a7e1b035d..a361818964bf98894f74e48c6b61e06c55974728 100644 (file)
@@ -177,6 +177,7 @@ class AliAnalysisTaskGammaConvV1 : public AliAnalysisTaskSE {
    TH1I **hNEvents;
    TH1I **hNGoodESDTracks;
    TH1I **hNGammaCandidates;
+   TH2F **hNGoodESDTracksVsNGammaCanditates;
    TH1I **hNV0Tracks;
    TProfile **hEtaShift;
    TTree **tESDMesonsInvMassPtDcazMinDcazMaxFlag;
index a6d5fb336a5bebe3dda4f36e9d9e0b486844ff32..716689be93404df67e07f562a30e8d1b7e49d7a8 100644 (file)
@@ -1109,7 +1109,14 @@ Bool_t AliConversionCuts::PhotonCuts(AliConversionPhotonBase *photon,AliVEvent *
    cutIndex++; //11
 
    if (photonAOD){
-               if (fDoPhotonQualitySelectionCut && photonAOD->GetPhotonQuality() != fPhotonQualityCut){
+          UChar_t photonQuality = 0;
+           AliAODEvent * aodEvent = dynamic_cast<AliAODEvent*>(event);
+               if(aodEvent) {
+                       photonQuality = DeterminePhotonQualityAOD(photonAOD, event);
+               } else {
+                       photonQuality = photonAOD->GetPhotonQuality();
+               }       
+               if (fDoPhotonQualitySelectionCut && photonQuality != fPhotonQualityCut){
                        if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //11
                        return kFALSE;
                }       
@@ -1728,6 +1735,7 @@ void AliConversionCuts::LoadReweightingHistosMCFromFile() {
      return;
   }
   if (fNameHistoReweightingPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
+        cout << "I have to find: " <<  fNameHistoReweightingPi0.Data() << endl;
      TH1D *hReweightMCHistPi0temp = (TH1D*)f->Get(fNameHistoReweightingPi0.Data());
      hReweightMCHistPi0 = new TH1D(*hReweightMCHistPi0temp);
      hReweightMCHistPi0->SetDirectory(0);
@@ -1735,6 +1743,7 @@ void AliConversionCuts::LoadReweightingHistosMCFromFile() {
      else AliWarning(Form("%s not found in %s", fNameHistoReweightingPi0.Data() ,fPathTrFReweighting.Data()));
   }
   if (fNameFitDataPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
+         cout << "I have to find: " <<  fNameFitDataPi0.Data() << endl;
      TF1 *fFitDataPi0temp = (TF1*)f->Get(fNameFitDataPi0.Data());
      fFitDataPi0 = new TF1(*fFitDataPi0temp);
      if (fFitDataPi0) AliInfo(Form("%s has been loaded from %s", fNameFitDataPi0.Data(),fPathTrFReweighting.Data() ));
@@ -1742,6 +1751,7 @@ void AliConversionCuts::LoadReweightingHistosMCFromFile() {
   }
 
   if (fNameHistoReweightingEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
+        cout << "I have to find: " <<  fNameHistoReweightingEta.Data() << endl;
      TH1D *hReweightMCHistEtatemp = (TH1D*)f->Get(fNameHistoReweightingEta.Data());
      hReweightMCHistEta = new TH1D(*hReweightMCHistEtatemp);
      hReweightMCHistEta->SetDirectory(0);
@@ -1750,6 +1760,7 @@ void AliConversionCuts::LoadReweightingHistosMCFromFile() {
   }
 
   if (fNameFitDataEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
+        cout << "I have to find: " <<  fNameFitDataEta.Data() << endl;
      TF1 *fFitDataEtatemp = (TF1*)f->Get(fNameFitDataEta.Data());
      fFitDataEta = new TF1(*fFitDataEtatemp);
      if (fFitDataEta) AliInfo(Form("%s has been loaded from %s", fNameFitDataEta.Data(),fPathTrFReweighting.Data() ));
@@ -1757,6 +1768,7 @@ void AliConversionCuts::LoadReweightingHistosMCFromFile() {
 
   }
   if (fNameHistoReweightingK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
+        cout << "I have to find: " <<  fNameHistoReweightingK0s.Data() << endl;
      TH1D *hReweightMCHistK0stemp = (TH1D*)f->Get(fNameHistoReweightingK0s.Data());
      hReweightMCHistK0s = new TH1D(*hReweightMCHistK0stemp);
      hReweightMCHistK0s->SetDirectory(0);
@@ -1765,6 +1777,7 @@ void AliConversionCuts::LoadReweightingHistosMCFromFile() {
   }
 
   if (fNameFitDataK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
+        cout << "I have to find: " <<  fNameFitDataK0s.Data() << endl; 
      TF1 *fFitDataK0stemp = (TF1*)f->Get(fNameFitDataK0s.Data());
      fFitDataK0s = new TF1(*fFitDataK0stemp);
      if (fFitDataK0s) AliInfo(Form("%s has been loaded from %s", fNameFitDataK0s.Data(),fPathTrFReweighting.Data() ));
@@ -2428,7 +2441,6 @@ Bool_t AliConversionCuts::SetRCut(Int_t RCut){
       fMaxR = 70.;
       fMinR = 5.;
       break;
-      // High purity cuts for PbPb (remove first layers of material)
    case 5:
       fMaxR = 180.;
       fMinR = 10.;
@@ -2439,7 +2451,7 @@ Bool_t AliConversionCuts::SetRCut(Int_t RCut){
       break;
    case 7:
       fMaxR = 180.;
-      fMinR = 26.;
+      fMinR = 35.; //old 26.
       break;
    case 8:
       fMaxR = 180.;
@@ -3450,7 +3462,10 @@ Bool_t AliConversionCuts::IsTriggerSelected(AliVEvent *fInputEvent)
          else {
             if (fIsHeavyIon == 1) fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
             else if (fIsHeavyIon == 2) fOfflineTriggerMask = AliVEvent::kINT7;
-            else if (periodName.CompareTo("LHC11c") == 0 || periodName.CompareTo("LHC11d") == 0 || periodName.CompareTo("LHC11e") == 0 || periodName.CompareTo("LHC11f") == 0 || periodName.CompareTo("LHC11g") == 0  || periodName.CompareTo("LHC12a") == 0 || periodName.CompareTo("LHC12b") == 0 || periodName.CompareTo("LHC12c") == 0 || periodName.CompareTo("LHC12d") == 0 || periodName.CompareTo("LHC11f") == 0  || periodName.CompareTo("LHC13g") == 0 ) fOfflineTriggerMask = AliVEvent::kINT7;      
+            else if (periodName.CompareTo("LHC11c") == 0 || periodName.CompareTo("LHC11d") == 0 || periodName.CompareTo("LHC11e") == 0 || periodName.CompareTo("LHC11f") == 0 || periodName.CompareTo("LHC11g") == 0  || periodName.CompareTo("LHC12a") == 0 || periodName.CompareTo("LHC12b") == 0 || periodName.CompareTo("LHC12c") == 0 || periodName.CompareTo("LHC12d") == 0 || periodName.CompareTo("LHC12f") == 0  || periodName.CompareTo("LHC13g") == 0 ) {
+                               fOfflineTriggerMask = AliVEvent::kINT7;      
+//                             cout << "will take kINT7 as trigger mask" << endl; 
+                       }       
             else fOfflineTriggerMask = AliVEvent::kMB;
          }
       }
@@ -4280,3 +4295,29 @@ Bool_t AliConversionCuts::InPlaneOutOfPlaneCut(Double_t photonPhi, Double_t even
 
 }
 
+///________________________________________________________________________
+UChar_t AliConversionCuts::DeterminePhotonQualityAOD(AliAODConversionPhoton* photon, AliVEvent* eventDummy){
+
+   AliAODTrack * negTrack = static_cast<AliAODTrack*>(GetTrack(eventDummy, photon->GetTrackLabelNegative()));
+   AliAODTrack * posTrack = static_cast<AliAODTrack*>(GetTrack(eventDummy, photon->GetTrackLabelPositive()));
+
+   if(!negTrack || !posTrack) {
+        return 0;
+   }
+   if(negTrack->Charge() == posTrack->Charge()){
+        return 0;
+   }   
+   Int_t nClusterITSneg = negTrack->GetITSNcls();
+   Int_t nClusterITSpos = posTrack->GetITSNcls();
+//    cout << nClusterITSneg << "\t" << nClusterITSpos <<endl;
+   
+   if (nClusterITSneg > 1 && nClusterITSpos > 1){
+      return 3;
+   } else if (nClusterITSneg > 1 || nClusterITSpos > 1){
+      return 2;
+   } else {
+      return 1;
+   }
+   return 0;
+   
+}
index 3fb7b74454403be69378834a0662d89f25cc23d2..e78e7d531d68cf92c741563d36e1836007c8a145 100644 (file)
@@ -218,6 +218,7 @@ class AliConversionCuts : public AliAnalysisCuts {
       
    }
    void  LoadReweightingHistosMCFromFile ();
+   UChar_t DeterminePhotonQualityAOD(AliAODConversionPhoton*, AliVEvent*);
    // Event Cuts
    Bool_t IsCentralitySelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent = NULL);
    Double_t GetCentrality(AliVEvent *event);
index 3b80a1c593b52ee0ba8c5965b1418de21e617381..3f4dc14ecc916d3c8290520aeecb22392d87e705 100644 (file)
@@ -1383,6 +1383,10 @@ Bool_t AliDalitzElectronCuts::SetPtCut(Int_t ptCut)
        case 4: fPtMinCut = 0.5;
                fPtMaxCut = 0.7;
                break;
+       case 5: // 0.175 GeV
+               fPtMinCut = 0.175;
+               fPtMaxCut = 9999;
+               break;
        default:
                cout<<"Warning: PtCut not defined "<<ptCut<<endl;
                return kFALSE;
index 4ef0fa512e2f93ddadae979aea3b1a6c6f7b34c9..34a43591c81f5750d349541c583eb5f6f93f506f 100644 (file)
@@ -41,7 +41,11 @@ void AddTask_GammaConvDalitzQAV1_pPb(  Int_t trainConfig = 1,
    gSystem->Load("libTENDER.so");
    gSystem->Load("libTENDERSupplies.so");
 
-   
+  
+
+
+
   
    
    
@@ -274,14 +278,71 @@ if( trainConfig == 1 ) {  // No eta shift |Y| < 0.8
        
 } else if ( trainConfig  == 20 ) {
 
-       ConvCutarray[0] = "8000011002092170008260400000"; ElecCutarray[0] = "9047540023310262371"; MesonCutarray[0] = "01621035009000"; // standar cut Annika analysis:
+       ConvCutarray[0] = "8000011002092170008260400000"; ElecCutarray[0] = "9047540023310262371"; MesonCutarray[0] = "01621035009000"; // standard cut Annika analysis:
        
 } else if ( trainConfig  == 21 ) {
 
-       ConvCutarray[0] = "8000011002092170008260400000"; ElecCutarray[0] = "9047540013310262371"; MesonCutarray[0] = "01621035009000"; // standar cut Annika analysis: + kFirst
+       ConvCutarray[0] = "8000011002092170008260400000"; ElecCutarray[0] = "9047540013310262371"; MesonCutarray[0] = "01621035009000"; // standard cut Annika analysis: + kFirst
+       
+} else if ( trainConfig  == 22 ){
+  
+       ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540015310262171"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100 + Old Standard 2010 + kFirtst
+
+} else if ( trainConfig  == 23 ) {
+  
+       ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540085310262171"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100 + Old Standard 2010 + kBoth
+       
+} else if ( trainConfig  == 24 ){
+  
+       ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540015310262170"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100 + Old Standard 2010 + kFirtst No weights
+
+} else if ( trainConfig  == 25 ) {
+  
+       ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540085310262170"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100 + Old Standard 2010 + kBoth No weights
+       
+} else if ( trainConfig  == 26 ) {
+  
+       ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540013310262370"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + kFirts + No weights
+       
+} else if ( trainConfig  == 27 ) {
+  
+       ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540083310262370"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + kBoth  +  No weights
+       
+} else if ( trainConfig  == 28 ) {
+  
+       ConvCutarray[0] = "8000011002493603007200000000"; ElecCutarray[0] = "9047540023310262371"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + Pt > 0.075
+       
+} else if ( trainConfig  == 29 ) {
+  
+       ConvCutarray[0] = "8000011002193603007200000000"; ElecCutarray[0] = "9047540023310262371"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + Pt > 0.100
+       
+} else if ( trainConfig  == 30 ) {
+      
+       ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540023310263371"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + Pt{e} > 0.150
+       
+} else if ( trainConfig  == 31 ) {
+       
+       ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540023310265371"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + Pt{e} > 0.175
+       
+} else if ( trainConfig  == 32  ) {
+  
+       ConvCutarray[0] = "8000011007093603007200000000"; ElecCutarray[0] = "9047540023310262371"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011  + Photon R > 35 cm
+  
+} else if ( trainConfig  == 33  ) {
+  
+       ConvCutarray[0] = "8000011007093603007200000000"; ElecCutarray[0] = "9047540083310262371"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + kBoth + Photon R > 35 cm 
+       
+} else if ( trainConfig  == 34  ) {
+  
+       ConvCutarray[0] = "8000011007093603007200000000"; ElecCutarray[0] = "9047540083310262370"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + kBoth + Photon R > 35 cm + No weights 
 }
 
 
+
+
+
+
+
    TList *ConvCutList  = new TList();
    TList *MesonCutList = new TList();
    TList *ElecCutList  = new TList();
@@ -307,7 +368,9 @@ if( trainConfig == 1 ) {  // No eta shift |Y| < 0.8
           analysisCuts[i] = new AliConversionCuts();
       
 
-         if (  ( trainConfig >= 1 && trainConfig <= 6 ) || trainConfig == 9 || trainConfig == 11  || trainConfig == 13 || trainConfig == 14 || trainConfig == 17 || trainConfig == 18 || trainConfig == 19 || trainConfig == 20 || trainConfig == 21 ){
+         if (  ( trainConfig >= 1 && trainConfig <= 6 ) || trainConfig == 9 ||  trainConfig == 11  || trainConfig == 13 || trainConfig == 14 || trainConfig == 17 || trainConfig == 18 || trainConfig == 19 || trainConfig == 20 || trainConfig == 21 || trainConfig == 22 || trainConfig == 23 ||
+                 trainConfig == 28 || trainConfig == 29 || trainConfig == 30 || trainConfig == 31 || trainConfig == 32 || trainConfig == 33 )
+         ){
            
            if (doWeighting){
              if (generatorName.CompareTo("DPMJET")==0){
index d0c4b962c142e0daa1a4f8bf0e464111553fd7a9..c1df5cdc32a8acabe225daaa4cd0e17f5f224cd6 100644 (file)
@@ -327,6 +327,7 @@ if( trainConfig == 1 ) {  // No eta shift |Y| < 0.8
        ConvCutarray[1] = "8000012032093603007200000000"; ElecCutarray[1] = "9047540023910262371"; MesonCutarray[1] = "01033035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 +  |Y| < 0.6 and |Gamma_eta| < 0.65 and |e+_eta| < 0.65 and |e-_eta| < 0.65 
        ConvCutarray[2] = "8000012042093603007200000000"; ElecCutarray[2] = "9047540023510262371"; MesonCutarray[2] = "01032035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 +  |Y| < 0.7 and |Gamma_eta| < 0.75 and |e+_eta| < 0.75 and |e-_eta| < 0.75
        ConvCutarray[3] = "8000012012093603007200000000"; ElecCutarray[3] = "9047540023610262371"; MesonCutarray[3] = "01034035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 +  |Y| < 0.5 and |Gamma_eta| < 0.60 and |e+_eta| < 0.60 and |e-_eta| < 0.60  
+       
 } else if ( trainConfig == 21 ) {
        
        ConvCutarray[0] = "8000011002093603007200000000"; ElecCutarray[0] = "9047540043310262371"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011  +  3Cls ITS
@@ -342,6 +343,14 @@ if( trainConfig == 1 ) {  // No eta shift |Y| < 0.8
        ConvCutarray[2] = "8000012002093603007200000000"; ElecCutarray[2] = "9047540063310262371"; MesonCutarray[2] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011  + 5 ITScls
        ConvCutarray[3] = "8000012002093603007200000000"; ElecCutarray[3] = "9047540073310262371"; MesonCutarray[3] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011  + 4 ITScls no Any
        
+} else if ( trainConfig == 23 ) {
+  
+       ConvCutarray[0] = "8000011002493603007200000000"; ElecCutarray[0] = "9047540023310262371"; MesonCutarray[0] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + Pt > 0.075
+       ConvCutarray[1] = "8000011002193603007200000000"; ElecCutarray[1] = "9047540023310262371"; MesonCutarray[1] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + Pt > 0.100
+       ConvCutarray[2] = "8000011002093603007200000000"; ElecCutarray[2] = "9047540023310263371"; MesonCutarray[2] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + Pt{e} > 0.150
+       ConvCutarray[3] = "8000011002093603007200000000"; ElecCutarray[3] = "9047540023310265371"; MesonCutarray[3] = "01031035009000"; //standard cut Pi0 pPb 00-100  //Tracks 2011 + Pt{e} > 0.175
+       
+  
 }
 
 
@@ -375,7 +384,7 @@ if( trainConfig == 1 ) {  // No eta shift |Y| < 0.8
       analysisCuts[i] = new AliConversionCuts();
      
 
-         if (  ( trainConfig >= 1 && trainConfig <= 9 ) || trainConfig == 19  || trainConfig == 21  ){
+         if (  ( trainConfig >= 1 && trainConfig <= 9 ) || trainConfig == 19  || trainConfig == 21 || trainConfig == 23 ){
            
            if (doWeighting){
              if (generatorName.CompareTo("DPMJET")==0){
index 1132976b733686e47ca8b5ed02f82af05eb5d6b7..e22ac5154cb5479f9518cc006858892a8b23e160 100644 (file)
@@ -170,174 +170,174 @@ void AddTask_GammaConvV1_PbPb(  Int_t trainConfig = 1,  //change different set o
       cutarray[ 2] = "5680002048092970023220000000"; mesonCutArray[ 2] = "01522065009000"; // 60-80%
       cutarray[ 3] = "5480002048092970023220000000"; mesonCutArray[ 3] = "01522065009000"; // 20-40% 
       cutarray[ 4] = "5490002048092970023220000000"; mesonCutArray[ 4] = "01522065009000"; // 40-90%      
-   } else  if (trainConfig == 13){ // eta 0.65 (new standard), y = 0.6 (new Standard)
+   } else  if (trainConfig == 13){ // LHC10h standard, eta 0.65, y = 0.6 
       cutarray[ 0] = "6010001032092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
       cutarray[ 1] = "6120001032092970023220000000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
       cutarray[ 2] = "5010001032092970023220000000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
       cutarray[ 3] = "5120001032092970023220000000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
       cutarray[ 4] = "5020001032092970023220000000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
-   } else if (trainConfig == 14) {  // eta 0.65 (new standard), y = 0.6 (new Standard)
+   } else if (trainConfig == 14) {  // LHC10h standard, eta 0.65, y = 0.6 
       cutarray[ 0] = "5240001032092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
       cutarray[ 1] = "5460001032092970023220000000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
       cutarray[ 2] = "5680001032092970023220000000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
       cutarray[ 3] = "5480001032092970023220000000"; mesonCutArray[ 3] = "01523065009000"; // 40-80%
       cutarray[ 4] = "5490001032092970023220000000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
-   } else if (trainConfig == 15) { // eta 0.65 (new standard), y = 0.6 (new Standard) cuts only added signals
+   } else if (trainConfig == 15) { // LHC10h standard, eta 0.65, y = 0.6  added signals
       cutarray[ 0] = "6010002032092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
       cutarray[ 1] = "6120002032092970023220000000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
       cutarray[ 2] = "5010002032092970023220000000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
       cutarray[ 3] = "5120002032092970023220000000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
       cutarray[ 4] = "5020002032092970023220000000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
-   } else if (trainConfig == 16) { // eta 0.65 (new standard), y = 0.6 (new Standard) cuts only added signals
+   } else if (trainConfig == 16) { // LHC10h standard, eta 0.65, y = 0.6  added signals
       cutarray[ 0] = "5240002032092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
       cutarray[ 1] = "5460002032092970023220000000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
       cutarray[ 2] = "5680002032092970023220000000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
       cutarray[ 3] = "5480002032092970023220000000"; mesonCutArray[ 3] = "01523065009000"; // 20-40% 
       cutarray[ 4] = "5490002032092970023220000000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
-   } else  if (trainConfig == 17){ // eta 0.6, y = 0.6 (new Standard)
-      cutarray[ 0] = "6010001012092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
-      cutarray[ 1] = "6120001012092970023220000000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
-      cutarray[ 2] = "5010001012092970023220000000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
-      cutarray[ 3] = "5120001012092970023220000000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
-      cutarray[ 4] = "5020001012092970023220000000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
-   } else if (trainConfig == 18) {  // eta 0.6, y = 0.6 (new Standard)
-      cutarray[ 0] = "5240001012092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
-      cutarray[ 1] = "5460001012092970023220000000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
-      cutarray[ 2] = "5680001012092970023220000000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
-      cutarray[ 3] = "5480001012092970023220000000"; mesonCutArray[ 3] = "01523065009000"; // 40-80%
-      cutarray[ 4] = "5490001012092970023220000000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
-   } else if (trainConfig == 19) { // eta 0.6, y = 0.6 (new Standard) cuts only added signals
-      cutarray[ 0] = "6010002012092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
-      cutarray[ 1] = "6120002012092970023220000000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
-      cutarray[ 2] = "5010002012092970023220000000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
-      cutarray[ 3] = "5120002012092970023220000000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
-      cutarray[ 4] = "5020002012092970023220000000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
-   } else if (trainConfig == 20) { // eta 0.6, y = 0.6 (new Standard) cuts only added signals
-      cutarray[ 0] = "5240002012092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
-      cutarray[ 1] = "5460002012092970023220000000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
-      cutarray[ 2] = "5680002012092970023220000000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
-      cutarray[ 3] = "5480002012092970023220000000"; mesonCutArray[ 3] = "01523065009000"; // 20-40% 
-      cutarray[ 4] = "5490002012092970023220000000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
-   } else  if (trainConfig == 21){ // eta 0.7, y = 0.6 (new Standard)
-      cutarray[ 0] = "6010001072092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
-      cutarray[ 1] = "6120001072092970023220000000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
-      cutarray[ 2] = "5010001072092970023220000000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
-      cutarray[ 3] = "5120001072092970023220000000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
-      cutarray[ 4] = "5020001072092970023220000000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
-   } else if (trainConfig == 22) {  // eta 0.7, y = 0.6 (new Standard)
-      cutarray[ 0] = "5240001072092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
-      cutarray[ 1] = "5460001072092970023220000000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
-      cutarray[ 2] = "5680001072092970023220000000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
-      cutarray[ 3] = "5480001072092970023220000000"; mesonCutArray[ 3] = "01523065009000"; // 40-80%
-      cutarray[ 4] = "5490001072092970023220000000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
-   } else if (trainConfig == 23) { // eta 0.7, y = 0.6 (new Standard) cuts only added signals
-      cutarray[ 0] = "6010002072092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
-      cutarray[ 1] = "6120002072092970023220000000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
-      cutarray[ 2] = "5010002072092970023220000000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
-      cutarray[ 3] = "5120002072092970023220000000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
-      cutarray[ 4] = "5020002072092970023220000000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
-   } else if (trainConfig == 24) { // eta 0.7, y = 0.6 (new Standard) cuts only added signals
-      cutarray[ 0] = "5240002072092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
-      cutarray[ 1] = "5460002072092970023220000000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
-      cutarray[ 2] = "5680002072092970023220000000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
-      cutarray[ 3] = "5480002072092970023220000000"; mesonCutArray[ 3] = "01523065009000"; // 20-40% 
-      cutarray[ 4] = "5490002072092970023220000000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
-   } else  if (trainConfig == 25){ // eta 0.5, y = 0.6 (new Standard)
-      cutarray[ 0] = "6010001052092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
-      cutarray[ 1] = "6120001052092970023220000000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
-      cutarray[ 2] = "5010001052092970023220000000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
-      cutarray[ 3] = "5120001052092970023220000000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
-      cutarray[ 4] = "5020001052092970023220000000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
-   } else if (trainConfig == 26) {  // eta 0.5, y = 0.6 (new Standard)
-      cutarray[ 0] = "5240001052092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
-      cutarray[ 1] = "5460001052092970023220000000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
-      cutarray[ 2] = "5680001052092970023220000000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
-      cutarray[ 3] = "5480001052092970023220000000"; mesonCutArray[ 3] = "01523065009000"; // 40-80%
-      cutarray[ 4] = "5490001052092970023220000000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
-   } else if (trainConfig == 27) { // eta 0.5, y = 0.6 (new Standard) cuts only added signals
-      cutarray[ 0] = "6010002052092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
-      cutarray[ 1] = "6120002052092970023220000000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
-      cutarray[ 2] = "5010002052092970023220000000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
-      cutarray[ 3] = "5120002052092970023220000000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
-      cutarray[ 4] = "5020002052092970023220000000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
-   } else if (trainConfig == 28) { // eta 0.5, y = 0.6 (new Standard) cuts only added signals
-      cutarray[ 0] = "5240002052092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
-      cutarray[ 1] = "5460002052092970023220000000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
-      cutarray[ 2] = "5680002052092970023220000000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
-      cutarray[ 3] = "5480002052092970023220000000"; mesonCutArray[ 3] = "01523065009000"; // 20-40% 
-      cutarray[ 4] = "5490002052092970023220000000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
-   } else  if (trainConfig == 29){ // eta 0.65 (new standard), y = 0.6 (new Standard) pt dependent alpha
-      cutarray[ 0] = "6010001032092970023220000000"; mesonCutArray[ 0] = "01523015009000"; // 0-5%
-      cutarray[ 1] = "6120001032092970023220000000"; mesonCutArray[ 1] = "01523015009000"; // 5-10%
-      cutarray[ 2] = "5010001032092970023220000000"; mesonCutArray[ 2] = "01523015009000"; // 0-10%
-      cutarray[ 3] = "5120001032092970023220000000"; mesonCutArray[ 3] = "01523015009000"; // 10-20%
-      cutarray[ 4] = "5020001032092970023220000000"; mesonCutArray[ 4] = "01523015009000"; // 0-20%
-   } else if (trainConfig == 30) {  // eta 0.65 (new standard), y = 0.6 (new Standard) pt dependent alpha
-      cutarray[ 0] = "5240001032092970023220000000"; mesonCutArray[ 0] = "01523015009000"; // 20-40%
-      cutarray[ 1] = "5460001032092970023220000000"; mesonCutArray[ 1] = "01523025009000"; // 40-60%
-      cutarray[ 2] = "5680001032092970023220000000"; mesonCutArray[ 2] = "01523025009000"; // 60-80%
-      cutarray[ 3] = "5480001032092970023220000000"; mesonCutArray[ 3] = "01523025009000"; // 40-80%
-      cutarray[ 4] = "5490001032092970023220000000"; mesonCutArray[ 4] = "01523025009000"; // 40-90%
-   } else if (trainConfig == 31) { // eta 0.65 (new standard), y = 0.6 (new Standard) cuts only added signals, pt dependent alpha
-      cutarray[ 0] = "6010002032092970023220000000"; mesonCutArray[ 0] = "01523015009000"; // 0-5%
-      cutarray[ 1] = "6120002032092970023220000000"; mesonCutArray[ 1] = "01523015009000"; // 5-10%
-      cutarray[ 2] = "5010002032092970023220000000"; mesonCutArray[ 2] = "01523015009000"; // 0-10%
-      cutarray[ 3] = "5120002032092970023220000000"; mesonCutArray[ 3] = "01523015009000"; // 10-20%
-      cutarray[ 4] = "5020002032092970023220000000"; mesonCutArray[ 4] = "01523015009000"; // 0-20%
-   } else if (trainConfig == 32) { // eta 0.65 (new standard), y = 0.6 (new Standard) cuts only added signals, pt dependent alpha
-      cutarray[ 0] = "5240002032092970023220000000"; mesonCutArray[ 0] = "01523015009000"; // 20-40%
-      cutarray[ 1] = "5460002032092970023220000000"; mesonCutArray[ 1] = "01523025009000"; // 40-60%
-      cutarray[ 2] = "5680002032092970023220000000"; mesonCutArray[ 2] = "01523025009000"; // 60-80%
-      cutarray[ 3] = "5480002032092970023220000000"; mesonCutArray[ 3] = "01523025009000"; // 20-40% 
-      cutarray[ 4] = "5490002032092970023220000000"; mesonCutArray[ 4] = "01523025009000"; // 40-90%
-   } else if (trainConfig == 33){ // Standard cuts, eta 0.9, only to be run on data
-      cutarray[ 0] = "6010001002092970023220000000"; mesonCutArray[ 0] = "01525045009000"; // 0-5%
-      cutarray[ 1] = "6120001002092970023220000000"; mesonCutArray[ 1] = "01525045009000"; // 5-10%
-      cutarray[ 2] = "5010001002092970023220000000"; mesonCutArray[ 2] = "01525045009000"; // 0-10%
-      cutarray[ 3] = "5120001002092970023220000000"; mesonCutArray[ 3] = "01525045009000"; // 10-20%
-      cutarray[ 4] = "5020001002092970023220000000"; mesonCutArray[ 4] = "01525045009000"; // 0-20%
-   } else if (trainConfig == 34) { // Standard cuts, eta 0.9, only to be run on data
-      cutarray[ 0] = "5240001002092970023220000000"; mesonCutArray[ 0] = "01525045009000"; // 20-40%
-      cutarray[ 1] = "5460001002092970023220000000"; mesonCutArray[ 1] = "01525065009000"; // 40-60%
-      cutarray[ 2] = "5680001002092970023220000000"; mesonCutArray[ 2] = "01525065009000"; // 60-80%
-      cutarray[ 3] = "5480001002092970023220000000"; mesonCutArray[ 3] = "01525065009000"; // 40-80%
-      cutarray[ 4] = "5350001002092970023220000000"; mesonCutArray[ 4] = "01525065009000"; // 40-90%   
-   } else if (trainConfig == 35){ // Standard cuts, eta 1.4, only to be run on data
-      cutarray[ 0] = "6010001022092970023220000000"; mesonCutArray[ 0] = "01520045009000"; // 0-5%
-      cutarray[ 1] = "6120001022092970023220000000"; mesonCutArray[ 1] = "01520045009000"; // 5-10%
-      cutarray[ 2] = "5010001022092970023220000000"; mesonCutArray[ 2] = "01520045009000"; // 0-10%
-      cutarray[ 3] = "5120001022092970023220000000"; mesonCutArray[ 3] = "01520045009000"; // 10-20%
-      cutarray[ 4] = "5020001022092970023220000000"; mesonCutArray[ 4] = "01520045009000"; // 0-20%
-   } else if (trainConfig == 36) { // Standard cuts, eta 1.4, only to be run on data
-      cutarray[ 0] = "5240001022092970023220000000"; mesonCutArray[ 0] = "01520045009000"; // 20-40%
-      cutarray[ 1] = "5460001022092970023220000000"; mesonCutArray[ 1] = "01520065009000"; // 40-60%
-      cutarray[ 2] = "5680001022092970023220000000"; mesonCutArray[ 2] = "01520065009000"; // 60-80%
-      cutarray[ 3] = "5480001022092970023220000000"; mesonCutArray[ 3] = "01520065009000"; // 40-80%
-      cutarray[ 4] = "5350001022092970023220000000"; mesonCutArray[ 4] = "01520065009000"; // 40-90%   
-   } else if (trainConfig == 37){ // Standard cuts, eta 0.9, only to be run on data : kMB
-      cutarray[ 0] = "6014001002092970023220000000"; mesonCutArray[ 0] = "01525045009000"; // 0-5%
-      cutarray[ 1] = "6124001002092970023220000000"; mesonCutArray[ 1] = "01525045009000"; // 5-10%
-      cutarray[ 2] = "5014001002092970023220000000"; mesonCutArray[ 2] = "01525045009000"; // 0-10%
-      cutarray[ 3] = "5124001002092970023220000000"; mesonCutArray[ 3] = "01525045009000"; // 10-20%
-      cutarray[ 4] = "5024001002092970023220000000"; mesonCutArray[ 4] = "01525045009000"; // 0-20%
-   } else if (trainConfig == 38) { // Standard cuts, eta 0.9, only to be run on data : kMB
-      cutarray[ 0] = "5244001002092970023220000000"; mesonCutArray[ 0] = "01525045009000"; // 20-40%
-      cutarray[ 1] = "5464001002092970023220000000"; mesonCutArray[ 1] = "01525065009000"; // 40-60%
-      cutarray[ 2] = "5684001002092970023220000000"; mesonCutArray[ 2] = "01525065009000"; // 60-80%
-      cutarray[ 3] = "5484001002092970023220000000"; mesonCutArray[ 3] = "01525065009000"; // 40-80%
-      cutarray[ 4] = "5354001002092970023220000000"; mesonCutArray[ 4] = "01525065009000"; // 40-90%   
-   } else if (trainConfig == 39){ // Standard cuts, eta 0.9, only to be run on data :kCentral
-      cutarray[ 0] = "6015001002092970023220000000"; mesonCutArray[ 0] = "01525045009000"; // 0-5%
-      cutarray[ 1] = "6125001002092970023220000000"; mesonCutArray[ 1] = "01525045009000"; // 5-10%
-      cutarray[ 2] = "5015001002092970023220000000"; mesonCutArray[ 2] = "01525045009000"; // 0-10%
-      cutarray[ 3] = "5125001002092970023220000000"; mesonCutArray[ 3] = "01525045009000"; // 10-20%
-      cutarray[ 4] = "5025001002092970023220000000"; mesonCutArray[ 4] = "01525045009000"; // 0-20%
-   } else if (trainConfig == 40) { // Standard cuts, eta 0.9, only to be run on data : kCentral
-      cutarray[ 0] = "5245001002092970023220000000"; mesonCutArray[ 0] = "01525045009000"; // 20-40%
-      cutarray[ 1] = "5465001002092970023220000000"; mesonCutArray[ 1] = "01525065009000"; // 40-60%
-      cutarray[ 2] = "5685001002092970023220000000"; mesonCutArray[ 2] = "01525065009000"; // 60-80%
-      cutarray[ 3] = "5485001002092970023220000000"; mesonCutArray[ 3] = "01525065009000"; // 40-80%
-      cutarray[ 4] = "5355001002092970023220000000"; mesonCutArray[ 4] = "01525065009000"; // 40-90%   
+   } else  if (trainConfig == 17){ // LHC10h standard, eta 0.65, y = 0.6, photon quality 1 
+      cutarray[ 0] = "6010001032092970023220020000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120001032092970023220020000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010001032092970023220020000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120001032092970023220020000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020001032092970023220020000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 18) {  // LHC10h standard, eta 0.65, y = 0.6, photon quality 1 
+      cutarray[ 0] = "5240001032092970023220020000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460001032092970023220020000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680001032092970023220020000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480001032092970023220020000"; mesonCutArray[ 3] = "01523065009000"; // 40-80%
+      cutarray[ 4] = "5490001032092970023220020000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
+   } else if (trainConfig == 19) { // LHC10h standard, eta 0.65, y = 0.6, photon quality 1  added signal
+      cutarray[ 0] = "6010002032092970023220020000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120002032092970023220020000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010002032092970023220020000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120002032092970023220020000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020002032092970023220020000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 20) { // LHC10h standard, eta 0.65, y = 0.6, photon quality 1 added signal
+      cutarray[ 0] = "5240002032092970023220020000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460002032092970023220020000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680002032092970023220020000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480002032092970023220020000"; mesonCutArray[ 3] = "01523065009000"; // 20-40% 
+      cutarray[ 4] = "5490002032092970023220020000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
+   } else  if (trainConfig == 21){ // LHC10h standard, eta 0.65, y = 0.6, photon quality 2 
+      cutarray[ 0] = "6010001032092970023220030000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120001032092970023220030000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010001032092970023220030000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120001032092970023220030000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020001032092970023220030000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 22) {  // LHC10h standard, eta 0.65, y = 0.6, photon quality 2 
+      cutarray[ 0] = "5240001032092970023220030000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460001032092970023220030000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680001032092970023220030000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480001032092970023220030000"; mesonCutArray[ 3] = "01523065009000"; // 40-80%
+      cutarray[ 4] = "5490001032092970023220030000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
+   } else if (trainConfig == 23) { // LHC10h standard, eta 0.65, y = 0.6, photon quality 2  added signal
+      cutarray[ 0] = "6010002032092970023220030000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120002032092970023220030000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010002032092970023220030000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120002032092970023220030000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020002032092970023220030000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 24) { // LHC10h standard, eta 0.65, y = 0.6, photon quality 2 added signal
+      cutarray[ 0] = "5240002032092970023220030000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460002032092970023220030000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680002032092970023220030000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480002032092970023220030000"; mesonCutArray[ 3] = "01523065009000"; // 20-40% 
+      cutarray[ 4] = "5490002032092970023220030000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
+   } else  if (trainConfig == 25){ // LHC10h standard, eta 0.65, y = 0.6, photon quality 3 
+      cutarray[ 0] = "6010001032092970023220040000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120001032092970023220040000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010001032092970023220040000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120001032092970023220040000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020001032092970023220040000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 26) {  // LHC10h standard, eta 0.65, y = 0.6, photon quality 3 
+      cutarray[ 0] = "5240001032092970023220040000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460001032092970023220040000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680001032092970023220040000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480001032092970023220040000"; mesonCutArray[ 3] = "01523065009000"; // 40-80%
+      cutarray[ 4] = "5490001032092970023220040000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
+   } else if (trainConfig == 27) { // LHC10h standard, eta 0.65, y = 0.6, photon quality 3  added signal
+      cutarray[ 0] = "6010002032092970023220040000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120002032092970023220040000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010002032092970023220040000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120002032092970023220040000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020002032092970023220040000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 28) { // LHC10h standard, eta 0.65, y = 0.6, photon quality 3 added signal
+      cutarray[ 0] = "5240002032092970023220040000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460002032092970023220040000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680002032092970023220040000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480002032092970023220040000"; mesonCutArray[ 3] = "01523065009000"; // 20-40% 
+      cutarray[ 4] = "5490002032092970023220040000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
+   } else  if (trainConfig == 29){ // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm 
+      cutarray[ 0] = "6010001037092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120001037092970023220000000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010001037092970023220000000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120001037092970023220000000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020001037092970023220000000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 30) {  // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm 
+      cutarray[ 0] = "5240001037092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460001037092970023220000000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680001037092970023220000000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480001037092970023220000000"; mesonCutArray[ 3] = "01523065009000"; // 40-80%
+      cutarray[ 4] = "5490001037092970023220000000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
+   } else if (trainConfig == 31) { // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm  added signals
+      cutarray[ 0] = "6010002037092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120002037092970023220000000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010002037092970023220000000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120002037092970023220000000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020002037092970023220000000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 32) { // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm  added signals
+      cutarray[ 0] = "5240002037092970023220000000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460002037092970023220000000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680002037092970023220000000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480002037092970023220000000"; mesonCutArray[ 3] = "01523065009000"; // 20-40% 
+      cutarray[ 4] = "5490002037092970023220000000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
+   } else  if (trainConfig == 33){ // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm, photon quality 1 
+      cutarray[ 0] = "6010001037092970023220020000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120001037092970023220020000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010001037092970023220020000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120001037092970023220020000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020001037092970023220020000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 34) {  // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm, photon quality 1  
+      cutarray[ 0] = "5240001037092970023220020000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460001037092970023220020000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680001037092970023220020000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480001037092970023220020000"; mesonCutArray[ 3] = "01523065009000"; // 40-80%
+      cutarray[ 4] = "5490001037092970023220020000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
+   } else if (trainConfig == 35) { // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm, photon quality 1  added signals
+      cutarray[ 0] = "6010002037092970023220020000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120002037092970023220020000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010002037092970023220020000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120002037092970023220020000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020002037092970023220020000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 36) { // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm, photon quality 1  added signals
+      cutarray[ 0] = "5240002037092970023220020000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460002037092970023220020000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680002037092970023220020000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480002037092970023220020000"; mesonCutArray[ 3] = "01523065009000"; // 20-40% 
+      cutarray[ 4] = "5490002037092970023220020000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
+   } else  if (trainConfig == 37){ // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm, photon quality 3 
+      cutarray[ 0] = "6010001037092970023220040000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120001037092970023220040000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010001037092970023220040000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120001037092970023220040000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020001037092970023220040000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 38) {  // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm, photon quality 3  
+      cutarray[ 0] = "5240001037092970023220040000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460001037092970023220040000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680001037092970023220040000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480001037092970023220040000"; mesonCutArray[ 3] = "01523065009000"; // 40-80%
+      cutarray[ 4] = "5490001037092970023220040000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
+   } else if (trainConfig == 39) { // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm, photon quality 3  added signals
+      cutarray[ 0] = "6010002037092970023220040000"; mesonCutArray[ 0] = "01523045009000"; // 0-5%
+      cutarray[ 1] = "6120002037092970023220040000"; mesonCutArray[ 1] = "01523045009000"; // 5-10%
+      cutarray[ 2] = "5010002037092970023220040000"; mesonCutArray[ 2] = "01523045009000"; // 0-10%
+      cutarray[ 3] = "5120002037092970023220040000"; mesonCutArray[ 3] = "01523045009000"; // 10-20%
+      cutarray[ 4] = "5020002037092970023220040000"; mesonCutArray[ 4] = "01523045009000"; // 0-20%
+   } else if (trainConfig == 40) { // LHC10h standard, eta 0.65, y = 0.6, min R = 35 cm, photon quality 3  added signals
+      cutarray[ 0] = "5240002037092970023220040000"; mesonCutArray[ 0] = "01523045009000"; // 20-40%
+      cutarray[ 1] = "5460002037092970023220040000"; mesonCutArray[ 1] = "01523065009000"; // 40-60%
+      cutarray[ 2] = "5680002037092970023220040000"; mesonCutArray[ 2] = "01523065009000"; // 60-80%
+      cutarray[ 3] = "5480002037092970023220040000"; mesonCutArray[ 3] = "01523065009000"; // 20-40% 
+      cutarray[ 4] = "5490002037092970023220040000"; mesonCutArray[ 4] = "01523065009000"; // 40-90%
    } else if (trainConfig == 41){ // Standard cuts, eta 0.9, only to be run on data :kSemiCentral
       cutarray[ 0] = "6016001002092970023220000000"; mesonCutArray[ 0] = "01525045009000"; // 0-5%
       cutarray[ 1] = "6126001002092970023220000000"; mesonCutArray[ 1] = "01525045009000"; // 5-10%
@@ -463,7 +463,7 @@ void AddTask_GammaConvV1_PbPb(  Int_t trainConfig = 1,  //change different set o
       cutarray[ 1] = "5340002002092970028250400000"; mesonCutArray[ 1] = "01525065000000"; // 30-40% 
       cutarray[ 2] = "5450002002092970028250400000"; mesonCutArray[ 2] = "01525065000000"; // 40-50% 
       cutarray[ 3] = "5560002002092970028250400000"; mesonCutArray[ 3] = "01525065000000"; // 50-60% 
-      cutarray[ 4] = "5670002002092970028250400000"; mesonCutArray[ 4] = "01525065000000"; // 60-70%                   
+      cutarray[ 4] = "5250002002092970028250400000"; mesonCutArray[ 4] = "01525065000000"; // 60-70%                   
    } else if ( trainConfig == 62){ // cleaner cuts
       cutarray[ 0] = "6230001002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
       cutarray[ 1] = "6340001002092970028250400000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
@@ -662,7 +662,7 @@ void AddTask_GammaConvV1_PbPb(  Int_t trainConfig = 1,  //change different set o
                cutarray[ 2] = "5010001002092970022250400000"; mesonCutArray[2]= "01525065000000"; // 0-10%
                cutarray[ 3] = "5240001002092970022250400000"; mesonCutArray[3]= "01525065000000"; // 20-40%
                cutarray[ 4] = "5250001002092970022250400000"; mesonCutArray[4]= "01525065000000"; // 20-50%
-       } else if ( trainConfig == 95){ // qt 0.07 no2D  added signal
+       } else if ( trainConfig         == 95){ // qt 0.07 no2D  added signal
                cutarray[ 0] = "6010002002092970022250400000"; mesonCutArray[0]= "01525065000000"; // 0-5%
                cutarray[ 1] = "6120002002092970022250400000"; mesonCutArray[1]= "01525065000000"; // 5-10%
                cutarray[ 2] = "5010002002092970022250400000"; mesonCutArray[2]= "01525065000000"; // 0-10%
@@ -752,9 +752,93 @@ void AddTask_GammaConvV1_PbPb(  Int_t trainConfig = 1,  //change different set o
                cutarray[ 2] = "5010002002092970028280400000"; mesonCutArray[2]= "01525065000000"; // 0-10%
                cutarray[ 3] = "5240002002092970028280400000"; mesonCutArray[3]= "01525065000000"; // 20-40%
                cutarray[ 4] = "5250002002092970028280400000"; mesonCutArray[4]= "01525065000000"; // 20-50%
+   } else if ( trainConfig == 110){ // cleaner cuts
+               cutarray[ 0] = "6010001002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120001002092970028250400000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010001002092970028250400000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240001002092970028250400000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250001002092970028250400000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%
+   } else if ( trainConfig == 111){ // cleaner cuts added signal
+               cutarray[ 0] = "6010002002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120002002092970028250400000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010002002092970028250400000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240002002092970028250400000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250002002092970028250400000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%                   
+   } else if ( trainConfig == 112){ // cleaner cuts photon Quality 1
+               cutarray[ 0] = "6010001002092970028250420000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120001002092970028250420000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010001002092970028250420000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240001002092970028250420000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250001002092970028250420000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%
+   } else if ( trainConfig == 113){ // cleaner cuts added signal photon Quality 1
+               cutarray[ 0] = "6010002002092970028250420000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120002002092970028250420000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010002002092970028250420000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240002002092970028250420000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250002002092970028250420000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%                   
+   } else if ( trainConfig == 114){ // cleaner cuts photon Quality 2
+               cutarray[ 0] = "6010001002092970028250430000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120001002092970028250430000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010001002092970028250430000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240001002092970028250430000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250001002092970028250430000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%
+   } else if ( trainConfig == 115){ // cleaner cuts added signal photon Quality 2
+               cutarray[ 0] = "6010002002092970028250430000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120002002092970028250430000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010002002092970028250430000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240002002092970028250430000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250002002092970028250430000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%                   
+   } else if ( trainConfig == 116){ // cleaner cuts photon Quality 3
+               cutarray[ 0] = "6010001002092970028250440000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120001002092970028250440000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010001002092970028250440000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240001002092970028250440000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250001002092970028250440000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%
+   } else if ( trainConfig == 117){ // cleaner cuts added signal photon Quality 3
+               cutarray[ 0] = "6010002002092970028250440000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120002002092970028250440000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010002002092970028250440000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240002002092970028250440000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250002002092970028250440000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%                   
+   } else if ( trainConfig == 118){ // cleaner cuts, min R = 35 cm
+               cutarray[ 0] = "6010001007092970028250400000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120001007092970028250400000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010001007092970028250400000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240001007092970028250400000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250001007092970028250400000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%
+   } else if ( trainConfig == 119){ // cleaner cuts, min R = 35 cm added signal
+               cutarray[ 0] = "6010002007092970028250400000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120002007092970028250400000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010002007092970028250400000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240002007092970028250400000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250002007092970028250400000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%                   
+   } else if ( trainConfig == 120){ // cleaner cuts, photon Quality 1, min R = 35 cm
+               cutarray[ 0] = "6010001007092970028250420000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120001007092970028250420000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010001007092970028250420000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240001007092970028250420000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250001007092970028250420000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%
+   } else if ( trainConfig == 121){ // cleaner cuts added signal, photon Quality 1, min R = 35 cm
+               cutarray[ 0] = "6010002007092970028250420000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120002007092970028250420000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010002007092970028250420000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240002007092970028250420000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250002007092970028250420000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%                   
+   } else if ( trainConfig == 122){ // cleaner cuts, photon Quality 3, min R = 35 cm
+               cutarray[ 0] = "6010001007092970028250440000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120001007092970028250440000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010001007092970028250440000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240001007092970028250440000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250001007092970028250440000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%
+   } else if ( trainConfig == 123){ // cleaner cuts added signal, photon Quality 3, min R = 35 cm
+               cutarray[ 0] = "6010002007092970028250440000"; mesonCutArray[ 0] = "01525065000000"; // 0-5%
+               cutarray[ 1] = "6120002007092970028250440000"; mesonCutArray[ 1] = "01525065000000"; // 5-10%
+               cutarray[ 2] = "5010002007092970028250440000"; mesonCutArray[ 2] = "01525065000000"; // 0-10%
+               cutarray[ 3] = "5240002007092970028250440000"; mesonCutArray[ 3] = "01525065000000"; // 10-20%
+               cutarray[ 4] = "5250002007092970028250440000"; mesonCutArray[ 4] = "01525065000000"; // 0-20%                   
        } else {
-      Error(Form("GammaConvV1_%i",trainConfig), "wrong trainConfig variable no cuts have been specified for the configuration");
-      return;
+               Error(Form("GammaConvV1_%i",trainConfig), "wrong trainConfig variable no cuts have been specified for the configuration");
+               return;
    }
 
        TList *ConvCutList = new TList();
@@ -795,24 +879,24 @@ void AddTask_GammaConvV1_PbPb(  Int_t trainConfig = 1,  //change different set o
 
        for(Int_t i = 0; i<numberOfCuts; i++){
                analysisCuts[i] = new AliConversionCuts();
-               if (trainConfig == 1 ||trainConfig == 5 || trainConfig == 9 || trainConfig == 13 || trainConfig == 17 || trainConfig == 21 || trainConfig == 25 || trainConfig == 29 ){ //|| trainConfig == 33 || trainConfig == 37 || trainConfig == 41 
+               if (trainConfig == 1 ||trainConfig == 5 || trainConfig == 9 || trainConfig == 13 || trainConfig == 17 || trainConfig == 21 || trainConfig == 25 || trainConfig == 29 || trainConfig == 33 || trainConfig == 37){ // || trainConfig == 41 
                        if (i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_PbPb_2760GeV_0005TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M");
                        if (i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_PbPb_2760GeV_0510TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M");
                        if (i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_PbPb_2760GeV_0010TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M");
                        if (i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_PbPb_2760GeV_1020TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M");
                        if (i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_PbPb_2760GeV_0020TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_0020V0M");
-               } else if (trainConfig == 2 ||trainConfig == 6 || trainConfig == 10 || trainConfig == 14 || trainConfig == 18 || trainConfig == 22 || trainConfig == 26 || trainConfig == 30  ){ //|| trainConfig == 34 || trainConfig == 38 || trainConfig == 42
+               } else if (trainConfig == 2 ||trainConfig == 6 || trainConfig == 10 || trainConfig == 14 || trainConfig == 18 || trainConfig == 22 || trainConfig == 26 || trainConfig == 30  || trainConfig == 34 || trainConfig == 38){ // || trainConfig == 42
                        if (i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_PbPb_2760GeV_2040TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M");
                        if (i == 1 && doWeighting) analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_PbPb_2760GeV_4060TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_4060V0M");
                        if (i == 2 && doWeighting) analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_PbPb_2760GeV_6080TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_6080V0M");
                        if (i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_PbPb_2760GeV_4080TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_4080V0M");
-               } else if (trainConfig == 3 ||trainConfig == 7 || trainConfig == 11 || trainConfig == 15 || trainConfig == 19 || trainConfig == 23 || trainConfig == 27 || trainConfig == 31 ){ //|| trainConfig == 35 || trainConfig == 39 || trainConfig == 43 
+               } else if (trainConfig == 3 ||trainConfig == 7 || trainConfig == 11 || trainConfig == 15 || trainConfig == 19 || trainConfig == 23 || trainConfig == 27 || trainConfig == 31 || trainConfig == 35 || trainConfig == 39 ){ //|| trainConfig == 43 
                        if (i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_addSig_PbPb_2760GeV_0005TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M");
                        if (i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_addSig_PbPb_2760GeV_0510TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M");
                        if (i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_addSig_PbPb_2760GeV_0010TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M");
                        if (i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_addSig_PbPb_2760GeV_1020TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M");
                        if (i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_addSig_PbPb_2760GeV_0020TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_0020V0M");
-               } else if (trainConfig == 4 ||trainConfig == 8 || trainConfig == 12 || trainConfig == 16 || trainConfig == 20 || trainConfig == 24 || trainConfig == 28 || trainConfig == 32 ){ //|| trainConfig == 36 || trainConfig == 40 || trainConfig == 44 
+               } else if (trainConfig == 4 ||trainConfig == 8 || trainConfig == 12 || trainConfig == 16 || trainConfig == 20 || trainConfig == 24 || trainConfig == 28 || trainConfig == 32 || trainConfig == 36 || trainConfig == 40){ // || trainConfig == 44 
                        if (i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_addSig_PbPb_2760GeV_2040TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M");
                        if (i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_addSig_PbPb_2760GeV_4060TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_4060V0M");
                        if (i == 2  && doWeighting) analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13d2_addSig_PbPb_2760GeV_6080TPC", "", "","Pi0_Fit_Data_PbPb_2760GeV_6080V0M");
@@ -821,76 +905,76 @@ void AddTask_GammaConvV1_PbPb(  Int_t trainConfig = 1,  //change different set o
 
                if (trainConfig == 56 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_1020TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_1020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0020TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0020V0M","Eta_Fit_Data_PbPb_2760GeV_0020V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_1020TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_1020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0020TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0020V0M","Eta_Fit_Data_PbPb_2760GeV_0020V0M");
                        }       
                }         
                if (trainConfig == 57 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_1020TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_1020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0020TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0020V0M","Eta_Fit_Data_PbPb_2760GeV_0020V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_1020TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_1020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0020TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0020TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0020V0M","Eta_Fit_Data_PbPb_2760GeV_0020V0M");
                        }       
                }         
                if (trainConfig == 58 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4060TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4060V0M","Eta_Fit_Data_PbPb_2760GeV_4060V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_6080TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_6080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_6080V0M","Eta_Fit_Data_PbPb_2760GeV_6080V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4080TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_3050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_3050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3050V0M","Eta_Fit_Data_PbPb_2760GeV_3050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4060TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4060V0M","Eta_Fit_Data_PbPb_2760GeV_4060V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_6080TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_6080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_6080V0M","Eta_Fit_Data_PbPb_2760GeV_6080V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4080TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_3050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_3050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3050V0M","Eta_Fit_Data_PbPb_2760GeV_3050V0M");
                        }       
                }         
                if (trainConfig == 59 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4060TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4060V0M","Eta_Fit_Data_PbPb_2760GeV_4060V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_6080TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_6080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_6080V0M","Eta_Fit_Data_PbPb_2760GeV_6080V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4080TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_3050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_3050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3050V0M","Eta_Fit_Data_PbPb_2760GeV_3050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4060TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4060V0M","Eta_Fit_Data_PbPb_2760GeV_4060V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_6080TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_6080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_6080V0M","Eta_Fit_Data_PbPb_2760GeV_6080V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4080TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4080TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_1020V0M","Eta_Fit_Data_PbPb_2760GeV_1020V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_3050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_3050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3050V0M","Eta_Fit_Data_PbPb_2760GeV_3050V0M");
                        }       
                }         
        
                if (trainConfig == 60 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2030TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2030TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2030V0M","Eta_Fit_Data_PbPb_2760GeV_2030V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_3040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_3040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3040V0M","Eta_Fit_Data_PbPb_2760GeV_3040V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4050V0M","Eta_Fit_Data_PbPb_2760GeV_4050V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_5060TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_5060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_5060V0M","Eta_Fit_Data_PbPb_2760GeV_5060V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2030TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2030TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2030V0M","Eta_Fit_Data_PbPb_2760GeV_2030V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_3040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_3040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3040V0M","Eta_Fit_Data_PbPb_2760GeV_3040V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_4050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_4050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4050V0M","Eta_Fit_Data_PbPb_2760GeV_4050V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_5060TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_5060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_5060V0M","Eta_Fit_Data_PbPb_2760GeV_5060V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
                        }       
                }         
                if (trainConfig == 61 ){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2030TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2030TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2030V0M","Eta_Fit_Data_PbPb_2760GeV_2030V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_3040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_3040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3040V0M","Eta_Fit_Data_PbPb_2760GeV_3040V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4050V0M","Eta_Fit_Data_PbPb_2760GeV_4050V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_5060TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_5060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_5060V0M","Eta_Fit_Data_PbPb_2760GeV_5060V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2030TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2030TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2030V0M","Eta_Fit_Data_PbPb_2760GeV_2030V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_3040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_3040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_3040V0M","Eta_Fit_Data_PbPb_2760GeV_3040V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_4050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_4050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_4050V0M","Eta_Fit_Data_PbPb_2760GeV_4050V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_5060TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_5060TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_5060V0M","Eta_Fit_Data_PbPb_2760GeV_5060V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
                        }       
                }         
                
-               if ( trainConfig == 70 || trainConfig == 72  || trainConfig == 74  || trainConfig == 76  || trainConfig == 78  || trainConfig == 80  || trainConfig == 82  || trainConfig == 84 || trainConfig == 86  || trainConfig == 88  || trainConfig == 90 || trainConfig == 92 || trainConfig == 94 || trainConfig == 96  || trainConfig == 98  || trainConfig == 100 || trainConfig == 102  || trainConfig == 104 || trainConfig == 106 || trainConfig == 108){
+               if ( trainConfig == 70 || trainConfig == 72  || trainConfig == 74  || trainConfig == 76  || trainConfig == 78  || trainConfig == 80  || trainConfig == 82  || trainConfig == 84 || trainConfig == 86  || trainConfig == 88  || trainConfig == 90 || trainConfig == 92 || trainConfig == 94 || trainConfig == 96  || trainConfig == 98  || trainConfig == 100 || trainConfig == 102  || trainConfig == 104 || trainConfig == 106 || trainConfig == 108 || trainConfig == 110 || trainConfig == 112 || trainConfig == 114 || trainConfig == 116 || trainConfig == 118 || trainConfig == 120 || trainConfig == 122){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
                        }       
                } 
-               if ( trainConfig == 71 || trainConfig == 73  || trainConfig == 75  || trainConfig == 77  || trainConfig == 79  || trainConfig == 81  || trainConfig == 83  || trainConfig == 85 || trainConfig == 87  || trainConfig == 89  || trainConfig == 91 || trainConfig == 93 || trainConfig == 95 || trainConfig == 97  || trainConfig == 99  || trainConfig == 101 || trainConfig == 103  || trainConfig == 105 || trainConfig == 107 || trainConfig == 109){
+               if ( trainConfig == 71 || trainConfig == 73  || trainConfig == 75  || trainConfig == 77  || trainConfig == 79  || trainConfig == 81  || trainConfig == 83  || trainConfig == 85 || trainConfig == 87  || trainConfig == 89  || trainConfig == 91 || trainConfig == 93 || trainConfig == 95 || trainConfig == 97  || trainConfig == 99  || trainConfig == 101 || trainConfig == 103  || trainConfig == 105 || trainConfig == 107 || trainConfig == 109 || trainConfig == 111 || trainConfig == 113 || trainConfig == 115 || trainConfig == 117 || trainConfig == 119 || trainConfig == 121 || trainConfig == 123){
                        if (periodName.CompareTo("LHC14a1a") ==0 || periodName.CompareTo("LHC14a1b") ==0 || periodName.CompareTo("LHC14a1c") ==0 ){
-                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
-                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
-                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
-                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
-                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kFALSE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
+                               if ( i == 0 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0005TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0005V0M","Eta_Fit_Data_PbPb_2760GeV_0005V0M");
+                               if ( i == 1 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0510TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0510V0M","Eta_Fit_Data_PbPb_2760GeV_0510V0M");
+                               if ( i == 2 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_0010TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_0010V0M","Eta_Fit_Data_PbPb_2760GeV_0010V0M");
+                               if ( i == 3 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2040TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2040V0M","Eta_Fit_Data_PbPb_2760GeV_2040V0M");
+                               if ( i == 4 && doWeighting)  analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE,fileNameInputForWeighting, Form("Pi0_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), Form("Eta_Hijing_%s_addSig_PbPb_2760GeV_2050TPC",periodName.Data()), "","Pi0_Fit_Data_PbPb_2760GeV_2050V0M","Eta_Fit_Data_PbPb_2760GeV_2050V0M");
                        }       
                } 
                
index f7e2f2412a32e52eea4fdff2eff1a131d0493e12..4ae69efe74f4d3c9dc8aafa115c66d03c7c21b7d 100644 (file)
@@ -127,38 +127,48 @@ void AddTask_GammaConvV1_PbPb2(  Int_t trainConfig = 1,  //change different set
    } else if (trainConfig == 15) { 
       cutarray[ 0] = "5890001042092970023220000000"; mesonCutArray[ 0] = "01522065009000";    
    } else  if (trainConfig == 16){ 
-      cutarray[ 0] = "6010001002092970028250400000"; mesonCutArray[ 0] = "01525065009000"; 
+      cutarray[ 0] = "6010001002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; 
    } else if (trainConfig == 17) { 
-      cutarray[ 0] = "6120001002092970028250400000"; mesonCutArray[ 0] = "01525065009000"; 
+      cutarray[ 0] = "6120001002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; 
    } else if (trainConfig == 18) { 
-      cutarray[ 0] = "5010001002092970028250400000"; mesonCutArray[ 0] = "01525065009000"; 
+      cutarray[ 0] = "5010001002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; 
    } else if (trainConfig == 19) { 
-      cutarray[ 0] = "5020001002092970028250400000"; mesonCutArray[ 0] = "01525065009000";    
+      cutarray[ 0] = "5020001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";    
    } else if (trainConfig == 20) { 
-      cutarray[ 0] = "5120001002092970028250400000"; mesonCutArray[ 0] = "01525065009000";    
+      cutarray[ 0] = "5120001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";    
    } else if (trainConfig == 21) { 
-      cutarray[ 0] = "5240001002092970028250400000"; mesonCutArray[ 0] = "01525065009000";       
+      cutarray[ 0] = "5240001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";       
    } else if (trainConfig == 22) {    
-      cutarray[ 0] = "5460001002092970028250400000"; mesonCutArray[ 0] = "01525065009000"; 
+      cutarray[ 0] = "5460001002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; 
    } else if (trainConfig == 23) {    
-      cutarray[ 0] = "5480001002092970028250400000"; mesonCutArray[ 0] = "01525065009000";    
+      cutarray[ 0] = "5480001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";    
    } else if (trainConfig == 24) {    
-      cutarray[ 0] = "5450001002092970028250400000"; mesonCutArray[ 0] = "01525065009000"; 
+      cutarray[ 0] = "5450001002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; 
    } else if (trainConfig == 25) { 
-      cutarray[ 0] = "5560001002092970028250400000"; mesonCutArray[ 0] = "01525065009000";
+      cutarray[ 0] = "5560001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";
    } else if (trainConfig == 26) { 
-      cutarray[ 0] = "5680001002092970028250400000"; mesonCutArray[ 0] = "01525065009000";    
+      cutarray[ 0] = "5680001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";    
    } else if (trainConfig == 27) { 
-      cutarray[ 0] = "5670001002092970028250400000"; mesonCutArray[ 0] = "01525065009000"; 
+      cutarray[ 0] = "5670001002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; 
    } else if (trainConfig == 28) { 
-      cutarray[ 0] = "5780001002092970028250400000"; mesonCutArray[ 0] = "01525065009000"; 
+      cutarray[ 0] = "5780001002092970028250400000"; mesonCutArray[ 0] = "01525065000000"; 
    } else if (trainConfig == 29) { 
-      cutarray[ 0] = "4690001002092970028250400000"; mesonCutArray[ 0] = "01525065009000";
+      cutarray[ 0] = "4690001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";
    } else if (trainConfig == 30) { 
-      cutarray[ 0] = "5890001002092970028250400000"; mesonCutArray[ 0] = "01525065009000";    
+      cutarray[ 0] = "5890001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";    
    } else if (trainConfig == 31) { 
-      cutarray[ 0] = "5080001002092970028250400000"; mesonCutArray[ 0] = "01525065009000";    
-   } else {
+      cutarray[ 0] = "5080001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";    
+   } else if (trainConfig == 32) { 
+      cutarray[ 0] = "5250001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";       
+   } else if (trainConfig == 33) { 
+      cutarray[ 0] = "5350001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";       
+   } else if (trainConfig == 34) { 
+      cutarray[ 0] = "5450001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";       
+   } else if (trainConfig == 35) { 
+      cutarray[ 0] = "5340001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";       
+   } else if (trainConfig == 36) { 
+      cutarray[ 0] = "5230001002092970028250400000"; mesonCutArray[ 0] = "01525065000000";       
+       } else {
       Error(Form("GammaConvV1_%i",trainConfig), "wrong trainConfig variable no cuts have been specified for the configuration");
       return;
    }
index 00dda25f230c41d2b80d650d6046d1319c8cced0..6887e3e1c88110ef71fd0d524dcc6786ff1834b1 100644 (file)
@@ -962,16 +962,35 @@ void AddTask_GammaConvV1_pPb(  Int_t trainConfig = 1,  //change different set of
                cutarray[ 2] = "8020012002093172003290000000"; mesonCutArray[ 2] = "01621035000000";  //old standard eta=0.9 y=0.8 
                cutarray[ 3] = "8020012002092170008260400000"; mesonCutArray[ 3] = "01621035008000";  //new standard eta=0.9 y=0.8 // fPSigSmearingCte=0.014;           
        } else if (trainConfig == 173) {
-               cutarray[ 0] = "8000011002092170008260400000"; mesonCutArray[ 0] = "01621035009000"; //clean cuts ///New STANDARD CUT
-               cutarray[ 1] = "8000011002092170008260420000"; mesonCutArray[ 1] = "01621035009000";  //new standard eta=0.9 y=0.8 //no MCP smearing
-               cutarray[ 2] = "8000011002092170008260430000"; mesonCutArray[ 2] = "01621035009000";  //old standard eta=0.9 y=0.8 
-               cutarray[ 3] = "8000011002092170008260440000"; mesonCutArray[ 3] = "01621035009000";  //new standard eta=0.9 y=0.8 // fPSigSmearingCte=0.014;
+               cutarray[ 0] = "8000011002092170008260400000"; mesonCutArray[ 0] = "01621035009000";  // all Photon Qualities
+               cutarray[ 1] = "8000011002092170008260420000"; mesonCutArray[ 1] = "01621035009000";  // only photon quality 1
+               cutarray[ 2] = "8000011002092170008260430000"; mesonCutArray[ 2] = "01621035009000";  // only photon quality 2
+               cutarray[ 3] = "8000011002092170008260440000"; mesonCutArray[ 3] = "01621035009000";  // only photon quality 3
        } else if (trainConfig == 174) {
-               cutarray[ 0] = "8000012002092170008260400000"; mesonCutArray[ 0] = "01621035009000";  //new standard eta=0.9 y=0.8 // BG track multiplicity
-               cutarray[ 1] = "8000012002092170008260420000"; mesonCutArray[ 1] = "01621035009000";  //new standard eta=0.9 y=0.8 //no MCP smearing      
-               cutarray[ 2] = "8000012002092170008260430000"; mesonCutArray[ 2] = "01621035009000";  //old standard eta=0.9 y=0.8 
-               cutarray[ 3] = "8000012002092170008260440000"; mesonCutArray[ 3] = "01621035009000";  //new standard eta=0.9 y=0.8 // fPSigSmearingCte=0.014;           
-       
+               cutarray[ 0] = "8000012002092170008260400000"; mesonCutArray[ 0] = "01621035009000";  // all Photon Qualities
+               cutarray[ 1] = "8000012002092170008260420000"; mesonCutArray[ 1] = "01621035009000";  // only photon quality 1
+               cutarray[ 2] = "8000012002092170008260430000"; mesonCutArray[ 2] = "01621035009000";  // only photon quality 2
+               cutarray[ 3] = "8000012002092170008260440000"; mesonCutArray[ 3] = "01621035009000";  // only photon quality 3
+       } else if (trainConfig == 175) {
+               cutarray[ 0] = "8000011002092170008260410000"; mesonCutArray[ 0] = "01621035009000";  //no shared electron cut on
+               cutarray[ 1] = "8000011002192170008260400000"; mesonCutArray[ 1] = "01621035009000";  //single pt cut 0.1
+               cutarray[ 2] = "8000011002292170008260400000"; mesonCutArray[ 2] = "01621035009000";  //single pt cut 0.15
+               cutarray[ 3] = "8000011002492170008260400000"; mesonCutArray[ 3] = "01621035009000";  //single pt cut 0.075
+       } else if (trainConfig == 176) {
+               cutarray[ 0] = "8000012002092170008260410000"; mesonCutArray[ 0] = "01621035009000";  //no shared electron cut on
+               cutarray[ 1] = "8000012002192170008260400000"; mesonCutArray[ 1] = "01621035009000";  //single pt cut 0.1
+               cutarray[ 2] = "8000012002292170008260400000"; mesonCutArray[ 2] = "01621035009000";  //single pt cut 0.15
+               cutarray[ 3] = "8000012002492170008260400000"; mesonCutArray[ 3] = "01621035009000";  //single pt cut 0.075
+       } else if (trainConfig == 177) {
+               cutarray[ 0] = "8000011007092170008260400000"; mesonCutArray[ 0] = "01621035009000";  // min R =35 cm
+               cutarray[ 1] = "8000011007092170008260420000"; mesonCutArray[ 1] = "01621035009000";  // min R =35 cm & only photon quality 1
+               cutarray[ 2] = "8000011007092170008260430000"; mesonCutArray[ 2] = "01621035009000";  // min R =35 cm & only photon quality 2
+               cutarray[ 3] = "8000011007092170008260440000"; mesonCutArray[ 3] = "01621035009000";  // min R =35 cm & only photon quality 3
+       } else if (trainConfig == 178) {
+               cutarray[ 0] = "8000012007092170008260400000"; mesonCutArray[ 0] = "01621035009000";  // min R =35 cm
+               cutarray[ 1] = "8000012007092170008260420000"; mesonCutArray[ 1] = "01621035009000";  // min R =35 cm & only photon quality 1
+               cutarray[ 2] = "8000012007092170008260430000"; mesonCutArray[ 2] = "01621035009000";  // min R =35 cm & only photon quality 2
+               cutarray[ 3] = "8000012007092170008260440000"; mesonCutArray[ 3] = "01621035009000";  // min R =35 cm & only photon quality 3
        } else {
                Error(Form("GammaConvV1_%i",trainConfig), "wrong trainConfig variable no cuts have been specified for the configuration");
                return;
@@ -1009,7 +1028,7 @@ void AddTask_GammaConvV1_pPb(  Int_t trainConfig = 1,  //change different set of
        for(Int_t i = 0; i<numberOfCuts; i++){
                
                analysisCuts[i] = new AliConversionCuts();
-               if ( trainConfig == 1 || trainConfig == 3 || trainConfig == 5 || trainConfig == 7 || trainConfig == 9 || trainConfig == 11 || trainConfig == 13 || trainConfig == 15|| trainConfig == 17|| trainConfig == 19 || trainConfig == 21 || trainConfig == 133 || trainConfig == 135 || trainConfig == 137 || trainConfig == 139 || trainConfig == 141 || trainConfig == 143 || trainConfig == 145 || trainConfig == 147 || trainConfig == 149 || trainConfig == 151){
+               if ( trainConfig == 1 || trainConfig == 3 || trainConfig == 5 || trainConfig == 7 || trainConfig == 9 || trainConfig == 11 || trainConfig == 13 || trainConfig == 15|| trainConfig == 17|| trainConfig == 19 || trainConfig == 21 || trainConfig == 133 || trainConfig == 135 || trainConfig == 137 || trainConfig == 139 || trainConfig == 141 || trainConfig == 143 || trainConfig == 145 || trainConfig == 147 || trainConfig == 149 || trainConfig == 151 || trainConfig == 173 || trainConfig == 175 || trainConfig == 177  ){
                        if (doWeighting){
                                if (generatorName.CompareTo("DPMJET")==0){
                                        analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE, fileNameInputForWeighting, "Pi0_DPMJET_LHC13b2_efix_pPb_5023GeV_MBV0A", "Eta_DPMJET_LHC13b2_efix_pPb_5023GeV_MBV0A", "","Pi0_Fit_Data_pPb_5023GeV_MBV0A","Eta_Fit_Data_pPb_5023GeV_MBV0A");
@@ -1018,7 +1037,7 @@ void AddTask_GammaConvV1_pPb(  Int_t trainConfig = 1,  //change different set of
                                }
                        }
                }   
-               if ( trainConfig == 2 || trainConfig == 4 || trainConfig == 6 || trainConfig == 8 || trainConfig == 10 || trainConfig == 12 || trainConfig == 14 || trainConfig == 16|| trainConfig == 18|| trainConfig == 20|| trainConfig == 22 || trainConfig == 134 || trainConfig == 136 || trainConfig == 138 || trainConfig == 140 || trainConfig == 142 || trainConfig == 144 || trainConfig == 146 || trainConfig == 148 || trainConfig == 150 || trainConfig == 152){
+               if ( trainConfig == 2 || trainConfig == 4 || trainConfig == 6 || trainConfig == 8 || trainConfig == 10 || trainConfig == 12 || trainConfig == 14 || trainConfig == 16|| trainConfig == 18|| trainConfig == 20|| trainConfig == 22 || trainConfig == 134 || trainConfig == 136 || trainConfig == 138 || trainConfig == 140 || trainConfig == 142 || trainConfig == 144 || trainConfig == 146 || trainConfig == 148 || trainConfig == 150 || trainConfig == 152 || trainConfig == 174 || trainConfig == 176 || trainConfig == 178){
                        if (doWeighting){
                                analysisCuts[i]->SetUseReweightingWithHistogramFromFile(kTRUE, kTRUE, kFALSE, fileNameInputForWeighting, "Pi0_Hijing_LHC13e7_addSig_pPb_5023GeV_MBV0A", "Eta_Hijing_LHC13e7_addSig_pPb_5023GeV_MBV0A", "","Pi0_Fit_Data_pPb_5023GeV_MBV0A","Eta_Fit_Data_pPb_5023GeV_MBV0A");
                        }
index 70463f49e54d426d61a496e67fa13e646e1266af..9e823c4422ecc2328c20224108ed9739677d9e3a 100644 (file)
@@ -104,15 +104,45 @@ void AddTask_GammaConvV1_pp(  Int_t trainConfig = 1,  //change different set of
       cutarray[ 0] = "0000011002093663003800000000"; mesonCutArray[0] = "01631031009000"; //standard cut Pi0 pp 2.76TeV without SDD , only Minbias MC
       cutarray[ 1] = "0001011002093663003800000000"; mesonCutArray[1] = "01631031009000"; //standard cut Pi0 pp 2.76TeV without SDD, V0AND
       cutarray[ 2] = "0000011002093260003800000000"; mesonCutArray[2] = "01631031009000"; //standard cut Gamma pp 2-76TeV
-      cutarray[ 3] = "0000011002093260003800000000"; mesonCutArray[3] = "01631031009000"; //standard cut Gamma pp 2-76TeV , only boxes
+      cutarray[ 3] = "0000011002093260003800000000"; mesonCutArray[3] = "01631031009000"; //standard cut Gamma pp 2-76TeV
    } else if (trainConfig == 3) {
       cutarray[ 0] = "0002011002093663003800000000"; mesonCutArray[0] = "01631031009000"; //standard cut Pi0 pp 2.76TeV with SDD , only Minbias MC
       cutarray[ 1] = "0003011002093663003800000000"; mesonCutArray[1] = "01631031009000"; //standard cut Pi0 pp 2.76TeV with SDD, V0AND , only Minbias MC
       cutarray[ 2] = "0002012002093663003800000000"; mesonCutArray[2] = "01631031009000"; //standard cut Pi0 pp 2.76TeV with SDD , only Boxes MC
       cutarray[ 3] = "0003012002093663003800000000"; mesonCutArray[3] = "01631031009000"; //standard cut Pi0 pp 2.76TeV with SDD, V0AND, only Boxes MC
-   } else {
-      Error(Form("GammaConvV1_%i",trainConfig), "wrong trainConfig variable no cuts have been specified for the configuration");
-      return;
+   } else if (trainConfig == 4) {
+      cutarray[ 0] = "0000011002093663003800000000"; mesonCutArray[0] = "01631031009000"; //standard cut Pi0 pp 2.76TeV without SDD , all photon qualities
+      cutarray[ 1] = "0000011002093663003800020000"; mesonCutArray[1] = "01631031009000"; //standard cut Pi0 pp 2.76TeV without SDD , photon quality 1
+      cutarray[ 2] = "0000011002093663003800030000"; mesonCutArray[2] = "01631031009000"; //standard cut Pi0 pp 2.76TeV without SDD , photon quality 2
+         cutarray[ 3] = "0000011002093663003800040000"; mesonCutArray[3] = "01631031009000"; //standard cut Pi0 pp 2.76TeV without SDD , photon quality 3
+   } else if (trainConfig == 5) {
+      cutarray[ 0] = "0000011007093663003800000000"; mesonCutArray[0] = "01631031009000"; //standard cut Pi0 pp 2.76TeV without SDD , all photon qualities, min R = 35 cm
+      cutarray[ 1] = "0000011007093663003800020000"; mesonCutArray[1] = "01631031009000"; //standard cut Pi0 pp 2.76TeV without SDD , photon quality 1, min R = 35 cm
+      cutarray[ 2] = "0000011007093663003800030000"; mesonCutArray[2] = "01631031009000"; //standard cut Pi0 pp 2.76TeV without SDD , photon quality 2, min R = 35 cm
+         cutarray[ 3] = "0000011007093663003800040000"; mesonCutArray[3] = "01631031009000"; //standard cut Pi0 pp 2.76TeV without SDD , photon quality 3, min R = 35 cm
+   } else if (trainConfig == 6) {
+      cutarray[ 0] = "0000011002083663003200000000"; mesonCutArray[0] = "01631031009000"; //standard cut Pi0 pp 7TeV, with qt cut 0.05, all photon qualities
+      cutarray[ 1] = "0000011002083663003200020000"; mesonCutArray[1] = "01631031009000"; //standard cut Pi0 pp 7TeV, with qt cut 0.05, photon quality 1
+      cutarray[ 2] = "0000011002083663003200030000"; mesonCutArray[2] = "01631031009000"; //standard cut Pi0 pp 7TeV, with qt cut 0.05, photon quality 2
+         cutarray[ 3] = "0000011002083663003200040000"; mesonCutArray[3] = "01631031009000"; //standard cut Pi0 pp 7TeV, with qt cut 0.05, photon quality 3   
+   } else if (trainConfig == 7) {
+      cutarray[ 0] = "0000011007083663003200000000"; mesonCutArray[0] = "01631031009000"; //standard cut Pi0 pp 7TeV, with qt cut 0.05, all photon qualities, min R = 35 cm
+      cutarray[ 1] = "0000011007083663003200020000"; mesonCutArray[1] = "01631031009000"; //standard cut Pi0 pp 7TeV, with qt cut 0.05, photon quality 1, min R = 35 cm
+      cutarray[ 2] = "0000011007083663003200030000"; mesonCutArray[2] = "01631031009000"; //standard cut Pi0 pp 7TeV, with qt cut 0.05, photon quality 2, min R = 35 cm
+         cutarray[ 3] = "0000011007083663003200040000"; mesonCutArray[3] = "01631031009000"; //standard cut Pi0 pp 7TeV, with qt cut 0.05, photon quality 3, min R = 35 cm
+   } else if (trainConfig == 8) {
+      cutarray[ 0] = "0000011002083663000200000000"; mesonCutArray[0] = "01631031009000"; //standard cut Pi0 pp 7TeV, all photon qualities
+      cutarray[ 1] = "0000011002083663000200020000"; mesonCutArray[1] = "01631031009000"; //standard cut Pi0 pp 7TeV, photon quality 1
+      cutarray[ 2] = "0000011002083663000200030000"; mesonCutArray[2] = "01631031009000"; //standard cut Pi0 pp 7TeV, photon quality 2
+         cutarray[ 3] = "0000011002083663000200040000"; mesonCutArray[3] = "01631031009000"; //standard cut Pi0 pp 7TeV, photon quality 3   
+   } else if (trainConfig == 9) {
+      cutarray[ 0] = "0000011007083663000200000000"; mesonCutArray[0] = "01631031009000"; //standard cut Pi0 pp 7TeV, all photon qualities, min R = 35 cm
+      cutarray[ 1] = "0000011007083663000200020000"; mesonCutArray[1] = "01631031009000"; //standard cut Pi0 pp 7TeV, photon quality 1, min R = 35 cm
+      cutarray[ 2] = "0000011007083663000200030000"; mesonCutArray[2] = "01631031009000"; //standard cut Pi0 pp 7TeV, photon quality 2, min R = 35 cm
+         cutarray[ 3] = "0000011007083663000200040000"; mesonCutArray[3] = "01631031009000"; //standard cut Pi0 pp 7TeV, photon quality 3, min R = 35 cm          
+       } else {
+               Error(Form("GammaConvV1_%i",trainConfig), "wrong trainConfig variable no cuts have been specified for the configuration");
+               return;
    }
 
    TList *ConvCutList = new TList();
diff --git a/PWGGA/PHOSTasks/PHOS_Correlation/AddTaskPi0Correlations.C b/PWGGA/PHOSTasks/PHOS_Correlation/AddTaskPi0Correlations.C
new file mode 100644 (file)
index 0000000..17a0354
--- /dev/null
@@ -0,0 +1,121 @@
+AliPHOSCorrelations* AddTaskPi0Correlations (          const char* name = "Pi0Corr",
+                                                       const char* options = "11h",
+                                                       UInt_t offlineTriggerMask = AliVEvent::kCentral,
+                                                       AliPHOSCorrelations::TriggerSelection internalTriggerSelection = AliPHOSCorrelations::kNoSelection,
+                                                       Double_t sigmaWidth = 3.,
+                                                       Int_t downCentLimit = 0,
+                                                       Int_t upCentLimit = 90 )
+{
+       //Author: Ponomarenko Daniil 
+       /* $Id$ */
+
+       AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+       if (!mgr) 
+       {
+               ::Error("AddTaskPi0CorrelationsL", "No analysis manager to connect to");
+               return NULL;
+       }
+
+       if (!mgr->GetInputEventHandler()) 
+       {
+               ::Error("AddTaskPi0CorrelationsL", "This task requires an input event handler");
+               return NULL;
+       }
+       
+               
+       stringstream ss;
+       ss << downCentLimit;
+       string strDownCentLimit = ss.str();
+       char text[255];
+       sprintf(text,"%2i",upCentLimit);
+       string strUpCentLimit = text;
+       TString centralityBorder = TString ("CB") + strDownCentLimit.c_str() + TString ("t") + strUpCentLimit.c_str() + TString ("Cnt");
+       TString sigmaBorder = Form("%2iSigma", int(sigmaWidth*10.));
+       if (sigmaWidth == 0) sigmaBorder = "00Sigma";
+       TString sName = TString (name) + sigmaBorder + centralityBorder ;
+
+
+       AliPHOSCorrelations* task = new AliPHOSCorrelations(Form("%sTask", sName.Data()),internalTriggerSelection);
+
+       if( TString(options).Contains("10h") )  {
+               task->SetPeriod( AliPHOSCorrelations::kLHC10h );
+               task->SetCentralityEstimator("V0M");
+       }
+       if( TString(options).Contains("11h") )  {
+               task->SetPeriod( AliPHOSCorrelations::kLHC11h );
+               task->SetCentralityEstimator("V0M");
+       }
+       if( TString(options).Contains("13") )   {
+               task->SetPeriod( AliPHOSCorrelations::kLHC13 );
+               task->SetCentralityEstimator("V0A");
+       }
+
+
+       // Binning 
+       //Any:
+       if( AliVEvent::kAny == offlineTriggerMask ) 
+       {
+               const int nbins = 8;
+               Double_t cbin[nbins+1] = {0., 10., 20., 30., 40., 50., 60., 70., 80.};
+               TArrayD tbin(nbins+1, cbin);
+               Int_t    nMixed[nbins] = {6, 40, 40, 40, 40, 80, 80, 80};
+               TArrayI tNMixed(nbins, nMixed);
+               task->SetCentralityBinning(tbin, tNMixed);
+       }
+       //Central:
+       if( AliVEvent::kCentral == offlineTriggerMask ) 
+       {
+               const int nbins = 4;
+               Double_t cbin[nbins+1] = {0., 5., 8., 9., 10.};
+               TArrayD tbin(nbins+1, cbin);
+               Int_t    nMixed[nbins] = {6, 6, 6, 6};
+               TArrayI tNMixed(nbins, nMixed);
+               task->SetCentralityBinning(tbin, tNMixed);
+       }
+       // SemiCentral:
+       if( AliVEvent::kSemiCentral == offlineTriggerMask ) 
+       {
+               const int nbins = 8;
+               Double_t cbin[nbins+1] = {10., 11., 12., 13., 15., 20., 30., 40., 50.};
+               TArrayD tbin(nbins+1, cbin);
+               Int_t    nMixed[nbins] = {40, 40, 40, 40, 40, 40, 40, 40};
+               TArrayI tNMixed(nbins, nMixed);
+               task->SetCentralityBinning(tbin, tNMixed);
+       }
+       //INT7:
+       if( AliVEvent::kINT7 == offlineTriggerMask || AliVEvent::kPHI7 == offlineTriggerMask) 
+       {
+               const int nbins = 8;
+               Double_t cbin[nbins+1] = {0., 10., 20., 30., 40., 50., 60., 70., 80.};
+               TArrayD tbin(nbins+1, cbin);
+               Int_t    nMixed[nbins] = {6, 40, 40, 40, 40, 80, 80, 80};
+               TArrayI tNMixed(nbins, nMixed);
+               task->SetCentralityBinning(tbin, tNMixed);
+       }
+       // MB or PHOS Trigger:
+       if( AliVEvent::kMB == offlineTriggerMask || AliVEvent::kPHOSPb == offlineTriggerMask ) 
+       {
+               const int nbins = 8;
+               Double_t cbin[nbins+1] = {0., 10., 20., 30., 40., 50., 60., 70., 80.};
+               TArrayD tbin(nbins+1, cbin);
+               Int_t    nMixed[nbins] = {6, 40, 40, 40, 40, 80, 80, 80};
+               TArrayI tNMixed(nbins, nMixed);
+               task->SetCentralityBinning(tbin, tNMixed);
+       }
+
+       task->SelectCollisionCandidates(offlineTriggerMask);
+       task->SetInternalTriggerSelection(internalTriggerSelection);
+       task->EnableTOFCut(true, 100.e-9);
+       task->SetCentralityBorders(downCentLimit , upCentLimit) ;
+       task->SetSigmaWidth(sigmaWidth);
+
+       mgr->AddTask(task);
+       mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer() );
+
+       TString cname(Form("%sCoutput1", sName.Data()));
+       TString pname(Form("%s:%s", AliAnalysisManager::GetCommonFileName(), sName.Data()));
+       AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(cname.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, pname.Data());
+       mgr->ConnectOutput(task, 1, coutput1);
+
+       return task;
+}
\ No newline at end of file
diff --git a/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx b/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx
new file mode 100644 (file)
index 0000000..d64d5b3
--- /dev/null
@@ -0,0 +1,1665 @@
+/**************************************************************************
+ * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+// Analysis task for identified PHOS cluster from pi0 and take korrelation betwen hadron-pi0 angel's.
+// Authors:    Daniil Ponomarenko (Daniil.Ponomarenko@cern.ch)
+//             Dmitry Blau
+// 07-Feb-2014
+
+#include <Riostream.h>
+#include "THashList.h"
+#include "TObjArray.h"
+#include "TClonesArray.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TH2I.h"
+#include "TH3F.h"
+#include "TH3D.h"
+#include "TMath.h"
+#include "TVector3.h"
+#include "TProfile.h"
+
+#include "AliAnalysisManager.h"
+#include "AliAnalysisTaskSE.h"
+#include "AliPHOSCorrelations.h"
+#include "AliPHOSGeometry.h"
+#include "AliESDEvent.h"
+#include "AliESDCaloCluster.h"
+#include "AliESDVertex.h"
+#include "AliESDtrackCuts.h"
+#include "AliESDtrack.h"
+#include "AliAODTrack.h"
+#include "AliVTrack.h"
+#include "AliPID.h"
+#include "AliTriggerAnalysis.h"
+#include "AliPIDResponse.h"
+#include "AliPHOSEsdCluster.h"
+#include "AliCDBManager.h"
+#include "AliPHOSCalibData.h"
+#include "AliCentrality.h"
+#include "AliAnalysisTaskSE.h"
+#include "AliEventplane.h"
+#include "AliOADBContainer.h"
+#include "AliAODEvent.h"
+#include "AliAODCaloCells.h"
+#include "AliAODCaloCluster.h"
+#include "AliCaloPhoton.h"
+#include "AliAODVertex.h"
+
+using std::cout;
+using std::endl;
+
+ClassImp(AliPHOSCorrelations)
+
+//_______________________________________________________________________________
+AliPHOSCorrelations::AliPHOSCorrelations()
+:AliAnalysisTaskSE(),
+       fOutputContainer(0x0),
+       fMinClusterEnergy(0.3),
+       fMinBCDistance(0),
+       fMinNCells(3),
+       fMinM02(0.2),
+       fTOFCutEnabled(1),
+       fTOFCut(100.e-9),
+       fNVtxZBins(1),
+       fCentEdges(10),
+       fCentNMixed(),
+       fNEMRPBins(9),
+       fAssocBins(),   
+       fCheckHibridGlobal(kOnlyHibridTracks),
+       fPeriod(kUndefinedPeriod),
+       fInternalTriggerSelection(kNoSelection),
+       fMaxAbsVertexZ(10.),
+       fManualV0EPCalc(false),
+       fCentCutoffDown(0.),
+       fCentCutoffUp(90),
+       fMassInvMean(0.135),
+       fMassInvSigma(0.01),
+       fSigmaWidth(0.),
+       fEvent(0x0),
+       fEventESD(0x0),
+       fEventAOD(0x0),
+       fESDtrackCuts(0x0),
+       fRunNumber(-999),
+       fInternalRunNumber(0),
+       fMultV0(0x0),
+       fV0Cpol(0.),fV0Apol(0.),
+       fEPcalibFileName("$ALICE_ROOT/OADB/PHOS/PHOSflat.root"),
+       fVertexVector(),
+               fVtxBin(0),
+       fCentralityEstimator("V0M"),
+       fCentrality(0.),
+       fCentBin(0),
+       fHaveTPCRP(0),
+       fRP(0.),
+       fEMRPBin(0),
+       fCaloPhotonsPHOS(0x0),
+       fTracksTPC(0x0),
+       fCaloPhotonsPHOSLists(0x0),
+       fTracksTPCLists(0x0)
+{
+  //Deafult constructor, no memory allocations here
+}
+
+//_______________________________________________________________________________
+AliPHOSCorrelations::AliPHOSCorrelations(const char *name, Period period)
+:AliAnalysisTaskSE(name),
+       fOutputContainer(0x0),
+       fMinClusterEnergy(0.3),
+       fMinBCDistance(0),
+       fMinNCells(3),
+       fMinM02(0.2),
+       fTOFCutEnabled(1),
+       fTOFCut(100.e-9),
+       fNVtxZBins(1),
+       fCentEdges(10),
+       fCentNMixed(),
+       fNEMRPBins(9),
+       fAssocBins(),   
+       fCheckHibridGlobal(kOnlyHibridTracks),
+       fPeriod(period),
+       fInternalTriggerSelection(kNoSelection),
+       fMaxAbsVertexZ(10.),
+       fManualV0EPCalc(false),
+       fCentCutoffDown(0.),
+       fCentCutoffUp(90),
+       fMassInvMean(0.135),
+       fMassInvSigma(0.01),
+       fSigmaWidth(0.),
+       fEvent(0x0),
+       fEventESD(0x0),
+       fEventAOD(0x0),
+       fESDtrackCuts(0x0),
+       fRunNumber(-999),
+       fInternalRunNumber(0),
+       fMultV0(0x0),
+       fV0Cpol(0.),fV0Apol(0.),
+       fEPcalibFileName("$ALICE_ROOT/OADB/PHOS/PHOSflat.root"),
+       fVertexVector(),
+               fVtxBin(0),
+       fCentralityEstimator("V0M"),
+       fCentrality(0.),
+       fCentBin(0),
+       fHaveTPCRP(0),
+       fRP(0.),
+       fEMRPBin(0),
+       fCaloPhotonsPHOS(0x0),
+       fTracksTPC(0x0),
+       fCaloPhotonsPHOSLists(0x0),
+       fTracksTPCLists(0x0)
+{
+       // Constructor
+       // Output slots #0 write into a TH1 container
+       DefineOutput(1,THashList::Class());
+
+       const Int_t nPtAssoc=10 ;
+       Double_t ptAssocBins[nPtAssoc]={0.,0.5,1.0,1.5,2.0,3.,5.,7.,10.,16} ;
+       fAssocBins.Set(nPtAssoc,ptAssocBins) ;
+               
+       const int nbins = 9;
+       Double_t edges[nbins+1] = {0., 5., 10., 20., 30., 40., 50., 60., 70., 80.};
+       TArrayD centEdges(nbins+1, edges);
+       Int_t nMixed[nbins] = {4,4,6,10,20,30,50,100,100};
+       //Int_t nMixed[nbins] = {100,100,100,100,100,100,100,100,100};
+       TArrayI centNMixed(nbins, nMixed);
+       SetCentralityBinning(centEdges, centNMixed);
+
+       fVertex[0]=0; fVertex[1]=0; fVertex[2]=0; 
+
+       fPHOSGeo = AliPHOSGeometry::GetInstance("IHEP");
+}
+//_______________________________________________________________________________
+AliPHOSCorrelations::~AliPHOSCorrelations()
+{
+       if(fCaloPhotonsPHOS){ 
+         delete fCaloPhotonsPHOS;
+         fCaloPhotonsPHOS=0x0;
+       }
+       
+       if(fTracksTPC){
+         delete fTracksTPC;
+         fTracksTPC=0x0;
+       }
+
+       if(fCaloPhotonsPHOSLists){
+         fCaloPhotonsPHOSLists->SetOwner() ;
+         delete fCaloPhotonsPHOSLists;
+         fCaloPhotonsPHOSLists=0x0;
+       }
+       
+       if(fTracksTPCLists){
+         fTracksTPCLists->SetOwner() ;
+         delete fTracksTPCLists;
+         fTracksTPCLists=0x0 ;
+       }
+        
+       if( fESDtrackCuts){       
+         delete fESDtrackCuts;
+         fESDtrackCuts=0x0 ;
+       }
+                 
+       if(fOutputContainer){
+         delete fOutputContainer;
+         fOutputContainer=0x0;
+       }         
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::UserCreateOutputObjects()
+{
+       // Create histograms
+       // Called once
+       const Int_t nRuns=200 ;
+
+       // Create histograms
+       if(fOutputContainer != NULL) { delete fOutputContainer; }
+       fOutputContainer = new THashList();
+       fOutputContainer->SetOwner(kTRUE);
+       
+       //Event selection
+       fOutputContainer->Add(new TH1F("hTriggerPassedEvents","Event selection passed Cuts", 20, 0., 20.) );
+
+       fOutputContainer->Add(new TH1F("hTotSelEvents","Event selection", kTotalSelected+3, 0., double(kTotalSelected+3))) ;
+       
+       fOutputContainer->Add(new TH2F("hSelEvents","Event selection", kTotalSelected+1, 0., double(kTotalSelected+1), nRuns,0.,float(nRuns))) ;
+       fOutputContainer->Add(new TH2F("hCentrality","Event centrality", 100,0.,100.,nRuns,0.,float(nRuns))) ;
+       fOutputContainer->Add(new TH2F("phiRPflat","RP distribution with TPC flat", 100, 0., 2.*TMath::Pi(),20,0.,100.)) ;
+       fOutputContainer->Add(new TH2F("massWindow","mean & sigma", 100,0.1,0.18,100,0.,0.5));
+       
+
+       // Set hists, with track's and cluster's angle distributions.
+       SetHistEtaPhi();
+       SetHistPHOSClusterMap();
+       SetHistCutDistribution();
+       SetHistPtAssoc();
+
+       // Setup photon lists
+       Int_t kapacity = fNVtxZBins * GetNumberOfCentralityBins() * fNEMRPBins;
+       fCaloPhotonsPHOSLists = new TObjArray(kapacity);
+       fCaloPhotonsPHOSLists->SetOwner();
+
+       fTracksTPCLists = new TObjArray(kapacity);
+       fTracksTPCLists->SetOwner();
+
+       PostData(1, fOutputContainer);
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::SetHistEtaPhi() 
+{
+       // Set hists, with track's and cluster's angle distributions.
+
+       Float_t pi = TMath::Pi();
+
+       //===
+       fOutputContainer->Add(new TH2F("clu_phieta","Cluster's #phi & #eta distribution", 300, double(-1.8), double(-0.6), 300, double(-0.2), double(0.2) ) );
+       TH2F * h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+       h->GetXaxis()->SetTitle("#phi [rad]");
+       h->GetYaxis()->SetTitle("#eta");
+
+       //===
+               fOutputContainer->Add(new TH2F("clusingle_phieta","Cluster's  #phi & #eta distribution", 300, double(-1.8), double(-0.6), 300, double(-0.2), double(0.2) ) );
+       h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+       h->GetXaxis()->SetTitle("#phi [rad]");
+       h->GetYaxis()->SetTitle("#eta");
+       
+       //===
+       fOutputContainer->Add(new TH2F("track_phieta","TPC track's  #phi & #eta distribution", 200, double(-pi-0.3), double(pi+0.3), 200, double(-0.9), double(0.9) ) );
+       h = static_cast<TH2F*>(fOutputContainer->FindObject("track_phieta")) ;
+       h->GetXaxis()->SetTitle("#phi [rad]");
+       h->GetYaxis()->SetTitle("#eta");
+} 
+//_______________________________________________________________________________
+void AliPHOSCorrelations::SetHistCutDistribution() 
+{
+       // Set other histograms.
+       // cout<<"\nSetting output SetHist_CutDistribution...";
+
+       Int_t  PtMult = 100;
+       Double_t PtMin = 0.;
+       Double_t PtMax = 20.;
+       Double_t massMin = fMassInvMean-fMassInvSigma;
+       Double_t massMax = fMassInvMean+fMassInvSigma;
+
+
+       // Real ++++++++++++++++++++++++++++++
+
+       fOutputContainer->Add(new TH2F("all_mpt"," Only standard cut's ", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
+       TH2F * h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+       h->GetXaxis()->SetTitle("Mass [GeV]");
+       h->GetYaxis()->SetTitle("Pt [GEV]");
+
+       fOutputContainer->Add(new TH2F("cpv_mpt"," CPV cut ", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
+       h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+       h->GetXaxis()->SetTitle("Mass [GeV]");
+       h->GetYaxis()->SetTitle("Pt [GEV]");
+
+       fOutputContainer->Add(new TH2F("disp_mpt"," Disp cut ", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
+       h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+       h->GetXaxis()->SetTitle("Mass [GeV]");
+       h->GetYaxis()->SetTitle("Pt [GEV]");
+
+       fOutputContainer->Add(new TH2F("both_mpt"," Both cuts (CPV + Disp) ", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
+       h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+       h->GetXaxis()->SetTitle("Mass [GeV]");
+       h->GetYaxis()->SetTitle("Pt [GEV]");
+
+
+       // MIX +++++++++++++++++++++++++
+
+       fOutputContainer->Add(new TH2F("mix_all_mpt"," Only standard cut's (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
+       h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+       h->GetXaxis()->SetTitle("Mass [GeV]");
+       h->GetYaxis()->SetTitle("Pt [GEV]");
+
+       fOutputContainer->Add(new TH2F("mix_cpv_mpt"," CPV cut (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
+       h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+       h->GetXaxis()->SetTitle("Mass [GeV]");
+       h->GetYaxis()->SetTitle("Pt [GEV]");
+
+       fOutputContainer->Add(new TH2F("mix_disp_mpt"," Disp cut (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
+       h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+       h->GetXaxis()->SetTitle("Mass [GeV]");
+       h->GetYaxis()->SetTitle("Pt [GEV]");
+
+       fOutputContainer->Add(new TH2F("mix_both_mpt"," Both cuts (CPV + Disp) (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) );
+       h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+       h->GetXaxis()->SetTitle("Mass [GeV]");
+       h->GetYaxis()->SetTitle("Pt [GEV]");
+
+
+       // Calibration Pi0peak {REAL}
+       for(Int_t mod=1; mod<4; mod++){
+         fOutputContainer->Add(new TH2F(Form("both%d_mpt",mod),Form("Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, PtMult, PtMin, PtMax ) );
+         h = static_cast<TH2F*>(fOutputContainer->Last()) ;
+         h->GetXaxis()->SetTitle("Mass [GeV]");
+         h->GetYaxis()->SetTitle("Pt [GEV]");
+
+         // Calibration Pi0peak {MIX}
+         fOutputContainer->Add(new TH2F(Form("mix_both%d_mpt",mod),Form(" Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, PtMult, PtMin, PtMax ) );
+         h = static_cast<TH2F*>(fOutputContainer->FindObject("mix_both1_mpt")) ;
+         h->GetXaxis()->SetTitle("Mass [GeV]");
+         h->GetYaxis()->SetTitle("Pt [GEV]");
+         
+       }
+
+       // cout<<"  OK!"<<endl;
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::SetHistPtAssoc()
+{
+       Double_t pi = TMath::Pi();
+       
+       Int_t PhiMult  =  100;
+       Float_t PhiMin =  -0.5*pi;
+       Float_t PhiMax =  1.5*pi;
+       Int_t EtaMult  =  20; 
+       Float_t EtaMin = -1.;
+       Float_t EtaMax =  1.;
+       Int_t PtTrigMult = 100;
+       Float_t PtTrigMin = 0.;
+       Float_t PtTrigMax = 20.;
+
+       TString spid[4]={"all","cpv","disp","both"} ;
+       
+       for (int i = 0; i<fAssocBins.GetSize()-1; i++){
+         for(Int_t ipid=0; ipid<4; ipid++){
+               fOutputContainer->Add(new TH3F(Form("%s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)),
+                                              Form("%s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)), 
+                                              PtTrigMult, PtTrigMin, PtTrigMax,  PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) );
+               TH3F * h = static_cast<TH3F*>(fOutputContainer->Last()) ;
+               h->GetXaxis()->SetTitle("Pt_{triger} [GEV]");
+               h->GetYaxis()->SetTitle("#phi [rad]");
+               h->GetZaxis()->SetTitle("#eta");
+
+               fOutputContainer->Add(new TH3F(Form("mix_%s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)),
+                                              Form("Mixed %s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)),
+                                              PtTrigMult, PtTrigMin, PtTrigMax,  PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) );
+               h = static_cast<TH3F*>(fOutputContainer->Last()) ;
+               h->GetXaxis()->SetTitle("Pt_{triger} [GEV]");
+               h->GetYaxis()->SetTitle("#phi [rad]");
+               h->GetZaxis()->SetTitle("#eta");
+
+         }
+       }
+}
+
+void AliPHOSCorrelations::SetHistPHOSClusterMap()
+{
+       for(int i =  0; i<3; i++)
+       {
+               //  Cluster X/Z/E distribution.
+               fOutputContainer->Add(new TH3F(Form("QA_cluXZE_mod%i", i+1),Form("PHOS Clusters XZE distribution of module %i", i+1), 100, 0, 100, 100, 0, 100, 100, 0, 10 ) );
+               TH3F *h = static_cast<TH3F*>(fOutputContainer->Last()) ;
+               h->GetXaxis()->SetTitle("X");
+               h->GetYaxis()->SetTitle("Z");
+               h->GetZaxis()->SetTitle("E");
+       }       
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::UserExec(Option_t *) 
+{
+       // Main loop, called for each event analyze ESD/AOD 
+       // Step 0: Event Objects
+       LogProgress(0);
+       fEvent = InputEvent();
+       if( ! fEvent ) 
+       {
+               AliError("Event could not be retrieved");
+               PostData(1, fOutputContainer);
+               return ;
+       }
+        
+       fEventESD = dynamic_cast<AliESDEvent*>(fEvent);
+       fEventAOD = dynamic_cast<AliAODEvent*>(fEvent);
+
+       {
+               FillHistogram("hTriggerPassedEvents",  0);
+
+               Bool_t isMB = (fEvent->GetTriggerMask() & (ULong64_t(1)<<1));
+               Bool_t isCentral = (fEvent->GetTriggerMask() & (ULong64_t(1)<<4));
+               Bool_t isSemiCentral = (fEvent->GetTriggerMask() & (ULong64_t(1)<<7));
+
+               if (isMB) FillHistogram("hTriggerPassedEvents",  2.);
+               if (isCentral) FillHistogram("hTriggerPassedEvents",  3.);
+               if (isSemiCentral) FillHistogram("hTriggerPassedEvents",  4.);
+       }
+
+       // For first event from data only:
+       if( fRunNumber<0)
+       {
+               if (fDebug >= 1) cout<<"Mean: "<< fMassInvMean << " Sigma: "<< fMassInvSigma
+                                       <<" Sigma Width: " <<fSigmaWidth <<endl;
+               if (!fSigmaWidth) FillHistogram("massWindow",  fMassInvMean, fMassInvSigma);
+               else FillHistogram("massWindow",  fMassInvMean, fMassInvSigma*fSigmaWidth);
+       }
+
+       // Step 1(done once):  
+       if( fRunNumber != fEvent->GetRunNumber() )
+       {
+               fRunNumber = fEvent->GetRunNumber();
+               fInternalRunNumber = ConvertToInternalRunNumber(fRunNumber);
+               SetESDTrackCuts();
+       }
+       LogProgress(1);
+
+       if( RejectTriggerMaskSelection() ) 
+       {
+               PostData(1, fOutputContainer);
+               return; // Reject!
+       }
+       LogProgress(2);
+
+       // Step 2: Vertex
+       // fVertex, fVertexVector, fVtxBin
+       SetVertex();
+       if( RejectEventVertex() ) 
+       {
+               PostData(1, fOutputContainer);
+               return; // Reject!
+       }
+       LogProgress(3);
+
+       // Step 3: Centrality
+       // fCentrality, fCentBin
+       SetCentrality(); 
+       if( RejectEventCentrality() ) 
+       {
+               PostData(1, fOutputContainer);
+               return; // Reject!
+       }
+       FillHistogram("hCentrality",fCentrality,fInternalRunNumber-0.5) ;
+       LogProgress(4);
+
+       // Step 4: Reaction Plane
+       // fHaveTPCRP, fRP, fRPV0A, fRPV0C, fRPBin
+       EvalReactionPlane();  
+       fEMRPBin = GetRPBin(); 
+       LogProgress(5);
+       
+       // Step 5: Event Photons (PHOS Clusters) selectionMakeFlat
+       SelectPhotonClusters();
+       if( ! fCaloPhotonsPHOS->GetEntriesFast() )      LogSelection(kHasPHOSClusters, fInternalRunNumber);
+       LogProgress(6);
+
+       // Step 6: Event Associated particles (TPC Tracks) selection
+       SelectAccosiatedTracks();
+       
+       if( ! fTracksTPC->GetEntriesFast() )    
+         LogSelection(kHasTPCTracks, fInternalRunNumber);
+       LogSelection(kTotalSelected, fInternalRunNumber);
+       LogProgress(7);
+
+       // Step 7: Consider pi0 (photon/cluster) pairs.
+       ConsiderPi0s();
+       
+       // Step 8; Mixing
+       ConsiderPi0sMix();
+
+       ConsiderTracksMix();
+       //this->ConsiderPi0sTracksMix(); // Read how make mix events!
+       LogProgress(8);
+
+       // Step 9: Make TPC's mask
+       FillTrackEtaPhi();
+       LogProgress(9);
+
+       // Step 10: Update lists
+       UpdatePhotonLists();
+       UpdateTrackLists();
+  
+       LogProgress(10);
+
+       // Post output data.
+       PostData(1, fOutputContainer);
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::SetESDTrackCuts()
+{
+  if( fEventESD ) {
+    // Create ESD track cut
+    fESDtrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts() ;
+    //fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+    fESDtrackCuts->SetRequireTPCRefit(kTRUE);
+  }
+}
+//_______________________________________________________________________________
+Int_t AliPHOSCorrelations::ConvertToInternalRunNumber(Int_t run){
+  if(fPeriod== kLHC11h){
+                               switch(run)
+                               {
+                                       case  170593 : return 179 ;
+                                       case  170572 : return 178 ;
+                                       case  170556 : return 177 ;
+                                       case  170552 : return 176 ;
+                                       case  170546 : return 175 ;
+                                       case  170390 : return 174 ;
+                                       case  170389 : return 173 ;
+                                       case  170388 : return 172 ;
+                                       case  170387 : return 171 ;
+                                       case  170315 : return 170 ;
+                                       case  170313 : return 169 ;
+                                       case  170312 : return 168 ;
+                                       case  170311 : return 167 ;
+                                       case  170309 : return 166 ;
+                                       case  170308 : return 165 ;
+                                       case  170306 : return 164 ;
+                                       case  170270 : return 163 ;
+                                       case  170269 : return 162 ;
+                                       case  170268 : return 161 ;
+                                       case  170267 : return 160 ;
+                                       case  170264 : return 159 ;
+                                       case  170230 : return 158 ;
+                                       case  170228 : return 157 ;
+                                       case  170208 : return 156 ;
+                                       case  170207 : return 155 ;
+                                       case  170205 : return 154 ;
+                                       case  170204 : return 153 ;
+                                       case  170203 : return 152 ;
+                                       case  170195 : return 151 ;
+                                       case  170193 : return 150 ;
+                                       case  170163 : return 149 ;
+                                       case  170162 : return 148 ;
+                                       case  170159 : return 147 ;
+                                       case  170155 : return 146 ;
+                                       case  170152 : return 145 ;
+                                       case  170091 : return 144 ;
+                                       case  170089 : return 143 ;
+                                       case  170088 : return 142 ;
+                                       case  170085 : return 141 ;
+                                       case  170084 : return 140 ;
+                                       case  170083 : return 139 ;
+                                       case  170081 : return 138 ;
+                                       case  170040 : return 137 ;
+                                       case  170038 : return 136 ;
+                                       case  170036 : return 135 ;
+                                       case  170027 : return 134 ;
+                                       case  169981 : return 133 ;
+                                       case  169975 : return 132 ;
+                                       case  169969 : return 131 ;
+                                       case  169965 : return 130 ;
+                                       case  169961 : return 129 ;
+                                       case  169956 : return 128 ;
+                                       case  169926 : return 127 ;
+                                       case  169924 : return 126 ;
+                                       case  169923 : return 125 ;
+                                       case  169922 : return 124 ;
+                                       case  169919 : return 123 ;
+                                       case  169918 : return 122 ;
+                                       case  169914 : return 121 ;
+                                       case  169859 : return 120 ;
+                                       case  169858 : return 119 ;
+                                       case  169855 : return 118 ;
+                                       case  169846 : return 117 ;
+                                       case  169838 : return 116 ;
+                                       case  169837 : return 115 ;
+                                       case  169835 : return 114 ;
+                                       case  169683 : return 113 ;
+                                       case  169628 : return 112 ;
+                                       case  169591 : return 111 ;
+                                       case  169590 : return 110 ;
+                                       case  169588 : return 109 ;
+                                       case  169587 : return 108 ;
+                                       case  169586 : return 107 ;
+                                       case  169584 : return 106 ;
+                                       case  169557 : return 105 ;
+                                       case  169555 : return 104 ;
+                                       case  169554 : return 103 ;
+                                       case  169553 : return 102 ;
+                                       case  169550 : return 101 ;
+                                       case  169515 : return 100 ;
+                                       case  169512 : return 99 ;
+                                       case  169506 : return 98 ;
+                                       case  169504 : return 97 ;
+                                       case  169498 : return 96 ;
+                                       case  169475 : return 95 ;
+                                       case  169420 : return 94 ;
+                                       case  169419 : return 93 ;
+                                       case  169418 : return 92 ;
+                                       case  169417 : return 91 ;
+                                       case  169415 : return 90 ;
+                                       case  169411 : return 89 ;
+                                       case  169238 : return 88 ;
+                                       case  169236 : return 87 ;
+                                       case  169167 : return 86 ;
+                                       case  169160 : return 85 ;
+                                       case  169156 : return 84 ;
+                                       case  169148 : return 83 ;
+                                       case  169145 : return 82 ;
+                                       case  169144 : return 81 ;
+                                       case  169143 : return 80 ;
+                                       case  169138 : return 79 ;
+                                       case  169099 : return 78 ;
+                                       case  169094 : return 77 ;
+                                       case  169091 : return 76 ;
+                                       case  169045 : return 75 ;
+                                       case  169044 : return 74 ;
+                                       case  169040 : return 73 ;
+                                       case  169035 : return 72 ;
+                                       case  168992 : return 71 ;
+                                       case  168988 : return 70 ;
+                                       case  168984 : return 69 ;
+                                       case  168826 : return 68 ;
+                                       case  168777 : return 67 ;
+                                       case  168514 : return 66 ;
+                                       case  168512 : return 65 ;
+                                       case  168511 : return 64 ;
+                                       case  168467 : return 63 ;
+                                       case  168464 : return 62 ;
+                                       case  168461 : return 61 ;
+                                       case  168460 : return 60 ;
+                                       case  168458 : return 59 ;
+                                       case  168362 : return 58 ;
+                                       case  168361 : return 57 ;
+                                       case  168356 : return 56 ;
+                                       case  168342 : return 55 ;
+                                       case  168341 : return 54 ;
+                                       case  168325 : return 53 ;
+                                       case  168322 : return 52 ;
+                                       case  168318 : return 51 ;
+                                       case  168311 : return 50 ;
+                                       case  168310 : return 49 ;
+                                       case  168213 : return 48 ;
+                                       case  168212 : return 47 ;
+                                       case  168208 : return 46 ;
+                                       case  168207 : return 45 ;
+                                       case  168206 : return 44 ;
+                                       case  168205 : return 43 ;
+                                       case  168204 : return 42 ;
+                                       case  168203 : return 41 ;
+                                       case  168181 : return 40 ;
+                                       case  168177 : return 39 ;
+                                       case  168175 : return 38 ;
+                                       case  168173 : return 37 ;
+                                       case  168172 : return 36 ;
+                                       case  168171 : return 35 ;
+                                       case  168115 : return 34 ;
+                                       case  168108 : return 33 ;
+                                       case  168107 : return 32 ;
+                                       case  168105 : return 31 ;
+                                       case  168104 : return 30 ;
+                                       case  168103 : return 29 ;
+                                       case  168076 : return 28 ;
+                                       case  168069 : return 27 ;
+                                       case  168068 : return 26 ;
+                                       case  168066 : return 25 ;
+                                       case  167988 : return 24 ;
+                                       case  167987 : return 23 ;
+                                       case  167986 : return 22 ;
+                                       case  167985 : return 21 ;
+                                       case  167921 : return 20 ;
+                                       case  167920 : return 19 ;
+                                       case  167915 : return 18 ;
+                                       case  167909 : return 17 ;
+                                       case  167903 : return 16 ;
+                                       case  167902 : return 15 ;
+                                       case  167818 : return 14 ;
+                                       case  167814 : return 13 ;
+                                       case  167813 : return 12 ;
+                                       case  167808 : return 11 ;
+                                       case  167807 : return 10 ;
+                                       case  167806 : return 9 ;
+                                       case  167713 : return 8 ;
+                                       case  167712 : return 7 ;
+                                       case  167711 : return 6 ;
+                                       case  167706 : return 5 ;
+                                       case  167693 : return 4 ;
+                                       case  166532 : return 3 ;
+                                       case  166530 : return 2 ;
+                                       case  166529 : return 1 ;
+
+                                       default : return 199;
+                               }
+                       }
+       if(fPeriod== kLHC10h){
+               switch(run){
+                                               case  139517 : return 137;
+                                               case  139514 : return 136;
+                                               case  139513 : return 135;
+                                               case  139511 : return 134;
+                                               case  139510 : return 133;
+                                               case  139507 : return 132;
+                                               case  139505 : return 131;
+                                               case  139504 : return 130;
+                                               case  139503 : return 129;
+                                               case  139470 : return 128;
+                                               case  139467 : return 127;
+                                               case  139466 : return 126;
+                                               case  139465 : return 125;
+                                               case  139440 : return 124;
+                                               case  139439 : return 123;
+                                               case  139438 : return 122;
+                                               case  139437 : return 121;
+                                               case  139360 : return 120;
+                                               case  139329 : return 119;
+                                               case  139328 : return 118;
+                                               case  139314 : return 117;
+                                               case  139311 : return 116;
+                                               case  139310 : return 115;
+                                               case  139309 : return 114;
+                                               case  139308 : return 113;
+                                               case  139173 : return 112;
+                                               case  139172 : return 111;
+                                               case  139110 : return 110;
+                                               case  139107 : return 109;
+                                               case  139105 : return 108;
+                                               case  139104 : return 107;
+                                               case  139042 : return 106;
+                                               case  139038 : return 105;
+                                               case  139037 : return 104;
+                                               case  139036 : return 103;
+                                               case  139029 : return 102;
+                                               case  139028 : return 101;
+                                               case  138983 : return 100;
+                                               case  138982 : return 99;
+                                               case  138980 : return 98;
+                                               case  138979 : return 97;
+                                               case  138978 : return 96;
+                                               case  138977 : return 95;
+                                               case  138976 : return 94;
+                                               case  138973 : return 93;
+                                               case  138972 : return 92;
+                                               case  138965 : return 91;
+                                               case  138924 : return 90;
+                                               case  138872 : return 89;
+                                               case  138871 : return 88;
+                                               case  138870 : return 87;
+                                               case  138837 : return 86;
+                                               case  138830 : return 85;
+                                               case  138828 : return 84;
+                                               case  138826 : return 83;
+                                               case  138796 : return 82;
+                                               case  138795 : return 81;
+                                               case  138742 : return 80;
+                                               case  138732 : return 79;
+                                               case  138730 : return 78;
+                                               case  138666 : return 77;
+                                               case  138662 : return 76;
+                                               case  138653 : return 75;
+                                               case  138652 : return 74;
+                                               case  138638 : return 73;
+                                               case  138624 : return 72;
+                                               case  138621 : return 71;
+                                               case  138583 : return 70;
+                                               case  138582 : return 69;
+                                               case  138579 : return 68;
+                                               case  138578 : return 67;
+                                               case  138534 : return 66;
+                                               case  138469 : return 65;
+                                               case  138442 : return 64;
+                                               case  138439 : return 63;
+                                               case  138438 : return 62;
+                                               case  138396 : return 61;
+                                               case  138364 : return 60;
+                                               case  138359 : return 59;
+                                               case  138275 : return 58;
+                                               case  138225 : return 57;
+                                               case  138201 : return 56;
+                                               case  138200 : return 55;
+                                               case  138197 : return 54;
+                                               case  138192 : return 53;
+                                               case  138190 : return 52;
+                                               case  138154 : return 51;
+                                               case  138153 : return 50;
+                                               case  138151 : return 49;
+                                               case  138150 : return 48;
+                                               case  138126 : return 47;
+                                               case  138125 : return 46;
+                                               case  137848 : return 45;
+                                               case  137847 : return 44;
+                                               case  137844 : return 43;
+                                               case  137843 : return 42;
+                                               case  137752 : return 41;
+                                               case  137751 : return 40;
+                                               case  137748 : return 39;
+                                               case  137724 : return 38;
+                                               case  137722 : return 37;
+                                               case  137718 : return 36;
+                                               case  137704 : return 35;
+                                               case  137693 : return 34;
+                                               case  137692 : return 33;
+                                               case  137691 : return 32;
+                                               case  137689 : return 31;
+                                               case  137686 : return 30;
+                                               case  137685 : return 29;
+                                               case  137639 : return 28;
+                                               case  137638 : return 27;
+                                               case  137608 : return 26;
+                                               case  137595 : return 25;
+                                               case  137549 : return 24;
+                                               case  137546 : return 23;
+                                               case  137544 : return 22;
+                                               case  137541 : return 21;
+                                               case  137539 : return 20;
+                                               case  137531 : return 19;
+                                               case  137530 : return 18;
+                                               case  137443 : return 17;
+                                               case  137441 : return 16;
+                                               case  137440 : return 15;
+                                               case  137439 : return 14;
+                                               case  137434 : return 13;
+                                               case  137432 : return 12;
+                                               case  137431 : return 11;
+                                               case  137430 : return 10;
+                                               case  137366 : return 9;
+                                               case  137243 : return 8;
+                                               case  137236 : return 7;
+                                               case  137235 : return 6;
+                                               case  137232 : return 5;
+                                               case  137231 : return 4;
+                                               case  137165 : return 3;
+                                               case  137162 : return 2;
+                                               case  137161 : return 1;
+                                               default : return 199;
+                                       }
+                               }
+                               if( kLHC13 == fPeriod ) 
+                               {
+                                       switch(run)
+                                       {
+                                               case  195344 : return 1;
+                                               case  195346 : return 2;
+                                               case  195351 : return 3;
+                                               case  195389 : return 4;
+                                               case  195390 : return 5;
+                                               case  195391 : return 6;
+                                               case  195478 : return 7;
+                                               case  195479 : return 8;
+                                               case  195480 : return 9;
+                                               case  195481 : return 10;
+                                               case  195482 : return 11;
+                                               case  195483 : return 12;
+                                               case  195529 : return 13;
+                                               case  195531 : return 14;
+                                               case  195532 : return 15;
+                                               case  195566 : return 16;
+                                               case  195567 : return 17;
+                                               case  195568 : return 18;
+                                               case  195592 : return 19;
+                                               case  195593 : return 20;
+                                               case  195596 : return 21;
+                                               case  195633 : return 22;
+                                               case  195635 : return 23;
+                                               case  195644 : return 24;
+                                               case  195673 : return 25;
+                                               case  195675 : return 26;
+                                               case  195676 : return 27;
+                                               case  195677 : return 28;
+                                               case  195681 : return 29;
+                                               case  195682 : return 30;
+                                               case  195720 : return 31;
+                                               case  195721 : return 32;
+                                               case  195722 : return 33;
+                                               case  195724 : return 34;
+                                               case  195725 : return 34;
+                                               case  195726 : return 35;
+                                               case  195727 : return 36;
+                                               case  195760 : return 37;
+                                               case  195761 : return 38;
+                                               case  195765 : return 39;
+                                               case  195767 : return 40;
+                                               case  195783 : return 41;
+                                               case  195787 : return 42;
+                                               case  195826 : return 43;
+                                               case  195827 : return 44;
+                                               case  195829 : return 45;
+                                               case  195830 : return 46;
+                                               case  195831 : return 47;
+                                               case  195867 : return 48;
+                                               case  195869 : return 49;
+                                               case  195871 : return 50;
+                                               case  195872 : return 51;
+                                               case  195873 : return 52;
+                                               case  195935 : return 53;
+                                               case  195949 : return 54;
+                                               case  195950 : return 55;
+                                               case  195954 : return 56;
+                                               case  195955 : return 57;
+                                               case  195958 : return 58;
+                                               case  195989 : return 59;
+                                               case  195994 : return 60;
+                                               case  195998 : return 61;
+                                               case  196000 : return 62;
+                                               case  196006 : return 63;
+                                               case  196085 : return 64;
+                                               case  196089 : return 65;
+                                               case  196090 : return 66;
+                                               case  196091 : return 67;
+                                               case  196099 : return 68;
+                                               case  196105 : return 69;
+                                               case  196107 : return 70;
+                                               case  196185 : return 71;
+                                               case  196187 : return 72;
+                                               case  196194 : return 73;
+                                               case  196197 : return 74;
+                                               case  196199 : return 75;
+                                               case  196200 : return 76;
+                                               case  196201 : return 77;
+                                               case  196203 : return 78;
+                                               case  196208 : return 79;
+                                               case  196214 : return 80;
+                                               case  196308 : return 81;
+                                               case  196309 : return 82;
+                                               case  196310 : return 83;
+                                               case  196311 : return 84;
+                                               case  196433 : return 85;
+                                               case  196474 : return 86;
+                                               case  196475 : return 87;
+                                               case  196477 : return 88;
+                                               case  196528 : return 89;
+                                               case  196533 : return 90;
+                                               case  196535 : return 91;
+                                               case  196563 : return 92;
+                                               case  196564 : return 93;
+                                               case  196566 : return 94;
+                                               case  196568 : return 95;
+                                               case  196601 : return 96;
+                                               case  196605 : return 97;
+                                               case  196608 : return 98;
+                                               case  196646 : return 99;
+                                               case  196648 : return 100;
+                                               case  196701 : return 101;
+                                               case  196702 : return 102;
+                                               case  196703 : return 103;
+                                               case  196706 : return 104;
+                                               case  196714 : return 105;
+                                               case  196720 : return 106;
+                                               case  196721 : return 107;
+                                               case  196722 : return 108;
+                                               case  196772 : return 109;
+                                               case  196773 : return 110;
+                                               case  196774 : return 111;
+                                               case  196869 : return 112;
+                                               case  196870 : return 113;
+                                               case  196874 : return 114;
+                                               case  196876 : return 115;
+                                               case  196965 : return 116;
+                                               case  196967 : return 117;
+                                               case  196972 : return 118;
+                                               case  196973 : return 119;
+                                               case  196974 : return 120;
+                                               case  197003 : return 121;
+                                               case  197011 : return 122;
+                                               case  197012 : return 123;
+                                               case  197015 : return 124;
+                                               case  197027 : return 125;
+                                               case  197031 : return 126;
+                                               case  197089 : return 127;
+                                               case  197090 : return 128;
+                                               case  197091 : return 129;
+                                               case  197092 : return 130;
+                                               case  197094 : return 131;
+                                               case  197098 : return 132;
+                                               case  197099 : return 133;
+                                               case  197138 : return 134;
+                                               case  197139 : return 135;
+                                               case  197142 : return 136;
+                                               case  197143 : return 137;
+                                               case  197144 : return 138;
+                                               case  197145 : return 139;
+                                               case  197146 : return 140;
+                                               case  197147 : return 140;
+                                               case  197148 : return 141;
+                                               case  197149 : return 142;
+                                               case  197150 : return 143;
+                                               case  197152 : return 144;
+                                               case  197153 : return 145;
+                                               case  197184 : return 146;
+                                               case  197189 : return 147;
+                                               case  197247 : return 148;
+                                               case  197248 : return 149;
+                                               case  197254 : return 150;
+                                               case  197255 : return 151;
+                                               case  197256 : return 152;
+                                               case  197258 : return 153;
+                                               case  197260 : return 154;
+                                               case  197296 : return 155;
+                                               case  197297 : return 156;
+                                               case  197298 : return 157;
+                                               case  197299 : return 158;
+                                               case  197300 : return 159;
+                                               case  197302 : return 160;
+                                               case  197341 : return 161;
+                                               case  197342 : return 162;
+                                               case  197348 : return 163;
+                                               case  197349 : return 164;
+                                               case  197351 : return 165;
+                                               case  197386 : return 166;
+                                               case  197387 : return 167;
+                                               case  197388 : return 168;
+                                               default : return 199;
+                                       }
+                               }
+                               if((fPeriod == kUndefinedPeriod) && (fDebug >= 1) ) 
+                               {
+                                       AliWarning("Period not defined");
+                               }
+                               return 1;
+                       }
+
+//_______________________________________________________________________________
+Bool_t AliPHOSCorrelations::RejectTriggerMaskSelection()
+{
+       const Bool_t REJECT = true;
+       const Bool_t ACCEPT = false;
+
+       // No need to check trigger mask if no selection is done
+       if( kNoSelection == fInternalTriggerSelection )
+       return ACCEPT;
+
+       Bool_t reject = REJECT;
+
+       Bool_t isMB = (fEvent->GetTriggerMask() & (ULong64_t(1)<<1));
+       Bool_t isCentral = (fEvent->GetTriggerMask() & (ULong64_t(1)<<4));
+       Bool_t isSemiCentral = (fEvent->GetTriggerMask() & (ULong64_t(1)<<7));
+
+
+       if( kCentralInclusive == fInternalTriggerSelection
+       && isCentral ) reject = ACCEPT; // accept event.
+       else if( kCentralExclusive == fInternalTriggerSelection
+       && isCentral && !isSemiCentral && !isMB ) reject = ACCEPT; // accept event.
+
+       else if( kSemiCentralInclusive == fInternalTriggerSelection
+       && isSemiCentral ) reject = ACCEPT; // accept event
+       else if( kSemiCentralExclusive == fInternalTriggerSelection
+       && isSemiCentral && !isCentral && !isMB ) reject = ACCEPT; // accept event.
+
+       else if( kMBInclusive == fInternalTriggerSelection
+       && isMB ) reject = ACCEPT; // accept event.
+       else if( kMBExclusive == fInternalTriggerSelection
+       && isMB && !isCentral && !isSemiCentral ) reject = ACCEPT; // accept event.
+
+       if( REJECT == reject )
+       return REJECT;
+       else {
+       LogSelection(kInternalTriggerMaskSelection, fInternalRunNumber);
+       return ACCEPT;
+       }
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::SetVertex()
+{
+       const AliVVertex *primaryVertex = fEvent->GetPrimaryVertex();
+       if( primaryVertex ) 
+       {
+               fVertex[0] = primaryVertex->GetX();
+               fVertex[1] = primaryVertex->GetY();
+               fVertex[2] = primaryVertex->GetZ();
+       }
+       else
+       {
+//             AliError("Event has 0x0 Primary Vertex, defaulting to origo");
+               fVertex[0] = 0;
+               fVertex[1] = 0;
+               fVertex[2] = 0;
+       }
+       fVertexVector = TVector3(fVertex);
+
+       fVtxBin=0 ;// No support for vtx binning implemented.
+}
+//_______________________________________________________________________________
+Bool_t AliPHOSCorrelations::RejectEventVertex()
+{
+  if( ! fEvent->GetPrimaryVertex() )
+    return true; // reject
+  LogSelection(kHasVertex, fInternalRunNumber);
+  if ( TMath::Abs(fVertexVector.z()) > fMaxAbsVertexZ )
+    return true; // reject
+  LogSelection(kHasAbsVertex, fInternalRunNumber);
+  return false; // accept event.
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::SetCentrality()
+{
+       AliCentrality *centrality = fEvent->GetCentrality();
+       if( centrality ) 
+               fCentrality=centrality->GetCentralityPercentile(fCentralityEstimator);
+       else 
+       {
+               AliError("Event has 0x0 centrality");
+               fCentrality = -1.;
+       }
+
+       //cout<<"fCentrality: "<<fCentrality<<endl;
+       //FillHistogram("hCentrality",fCentrality,fInternalRunNumber-0.5) ;
+       fCentBin = GetCentralityBin(fCentrality);
+}
+//_______________________________________________________________________________
+Bool_t AliPHOSCorrelations::RejectEventCentrality()
+{
+       if (fCentrality<fCentCutoffDown)
+               return true; //reject
+       if(fCentrality>fCentCutoffUp)
+               return true;
+
+       return false;  // accept event.
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::SetCentralityBinning(const TArrayD& edges, const TArrayI& nMixed){
+// Define centrality bins by their edges
+  for(int i=0; i<edges.GetSize()-1; ++i)
+    if(edges.At(i) > edges.At(i+1)) AliFatal("edges are not sorted");
+  if( edges.GetSize() != nMixed.GetSize()+1) AliFatal("edges and nMixed don't have appropriate relative sizes");
+                 
+  fCentEdges = edges;
+  fCentNMixed = nMixed;
+}
+//_______________________________________________________________________________
+Int_t AliPHOSCorrelations::GetCentralityBin(Float_t centralityV0M){
+  int lastBinUpperIndex = fCentEdges.GetSize() -1;
+  if( centralityV0M > fCentEdges[lastBinUpperIndex] ) {
+    if( fDebug >= 1 )
+      AliWarning( Form("centrality (%f) larger then upper edge of last centrality bin (%f)!", centralityV0M, fCentEdges[lastBinUpperIndex]) );
+    return lastBinUpperIndex-1;
+  }
+  if( centralityV0M < fCentEdges[0] ) {
+    if( fDebug >= 1 )
+      AliWarning( Form("centrality (%f) smaller then lower edge of first bin (%f)!", centralityV0M, fCentEdges[0]) );
+    return 0;
+  }
+                 
+  fCentBin = TMath::BinarySearch<Double_t> ( GetNumberOfCentralityBins(), fCentEdges.GetArray(), centralityV0M );
+  return fCentBin;
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::SetCentralityBorders (double down , double up ){
+  if (down < 0. || up > 100 || up<=down)
+     AliError( Form("Warning. Bad value of centrality borders. Setting as default: fCentCutoffDown=%2.f, fCentCutoffUp=%2.f",fCentCutoffDown,fCentCutoffUp) );
+  else{
+    fCentCutoffDown = down; 
+    fCentCutoffUp = up;
+    AliInfo( Form("Centrality border was set as fCentCutoffDown=%2.f, fCentCutoffUp=%2.f",fCentCutoffDown,fCentCutoffUp) );
+  }
+}
+
+//_______________________________________________________________________________
+void AliPHOSCorrelations::EvalReactionPlane()
+{
+       // assigns: fHaveTPCRP and fRP
+       // also does a few histogram fills
+
+       AliEventplane *eventPlane = fEvent->GetEventplane();
+       if( ! eventPlane ) { AliError("Event has no event plane"); return; }
+
+       Double_t reactionPlaneQ = eventPlane->GetEventplane("Q");
+
+       if(reactionPlaneQ>=999 || reactionPlaneQ < 0.)
+       { 
+               //reaction plain was not defined
+               fHaveTPCRP = kFALSE;
+       }
+       else
+       {
+               fHaveTPCRP = kTRUE;
+       }
+
+       if(fHaveTPCRP)
+               fRP = reactionPlaneQ;
+       else
+               fRP = 0.;
+       
+       FillHistogram("phiRPflat",fRP,fCentrality) ;
+}
+//_______________________________________________________________________________
+Int_t AliPHOSCorrelations::GetRPBin()
+{
+       Double_t averageRP;
+       averageRP = fRP ;       // If possible, it is better to have EP bin from TPC
+                               // to have similar events for miximng (including jets etc)   (fRPV0A+fRPV0C+fRP) /3.;
+
+       fEMRPBin = Int_t(fNEMRPBins*(averageRP)/TMath::Pi());
+
+       if( fEMRPBin > (Int_t)fNEMRPBins-1 ) 
+               fEMRPBin = fNEMRPBins-1 ;
+       else 
+       if(fEMRPBin < 0) fEMRPBin=0;
+
+       return fEMRPBin;
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::SelectPhotonClusters()
+{
+       //Selects PHOS clusters
+
+       // clear (or create) array for holding events photons/clusters
+       if(fCaloPhotonsPHOS)
+               fCaloPhotonsPHOS->Clear();
+       else{
+               fCaloPhotonsPHOS = new TClonesArray("AliCaloPhoton",200);
+       }
+
+       Int_t nclu = fEvent->GetNumberOfCaloClusters() ;
+       Int_t inPHOS=0 ;
+       for (Int_t i=0;  i<nclu;  i++) {
+               AliVCluster *clu = fEvent->GetCaloCluster(i);   
+               if ( !clu->IsPHOS() ) continue ;
+               if( clu->E()< fMinClusterEnergy) continue; // reject cluster
+
+
+               Double_t distBC=clu->GetDistanceToBadChannel();
+               if(distBC<fMinBCDistance)
+                       continue ;
+
+               if(clu->GetNCells() < fMinNCells) continue ;
+               if(clu->GetM02() < fMinM02)   continue ;
+
+               if(fTOFCutEnabled){
+                       Double_t tof = clu->GetTOF();
+                       if(TMath::Abs(tof) > fTOFCut ) continue ;
+               }
+               TLorentzVector lorentzMomentum;
+               Double_t ecore = clu->GetMCEnergyFraction();
+
+               clu->GetMomentum(lorentzMomentum, fVertex);
+               lorentzMomentum*=ecore/lorentzMomentum.E() ;
+
+               if(inPHOS>=fCaloPhotonsPHOS->GetSize()){
+                       fCaloPhotonsPHOS->Expand(inPHOS+50) ;
+               }
+        
+               AliCaloPhoton * ph =new((*fCaloPhotonsPHOS)[inPHOS]) AliCaloPhoton(lorentzMomentum.X(),lorentzMomentum.Py(),lorentzMomentum.Z(),lorentzMomentum.E());
+               inPHOS++ ;
+               ph->SetCluster(clu);
+
+               Float_t cellId=clu->GetCellAbsId(0) ;
+               Int_t mod = (Int_t)TMath:: Ceil(cellId/(56*64) ) ; 
+               ph->SetModule(mod) ;
+
+               ph->SetNCells(clu->GetNCells());
+               ph->SetDispBit(clu->GetDispersion()<2.5) ;
+               ph->SetCPVBit(clu->GetEmcCpvDistance()>2.) ;
+
+               Float_t  position[3];
+               clu->GetPosition(position);
+               TVector3 global(position) ;
+               Int_t relId[4] ;
+               fPHOSGeo->GlobalPos2RelId(global,relId) ;
+               Int_t modPHOS  = relId[0] ;
+               Int_t cellXPHOS = relId[2];
+               Int_t cellZPHOS = relId[3] ;
+
+               FillHistogram(Form("QA_cluXZE_mod%i", modPHOS), cellXPHOS, cellZPHOS, lorentzMomentum.E() ) ;
+       }
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::SelectAccosiatedTracks()
+{
+       // clear (or create) array for holding events tracks
+       if(fTracksTPC)
+               fTracksTPC->Clear();
+       else 
+       {
+               fTracksTPC = new TClonesArray("TLorentzVector",12000);
+       }
+       Int_t iTracks=0 ;
+       for (Int_t i=0; i<fEvent->GetNumberOfTracks(); i++) 
+       {
+         
+               AliVParticle *track = fEvent->GetTrack(i);
+                       if(fEventESD){
+                       if(!SelectESDTrack((AliESDtrack*)track)) continue ;
+               }
+               else{
+                       if(!SelectAODTrack((AliAODTrack*)track)) continue ;               
+               }
+               Double_t px = track->Px();
+               Double_t py = track->Py();
+               Double_t pz = track->Pz() ;
+               Double_t e = track->E() ;
+               
+               if(iTracks>=fTracksTPC->GetSize())
+                               fTracksTPC->Expand(iTracks+50) ;
+               
+               new((*fTracksTPC)[iTracks]) TLorentzVector(px, py, pz,e);
+               iTracks++ ;
+       }
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::ConsiderPi0s()
+{
+
+  const Int_t nPHOS=fCaloPhotonsPHOS->GetEntriesFast() ;
+  for(Int_t i1=0; i1 < nPHOS-1; i1++){
+     AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ;
+     for (Int_t i2=i1+1; i2<nPHOS; i2++){
+       AliCaloPhoton * ph2=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i2) ;
+       TLorentzVector p12  = *ph1  + *ph2;
+
+       Double_t phiTrigger=p12.Phi() ;
+       Double_t etaTrigger=p12.Eta() ;
+
+       Double_t m=p12.M() ;
+       Double_t pt=p12.Pt() ;
+       int mod1 = ph1->Module() ;
+       int mod2 = ph2->Module() ;
+       
+
+       FillHistogram("clu_phieta",phiTrigger,etaTrigger);
+       FillHistogram("clusingle_phieta",ph1->Phi(), ph1->Eta());
+       FillHistogram("clusingle_phieta",ph2->Phi(), ph2->Eta());
+
+
+       FillHistogram("all_mpt",m, pt);
+                               
+       if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) 
+                       FillHistogram("cpv_mpt",m, pt);
+
+       if ( ph1->IsDispOK() && ph2->IsDispOK() ){
+           FillHistogram("disp_mpt",m, pt);
+          if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) {
+             FillHistogram("both_mpt",m, pt);
+             if(mod1 == mod2) FillHistogram(Form("both%d_mpt",mod1),m, pt);
+          }
+       }
+                       
+       if(!TestMass(m,pt)) continue;
+
+       // Take track's angles and compare with cluster's angles.
+       for(Int_t i3=0; i3<fTracksTPC->GetEntriesFast(); i3++){
+          TLorentzVector * track = (TLorentzVector*)fTracksTPC->At(i3);
+
+          Double_t phiAssoc = track->Phi();
+          Double_t etaAssoc = track->Eta();
+          Double_t ptAssoc = track->Pt();
+
+          Double_t dPhi = phiAssoc - phiTrigger;
+          while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi();
+                while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi();
+
+          Double_t dEta = etaAssoc - etaTrigger;                       
+          
+          Double_t ptAssocBin=GetAssocBin(ptAssoc) ;
+          FillHistogram(Form("all_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);                        
+          if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) 
+            FillHistogram(Form("cpv_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);                      
+
+          if ( ph1->IsDispOK() && ph2->IsDispOK() ){
+            FillHistogram(Form("disp_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);                     
+            if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) 
+              FillHistogram(Form("both_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);                   
+          }
+       } 
+     }
+   }
+}
+
+//_______________________________________________________________________________
+void AliPHOSCorrelations::ConsiderPi0sMix()
+{
+  TList * arrayList = GetCaloPhotonsPHOSList(fVtxBin, fCentBin, fEMRPBin);
+  for(Int_t evi=0; evi<arrayList->GetEntries();evi++){
+     TClonesArray * mixPHOS = static_cast<TClonesArray*>(arrayList->At(evi));
+     for (Int_t i1=0; i1 < fCaloPhotonsPHOS->GetEntriesFast(); i1++){
+       AliCaloPhoton * ph1 = (AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ;
+       for(Int_t i2=0; i2<mixPHOS->GetEntriesFast(); i2++){
+         AliCaloPhoton * ph2 = (AliCaloPhoton*)mixPHOS->At(i2) ;
+          TLorentzVector p12  = *ph1  + *ph2;
+         Double_t m=p12.M() ;
+         Double_t pt=p12.Pt() ;
+         int mod1 = ph1->Module() ;
+         int mod2 = ph2->Module() ;
+
+          FillHistogram("mix_all_mpt", m, pt);
+         if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) 
+           FillHistogram("mix_cpv_mpt",m, pt);
+           if ( ph1->IsDispOK() && ph2->IsDispOK() ){
+             FillHistogram("mix_disp_mpt",m, pt);
+             if ( ph1->IsCPVOK() && ph2->IsCPVOK() ){
+                FillHistogram("mix_both_mpt",m, pt);
+                if (mod1 == mod2) FillHistogram(Form("mix_both%d_mpt",mod1),m, pt);
+             }
+           }
+       }
+     }
+  }
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::ConsiderTracksMix()
+{
+  TList * arrayList = GetTracksTPCList(fVtxBin, fCentBin, fEMRPBin);
+  for (Int_t i1=0; i1 < fCaloPhotonsPHOS->GetEntriesFast(); i1++) {
+    AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ;
+    for (Int_t i2=0; i2<fCaloPhotonsPHOS->GetEntriesFast(); i2++){
+      AliCaloPhoton * ph2=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i2) ;
+      TLorentzVector p12  = *ph1  + *ph2;
+      Double_t phiTrigger=p12.Phi() ;
+      Double_t etaTrigger=p12.Eta() ;
+
+      Double_t m=p12.M() ;
+      Double_t pt=p12.Pt() ;
+
+      if(!TestMass(m,pt)) continue;
+      for(Int_t evi=0; evi<arrayList->GetEntries();evi++){
+       TClonesArray * mixTracks = static_cast<TClonesArray*>(arrayList->At(evi));
+       for(Int_t i3=0; i3<mixTracks->GetEntriesFast(); i3++){
+         TLorentzVector * track = (TLorentzVector*)mixTracks->At(i3);          
+
+         Double_t phiAssoc = track->Phi();
+         Double_t etaAssoc = track->Eta();
+         Double_t ptAssoc =  track->Pt();
+
+          Double_t ptAssocBin=GetAssocBin(ptAssoc) ;
+       
+         Double_t dPhi = phiAssoc - phiTrigger;
+         while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi();
+         while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi();
+
+         Double_t dEta = etaAssoc - etaTrigger;                        
+         
+         FillHistogram(Form("mix_all_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);                             
+         if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+           FillHistogram(Form("mix_cpv_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);                           
+
+         if ( ph1->IsDispOK() && ph2->IsDispOK() ){
+           FillHistogram(Form("mix_disp_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);                          
+           if ( ph1->IsCPVOK() && ph2->IsCPVOK() )
+             FillHistogram(Form("mix_both_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta);                                
+         }
+       }
+     } 
+   }
+  }
+}
+//_______________________________________________________________________________
+TList* AliPHOSCorrelations::GetCaloPhotonsPHOSList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin){
+
+  int offset = vtxBin * GetNumberOfCentralityBins() * fNEMRPBins + centBin * fNEMRPBins + rpBin;
+  if( fCaloPhotonsPHOSLists->At(offset) ) {
+    TList* list = dynamic_cast<TList*> (fCaloPhotonsPHOSLists->At(offset));
+    return list;
+  }
+  else{ // no list for this bin has been created, yet
+    TList* list = new TList();
+    fCaloPhotonsPHOSLists->AddAt(list, offset);
+    return list;
+  }
+}
+//_______________________________________________________________________________
+TList* AliPHOSCorrelations::GetTracksTPCList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin){
+               
+  int offset = vtxBin * GetNumberOfCentralityBins() * fNEMRPBins + centBin * fNEMRPBins + rpBin;
+  if( fTracksTPCLists->At(offset) ) { // list exists
+     TList* list = dynamic_cast<TList*> (fTracksTPCLists->At(offset));
+     return list;
+  }
+  else { // no list for this bin has been created, yet
+    TList* list = new TList();
+    fTracksTPCLists->AddAt(list, offset);
+    return list;
+  }
+}
+//_______________________________________________________________________________
+Double_t AliPHOSCorrelations::GetAssocBin(Double_t pt){
+  //Calculates bin 
+  for(Int_t i=1; i<fAssocBins.GetSize(); i++){
+    if(pt>fAssocBins.At(i-1) && pt<fAssocBins.At(i))
+      return fAssocBins.At(i) ;
+  }
+  return fAssocBins.At(fAssocBins.GetSize()-1) ;
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::FillTrackEtaPhi()
+{
+       // Distribution TPC's tracks by angles.
+       for (Int_t i1=0; i1<fTracksTPC->GetEntriesFast(); i1++){
+               TLorentzVector * track = (TLorentzVector*)fTracksTPC->At(i1);
+               FillHistogram( "track_phieta", track->Phi(), track->Eta() );
+       }
+}
+
+//_______________________________________________________________________________
+void AliPHOSCorrelations::UpdatePhotonLists()
+{
+  //Now we either add current events to stack or remove
+  //If no photons in current event - no need to add it to mixed
+
+  TList * arrayList = GetCaloPhotonsPHOSList(fVtxBin, fCentBin, fEMRPBin);
+  if( fDebug >= 2 )
+    AliInfo( Form("fCentBin=%d, fCentNMixed[]=%d",fCentBin,fCentNMixed[fCentBin]) );
+  if(fCaloPhotonsPHOS->GetEntriesFast()>0)
+  {
+    arrayList->AddFirst(fCaloPhotonsPHOS) ;
+    fCaloPhotonsPHOS=0x0;
+    if(arrayList->GetEntries() > fCentNMixed[fCentBin])
+    { // Remove redundant events
+      TClonesArray * tmp = static_cast<TClonesArray*>(arrayList->Last()) ;
+      arrayList->RemoveLast() ;
+      delete tmp; 
+    }
+  }
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::UpdateTrackLists()
+{
+  //Now we either add current events to stack or remove
+  //If no photons in current event - no need to add it to mixed
+
+  TList * arrayList = GetTracksTPCList(fVtxBin, fCentBin, fEMRPBin);
+
+  if( fDebug >= 2 )
+    AliInfo( Form("fCentBin=%d, fCentNMixed[]=%d",fCentBin,fCentNMixed[fCentBin]) );
+  if(fTracksTPC->GetEntriesFast()>0)
+  {
+
+    arrayList->AddFirst(fTracksTPC) ;
+    fTracksTPC=0x0;
+    if(arrayList->GetEntries() > fCentNMixed[fCentBin])
+    { // Remove redundant events
+      TClonesArray * tmp = static_cast<TClonesArray*>(arrayList->Last()) ;
+      arrayList->RemoveLast() ;
+      delete tmp; 
+    }
+  }
+}
+//_______________________________________________________________________________
+Bool_t AliPHOSCorrelations::SelectESDTrack(AliESDtrack * t) const
+// Estimate if this track can be used for the RP calculation. If all right - return "TRUE"
+{
+       Float_t pt=t->Pt();
+       if(pt<0.5 || pt>10.) return kFALSE ;
+       if(fabs( t->Eta() )>0.8) return kFALSE;
+       if(!fESDtrackCuts->AcceptTrack(t)) return kFALSE ;
+       return kTRUE ;
+}
+//_______________________________________________________________________________
+Bool_t AliPHOSCorrelations::SelectAODTrack(AliAODTrack * t) const
+// Estimate if this track can be used for the RP calculation. If all right - return "TRUE"
+{
+       Float_t pt=t->Pt();
+       if(pt<0.5 || pt>10.) return kFALSE ;
+       if(fabs( t->Eta() )>0.8) return kFALSE;
+       if(fCheckHibridGlobal == kOnlyHibridTracks)
+       {
+               if(!t->IsHybridGlobalConstrainedGlobal()) 
+                       return kFALSE ;
+       }
+
+       if (fCheckHibridGlobal == kWithOutHibridTracks)
+       {
+               if(t->IsHybridGlobalConstrainedGlobal()) 
+                       return kFALSE ;
+       }
+
+       return kTRUE ;
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::SetPeriod(Period period)
+{
+       fPeriod = period;
+}
+
+//_______________________________________________________________________________
+void AliPHOSCorrelations::LogProgress(int step)
+// Fill "step by step" hist
+{
+  //FillHistogram("hSelEvents", step+0.5, internalRunNumber-0.5);
+  FillHistogram("hTotSelEvents", step+0.5);
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::LogSelection(int step, int internalRunNumber)
+{
+  // the +0.5 is not realy neccisarry, but oh well... -henrik
+  FillHistogram("hSelEvents", step+0.5, internalRunNumber-0.5);
+  //FillHistogram("hTotSelEvents", step+0.5);
+}
+//_______________________________________________________________________________
+Bool_t AliPHOSCorrelations::TestMass(Double_t m, Double_t /*pt*/)
+{
+       //Check if mair in pi0 peak window
+       //To make pT-dependent 
+       if (fSigmaWidth == 0.)
+               return (fMassInvMean-fMassInvSigma<m && m<fMassInvMean+fMassInvSigma) ; 
+       else
+               return (fMassInvMean-fMassInvSigma*fSigmaWidth<m && m<fMassInvMean+fMassInvSigma*fSigmaWidth) ; 
+} 
+//_______________________________________________________________________________
+void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x)const
+{
+  //FillHistogram
+  TH1 * hist = dynamic_cast<TH1*>(fOutputContainer->FindObject(key)) ;
+  if(hist)
+    hist->Fill(x) ;
+  else
+    AliError(Form("can not find histogram (of instance TH1) <%s> ",key)) ;
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::FillHistogram(const char * key, Double_t x, Double_t y) const
+{
+  //Fills 2D histograms with key
+  TObject * obj = fOutputContainer->FindObject(key);
+  TH2 * th2 = dynamic_cast<TH2*> (obj);
+  if(th2) {
+    th2->Fill(x, y) ;
+    return;
+  }
+
+  AliError(Form("can not find histogram (of instance TH2) <%s> ",key)) ;
+}
+//_______________________________________________________________________________
+void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const
+{
+  //Fills 3D histograms with key
+  TObject * obj = fOutputContainer->FindObject(key);
+  TH3 * th3 = dynamic_cast<TH3*> (obj);
+  if(th3) {
+    th3->Fill(x, y, z) ;
+    return;
+  }
+  AliError(Form("can not find histogram (of instance TH3) <%s> ",key)) ;
+}
+//_______________________________________________________________________________
\ No newline at end of file
diff --git a/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.h b/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.h
new file mode 100644 (file)
index 0000000..4a7052d
--- /dev/null
@@ -0,0 +1,206 @@
+#ifndef AliPHOSCorrelations_cxx
+#define AliPHOSCorrelations_cxx
+
+/* Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice     */
+
+// Analysis task for identified PHOS cluster from pi0 and take korrelation betwen hadron-pi0 angel's.
+/// Authors:   Daniil Ponomarenko (Daniil.Ponomarenko@cern.ch)
+//                    Dmitry Blau
+// 07-Feb-2014
+
+class TClonesArray;
+class AliStack ;
+class AliESDtrackCuts;
+class AliPHOSGeometry;
+class AliTriggerAnalysis;
+class AliESDEvent ;
+class AliPIDResponse;
+class AliPHOSCalibData ;
+class AliESDCaloCluster ;
+class AliESDEvent ;
+class AliESDtrack ;
+class AliAODTrack ;
+class AliVCluster ;
+class AliAnalysisUtils;
+class AliEPFlattener;
+
+
+#include "TArrayD.h"
+#include "AliAnalysisTaskSE.h"
+
+class AliPHOSCorrelations : public AliAnalysisTaskSE 
+{
+public:
+  enum Period { kUndefinedPeriod, kLHC10h, kLHC11h, kLHC13 };
+  enum EventSelection { kTotal, kInternalTriggerMaskSelection, kHasVertex, kHasAbsVertex, kHasCentrality,  kCentUnderUpperBinUpperEdge, kHasPHOSClusters, kHasTPCTracks, kTotalSelected };
+  enum HibridCheckVeriable { kOnlyHibridTracks, kWithOutHibridTracks, kAllTracks };
+  enum TriggerSelection { kNoSelection, kCentralInclusive, kCentralExclusive, kSemiCentralInclusive, kSemiCentralExclusive, kMBInclusive, kMBExclusive };
+
+
+public:
+  AliPHOSCorrelations();
+  AliPHOSCorrelations(const char *name, Period period );
+  virtual ~AliPHOSCorrelations();
+
+  virtual void   UserCreateOutputObjects();
+  virtual void   UserExec(Option_t *option);
+//  virtual void   Terminate(Option_t *);
+
+  void SetHibridGlobalCheking(Int_t hibridCheck = kAllTracks) {fCheckHibridGlobal = hibridCheck; }
+  void SetCentralityBinning(const TArrayD& edges, const TArrayI& nMixed);
+  void SetInternalTriggerSelection(TriggerSelection selection) { fInternalTriggerSelection = selection; }
+  void EnableTOFCut(Bool_t enable = kTRUE, Double_t TOFCut = 100.e-9){fTOFCutEnabled=enable; fTOFCut=TOFCut;}
+  void SetMassWindow(Double_t massMean = 0.135, Double_t massSigma = 0.01) { fMassInvMean = massMean; fMassInvSigma = massSigma; }
+  void SetSigmaWidth(Double_t sigmaWidth= 0) { fSigmaWidth = sigmaWidth; }
+  void SetPeriod(Period period);
+  void SetCentralityBorders (double down = 0., double up = 90.) ;
+  void SetPtAssocBins(TArrayD * arr){fAssocBins.Set(arr->GetSize(), arr->GetArray()) ;} 
+
+  void SetCentralityEstimator(const char * centr) {fCentralityEstimator = centr;}
+  void SetEventMixingRPBinning(UInt_t nBins) { fNEMRPBins = nBins; }
+  void SetMaxAbsVertexZ(Float_t z) { fMaxAbsVertexZ = z; }
+  
+protected: 
+
+  AliPHOSCorrelations(const AliPHOSCorrelations&);        // not implemented
+  AliPHOSCorrelations& operator=(const AliPHOSCorrelations&); // not implemented
+  
+  // Histograms and trees.
+    void SetHistPtAssoc();                      // Set massive of histograms (1-5).
+    void SetHistCutDistribution();              // Set other histograms.
+    void SetHistEtaPhi();                       // Set hists, with track's and cluster's angle distributions.
+    void FillTrackEtaPhi();                     // Distribution by track's angles.
+    void SetHistPHOSClusterMap();       // XZE distribution in PHOS.
+    void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key.
+    void FillHistogram(const char * key,Double_t x, Double_t y) const ; //Fill 2D histogram witn name key
+    void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key.
+
+    void SetESDTrackCuts(); // AliESDtrack cuts ( for esd data )
+    
+    Bool_t TestMass(Double_t m, Double_t pt) ;
+    Double_t GetAssocBin(Double_t pt) ;
+
+    Int_t ConvertToInternalRunNumber(Int_t run);
+
+    void FillTriggerProgress();
+    Bool_t RejectTriggerMaskSelection(); 
+
+    void    SetVertex();
+    Bool_t RejectEventVertex();
+
+    void  SetCentrality();   // Find centrality of event.
+    Bool_t RejectEventCentrality(); 
+    
+
+    Int_t     GetCentralityBin(Float_t centralityV0M);
+    UInt_t  GetNumberOfCentralityBins() { return fCentEdges.GetSize()-1; }
+
+    void EvalReactionPlane();                               // Find RP of event.
+    void EvalV0ReactionPlane();                           // Find RP of event.
+    Int_t GetRPBin(); // Return RP (rad).
+
+    Double_t ApplyFlattening(Double_t phi, Double_t c) ;       //Apply centrality-dependent flattening.
+    Double_t ApplyFlatteningV0A(Double_t phi, Double_t c) ; //Apply centrality-dependent flattening.
+    Double_t ApplyFlatteningV0C(Double_t phi, Double_t c) ; //Apply centrality-dependent flattening.
+
+    
+    virtual void SelectPhotonClusters();
+    void SelectAccosiatedTracks();
+
+    void ConsiderPi0s();
+    void ConsiderPi0sMix();           // MIX for catch Mass
+    void ConsiderTracksMix();       // MIX for catch Yeild
+    
+    TList* GetCaloPhotonsPHOSList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin);
+    TList* GetTracksTPCList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin);
+
+    void UpdatePhotonLists();
+    void UpdateTrackLists();
+
+
+    Bool_t SelectESDTrack(AliESDtrack * t) const; //estimate if this track can be used for the RP calculation
+    Bool_t SelectAODTrack(AliAODTrack * t) const; //estimate if this track can be used for the RP calculation
+
+    // Logical and debug.
+    void LogProgress(int step);
+    void LogSelection(int step, int internalRunNumber);
+
+  // Set / Get parametrs
+    void SetManualV0EPCalc(Bool_t manCalc = true) {fManualV0EPCalc = manCalc;}
+
+    AliAnalysisUtils* GetAnalysisUtils();
+private:
+  // Geometry
+    AliPHOSGeometry* fPHOSGeo;
+  // Make output histograms / conteiners.
+    TList * fOutputContainer;              //final histogram / tree container     
+   
+  // cluster cut variables:
+    Double_t fMinClusterEnergy;
+    Double_t fMinBCDistance;  //distance to nearest bad channel
+    Int_t    fMinNCells;
+    Double_t fMinM02;
+    Bool_t fTOFCutEnabled;
+    Double_t fTOFCut;
+
+  // Binning, [vtx, centrality, reaction-plane]
+    Int_t   fNVtxZBins;
+    TArrayD fCentEdges;                 // Centrality Bin Lower edges.
+    TArrayI fCentNMixed;                // Number of mixed events for each centrality bin.
+    UInt_t  fNEMRPBins;                  // Binning of Reaction plane.
+    TArrayD fAssocBins;                 //  Assoc Pt Bin Lower edges.
+
+  // Control variables
+    Int_t fCheckHibridGlobal;      // For checking/dischecking/passingcheck: t->IsHybridGlobalConstrainedGlobal();
+
+  // Behavior / cuts
+    Period fPeriod;
+    TriggerSelection fInternalTriggerSelection;
+    Float_t fMaxAbsVertexZ;       // in cm.
+    Bool_t fManualV0EPCalc;
+
+    Double_t fCentCutoffDown;   // Ignore Centrality less %. (def = 0%)
+    Double_t fCentCutoffUp;     // Ignore Centrality over %. (def = 90%)
+
+    Double_t fMassInvMean ;      //
+    Double_t fMassInvSigma ;      // 
+    Double_t fSigmaWidth;       // 0 = wide
+
+    AliVEvent* fEvent;          //! Current event
+    AliESDEvent* fEventESD;     //! Current event, if ESD.
+    AliAODEvent* fEventAOD;     //! Current event, if AOD.
+    AliESDtrackCuts *fESDtrackCuts;     // Track cut
+
+    Int_t fRunNumber;           //! run number
+    Int_t fInternalRunNumber ;  //!Current internal run number
+
+    TProfile* fMultV0;                  // object containing VZERO calibration information
+    Float_t fV0Cpol,fV0Apol;            // loaded by OADB
+    Float_t fMeanQ[9][2][2];    // and recentering
+    Float_t fWidthQ[9][2][2];   //       
+    TString fEPcalibFileName; 
+
+    Double_t fVertex[3];          //!
+    TVector3 fVertexVector;       //!
+    Int_t fVtxBin;                //!
+
+    TString fCentralityEstimator; //! Centrality estimator ("V0M", "ZNA")
+    Float_t fCentrality ;         //! Centrality of the current event
+    Int_t   fCentBin ;            //! Current centrality bin
+
+    Bool_t fHaveTPCRP ; //! Is TPC RP defined?
+    Float_t fRP ;       //! Reaction plane calculated with full TPC
+    Int_t fEMRPBin;     //! Event Mixing Reaction Plane Bin
+
+    TClonesArray * fCaloPhotonsPHOS ;      //! PHOS photons in current event
+    TClonesArray * fTracksTPC ;            //! TPC Tracks in current event
+
+    TObjArray * fCaloPhotonsPHOSLists;  //! array of TList, Containers for events with PHOS photons
+    TObjArray * fTracksTPCLists;        //! array of TList, Containers for events with PHOS photons
+
+  ClassDef(AliPHOSCorrelations, 2);    // PHOS analysis task
+};
+
+#endif
index 91576f5391c4c962e3139fac5f87533d82c1fd72..f39e76a35b85507663ad8446a44721edaf8ce371 100644 (file)
@@ -47,4 +47,7 @@
 #pragma link C++ class AliPHOSpPbPi0Header+;
 #pragma link C++ class AliAnalysisTaskSEPHOSpPbPi0+;
 
+//PHOS_Correlations
+#pragma link C++ class AliPHOSCorrelations+;
+
 #endif
index 7e3b36a69aec4509ded06667abf8641e36fd02b1..dc0f0e8596ae4856424d604d4a611446603b0f9d 100644 (file)
@@ -44,7 +44,8 @@ set ( CLASS_HDRS
     AliAnalysisTaskSED0Correlations.h
     AliAnalysisTaskSEDplusCorrelations.h
     AliAnalysisTaskSEmcCorr.h  
-    AliAnalysisTaskSEHFCJqa.h  
+    AliAnalysisTaskSEHFCJqa.h
+    AliHFDhadronCorrSystUnc.h  
     )
 
 string ( REPLACE ".h" ".cxx" MODULE_SRCS "${CLASS_HDRS}" )
diff --git a/PWGHF/correlationHF/AliHFDhadronCorrSystUnc.cxx b/PWGHF/correlationHF/AliHFDhadronCorrSystUnc.cxx
new file mode 100644 (file)
index 0000000..6fef004
--- /dev/null
@@ -0,0 +1,10090 @@
+/**************************************************************************
+ * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+
+/* $Id: $ */
+
+/////////////////////////////////////////////////////////////
+// class for systematic uncertainties on D meson -hadron correlation distribution
+//
+// Author: A. Rossi, andrea.rossi@cern.ch
+/////////////////////////////////////////////////////////////
+#include <Riostream.h>
+#include "AliHFDhadronCorrSystUnc.h"
+#include <TMath.h>
+#include <TH1D.h>
+#include <TH2D.h>
+#include <TCanvas.h>
+#include <TGraphAsymmErrors.h>
+#include <TNamed.h>
+
+using std::cout;
+using std::endl;
+
+ClassImp(AliHFDhadronCorrSystUnc)
+
+AliHFDhadronCorrSystUnc::AliHFDhadronCorrSystUnc() : TNamed(), 
+  fmeson(),
+  fstrmeson(),
+  fstrptAss(),
+  fstrptD(),
+  fhDeltaPhiTemplate(),
+  fhYieldExtraction(),
+  fhBackSubtractionMin(),
+  fhBackSubtractionMax(),
+  fhBeautyFDmin(),
+  fhBeautyFDmax(),
+  fhMCclosureTestMin(),
+  fhMCclosureTestMax(),
+  fhMCcorrectionsMin(),
+  fhMCcorrectionsMax(),
+  fhMCDefficiencyMin(),
+  fhMCDefficiencyMax(),
+  fhSecContaminationMin(),
+  fhSecContaminationMax(),
+  fhTotalMin(),
+  fhTotalMax(),
+  fhTotalNonFDMin(),
+  fhTotalNonFDMax(),
+  fhTotalNonFlatDPhiMin(),
+  fhTotalNonFlatDPhiMax(),
+  fhtotFlatMin(),
+  fhtotFlatMax(),
+  fgrYieldUnc(),         
+  fgrBackSubUnc(),
+  fgrMCcorrections(),   
+  fgrMCDefficiency(),   
+  fgrSecContamination(),   
+  fgrMCclosureTest(),  
+  fgrBeautyFD(),
+  fgrYieldUncRel(),         
+  fgrBackSubUncRel(),
+  fgrMCcorrectionsRel(),   
+  fgrMCDefficiencyRel(),   
+  fgrSecContaminationRel(),   
+  fgrMCclosureTestRel(),  
+  fgrBeautyFDRel(),
+  fgrTotal(),
+  fgrTotalRel(),
+  fgrTotalNonFD(),
+  fgrTotalNonFlatDPhi(),
+  fgrTotalNonFlatDPhiRel(),
+  fgrTotalFlatDPhi(),
+  fgrTotalFlatDPhiRel()
+        
+{
+  // default constructor
+}
+
+
+AliHFDhadronCorrSystUnc::AliHFDhadronCorrSystUnc(const char* name) : 
+  TNamed(name,name),                                              
+  fmeson(),
+  fstrmeson(),
+  fstrptAss(),
+  fstrptD(),
+  fhDeltaPhiTemplate(),
+  fhYieldExtraction(),
+  fhBackSubtractionMin(),
+  fhBackSubtractionMax(),
+  fhBeautyFDmin(),
+  fhBeautyFDmax(),
+  fhMCclosureTestMin(),
+  fhMCclosureTestMax(),
+  fhMCcorrectionsMin(),
+  fhMCcorrectionsMax(),
+  fhMCDefficiencyMin(),
+  fhMCDefficiencyMax(),
+  fhSecContaminationMin(),
+  fhSecContaminationMax(),
+  fhTotalMin(),
+  fhTotalMax(),
+  fhTotalNonFDMin(),
+  fhTotalNonFDMax(),
+  fhTotalNonFlatDPhiMin(),
+  fhTotalNonFlatDPhiMax(),
+  fhtotFlatMin(),
+  fhtotFlatMax(),
+  fgrYieldUnc(),         
+  fgrBackSubUnc(),
+  fgrMCcorrections(),   
+  fgrMCDefficiency(),   
+  fgrSecContamination(),   
+  fgrMCclosureTest(),  
+  fgrBeautyFD(),
+  fgrYieldUncRel(),         
+  fgrBackSubUncRel(),
+  fgrMCcorrectionsRel(),   
+  fgrMCDefficiencyRel(),   
+  fgrSecContaminationRel(),   
+  fgrMCclosureTestRel(),  
+  fgrBeautyFDRel(),
+  fgrTotal(),
+  fgrTotalRel(),
+  fgrTotalNonFD(),
+  fgrTotalNonFlatDPhi(),
+  fgrTotalNonFlatDPhiRel(),
+  fgrTotalFlatDPhi(),
+  fgrTotalFlatDPhiRel()
+{
+  // default constructor
+}
+
+
+
+AliHFDhadronCorrSystUnc::~AliHFDhadronCorrSystUnc(){
+  // destructor
+  
+  delete fhDeltaPhiTemplate;
+  delete fhYieldExtraction;
+  delete fhBackSubtractionMin;
+  delete   fhBackSubtractionMax;
+  delete  fhBeautyFDmin;
+  delete  fhBeautyFDmax;
+  delete  fhMCclosureTestMin;
+  delete  fhMCclosureTestMax;
+  delete  fhMCcorrectionsMin;
+  delete  fhMCcorrectionsMax;
+  delete  fhMCDefficiencyMin;
+  delete  fhMCDefficiencyMax;
+  delete  fhSecContaminationMin;
+  delete  fhSecContaminationMax;
+  delete  fhTotalMin;
+  delete fhTotalMax;
+  delete fhTotalNonFDMin;
+  delete fhTotalNonFDMax;
+  delete fhTotalNonFlatDPhiMin;
+  delete fhTotalNonFlatDPhiMax;
+  delete fhtotFlatMin;
+  delete fhtotFlatMax;
+  delete fgrYieldUnc;
+  delete fgrBackSubUnc;
+  delete fgrMCcorrections;
+  delete fgrMCDefficiency;
+  delete fgrSecContamination;
+  delete fgrMCclosureTest;  
+  delete fgrBeautyFD;   
+  delete fgrYieldUncRel;
+  delete fgrBackSubUncRel;
+  delete fgrMCcorrectionsRel;
+  delete fgrMCDefficiencyRel;
+  delete fgrSecContaminationRel;
+  delete fgrMCclosureTestRel;  
+  delete fgrBeautyFDRel;   
+  delete fgrTotal;
+  delete fgrTotalRel;
+  delete fgrTotalNonFD;
+  delete fgrTotalNonFlatDPhi;
+  delete fgrTotalNonFlatDPhiRel;
+  delete fgrTotalFlatDPhi;
+  delete fgrTotalFlatDPhiRel;
+
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DzeroLowPtAss03HP(){
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DzeroMidPtAss03HP(){
+
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DzeroHighPtAss03HP(){
+  
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+
+//--------------------------------------------------
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DstarLowPtAss03HP(){
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS, -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DstarMidPtAss03HP(){
+
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS/ -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+void AliHFDhadronCorrSystUnc::InitEmptyHistosFromTemplate(){
+  if(!fhDeltaPhiTemplate){
+    Printf("Template histo not set, using standard binning");
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+   fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+   fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+   fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+   fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+   fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+   fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+   fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+   fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+   fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+   fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+   fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+   fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+   fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+}
+
+
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DstarHighPtAss03HP(){
+  
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS   -5% +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+
+void AliHFDhadronCorrSystUnc::SetHistoTemplate(TH1D *h,TString strname,Bool_t clone){
+  if(fhDeltaPhiTemplate)delete fhDeltaPhiTemplate;
+  if(!clone){
+    fhDeltaPhiTemplate=h;
+  }
+  else{
+    if(strname.IsNull()){fhDeltaPhiTemplate=(TH1D*)h->Clone("fhDeltaPhiTemplate");
+    }
+    else fhDeltaPhiTemplate=(TH1D*)h->Clone(strname.Data());
+  }
+}
+
+
+void AliHFDhadronCorrSystUnc::SetHistoYieldExtraction(TH1D *h,TString strname,Bool_t clone){
+  if(fhYieldExtraction)delete fhYieldExtraction;
+  if(!clone){
+    fhYieldExtraction=h;
+  }
+  else{
+    if(strname.IsNull()){fhYieldExtraction=(TH1D*)h->Clone("fhYieldExtraction");
+    }
+    else fhYieldExtraction=(TH1D*)h->Clone(strname.Data());
+  }
+}
+
+void AliHFDhadronCorrSystUnc::SetHistoBackSubtraction(TH1D *hMax,TString strname,Bool_t clone,TH1D *hMin){
+  if(!hMax){
+    Printf("No Input Histo for back uncertainty");
+    return;
+  }
+  if(fhBackSubtractionMax)delete fhBackSubtractionMax;
+  if(!clone){
+    fhBackSubtractionMax=hMax;
+  }
+  else{
+    if(strname.IsNull()){fhBackSubtractionMax=(TH1D*)hMax->Clone("fhBackSubtractionMax");
+    }
+    else fhBackSubtractionMax=(TH1D*)hMax->Clone(strname.Data());
+  }
+  
+  if(fhBackSubtractionMin)delete fhBackSubtractionMin;
+  if(hMin){
+    if(!clone){
+      fhBackSubtractionMin=hMin;
+    }
+    else{
+      if(strname.IsNull()){fhBackSubtractionMin=(TH1D*)hMin->Clone("fhBackSubtractionMin");
+      }
+      else fhBackSubtractionMin=(TH1D*)hMin->Clone(strname.Data());
+    }
+  }
+  else{
+    if(strname.IsNull()){
+      fhBackSubtractionMin=(TH1D*)hMin->Clone("fhBackSubtractionMin");
+    }
+    else fhBackSubtractionMin=(TH1D*)hMin->Clone(strname.Data());
+    for(Int_t k=0;k<=fhBackSubtractionMin->GetNbinsX();k++){
+      fhBackSubtractionMin->SetBinContent(k,-1.*fhBackSubtractionMin->GetBinContent(k));
+    }
+  }
+
+  
+
+
+}
+
+
+void AliHFDhadronCorrSystUnc::SetHistoMCclosureTestMax(TH1D *h,TString strname,Bool_t clone){
+  if(fhMCclosureTestMax)delete fhMCclosureTestMax;
+  if(!clone){
+    fhMCclosureTestMax=h;
+  }
+  else{
+    if(strname.IsNull()){fhMCclosureTestMax=(TH1D*)h->Clone("fhMCclosureTestMax");
+    }
+    else fhMCclosureTestMax=(TH1D*)h->Clone(strname.Data());
+  }
+}
+
+void AliHFDhadronCorrSystUnc::SetHistoMCclosureTestMin(TH1D *h,TString strname,Bool_t clone){
+    if(fhMCclosureTestMin)delete fhMCclosureTestMin;
+    if(!clone){
+      fhMCclosureTestMin=h;
+    }
+    else{
+      if(strname.IsNull()){fhMCclosureTestMin=(TH1D*)h->Clone("fhMCclosureTestMin");
+      }
+      else fhMCclosureTestMin=(TH1D*)h->Clone(strname.Data());
+    }
+}
+
+
+void AliHFDhadronCorrSystUnc::SetHistoMCcorrectionsMin(TH1D *h,TString strname,Bool_t clone){
+    if(fhMCcorrectionsMin)delete fhMCcorrectionsMin;
+    if(!clone){
+      fhMCcorrectionsMin=h;
+    }
+    else{
+      if(strname.IsNull()){fhMCcorrectionsMin=(TH1D*)h->Clone("fhMCcorrectionsMin");
+      }
+      else fhMCcorrectionsMin=(TH1D*)h->Clone(strname.Data());
+    }
+}
+
+
+void AliHFDhadronCorrSystUnc::SetHistoMCcorrectionsMax(TH1D *h,TString strname,Bool_t clone){
+    if(fhMCcorrectionsMax)delete fhMCcorrectionsMax;
+    if(!clone){
+      fhMCcorrectionsMax=h;
+    }
+    else{
+      if(strname.IsNull()){fhMCcorrectionsMax=(TH1D*)h->Clone("fhMCcorrectionsMax");
+      }
+      else fhMCcorrectionsMax=(TH1D*)h->Clone(strname.Data());
+    }
+}
+
+
+void AliHFDhadronCorrSystUnc::SetHistoMCDefficiencyMin(TH1D *h,TString strname,Bool_t clone){
+    if(fhMCDefficiencyMin)delete fhMCDefficiencyMin;
+    if(!clone){
+      fhMCDefficiencyMin=h;
+    }
+    else{
+      if(strname.IsNull()){fhMCDefficiencyMin=(TH1D*)h->Clone("fhMCDefficiencyMin");
+      }
+      else fhMCDefficiencyMin=(TH1D*)h->Clone(strname.Data());
+    }
+}
+
+
+void AliHFDhadronCorrSystUnc::SetHistoMCDefficiencyMax(TH1D *h,TString strname,Bool_t clone){
+    if(fhMCDefficiencyMax)delete fhMCDefficiencyMax;
+    if(!clone){
+      fhMCDefficiencyMax=h;
+    }
+    else{
+      if(strname.IsNull()){fhMCDefficiencyMax=(TH1D*)h->Clone("fhMCDefficiencyMax");
+      }
+      else fhMCDefficiencyMax=(TH1D*)h->Clone(strname.Data());
+    }
+}
+
+
+void AliHFDhadronCorrSystUnc::SetHistoSecContaminationMin(TH1D *h,TString strname,Bool_t clone){
+    if(fhSecContaminationMin)delete fhSecContaminationMin;
+    if(!clone){
+      fhSecContaminationMin=h;
+    }
+    else{
+      if(strname.IsNull()){fhSecContaminationMin=(TH1D*)h->Clone("fhSecContaminationMin");
+      }
+      else fhSecContaminationMin=(TH1D*)h->Clone(strname.Data());
+    }
+}
+
+
+void AliHFDhadronCorrSystUnc::SetHistoSecContaminationMax(TH1D *h,TString strname,Bool_t clone){
+    if(fhSecContaminationMax)delete fhSecContaminationMax;
+    if(!clone){
+      fhSecContaminationMax=h;
+    }
+    else{
+      if(strname.IsNull()){fhSecContaminationMax=(TH1D*)h->Clone("fhSecContaminationMax");
+      }
+      else fhSecContaminationMax=(TH1D*)h->Clone(strname.Data());
+    }
+}
+
+
+void AliHFDhadronCorrSystUnc::SetHistoBeautyFDmin(TH1D *h,TString strname,Bool_t clone){
+    if(fhBeautyFDmin)delete fhBeautyFDmin;
+    if(!clone){
+      fhBeautyFDmin=h;
+    }
+    else{
+      if(strname.IsNull()){fhBeautyFDmin=(TH1D*)h->Clone("fhBeautyFDmin");
+      }
+      else fhBeautyFDmin=(TH1D*)h->Clone(strname.Data());
+    }
+}
+
+
+void AliHFDhadronCorrSystUnc::SetHistoBeautyFDmax(TH1D *h,TString strname,Bool_t clone){
+    if(fhBeautyFDmax)delete fhBeautyFDmax;
+    if(!clone){
+      fhBeautyFDmax=h;
+    }
+    else{
+      if(strname.IsNull()){fhBeautyFDmax=(TH1D*)h->Clone("fhBeautyFDmax");
+      }
+      else fhBeautyFDmax=(TH1D*)h->Clone(strname.Data());
+    }
+}
+
+
+
+
+
+void AliHFDhadronCorrSystUnc::BuildTotalUncHisto(){
+  if(fhTotalMin)delete fhTotalMin;
+  if(fhTotalMax)delete fhTotalMax;
+
+  fhTotalMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhTotalMin");
+  fhTotalMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhTotalMax");
+  Double_t errMin,errMax;
+
+  for(Int_t j=1;j<=fhTotalMin->GetNbinsX();j++){
+    errMin=fhMCclosureTestMin->GetBinContent(j)*fhMCclosureTestMin->GetBinContent(j);    
+    errMin+=fhMCcorrectionsMin->GetBinContent(j)*fhMCcorrectionsMin->GetBinContent(j);
+    errMin+=fhMCDefficiencyMin->GetBinContent(j)*fhMCDefficiencyMin->GetBinContent(j);
+    errMin+=fhSecContaminationMin->GetBinContent(j)*fhSecContaminationMin->GetBinContent(j);
+    errMin+=fhYieldExtraction->GetBinContent(j)*fhYieldExtraction->GetBinContent(j);
+    errMin+=fhBackSubtractionMin->GetBinContent(j)*fhBackSubtractionMin->GetBinContent(j);
+    errMin+=fhBeautyFDmin->GetBinContent(j)*fhBeautyFDmin->GetBinContent(j);
+    
+    fhTotalMin->SetBinContent(j,-TMath::Sqrt(errMin));
+
+    errMax=fhMCclosureTestMax->GetBinContent(j)*fhMCclosureTestMax->GetBinContent(j);    
+    errMax+=fhMCcorrectionsMax->GetBinContent(j)*fhMCcorrectionsMax->GetBinContent(j);
+    errMax+=fhMCDefficiencyMax->GetBinContent(j)*fhMCDefficiencyMax->GetBinContent(j);
+    errMax+=fhSecContaminationMax->GetBinContent(j)*fhSecContaminationMax->GetBinContent(j);
+    errMax+=fhYieldExtraction->GetBinContent(j)*fhYieldExtraction->GetBinContent(j);
+    errMax+=fhBackSubtractionMax->GetBinContent(j)*fhBackSubtractionMax->GetBinContent(j);
+    errMax+=fhBeautyFDmax->GetBinContent(j)*fhBeautyFDmax->GetBinContent(j);
+    
+    fhTotalMax->SetBinContent(j,TMath::Sqrt(errMax));
+    
+    
+  }
+
+  fhTotalMin->SetLineColor(kBlack);
+  fhTotalMin->SetLineWidth(2);
+  fhTotalMin->SetFillStyle(0);
+  fhTotalMin->SetFillColor(kBlack);
+  fhTotalMin->SetMarkerColor(kBlack);
+  fhTotalMin->SetMarkerStyle(20);
+
+  fhTotalMax->SetLineColor(kBlack);
+  fhTotalMax->SetLineWidth(2);
+  fhTotalMax->SetFillStyle(0);
+  fhTotalMax->SetFillColor(kBlack);
+  fhTotalMax->SetMarkerColor(kBlack);
+  fhTotalMax->SetMarkerStyle(20);
+  
+}
+
+void AliHFDhadronCorrSystUnc::BuildTotalNonFlatUncHisto(){
+  if(fhTotalNonFlatDPhiMin)delete fhTotalNonFlatDPhiMin;
+  if(fhTotalNonFlatDPhiMax)delete fhTotalNonFlatDPhiMax;
+
+  fhTotalNonFlatDPhiMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhTotalNonFlatDPhiMin");
+  fhTotalNonFlatDPhiMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhTotalNonFlatDPhiMax");
+  Double_t errMin,errMax,mcClosureMinmax,mcClosureMaxmin;
+
+  mcClosureMinmax=fhMCclosureTestMin->GetBinContent(fhMCclosureTestMin->GetMaximumBin());
+  Printf("The maximum is :%f", mcClosureMinmax);
+  mcClosureMaxmin=fhMCclosureTestMax->GetBinContent(fhMCclosureTestMax->GetMinimumBin());
+
+  for(Int_t j=1;j<=fhTotalNonFlatDPhiMin->GetNbinsX();j++){
+    errMin=(fhMCclosureTestMin->GetBinContent(j)*fhMCclosureTestMin->GetBinContent(j)-mcClosureMinmax*mcClosureMinmax);// Forced to this quadrature subtraction, doing: (fhMCclosureTestMin->GetBinContent(j)-mcClosureMinmax)*(fhMCclosureTestMin->GetBinContent(j)-mcClosureMinmax) gives the wrong result.. of course  
+
+    errMin+=fhBeautyFDmin->GetBinContent(j)*fhBeautyFDmin->GetBinContent(j);
+    
+    fhTotalNonFlatDPhiMin->SetBinContent(j,-TMath::Sqrt(errMin));
+
+    errMax=fhMCclosureTestMax->GetBinContent(j)*fhMCclosureTestMax->GetBinContent(j)-mcClosureMaxmin*mcClosureMaxmin; // Forced to this quadrature subtraction, doing:(fhMCclosureTestMax->GetBinContent(j)-mcClosureMaxmin)*(fhMCclosureTestMax->GetBinContent(j)-mcClosureMaxmin) gives the wrong result.. of course  
+   
+    errMax+=fhBeautyFDmax->GetBinContent(j)*fhBeautyFDmax->GetBinContent(j);
+    
+    fhTotalNonFlatDPhiMax->SetBinContent(j,TMath::Sqrt(errMax));
+    
+    
+  }
+
+  fhtotFlatMin=(TH1D*)fhTotalMin->Clone("hTotFlatDPhiMin");
+  fhtotFlatMin->SetTitle("#Delta#phi indipendent");
+
+  fhtotFlatMax=(TH1D*)fhTotalMax->Clone("hTotFlatDPhiMax");
+  fhtotFlatMax->SetTitle("#Delta#phi indipendent");
+
+  for(Int_t jfl=1;jfl<=fhtotFlatMin->GetNbinsX();jfl++){
+    fhtotFlatMin->SetBinContent(jfl,-TMath::Sqrt(fhTotalMin->GetBinContent(jfl)*fhTotalMin->GetBinContent(jfl)-fhTotalNonFlatDPhiMin->GetBinContent(jfl)*fhTotalNonFlatDPhiMin->GetBinContent(jfl)));
+    fhtotFlatMax->SetBinContent(jfl,TMath::Sqrt(fhTotalMax->GetBinContent(jfl)*fhTotalMax->GetBinContent(jfl)-fhTotalNonFlatDPhiMax->GetBinContent(jfl)*fhTotalNonFlatDPhiMax->GetBinContent(jfl)));
+  }
+
+  fhtotFlatMin->SetLineStyle(2);
+  fhtotFlatMax->SetLineStyle(2);
+
+
+
+
+  fhTotalNonFlatDPhiMin->SetLineColor(kBlue);
+  fhTotalNonFlatDPhiMin->SetLineWidth(2);
+  fhTotalNonFlatDPhiMin->SetFillStyle(0);
+  fhTotalNonFlatDPhiMin->SetFillColor(kBlue);
+  fhTotalNonFlatDPhiMin->SetMarkerColor(kBlue);
+  fhTotalNonFlatDPhiMin->SetMarkerStyle(20);
+
+  fhTotalNonFlatDPhiMax->SetLineColor(kBlue);
+  fhTotalNonFlatDPhiMax->SetLineWidth(2);
+  fhTotalNonFlatDPhiMax->SetFillStyle(0);
+  fhTotalNonFlatDPhiMax->SetFillColor(kBlue);
+  fhTotalNonFlatDPhiMax->SetMarkerColor(kBlue);
+  fhTotalNonFlatDPhiMax->SetMarkerStyle(20);
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::BuildTotalNonFDUncHisto(){
+  if(fhTotalNonFDMin)delete fhTotalNonFDMin;
+  if(fhTotalNonFDMax)delete fhTotalNonFDMax;
+
+  fhTotalNonFDMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhTotalNonFDMin");
+  fhTotalNonFDMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhTotalNonFDMax");
+  Double_t errMin,errMax;
+
+  for(Int_t j=1;j<=fhTotalNonFDMin->GetNbinsX();j++){
+    errMin=fhMCclosureTestMin->GetBinContent(j)*fhMCclosureTestMin->GetBinContent(j);    
+    errMin+=fhMCcorrectionsMin->GetBinContent(j)*fhMCcorrectionsMin->GetBinContent(j);
+    errMin+=fhMCDefficiencyMin->GetBinContent(j)*fhMCDefficiencyMin->GetBinContent(j);
+    errMin+=fhSecContaminationMin->GetBinContent(j)*fhSecContaminationMin->GetBinContent(j);
+    errMin+=fhYieldExtraction->GetBinContent(j)*fhYieldExtraction->GetBinContent(j);
+    errMin+=fhBackSubtractionMin->GetBinContent(j)*fhBackSubtractionMin->GetBinContent(j);
+
+    fhTotalNonFDMin->SetBinContent(j,-TMath::Sqrt(errMin));
+
+    errMax=fhMCclosureTestMax->GetBinContent(j)*fhMCclosureTestMax->GetBinContent(j);    
+    errMax+=fhMCcorrectionsMax->GetBinContent(j)*fhMCcorrectionsMax->GetBinContent(j);
+    errMax+=fhMCDefficiencyMax->GetBinContent(j)*fhMCDefficiencyMax->GetBinContent(j);
+    errMax+=fhSecContaminationMax->GetBinContent(j)*fhSecContaminationMax->GetBinContent(j);
+    errMax+=fhYieldExtraction->GetBinContent(j)*fhYieldExtraction->GetBinContent(j);
+    errMax+=fhBackSubtractionMax->GetBinContent(j)*fhBackSubtractionMax->GetBinContent(j);
+    
+    fhTotalNonFDMax->SetBinContent(j,TMath::Sqrt(errMax));
+    
+    
+  }
+
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010(Int_t meson,Double_t ptD,Double_t minptAss){
+  if(meson==0){
+    if(TMath::Abs(minptAss-0.3)<0.0001){
+      if(ptD>2&&ptD<5){
+       InitStandardUncertaintiesPP2010DzeroLowPtAss03HP();    
+      }
+      else if(ptD>5&&ptD<8){
+       InitStandardUncertaintiesPP2010DzeroMidPtAss03HP();    
+      }
+      else InitStandardUncertaintiesPP2010DzeroHighPtAss03HP();    
+    }
+    else {
+      printf("Methods for syst unc not ready yet for this pt(ass) bin \n");
+    }
+  }
+  else if(meson==1){
+    if(TMath::Abs(minptAss-0.3)<0.0001){
+      if(ptD>2&&ptD<5){
+       InitStandardUncertaintiesPP2010DstarLowPtAss03HP();    
+      }
+      else if(ptD>5&&ptD<8){
+       InitStandardUncertaintiesPP2010DstarMidPtAss03HP();    
+      }
+      else InitStandardUncertaintiesPP2010DstarHighPtAss03HP();    
+    }
+    else {
+      printf("Methods for syst unc not ready yet for this pt(ass) bin \n");
+    }
+  }
+  else if(meson==2){
+    if(TMath::Abs(minptAss-0.3)<0.0001){
+      if(ptD>2&&ptD<5){
+       InitStandardUncertaintiesPP2010DplusLowPtAss03();    
+      }
+      else if(ptD>5&&ptD<8){
+       InitStandardUncertaintiesPP2010DplusMidPtAss03();    
+      }
+      else InitStandardUncertaintiesPP2010DplusHighPtAss03();    
+    }
+    else {
+      printf("Methods for syst unc not ready yet for this pt(ass) bin \n");
+    }
+  }
+}
+
+
+TGraphAsymmErrors* AliHFDhadronCorrSystUnc::GetUncGraphFromHistos(TH1D *hRef,TH1D *hMin,TH1D *hMax){
+  
+  //  Int_t npoints=hMin->GetNbinsX();
+  Double_t ew=hMin->GetBinWidth(1)/2.;
+  Double_t value,eyl,eym;
+  
+  TGraphAsymmErrors *gr=new TGraphAsymmErrors();
+  for(Int_t j=1;j<=hMin->GetNbinsX();j++){
+    if(hRef){
+      value=hRef->GetBinContent(j);
+      eyl=hMin->GetBinContent(j)*value;
+      if(eyl<0.)eyl*=-1.;
+      if(hMax)eym=hMax->GetBinContent(j)*value;
+      else eym=eyl;
+    }
+    else {
+      value=0.;
+      eyl=hMin->GetBinContent(j);
+      if(eyl<0.)eyl*=-1.;
+      if(hMax)eym=hMax->GetBinContent(j);
+      else eym=eyl;
+    }
+    
+    gr->SetPoint(j-1,hMin->GetBinCenter(j),value);
+    gr->SetPointError(j-1,ew,ew,eyl,eym);
+  }
+  
+  return gr;
+}
+
+void AliHFDhadronCorrSystUnc::BuildGraphsRelUnc(){
+  if(fgrYieldUncRel)delete fgrYieldUncRel;
+  if(fgrBackSubUncRel)delete fgrBackSubUncRel;
+  if(fgrMCcorrectionsRel)delete fgrMCcorrectionsRel;
+  if(fgrMCDefficiencyRel)delete fgrMCDefficiencyRel;
+  if(fgrSecContaminationRel)delete fgrSecContaminationRel;
+  if(fgrMCclosureTestRel)delete fgrMCclosureTestRel;  
+  if(fgrBeautyFDRel)delete fgrBeautyFDRel;   
+  
+  fgrYieldUncRel=GetUncGraphFromHistos(0x0,fhYieldExtraction,0x0);
+  fgrYieldUncRel->SetName("fgrYieldUncRel");
+  fgrYieldUncRel->SetTitle("D meson yield");
+
+
+  fgrBackSubUncRel=GetUncGraphFromHistos(0x0,fhBackSubtractionMin,fhBackSubtractionMax);
+  fgrBackSubUncRel->SetName("fgrBackSubUncRel");
+  fgrBackSubUncRel->SetTitle("Background D correlation subtraction");
+
+
+
+  fgrMCcorrectionsRel=GetUncGraphFromHistos(0x0,fhMCcorrectionsMin,fhMCcorrectionsMax);
+  fgrMCcorrectionsRel->SetName("fgrMCcorrectionsRel");
+  fgrMCcorrectionsRel->SetTitle("Associated track efficiency");
+
+  fgrMCDefficiencyRel=GetUncGraphFromHistos(0x0,fhMCDefficiencyMin,fhMCDefficiencyMax);
+  fgrMCDefficiencyRel->SetName("fgrMCDefficiencyRel");
+  fgrMCDefficiencyRel->SetTitle("D meson efficiency");
+
+  fgrSecContaminationRel=GetUncGraphFromHistos(0x0,fhSecContaminationMin,fhSecContaminationMax);
+  fgrSecContaminationRel->SetName("fgrSecContaminationRel");
+  fgrSecContaminationRel->SetTitle("Secondary contamination");
+
+  fgrMCclosureTestRel=GetUncGraphFromHistos(0x0,fhMCclosureTestMin,fhMCclosureTestMax);
+  fgrMCclosureTestRel->SetName("fgrMCclosureTestRel");
+  fgrMCclosureTestRel->SetTitle("MC closure test");
+
+  fgrBeautyFDRel=GetUncGraphFromHistos(0x0,fhBeautyFDmin,fhBeautyFDmax);
+  fgrBeautyFDRel->SetName("fgrBeautyFDRel");
+  fgrBeautyFDRel->SetTitle("Feed-down");
+
+  fgrYieldUncRel->SetLineColor(kBlue);
+  fgrYieldUncRel->SetLineWidth(2);
+  fgrYieldUncRel->SetFillStyle(3002);
+  fgrYieldUncRel->SetFillColor(kBlue);
+  fgrYieldUncRel->SetMarkerColor(kBlue);
+  fgrYieldUncRel->SetMarkerStyle(20);
+
+
+  fgrBackSubUncRel->SetLineColor(kMagenta);
+  fgrBackSubUncRel->SetLineWidth(2);
+  fgrBackSubUncRel->SetFillStyle(3008);
+  fgrBackSubUncRel->SetFillColor(kMagenta);
+  fgrBackSubUncRel->SetMarkerColor(kBlue);
+  fgrBackSubUncRel->SetMarkerStyle(20);
+
+
+  fgrMCcorrectionsRel->SetLineColor(kGreen);
+  fgrMCcorrectionsRel->SetLineWidth(2);
+  fgrMCcorrectionsRel->SetFillStyle(3006);
+  fgrMCcorrectionsRel->SetFillColor(kGreen);
+  fgrMCcorrectionsRel->SetMarkerColor(kGreen);
+  fgrMCcorrectionsRel->SetMarkerStyle(22);
+
+  fgrMCDefficiencyRel->SetLineColor(kCyan);
+  fgrMCDefficiencyRel->SetLineWidth(2);
+  fgrMCDefficiencyRel->SetFillStyle(3004);
+  fgrMCDefficiencyRel->SetFillColor(kCyan);
+  fgrMCDefficiencyRel->SetMarkerColor(kCyan);
+  fgrMCDefficiencyRel->SetMarkerStyle(22);
+
+  fgrSecContaminationRel->SetLineColor(kOrange);
+  fgrSecContaminationRel->SetLineWidth(2);
+  fgrSecContaminationRel->SetFillStyle(3007);
+  fgrSecContaminationRel->SetFillColor(kOrange);
+  fgrSecContaminationRel->SetMarkerColor(kOrange);
+  fgrSecContaminationRel->SetMarkerStyle(22);
+
+  fgrMCclosureTestRel->SetLineColor(kRed);
+  fgrMCclosureTestRel->SetLineWidth(2);
+  fgrMCclosureTestRel->SetFillStyle(3005);
+  fgrMCclosureTestRel->SetFillColor(kRed);
+  fgrMCclosureTestRel->SetMarkerColor(kRed);
+  fgrMCclosureTestRel->SetMarkerStyle(26);
+
+  fgrBeautyFDRel->SetLineColor(kViolet);
+  fgrBeautyFDRel->SetLineWidth(2);
+  fgrBeautyFDRel->SetFillStyle(3021);
+  fgrBeautyFDRel->SetFillColor(kViolet);
+  fgrBeautyFDRel->SetMarkerColor(kViolet);
+  fgrBeautyFDRel->SetMarkerStyle(28);
+
+
+  
+
+}
+
+void AliHFDhadronCorrSystUnc::BuildGraphsUnc(TH1D *hRef){
+
+  if(fgrYieldUnc)delete fgrYieldUnc;
+  if(fgrBackSubUnc)delete fgrBackSubUnc;
+  if(fgrMCcorrections)delete fgrMCcorrections;
+  if(fgrMCDefficiency)delete fgrMCDefficiency;
+  if(fgrSecContamination)delete fgrSecContamination;
+  if(fgrMCclosureTest)delete fgrMCclosureTest;  
+  if(fgrBeautyFD)delete fgrBeautyFD;   
+  if(fgrTotalRel)delete fgrTotalRel;
+  if(fgrTotal)delete fgrTotal;
+  if(fgrTotalNonFlatDPhi)delete fgrTotalNonFlatDPhi;
+  if(fgrTotalNonFlatDPhiRel)delete fgrTotalNonFlatDPhiRel;
+  if(fgrTotalFlatDPhi)delete fgrTotalFlatDPhi;
+  if(fgrTotalFlatDPhiRel)delete fgrTotalFlatDPhiRel;
+
+  fgrYieldUnc=GetUncGraphFromHistos(hRef,fhYieldExtraction,0x0);
+  fgrYieldUnc->SetName("fgrYieldUnc");
+  fgrYieldUnc->SetTitle("D meson yield");
+
+  fgrBackSubUnc=GetUncGraphFromHistos(hRef,fhBackSubtractionMin,fhBackSubtractionMax);
+  fgrBackSubUnc->SetName("fgrBackSubUnc");
+  fgrBackSubUnc->SetTitle("Background D correlation subtraction");
+
+
+  fgrMCcorrections=GetUncGraphFromHistos(hRef,fhMCcorrectionsMin,fhMCcorrectionsMax);
+  fgrMCcorrections->SetName("fgrMCcorrections");
+  fgrMCcorrections->SetTitle("Associated track efficiency");
+
+  fgrMCDefficiency=GetUncGraphFromHistos(hRef,fhMCDefficiencyMin,fhMCDefficiencyMax);
+  fgrMCDefficiency->SetName("fgrMCDefficiency");
+  fgrMCDefficiency->SetTitle("D meson efficiency");
+
+  fgrSecContamination=GetUncGraphFromHistos(hRef,fhSecContaminationMin,fhSecContaminationMax);
+  fgrSecContamination->SetName("fgrSecContamination");
+  fgrSecContamination->SetTitle("Secondary contamination");
+
+  fgrMCclosureTest=GetUncGraphFromHistos(hRef,fhMCclosureTestMin,fhMCclosureTestMax);
+  fgrMCclosureTest->SetName("fgrMCclosureTest");
+  fgrMCclosureTest->SetTitle("MC closure test");
+
+  fgrBeautyFD=GetUncGraphFromHistos(hRef,fhBeautyFDmin,fhBeautyFDmax);
+  fgrBeautyFD->SetName("fgrBeautyFD");
+  fgrBeautyFD->SetTitle("Feed-down");
+
+  fgrYieldUnc->SetLineColor(kBlue);
+  fgrYieldUnc->SetLineWidth(2);
+  fgrYieldUnc->SetFillStyle(0);
+  fgrYieldUnc->SetFillColor(kBlue);
+  fgrYieldUnc->SetMarkerColor(kBlue);
+  fgrYieldUnc->SetMarkerStyle(20);
+
+
+  fgrBackSubUnc->SetLineColor(kMagenta);
+  fgrBackSubUnc->SetLineWidth(2);
+  fgrBackSubUnc->SetFillStyle(0);
+  fgrBackSubUnc->SetFillColor(kMagenta);
+  fgrBackSubUnc->SetMarkerColor(kBlue);
+  fgrBackSubUnc->SetMarkerStyle(20);
+
+
+  fgrMCcorrections->SetLineColor(kGreen);
+  fgrMCcorrections->SetLineWidth(2);
+  fgrMCcorrections->SetFillStyle(0);
+  fgrMCcorrections->SetFillColor(kGreen);
+  fgrMCcorrections->SetMarkerColor(kGreen);
+  fgrMCcorrections->SetMarkerStyle(22);
+
+  fgrMCDefficiency->SetLineColor(kCyan);
+  fgrMCDefficiency->SetLineWidth(2);
+  fgrMCDefficiency->SetFillStyle(0);
+  fgrMCDefficiency->SetFillColor(kCyan);
+  fgrMCDefficiency->SetMarkerColor(kCyan);
+  fgrMCDefficiency->SetMarkerStyle(22);
+
+  fgrSecContamination->SetLineColor(kOrange);
+  fgrSecContamination->SetLineWidth(2);
+  fgrSecContamination->SetFillStyle(0);
+  fgrSecContamination->SetFillColor(kOrange);
+  fgrSecContamination->SetMarkerColor(kOrange);
+  fgrSecContamination->SetMarkerStyle(22);
+
+  fgrMCclosureTest->SetLineColor(kRed);
+  fgrMCclosureTest->SetLineWidth(2);
+  fgrMCclosureTest->SetFillStyle(0);
+  fgrMCclosureTest->SetFillColor(kRed);
+  fgrMCclosureTest->SetMarkerColor(kRed);
+  fgrMCclosureTest->SetMarkerStyle(26);
+
+  fgrBeautyFD->SetLineColor(kViolet);
+  fgrBeautyFD->SetLineWidth(2);
+  fgrBeautyFD->SetFillStyle(0);
+  fgrBeautyFD->SetFillColor(kViolet);
+  fgrBeautyFD->SetMarkerColor(kViolet);
+  fgrBeautyFD->SetMarkerStyle(28);
+
+  //  fgrTotalRel=GetUncGraphFromHistos(0x0,fhTotalMin,fhTotalMax);
+  if(fhTotalMin){
+    fgrTotalRel=GetUncGraphFromHistos(0x0,fhTotalMin,fhTotalMax);
+    fgrTotalRel->SetLineColor(kBlack);
+    fgrTotalRel->SetLineWidth(2);
+    fgrTotalRel->SetFillStyle(0);
+    //    fgrTotalRel->SetFillColor(kRed);
+    fgrTotalRel->SetMarkerColor(kBlack);
+    fgrTotalRel->SetMarkerStyle(26);
+
+    fgrTotal=GetUncGraphFromHistos(hRef,fhTotalMin,fhTotalMax);
+    fgrTotal->SetLineColor(kBlack);
+    fgrTotal->SetLineWidth(2);
+    fgrTotal->SetFillStyle(0);
+    fgrTotal->SetFillColor(kRed);
+    fgrTotal->SetMarkerColor(kBlack);
+    fgrTotal->SetMarkerStyle(26);
+  }
+  
+  if(fhTotalNonFDMin){
+    fgrTotalNonFD=GetUncGraphFromHistos(hRef,fhTotalNonFDMin,fhTotalNonFDMax);
+    fgrTotalNonFD->SetLineColor(kBlue);
+    fgrTotalNonFD->SetLineWidth(2);
+    fgrTotalNonFD->SetFillStyle(3005);
+    fgrTotalNonFD->SetFillColor(kBlue);
+    fgrTotalNonFD->SetMarkerColor(kBlue);
+    fgrTotalNonFD->SetMarkerStyle(26);  
+  }
+
+  if(fhTotalNonFlatDPhiMin){
+    fgrTotalNonFlatDPhiRel=GetUncGraphFromHistos(0x0,fhTotalNonFlatDPhiMin,fhTotalNonFlatDPhiMax);
+    fgrTotalNonFlatDPhiRel->SetLineColor(kBlack);
+    fgrTotalNonFlatDPhiRel->SetLineWidth(2);
+    fgrTotalNonFlatDPhiRel->SetFillStyle(0);
+    //    fgrTotalRel->SetFillColor(kRed);
+    fgrTotalNonFlatDPhiRel->SetMarkerColor(kBlack);
+    fgrTotalNonFlatDPhiRel->SetMarkerStyle(26);
+
+    fgrTotalNonFlatDPhi=GetUncGraphFromHistos(hRef,fhTotalNonFlatDPhiMin,fhTotalNonFlatDPhiMax);
+    fgrTotalNonFlatDPhi->SetLineColor(kBlack);
+    fgrTotalNonFlatDPhi->SetLineWidth(2);
+    fgrTotalNonFlatDPhi->SetFillStyle(3005);
+    fgrTotalNonFlatDPhi->SetFillColor(kRed);
+    fgrTotalNonFlatDPhi->SetMarkerColor(kBlack);
+    fgrTotalNonFlatDPhi->SetMarkerStyle(26);  
+
+    fgrTotalFlatDPhiRel=GetUncGraphFromHistos(0x0,fhtotFlatMin,fhtotFlatMax);
+    fgrTotalFlatDPhiRel->SetLineColor(kBlack);
+    fgrTotalFlatDPhiRel->SetLineWidth(2);
+    fgrTotalFlatDPhiRel->SetFillStyle(0);
+    //    fgrTotalRel->SetFillColor(kRed);
+    fgrTotalFlatDPhiRel->SetMarkerColor(kBlack);
+    fgrTotalFlatDPhiRel->SetMarkerStyle(26);
+
+    fgrTotalFlatDPhi=GetUncGraphFromHistos(hRef,fhtotFlatMin,fhtotFlatMax);
+    fgrTotalFlatDPhi->SetLineColor(kBlack);
+    fgrTotalFlatDPhi->SetLineWidth(2);
+    fgrTotalFlatDPhi->SetFillStyle(3005);
+    fgrTotalFlatDPhi->SetFillColor(kBlack);
+    fgrTotalFlatDPhi->SetMarkerColor(kBlack);
+    fgrTotalFlatDPhi->SetMarkerStyle(26);  
+  }
+
+}
+
+
+TCanvas* AliHFDhadronCorrSystUnc::BuildSystUncertaintyPlotVsDeltaPhi(TH1D *hCorrPlot,Int_t doInit){
+
+  if(doInit!=0){
+    BuildTotalUncHisto();
+    BuildTotalNonFDUncHisto();
+    BuildTotalNonFlatUncHisto();
+    BuildGraphsUnc(hCorrPlot);
+    BuildGraphsRelUnc();
+
+  }
+
+  // Easy canva with relative uncertainties
+  TCanvas *cCanvaRelUnc=new TCanvas("cCanvaRelUnc","cCanvaRelUnc",700,700);
+  cCanvaRelUnc->cd();
+  TH2D *hDraw=new TH2D("hDraw","hDraw",32,-TMath::Pi()/2.,3./2.*TMath::Pi(),200,-2.,2.);
+  hDraw->SetXTitle("#Delta#phi (rad)");
+  hDraw->SetYTitle("Relative uncertainty");
+  hDraw->Draw();
+  
+  
+  fgrYieldUncRel->Draw("E2");
+  fgrBackSubUncRel->Draw("E2");
+  fgrMCcorrectionsRel->Draw("E2");
+  fgrMCDefficiencyRel->Draw("E2");
+  fgrSecContaminationRel->Draw("E2");
+  fgrMCclosureTestRel->Draw("E2");
+  fgrBeautyFDRel->Draw("E2");
+  //  fgrTotalRel->Draw("E2");
+
+  fhtotFlatMin->Draw("same");
+  fhtotFlatMax->Draw("same");
+
+  fhTotalMin->Draw("same");
+  fhTotalMax->Draw("same");
+
+  TCanvas *cCanvaFinalPlot=new TCanvas("cCanvaFinalPlot","cCanvaFinalPlot",700,700);
+  cCanvaFinalPlot->cd();
+  hCorrPlot->Draw();
+  //  fgrYieldUnc->Draw("pE2");
+  //  fgrBackSubUnc->Draw("pE2");
+  //  fgrMCcorrections->Draw("pE2");
+  //  fgrMCclosureTest->Draw("pE2");
+  //  fgrBeautyFD->Draw("pE2");
+  fgrTotal->Draw("E2");
+
+
+  TCanvas *cCanvaFinalPlotFD=new TCanvas("cCanvaFinalPlotFD","cCanvaFinalPlotFD",700,700);
+  cCanvaFinalPlotFD->cd();
+  hCorrPlot->Draw();
+  //  fgrYieldUnc->Draw("pE2");
+  //  fgrBackSubUnc->Draw("pE2");
+  //  fgrMCcorrections->Draw("pE2");
+  //  fgrMCclosureTest->Draw("pE2");
+  //  fgrBeautyFD->Draw("pE2");
+  fgrBeautyFD->Draw("E2");
+  fgrTotalNonFD->Draw("E2");
+  fgrTotalNonFlatDPhi->Draw("E2");
+  fgrTotalFlatDPhi->Draw("E2");
+
+  return cCanvaFinalPlot;
+}
+  
+  
+TH1D* AliHFDhadronCorrSystUnc::GetVariedHisto(const TH1D *hIn,const TGraphAsymmErrors *gr,Int_t minmax){
+
+  TH1D *hOut;
+  if(minmax==0){
+    hOut=(TH1D*)hIn->Clone(Form("%sVariedMin",hIn->GetName()));
+  }
+  else if(minmax==1){
+    hOut=(TH1D*)hIn->Clone(Form("%sVariedMax",hIn->GetName()));
+  }
+  //  Int_t np=gr->GetN();
+  Double_t *x,*y,*ely,*ehy;//*elx,*ehx,
+  x=gr->GetX();
+  y=gr->GetY();
+  //  elx=gr->GetEXlow();
+  // ehx=gr->GetEXhigh();
+   ely=gr->GetEYlow();
+  ehy=gr->GetEYhigh();
+
+  for(Int_t jp=1;jp<=hIn->GetNbinsX();jp++){
+    if(TMath::Abs(x[jp-1]-hIn->GetBinCenter(jp))>0.0001){
+      Printf("Bin Mismatch: this method assumes that the graph has the points in the center of the histo bin centers");
+      return 0x0;
+    }
+    if(TMath::Abs(y[jp-1]-hIn->GetBinContent(jp))>0.0001){
+      Printf("Value Mismatch: this method relies on the fact that the graph central values are the same as those of the histo");
+      return 0x0;
+    }
+    if(minmax==0){
+      hOut->SetBinContent(jp,y[jp-1]-ely[jp-1]);
+    }
+    else if(minmax==1){
+      hOut->SetBinContent(jp,y[jp-1]+ehy[jp-1]);
+    }
+    hOut->SetBinError(jp,hIn->GetBinError(jp));
+  }
+
+  return hOut;
+}
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////
+///// METHODS WITH UNCERTAINTIES: PP 2010, for kinematic cases approved after HP2013
+/////
+////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+// START FROM DPLUS FOR PT(ASSOC)>0.3
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DplusLowPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DplusMidPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DplusHighPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+//////// HIGHER PT ASS THRESHOLDS
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DzeroLowPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DzeroMidPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DzeroHighPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+
+//--------------------------------------------------
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DstarLowPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS, -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DstarMidPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS/ -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DstarHighPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS   -5% +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DplusLowPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DplusMidPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DplusHighPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+// pt(assoc)> 1 GeV/c
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DzeroLowPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DzeroMidPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DzeroHighPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+
+//--------------------------------------------------
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DstarLowPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS, -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DstarMidPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS/ -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DstarHighPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS   -5% +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DplusLowPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DplusMidPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPP2010DplusHighPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////
+///// METHODS WITH UNCERTAINTIES: pPb 2013
+/////
+////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+// pt assoc > 0.3 GeV/c
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DzeroLowPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DzeroMidPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DzeroHighPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+
+//--------------------------------------------------
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DstarLowPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS, -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DstarMidPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS/ -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DstarHighPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS   -5% +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DplusLowPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DplusMidPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DplusHighPtAss03(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore03";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+//////// HIGHER PT ASS THRESHOLDS
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DzeroLowPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DzeroMidPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DzeroHighPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+
+//--------------------------------------------------
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DstarLowPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS, -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DstarMidPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS/ -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DstarHighPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS   -5% +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DplusLowPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DplusMidPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DplusHighPtAss05(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore05";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+// pt(assoc)> 1 GeV/c
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DzeroLowPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DzeroMidPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DzeroHighPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=0;
+  fstrmeson="Dzero";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+
+//--------------------------------------------------
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DstarLowPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS, -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DstarMidPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS/ -5%  10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DstarHighPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=1;
+  fstrmeson="Dstar";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS   -5% +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+
+}
+
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DplusLowPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt3to5";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,-0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+
+  
+  // MC CORRECTIONS ( associatate track efficiency):
+  //  -5%  +10% for assoc track eff 
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    //    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DplusMidPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt5to8";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS:  -5%  +10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+  
+}
+
+
+void AliHFDhadronCorrSystUnc::InitStandardUncertaintiesPPb2013DplusHighPtAss1(){ Printf("TEMPORARY VALUES (PP 2010 ass 03)");
+  
+  fmeson=0;
+  fstrmeson="Dplus";
+  fstrptAss="ptAsMore1";
+  fstrptD="Dpt8to16";
+  if(!fhDeltaPhiTemplate){
+    fhDeltaPhiTemplate=new TH1D("fhDeltaPhiTemplate","fhDeltaPhiTemplate",32,-TMath::Pi()/2.,3./2.*TMath::Pi());
+  }
+
+  Double_t x;
+  // D MESON YIELD EXTRACTION (->NORMALIZATION): relative uncertainty is constant
+  fhYieldExtraction=(TH1D*)fhDeltaPhiTemplate->Clone("fhYieldExtraction");
+  for(Int_t j=1;j<=fhYieldExtraction->GetNbinsX();j++){
+    fhYieldExtraction->SetBinContent(j,0.1);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMin");
+  for(Int_t j=1;j<=fhBackSubtractionMin->GetNbinsX();j++){
+    fhBackSubtractionMin->SetBinContent(j,0.05);
+  }
+
+  // Background D MESON candidate subtraction (side-band variations, etc.)
+  fhBackSubtractionMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBackSubtractionMax");
+  for(Int_t j=1;j<=fhBackSubtractionMax->GetNbinsX();j++){
+    fhBackSubtractionMax->SetBinContent(j,0.05);
+  }
+  
+  // MC CORRECTIONS,  -5% 10% for assoc track eff
+  fhMCcorrectionsMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMin");
+  for(Int_t j=1;j<=fhMCcorrectionsMin->GetNbinsX();j++){
+    fhMCcorrectionsMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCcorrectionsMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCcorrectionsMax");
+  for(Int_t j=1;j<=fhMCcorrectionsMax->GetNbinsX();j++){
+    fhMCcorrectionsMax->SetBinContent(j,0.10);
+  }
+
+
+  // MC D EFF CORRECTION
+  fhMCDefficiencyMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMin");
+  for(Int_t j=1;j<=fhMCDefficiencyMin->GetNbinsX();j++){
+    fhMCDefficiencyMin->SetBinContent(j,-0.05);
+  }
+
+  fhMCDefficiencyMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCDefficiencyMax");
+  for(Int_t j=1;j<=fhMCDefficiencyMax->GetNbinsX();j++){
+    fhMCDefficiencyMax->SetBinContent(j,0.05);
+  }
+
+
+  // Contamination from secondary tracks
+  fhSecContaminationMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMin");
+  for(Int_t j=1;j<=fhSecContaminationMin->GetNbinsX();j++){
+    fhSecContaminationMin->SetBinContent(j,-0.05);
+  }
+
+  fhSecContaminationMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhSecContaminationMax");
+  for(Int_t j=1;j<=fhSecContaminationMax->GetNbinsX();j++){
+    fhSecContaminationMax->SetBinContent(j,0.05);
+  }
+
+  // MC CLOSURETEST (D meson efficiency)
+  fhMCclosureTestMin=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMin");
+  for(Int_t j=1;j<=fhMCclosureTestMin->GetNbinsX();j++){
+    x=fhMCclosureTestMin->GetBinLowEdge(j);
+    fhMCclosureTestMin->SetBinContent(j,-0.08);
+    
+    if(-0.4<x&&x<-0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+    else if(-0.2<x&&x<-0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    else if(-0.1<x&&x<0.1){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.02);      
+    }
+    else if(0.1<x&&x<0.2){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.015);      
+    }
+    if(0.2<x&&x<0.4){    
+      fhMCclosureTestMin->SetBinContent(j,fhMCclosureTestMin->GetBinContent(j)-0.01);      
+    }
+  }
+
+  fhMCclosureTestMax=(TH1D*)fhDeltaPhiTemplate->Clone("fhMCclosureTestMax");
+  for(Int_t j=1;j<=fhMCclosureTestMax->GetNbinsX();j++){
+    x=fhMCclosureTestMax->GetBinLowEdge(j);
+    fhMCclosureTestMax->SetBinContent(j,0.);
+    
+    //     if(-0.4<x&&x<-0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.2<x&&x<-0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     else if(-0.1<x&&x<0.1){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.08);      
+    //     }
+    //     else if(0.1<x&&x<0.2){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.06);      
+    //     }
+    //     if(0.2<x&&x<0.4){    
+    //       fhMCclosureTestMax->SetBinContent(j,fhMCclosureTestMax->GetBinContent(j)-0.04);      
+    //     }
+    
+  }
+  
+  // Feed-down 
+
+  fhBeautyFDmin=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmin");
+  for(Int_t j=1;j<=fhBeautyFDmin->GetNbinsX();j++){
+    x=fhBeautyFDmin->GetBinLowEdge(j);
+    fhBeautyFDmin->SetBinContent(j,-0.05);
+    
+  //   if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmin->SetBinContent(j,fhBeautyFDmin->GetBinContent(j)-0.04);      
+//     }
+  }
+
+  fhBeautyFDmax=(TH1D*)fhDeltaPhiTemplate->Clone("fhBeautyFDmax");
+  for(Int_t j=1;j<=fhBeautyFDmax->GetNbinsX();j++){
+    x=fhBeautyFDmax->GetBinLowEdge(j);
+    fhBeautyFDmax->SetBinContent(j,0.03);
+   
+//     if(-0.4<x&&x<-0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.2<x&&x<-0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     else if(-0.1<x&&x<0.1){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.08);      
+//     }
+//     else if(0.1<x&&x<0.2){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.06);      
+//     }
+//     if(0.2<x&&x<0.4){    
+//       fhBeautyFDmax->SetBinContent(j,fhBeautyFDmax->GetBinContent(j)+0.04);      
+//     } 
+    
+  }
+
+}
+
+
+
diff --git a/PWGHF/correlationHF/AliHFDhadronCorrSystUnc.h b/PWGHF/correlationHF/AliHFDhadronCorrSystUnc.h
new file mode 100644 (file)
index 0000000..3591326
--- /dev/null
@@ -0,0 +1,246 @@
+#ifndef ALIHFDHADRONCORRSYSTUNC_H
+#define ALIHFDHADRONCORRSYSTUNC_H
+/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id: $ */
+
+/////////////////////////////////////////////////////////////
+// class for systematic uncertainties on D meson -hadron correlation distribution
+//
+// Author: A. Rossi, andrea.rossi@cern.ch
+/////////////////////////////////////////////////////////////
+#include <TH1D.h>
+#include <TH2D.h>
+#include <TCanvas.h>
+#include <TGraphAsymmErrors.h>
+#include <TString.h>
+class AliHFDhadronCorrSystUnc : public TNamed{
+  
+ public:
+  AliHFDhadronCorrSystUnc();
+  AliHFDhadronCorrSystUnc(const char* name);
+  ~AliHFDhadronCorrSystUnc();
+  void InitEmptyHistosFromTemplate();
+  void InitStandardUncertaintiesPP2010(Int_t meson,Double_t ptD,Double_t minptAss);
+
+  // Method with uncertainties for pp 2010, Dzero and D*+ and pt assoc> 0.3 GeV/c, with values used for HP2013
+  void InitStandardUncertaintiesPP2010DzeroLowPtAss03HP();
+  void InitStandardUncertaintiesPP2010DzeroMidPtAss03HP();
+  void InitStandardUncertaintiesPP2010DzeroHighPtAss03HP();
+  
+  void InitStandardUncertaintiesPP2010DstarLowPtAss03HP();
+  void InitStandardUncertaintiesPP2010DstarMidPtAss03HP();
+  void InitStandardUncertaintiesPP2010DstarHighPtAss03HP();
+
+
+  // Method with uncertainties for pp 2010, all kinematic cases but those approved for HP2013
+  void InitStandardUncertaintiesPP2010DplusLowPtAss03();
+  void InitStandardUncertaintiesPP2010DplusMidPtAss03();
+  void InitStandardUncertaintiesPP2010DplusHighPtAss03();
+
+  void InitStandardUncertaintiesPP2010DzeroLowPtAss05();
+  void InitStandardUncertaintiesPP2010DzeroMidPtAss05();
+  void InitStandardUncertaintiesPP2010DzeroHighPtAss05();
+
+  void InitStandardUncertaintiesPP2010DstarLowPtAss05();
+  void InitStandardUncertaintiesPP2010DstarMidPtAss05();
+  void InitStandardUncertaintiesPP2010DstarHighPtAss05();
+
+  void InitStandardUncertaintiesPP2010DplusLowPtAss05();
+  void InitStandardUncertaintiesPP2010DplusMidPtAss05();
+  void InitStandardUncertaintiesPP2010DplusHighPtAss05();
+
+
+  void InitStandardUncertaintiesPP2010DzeroLowPtAss1();
+  void InitStandardUncertaintiesPP2010DzeroMidPtAss1();
+  void InitStandardUncertaintiesPP2010DzeroHighPtAss1();
+
+  void InitStandardUncertaintiesPP2010DstarLowPtAss1();
+  void InitStandardUncertaintiesPP2010DstarMidPtAss1();
+  void InitStandardUncertaintiesPP2010DstarHighPtAss1();
+
+  void InitStandardUncertaintiesPP2010DplusLowPtAss1();
+  void InitStandardUncertaintiesPP2010DplusMidPtAss1();
+  void InitStandardUncertaintiesPP2010DplusHighPtAss1();
+
+
+  // Method with uncertainties for pPb 2013
+ void InitStandardUncertaintiesPPb2013DzeroLowPtAss03();
+  void InitStandardUncertaintiesPPb2013DzeroMidPtAss03();
+  void InitStandardUncertaintiesPPb2013DzeroHighPtAss03();
+
+  void InitStandardUncertaintiesPPb2013DstarLowPtAss03();
+  void InitStandardUncertaintiesPPb2013DstarMidPtAss03();
+  void InitStandardUncertaintiesPPb2013DstarHighPtAss03();
+
+  void InitStandardUncertaintiesPPb2013DplusLowPtAss03();
+  void InitStandardUncertaintiesPPb2013DplusMidPtAss03();
+  void InitStandardUncertaintiesPPb2013DplusHighPtAss03();
+
+  void InitStandardUncertaintiesPPb2013DzeroLowPtAss05();
+  void InitStandardUncertaintiesPPb2013DzeroMidPtAss05();
+  void InitStandardUncertaintiesPPb2013DzeroHighPtAss05();
+
+  void InitStandardUncertaintiesPPb2013DstarLowPtAss05();
+  void InitStandardUncertaintiesPPb2013DstarMidPtAss05();
+  void InitStandardUncertaintiesPPb2013DstarHighPtAss05();
+
+  void InitStandardUncertaintiesPPb2013DplusLowPtAss05();
+  void InitStandardUncertaintiesPPb2013DplusMidPtAss05();
+  void InitStandardUncertaintiesPPb2013DplusHighPtAss05();
+
+
+  void InitStandardUncertaintiesPPb2013DzeroLowPtAss1();
+  void InitStandardUncertaintiesPPb2013DzeroMidPtAss1();
+  void InitStandardUncertaintiesPPb2013DzeroHighPtAss1();
+
+  void InitStandardUncertaintiesPPb2013DstarLowPtAss1();
+  void InitStandardUncertaintiesPPb2013DstarMidPtAss1();
+  void InitStandardUncertaintiesPPb2013DstarHighPtAss1();
+
+  void InitStandardUncertaintiesPPb2013DplusLowPtAss1();
+  void InitStandardUncertaintiesPPb2013DplusMidPtAss1();
+  void InitStandardUncertaintiesPPb2013DplusHighPtAss1();
+
+
+  /////////////
+
+  TGraphAsymmErrors* GetUncGraphFromHistos(TH1D *hRef,TH1D *hMin,TH1D *hMax);
+  void BuildGraphsRelUnc();
+  void BuildGraphsUnc(TH1D *hRef);
+  TCanvas* BuildSystUncertaintyPlotVsDeltaPhi(TH1D *hCorrPlot,Int_t doInit);
+  void BuildTotalNonFDUncHisto();
+  void BuildTotalUncHisto();
+  void BuildTotalNonFlatUncHisto();  
+  TH1D *GetVariedHisto(const TH1D *hIn,const TGraphAsymmErrors *gr,Int_t minmax);
+  TH1D *GetHistoTotFlatMin(){return fhtotFlatMin;}
+  TH1D *GetHistoTotFlatMax(){return fhtotFlatMax;}
+
+  TH1D *GetHistoYieldUnc(){
+    return fhYieldExtraction;
+  }
+
+  TH1D *GetHistoBackSubUncMin(){
+    return fhBackSubtractionMin;
+  }
+
+  TH1D *GetHistoBackSubUncMax(){
+    return fhBackSubtractionMax;
+  }
+  
+  TH1D *GetHistoTemplate(){
+    return fhDeltaPhiTemplate;
+  }
+  
+  TH1D *GetHistoMCclosureTestMin(){
+    return fhMCclosureTestMin;
+  }
+  TH1D *GetHistoMCclosureTestMax(){
+    return fhMCclosureTestMax;
+  }
+
+  TH1D *GetHistoMCcorrectionsMin(){
+    return fhMCcorrectionsMin;
+  }
+  TH1D *GetHistoMCcorrectionsMax(){
+    return fhMCcorrectionsMax;
+  }
+
+  TH1D *GetHistoMCDefficiencyMin(){
+    return fhMCDefficiencyMin;
+  }
+  TH1D *GetHistoMCDefficiencyMax(){
+    return fhMCDefficiencyMax;
+  }
+
+  TH1D *GetHistoSecContaminationMin(){
+    return fhSecContaminationMin;
+  }
+  TH1D *GetHistoSecContaminationMax(){
+    return fhSecContaminationMax;
+  }
+
+  TH1D *GetHistoFDmin(){
+    return fhBeautyFDmin;
+  }
+
+  TH1D *GetHistoFDmax(){
+    return fhBeautyFDmax;
+  }
+  
+  void SetHistoTemplate(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoMCclosureTestMin(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoMCclosureTestMax(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoMCcorrectionsMin(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoMCcorrectionsMax(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoMCDefficiencyMin(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoMCDefficiencyMax(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoSecContaminationMin(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoSecContaminationMax(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoBeautyFDmin(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoBeautyFDmax(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoYieldExtraction(TH1D *h,TString strname="",Bool_t clone=kTRUE);
+  void SetHistoBackSubtraction(TH1D *hMax,TString strname="",Bool_t clone=kTRUE,TH1D *hMin=0x0);
+
+  
+  TGraphAsymmErrors* GetTotUncGraph(){return fgrTotal;}
+  TGraphAsymmErrors* GetTotNonFlatUncGraph(){return fgrTotalNonFlatDPhi;}
+  TGraphAsymmErrors* GetTotFlatUncGraph(){return fgrTotalFlatDPhi;}
+  
+ private:
+  Int_t fmeson;                       // 0=D0, 1=D*, 2=D+
+  TString fstrmeson;                  // meson name
+  TString fstrptAss;                  // string with pt range associated tracks
+  TString fstrptD;                  // string with pt range D meson
+  TH1D *fhDeltaPhiTemplate;            // histo do define the binning in DeltaPhi
+  TH1D *fhYieldExtraction;            // yield extr unc
+  TH1D *fhBackSubtractionMin;            // uncertainty from variation of SB range, etc.
+  TH1D *fhBackSubtractionMax;            // uncertainty from variation of SB range, etc.
+  TH1D *fhBeautyFDmin;                   // feed down uncertainty
+  TH1D *fhBeautyFDmax;                   // feed down uncertainty
+  TH1D *fhMCclosureTestMin;              // mc closure
+  TH1D *fhMCclosureTestMax;              // mc closure
+  TH1D *fhMCcorrectionsMin;              // mc corrections ( associated track selection variation)  
+  TH1D *fhMCcorrectionsMax;              // mc corrections ( associated track selection variation)  
+  TH1D *fhMCDefficiencyMin;              // mc corrections (D cut variation )
+  TH1D *fhMCDefficiencyMax;              // mc corrections (D cut variation ) 
+  TH1D *fhSecContaminationMin;           // contamination from secondaries
+  TH1D *fhSecContaminationMax;           // contamination from secondaries
+  TH1D *fhTotalMin;                      //
+  TH1D *fhTotalMax;                      //
+  TH1D *fhTotalNonFDMin;                //
+  TH1D *fhTotalNonFDMax;                 //
+  TH1D *fhTotalNonFlatDPhiMin;           //
+  TH1D *fhTotalNonFlatDPhiMax;           //
+  TH1D *fhtotFlatMin;                     //
+  TH1D *fhtotFlatMax;                     //
+  TGraphAsymmErrors *fgrYieldUnc;        //  
+  TGraphAsymmErrors *fgrBackSubUnc;        //  
+  TGraphAsymmErrors *fgrMCcorrections;   //
+  TGraphAsymmErrors *fgrMCDefficiency;   //
+  TGraphAsymmErrors *fgrSecContamination;   //
+  TGraphAsymmErrors *fgrMCclosureTest;   //
+  TGraphAsymmErrors *fgrBeautyFD;        //
+  TGraphAsymmErrors *fgrYieldUncRel;        // 
+  TGraphAsymmErrors *fgrBackSubUncRel;        //   
+  TGraphAsymmErrors *fgrMCcorrectionsRel;   //
+  TGraphAsymmErrors *fgrMCDefficiencyRel;   //
+  TGraphAsymmErrors *fgrSecContaminationRel;   //
+  TGraphAsymmErrors *fgrMCclosureTestRel;   //
+  TGraphAsymmErrors *fgrBeautyFDRel;        //
+  TGraphAsymmErrors  *fgrTotal;         //
+  TGraphAsymmErrors  *fgrTotalRel;         //
+  TGraphAsymmErrors  *fgrTotalNonFD;         //
+  TGraphAsymmErrors  *fgrTotalNonFlatDPhi;         //
+  TGraphAsymmErrors  *fgrTotalNonFlatDPhiRel;         //
+  TGraphAsymmErrors  *fgrTotalFlatDPhi;         //
+  TGraphAsymmErrors  *fgrTotalFlatDPhiRel;         //
+
+
+  ClassDef(AliHFDhadronCorrSystUnc,1);
+};
+
+
+
+#endif
index c838d2a5686c19d95a0581d852fa6dcca7591cbf..2e6db7d04c1eb9e79c36d77d1312fc4a1aac2355 100755 (executable)
@@ -207,6 +207,7 @@ AliAnalysisTaskFlowITSTPCTOFQCSP::AliAnalysisTaskFlowITSTPCTOFQCSP(const char *n
 ,fSparseMassLS(0)
 ,fAssoTPCCluster(0)
 ,fAssoITSRefit(0)
+,fPhiCut(0)
 {
     //Named constructor
     
@@ -325,6 +326,7 @@ AliAnalysisTaskFlowITSTPCTOFQCSP::AliAnalysisTaskFlowITSTPCTOFQCSP()
 ,fSparseMassLS(0)
 ,fAssoTPCCluster(0)
 ,fAssoITSRefit(0)
+,fPhiCut(0)
 {
     //Default constructor
     fPID = new AliHFEpid("hfePid");
@@ -588,6 +590,13 @@ void AliAnalysisTaskFlowITSTPCTOFQCSP::UserExec(Option_t*)
         //==========================================================================================================
         Double_t eta = track->Eta();
         Double_t phi = track->Phi();
+        
+        if(fPhiCut){
+            if(phi<1.4 || phi >3.14)continue; //to have same EMCal phi acceptance
+        }
+
+        
+        
         Double_t pt = track->Pt();         //pt track after cuts
         if(pt<fpTCutmin || pt>fpTCutmax) continue;
         //==========================================================================================================
@@ -1314,7 +1323,7 @@ void AliAnalysisTaskFlowITSTPCTOFQCSP::CheckCentrality(AliAODEvent* event, Bool_
     }//...after centrality selectrion
     //============================================================================================================================
     if(fMultCut){
-        if(fTrigger==1 || fTrigger==4){
+        if(fTrigger==1 || fTrigger==4 || fTrigger==5){
             if(! (multTPC > (-36.73 + 1.48*multGlob) && multTPC < (62.87 + 1.78*multGlob))){
                 //   cout <<" Trigger ==" <<fTrigger<< endl;
                 centralitypass = kFALSE;
index c84242966046dfb0f3c62e2381078658caf540b8..b39149e6bf3e5911dd073077d1ed5e4635f345c0 100755 (executable)
@@ -6,7 +6,7 @@
 
 ////////////////////////////////////////////////////////////////////////
 //                                                                    //
-//  Task for Heavy Flavour Electron Flow  TPC plus TOF                //
+//  Task for Heavy Flavour Electron Flow ITS TPC TOF                  //
 //                                                                    //
 //  Author: Andrea Dubla (Utrecht University)                         //
 //                                                                    //
@@ -74,6 +74,7 @@ public:
     Bool_t                               IsEventSelectedForCentrFlattening(Float_t centvalue);
     void                                 SetAssoITSRefit(Bool_t itsref) {fAssoITSRefit = itsref;};
     void                                 SetAssoTPCCluster(Int_t tpc_clust) {fAssoTPCCluster = tpc_clust;};
+    void                                 SetPhiCut(Bool_t phicut){fPhiCut = phicut;};
 
     
     AliHFEpid *GetPID() const { return fPID; };
@@ -183,7 +184,8 @@ private:
     THnSparseF           *fSparseMassLS;//!ssssss
     Int_t                 fAssoTPCCluster;//asso tpc cluster
     Bool_t                fAssoITSRefit;//asso its refit
-    
+    Bool_t                fPhiCut;//Phi cut to simulate emcal acc
+
     
     AliAnalysisTaskFlowITSTPCTOFQCSP(const AliAnalysisTaskFlowITSTPCTOFQCSP&); // not implemented
     AliAnalysisTaskFlowITSTPCTOFQCSP& operator=(const AliAnalysisTaskFlowITSTPCTOFQCSP&); // not implemented
index 1a57e7a0b7899e80b37112c6dc68f8228635be45..307af57e7422ce5bebf37fc2c3d965a8f9a75eb1 100644 (file)
@@ -1304,7 +1304,7 @@ void AliAnalysisTaskFlowTPCEMCalQCSP::CheckCentrality(AliAODEvent* event, Bool_t
     }//...after centrality selectrion
     //============================================================================================================================
     if(fMultCut){
-        if(fTrigger==1 || fTrigger==4){
+        if(fTrigger==1 || fTrigger==4 || fTrigger==5){
             if(! (multTPC > (-36.73 + 1.48*multGlob) && multTPC < (62.87 + 1.78*multGlob))){
                 //   cout <<" Trigger ==" <<fTrigger<< endl;
                 centralitypass = kFALSE;
index f3019c9a1702ad0abafc522b0ceeeba1bd34ac45..5e95af78318899b827fd69e82ceb48395ec668ca 100755 (executable)
@@ -34,9 +34,10 @@ AliAnalysisTaskFlowITSTPCTOFQCSP* AddTaskFlowITSTPCTOFQCSP(
                                                      Int_t minTPCCluster,
                                                      Int_t TPCS,
                                                      AliHFEextraCuts::ITSPixel_t pixel,
-                                                    Int_t TPCClusterforAsso = 80,
+                                                     Int_t TPCClusterforAsso = 80,
                                                      Bool_t AssoITSref = kTRUE,
-                                                     Double_t ptminassocut = 0.25,
+                                                     Double_t ptminassocut = 0.0,
+                                                     Bool_t PhiCut = kFALSE,
                                                      Bool_t PhotonicElectronDCA = kFALSE,
                                                     // Bool_t QaPidSparse = kFALSE,
                                                      const char *Cent = "V0M",
@@ -103,6 +104,11 @@ AliAnalysisTaskFlowITSTPCTOFQCSP* AddTaskFlowITSTPCTOFQCSP(
     taskHFE->SetPtMinAssoCut(ptminassocut);
     taskHFE->SetAssoTPCCluster(TPCClusterforAsso);
     taskHFE->SetAssoITSRefit(AssoITSref);
+    taskHFE->SetPhiCut(PhiCut);
+
+    
+    
+    
     //set RP cuts for flow package analysis
     cutsRP = new AliFlowTrackCuts(Form("RFPcuts%s",uniqueID));
     if(!cutsRP) {
index 649303c44fc5d7c44927a874ab15a6900c075779..2f8da7a7cba401006ac8c49c888070746bed00d2 100755 (executable)
@@ -1887,6 +1887,10 @@ void AliAnalysisTaskSELc2V0bachelor::FillTheTree(AliAODRecoCascadeHF *part, AliR
                                                    dgLabels,ndg,ndgCk,pdgDg,absLabelMother);
       AliAODMCParticle *part1 = dynamic_cast<AliAODMCParticle*>(mcArray->At(TMath::Abs(v0pos->GetLabel())));
       AliAODMCParticle *part2 = dynamic_cast<AliAODMCParticle*>(mcArray->At(TMath::Abs(v0neg->GetLabel())));
+      if(!part1 || !part2) {
+       AliDebug(2,"Daughter particles not found\n");
+       return;
+      }
       fCandidateVariables[86]=part1->GetPdgCode();
       fCandidateVariables[87]=part2->GetPdgCode();
     }
@@ -2533,12 +2537,14 @@ Int_t AliAnalysisTaskSELc2V0bachelor::SearchForCommonMother(TClonesArray *mcArra
   for(Int_t i=0; i<ndg; i++) {
     lab = TMath::Abs(dgLabels[i]);
     if(lab<0) {
-      printf("daughter with negative label %d\n",lab);
+      AliDebug(2,Form("daughter with negative label %d\n",lab));
+      delete [] labelMother;
       return 0;
     }
     part = (AliAODMCParticle*)mcArray->At(lab);
     if(!part) { 
-      printf("no MC particle\n");
+      AliDebug(2,"no MC particle\n");
+      delete [] labelMother;
       return 0;
     }
 
@@ -2547,7 +2553,7 @@ Int_t AliAnalysisTaskSELc2V0bachelor::SearchForCommonMother(TClonesArray *mcArra
       labMother=mother->GetMother();
       mother = (AliAODMCParticle*)mcArray->At(labMother);
       if(!mother) {
-       printf("no MC mother particle\n");
+       AliDebug(2,"no MC mother particle\n");
        break;
       }
       pdgMother = TMath::Abs(mother->GetPdgCode());
@@ -2562,11 +2568,11 @@ Int_t AliAnalysisTaskSELc2V0bachelor::SearchForCommonMother(TClonesArray *mcArra
 
   for(Int_t i=0; i<ndg; i++) {
     AliAODMCParticle*part0 = (AliAODMCParticle*)mcArray->At(TMath::Abs(dgLabels[i]));
-    printf("part[%d]->GetLabel()=%d(%d) | ",i,dgLabels[i],part0->GetPdgCode());
-    printf("labelMother[%d] = ",i);
+    AliInfo(Form("part[%d]->GetLabel()=%d(%d) | ",i,dgLabels[i],part0->GetPdgCode()));
+    AliInfo(Form("labelMother[%d] = ",i));
     for (Int_t jj=0;jj<labelMother[i]->GetSize(); jj++)
-      printf("%d, ",labelMother[i]->At(jj));
-    printf("\n");
+      AliInfo(Form("%d, ",labelMother[i]->At(jj)));
+    AliInfo("\n");
   }
 
   Int_t pdgToBeReturned=0;
@@ -2580,7 +2586,7 @@ Int_t AliAnalysisTaskSELc2V0bachelor::SearchForCommonMother(TClonesArray *mcArra
          mother = (AliAODMCParticle*)mcArray->At(labelMother[0]->At(ii));
          pdgToBeReturned=mother->GetPdgCode();
          absLabelMother=labelMother[0]->At(ii);
-         printf("FOUND label for the mother of this candidate: %d (PDG=%d)\n",labelMother[0]->At(ii),pdgToBeReturned);
+         AliDebug(2,Form("FOUND label for the mother of this candidate: %d (PDG=%d)\n",labelMother[0]->At(ii),pdgToBeReturned));
          mother->Print();
          found = kTRUE;
          ndgCk=3;
old mode 100644 (file)
new mode 100755 (executable)
index e4ce4cb..391a85e
@@ -186,7 +186,8 @@ AliAnalysisTaskSE(),
   fCutKFDeviationFromVtx(999999.),
   fCutKFDeviationFromVtxV0(0.),
   fCurrentEvent(-1),
-  fBField(0)
+  fBField(0),
+  fKeepingOnlyPYTHIABkg(kFALSE)
 {
   //
   // Default ctor
@@ -305,7 +306,8 @@ AliAnalysisTaskSELc2V0bachelorTMVA::AliAnalysisTaskSELc2V0bachelorTMVA(const Cha
   fCutKFDeviationFromVtx(999999.),
   fCutKFDeviationFromVtxV0(0.),
   fCurrentEvent(-1),
-  fBField(0)
+  fBField(0),
+  fKeepingOnlyPYTHIABkg(kFALSE)
 
 {
   //
@@ -393,7 +395,7 @@ void AliAnalysisTaskSELc2V0bachelorTMVA::Init() {
   fListCuts->Add(new AliRDHFCutsLctoV0(*fAnalCuts));
   PostData(3,fListCuts);
 
-  if (fUseMCInfo && fKeepingOnlyHIJINGBkg) fUtils = new AliVertexingHFUtils();
+  if (fUseMCInfo && (fKeepingOnlyHIJINGBkg || fKeepingOnlyPYTHIABkg)) fUtils = new AliVertexingHFUtils();
 
   return;
 }
@@ -467,8 +469,8 @@ void AliAnalysisTaskSELc2V0bachelorTMVA::UserCreateOutputObjects() {
   fCandidateVariableNames[24]="LcEta";
   fCandidateVariableNames[25]="V0positiveEta";
   fCandidateVariableNames[26]="V0negativeEta";
-  fCandidateVariableNames[27]="combinedPionProb";
-  fCandidateVariableNames[28]="combinedKaonProb";
+  fCandidateVariableNames[27]="TPCProtonProb";
+  fCandidateVariableNames[28]="TOFProtonProb";
   fCandidateVariableNames[29]="bachelorEta";
   fCandidateVariableNames[30]="LcP";
   fCandidateVariableNames[31]="bachelorP";
@@ -594,8 +596,8 @@ void AliAnalysisTaskSELc2V0bachelorTMVA::UserCreateOutputObjects() {
     fHistoLcpKpiBeforeCuts->GetXaxis()->SetBinLabel(ibin, labelBeforeCuts[ibin-1].Data());
   }
 
-  fHistoBackground = new TH1F("fHistoBackground", "fHistoBackground", 2, -0.5, 1.5);
-  TString labelBkg[2] = {"Injected", "Non-injected"};
+  fHistoBackground = new TH1F("fHistoBackground", "fHistoBackground", 4, -0.5, 3.5);
+  TString labelBkg[4] = {"Injected", "Non-injected", "Non-PYTHIA", "PYTHIA"};
   for (Int_t ibin = 1; ibin <= fHistoBackground->GetNbinsX(); ibin++){
     fHistoBackground->GetXaxis()->SetBinLabel(ibin, labelBkg[ibin-1].Data());
   }
@@ -1078,6 +1080,42 @@ void AliAnalysisTaskSELc2V0bachelorTMVA::MakeAnalysisForLc2prK0S(TClonesArray *a
            continue; 
          }
        }
+       else if (fKeepingOnlyPYTHIABkg){
+         // we have decided to fill the background only when the candidate has the daugthers that all come from HIJING underlying event!
+         AliAODTrack *bachelor = (AliAODTrack*)lcK0spr->GetBachelor();
+         AliAODTrack *v0pos = (AliAODTrack*)lcK0spr->Getv0PositiveTrack();
+         AliAODTrack *v0neg = (AliAODTrack*)lcK0spr->Getv0NegativeTrack();
+         if (!bachelor || !v0pos || !v0neg) {
+           AliDebug(2, "Cannot retrieve one of the tracks while checking origin, continuing");
+           continue;
+         }
+         else {
+           Int_t labelbachelor = TMath::Abs(bachelor->GetLabel());
+           Int_t labelv0pos = TMath::Abs(v0pos->GetLabel());
+           Int_t labelv0neg = TMath::Abs(v0neg->GetLabel());
+           AliAODMCParticle* MCbachelor =  (AliAODMCParticle*)mcArray->At(labelbachelor);
+           AliAODMCParticle* MCv0pos =  (AliAODMCParticle*)mcArray->At(labelv0pos);
+           AliAODMCParticle* MCv0neg =  (AliAODMCParticle*)mcArray->At(labelv0neg);
+           if (!MCbachelor || !MCv0pos || !MCv0neg) {
+             AliDebug(2, "Cannot retrieve MC particle for one of the tracks while checking origin, continuing");
+             continue;
+           }
+           else {
+             Int_t isBachelorFromPythia = fUtils->CheckOrigin(mcArray, MCbachelor, kTRUE);
+             Int_t isv0posFromPythia = fUtils->CheckOrigin(mcArray, MCv0pos, kTRUE);
+             Int_t isv0negFromPythia = fUtils->CheckOrigin(mcArray, MCv0neg, kTRUE);
+             if (isBachelorFromPythia != 0 && isv0posFromPythia != 0 && isv0negFromPythia != 0){
+               AliDebug(2, "The candidate is from PYTHIA (i.e. all daughters originate from a quark), keeping it to fill background");
+               fHistoBackground->Fill(2);
+             }
+             else {
+               AliDebug(2, "The candidate is NOT from PYTHIA, we skip it when filling background");
+               fHistoBackground->Fill(3);
+               continue; 
+             }
+           }
+         }
+       }
       }
     }
 
@@ -1183,18 +1221,49 @@ void AliAnalysisTaskSELc2V0bachelorTMVA::FillLc2pK0Sspectrum(AliAODRecoCascadeHF
   }
 
   //Bool_t isBachelorID = (((cutsAnal->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // ID x bachelor
-  Double_t probTPCTOF[AliPID::kSPECIES]={0.};
+  Double_t probTPCTOF[AliPID::kSPECIES]={-1.};
        
   UInt_t detUsed = fPIDCombined->ComputeProbabilities(bachelor, fPIDResponse, probTPCTOF);
-  Double_t probProton = 0.;
-  Double_t probPion = 0.;
-  Double_t probKaon = 0.;
+  Printf("detUsed (TPCTOF case) = %d", detUsed);
+  Double_t probProton = -1.;
+  Double_t probPion = -1.;
+  Double_t probKaon = -1.;
   if (detUsed == (UInt_t)fPIDCombined->GetDetectorMask() ) {
+    Printf("We have found the detector mask for TOF + TPC: probProton will be set to %f", probTPCTOF[AliPID::kProton]);
     probProton = probTPCTOF[AliPID::kProton];
     probPion = probTPCTOF[AliPID::kPion];
     probKaon = probTPCTOF[AliPID::kKaon];
   }
-
+  else { // if you don't have both TOF and TPC, try only TPC
+    fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC);
+    Printf("We did not find the detector mask for TOF + TPC, let's see only TPC");
+    detUsed = fPIDCombined->ComputeProbabilities(bachelor, fPIDResponse, probTPCTOF);
+    Printf("detUsed (TPC case) = %d", detUsed);
+    if (detUsed == (UInt_t)fPIDCombined->GetDetectorMask()) {
+      probProton = probTPCTOF[AliPID::kProton];
+      probPion = probTPCTOF[AliPID::kPion];
+      probKaon = probTPCTOF[AliPID::kKaon];
+      Printf("TPC only worked: probProton will be set to %f", probTPCTOF[AliPID::kProton]);
+    }
+    else {
+      Printf("Only TPC did not work...");
+    }
+    // resetting mask to ask for both TPC+TOF
+    fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF);
+  }
+  Printf("probProton = %f", probProton);
+
+  // now we get the TPC and TOF single PID probabilities (only for Proton, or the tree will explode :) )
+  Double_t probProtonTPC = -1.;
+  Double_t probProtonTOF = -1.;
+  Double_t pidTPC[AliPID::kSPECIES]={-1.};
+  Double_t pidTOF[AliPID::kSPECIES]={-1.};
+  Int_t respTPC = fPIDResponse->ComputePIDProbability(AliPIDResponse::kDetTPC, bachelor, AliPID::kSPECIES, pidTPC);
+  Int_t respTOF = fPIDResponse->ComputePIDProbability(AliPIDResponse::kDetTOF, bachelor, AliPID::kSPECIES, pidTOF);
+  if (respTPC == AliPIDResponse::kDetPidOk) probProtonTPC = pidTPC[AliPID::kProton];
+  if (respTOF == AliPIDResponse::kDetPidOk) probProtonTOF = pidTOF[AliPID::kProton];
+
+  // checking V0 status (on-the-fly vs offline)
   if ( !( !onFlyV0 || (onFlyV0 && fUseOnTheFlyV0) ) ) {
     AliDebug(2, "On-the-fly discarded");
     return;            
@@ -1346,8 +1415,8 @@ void AliAnalysisTaskSELc2V0bachelorTMVA::FillLc2pK0Sspectrum(AliAODRecoCascadeHF
     fCandidateVariables[24] = part->Eta();
     fCandidateVariables[25] = v0pos->Eta();
     fCandidateVariables[26] = v0neg->Eta();
-    fCandidateVariables[27] = probPion;
-    fCandidateVariables[28] = probKaon;
+    fCandidateVariables[27] = probProtonTPC;
+    fCandidateVariables[28] = probProtonTOF;
     fCandidateVariables[29] = bachelor->Eta();
 
     fCandidateVariables[30] = part->P();
@@ -2001,7 +2070,7 @@ Int_t AliAnalysisTaskSELc2V0bachelorTMVA::CallKFVertexing(AliAODRecoCascadeHF *c
            AliDebug(3, "Could not access MC info for second daughter of Lc");
          }
          else { // we can access safely the K0S mother in the MC
-           if( daughv01Lc->GetMother() ==  daughv02Lc->GetMother() && daughv01Lc->GetMother()>=0 ){  // This is a true cascade! bachelor and V0 come from the same mother
+           if( daughv01Lc && (daughv01Lc->GetMother() ==  daughv02Lc->GetMother()) && (daughv01Lc->GetMother()>=0) ){  // This is a true cascade! bachelor and V0 come from the same mother
              //Printf("Lc: The mother has label %d", daughv01Lc->GetMother());
              AliAODMCParticle *motherLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(daughv01Lc->GetMother()));
              Int_t pdgMum = 0, pdgBach = 0, pdgV0 = 0;
old mode 100644 (file)
new mode 100755 (executable)
index 7deaf66..d66ddad
@@ -119,6 +119,9 @@ class AliAnalysisTaskSELc2V0bachelorTMVA : public AliAnalysisTaskSE
   void SetKFCutDeviationFromVtxV0(Float_t a) {fCutKFDeviationFromVtxV0 = a;}
   Float_t GetKFCutDeviationFromVtxV0() {return fCutKFDeviationFromVtxV0;}
 
+  void SetKeepingKeepingOnlyPYTHIABkg(Bool_t a) { fKeepingOnlyPYTHIABkg = a;}
+  Bool_t GetKeepingOnlyPYTHIABkg() {return fKeepingOnlyPYTHIABkg;}
+
  private:
   
   EBachelor CheckBachelor(AliAODRecoCascadeHF *part, AliAODTrack* bachelor, TClonesArray *mcArray);
@@ -249,8 +252,9 @@ class AliAnalysisTaskSELc2V0bachelorTMVA : public AliAnalysisTaskSE
   Float_t fCutKFDeviationFromVtxV0; // cut for KF on distance to primary vtx for V0
   Int_t fCurrentEvent;              // current event number - for debug purposes
   Double_t fBField;                   // magnetic field of current event
+  Bool_t fKeepingOnlyPYTHIABkg;       // flag to allow to use only PYTHIA tracks for background
 
-  ClassDef(AliAnalysisTaskSELc2V0bachelorTMVA,3); // class for Lc->p K0
+  ClassDef(AliAnalysisTaskSELc2V0bachelorTMVA, 4); // class for Lc->p K0
 };
 
 #endif
index b57729c22e17a10de3fdbe3ffab1cce4d0fb7787..f8da8b25531d087d5b8f72e1f0f2f2c96cd40aca 100755 (executable)
@@ -683,6 +683,7 @@ void AliCFTaskVertexingHF::UserExec(Option_t *)
     AliDebug(3,Form("z coordinate of MC vertex = %f, it was required to be within [-%f, +%f], skipping event", zMCVertex, fCuts->GetMaxVtxZ(), fCuts->GetMaxVtxZ()));
     delete[] containerInput;
     delete[] containerInputMC;
+    delete cfVtxHF;
     return;
   }
 
@@ -691,6 +692,7 @@ void AliCFTaskVertexingHF::UserExec(Option_t *)
     AliDebug(3,"Event rejected because of null trigger mask");
     delete[] containerInput;
     delete[] containerInputMC;
+    delete cfVtxHF;
     return;
   }
 
@@ -734,6 +736,7 @@ void AliCFTaskVertexingHF::UserExec(Option_t *)
       delete[] containerInput;
       delete[] containerInputMC;
       delete [] trackCuts;
+      delete cfVtxHF;
       return;
     }    
   }  else { // keep all centralities
index b5731f1287aa5a02ff5ef565a035aecc07d3dbb8..66b85b6c12d8c7345afb18d85a1d7e77f1db973b 100644 (file)
@@ -173,10 +173,12 @@ Bool_t AliCFVertexingHF2Prong::GetGeneratedValuesFromMCParticle(Double_t* vector
        }
        else{
                AliWarning("There are problems!! particle was expected to be either a D0 or a D0bar, check...");
+               delete decay;
                return vectorMC;
        }
        if (cosThetaStar < -1 || cosThetaStar > 1) {
                AliWarning("Invalid value for cosine Theta star, returning");
+               delete decay;
                return bGenValues;
        }
                
index 99c31415ff0b8987775417251e640a0a6f2ab263..372750d8a1a701d62d870c48df7a253c975fbc0a 100644 (file)
@@ -373,7 +373,7 @@ Bool_t AliCFVertexingHF3Prong::GetGeneratedValuesFromMCParticle(Double_t* vector
                vectorMC[7] = fMultiplicity;   // dummy value for d0pi, meaningless in MC, in micron
                break;
        }
-       
+       delete decay;   
        bGenValues = kTRUE;
        return bGenValues;
 }
index 36e73d0cf178ab7f1c91a75d026e6d131778dcca..ff1aa134321ce0abe9c288b94981c264c8ece955 100644 (file)
@@ -195,10 +195,12 @@ Bool_t AliCFVertexingHFCascade::GetGeneratedValuesFromMCParticle(Double_t* vecto
        }
        else{
          AliWarning("There are problems!! particle was expected to be either a D0 or a D0bar, check...");
+         delete decay;
          return vectorMC;
        }
        if (cosThetaStar < -1 || cosThetaStar > 1) {
          AliWarning("Invalid value for cosine Theta star, returning");
+         delete decay;
          return bGenValues;
        }
        
@@ -207,6 +209,7 @@ Bool_t AliCFVertexingHFCascade::GetGeneratedValuesFromMCParticle(Double_t* vecto
        // evaluate the correct cascade
        if (!EvaluateIfD0toKpi(mcPartDaughterD0,vectorD0)) {
          AliDebug(2, "Error! the D0 MC doesn't have correct daughters!!");
+         delete decay;
          return bGenValues;  
        }       
 
index 86032a86e1ee6501eed3182448f2f9a454a701ee..f6426fcf733292f860df153533ef9f1ff658c726 100644 (file)
@@ -159,8 +159,8 @@ AliCFTaskVertexingHF *AddTaskCFVertexingHF3Prong(TString suffixName="", const ch
        printf("pT: nbin (from cuts file) = %d\n",nbinpt);
        const Int_t nbiny  = 24 ; //bins in y
        const Int_t nbinphi  = 18 ; //bins in phi
-       const Int_t nbincT  = 25 ; //bins in cT 
-       const Int_t nbinpointing  = 350 ; //bins in cosPointingAngle    
+       const Int_t nbincT  = 2 ; //bins in cT 
+       const Int_t nbinpointing  = 35 ; //bins in cosPointingAngle     
        const Int_t nbinpTpi_0_4  = 8 ; //bins in ptPi from 0 to 4 GeV
        const Int_t nbinpTpi_4_8  = 4 ; //bins in ptPi from 4 to 8 GeV
        const Int_t nbinpTpi_8_10  = 1 ; //bins in ptPi from 8 to 10 GeV
index 66de8d84fd77cac231743c64bf804b0ac1549e57..8dc083163fa3fc2a04b244d10c19849676dbca4e 100644 (file)
@@ -142,7 +142,7 @@ AliCFTaskVertexingHF *AddTaskCFVertexingHF3ProngDs(TString suffixName="", Int_t
        printf("pT: nbin (from cuts file) = %d\n",nbinpt);
        const Int_t nbiny  = 24 ; //bins in y
        const Int_t nbinphi  = 18 ; //bins in phi
-       const Int_t nbincT  = 25 ; //bins in cT 
+       const Int_t nbincT  = 2 ; //bins in cT 
        const Int_t nbinpointing  = 350 ; //bins in cosPointingAngle    
        const Int_t nbinpT1_0_4  = 8 ; //bins in pt1 from 0 to 4 GeV
        const Int_t nbinpT1_4_8  = 4 ; //bins in pt1 from 4 to 8 GeV
index 1ed33b596a56d03a249b14350696293fc4fef3df..c3a89a406b38bbb1168616c113c1e4fbeb5b66fe 100644 (file)
@@ -78,6 +78,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction()
    ,fEvtSelectionMask(0)
    ,fEventClass(0)
    ,fMaxVertexZ(10)
+   ,fRejectPileup(kFALSE)
    ,fTrackPtCut(0)
    ,fTrackEtaMin(0)
    ,fTrackEtaMax(0)
@@ -278,6 +279,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const
   ,fEvtSelectionMask(0)
   ,fEventClass(0)
   ,fMaxVertexZ(10)
+  ,fRejectPileup(kFALSE)
   ,fTrackPtCut(0)
   ,fTrackEtaMin(0)
   ,fTrackEtaMax(0)
@@ -479,6 +481,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const
   ,fEvtSelectionMask(copy.fEvtSelectionMask)
   ,fEventClass(copy.fEventClass)
   ,fMaxVertexZ(copy.fMaxVertexZ)
+  ,fRejectPileup(copy.fRejectPileup)
   ,fTrackPtCut(copy.fTrackPtCut)
   ,fTrackEtaMin(copy.fTrackEtaMin)
   ,fTrackEtaMax(copy.fTrackEtaMax)
@@ -684,6 +687,7 @@ AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::oper
     fEvtSelectionMask              = o.fEvtSelectionMask;
     fEventClass                    = o.fEventClass;
     fMaxVertexZ                    = o.fMaxVertexZ;
+    fRejectPileup                  = o.fRejectPileup;
     fTrackPtCut                    = o.fTrackPtCut;
     fTrackEtaMin                   = o.fTrackEtaMin;
     fTrackEtaMax                   = o.fTrackEtaMax;
@@ -1396,14 +1400,15 @@ void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
   
   
   // Histograms        
-  fh1EvtSelection            = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
+  fh1EvtSelection            = new TH1F("fh1EvtSelection", "Event Selection", 7, -0.5, 6.5);
   fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
   fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
   fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
   fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
   fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
   fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
-  
+  fh1EvtSelection->GetXaxis()->SetBinLabel(7,"pileup: rejected");
   fh1VertexNContributors     = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
   fh1VertexZ                 = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
   fh1EvtMult                = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
@@ -2183,6 +2188,13 @@ void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
     return;
   }
 
+  if(fRejectPileup && AliAnalysisHelperJetTasks::IsPileUp()){
+    if (fDebug > 1) Printf("%s:%d SPD pileup: event REJECTED...",(char*)__FILE__,__LINE__);
+    fh1EvtSelection->Fill(6.);
+    PostData(1, fCommonHistList);
+    return;
+  }
+
   if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__); 
   fh1EvtSelection->Fill(0.);
   fh1EvtCent->Fill(centPercent);
@@ -2703,6 +2715,7 @@ void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
          TList* perpjettracklistGen1 = new TList();
          TList* perpjettracklistGen2 = new TList();
 
+         Double_t sumPtGenPerp  = 0.;
          Double_t sumPtGenPerp1 = 0.;
          Double_t sumPtGenPerp2 = 0.;
          GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCCharged, perpjettracklistGen1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerp1); 
@@ -2710,31 +2723,36 @@ void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
 
          perpjettracklistGen->AddAll(perpjettracklistGen1);
          perpjettracklistGen->AddAll(perpjettracklistGen2);
+         sumPtGenPerp = 0.5*(sumPtGenPerp1+sumPtGenPerp2);
 
          TList* perpjettracklistGenSecNS  = new TList();
          TList* perpjettracklistGenSecNS1 = new TList();
          TList* perpjettracklistGenSecNS2 = new TList();
 
-          Double_t sumPtGenPerpNS1 = 0;
-          Double_t sumPtGenPerpNS2 = 0;
+          Double_t sumPtGenPerpNS;
+          Double_t sumPtGenPerpNS1;
+          Double_t sumPtGenPerpNS2;
           GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpNS1); 
           GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS2, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpNS2); 
 
          perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS1);
          perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS2);
+         sumPtGenPerpNS = 0.5*(sumPtGenPerpNS1+sumPtGenPerpNS2);
 
 
          TList* perpjettracklistGenSecS  = new TList();
          TList* perpjettracklistGenSecS1 = new TList();
          TList* perpjettracklistGenSecS2 = new TList();
 
-          Double_t sumPtGenPerpS1 = 0;
-          Double_t sumPtGenPerpS2 = 0;
+          Double_t sumPtGenPerpS;
+          Double_t sumPtGenPerpS1;
+          Double_t sumPtGenPerpS2;
           GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpS1); 
           GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS2, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpS2); 
 
          perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS1);
          perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS2);
+         sumPtGenPerpS = 0.5*(sumPtGenPerpS1+sumPtGenPerpS2);
 
 
           if(perpjettracklistGen->GetSize() != perpjettracklistGen1->GetSize() + perpjettracklistGen2->GetSize()){
@@ -3268,7 +3286,7 @@ void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, c
 
 // ________________________________________________________________________________________________________________________________________________________
 void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet, 
-                                                               const Double_t& radius, Double_t& sumPt, const Double_t& minPtL, const Double_t& maxPt, Bool_t& isBadPt)
+                                                                  const Double_t radius, Double_t& sumPt, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
 {
   // fill list of tracks in cone around jet axis  
 
@@ -3309,8 +3327,7 @@ void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist
 }
 
 // _________________________________________________________________________________________________________________________________________________________________
-void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t& minPtL, 
-                                                                const Double_t& maxPt, Bool_t& isBadPt)
+void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
 {
   // list of jet tracks from trackrefs
   
@@ -3991,7 +4008,7 @@ void AliAnalysisTaskFragmentationFunction::GetClusterTracksMedian(TList* outputl
   // get median cluster
 
   AliAODJet* medianCluster = 0;
-  //Double_t   medianDensity = 0;
+  Double_t   medianDensity = 0;
 
   if(TMath::Odd(nBckgClusters)){
     
@@ -4001,7 +4018,7 @@ void AliAnalysisTaskFragmentationFunction::GetClusterTracksMedian(TList* outputl
     Double_t clusterPt = medianCluster->Pt();
     Double_t area      = medianCluster->EffectiveAreaCharged();
     
-    //if(area>0) medianDensity = clusterPt/area;
+    if(area>0) medianDensity = clusterPt/area;
   }
   else{
 
@@ -4021,7 +4038,7 @@ void AliAnalysisTaskFragmentationFunction::GetClusterTracksMedian(TList* outputl
     Double_t area2      = medianCluster2->EffectiveAreaCharged();
     if(area2>0) density2 = clusterPt2/area2;
     
-    //medianDensity = 0.5*(density1+density2);
+    medianDensity = 0.5*(density1+density2);
     
     medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 );  // select one randomly to avoid adding areas
   }
@@ -4614,7 +4631,7 @@ void AliAnalysisTaskFragmentationFunction::FillBckgHistos(Int_t type, TList* inp
 }
 
 //_____________________________________________________________________________________
-Double_t AliAnalysisTaskFragmentationFunction::GetMCStrangenessFactor(const Double_t& pt)
+Double_t AliAnalysisTaskFragmentationFunction::GetMCStrangenessFactor(const Double_t pt)
 {
   // factor strangeness data/MC as function of pt from UE analysis (Sara Vallero)
 
index b538e39e296b83c01835b5b3848a8d79986219d3..7bc6a80a59db066897092191360d12d5d738e4ed 100644 (file)
@@ -206,6 +206,7 @@ class AliAnalysisTaskFragmentationFunction : public AliAnalysisTaskSE {
   virtual void   SetEventSelectionMask(UInt_t i){fEvtSelectionMask = i;}
   virtual void   SetEventClass(Int_t i){fEventClass = i;}
   virtual void   SetMaxVertexZ(Float_t z){fMaxVertexZ = z;}
+  virtual void   RejectPileupEvents(Bool_t b){fRejectPileup = b;}
   virtual void   SetJetCuts(Float_t jetPt = 5., Float_t jetEtaMin = -0.5, Float_t jetEtaMax = 0.5, 
                            Float_t jetPhiMin = 0., Float_t jetPhiMax = 2*TMath::Pi())
   {fJetPtCut = jetPt; fJetEtaMin = jetEtaMin; fJetEtaMax = jetEtaMax; 
@@ -260,9 +261,8 @@ class AliAnalysisTaskFragmentationFunction : public AliAnalysisTaskSE {
   Float_t  GetFFMaxTrackPt() const { return fFFMaxTrackPt; }
   Float_t  GetFFMinNTracks() const { return fFFMinnTracks; }
   Float_t  GetFFBckgRadius() const { return fFFBckgRadius; }
-  void    GetJetTracksTrackrefs(TList* l, const AliAODJet* j, const Double_t& minPtL, const Double_t& maxPt, Bool_t& isBadPt);
-  void    GetJetTracksPointing(TList* in, TList* out, const AliAODJet* j, const Double_t& r, Double_t& sumPt, 
-                               const Double_t& minPtL, const Double_t& maxPt, Bool_t& isBadPt);  
+  void    GetJetTracksTrackrefs(TList* l, const AliAODJet* j, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt);
+  void    GetJetTracksPointing(TList* in, TList* out, const AliAODJet* j, const Double_t r, Double_t& sumPt, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt);  
   void     GetTracksOutOfNJets(Int_t nCases, TList* in, TList* out, TList* jets, Double_t& pt);
   void     GetTracksOutOfNJetsStat(Int_t nCases, TList* in, TList* out, TList* jets, Double_t& pt, Double_t &normFactor);
   void     GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius, Double_t& sumPt);
@@ -287,7 +287,7 @@ class AliAnalysisTaskFragmentationFunction : public AliAnalysisTaskSE {
   void     FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet, 
                          AliFragFuncHistos* ffbckghistocuts,AliFragFuncQATrackHistos* qabckghistos,TH1F* fh1Mult = 0); 
  
-  Double_t GetMCStrangenessFactor(const Double_t& pt);
+  Double_t GetMCStrangenessFactor(const Double_t pt);
   Double_t GetMCStrangenessFactorCMS(AliAODMCParticle* daughter);
 
   void FillJetShape(AliAODJet* jet, TList* list,  TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt=0, Double_t dPhiUE=0, Double_t normUE = 0, Bool_t scaleStrangeness = kFALSE);
@@ -332,6 +332,7 @@ class AliAnalysisTaskFragmentationFunction : public AliAnalysisTaskSE {
   UInt_t  fEvtSelectionMask;    // trigger class selection
   Int_t   fEventClass;          // centrality class selection
   Float_t fMaxVertexZ;          // maximum abs(z) position of primiary vertex [cm]
+  Bool_t  fRejectPileup;        // SPD pileup rejection
 
   // track cuts
   Float_t fTrackPtCut;    // track transverse momentum cut
index 4d23c729ac785ecdb07d872142ec98ddbdcdf924..4171d2215fc18cc4c05cb0b957a6859bea03df69 100644 (file)
@@ -62,6 +62,7 @@
 #include "AliAODJet.h"
 #include "AliVVertex.h"
 #include "AliAnalysisTaskJetCorePP.h"
+#include "AliHeader.h" //KF//
 
 using std::cout;
 using std::endl;
@@ -330,7 +331,7 @@ fDoubleBinning(kFALSE)
    TString dummy(name);
    if(dummy.Contains("KINE")){
       DefineInput(1, TClonesArray::Class());
-      //XXXX//DefineInput(2, TClonesArray::Class());
+      DefineInput(2, TClonesArray::Class());
    }
 }
 
@@ -493,49 +494,52 @@ Bool_t AliAnalysisTaskJetCorePP::Notify()
    //and number of trials from pyxsec.root
    //inspired by AliAnalysisTaskJetSpectrum2::Notify()
    if(!(fIsChargedMC || fIsKine)) return kFALSE; 
+   Float_t xsection = 0;
+   Float_t trials  = 1;
+   fAvgTrials = 1;
 
-   fESD = dynamic_cast<AliESDEvent*>(InputEvent());
-   if(!fESD){
-      if(fDebug>1) AliError("ESD not available");
-      fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());
-   } 
+   if(fIsChargedMC){ 
+      fESD = dynamic_cast<AliESDEvent*>(InputEvent());
+      if(!fESD){
+         if(fDebug>1) AliError("ESD not available");
+         fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());
+      } 
  
-   fAODOut = dynamic_cast<AliAODEvent*>(AODEvent());
+      fAODOut = dynamic_cast<AliAODEvent*>(AODEvent());
 
 
-   if(fNonStdFile.Length()!=0){
-      // case that we have an AOD extension we can fetch the jets from the extended output
-      AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
-      fAODExtension = aodH ? aodH->GetExtension(fNonStdFile.Data()) : 0;
-      if(!fAODExtension){
-         if(fDebug>1) Printf("AODExtension found for %s",fNonStdFile.Data());
-      } 
-   }
+      if(fNonStdFile.Length()!=0){
+         // case that we have an AOD extension we can fetch the jets from the extended output
+         AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
+         fAODExtension = aodH ? aodH->GetExtension(fNonStdFile.Data()) : 0;
+         if(!fAODExtension){
+            if(fDebug>1) Printf("AODExtension found for %s",fNonStdFile.Data());
+         
+      }
  
-   TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
-   Float_t xsection = 0;
-   Float_t ftrials  = 1;
+      TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
 
-   fAvgTrials = 1;
-   if(tree){
-      TFile *curfile = tree->GetCurrentFile();
-      if(!curfile) {
-         Error("Notify","No current file");
-         return kFALSE;
-      }
-      if(!fh1Xsec || !fh1Trials){
-         Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
-         return kFALSE;
-      }
-      AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
-      fh1Xsec->Fill("<#sigma>",xsection);
-      // construct a poor man average trials
-      Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
-      if(ftrials>=nEntries && nEntries>0.) fAvgTrials = ftrials/nEntries;
-      fh1Trials->Fill("#sum{ntrials}",ftrials);
-   }  
+      if(tree){
+         TFile *curfile = tree->GetCurrentFile();
+         if(!curfile) {
+            Error("Notify","No current file");
+            return kFALSE;
+         }
+         if(!fh1Xsec || !fh1Trials){
+            Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
+            return kFALSE;
+         }
+         AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,trials);
+         fh1Xsec->Fill("<#sigma>",xsection);
+         // construct a poor man average trials
+         Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
+         if(trials>=nEntries && nEntries>0.) fAvgTrials = trials/nEntries;
+         fh1Trials->Fill("#sum{ntrials}",trials);
+      }  
+
+      if(fDebug)Printf("Reading File %s",fInputHandler->GetTree()->GetCurrentFile()->GetName());
+   }
 
-   if(fDebug)Printf("Reading File %s",fInputHandler->GetTree()->GetCurrentFile()->GetName());
 
    return kTRUE;
 }
@@ -571,10 +575,6 @@ void AliAnalysisTaskJetCorePP::UserCreateOutputObjects()
 
    fRandom = new TRandom3(0);
 
-   //if(fIsKine){ //?????????????????????????????????????????
-   //}
-
-
    if(fIsChargedMC || fIsKine){   //full MC or pure kine
       fListJetsGen   = new TList(); //generator level charged antikt jets
       fListJetsBgGen = new TList(); //generator level jets to be removed from bg 
@@ -906,6 +906,9 @@ void AliAnalysisTaskJetCorePP::UserCreateOutputObjects()
 
 void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
 {
+   //User Exec
+   
+
    //Event loop
    Double_t eventW  = 1.0;
    Double_t ptHard  = 0.0;
@@ -932,26 +935,43 @@ void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
          return;
       }
    }else{  //Kine
-      //XXXX// if(!strlen(fJetBranchNameBgKine.Data())){
-      //XXXX//   AliError("Name of jet bg branch for kine not set.");
-      //XXXX//   return;
-      //XXXX// }
+       if(!strlen(fJetBranchNameBgKine.Data())){
+         AliError("Name of jet bg branch for kine not set.");
+         return;
+       }
 
       Init(); 
       if(fMcHandler){
          fMcEvent = fMcHandler->MCEvent(); 
       }else{
-         if(fDebug > 1) printf("AnalysisTaskJetClusterKine::Handler() fMcHandler=NULL\n");
+         if(fDebug > 1) printf("AliAnalysisTaskJetCorePP::Exec() fMcHandler=NULL\n");
          PostData(1, fOutputList);
          return;
       } 
       if(!fMcEvent){
-         if(fDebug > 1) printf("AnalysisTaskJetClusterKine::Exec()   fMcEvent=NULL \n");
+         if(fDebug > 1) printf("AliAnalysisTaskJetCorePP::Exec() fMcEvent=NULL \n");
          PostData(1, fOutputList);
          return;
       }
+      Float_t xsection = 0;
+      Float_t trials  = 0;
+
+      AliGenPythiaEventHeader *genPH =
+         dynamic_cast<AliGenPythiaEventHeader*> (fMcEvent->GenEventHeader()); 
+      if(genPH){
+         xsection = genPH->GetXsection();
+         trials   = genPH->Trials();
+         ptHard   = genPH->GetPtHard();
+      }
+      fh1Xsec->Fill("<#sigma>",xsection);
+      fh1Trials->Fill("#sum{ntrials}",trials);
+      fh1PtHard->Fill(ptHard,eventW);
+      fh1PtHardNoW->Fill(ptHard,1);
+      fh1PtHardTrials->Fill(ptHard,trials);
    }
 
+
    fESD = dynamic_cast<AliESDEvent*>(InputEvent());
    if(!fESD){
       if(fDebug>1) AliError("ESD not available");
@@ -1121,7 +1141,7 @@ void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
 
          //================= generated charged antikt jets ================
          ReadTClonesArray(fJetBranchNameKine.Data(),   fListJetsGen); 
-         //XXXX//ReadTClonesArray(fJetBranchNameBgKine.Data(), fListJetsBgGen); 
+         ReadTClonesArray(fJetBranchNameBgKine.Data(), fListJetsBgGen); 
       }else{  
          //================= generated charged antikt jets ================
          ReadTClonesArray(fJetBranchNameChargMC.Data(),   fListJetsGen); 
@@ -1228,7 +1248,6 @@ void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
       EstimateBgCone(fListJetsGen, &particleListGen, rhoConeGen);
 
       //Estimate rho from cell median minus jets
-      if(!fIsKine)  //XXXX//
       EstimateBgRhoMedian(fListJetsBgGen, &particleListGen, rhoFromCellMedianGen,1);//mc data
 
       //============  Generator trigger+jet ==================
@@ -2061,9 +2080,9 @@ void AliAnalysisTaskJetCorePP::ReadTClonesArray(TString bname, TList *list){
       if(fJetBranchNameKine.Length()>0 && bname.CompareTo(fJetBranchNameKine.Data())==0){
          array = dynamic_cast<TClonesArray*>(GetInputData(1)); //connect exchange container slot 1
       }
-      //XXXX// if(fJetBranchNameBgKine.Length()>0 && bname.CompareTo(fJetBranchNameBgKine.Data())==0){
-      //XXXX//   array = dynamic_cast<TClonesArray*>(GetInputData(2)); //connect exchange container slot 2
-      //XXXX// }
+      if(fJetBranchNameBgKine.Length()>0 && bname.CompareTo(fJetBranchNameBgKine.Data())==0){
+        array = dynamic_cast<TClonesArray*>(GetInputData(2)); //connect exchange container slot 2
+      }
    }else{ //take input from AOD
       if(fAODOut&&!array){
          array = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(bname.Data()));
index 32e5d56ec290421d703b6c909030e8646b641824..40e5654783241b9f62da57704b256788e5ccfd5f 100644 (file)
@@ -66,6 +66,7 @@ ClassImp(AliAnalysisTaskJetProperties)
     ,fBranchJets("jets")
     ,fTrackType(kTrackAOD)
     ,fJetRejectType(0)
+    ,fRejectPileup(1)
     ,fUseAODInputJets(kTRUE)
     ,fFilterMask(0)
     ,fUsePhysicsSelection(kTRUE)
@@ -174,6 +175,7 @@ AliAnalysisTaskJetProperties::AliAnalysisTaskJetProperties(const char *name)
   ,fBranchJets("jets")
   ,fTrackType(kTrackAOD)
   ,fJetRejectType(0)
+  ,fRejectPileup(1)
   ,fUseAODInputJets(kTRUE)
   ,fFilterMask(0)
   ,fUsePhysicsSelection(kTRUE)
@@ -346,7 +348,7 @@ void AliAnalysisTaskJetProperties::UserCreateOutputObjects()
   fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
   fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
   fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
-  fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
+  fh1EvtSelection->GetXaxis()->SetBinLabel(6,"pile up: rejected");
   
   
   fh1VertexNContributors     = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
@@ -852,6 +854,14 @@ void AliAnalysisTaskJetProperties::UserExec(Option_t *)
     return;
   }
   
+  if(fRejectPileup && AliAnalysisHelperJetTasks::IsPileUp()){
+    if (fDebug > 2) Printf("%s:%d SPD pileup : event REJECTED...",(char*)__FILE__,__LINE__);
+    fh1EvtSelection->Fill(6.);
+    PostData(1, fCommonHistList);
+    return; 
+  }//pile up rejection
+  
+
   fh1VertexZ->Fill(primVtx->GetZ());
   
   if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
index 40d97bd235335b1554753e4be7738b9b937ba868..0f5f00cf6dcb15e745a53e21699e9f603f01c155 100644 (file)
@@ -44,6 +44,7 @@ class AliAnalysisTaskJetProperties : public AliAnalysisTaskSE {
   {fMaxVertexZ = VtxZ; fNContributors = nContributors;}
   virtual void   SetTrackCuts(Float_t trackPt = 0.15, Float_t trackEtaMin = -0.9, Float_t trackEtaMax = 0.9)
   {fTrackPtCut = trackPt; fTrackEtaMin = trackEtaMin; fTrackEtaMax = trackEtaMax;}
+  virtual void   SetPileupRejection(Bool_t IsPileupReject){fRejectPileup = IsPileupReject;}
   virtual void   SetJetCuts(Float_t jetPt = 5., Float_t jetEtaMin = -0.5, Float_t jetEtaMax = 0.5) 
   {fJetPtCut = jetPt; fJetEtaMin = jetEtaMin; fJetEtaMax = jetEtaMax;}
   virtual void   SetJetRejectType(Int_t i){fJetRejectType = i;}
@@ -53,7 +54,7 @@ class AliAnalysisTaskJetProperties : public AliAnalysisTaskSE {
   
   enum {kTrackUndef=0, kTrackAOD, kTrackKine,kTrackAODMC};//for track selection
   enum {kNoReject=0, kReject1Track};//for jet rejection
-  
+  enum {kRejectPileup=1};//for pileup rejection
  protected:
   Int_t           GetListOfJetTracks(TList* l, const AliAODJet* j);
   Int_t           GetListOfJets(TList* list);
@@ -75,6 +76,7 @@ class AliAnalysisTaskJetProperties : public AliAnalysisTaskSE {
   TString fBranchJets;          // branch name for reconstructed jets
   Int_t   fTrackType;           // type of generated tracks
   Int_t   fJetRejectType;       // type of jets rejected
+  Bool_t  fRejectPileup;        // pileup rejection
   Bool_t  fUseAODInputJets;     // take jets from in/output - only relevant if AOD event both in input AND output and we want to use output
   UInt_t  fFilterMask;         // filter bit for selected tracks
   Bool_t  fUsePhysicsSelection; // switch for event selection
index cddda504e8b767d54dd3698c623acc183c8b3872..14a9819993e804e0fc4abe8c5f848761b42b501a 100644 (file)
@@ -18,7 +18,6 @@
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
-
  
 #include <TROOT.h>
 #include <TRandom.h>
@@ -142,7 +141,12 @@ AliAnalysisTaskSE(),
   fh2deltaPt1Pt2(0x0),
   fh2RelPtFGen(0x0),
   fh3RelPtFGenLeadTrkPt(0x0),
-  fHistList(0x0)  
+  fHistList(0x0),
+  fh1EvtSelection(0),
+  fMaxVertexZ(100.),
+  fMinNcontributors(0),
+  fRejectPileup(0)
+  
 {
 
   for(int ij = 0;ij <kJetTypes;++ij){    
@@ -253,7 +257,11 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(const char* name):
   fh2deltaPt1Pt2(0x0),
   fh2RelPtFGen(0x0),
   fh3RelPtFGenLeadTrkPt(0x0),
-  fHistList(0x0)
+  fHistList(0x0),
+  fh1EvtSelection(0),
+  fMaxVertexZ(100.),
+  fMinNcontributors(0),
+  fRejectPileup(0)
 {
 
   for(int ij = 0;ij <kJetTypes;++ij){    
@@ -387,7 +395,17 @@ void AliAnalysisTaskJetSpectrum2::UserCreateOutputObjects()
   //  Histogram
     
 
+  fh1EvtSelection            = new TH1F("fh1EvtSelection", "Event Selection", 7, -0.5, 6.5);
+  fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
+  fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
+  fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
+  fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
+  fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
+  fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
+  fh1EvtSelection->GetXaxis()->SetBinLabel(7,"pileup: rejected");
 
+  fHistList->Add(fh1EvtSelection);
   const Int_t nBinPt = 150;
   Double_t binLimitsPt[nBinPt+1];
   for(Int_t iPt = 0;iPt <= nBinPt;iPt++){
@@ -699,6 +717,14 @@ void AliAnalysisTaskJetSpectrum2::UserExec(Option_t */*option*/){
     selected = AliAnalysisHelperJetTasks::TestSelectInfo(fEventSelectionMask);
   }
 
+  if(!selected){
+    // no selection by the service task, we continue
+    if (fDebug > 1)Printf("Not selected %s:%d SelectInfo %d  Class %d",(char*)__FILE__,__LINE__, AliAnalysisHelperJetTasks::Selected(),AliAnalysisHelperJetTasks::EventClass());
+    fh1EvtSelection->Fill(1.); 
+    PostData(1, fHistList);
+    return;
+  }
+
   if(fEventClass>0){
     selected = selected&&(AliAnalysisHelperJetTasks::EventClass()==fEventClass);
   }
@@ -706,6 +732,7 @@ void AliAnalysisTaskJetSpectrum2::UserExec(Option_t */*option*/){
   if(!selected){
     // no selection by the service task, we continue
     if (fDebug > 1)Printf("Not selected %s:%d SelectInfo %d  Class %d",(char*)__FILE__,__LINE__, AliAnalysisHelperJetTasks::Selected(),AliAnalysisHelperJetTasks::EventClass());
+    fh1EvtSelection->Fill(2.);
     PostData(1, fHistList);
     return;
   }
@@ -821,6 +848,44 @@ void AliAnalysisTaskJetSpectrum2::UserExec(Option_t */*option*/){
     }
   }
 
+  AliAODVertex* primVtx = aod->GetPrimaryVertex();
+  Int_t nTracksPrim = primVtx->GetNContributors();
+  
+  
+  if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
+  if(nTracksPrim < fMinNcontributors){
+    if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__); 
+    fh1EvtSelection->Fill(3.);
+    PostData(1, fHistList);
+    return;
+  }
+  
+  if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
+    if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ()); 
+    fh1EvtSelection->Fill(4.);
+    PostData(1, fHistList);
+    return; 
+  }
+  
+  TString primVtxName(primVtx->GetName());
+
+  if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
+    if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
+    fh1EvtSelection->Fill(5.);
+    PostData(1, fHistList);
+    return;
+  }
+
+  if(fRejectPileup && AliAnalysisHelperJetTasks::IsPileUp()){
+    if (fDebug > 1) Printf("%s:%d SPD pileup: event REJECTED...",(char*)__FILE__,__LINE__);
+    fh1EvtSelection->Fill(6.);
+    PostData(1, fHistList);
+    return;
+  }
+
+  if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__); 
+  fh1EvtSelection->Fill(0.);
+
  
   // new Scheme
   // first fill all the pure  histograms, i.e. full jets 
index 0da884a9799c9422d3d4a15914594dbe2085ee65..d53ed7470b33c19ce4083ae8797c12d3bc84c928 100644 (file)
@@ -35,7 +35,6 @@ class TProfile;
 class TProfile2D;
 class TSTring;
 
-
 class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
 {
  public:
@@ -93,6 +92,14 @@ class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
     virtual void SetNAcceptance(Int_t n);
     virtual void SetAcceptance(Int_t i,Float_t phiMin,Float_t phiMax,Float_t etaMin,Float_t etaMax);// non overlapping regions
     virtual Int_t CheckAcceptance(Float_t phi,Float_t eta);
+
+
+    void    SetMaxVertexZ(Float_t a)      {fMaxVertexZ = a;}
+    void    SetMinNcontributors(Int_t i)  {fMinNcontributors = i;}
+    void    SetPileupRejection(Bool_t a)  {fRejectPileup = a;}
+
+
+
     // Helper
     //
 
@@ -149,7 +156,6 @@ class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
     AliVParticle *LeadingTrackFromJetRefs(AliAODJet* jet);
     AliVParticle *LeadingTrackInCone(AliAODJet* jet,TList *list,Float_t r = 0.4);
 
-
     AliJetHeader *fJetHeaderRec;//! The jet header that can be fetched from the userinfo
     AliJetHeader *fJetHeaderGen;//! The jet header that can fetched from the userinfo
     AliAODEvent  *fAODIn; //! where we take the jets from 
@@ -264,6 +270,11 @@ class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
     TH2F*   fh2DijetPt2vsPt1[kJetTypes];        //! dijet pt2 vs pt1
     TH2F*   fh2DijetDifvsSum[kJetTypes];        //! dijet dif vs sum
 
+    TH1F*   fh1EvtSelection;
+    Float_t fMaxVertexZ;
+    Int_t   fMinNcontributors;
+    Bool_t  fRejectPileup;
+
 
     TList *fHistList;                  //! Output list
    
index 6bd156d8bbbf8b145c95fd7f29b657424b6a0b78..40c1f035455b8e46b14bd49825854ce1662b92a8 100644 (file)
@@ -52,6 +52,7 @@ set ( SRCS
     UserTasks/AliAnalysisTaskIDFragmentationFunction.cxx
     UserTasks/AliAnalysisTaskIDFFTCF.cxx
     UserTasks/AliIDFFUtils.cxx
+    UserTasks/AliAnalysisTaskPPJetSpectra.cxx
     )
 
 # Add code that needs fastjet or FJWrapper here 
index d9c09cf96be2e070566a390afa495f539f1763cf..cfdcba04fd04709184def1e1c15306655e37714c 100644 (file)
@@ -32,7 +32,8 @@ AliAnalysisTaskScale::AliAnalysisTaskScale() :
   fHistScalevsCent(0),  
   fHistDeltaScalevsCent(0), 
   fHistScaleEmcalvsCent(0),      
-  fHistScale2EmcalvsCent(0),     
+  fHistScale2EmcalvsCent(0),
+  fHistDeltaScale2EmcalvsCent(0),     
   fHistChScalevsCent(0),          
   fHistChScale2EmcalvsCent(0),   
   fHistPtTPCvsNtrack(0), 
@@ -69,7 +70,8 @@ AliAnalysisTaskScale::AliAnalysisTaskScale(const char *name) :
   fHistScalevsCent(0),  
   fHistDeltaScalevsCent(0), 
   fHistScaleEmcalvsCent(0),      
-  fHistScale2EmcalvsCent(0),     
+  fHistScale2EmcalvsCent(0),
+  fHistDeltaScale2EmcalvsCent(0),  
   fHistChScalevsCent(0),          
   fHistChScale2EmcalvsCent(0),   
   fHistPtTPCvsNtrack(0), 
@@ -101,56 +103,160 @@ void AliAnalysisTaskScale::UserCreateOutputObjects()
 
   AliAnalysisTaskEmcal::UserCreateOutputObjects();
 
-  fHistPtTPCvsCent             = new TH2F("PtTPCvsCent","rho vs cent",            101, -1, 100,   500,   0, 1000);
-  fHistPtEMCALvsCent           = new TH2F("PtEMCALvsCent","rho vs cent",          101, -1, 100,   500,   0, 1000);
-  fHistEtvsCent                = new TH2F("EtvsCent","rho vs cent",               101, -1, 100,   500,   0, 1000);
-  fHistScalevsCent             = new TH2F("ScalevsCent","rho vs cent",            101, -1, 100,   500,   0, 5);
-  fHistDeltaScalevsCent        = new TH2F("DeltaScalevsCent","rho vs cent",       101, -1, 100,   500,  -2.5, 2.5);
-  fHistScaleEmcalvsCent        = new TH2F("ScaleEmcalvsCent","",                  101, -1, 100,   500,   0, 5);
-  fHistScale2EmcalvsCent       = new TH2F("Scale2EmcalvsCent","",                 101, -1, 100,   500,   0, 5);
-  fHistChScalevsCent           = new TH2F("ChScalevsCent","",                     101, -1, 100,   500,   0, 5);
-  fHistChScale2EmcalvsCent     = new TH2F("ChScale2EmcalvsCent","",               101, -1, 100,   500,   0, 5);
-  fHistPtTPCvsNtrack           = new TH2F("PtTPCvsNtrack","rho vs cent",          500,  0, 2500,  500,   0, 1000);
-  fHistPtEMCALvsNtrack         = new TH2F("PtEMCALvsNtrack","rho vs cent",        500,  0, 2500,  500,   0, 1000);
-  fHistEtvsNtrack              = new TH2F("EtvsNtrack","rho vs cent",             500,  0, 2500,  500,   0, 1000);
-  fHistScalevsNtrack           = new TH2F("ScalevsNtrack","rho vs cent",          500,  0, 2500,  500,   0, 5);
-  fHistDeltaScalevsNtrack      = new TH2F("DeltaScalevsNtrack","rho vs cent",     500,  0, 2500,  500,  -2.5, 2.5);
-  fHistScaleEmcalvsNtrack      = new TH2F("ScaleEmcalvsNtrack","",                500,  0, 2500,  500,   0, 5);
-  fHistScale2EmcalvsNtrack     = new TH2F("Scale2EmcalvsNtrack","",               500,  0, 2500,  500,   0, 5);
-  fHistChScalevsNtrack         = new TH2F("ChScalevsNtrack","",                   500,  0, 2500,  500,   0, 5);
-  fHistChScale2EmcalvsNtrack   = new TH2F("ChScale2EmcalvsNtrack","",             500,  0, 2500,  500,   0, 5);
-  fHistTrackPtvsCent           = new TH2F("TrackPtvsCent","Track pt vs cent",     101, -1, 100,   500,   0, 100);
-  fHistClusterPtvsCent         = new TH2F("ClusterPtvsCent","Cluster pt vs cent", 101, -1, 100,   500,   0, 100);
-  fHistTrackEtaPhi             = new TH2F("TrackEtaPhi","Track eta phi",          100, -1.0, 1.0, 101,   0, 2.02*TMath::Pi());
-  fHistClusterEtaPhi           = new TH2F("ClusterEtaPhi","Cluster eta phi",      100, -1.0, 1.0, 101,   0, 2.02*TMath::Pi());
-  fHistScalevsScale2Emcal      = new TH2F("ScalevsScale2Emcal","",                500,  0, 5,     500,   0, 5);
-  fHistScalevsScaleEmcal       = new TH2F("ScalevsScaleEmcal","",                 500,  0, 5,     500,   0, 5);
-  fHistScaleEmcalvsScale2Emcal = new TH2F("ScaleEmcalvsScale2Emcal","",           500,  0, 5,     500,   0, 5);
-
+  fHistPtTPCvsCent = new TH2F("fHistPtTPCvsCent", "fHistPtTPCvsCent", 101, -1, 100, 750, 0, 1500);
+  fHistPtTPCvsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistPtTPCvsCent->GetYaxis()->SetTitle("#sum p_{T,track}^{TPC} GeV/c");
+  fHistPtTPCvsCent->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistPtTPCvsCent);
+
+  fHistPtEMCALvsCent = new TH2F("fHistPtEMCALvsCent", "fHistPtEMCALvsCent", 101, -1, 100, 250, 0, 500);
+  fHistPtEMCALvsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistPtEMCALvsCent->GetYaxis()->SetTitle("#sum p_{T,track}^{EMCal} GeV/c");
+  fHistPtEMCALvsCent->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistPtEMCALvsCent);
+
+  fHistEtvsCent = new TH2F("fHistEtvsCent", "fHistEtvsCent", 101, -1, 100, 250, 0, 500);
+  fHistEtvsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistEtvsCent->GetYaxis()->SetTitle("#sum E_{T,cluster} GeV");
+  fHistEtvsCent->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistEtvsCent);
+
+  fHistScalevsCent = new TH2F("fHistScalevsCent", "fHistScalevsCent", 101, -1, 100, 500, 0, 5);
+  fHistScalevsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistScalevsCent->GetYaxis()->SetTitle("s_{TPC} = (#sum E_{T,cluster} + #sum p_{T,track}^{TPC}) / #sum p_{T,track}^{TPC}");
+  fHistScalevsCent->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistScalevsCent);
+
+  fHistDeltaScalevsCent = new TH2F("fHistDeltaScalevsCent", "fHistDeltaScalevsCent", 101, -1, 100, 500, -2.5, 2.5);
+  fHistDeltaScalevsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistDeltaScalevsCent->GetYaxis()->SetTitle("s_{TPC}-s^{old}");
+  fHistDeltaScalevsCent->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistDeltaScalevsCent);
-  fOutput->Add(fHistScaleEmcalvsCent);      
-  fOutput->Add(fHistScale2EmcalvsCent);     
-  fOutput->Add(fHistChScalevsCent);    
-  fOutput->Add(fHistChScale2EmcalvsCent);   
+
+  fHistScaleEmcalvsCent= new TH2F("fHistScaleEmcalvsCent", "fHistScaleEmcalvsCent", 101, -1, 100, 500, 0, 5);
+  fHistScaleEmcalvsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistScaleEmcalvsCent->GetYaxis()->SetTitle("s_{EMC}");
+  fHistScaleEmcalvsCent->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistScaleEmcalvsCent);
+
+  fHistScale2EmcalvsCent = new TH2F("fHistScale2EmcalvsCent", "fHistScale2EmcalvsCent", 101, -1, 100, 500, 0, 5);
+  fHistScale2EmcalvsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistScale2EmcalvsCent->GetYaxis()->SetTitle("s_{2 #times EMC}");
+  fHistScale2EmcalvsCent->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistScale2EmcalvsCent);
+
+  fHistDeltaScale2EmcalvsCent = new TH2F("fHistDeltaScale2EmcalvsCent", "fHistDeltaScale2EmcalvsCent", 101, -1, 100, 500, -2.5, 2.5);
+  fHistDeltaScale2EmcalvsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistDeltaScale2EmcalvsCent->GetYaxis()->SetTitle("s_{2 #times EMC}-s^{old}");
+  fHistDeltaScale2EmcalvsCent->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistDeltaScale2EmcalvsCent);
+
+  fHistChScalevsCent = new TH2F("fHistChScalevsCent", "fHistChScalevsCent", 101, -1, 100, 500, 0, 5);
+  fHistChScalevsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistChScalevsCent->GetYaxis()->SetTitle("s_{TPC}^{ch}");
+  fHistChScalevsCent->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistChScalevsCent);
+
+  fHistChScale2EmcalvsCent = new TH2F("fHistChScale2EmcalvsCent", "fHistChScale2EmcalvsCent", 101, -1, 100, 500, 0, 5);
+  fHistChScale2EmcalvsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistChScale2EmcalvsCent->GetYaxis()->SetTitle("s_{2 #times EMC}^{ch}");
+  fHistChScale2EmcalvsCent->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistChScale2EmcalvsCent);
+
+  fHistPtTPCvsNtrack = new TH2F("fHistPtTPCvsNtrack", "fHistPtTPCvsNtrack", 800, 0, 4000,  750, 0, 1500);
+  fHistPtTPCvsNtrack->GetXaxis()->SetTitle("No. of tracks");
+  fHistPtTPCvsNtrack->GetYaxis()->SetTitle("#sum p_{T,track}^{TPC}");
+  fHistPtTPCvsNtrack->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistPtTPCvsNtrack);
+
+  fHistPtEMCALvsNtrack = new TH2F("fHistPtEMCALvsNtrack", "fHistPtEMCALvsNtrack", 800, 0, 4000,  500, 0, 1000);
+  fHistPtEMCALvsNtrack->GetXaxis()->SetTitle("No. of tracks");
+  fHistPtEMCALvsNtrack->GetYaxis()->SetTitle("#sum p_{T,track}^{EMCal}");
+  fHistPtEMCALvsNtrack->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistPtEMCALvsNtrack);
+
+  fHistEtvsNtrack = new TH2F("fHistEtvsNtrack", "fHistEtvsNtrack", 800,  0, 4000, 500, 0, 1000);
+  fHistEtvsNtrack->GetXaxis()->SetTitle("No. of tracks");
+  fHistEtvsNtrack->GetYaxis()->SetTitle("#sum E_{T,cluster}");
+  fHistEtvsNtrack->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistEtvsNtrack);
+
+  fHistScalevsNtrack = new TH2F("fHistScalevsNtrack", "fHistScalevsNtrack", 800, 0, 4000,  500, 0, 5);
+  fHistScalevsNtrack->GetXaxis()->SetTitle("No. of tracks");
+  fHistScalevsNtrack->GetYaxis()->SetTitle("s_{TPC}");
+  fHistScalevsNtrack->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistScalevsNtrack);
+
+  fHistDeltaScalevsNtrack = new TH2F("fHistDeltaScalevsNtrack", "fHistDeltaScalevsNtrack", 800, 0, 4000, 500, -2.5, 2.5);
+  fHistDeltaScalevsNtrack->GetXaxis()->SetTitle("No. of tracks");
+  fHistDeltaScalevsNtrack->GetYaxis()->SetTitle("s_{TPC}-s^{old}");
+  fHistDeltaScalevsNtrack->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistDeltaScalevsNtrack);
-  fOutput->Add(fHistScaleEmcalvsNtrack);      
-  fOutput->Add(fHistScale2EmcalvsNtrack);     
-  fOutput->Add(fHistChScalevsNtrack);    
-  fOutput->Add(fHistChScale2EmcalvsNtrack);   
+
+  fHistScaleEmcalvsNtrack = new TH2F("fHistScaleEmcalvsNtrack", "fHistScaleEmcalvsNtrack", 800, 0, 4000, 500, 0, 5);
+  fHistScaleEmcalvsNtrack->GetXaxis()->SetTitle("No. of tracks");
+  fHistScaleEmcalvsNtrack->GetYaxis()->SetTitle("s_{EMC}");
+  fHistScaleEmcalvsNtrack->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistScaleEmcalvsNtrack);
+
+  fHistScale2EmcalvsNtrack = new TH2F("fHistScale2EmcalvsNtrack","fHistScale2EmcalvsNtrack", 800, 0, 4000, 500, 0, 5);
+  fHistScale2EmcalvsNtrack->GetXaxis()->SetTitle("No. of tracks");
+  fHistScale2EmcalvsNtrack->GetYaxis()->SetTitle("s_{2 #times EMC}");
+  fHistScale2EmcalvsNtrack->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistScale2EmcalvsNtrack);
+
+  fHistChScalevsNtrack = new TH2F("fHistChScalevsNtrack", "fHistChScalevsNtrack", 800, 0, 4000, 500, 0, 5);
+  fHistChScalevsNtrack->GetXaxis()->SetTitle("No. of tracks");
+  fHistChScalevsNtrack->GetYaxis()->SetTitle("s_{TPC}^{ch}");
+  fHistChScalevsNtrack->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistChScalevsNtrack);
+
+  fHistChScale2EmcalvsNtrack = new TH2F("fHistChScale2EmcalvsNtrack", "fHistChScale2EmcalvsNtrack", 800,  0, 4000, 500, 0, 5);
+  fHistChScale2EmcalvsNtrack->GetXaxis()->SetTitle("No. of tracks");
+  fHistChScale2EmcalvsNtrack->GetYaxis()->SetTitle("s_{2 #times EMC}^{ch}");
+  fHistChScale2EmcalvsNtrack->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistChScale2EmcalvsNtrack);
+
+  fHistTrackPtvsCent = new TH2F("fHistTrackPtvsCent", "fHistTrackPtvsCent", 101, -1, 100, 500, 0, 100);
+  fHistTrackPtvsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistTrackPtvsCent->GetYaxis()->SetTitle("p_{T,track} GeV/c");
+  fHistTrackPtvsCent->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistTrackPtvsCent);
+
+  fHistClusterPtvsCent = new TH2F("fHistClusterPtvsCent", "fHistClusterPtvsCent", 101, -1, 100, 500, 0, 100);
+  fHistClusterPtvsCent->GetXaxis()->SetTitle("Centrality (%)");
+  fHistClusterPtvsCent->GetYaxis()->SetTitle("E_{T,cluster} GeV");
+  fHistClusterPtvsCent->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistClusterPtvsCent);
+
+  fHistTrackEtaPhi = new TH2F("fHistTrackEtaPhi", "fHistTrackEtaPhi", 100, -1.0, 1.0, 101, 0, 2.02*TMath::Pi());
+  fHistTrackEtaPhi->GetXaxis()->SetTitle("#eta");
+  fHistTrackEtaPhi->GetYaxis()->SetTitle("#phi");
+  fHistTrackEtaPhi->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistTrackEtaPhi);
+
+  fHistClusterEtaPhi = new TH2F("fHistClusterEtaPhi", "fHistClusterEtaPhi", 100, -1.0, 1.0, 101, 0, 2.02*TMath::Pi());
+  fHistClusterEtaPhi->GetXaxis()->SetTitle("#eta");
+  fHistClusterEtaPhi->GetYaxis()->SetTitle("#phi");
+  fHistClusterEtaPhi->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistClusterEtaPhi);
-  fOutput->Add(fHistScalevsScale2Emcal);      
-  fOutput->Add(fHistScalevsScaleEmcal);       
+
+  fHistScalevsScale2Emcal = new TH2F("fHistScalevsScale2Emcal", "fHistScalevsScale2Emcal",500, 0, 5, 500, 0, 5);
+  fHistScalevsScale2Emcal->GetXaxis()->SetTitle("s_{TPC}");
+  fHistScalevsScale2Emcal->GetYaxis()->SetTitle("s_{2 #times EMC}");
+  fHistScalevsScale2Emcal->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistScalevsScale2Emcal);
+
+  fHistScalevsScaleEmcal = new TH2F("fHistScalevsScaleEmcal", "fHistScalevsScaleEmcal", 500, 0, 5, 500, 0, 5);
+  fHistScalevsScaleEmcal->GetXaxis()->SetTitle("s_{TPC}");
+  fHistScalevsScaleEmcal->GetYaxis()->SetTitle("s_{EMC}");
+  fHistScalevsScaleEmcal->GetZaxis()->SetTitle("counts");
+  fOutput->Add(fHistScalevsScaleEmcal);
+
+  fHistScaleEmcalvsScale2Emcal = new TH2F("fHistScaleEmcalvsScale2Emcal", "fHistScaleEmcalvsScale2Emcal", 500, 0, 5, 500, 0, 5);
+  fHistScaleEmcalvsScale2Emcal->GetXaxis()->SetTitle("s_{EMC}");
+  fHistScaleEmcalvsScale2Emcal->GetYaxis()->SetTitle("s_{2 #times EMC}");
+  fHistScaleEmcalvsScale2Emcal->GetZaxis()->SetTitle("counts");
   fOutput->Add(fHistScaleEmcalvsScale2Emcal);
 
   PostData(1, fOutput);
@@ -251,6 +357,7 @@ Bool_t AliAnalysisTaskScale::FillHistograms()
   fHistEtvsCent->Fill(fCent, Et);
   fHistScalevsCent->Fill(fCent, scalecalc);
   fHistDeltaScalevsCent->Fill(fCent, scalecalc - scale);
+  fHistDeltaScale2EmcalvsCent->Fill(fCent, scalecalcemcal2 - scale);
   fHistPtTPCvsNtrack->Fill(Ntracks, ptTPC);
   fHistPtEMCALvsNtrack->Fill(Ntracks, ptEMCAL);
   fHistEtvsNtrack->Fill(Ntracks, Et);
index 3c95bf80ebe41d11328ee4107577a3fb3824cb38..08a906dfce4ca0c12b0899951529dc9b8923b52b 100644 (file)
@@ -3,7 +3,7 @@
 
 // $Id$
 
-class TH2F;
+class TH2;
 class TF1;
 
 #include "AliAnalysisTaskEmcal.h"
@@ -29,31 +29,32 @@ class AliAnalysisTaskScale : public AliAnalysisTaskEmcal {
   Double_t               fEmcalArea;                   //!Emcal area
   Double_t               fTpcArea;                     //!Tpc area
 
-  TH2F                  *fHistPtTPCvsCent;             //!output histogram
-  TH2F                  *fHistPtEMCALvsCent;           //!output histogram
-  TH2F                  *fHistEtvsCent;                //!output histogram
-  TH2F                  *fHistScalevsCent;             //!output histogram
-  TH2F                  *fHistDeltaScalevsCent;        //!output histogram
-  TH2F                  *fHistScaleEmcalvsCent;        //!output histogram
-  TH2F                  *fHistScale2EmcalvsCent;       //!output histogram
-  TH2F                  *fHistChScalevsCent;           //!output histogram
-  TH2F                  *fHistChScale2EmcalvsCent;     //!output histogram
-  TH2F                  *fHistPtTPCvsNtrack;           //!output histogram
-  TH2F                  *fHistPtEMCALvsNtrack;         //!output histogram
-  TH2F                  *fHistEtvsNtrack;              //!output histogram
-  TH2F                  *fHistScalevsNtrack;           //!output histogram
-  TH2F                  *fHistDeltaScalevsNtrack;      //!output histogram
-  TH2F                  *fHistScaleEmcalvsNtrack;      //!output histogram
-  TH2F                  *fHistScale2EmcalvsNtrack;     //!output histogram
-  TH2F                  *fHistChScalevsNtrack;         //!output histogram
-  TH2F                  *fHistChScale2EmcalvsNtrack;   //!output histogram
-  TH2F                  *fHistTrackPtvsCent;           //!output histogram
-  TH2F                  *fHistClusterPtvsCent;         //!output histogram
-  TH2F                  *fHistTrackEtaPhi;             //!output histogram
-  TH2F                  *fHistClusterEtaPhi;           //!output histogram
-  TH2F                  *fHistScalevsScale2Emcal;      //!output histogram
-  TH2F                  *fHistScalevsScaleEmcal;       //!output histogram
-  TH2F                  *fHistScaleEmcalvsScale2Emcal; //!output histogram
+  TH2                   *fHistPtTPCvsCent;             //!output histogram
+  TH2                   *fHistPtEMCALvsCent;           //!output histogram
+  TH2                   *fHistEtvsCent;                //!output histogram
+  TH2                   *fHistScalevsCent;             //!output histogram
+  TH2                   *fHistDeltaScalevsCent;        //!output histogram
+  TH2                   *fHistScaleEmcalvsCent;        //!output histogram
+  TH2                   *fHistScale2EmcalvsCent;       //!output histogram
+  TH2                   *fHistDeltaScale2EmcalvsCent;  //!output histogram
+  TH2                   *fHistChScalevsCent;           //!output histogram
+  TH2                   *fHistChScale2EmcalvsCent;     //!output histogram
+  TH2                   *fHistPtTPCvsNtrack;           //!output histogram
+  TH2                   *fHistPtEMCALvsNtrack;         //!output histogram
+  TH2                   *fHistEtvsNtrack;              //!output histogram
+  TH2                   *fHistScalevsNtrack;           //!output histogram
+  TH2                   *fHistDeltaScalevsNtrack;      //!output histogram
+  TH2                   *fHistScaleEmcalvsNtrack;      //!output histogram
+  TH2                   *fHistScale2EmcalvsNtrack;     //!output histogram
+  TH2                   *fHistChScalevsNtrack;         //!output histogram
+  TH2                   *fHistChScale2EmcalvsNtrack;   //!output histogram
+  TH2                   *fHistTrackPtvsCent;           //!output histogram
+  TH2                   *fHistClusterPtvsCent;         //!output histogram
+  TH2                   *fHistTrackEtaPhi;             //!output histogram
+  TH2                   *fHistClusterEtaPhi;           //!output histogram
+  TH2                   *fHistScalevsScale2Emcal;      //!output histogram
+  TH2                   *fHistScalevsScaleEmcal;       //!output histogram
+  TH2                   *fHistScaleEmcalvsScale2Emcal; //!output histogram
 
   AliAnalysisTaskScale(const AliAnalysisTaskScale&); // not implemented
   AliAnalysisTaskScale& operator=(const AliAnalysisTaskScale&); // not implemented
index 44b9adfb2e7fe295c27fed4380fddbbcf339ad8b..8a7e727e841d77dd5f7f9da2dda324437b02618e 100644 (file)
@@ -82,9 +82,9 @@ AliAnalysisTaskEmcalJetHadEPpid::AliAnalysisTaskEmcalJetHadEPpid() :
   fLocalRhoVal(0),
   fTracksName(""), fJetsName(""),
   event(0),
-  isPItpc(0), isKtpc(0), isPtpc(0), nPIDtpc(0) ,   // pid TPC
-  isPIits(0), isKits(0), isPits(0), nPIDits(0) ,  // pid ITS
-  isPItof(0), isKtof(0), isPtof(0), nPIDtof(0) ,  // pid TOF
+  isPItpc(0), isKtpc(0), isPtpc(0), // pid TPC
+  isPIits(0), isKits(0), isPits(0), // pid ITS
+  isPItof(0), isKtof(0), isPtof(0), // pid TOF
   fPoolMgr(0x0),
   fPIDResponse(0x0), fTPCResponse(),
   fESD(0), fAOD(0),
@@ -183,9 +183,9 @@ AliAnalysisTaskEmcalJetHadEPpid::AliAnalysisTaskEmcalJetHadEPpid(const char *nam
   fLocalRhoVal(0),
   fTracksName(""), fJetsName(""),
   event(0),
-  isPItpc(0), isKtpc(0), isPtpc(0), nPIDtpc(0),   // pid TPC
-  isPIits(0), isKits(0), isPits(0), nPIDits(0),   // pid ITS
-  isPItof(0), isKtof(0), isPtof(0), nPIDtof(0),   // pid TOF
+  isPItpc(0), isKtpc(0), isPtpc(0), // pid TPC
+  isPIits(0), isKits(0), isPits(0), // pid ITS
+  isPItof(0), isKtof(0), isPtof(0), // pid TOF
   fPoolMgr(0x0),
   fPIDResponse(0x0), fTPCResponse(),
   fESD(0), fAOD(0),
@@ -546,7 +546,7 @@ void AliAnalysisTaskEmcalJetHadEPpid::UserCreateOutputObjects()
   UInt_t bitcoded = 0; // bit coded, see GetDimParams() below
   UInt_t cifras = 0;
   UInt_t bitcode = 0;  // bit coded, see GetDimParamsPID() below
-  bitcoded = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9;
+  bitcoded = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7; // | 1<<8 | 1<<9;
   if(makeextraCORRhistos) fhnJH = NewTHnSparseF("fhnJH", bitcoded);
   if(makeextraCORRhistos) fOutput->Add(fhnJH);
 
@@ -581,7 +581,7 @@ void AliAnalysisTaskEmcalJetHadEPpid::UserCreateOutputObjects()
 
   // set up event mixing sparse
   if(fDoEventMixing){
-    cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<9;
+    cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7; // | 1<<8 | 1<<9;
     fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", cifras);
     fhnMixedEvents->Sumw2();  
     fOutput->Add(fhnMixedEvents);
@@ -850,14 +850,16 @@ Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
      // initialize and calculate various parameters: pt, eta, phi, rho, etc...
      Double_t jetphi = jet->Phi();      // phi of jet
      NJETAcc++;   // # accepted jets
-     fLocalRhoVal = fLocalRho->GetLocalVal(jetphi, GetJetRadius(0)); //fmyJetRadius);   // get local rho value
+     fLocalRhoVal = fLocalRho->GetLocalVal(jetphi, fJetRad); //GetJetRadius(0)); // get local rho value
      Double_t jeteta = jet->Eta();     // ETA of jet
 //     Double_t jetptraw = jet->Pt();    // raw pT of jet
-     Double_t jetPt, jetPtGlobal, jetPtLocal = -500;            // initialize corr jet pt
+     Double_t jetPt = -500; 
+     Double_t jetPtGlobal = -500; 
+     Double_t jetPtLocal = -500;            // initialize corr jet pt
      jetPt = jet->Pt();
      jetPtGlobal = jet->Pt()-jet->Area()*fRhoVal;  // corrected pT of jet from rho value
      jetPtLocal = jet->Pt()-jet->Area()*fLocalRhoVal; // corrected pT of jet using Rho modulated for V2 and V3
-     Float_t dEP = -500;                    // initialize angle between jet and event plane
+     Double_t dEP = -500;                    // initialize angle between jet and event plane
      //Int_t ieta = -500;             // initialize jet eta bin
      //ieta = GetEtaBin(jeteta);         // bin of eta
      dEP = RelativeEPJET(jetphi,fEPV0); // angle betweeen jet and event plane
@@ -925,6 +927,8 @@ Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
           continue;
 
         // calculate and get some track parameters
+               Double_t trCharge = -99;
+        trCharge = track->Charge();
         Double_t tracketa=track->Eta();   // eta of track
         Double_t deta=tracketa-jeteta;    // dETA between track and jet
                Int_t ieta = -1;
@@ -941,7 +945,7 @@ Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
 //        iptjet=GetpTjetBin(jetPt);        // bin of jet pT
         iptjet=GetpTjetBin(jet->Pt());    // bin of jet pt
            if(iptjet<0) continue;                        // double check we don't have a negative array index
-        Double_t dR=sqrt(deta*deta+dphijh*dphijh);                   // difference of R between jet and hadron track
+        //Double_t dR=sqrt(deta*deta+dphijh*dphijh);                   // difference of R between jet and hadron track
 
         // fill some jet-hadron histo's
         if(makeextraCORRhistos) fHistJetH[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());  // fill jet-hadron dPHI--track pT distribution
@@ -954,7 +958,7 @@ Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
         // does our max track or cluster pass the bias?
         if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
           // set up and fill Jet-Hadron THnSparse
-          Double_t triggerEntries[9] = {fCent,jetPtLocal,track->Pt(),dR,deta,dphijh,0,leadjet,zVtx};
+          Double_t triggerEntries[10] = {fCent, jet->Pt(), track->Pt(), deta, dphijh, dEP, zVtx, trCharge, 0, 0};
           if(makeextraCORRhistos) fhnJH->Fill(triggerEntries);    // fill Sparse Histo with trigger entries
           
           // fill histo's
@@ -986,12 +990,17 @@ Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
     }
 
     // some variables for PID
-    Double_t eta, pt, dEdx, ITSsig, TOFsig, charge = -99.;
+    Double_t eta = -999; 
+    Double_t pt = -999; 
+    Double_t dEdx = -999;
+    Double_t ITSsig = -999;
+    Double_t TOFsig = -999;
+    Double_t charge = -999;
 
     // nSigma of particles in TPC, TOF, and ITS
-    Double_t nSigmaPion_TPC, nSigmaProton_TPC, nSigmaKaon_TPC = -99.;
-    Double_t nSigmaPion_TOF, nSigmaProton_TOF, nSigmaKaon_TOF = -99.;
-    Double_t nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS = -99.;
+    Double_t nSigmaPion_TPC, nSigmaProton_TPC, nSigmaKaon_TPC;
+    Double_t nSigmaPion_TOF, nSigmaProton_TOF, nSigmaKaon_TOF;
+    Double_t nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS;
 
     if(doPID){
       // get parameters of track
@@ -1058,8 +1067,10 @@ Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
 //    if (makeQAhistos) fHistTOFsignal->Fill(pt, TOFsig);
 
       // Tests to PID pions, kaons, and protons,          (default is undentified tracks)
-      //Double_t nPIDtpc, nPIDits, nPIDtof = 0;
-      Double_t nPID = -99;
+      Double_t nPIDtpc = 0;
+      Double_t nPIDits = 0; 
+      Double_t nPIDtof = 0;
+      Double_t nPID = -99;
 
       // check track has pT < 0.900 GeV  - use TPC pid
       if (pt<0.900 && dEdx>0) {
@@ -1262,14 +1273,14 @@ Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
 
                   Double_t DEta = part->Eta()-jet->Eta();                // difference in eta
                   Double_t DPhi = RelativePhi(jet->Phi(),part->Phi());   // difference in phi
-                  Float_t dEP = RelativeEPJET(jet->Phi(),fEPV0);            // difference between jet and EP
+                  Double_t dEP = RelativeEPJET(jet->Phi(),fEPV0);           // difference between jet and EP
                          Double_t mixcharge = part->Charge();
 
                   //Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta);      // difference in R
 //T                  if(DPhi<-0.5*TMath::Pi()) DPhi+=2.*TMath::Pi();
 //T                  if(DPhi>3./2.*TMath::Pi()) DPhi-=2.*TMath::Pi();
                            
-                  Double_t triggerEntries[10] = {fCent,jet->Pt(),part->Pt(),DEta,DPhi,dEP,zVtx, mixcharge,0,leadjet}; //array for ME sparse
+                  Double_t triggerEntries[10] = {fCent,jet->Pt(),part->Pt(),DEta,DPhi,dEP,zVtx, mixcharge, leadjet, 0}; //array for ME sparse
                   fhnMixedEvents->Fill(triggerEntries,1./nMix);   // fill Sparse histo of mixed events
                   fHistMEphieta->Fill(DPhi,DEta, 1./nMix);
 
@@ -1319,7 +1330,7 @@ Int_t AliAnalysisTaskEmcalJetHadEPpid::GetCentBin(Double_t cent) const
 }
 
 //________________________________________________________________________
-Float_t AliAnalysisTaskEmcalJetHadEPpid::RelativePhi(Double_t mphi,Double_t vphi) const
+Double_t AliAnalysisTaskEmcalJetHadEPpid::RelativePhi(Double_t mphi,Double_t vphi) const
 { // function to calculate relative PHI
   double dphi = mphi-vphi;
 
@@ -1337,7 +1348,7 @@ Float_t AliAnalysisTaskEmcalJetHadEPpid::RelativePhi(Double_t mphi,Double_t vphi
 
 
 //_________________________________________________________________________
-Float_t AliAnalysisTaskEmcalJetHadEPpid:: RelativeEPJET(Double_t jetAng, Double_t EPAng) const
+Double_t AliAnalysisTaskEmcalJetHadEPpid:: RelativeEPJET(Double_t jetAng, Double_t EPAng) const
 { // function to calculate angle between jet and EP in the 1st quadrant (0,Pi/2)
   Double_t dphi = (EPAng - jetAng);
   
@@ -1481,17 +1492,17 @@ void AliAnalysisTaskEmcalJetHadEPpid::GetDimParams(Int_t iEntry, TString &label,
       break;
 
    case 1:
-      label = "Corrected Jet p_{T}";
-      nbins = 256;
-      xmin = -50.;
-      xmax = 206.;
+      label = "Jet p_{T}";
+      nbins = 288;
+      xmin = 0.;
+      xmax = 288.;
       break;
 
    case 2:
       label = "Track p_{T}";
-      nbins = 100;
+      nbins = 144;
       xmin = 0.;
-      xmax = 100.;
+      xmax = 144.;
       break;
 
     case 3:
@@ -1524,24 +1535,25 @@ void AliAnalysisTaskEmcalJetHadEPpid::GetDimParams(Int_t iEntry, TString &label,
 
   case 7:
       label = "track charge";
-      nbins =3;
+      nbins = 3;
       xmin = -1.5;
       xmax = 1.5;
       break;
 
-  case 8: // need to update
-      label = "leading track";
-      nbins = 10;
-      xmin = 0;
-      xmax = 50;
-      break;
-
-  case 9:  // need to update
+  case 8:  // need to update
       label = "leading jet";
       nbins = 3;
       xmin = -0.5;
       xmax = 2.5;
       break;
+
+  case 9: // need to update
+      label = "leading track";
+      nbins = 10;
+      xmin = 0;
+      xmax = 50;
+      break; 
+
    } // end of switch
 } // end of getting dim-params
 
@@ -1794,23 +1806,23 @@ void AliAnalysisTaskEmcalJetHadEPpid::GetDimParamsPID(Int_t iEntry, TString &lab
 
    case 20:
       label = "TPC PID determination";
-      nbins = 4;
+      nbins = 5;
       xmin = 0.;
-      xmax = 4.;
+      xmax = 5.;
       break;
 
    case 21:
       label = "ITS PID determination";
-      nbins = 4;
+      nbins = 5;
       xmin = 0.;
-      xmax = 4.;
+      xmax = 5.;
       break;
 
    case 22:
       label = "TOF PID determination";
-      nbins = 4;
+      nbins = 5;
       xmin = 0.;
-      xmax = 4.;
+      xmax = 5.;
       break;
 
    } // end of switch
index 8675c3243d582a168b2e1a45407dad8da33cd822..5f6d1f4bdfae4cc2e69c3e7707887971da17822f 100644 (file)
@@ -112,8 +112,8 @@ protected:
   virtual void           Terminate(Option_t *); 
   virtual Int_t          AcceptMyJet(AliEmcalJet *jet);   // applies basic jet tests/cuts before accepting
   virtual Int_t          GetCentBin(Double_t cent) const; // centrality bin of event
-  Float_t                RelativePhi(Double_t mphi,Double_t vphi) const; // relative jet track angle
-  Float_t                RelativeEPJET(Double_t jetAng, Double_t EPAng) const;  // relative jet event plane angle
+  Double_t                RelativePhi(Double_t mphi,Double_t vphi) const; // relative jet track angle
+  Double_t                RelativeEPJET(Double_t jetAng, Double_t EPAng) const;  // relative jet event plane angle
   virtual Int_t          GetEtaBin(Double_t eta) const;      // eta bins
   virtual Int_t          GetpTjetBin(Double_t pt) const;     // jet pt bins
   virtual Int_t          GetpTtrackBin(Double_t pt) const;   // track pt bins
@@ -170,13 +170,8 @@ protected:
 
   // boolean functions for PID
   Bool_t                isPItpc, isKtpc, isPtpc;
-  Double_t                      nPIDtpc;
-
   Bool_t                isPIits, isKits, isPits;
-  Double_t                      nPIDits;  
-
   Bool_t                isPItof, isKtof, isPtof;
-  Double_t                      nPIDtof;
 
   // event pool
   TObjArray*               CloneAndReduceTrackList(TObjArray* tracks);
index ce83d367f74a119b769ccd8586e1ef51081ecb6e..cc7d2930f95c736e08bef6555dac1bf6f59ad6f8 100644 (file)
@@ -113,10 +113,10 @@ Bool_t AliAnalysisTaskEmcalJetPatchTriggerQA::Run()
 //  if (!fJets)  return kTRUE;
 
   // get centrality bin
-  Int_t centbin = GetCentBin(fCent);
-  //for pp analyses we will just use the first centrality bin
-  if (centbin == -1)
-    centbin = 0;
+//   Int_t centbin = GetCentBin(fCent);
+//   //for pp analyses we will just use the first centrality bin
+//   if (centbin == -1)
+//     centbin = 0;
 
   // get event plane info from event
   AliEventplane *aliEP = InputEvent()->GetEventplane();
@@ -184,7 +184,7 @@ Bool_t AliAnalysisTaskEmcalJetPatchTriggerQA::Run()
 
      // need to update entries soon
      //Double_t Entries[10] = {centbin, jetPtLocal, jetPtGlobal, jetPtraw, jet->Eta(), jet->Phi(), dEP, fLocalRhoVal, fRhoVal, fEPV0};
-     Double_t Entries[9] = {centbin, jetPtLocal, jetPtGlobal, jetPtraw, jet->Phi(), dEP, fLocalRhoVal, fRhoVal, fEPV0};
+     Double_t Entries[9] = {fCent, jetPtLocal, jetPtGlobal, jetPtraw, jet->Phi(), dEP, fLocalRhoVal, fRhoVal, fEPV0};
      fhnJetTriggerQA->Fill(Entries);        // fill Sparse Histo with entries
 
      // in plane and out of plane histo's
index f517182e7c32ac7238676a2767b39ffae17e7bcb..f9ab152c588281d3051bbea15e6d599f25933e35 100644 (file)
@@ -78,7 +78,7 @@ AliAnalysisTaskEmcalJetSpectra::AliAnalysisTaskEmcalJetSpectra() :
     fHistCorJetPtEPcentGL[i]    = 0;
 
   }
-
+  
   SetMakeGeneralHistograms(kTRUE);
     
 }
@@ -126,7 +126,7 @@ AliAnalysisTaskEmcalJetSpectra::AliAnalysisTaskEmcalJetSpectra(const char *name)
     fHistCorJetPtEPcentGL[i]    = 0;
 
    }
-  
    SetMakeGeneralHistograms(kTRUE);
  }
 
@@ -281,8 +281,7 @@ void AliAnalysisTaskEmcalJetSpectra::UserCreateOutputObjects()
       fOutput->Add(fHistCorJetPtEPcentGL[i]);
 
   }
-
-  
   fOutput->Add(fHistRhovsCent);
   fOutput->Add(fHistNjetvsCent);
 
@@ -366,7 +365,6 @@ Bool_t AliAnalysisTaskEmcalJetSpectra::Run()
         fLocalRho = GetLocalRhoFromEvent(fLocalRhoName);
     }
 
-
   fHistEP0[centbin]->Fill(fEPV0);
   fHistEP0A[centbin]->Fill(fEPV0A);
   fHistEP0C[centbin]->Fill(fEPV0C);
@@ -402,29 +400,34 @@ Bool_t AliAnalysisTaskEmcalJetSpectra::Run()
      // get local rho value
      fLocalRhoVal = fLocalRho->GetLocalVal(jet->Phi(), 0.2);
      Double_t jetPtLocal = jet->Pt() - jet->Area()*fLocalRhoVal;
+     Double_t jetPtGlobal = jet->Pt() - jet->Area()*fRhoVal;
 
      // calculate relative angle between jet and event plane       
      Float_t dEP = -500;              // initialize angle between jet and event plane
      dEP = RelativeEPJET(jet->Phi(),fEPV0);
 
      fHistCorJetPtfromLocalRho[centbin]->Fill(jetPtLocal);
-     fHistCorJetPtfromGlobalRho[centbin]->Fill(jetPt);
+     fHistCorJetPtfromGlobalRho[centbin]->Fill(jetPtGlobal);
 
      fHistRhodEPcentLOC[centbin]->Fill(fLocalRhoVal,dEP);
+     fHistRhodEPcentGL[centbin]->Fill(fRhoVal,dEP);
      fHistRhovsdEPLOC->Fill(fLocalRhoVal,dEP);
-     fHistJetPtvsdEPLOC->Fill(jetPtLocal,dEP);
+     fHistRhovsdEPGL->Fill(fRhoVal,dEP);
 
-     fHistRhoEPcentGL[centbin]->Fill(fRhoVal,fEPV0);
      fHistRhoEPcentLOC[centbin]->Fill(fLocalRhoVal,fEPV0);
+     fHistRhoEPcentGL[centbin]->Fill(fRhoVal,fEPV0);
+     fHistRhovsEPLOC->Fill(fLocalRhoVal,fEPV0);
+     fHistRhovsEPGL->Fill(fRhoVal,fEPV0);
 
-     fHistCorJetPtEPcentGL[centbin]->Fill(jetPt,fEPV0);
-     fHistCorJetPtEPcentLOC[centbin]->Fill(jetPt,fEPV0);
+     fHistCorJetPtdEPcentLOC[centbin]->Fill(jetPtLocal,dEP);
+     fHistCorJetPtdEPcentGL[centbin]->Fill(jetPt,dEP);
+     fHistJetPtvsdEPLOC->Fill(jetPtLocal,dEP);
+     fHistJetPtvsdEPGL->Fill(jetPt,dEP);
 
-     fHistRhovsEPGL->Fill(fRhoVal,fEPV0);
-     fHistRhovsEPLOC->Fill(fLocalRhoVal,fEPV0);
-     fHistJetPtvsEPGL->Fill(jetPt,fEPV0);
+     fHistCorJetPtEPcentLOC[centbin]->Fill(jetPtLocal,fEPV0);
+     fHistCorJetPtEPcentGL[centbin]->Fill(jetPt,fEPV0);
      fHistJetPtvsEPLOC->Fill(jetPtLocal,fEPV0);
+     fHistJetPtvsEPGL->Fill(jetPt,fEPV0);
 
      fHistCorJetPt->Fill(jetPtLocal);
      fHistCorJetPtGL->Fill(jetPt);
@@ -454,7 +457,6 @@ Bool_t AliAnalysisTaskEmcalJetSpectra::Run()
   return kTRUE;
 }      
 
-
 //_________________________________________________________________________
 Float_t AliAnalysisTaskEmcalJetSpectra:: RelativeEPJET(Double_t jetAng, Double_t EPAng) const
 { // function to calculate angle between jet and EP in the 1st quadrant (0,Pi/2)
index fab8f84487239d2167db128bf2a10b0ee1ec9bb7..b908215eadbe2a6d638777977ac5ef48cab25b49 100644 (file)
@@ -96,6 +96,7 @@ AliAnalysisTaskRhoVnModulation::AliAnalysisTaskRhoVnModulation() : AliAnalysisTa
         fHistJetPt[i] = 0;
         fHistJetEtaPhi[i] = 0;
         fHistJetPtArea[i] = 0;
+        fHistJetPtEta[i] = 0;
         fHistJetPtConstituents[i] = 0;
         fHistJetEtaRho[i] = 0;
         fHistJetPsi2Pt[i] = 0;
@@ -141,6 +142,7 @@ AliAnalysisTaskRhoVnModulation::AliAnalysisTaskRhoVnModulation(const char* name,
         fHistJetPt[i] = 0;
         fHistJetEtaPhi[i] = 0;
         fHistJetPtArea[i] = 0;
+        fHistJetPtEta[i] = 0;
         fHistJetPtConstituents[i] = 0;
         fHistJetEtaRho[i] = 0;
         fHistJetPsi2Pt[i] = 0;
@@ -408,6 +410,7 @@ void AliAnalysisTaskRhoVnModulation::UserCreateOutputObjects()
         fHistJetPt[i] =                BookTH1F("fHistJetPt", "p_{t, jet} [GeV/c]", 350, -100, 250, i);
         if(fFillQAHistograms)   fHistJetEtaPhi[i] =            BookTH2F("fHistJetEtaPhi", "#eta", "#phi", 100, -1, 1, 100, 0, TMath::TwoPi(), i);
         fHistJetPtArea[i] =            BookTH2F("fHistJetPtArea", "p_{t, jet} [GeV/c]", "Area", 175, -100, 250, 30, 0, 0.9, i);
+        fHistJetPtEta[i] =            BookTH2F("fHistJetPtEta", "p_{t, jet} [GeV/c]", "Eta", 175, -100, 250, 30, -0.9, 0.9, i);
         fHistJetPtConstituents[i] =    BookTH2F("fHistJetPtConstituents", "p_{t, jet} [GeV/c]", "Area", 350, -100, 250, 60, 0, 150, i);
         fHistJetEtaRho[i] =            BookTH2F("fHistJetEtaRho", "#eta", "#rho", 100, -1, 1, 100, 0, 300, i);
         // in plane and out of plane spectra
@@ -1328,6 +1331,11 @@ Bool_t AliAnalysisTaskRhoVnModulation::CorrectRho(Double_t psi2, Double_t psi3)
                     case kCombined : {
                         // to make a nice picture also plot the separate components (v2 and v3) of the fit
                         // only done for cobined fit where there are actually components to split ...
+                        TF1* v0(new TF1("dfit_kV2", "[0]", 0, TMath::TwoPi()));
+                        v0->SetParameter(0, didacticFit->GetParameter(0));        // normalization
+                        v0->SetLineColor(kMagenta);
+                        v0->SetLineStyle(7);
+                        didacticProfile->GetListOfFunctions()->Add(v0);
                         TF1* v2(new TF1("dfit_kV2", "[0]*([1]+[2]*[3]*TMath::Cos([2]*(x-[4])))", 0, TMath::TwoPi()));
                         v2->SetParameter(0, didacticFit->GetParameter(0));        // normalization
                         v2->SetParameter(3, didacticFit->GetParameter(3));        // v2
@@ -1343,12 +1351,14 @@ Bool_t AliAnalysisTaskRhoVnModulation::CorrectRho(Double_t psi2, Double_t psi3)
                         v3->FixParameter(2, 2.);        // constant
                         v3->FixParameter(4, didacticFit->GetParameter(6));        // psi3
                         v3->FixParameter(5, 3.);        // constant
-                        v3->SetLineColor(kYellow);
+                        v3->SetLineColor(kCyan);
                         didacticProfile->GetListOfFunctions()->Add(v3);
                     }
                     default : break;
                 }
                 didacticProfile->GetListOfFunctions()->Add(didacticFit);
+                didacticProfile->GetYaxis()->SetTitle("#frac{d #sum #it{p}_{T}}{d #varphi} [GeV/#it{c}]");
+                didacticProfile->GetXaxis()->SetTitle("#varphi");
                 fOutputListGood->Add(didacticProfile);
                 didacticCounterBest++;
                 TH2F* didacticSurface = BookTH2F(Form("surface_%s", didacticProfile->GetName()), "#phi", "#eta", 50, 0, TMath::TwoPi(), 50, -1, 1, -1, kFALSE);
@@ -1648,6 +1658,7 @@ void AliAnalysisTaskRhoVnModulation::FillJetHistograms(Double_t psi2, Double_t p
             fHistJetPt[fInCentralitySelection]->Fill(pt-area*rho);
             if(fFillQAHistograms) fHistJetEtaPhi[fInCentralitySelection]->Fill(eta, phi);
             fHistJetPtArea[fInCentralitySelection]->Fill(pt-area*rho, area);
+            fHistJetPtEta[fInCentralitySelection]->Fill(pt-area*rho, eta);
             fHistJetPsi2Pt[fInCentralitySelection]->Fill(PhaseShift(phi-psi2, 2.), pt-area*rho);
             fHistJetPsi3Pt[fInCentralitySelection]->Fill(PhaseShift(phi-psi3, 3.), pt-area*rho);
             fHistJetPtConstituents[fInCentralitySelection]->Fill(pt-area*rho, jet->Nch());
index ac50b604d2d5854364caa37948397fe436c96a89..fd104d85390c7e9a3499d74422f84163a7b9d8b3 100644 (file)
@@ -380,6 +380,7 @@ class AliAnalysisTaskRhoVnModulation : public AliAnalysisTaskEmcalJet {
         TH1F*                   fHistJetPt[10];                 //! pt of found jets (background subtracted)
         TH2F*                   fHistJetEtaPhi[10];             //! eta and phi correlation
         TH2F*                   fHistJetPtArea[10];             //! jet pt versus area
+        TH2F*                   fHistJetPtEta[10];              //! jet pt versus eta (temp control)
         TH2F*                   fHistJetPtConstituents[10];     //! jet pt versus number of constituents
         TH2F*                   fHistJetEtaRho[10];             //! jet eta versus jet rho
         // in plane, out of plane jet spectra
@@ -389,7 +390,7 @@ class AliAnalysisTaskRhoVnModulation : public AliAnalysisTaskEmcalJet {
         AliAnalysisTaskRhoVnModulation(const AliAnalysisTaskRhoVnModulation&);                  // not implemented
         AliAnalysisTaskRhoVnModulation& operator=(const AliAnalysisTaskRhoVnModulation&);       // not implemented
 
-        ClassDef(AliAnalysisTaskRhoVnModulation, 25);
+        ClassDef(AliAnalysisTaskRhoVnModulation, 26);
 };
 
 #endif
index efc65e13f9e1be1e61d0fa1f89d01bd24a9469e4..7180324b0ca5a6b621534a75849e201a34eca388 100644 (file)
@@ -26,7 +26,8 @@ AliAnalysisTaskEmcalJetHadEPpid* AddTaskEmcalJetHadEPpid(
    const Double_t constitCut  = 0.15,
    const Int_t MixingTracks   = 50000,
    TString cutType                       = "EMCAL",
-   Bool_t   Comments             = 0
+   Bool_t   Comments             = 0,
+   Int_t esdcuts                         = 10001006
 )
 {  
   
@@ -96,6 +97,12 @@ AliAnalysisTaskEmcalJetHadEPpid* AddTaskEmcalJetHadEPpid(
   correlationtask->SetJetPtCut(JetPtcut, 1);
   correlationtask->SetPercAreaCut(0.6, 1); 
 
+  // ===================================================================
+  // ESD track quality cuts
+  AliESDtrackCuts *esdTrackCuts = 0x0;
+  gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
+  esdTrackCuts = CreateTrackCutsPWGJE(esdcuts);
+
   //-------------------------------------------------------
   // Final settings, pass to manager and set the containers
   //-------------------------------------------------------
index 670e54a3034322557730f1367160f3a3ba65f156..09169b017b5987b8f20f67cf26dfdf5fc0afbb7b 100644 (file)
@@ -313,6 +313,15 @@ Bool_t AliAnalysisTaskFlavourJetCorrelations::Run()
    THnSparseF* hnspDstandalone=(THnSparseF*)fOutput->FindObject("hsDstandalone");
    THnSparseF* hsJet=(THnSparseF*)fOutput->FindObject("hsJet");
    
+   TH1F* hztracksinjet=(TH1F*)fOutput->FindObject("hztracksinjet");
+   TH1F* hDiffPtTrPtJzNok=(TH1F*)fOutput->FindObject("hDiffPtTrPtJzNok");
+   TH1F* hDiffPtTrPtJzok=(TH1F*)fOutput->FindObject("hDiffPtTrPtJzok");
+   TH1F* hDiffPzTrPtJzok=(TH1F*)fOutput->FindObject("hDiffPzTrPtJzok");
+   TH1F* hDiffPzTrPtJzNok=(TH1F*)fOutput->FindObject("hDiffPzTrPtJzNok");
+   TH1I* hNtrkjzNok=(TH1I*)fOutput->FindObject("hNtrkjzNok");
+   TH1F* hztracksinjetT=(TH1F*)fOutput->FindObject("hztracksinjetT");
+   
+   
    hstat->Fill(0);
    
    // fix for temporary bug in ESDfilter 
@@ -437,7 +446,11 @@ Bool_t AliAnalysisTaskFlavourJetCorrelations::Run()
    
    Int_t cntjet=0;
    //loop over jets and consider only the leading jet in the event
-   for (Int_t iJets = 0; iJets<njets; iJets++) {    
+   for (Int_t iJets = 0; iJets<njets; iJets++) {
+      fPmissing[0]=0;
+      fPmissing[1]=0;
+      fPmissing[2]=0;
+      
       //Printf("Jet N %d",iJets);
       AliEmcalJet* jet = (AliEmcalJet*)GetJetFromArray(iJets);
       //Printf("Corr task Accept Jet");
@@ -452,6 +465,7 @@ Bool_t AliAnalysisTaskFlavourJetCorrelations::Run()
       etaJet = jet->Eta();
       fPtJet = jet->Pt();
       Double_t origPtJet=fPtJet;
+      
       pointJ[0] = phiJet;
       pointJ[1] = etaJet;
       pointJ[2] = ptjet;
@@ -471,14 +485,38 @@ Bool_t AliAnalysisTaskFlavourJetCorrelations::Run()
       hPtJet  ->Fill(fPtJet);
       if(fJetOnlyMode) hsJet->Fill(pointJ,1);
       //loop on jet particles
-      Int_t ntrjet=  jet->GetNumberOfTracks();    
+      Int_t ntrjet=  jet->GetNumberOfTracks(); 
+      Double_t sumPtTracks=0,sumPzTracks=0;
+      Int_t zg1jtrk=0;
       for(Int_t itrk=0;itrk<ntrjet;itrk++){
         
         AliPicoTrack* jetTrk=(AliPicoTrack*)jet->TrackAt(itrk,fTrackArr);     
         hdeltaRJetTracks->Fill(DeltaR(jet,jetTrk));
-        
+        Double_t ztrackj=Z(jetTrk,jet);
+        hztracksinjet->Fill(ztrackj);
+        sumPtTracks+=jetTrk->Pt(); 
+        sumPzTracks+=jetTrk->Pz(); 
+        if(ztrackj>1){
+           zg1jtrk++;
+        }
+        
+        Double_t ztrackjTr=Z(jetTrk,jet,kTRUE);
+        hztracksinjetT->Fill(ztrackjTr);
+        
       }//end loop on jet tracks
       
+      hNtrkjzNok->Fill(zg1jtrk);
+      Double_t diffpt=origPtJet-sumPtTracks;
+      Double_t diffpz=jet->Pz()-sumPzTracks;
+      if(zg1jtrk>0){
+        hDiffPtTrPtJzNok->Fill(diffpt);
+        hDiffPzTrPtJzNok->Fill(diffpz);
+      
+      }else{
+        hDiffPtTrPtJzok->Fill(diffpt);
+        hDiffPzTrPtJzok->Fill(diffpz);
+      }
+      
       if(candidates==0){
         hstat->Fill(7);
         hPtJetPerEvNoD->Fill(fPtJet);
@@ -503,7 +541,10 @@ Bool_t AliAnalysisTaskFlavourJetCorrelations::Run()
            RecalculateMomentum(pjet,fPmissing);                            
            fPtJet=TMath::Sqrt(pjet[0]*pjet[0]+pjet[1]*pjet[1]);
            
+           
+           //debugging histograms
            Double_t pmissing=TMath::Sqrt(fPmissing[0]*fPmissing[0]+fPmissing[1]*fPmissing[1]+fPmissing[2]*fPmissing[2]);
+           for(Int_t k=0;k<3;k++) ((TH1F*)fOutput->FindObject(Form("hMissP%d",k)))->Fill(fPmissing[k]);
            
            ((TH1F*)fOutput->FindObject("hmissingp"))->Fill(pmissing);
            Double_t ptdiff=fPtJet-origPtJet;
@@ -622,7 +663,7 @@ Bool_t AliAnalysisTaskFlavourJetCorrelations::SetD0WidthForDStar(Int_t nptbins,F
 
 //_______________________________________________________________________________
 
-Double_t AliAnalysisTaskFlavourJetCorrelations::Z(AliVParticle* part,AliEmcalJet* jet) const{
+Double_t AliAnalysisTaskFlavourJetCorrelations::Z(AliVParticle* part,AliEmcalJet* jet, Bool_t transverse) const{
    if(!part || !jet){
       printf("Particle or jet do not exist!\n");
       return -99;
@@ -636,11 +677,28 @@ Double_t AliAnalysisTaskFlavourJetCorrelations::Z(AliVParticle* part,AliEmcalJet
    }
    
    RecalculateMomentum(pj, fPmissing);
+   if(transverse) return ZT(p,pj);
+   else
+   return Z(p,pj);
+}
+
+//_______________________________________________________________________________
+Double_t AliAnalysisTaskFlavourJetCorrelations::Z(Double_t* p, Double_t *pj) const{
+   
    Double_t pjet2=pj[0]*pj[0]+pj[1]*pj[1]+pj[2]*pj[2];
    Double_t z=(p[0]*pj[0]+p[1]*pj[1]+p[2]*pj[2])/(pjet2);
    return z;
 }
 
+
+//_______________________________________________________________________________
+Double_t AliAnalysisTaskFlavourJetCorrelations::ZT(Double_t* p, Double_t *pj) const{
+   
+   Double_t pjet2=pj[0]*pj[0]+pj[1]*pj[1];
+   Double_t z=(p[0]*pj[0]+p[1]*pj[1])/(pjet2);
+   return z;
+}
+
 //_______________________________________________________________________________
 
 void AliAnalysisTaskFlavourJetCorrelations::RecalculateMomentum(Double_t* pj, const Double_t* pmissing) const {
@@ -742,34 +800,70 @@ Bool_t  AliAnalysisTaskFlavourJetCorrelations::DefineHistoForAnalysis(){
    }
 
    if(!fJetOnlyMode){
-   TH1I* hControlDInJ=new TH1I("hControlDInJ","Checks D in Jet",8, -0.5,7.5);
-   hControlDInJ->GetXaxis()->SetBinLabel(1,"DR In,1 daugh out");
-   hControlDInJ->GetXaxis()->SetBinLabel(2,"DR In,2 daugh out");
-   hControlDInJ->GetXaxis()->SetBinLabel(3,"DR In,3 daugh out");
-   hControlDInJ->GetXaxis()->SetBinLabel(4,"Tot tracks non matched");
-   hControlDInJ->GetXaxis()->SetBinLabel(5,"D0 daug missing");
-   hControlDInJ->GetXaxis()->SetBinLabel(6,"soft pi missing");
-   hControlDInJ->GetXaxis()->SetBinLabel(7,"IDprong diff GetDau");
-   hControlDInJ->GetXaxis()->SetBinLabel(8,"still z>1 (cand)");
-   
-   hControlDInJ->SetNdivisions(1);
-   hControlDInJ->GetXaxis()->SetLabelSize(0.05);
-   fOutput->Add(hControlDInJ);
-   
-   TH1F *hmissingp=new TH1F("hmissingp", "Distribution of missing momentum (modulo)", 50, 0.,30.);
-   fOutput->Add(hmissingp);
-   TH1F *hDeltaPtJet=new TH1F("hDeltaPtJet", "Difference between the jet pt before and after correction", 50, 0.,30.);
-   fOutput->Add(hDeltaPtJet);
-   TH1F *hRelDeltaPtJet=new TH1F("hRelDeltaPtJet", "Difference between the jet pt before and after correction/ original pt", 200, 0.,2.);
-   fOutput->Add(hRelDeltaPtJet);
-   
-   TH1I* hIDddaugh=new TH1I("hIDddaugh", "ID of daughters", 2001,-1000,1000);
-   fOutput->Add(hIDddaugh);
-   TH1I* hIDddaughOut=new TH1I("hIDddaughOut", "ID of daughters not found in jet", 2001,-1000,1000);
-   fOutput->Add(hIDddaughOut);
-   TH1I* hIDjetTracks=new TH1I("hIDjetTracks", "ID of jet tracks", 2001,-1000,1000);
-   fOutput->Add(hIDjetTracks);
-
+      
+      //debugging histograms
+      TH1I* hControlDInJ=new TH1I("hControlDInJ","Checks D in Jet",8, -0.5,7.5);
+      hControlDInJ->GetXaxis()->SetBinLabel(1,"DR In,1 daugh out");
+      hControlDInJ->GetXaxis()->SetBinLabel(2,"DR In,2 daugh out");
+      hControlDInJ->GetXaxis()->SetBinLabel(3,"DR In,3 daugh out");
+      hControlDInJ->GetXaxis()->SetBinLabel(4,"Tot tracks non matched");
+      hControlDInJ->GetXaxis()->SetBinLabel(5,"D0 daug missing");
+      hControlDInJ->GetXaxis()->SetBinLabel(6,"soft pi missing");
+      hControlDInJ->GetXaxis()->SetBinLabel(7,"IDprong diff GetDau");
+      hControlDInJ->GetXaxis()->SetBinLabel(8,"still z>1 (cand)");
+      
+      hControlDInJ->SetNdivisions(1);
+      hControlDInJ->GetXaxis()->SetLabelSize(0.05);
+      fOutput->Add(hControlDInJ);
+      
+      TH1F *hmissingp=new TH1F("hmissingp", "Distribution of missing momentum (modulo);|p_{missing}|", 200, 0.,20.);
+      fOutput->Add(hmissingp);
+      
+      for(Int_t k=0;k<3;k++) {
+        TH1F *hMissPi=new TH1F(Form("hMissP%d",k), Form("Missing p component {%d};p_{%d}",k,k), 400, -10.,10.);
+        fOutput->Add(hMissPi);
+      }
+      TH1F *hDeltaPtJet=new TH1F("hDeltaPtJet", "Difference between the jet pt before and after correction;p_{T}^{jet,recalc}-p_{T}^{jet,orig}", 200, 0.,20.);
+      
+      fOutput->Add(hDeltaPtJet);
+      TH1F *hRelDeltaPtJet=new TH1F("hRelDeltaPtJet", "Difference between the jet pt before and after correction/ original pt;(p_{T}^{jet,recalc}-p_{T}^{jet,orig})/p_{T}^{jet,orig}", 200, 0.,1.);
+      fOutput->Add(hRelDeltaPtJet);
+      
+      TH1F* hzDinjet=new TH1F("hzDinjet","Z of candidates with daughters in jet;z",nbinsz,zlims[0],zlims[1]);
+      fOutput->Add(hzDinjet);
+      //frag func of tracks in the jet
+      TH1F* hztracksinjet=new TH1F("hztracksinjet","Z of tracks in jet;z",nbinsz,zlims[0],zlims[1]);
+      fOutput->Add(hztracksinjet);
+      
+      //check jet and tracks
+      TH1F* hDiffPtTrPtJzok=new TH1F("hDiffPtTrPtJzok","Sum p_{T}^{trks} - p_{T}^{jet}, for z<1;(#Sigma p_{T}^{trks}) - p_{T}^{jet}", 100,-0.2,0.2);
+      fOutput->Add(hDiffPtTrPtJzok);
+      TH1F* hDiffPtTrPtJzNok=new TH1F("hDiffPtTrPtJzNok","Sum p_{T}^{trks} - p_{T}^{jet}, for z>1;(#Sigma p_{T}^{trks}) - p_{T}^{jet}", 100,-0.2,0.2);
+      fOutput->Add(hDiffPtTrPtJzNok);
+      TH1F* hDiffPzTrPtJzok=new TH1F("hDiffPzTrPtJzok","Sum p_{z}^{trks} - p_{z}^{jet}, for z<1;(#Sigma p_{z}^{trks}) - p_{z}^{jet}", 100,-0.2,0.2);
+      fOutput->Add(hDiffPzTrPtJzok);
+      TH1F* hDiffPzTrPtJzNok=new TH1F("hDiffPzTrPtJzNok","Sum p_{z}^{trks} - p_{z}^{jet}, for z>1;(#Sigma p_{z}^{trks}) - p_{z}^{jet}", 100,-0.2,0.2);
+      fOutput->Add(hDiffPzTrPtJzNok);
+      TH1I* hNtrkjzNok=new TH1I("hNtrkjzNok", "Number of tracks in a jet with z>1;N^{tracks} (z>1)",5,0,5);
+      fOutput->Add(hNtrkjzNok);
+      
+      //calculate frag func with pt (simply ptD(or track)\cdot pt jet /ptjet^2)
+      TH1F* hzDT=new TH1F("hzDT", "Z of D in jet in transverse components;(p_{T}^{D} dot p_{T}^{jet})/p_{T}^{jet}^{2} ",nbinsz,zlims[0],zlims[1]);
+      fOutput->Add(hzDT);
+      TH1F* hztracksinjetT=new TH1F("hztracksinjetT", "Z of jet tracks in transverse components;(p_{T}^{trks} dot p_{T}^{jet})/p_{T}^{jet}^{2}",nbinsz,zlims[0],zlims[1]);
+      fOutput->Add(hztracksinjetT);
+      
+      TH1I* hIDddaugh=new TH1I("hIDddaugh", "ID of daughters;ID", 2001,-1000,1000);
+      fOutput->Add(hIDddaugh);
+      TH1I* hIDddaughOut=new TH1I("hIDddaughOut", "ID of daughters not found in jet;ID", 2001,-1000,1000);
+      fOutput->Add(hIDddaughOut);
+      TH1I* hIDjetTracks=new TH1I("hIDjetTracks", "ID of jet tracks;ID", 2001,-1000,1000);
+      fOutput->Add(hIDjetTracks);
+      
+      TH1F* hDRdaughOut=new TH1F("hDRdaughOut", "#Delta R of daughters not belonging to the jet tracks (D in jet);#Delta R",200, 0.,2.);
+      fOutput->Add(hDRdaughOut);
+      
+      
       if(fCandidateType==kDstartoKpipi) 
       {
         
@@ -874,7 +968,22 @@ void AliAnalysisTaskFlavourJetCorrelations::FillHistogramsRecoJetCorr(AliVPartic
    if(deltaphi<=-(TMath::Pi())/2.) deltaphi = deltaphi+2.*(TMath::Pi());
    if(deltaphi>(3.*(TMath::Pi()))/2.) deltaphi = deltaphi-2.*(TMath::Pi());
    Double_t z=Z(candidate,jet);
-   if(z>1) ((TH1I*)fOutput->FindObject("hControlDInJ"))->Fill(7);
+   /*
+   if(z>1) {
+      ((TH1I*)fOutput->FindObject("hControlDInJ"))->Fill(7);
+      Double_t pmissing=TMath::Sqrt(fPmissing[0]*fPmissing[0]+fPmissing[1]*fPmissing[1]+fPmissing[2]*fPmissing[2]);
+      
+      for(Int_t k=0;k<3;k++) ((TH1F*)fOutput->FindObject(Form("hMissP%d",k)))->Fill(fPmissing[k]);
+      
+      ((TH1F*)fOutput->FindObject("hmissingp"))->Fill(pmissing);
+      Double_t ptdiff=fPtJet-jet->Pt();
+      ((TH1F*)fOutput->FindObject("hDeltaPtJet"))->Fill(ptdiff);
+      ((TH1F*)fOutput->FindObject("hRelDeltaPtJet"))->Fill(ptdiff/jet->Pt());
+
+      
+   }
+   */
+   if(fIsDInJet)((TH1F*)fOutput->FindObject("hzDT"))->Fill(Z(candidate,jet,kTRUE));
    
    TH1F* hDeltaRD=(TH1F*)fOutput->FindObject("hDeltaRD");
    hDeltaRD->Fill(deltaR); 
@@ -1221,6 +1330,11 @@ Bool_t AliAnalysisTaskFlavourJetCorrelations::IsDInJet(AliEmcalJet *thejet, AliA
    //type 2 (default) : DeltaR < jet radius and check for all daughters among jet tracks, if not present, correct the ptjet
     
    TH1I* hControlDInJ=(TH1I*)fOutput->FindObject("hControlDInJ");
+   TH1F* hDRdaughOut=(TH1F*)fOutput->FindObject("hDRdaughOut");
+   
+   fPmissing[0]=0; 
+   fPmissing[1]=0;
+   fPmissing[2]=0;
    
    Bool_t testDeltaR=kFALSE;
    if(DeltaR(thejet,charm)<fJetRadius) testDeltaR=kTRUE;
@@ -1228,15 +1342,17 @@ Bool_t AliAnalysisTaskFlavourJetCorrelations::IsDInJet(AliEmcalJet *thejet, AliA
    Int_t* daughOutOfJet;
    AliAODTrack** charmDaugh;
    Bool_t testDaugh=AreDaughtersInJet(thejet, charm, daughOutOfJet,charmDaugh,fillH);
+   if(testDaugh && testDeltaR) {
+      //Z of candidates with daughters in the jet
+      ((TH1F*)fOutput->FindObject("hzDinjet"))->Fill(Z(charm,thejet));
+      
+   }
    if(!testDaugh && testDeltaR && fTypeDInJet==2){
       
       Int_t ndaugh=3;
       if(fCandidateType==kD0toKpi) ndaugh=2;
       Int_t nOut=ndaugh;
       
-      fPmissing[0]=0; 
-      fPmissing[1]=0;
-      fPmissing[2]=0;
       for(Int_t id=0;id<ndaugh;id++){
         if(daughOutOfJet[id]!=0){ //non-matched daughter
            //get track and its momentum
@@ -1245,6 +1361,7 @@ Bool_t AliAnalysisTaskFlavourJetCorrelations::IsDInJet(AliEmcalJet *thejet, AliA
               hControlDInJ->Fill(3);
               if(id<2) hControlDInJ->Fill(4);
               if(id==2)hControlDInJ->Fill(5);
+              hDRdaughOut->Fill(DeltaR(thejet, charmDaugh[id]));
            }
            fPmissing[0]+=charmDaugh[id]->Px(); 
            fPmissing[1]+=charmDaugh[id]->Py();
@@ -1264,10 +1381,17 @@ Bool_t AliAnalysisTaskFlavourJetCorrelations::IsDInJet(AliEmcalJet *thejet, AliA
    switch(fTypeDInJet){
    case 0:
       result=testDeltaR;
+      break;
    case 1:
       result=testDeltaR && testDaugh;
+      break;
    case 2:
       result=testDeltaR && testDaugh;
+      break;
+   default:
+      AliInfo("Selection type not specified, use 1");
+      result=testDeltaR && testDaugh;
+      break;
    }
  return result;
 }
index 200f5e54ec2d51a2544bcf2ea4d2c4ad6d45eb08..c7877a8ca2447fe4d03e36bef9561a6141359b23 100644 (file)
@@ -101,7 +101,9 @@ private:
    AliAnalysisTaskFlavourJetCorrelations(const AliAnalysisTaskFlavourJetCorrelations &source);
    AliAnalysisTaskFlavourJetCorrelations& operator=(const AliAnalysisTaskFlavourJetCorrelations& source); 
    
-   Double_t Z(AliVParticle* part,AliEmcalJet* jet) const;
+   Double_t Z(AliVParticle* part,AliEmcalJet* jet, Bool_t transverse=kFALSE) const;
+   Double_t Z(Double_t* p, Double_t *pj) const;
+   Double_t ZT(Double_t* p, Double_t *pj) const;
    Float_t DeltaR(AliVParticle *p1, AliVParticle *p2) const;
    Bool_t AreDaughtersInJet(AliEmcalJet *thejet, AliAODRecoDecayHF* charm, Int_t*& daughOutOfJet, AliAODTrack**& dtrks, Bool_t fillH);
    Bool_t IsDInJet(AliEmcalJet *thejet, AliAODRecoDecayHF* charm, Bool_t fillH=kFALSE);
index 441b12605a104859a44a0a453deb8bd51bd1b40a..2ce323adb99dbf56ccc6134219a51d98c4cd8f4f 100644 (file)
 #pragma link C++ class AliAnalysisTaskJetsTriggerTRD+;
 #pragma link C++ class AliAnalysisTaskJetProtonCorr+;
 #pragma link C++ class AliAnalysisTaskJetProtonCorr::AliHistCorr+;
+#pragma link C++ class AliAnalysisTaskJetProtonCorr::AliPartCorr+;
 #pragma link C++ class AliAnalysisTaskIDFFTCF+;
 #pragma link C++ class AliAnalysisTaskIDFFTCF::AliFragFuncHistos+;
 #pragma link C++ class AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos+;
 #pragma link C++ class AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos+;
 #pragma link C++ class AliIDFFUtils+;
+#pragma link C++ class AliAnalysisTaskPPJetSpectra+;
 
 #ifdef HAVE_FASTJET
 #pragma link C++ class AliAnalysisTaskCheckSingleTrackJetRejection+;
index 23d4d474527496e3632682ec7cc473ad2b927c72..1bf524e1d925b7558e2a32393679e2cdb8b3bed7 100644 (file)
@@ -85,6 +85,7 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem()
 
    ,fAnalysisMC(0)
    ,fDeltaVertexZ(0)
+   ,fCutjetEta(0)
    ,fCuttrackNegNcls(0)
    ,fCuttrackPosNcls(0)
    ,fCutPostrackRap(0)
@@ -228,11 +229,8 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem()
    ,fh1DcaNegToPrimVertex(0)    
    ,fh2ArmenterosBeforeCuts(0)
    ,fh2ArmenterosAfterCuts(0)
-   ,fh2BB3SigProton(0)
    ,fh2BBLaPos(0)
    ,fh2BBLaNeg(0)
-   ,fh1CrossedRowsOverFindableNeg(0)
-   ,fh1CrossedRowsOverFindablePos(0)
    ,fh1PosDaughterCharge(0)
    ,fh1NegDaughterCharge(0)
    ,fh1PtMCK0s(0)
@@ -244,7 +242,7 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem()
    ,fh3InvMassEtaTrackPtK0s(0)
    ,fh3InvMassEtaTrackPtLa(0)
    ,fh3InvMassEtaTrackPtALa(0)
-   ,fh1noAssociatedK0s(0)
    ,fh1TrackMultCone(0)
    ,fh2TrackMultCone(0) 
    ,fh2MCgenK0Cone(0)
@@ -270,6 +268,8 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem()
    ,fh3IMK0MedianCone(0)
    ,fh3IMLaMedianCone(0)
    ,fh3IMALaMedianCone(0)
+   ,fh1MedianEta(0)
+   ,fh1JetPtMedian(0)
    ,fh1MCMultiplicityPrimary(0)
    ,fh1MCMultiplicityTracks(0)
    ,fh1MCmotherLa(0)
@@ -308,6 +308,7 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const char *name)
 
   ,fAnalysisMC(0)
   ,fDeltaVertexZ(0)
+  ,fCutjetEta(0)
   ,fCuttrackNegNcls(0)
   ,fCuttrackPosNcls(0)
   ,fCutPostrackRap(0)
@@ -451,11 +452,8 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const char *name)
   ,fh1DcaNegToPrimVertex(0)    
   ,fh2ArmenterosBeforeCuts(0)
   ,fh2ArmenterosAfterCuts(0)
-  ,fh2BB3SigProton(0)
   ,fh2BBLaPos(0)
   ,fh2BBLaNeg(0)
-  ,fh1CrossedRowsOverFindableNeg(0)
-  ,fh1CrossedRowsOverFindablePos(0)
   ,fh1PosDaughterCharge(0)
   ,fh1NegDaughterCharge(0)
   ,fh1PtMCK0s(0)
@@ -467,7 +465,6 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const char *name)
   ,fh3InvMassEtaTrackPtK0s(0)
   ,fh3InvMassEtaTrackPtLa(0)
   ,fh3InvMassEtaTrackPtALa(0)
-  ,fh1noAssociatedK0s(0)
   ,fh1TrackMultCone(0)
   ,fh2TrackMultCone(0)
   ,fh2MCgenK0Cone(0)
@@ -493,6 +490,8 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const char *name)
   ,fh3IMK0MedianCone(0)
   ,fh3IMLaMedianCone(0)
   ,fh3IMALaMedianCone(0)
+  ,fh1MedianEta(0)
+  ,fh1JetPtMedian(0)
   ,fh1MCMultiplicityPrimary(0)
   ,fh1MCMultiplicityTracks(0)
   ,fh1MCmotherLa(0)
@@ -534,6 +533,7 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const  AliAnalysisTaskJetChem &co
   
   ,fAnalysisMC(copy.fAnalysisMC)
   ,fDeltaVertexZ(copy.fDeltaVertexZ)
+  ,fCutjetEta(copy.fCutjetEta)
   ,fCuttrackNegNcls(copy.fCuttrackNegNcls)
   ,fCuttrackPosNcls(copy.fCuttrackPosNcls)
   ,fCutPostrackRap(copy.fCutPostrackRap)
@@ -677,11 +677,8 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const  AliAnalysisTaskJetChem &co
   ,fh1DcaNegToPrimVertex(copy.fh1DcaNegToPrimVertex)    
   ,fh2ArmenterosBeforeCuts(copy.fh2ArmenterosBeforeCuts)
   ,fh2ArmenterosAfterCuts(copy.fh2ArmenterosAfterCuts)
-  ,fh2BB3SigProton(copy.fh2BB3SigProton)
   ,fh2BBLaPos(copy.fh2BBLaPos)
   ,fh2BBLaNeg(copy.fh2BBLaPos)
-  ,fh1CrossedRowsOverFindableNeg(copy.fh1CrossedRowsOverFindableNeg)
-  ,fh1CrossedRowsOverFindablePos(copy.fh1CrossedRowsOverFindablePos)
   ,fh1PosDaughterCharge(copy.fh1PosDaughterCharge)
   ,fh1NegDaughterCharge(copy.fh1NegDaughterCharge)
   ,fh1PtMCK0s(copy.fh1PtMCK0s)
@@ -693,7 +690,7 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const  AliAnalysisTaskJetChem &co
   ,fh3InvMassEtaTrackPtK0s(copy.fh3InvMassEtaTrackPtK0s)
   ,fh3InvMassEtaTrackPtLa(copy.fh3InvMassEtaTrackPtLa)
   ,fh3InvMassEtaTrackPtALa(copy.fh3InvMassEtaTrackPtALa)
-  ,fh1noAssociatedK0s(copy.fh1noAssociatedK0s)
+
   ,fh1TrackMultCone(copy.fh1TrackMultCone)
   ,fh2TrackMultCone(copy.fh2TrackMultCone)
   ,fh2MCgenK0Cone(copy.fh2MCgenK0Cone)
@@ -718,7 +715,9 @@ AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const  AliAnalysisTaskJetChem &co
   ,fh3IMALaPerpCone(copy.fh3IMALaPerpCone)  
   ,fh3IMK0MedianCone(copy.fh3IMK0MedianCone)
   ,fh3IMLaMedianCone(copy.fh3IMLaMedianCone)
-  ,fh3IMALaMedianCone(copy.fh3IMALaMedianCone)  
+  ,fh3IMALaMedianCone(copy.fh3IMALaMedianCone)
+  ,fh1MedianEta(copy.fh1MedianEta)
+  ,fh1JetPtMedian(copy.fh1JetPtMedian)
   ,fh1MCMultiplicityPrimary(copy.fh1MCMultiplicityPrimary)
   ,fh1MCMultiplicityTracks(copy.fh1MCMultiplicityTracks)
   ,fh1MCmotherLa(copy.fh1MCmotherLa)
@@ -762,6 +761,7 @@ AliAnalysisTaskJetChem& AliAnalysisTaskJetChem::operator=(const AliAnalysisTaskJ
 
     fAnalysisMC                     = o.fAnalysisMC;
     fDeltaVertexZ                   = o.fDeltaVertexZ;
+    fCutjetEta                      = o.fCutjetEta;
     fCuttrackNegNcls                = o.fCuttrackNegNcls;
     fCuttrackPosNcls                = o.fCuttrackPosNcls;
     fCutPostrackRap                 = o.fCutPostrackRap;
@@ -898,11 +898,8 @@ AliAnalysisTaskJetChem& AliAnalysisTaskJetChem::operator=(const AliAnalysisTaskJ
     fh1DcaNegToPrimVertex           = o.fh1DcaNegToPrimVertex;    
     fh2ArmenterosBeforeCuts         = o.fh2ArmenterosBeforeCuts;
     fh2ArmenterosAfterCuts          = o.fh2ArmenterosAfterCuts;
-    fh2BB3SigProton                 = o.fh2BB3SigProton;
     fh2BBLaPos                      = o.fh2BBLaPos;
     fh2BBLaNeg                      = o.fh2BBLaPos;
-    fh1CrossedRowsOverFindableNeg   = o.fh1CrossedRowsOverFindableNeg;
-    fh1CrossedRowsOverFindablePos   = o.fh1CrossedRowsOverFindablePos;
     fh1PosDaughterCharge            = o.fh1PosDaughterCharge;
     fh1NegDaughterCharge            = o.fh1NegDaughterCharge;
     fh1PtMCK0s                      = o.fh1PtMCK0s;
@@ -914,7 +911,6 @@ AliAnalysisTaskJetChem& AliAnalysisTaskJetChem::operator=(const AliAnalysisTaskJ
     fh3InvMassEtaTrackPtK0s         = o.fh3InvMassEtaTrackPtK0s;
     fh3InvMassEtaTrackPtLa          = o.fh3InvMassEtaTrackPtLa;
     fh3InvMassEtaTrackPtALa         = o.fh3InvMassEtaTrackPtALa;
-    fh1noAssociatedK0s              = o.fh1noAssociatedK0s;
     fh1TrackMultCone                = o.fh1TrackMultCone;
     fh2TrackMultCone                = o.fh2TrackMultCone;
     fh2MCgenK0Cone                  = o.fh2MCgenK0Cone;
@@ -940,6 +936,8 @@ AliAnalysisTaskJetChem& AliAnalysisTaskJetChem::operator=(const AliAnalysisTaskJ
     fh3IMK0MedianCone               = o.fh3IMK0MedianCone;
     fh3IMLaMedianCone               = o.fh3IMLaMedianCone;
     fh3IMALaMedianCone              = o.fh3IMALaMedianCone; 
+    fh1MedianEta                    = o.fh1MedianEta;
+    fh1JetPtMedian                  = o.fh1JetPtMedian;
     fh1MCMultiplicityPrimary        = o.fh1MCMultiplicityPrimary;
     fh1MCMultiplicityTracks         = o.fh1MCMultiplicityTracks;
     fh1MCmotherLa                   = o.fh1MCmotherLa;
@@ -1283,13 +1281,8 @@ void AliAnalysisTaskJetChem::UserCreateOutputObjects()
   
   // Create histograms / output container
  
-  //for AliPIDResponse:
-  AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
-  AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
-  fPIDResponse = inputHandler->GetPIDResponse();
-
-  OpenFile(1);
   fCommonHistList = new TList();
+  fCommonHistList->SetOwner();
   
   Bool_t oldStatus = TH1::AddDirectoryStatus();
   TH1::AddDirectory(kFALSE);//By default (fAddDirectory = kTRUE), histograms are automatically added to the list of objects in memory
@@ -1320,12 +1313,12 @@ void AliAnalysisTaskJetChem::UserCreateOutputObjects()
  
   fh1EvtAllCent                        = new TH1F("fh1EvtAllCent","before centrality selection",100,0.,100.);
   fh1Evt                        = new TH1F("fh1Evt", "All events runned over", 3, 0.,1.);
-  fh1EvtMult                   = new TH1F("fh1EvtMult","multiplicity",1200,0.,12000.);
-  fh1K0Mult                    = new TH1F("fh1K0Mult","K0 multiplicity",1000,0.,1000.);//500. all
+  fh1EvtMult                   = new TH1F("fh1EvtMult","multiplicity",240,0.,240.);
+  fh1K0Mult                    = new TH1F("fh1K0Mult","K0 multiplicity",100,0.,100.);//500. all
   fh1dPhiJetK0                  = new TH1F("fh1dPhiJetK0","",640,-1,5.4);
-  fh1LaMult                    = new TH1F("fh1LaMult","La multiplicity",1000,0.,1000.);
+  fh1LaMult                    = new TH1F("fh1LaMult","La multiplicity",100,0.,100.);
   fh1dPhiJetLa                  = new TH1F("fh1dPhiJetLa","",640,-1,5.4);
-  fh1ALaMult                   = new TH1F("fh1ALaMult","ALa multiplicity",1000,0.,1000.);
+  fh1ALaMult                   = new TH1F("fh1ALaMult","ALa multiplicity",100,0.,100.);
   fh1dPhiJetALa                 = new TH1F("fh1dPhiJetALa","",640,-1,5.4);
   fh1JetEta                     = new TH1F("fh1JetEta","#eta distribution of all jets",400,-2.,2.);
   fh1JetPhi                     = new TH1F("fh1JetPhi","#phi distribution of all jets",630,0.,6.3);
@@ -1338,25 +1331,22 @@ void AliAnalysisTaskJetChem::UserCreateOutputObjects()
   fh1trackNegEta                = new TH1F("fh1trackNegEta","eta negative daughters",100,-2.,2.);
   fh1V0Eta                      = new TH1F("fh1V0Eta","V0 eta",60,-1.5,1.5);
   fh1V0totMom                   = new TH1F("fh1V0totMom","V0 tot mom",240,0.,20.); 
-  fh1CosPointAngle              = new TH1F("fh1CosPointAngle", "Cosine of V0's pointing angle",1000,0.99,1.0);
+  fh1CosPointAngle              = new TH1F("fh1CosPointAngle", "Cosine of V0's pointing angle",100,0.99,1.0);
   fh1Chi2Pos                    = new TH1F("fh1Chi2Pos", "V0s chi2",100,0.,5.);
   fh1Chi2Neg                    = new TH1F("fh1Chi2Neg", "V0s chi2",100,0.,5.);
   fh1DecayLengthV0              = new TH1F("fh1DecayLengthV0", "V0s decay Length;decay length(cm)",1200,0.,120.);
-  fh2ProperLifetimeK0sVsPtBeforeCut = new TH2F("fh2ProperLifetimeK0sVsPtBeforeCut"," K0s ProperLifetime vs Pt; p_{T} (GeV/#it{c})",1500,0.,15.,500,0.,250.);
-  fh2ProperLifetimeK0sVsPtAfterCut = new TH2F("fh2ProperLifetimeK0sVsPtAfterCut"," K0s ProperLifetime vs Pt; p_{T} (GeV/#it{c})",1500,0.,15.,500,0.,250.);
-  fh1ProperLifetimeV0BeforeCut  = new TH1F("fh1ProperLifetimeV0BeforeCut", "V0s 2D distance over transerse mom.;(cm)",1200,0.,120.);
-  fh1ProperLifetimeV0AfterCut   = new TH1F("fh1ProperLifetimeV0AfterCut", "V0s 2D distance over transverse mom.;(cm)",1200,0.,120.);
-  fh1V0Radius                   = new TH1F("fh1V0Radius", "V0s Radius;Radius(cm)",400,0.,40.);
+  fh2ProperLifetimeK0sVsPtBeforeCut = new TH2F("fh2ProperLifetimeK0sVsPtBeforeCut"," K0s ProperLifetime vs Pt; p_{T} (GeV/#it{c})",150,0.,15.,250,0.,250.);
+  fh2ProperLifetimeK0sVsPtAfterCut = new TH2F("fh2ProperLifetimeK0sVsPtAfterCut"," K0s ProperLifetime vs Pt; p_{T} (GeV/#it{c})",150,0.,15.,250,0.,250.);
+  fh1ProperLifetimeV0BeforeCut  = new TH1F("fh1ProperLifetimeV0BeforeCut", "V0s 2D distance over transerse mom.;(cm)",120,0.,120.);
+  fh1ProperLifetimeV0AfterCut   = new TH1F("fh1ProperLifetimeV0AfterCut", "V0s 2D distance over transverse mom.;(cm)",120,0.,120.);
+  fh1V0Radius                   = new TH1F("fh1V0Radius", "V0s Radius;Radius(cm)",200,0.,40.);
   fh1DcaV0Daughters             = new TH1F("fh1DcaV0Daughters", "DCA between daughters;dca(cm)",200,0.,2.);
-  fh1DcaPosToPrimVertex         = new TH1F("fh1DcaPosToPrimVertex", "Positive V0 daughter;dca(cm)",1000,0.,10.);
-  fh1DcaNegToPrimVertex         = new TH1F("fh1DcaNegToPrimVertex", "Negative V0 daughter;dca(cm)",1000,0.,10.);
-  fh2ArmenterosBeforeCuts       = new TH2F("fh2ArmenterosBeforeCuts","Armenteros Podolanski Plot for K0s Candidates;#alpha;(p^{arm})_{T}/(GeV/#it{c})",200,-1.2,1.2,600,0.,0.35);
-  fh2ArmenterosAfterCuts        = new TH2F("fh2ArmenterosAfterCuts","Armenteros Podolanski Plot for K0s Candidates;#alpha;(p^{arm})_{T}/(GeV/#it{c});",200,-1.2,1.2,600,0.,0.35);
-  fh2BB3SigProton               = new TH2F("fh2BB3SigProton","-dE/dX against Momentum for Protons @3sigma from TPC; P (GeV); -dE/dx (keV/cm ?)",1000,0.,10.,1000,0.,200.);
-  fh2BBLaPos                    = new TH2F("fh2BBLaPos","PID of the positive daughter of La candidates; P (GeV); -dE/dx (keV/cm ?)",1000,0,10,1000,0,200);
-  fh2BBLaNeg                    = new TH2F("fh2BBLaNeg","PID of the negative daughter of La candidates; P (GeV); -dE/dx (keV/cm ?)",1000,0,10,1000,0,200);
-  fh1CrossedRowsOverFindableNeg = new TH1F("fh1CrossedRowsOverFindableNeg","pos daughter crossed rows over findable in TPC;counts",200,0.,2.);
-  fh1CrossedRowsOverFindablePos = new TH1F("fh1CrossedRowsOverFindablePos","neg daughter crossed rows over findable in TPC;counts",200,0.,2.);
+  fh1DcaPosToPrimVertex         = new TH1F("fh1DcaPosToPrimVertex", "Positive V0 daughter;dca(cm)",100,0.,10.);
+  fh1DcaNegToPrimVertex         = new TH1F("fh1DcaNegToPrimVertex", "Negative V0 daughter;dca(cm)",100,0.,10.);
+  fh2ArmenterosBeforeCuts       = new TH2F("fh2ArmenterosBeforeCuts","Armenteros Podolanski Plot for K0s Candidates;#alpha;(p^{arm})_{T}/(GeV/#it{c})",200,-1.2,1.2,350,0.,0.35);
+  fh2ArmenterosAfterCuts        = new TH2F("fh2ArmenterosAfterCuts","Armenteros Podolanski Plot for K0s Candidates;#alpha;(p^{arm})_{T}/(GeV/#it{c});",200,-1.2,1.2,350,0.,0.35);
+  fh2BBLaPos                    = new TH2F("fh2BBLaPos","PID of the positive daughter of La candidates; P (GeV); -dE/dx (keV/cm ?)",100,0,10,200,0,200);
+  fh2BBLaNeg                    = new TH2F("fh2BBLaNeg","PID of the negative daughter of La candidates; P (GeV); -dE/dx (keV/cm ?)",100,0,10,200,0,200);
   fh1PosDaughterCharge          = new TH1F("fh1PosDaughterCharge","charge of V0 positive daughters; V0 daughters",3,-2.,2.);
   fh1NegDaughterCharge          = new TH1F("fh1NegDaughterCharge","charge of V0 negative daughters; V0 daughters",3,-2.,2.);
   fh1PtMCK0s                    = new TH1F("fh1PtMCK0s","Pt of MC rec K0s; #it{p}_{T} (GeV/#it{c})",200,0.,20.);
@@ -1366,37 +1356,20 @@ void AliAnalysisTaskJetChem::UserCreateOutputObjects()
   fh1EtaLa                      = new TH1F("fh1EtaLa","#Lambda entries ;#eta",200,-1.,1.);
   fh1EtaALa                     = new TH1F("fh1EtaALa","#bar{#Lambda} entries ;#eta",200,-1.,1.);
   fh3InvMassEtaTrackPtK0s       = new TH3F("fh3InvMassEtaTrackPtK0s","#eta; invMass (GeV/{#it{c}}^{2}); #it{p}_{T} (GeV/#it{c})", 200, -1., 1., 240, 0.4, 0.6, 140, 0., 14.);
-  fh3InvMassEtaTrackPtLa        = new TH3F("fh3InvMassEtaTrackPtLa", "#eta; invMass (GeV/{#it{c}}^{2}; #it{p}_{T} (GeV/#it{c}))",  200, -1., 1., 140, 1.06, 1.2, 140, 0., 14.);
-  fh3InvMassEtaTrackPtALa       = new TH3F("fh3InvMassEtaTrackPtALa","#eta; invMass (GeV/#it{c}^{2}); #it{p}_{T} (GeV/#it{c})",  200, -1., 1., 140, 1.06, 1.2, 140, 0., 14.);
-  fh3IMK0PerpCone               = new TH3F("fh3IMK0PerpCone","{K_{0}}^{s} content in perpendicular cone",39,5.,200., 400,0.3,0.7, 200,0.,20.);
-  fh3IMLaPerpCone               = new TH3F("fh3IMLaPerpCone","#Lambda content in perpendicular cone",39,5.,200., 140,1.06,1.2, 200,0.,20.);
-  fh3IMALaPerpCone              = new TH3F("fh3IMALaPerpCone","#Antilambda content in perpendicular cone",39,5.,200., 140,1.06,1.2, 200,0.,20.);
-  fh3IMK0MedianCone             = new TH3F("fh3IMK0MedianCone","{K_{0}}^{s} content in median cluster cone",39,5.,200., 400,0.3,0.7, 200,0.,20.);
-  fh3IMLaMedianCone             = new TH3F("fh3IMLaMedianCone","#Lambda content in median cluster cone",39,5.,200., 140,1.06,1.2, 200,0.,20.);
-  fh3IMALaMedianCone            = new TH3F("fh3IMALaMedianCone","#Antilambda content in median cluster cone",39,5.,200., 140,1.06,1.2, 200,0.,20.);
-
-  fh1noAssociatedK0s            = new TH1F("fh1noAssociatedK0s","not selected as associated particle",12,0.,12.);
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(1,"K0s: accepted as associated particle");
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(2,"K0s: v0 not K0s pdg code (310)");
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(3,"K0s: v0 is not primary particle");
-
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(4,"K0s: pos daughter is pion");
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(5,"K0s: neg daughter is pion");
-
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(6,"K0s: pos daughter particle is proton");
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(7,"K0s: pos daughter particle is electron"); 
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(8,"K0s: pos daughter particle is myon");
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(9,"K0s: neg daughter particle is proton");
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(10,"K0s: neg daughter particle is electron");  
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(11,"K0s: neg daughter particle is myon");
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(12,"K0s: pos daughter particle is something else");
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(13,"K0s: neg daughter particle is something else");
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(14,"K0s: pos daughter not pion pdg code (211)");
-  fh1noAssociatedK0s->GetXaxis()->SetBinLabel(15,"K0s: neg daughter not pion pdg code (211)");
-
-  fh1TrackMultCone          = new TH1F("fh1TrackMultCone","track multiplicity in jet cone; number of tracks",200,0.,1000.);
-
-  fh2TrackMultCone          = new TH2F("fh2TrackMultCone","track multiplicity in jet cone vs. jet momentum; number of tracks; jet it{p}_{T} (GeV/it{c})",200,0.,1000.,39,5.,200.);
+  fh3InvMassEtaTrackPtLa        = new TH3F("fh3InvMassEtaTrackPtLa", "#eta; invMass (GeV/{#it{c}}^{2}; #it{p}_{T} (GeV/#it{c}))",  200, -1., 1., 140, 1.05, 1.25, 140, 0., 14.);
+  fh3InvMassEtaTrackPtALa       = new TH3F("fh3InvMassEtaTrackPtALa","#eta; invMass (GeV/#it{c}^{2}); #it{p}_{T} (GeV/#it{c})",  200, -1., 1., 140, 1.05, 1.25, 140, 0., 14.);
+  fh3IMK0PerpCone               = new TH3F("fh3IMK0PerpCone","{K_{0}}^{s} content in perpendicular cone",39,5.,200., 400,0.4,0.6, 200,0.,20.);
+  fh3IMLaPerpCone               = new TH3F("fh3IMLaPerpCone","#Lambda content in perpendicular cone",39,5.,200., 140,1.05,1.25, 200,0.,20.);
+  fh3IMALaPerpCone              = new TH3F("fh3IMALaPerpCone","#Antilambda content in perpendicular cone",39,5.,200., 140,1.05,1.25, 200,0.,20.);
+  fh3IMK0MedianCone             = new TH3F("fh3IMK0MedianCone","{K_{0}}^{s} content in median cluster cone",39,5.,200., 400,0.4,0.6, 200,0.,20.);
+  fh3IMLaMedianCone             = new TH3F("fh3IMLaMedianCone","#Lambda content in median cluster cone",39,5.,200., 140,1.05,1.25, 200,0.,20.);
+  fh3IMALaMedianCone            = new TH3F("fh3IMALaMedianCone","#Antilambda content in median cluster cone",39,5.,200., 140,1.05,1.25, 200,0.,20.);
+  fh1MedianEta                  = new TH1F("fh1MedianEta","Median cluster axis ;#eta",200,-1.,1.);
+  fh1JetPtMedian                = new TH1F("fh1JetPtMedian","Median cluster jet it{p}_{T} ;#GeV/it{c}",39,5.,200.);
+
+  fh1TrackMultCone          = new TH1F("fh1TrackMultCone","track multiplicity in jet cone; number of tracks",200,0.,500.);
+
+  fh2TrackMultCone          = new TH2F("fh2TrackMultCone","track multiplicity in jet cone vs. jet momentum; number of tracks; jet it{p}_{T} (GeV/it{c})",200,0.,200.,39,5.,200.);
 
   fFFHistosRecCuts         = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, 
                                                     fFFNBinsPt, fFFPtMin, fFFPtMax, 
@@ -1531,13 +1504,13 @@ void AliAnalysisTaskJetChem::UserCreateOutputObjects()
   fh1MCmotherALa->GetXaxis()->SetBinLabel(6,"#Xi^{-}");
   fh1MCmotherALa->GetXaxis()->SetBinLabel(7,"#Xi^{+}");
   fh1MCmotherALa->GetXaxis()->SetBinLabel(8,"primary particle");
-  fh3FeedDownLa                 = new TH3F("fh3FeedDownLa","#Lambda stemming from feeddown from Xi(0/-)", 39, 5., 200., 200, 1.05, 1.25, 200,0.,20.);
-  fh3FeedDownALa                = new TH3F("fh3FeedDownALa","#bar#Lambda stemming from feeddown from Xibar(0/+)", 39, 5., 200., 200, 1.05, 1.25, 200, 0., 20.);
-  fh3FeedDownLaCone             = new TH3F("fh3FeedDownLaCone","#Lambda stemming from feeddown from Xi(0/-) in jet cone", 39, 5., 200., 200, 1.05, 1.25, 200,0.,20.);
-  fh3FeedDownALaCone            = new TH3F("fh3FeedDownALaCone","#bar#Lambda stemming from feeddown from Xibar(0/+) in jet cone", 39, 5., 200., 200, 1.05, 1.25, 200, 0., 20.);
-  fh1MCProdRadiusK0s            = new TH1F("fh1MCProdRadiusK0s","MC gen. MC K0s prod radius",600,0.,200.);
-  fh1MCProdRadiusLambda         = new TH1F("fh1MCProdRadiusLambda","MC gen. MC La prod radius",600,0.,200.);
-  fh1MCProdRadiusAntiLambda     = new TH1F("fh1MCProdRadiusAntiLambda","MC gen. MC ALa prod radius",600,0.,200.);
+  fh3FeedDownLa                 = new TH3F("fh3FeedDownLa","#Lambda stemming from feeddown from Xi(0/-)", 19, 5., 100., 200, 1.05, 1.25, 200,0.,20.);
+  fh3FeedDownALa                = new TH3F("fh3FeedDownALa","#bar#Lambda stemming from feeddown from Xibar(0/+)", 19, 5., 100., 200, 1.05, 1.25, 200, 0., 20.);
+  fh3FeedDownLaCone             = new TH3F("fh3FeedDownLaCone","#Lambda stemming from feeddown from Xi(0/-) in jet cone", 19, 5., 100., 200, 1.05, 1.25, 200,0.,20.);
+  fh3FeedDownALaCone            = new TH3F("fh3FeedDownALaCone","#bar#Lambda stemming from feeddown from Xibar(0/+) in jet cone", 19, 5., 100., 200, 1.05, 1.25, 200, 0., 20.);
+  fh1MCProdRadiusK0s            = new TH1F("fh1MCProdRadiusK0s","MC gen. MC K0s prod radius",200,0.,200.);
+  fh1MCProdRadiusLambda         = new TH1F("fh1MCProdRadiusLambda","MC gen. MC La prod radius",200,0.,200.);
+  fh1MCProdRadiusAntiLambda     = new TH1F("fh1MCProdRadiusAntiLambda","MC gen. MC ALa prod radius",200,0.,200.);
 
   // Pt and inv mass distributions
 
@@ -1622,11 +1595,8 @@ void AliAnalysisTaskJetChem::UserCreateOutputObjects()
     fCommonHistList->Add(fh1DcaNegToPrimVertex);    
     fCommonHistList->Add(fh2ArmenterosBeforeCuts);
     fCommonHistList->Add(fh2ArmenterosAfterCuts);
-    fCommonHistList->Add(fh2BB3SigProton);
     fCommonHistList->Add(fh2BBLaPos);
     fCommonHistList->Add(fh2BBLaNeg);
-    fCommonHistList->Add(fh1CrossedRowsOverFindableNeg);
-    fCommonHistList->Add(fh1CrossedRowsOverFindablePos);
     fCommonHistList->Add(fh1PosDaughterCharge);
     fCommonHistList->Add(fh1NegDaughterCharge);
     fCommonHistList->Add(fh1PtMCK0s);
@@ -1638,7 +1608,6 @@ void AliAnalysisTaskJetChem::UserCreateOutputObjects()
     fCommonHistList->Add(fh3InvMassEtaTrackPtK0s);
     fCommonHistList->Add(fh3InvMassEtaTrackPtLa);
     fCommonHistList->Add(fh3InvMassEtaTrackPtALa);
-    fCommonHistList->Add(fh1noAssociatedK0s); 
     fCommonHistList->Add(fh1TrackMultCone);
     fCommonHistList->Add(fh2TrackMultCone);
     fCommonHistList->Add(fh2MCgenK0Cone);
@@ -1664,6 +1633,8 @@ void AliAnalysisTaskJetChem::UserCreateOutputObjects()
     fCommonHistList->Add(fh3IMK0MedianCone);
     fCommonHistList->Add(fh3IMLaMedianCone);
     fCommonHistList->Add(fh3IMALaMedianCone);
+    fCommonHistList->Add(fh1MedianEta);
+    fCommonHistList->Add(fh1JetPtMedian);
     fCommonHistList->Add(fh1MCMultiplicityPrimary);       
     fCommonHistList->Add(fh1MCMultiplicityTracks);       
     fCommonHistList->Add(fh1MCmotherLa);
@@ -1692,6 +1663,8 @@ void AliAnalysisTaskJetChem::UserCreateOutputObjects()
     fCommonHistList->Add(fh1MCEtaLambda);
     fCommonHistList->Add(fh1MCEtaAntiLambda);         
 
+
+
     fV0QAK0->AddToOutput(fCommonHistList);
     fFFHistosRecCuts->AddToOutput(fCommonHistList);
     fFFHistosRecCutsK0Evt->AddToOutput(fCommonHistList);
@@ -1724,7 +1697,7 @@ void AliAnalysisTaskJetChem::UserCreateOutputObjects()
 
   }
   TH1::AddDirectory(oldStatus);
+ PostData(1, fCommonHistList); 
 }
 
 //_______________________________________________
@@ -1741,6 +1714,14 @@ void AliAnalysisTaskJetChem::UserExec(Option_t *)
   AliInputEventHandler* inputHandler = (AliInputEventHandler*)
     ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
   
+
+  //for AliPIDResponse:
+  //AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+  //AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
+  fPIDResponse = inputHandler->GetPIDResponse();
+
+  if (!fPIDResponse){if(fDebug > 1) Printf("AliAnalysisTaskJetChem::UserExec(): fPIDResponse does not exist!"); return;}
+
   //std::cout<<"inputHandler->IsEventSelected(): "<<inputHandler->IsEventSelected()<<std::endl;
   //std::cout<<"fEvtSelectionMask: "<<fEvtSelectionMask<<std::endl;
   
@@ -1993,9 +1974,11 @@ void AliAnalysisTaskJetChem::UserExec(Option_t *)
 
   Int_t nK0s = GetListOfV0s(fListK0s,fK0Type,kK0,myPrimaryVertex,fAOD);//all V0s in event with K0s assumption
   
+  if(fDebug>5){std::cout<<"fK0Type: "<<fK0Type<<" kK0: "<<kK0<<" myPrimaryVertex: "<<myPrimaryVertex<<" fAOD:  "<<fAOD<<std::endl;} 
+
   //std::cout<< "nK0s: "<<nK0s<<std::endl;
 
-  if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nK0s,fListK0s->GetEntries());
+  if(fDebug>2)Printf("%s:%d Selected V0s after cuts: %d %d",(char*)__FILE__,__LINE__,nK0s,fListK0s->GetEntries());
   if(nK0s != fListK0s->GetEntries()) Printf("%s:%d Mismatch selected K0s: %d %d",(char*)__FILE__,__LINE__,nK0s,fListK0s->GetEntries());
   fh1K0Mult->Fill(fListK0s->GetEntries());
 
@@ -2413,8 +2396,8 @@ void AliAnalysisTaskJetChem::UserExec(Option_t *)
 
        Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
        
-       fFFHistosRecCuts->FillFF(trackPt, jetPt, incrementJetPt);
-       if(nK0s>0) fFFHistosRecCutsK0Evt->FillFF(trackPt, jetPt, incrementJetPt);
+       fFFHistosRecCuts->FillFF(trackPt, jetPt, incrementJetPt);//histo with tracks/jets after cut selection, for all events
+       if(nK0s>0) fFFHistosRecCutsK0Evt->FillFF(trackPt, jetPt, incrementJetPt);//only for K0s events
        fh2FFJetTrackEta->Fill(trackEta,jetPt);
 
 
@@ -2423,7 +2406,7 @@ void AliAnalysisTaskJetChem::UserExec(Option_t *)
       njetTracks = jettracklist->GetSize();
 
       //____________________________________________________________________________________________________________________      
-      //alternative method to estimate secondary constribution in jet cone (second method you can see below in rec. K0s loop & rec. Lambdas loop & rec. Antilambdas loop)
+      //strangeness constribution to jet cone 
 
       if(fAnalysisMC){
 
@@ -2490,11 +2473,6 @@ void AliAnalysisTaskJetChem::UserExec(Option_t *)
              if  (mfl == 3 && codeM != 3) isFromStrange = kTRUE;
            }
     
-           //cut on primary particles:
-
-
-
-
            if(isFromStrange == kTRUE){
 
              Double_t trackPt = part->Pt();
@@ -2623,45 +2601,125 @@ void AliAnalysisTaskJetChem::UserExec(Option_t *)
       
       if(jetPerpConeK0list->GetSize() == 0){ // no K0s in jet cone 
        
-       //Bool_t incrementPerpJetPt = kTRUE;
        fh3IMK0PerpCone->Fill(jetPt, -1, -1);
       }
-   
-      // ____ rec K0s in median cluster___________________________________________________________________________________________________________ 
-      
-      TList* jetMedianConeK0list = new TList();
-      
-      AliAODJet* medianCluster = GetMedianCluster();
-
-      Double_t sumMedianPtK0     = 0.;
-
-      Bool_t isBadJetK0Median    = kFALSE; // dummy, do not use
-     
-      GetTracksInCone(fListK0s, jetMedianConeK0list, medianCluster, GetFFRadius(), sumMedianPtK0, 0., 0., isBadJetK0Median); //reconstructed K0s in median cone around jet axis
-      //GetTracksInCone(fListK0s, jetConeK0list, jet, GetFFRadius(), sumPtK0, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetK0); //original use of function
-      
-      //cut parameters from Fragmentation Function task:
-      //Float_t fFFMinLTrackPt;   // reject jets with leading track with pt smaller than this value, use GetFFMinLTrackPt()
-      //Float_t fFFMaxTrackPt;    // reject jetscontaining any track with pt larger than this value, use GetFFMaxTrackPt()
       
-      for(Int_t it=0; it<jetMedianConeK0list->GetSize(); ++it){ // loop for K0s in median cone
+      if(ij==0){//median cluster only once for event
        
-       AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetMedianConeK0list->At(it));
-       if(!v0) continue;
+       // ____ rec K0s in median cluster___________________________________________________________________________________________________________ 
        
-       Double_t invMMedianK0s =0;
-       Double_t trackPt=0;
+       TList* jetMedianConeK0list = new TList();
+       TList* jetMedianConeLalist = new TList();
+       TList* jetMedianConeALalist = new TList();
        
-       CalculateInvMass(v0, kK0, invMMedianK0s, trackPt);  //function to calculate invMass with TLorentzVector class
+       AliAODJet* medianCluster = GetMedianCluster();
+       Double_t medianEta = medianCluster->Eta();
        
-       fh3IMK0MedianCone->Fill(jetPt, invMMedianK0s, trackPt); //(x,y,z)
-      }
-      
-      if(jetMedianConeK0list->GetSize() == 0){ // no K0s in median cluster cone 
+       if(TMath::Abs(medianEta)<=fCutjetEta){
+         
+         fh1MedianEta->Fill(medianEta);
+         fh1JetPtMedian->Fill(jetPt); //for normalisation by total number of median cluster jets
+         
+         Double_t sumMedianPtK0     = 0.;
+         
+         Bool_t isBadJetK0Median    = kFALSE; // dummy, do not use
+         
+         GetTracksInCone(fListK0s, jetMedianConeK0list, medianCluster, GetFFRadius(), sumMedianPtK0, 0., 0., isBadJetK0Median); //reconstructed K0s in median cone around jet axis
+         //GetTracksInCone(fListK0s, jetConeK0list, jet, GetFFRadius(), sumPtK0, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetK0); //original use of function
+         
+         //cut parameters from Fragmentation Function task:
+         //Float_t fFFMinLTrackPt;   // reject jets with leading track with pt smaller than this value, use GetFFMinLTrackPt()
+         //Float_t fFFMaxTrackPt;    // reject jetscontaining any track with pt larger than this value, use GetFFMaxTrackPt()
+         
+         for(Int_t it=0; it<jetMedianConeK0list->GetSize(); ++it){ // loop for K0s in median cone
+           
+           AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetMedianConeK0list->At(it));
+           if(!v0) continue;
+           
+           Double_t invMMedianK0s =0;
+           Double_t trackPt=0;
+           
+           CalculateInvMass(v0, kK0, invMMedianK0s, trackPt);  //function to calculate invMass with TLorentzVector class       
+           
+           fh3IMK0MedianCone->Fill(jetPt, invMMedianK0s, trackPt); //(x,y,z)
+           
+         }
+         
+         if(jetMedianConeK0list->GetSize() == 0){ // no K0s in median cluster cone 
+           
+           fh3IMK0MedianCone->Fill(jetPt, -1, -1);
+         }
+         
+         //__________________________________________________________________________________________________________________________________________
+         // ____ rec Lambdas in median cluster___________________________________________________________________________________________________________ 
+         
+         Double_t sumMedianPtLa     = 0.;
+         Bool_t isBadJetLaMedian    = kFALSE; // dummy, do not use
+         
+         GetTracksInCone(fListLa, jetMedianConeLalist, medianCluster, GetFFRadius(), sumMedianPtLa, 0, 0, isBadJetLaMedian); //reconstructed Lambdas in median cone around jet axis
+         
+         //cut parameters from Fragmentation Function task:
+         //Float_t fFFMinLTrackPt;   // reject jets with leading track with pt smaller than this value, use GetFFMinLTrackPt()
+         //Float_t fFFMaxTrackPt;    // reject jets containing any track with pt larger than this value, use GetFFMaxTrackPt()
+         
+         for(Int_t it=0; it<jetMedianConeLalist->GetSize(); ++it){ // loop for Lambdas in perpendicular cone
+           
+           AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetMedianConeLalist->At(it));
+           if(!v0) continue;
+         
+           Double_t invMMedianLa =0;
+           Double_t trackPt=0;
+           
+           CalculateInvMass(v0, kLambda, invMMedianLa, trackPt);  //function to calculate invMass with TLorentzVector class
+           
+           fh3IMLaMedianCone->Fill(jetPt, invMMedianLa, trackPt); //(x,y,z)
+         }
+         
+         if(jetMedianConeLalist->GetSize() == 0){ // no Lambdas in median cluster cone 
+           
+           fh3IMLaMedianCone->Fill(jetPt, -1, -1);
+         }
+         
        
-       fh3IMK0MedianCone->Fill(jetPt, -1, -1);
-      }
-      
+         // ____ rec Antilambdas in median cluster___________________________________________________________________________________________________________ 
+       
+         
+         Double_t sumMedianPtALa     = 0.;
+         
+         Bool_t isBadJetALaMedian    = kFALSE; // dummy, do not use
+         
+         GetTracksInCone(fListALa, jetMedianConeALalist, medianCluster, GetFFRadius(), sumMedianPtALa, 0, 0, isBadJetALaMedian); //reconstructed Antilambdas in median cone around jet axis
+         
+         
+         //cut parameters from Fragmentation Function task:
+         //Float_t fFFMinLTrackPt;   // reject jets with leading track with pt smaller than this value, use GetFFMinLTrackPt()
+         //Float_t fFFMaxTrackPt;    // reject jets containing any track with pt larger than this value, use GetFFMaxTrackPt()
+       
+         for(Int_t it=0; it<jetMedianConeALalist->GetSize(); ++it){ // loop for Antilambdas in median cluster cone
+           
+           AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetMedianConeALalist->At(it));
+           if(!v0) continue;
+           
+           Double_t invMMedianALa =0;
+           Double_t trackPt=0;
+           
+           CalculateInvMass(v0, kAntiLambda, invMMedianALa, trackPt);  //function to calculate invMass with TLorentzVector class
+           
+           fh3IMALaMedianCone->Fill(jetPt, invMMedianALa, trackPt); //(x,y,z)
+         }
+         
+         if(jetMedianConeALalist->GetSize() == 0){ // no Antilambdas in median cluster cone 
+           
+           fh3IMALaMedianCone->Fill(jetPt, -1, -1);
+         }
+       }//median cluster eta cut 
+       
+       delete jetMedianConeK0list;
+       delete jetMedianConeLalist;
+       delete jetMedianConeALalist;
+       
+       
+      }//end ij == 0
       //_________________________________________________________________________________________________________________________________________
       
       //____fetch reconstructed Lambdas in cone perpendicular to jet axis:__________________________________________________________________________
@@ -2694,42 +2752,6 @@ void AliAnalysisTaskJetChem::UserExec(Option_t *)
        
       }
       
-      //__________________________________________________________________________________________________________________________________________
-          // ____ rec Lambdas in median cluster___________________________________________________________________________________________________________ 
-      
-      TList* jetMedianConeLalist = new TList();
-      
-      //AliAODJet* medianCluster = GetMedianCluster(); //already loaded at part for K0s ??
-
-      Double_t sumMedianPtLa     = 0.;
-      Bool_t isBadJetLaMedian    = kFALSE; // dummy, do not use
-     
-      GetTracksInCone(fListLa, jetMedianConeLalist, medianCluster, GetFFRadius(), sumMedianPtLa, 0, 0, isBadJetLaMedian); //reconstructed Lambdas in median cone around jet axis
-     
-         //cut parameters from Fragmentation Function task:
-      //Float_t fFFMinLTrackPt;   // reject jets with leading track with pt smaller than this value, use GetFFMinLTrackPt()
-      //Float_t fFFMaxTrackPt;    // reject jets containing any track with pt larger than this value, use GetFFMaxTrackPt()
-      
-      for(Int_t it=0; it<jetMedianConeLalist->GetSize(); ++it){ // loop for Lambdas in perpendicular cone
-       
-       AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetMedianConeLalist->At(it));
-       if(!v0) continue;
-       
-       Double_t invMMedianLa =0;
-       Double_t trackPt=0;
-       
-       CalculateInvMass(v0, kLambda, invMMedianLa, trackPt);  //function to calculate invMass with TLorentzVector class
-       
-       fh3IMLaMedianCone->Fill(jetPt, invMMedianLa, trackPt); //(x,y,z)
-      }
-      
-      if(jetMedianConeLalist->GetSize() == 0){ // no Lambdas in median cluster cone 
-       
-       fh3IMLaMedianCone->Fill(jetPt, -1, -1);
-      }
-      
-      //_________________________________________________________________________________________________________________________________________
-      
       
       //____fetch reconstructed Antilambdas in cone perpendicular to jet axis:___________________________________________________________________
       
@@ -2761,47 +2783,7 @@ void AliAnalysisTaskJetChem::UserExec(Option_t *)
        fh3IMALaPerpCone->Fill(jetPt, -1, -1);
        
       }
-      
-
-          // ____ rec Antilambdas in median cluster___________________________________________________________________________________________________________ 
-      
-      TList* jetMedianConeALalist = new TList();
-      
-      //AliAODJet* medianCluster = GetMedianCluster(); //already loaded at part for K0s
-
-      Double_t sumMedianPtALa     = 0.;
-      
-      Bool_t isBadJetALaMedian    = kFALSE; // dummy, do not use
-     
-      GetTracksInCone(fListALa, jetMedianConeALalist, medianCluster, GetFFRadius(), sumMedianPtALa, 0, 0, isBadJetALaMedian); //reconstructed Antilambdas in median cone around jet axis
-     
-         
-      //cut parameters from Fragmentation Function task:
-      //Float_t fFFMinLTrackPt;   // reject jets with leading track with pt smaller than this value, use GetFFMinLTrackPt()
-      //Float_t fFFMaxTrackPt;    // reject jets containing any track with pt larger than this value, use GetFFMaxTrackPt()
-      
-      for(Int_t it=0; it<jetMedianConeALalist->GetSize(); ++it){ // loop for Antilambdas in median cluster cone
-       
-       AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetMedianConeALalist->At(it));
-       if(!v0) continue;
-       
-       Double_t invMMedianALa =0;
-       Double_t trackPt=0;
-       
-       CalculateInvMass(v0, kAntiLambda, invMMedianALa, trackPt);  //function to calculate invMass with TLorentzVector class
-       
-       fh3IMALaMedianCone->Fill(jetPt, invMMedianALa, trackPt); //(x,y,z)
-      }
-      
-      if(jetMedianConeALalist->GetSize() == 0){ // no Antilambdas in median cluster cone 
-       
-       fh3IMALaMedianCone->Fill(jetPt, -1, -1);
-      }
-      
-      //_________________________________________________________________________________________________________________________________________
-      
-
-
+   
       //MC Analysis 
       //__________________________________________________________________________________________________________________________________________
       
@@ -3135,8 +3117,6 @@ void AliAnalysisTaskJetChem::UserExec(Option_t *)
        
        //________________________________________________________________________________________________________________________________________________________
          
-
-
        delete fListMCgenK0sCone;
        
        
@@ -3146,9 +3126,7 @@ void AliAnalysisTaskJetChem::UserExec(Option_t *)
       delete jetPerpConeK0list;
       delete jetPerpConeLalist;
       delete jetPerpConeALalist;
-      delete jetMedianConeK0list;
-      delete jetMedianConeLalist;
-      delete jetMedianConeALalist;
 
       //---------------La--------------------------------------------------------------------------------------------------------------------------------------------
       
@@ -3759,6 +3737,12 @@ Int_t AliAnalysisTaskJetChem::GetListOfV0s(TList *list, const Int_t type, const
     return -1;
   }
   
+  
+  if(fDebug>5){std::cout<<"AliAnalysisTaskJetChem::GetListOfV0s(): type: "<<type<<" particletype: "<<particletype<<"aod: "<<aod<<std::endl;
+    if(type==kTrackUndef){std::cout<<"AliAnalysisTaskJetChem::GetListOfV0s(): kTrackUndef!! "<<std::endl;}
+  }
+  
+  
   if(type==kTrackUndef) return 0;
 
   if(!primVertex) return 0;
@@ -3769,6 +3753,9 @@ Int_t AliAnalysisTaskJetChem::GetListOfV0s(TList *list, const Int_t type, const
   lPrimaryVtxPosition[1] = primVertex->GetY();
   lPrimaryVtxPosition[2] = primVertex->GetZ();
 
+  if(fDebug>5){ std::cout<<"AliAnalysisTaskJetChem::GetListOfV0s(): aod->GetNumberOfV0s: "<<aod->GetNumberOfV0s()<<std::endl; }
+
+
   for(int i=0; i<aod->GetNumberOfV0s(); i++){ // loop over V0s
     
 
@@ -3836,7 +3823,10 @@ Int_t AliAnalysisTaskJetChem::GetListOfV0s(TList *list, const Int_t type, const
 
     /////////////////////////////////////////////////////////////
     //V0 and track Cuts:
-    
+   
+
+    if(fDebug>6){if(!(IsK0InvMass(invMK0s)) && !(IsLaInvMass(invMLa)) && !(IsLaInvMass(invMALa))){std::cout<<"AliAnalysisTaskJetChem::GetListOfV0s: invM not in selected mass window "<<std::endl;}}
     if(!(IsK0InvMass(invMK0s)) && !(IsLaInvMass(invMLa)) && !(IsLaInvMass(invMALa)))continue; 
     
     //  Double_t PosEta = trackPos->AliAODTrack::Eta();//daughter track charge is sometimes wrong here, account for that!!!
@@ -4498,6 +4488,8 @@ void AliAnalysisTaskJetChem::GetTracksInCone(TList* inputlist, TList* outputlist
   jet->PxPyPz(jetMom);
   TVector3 jet3mom(jetMom);
 
+  //if(jetets < jetetscutr)continue;
+
   for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
 
     AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
@@ -4744,7 +4736,7 @@ Bool_t AliAnalysisTaskJetChem::MCLabelCheck(AliAODv0* v0, Int_t particletype,con
               if(TMath::Abs(posDaughterpdg) != 211){return kFALSE;}//one or both of the daughters are not a pion
               if(TMath::Abs(negDaughterpdg) != 211){return kFALSE;}
               
-              if(MCv0PDGCode != 310)  {fh1noAssociatedK0s->Fill(1.);return kFALSE;}
+              if(MCv0PDGCode != 310)  {return kFALSE;}
             }
             
             if(particletype == kLambda){
index cc15d0cf36a942a2a41403944eeabe932d5c351c..2f1e45cd0af357497f2993838fc9356275f556a7 100644 (file)
@@ -187,7 +187,7 @@ class AliAnalysisTaskJetChem : public AliAnalysisTaskFragmentationFunction {
   //-- K0s
 
   void   SetFFInvMassHistoBins(Int_t nJetPt = 39, Float_t jetPtMin = 5., Float_t jetPtMax = 200., //previous 19, 5.,100.
-                              Int_t nInvM = 400, Float_t invMMin = 0.4,  Float_t invMMax = 0.6, //previous 0.4 to 0.6
+                              Int_t nInvM = 400, Float_t invMMin = 0.3,  Float_t invMMax = 0.7, //previous 0.4 to 0.6
                               Int_t nPt = 200, Float_t ptMin = 0., Float_t ptMax = 20.,         //previous 0. to 10.
                               Int_t nXi = 35, Float_t xiMin = 0., Float_t xiMax = 7.,
                               Int_t nZ = 11,  Float_t zMin = 0.,  Float_t zMax = 1.1)
@@ -236,6 +236,7 @@ class AliAnalysisTaskJetChem : public AliAnalysisTaskFragmentationFunction {
   //--
   Bool_t   fAnalysisMC;
   Double_t fDeltaVertexZ;
+  Double_t fCutjetEta;
   Double_t fCuttrackNegNcls;
   Double_t fCuttrackPosNcls; 
   Double_t fCutPostrackRap;
@@ -244,6 +245,7 @@ class AliAnalysisTaskJetChem : public AliAnalysisTaskFragmentationFunction {
   Double_t fCutPostrackEta;
   Double_t fCutNegtrackEta;
   Double_t fCutEta;
+
   Double_t fCutV0cosPointAngle;
   Double_t fCutChi2PosDaughter;
   Double_t fCutChi2NegDaughter;
@@ -270,6 +272,7 @@ class AliAnalysisTaskJetChem : public AliAnalysisTaskFragmentationFunction {
   void SetCuttrackPosEta(Double_t posEta){fCutPostrackEta=posEta; Printf("AliAnalysisTaskJetChem:: SetCuttrackPosEta %f",posEta);}
   void SetCuttrackNegEta(Double_t negEta){fCutNegtrackEta=negEta; Printf("AliAnalysisTaskJetChem:: SetCuttrackNegEta %f",negEta);}
   void SetCutV0Eta(Double_t v0Eta){fCutEta=v0Eta; Printf("AliAnalysisTaskJetChem:: SetCutV0Eta %f",v0Eta);}
+  void SetCutJetEta(Double_t jetEta){fCutjetEta=jetEta; Printf("AliAnalysisTaskJetChem:: SetCutjetEta %f",jetEta);}
   void SetCosOfPointingAngle(Double_t cospointAng){fCutV0cosPointAngle=cospointAng; Printf("AliAnalysisTaskJetChem:: SetCosOfPointingAngle %f",cospointAng);}
   void SetChi2CutPosDaughter(Double_t chi2PosDaughter){fCutChi2PosDaughter=chi2PosDaughter; Printf("AliAnalysisTaskJetChem:: SetChi2CutPosDaughter %f",chi2PosDaughter);}
   void SetChi2CutNegDaughter(Double_t chi2NegDaughter){fCutChi2NegDaughter=chi2NegDaughter; Printf("AliAnalysisTaskJetChem:: SetChi2CutNegDaughter %f",chi2NegDaughter);}
@@ -291,7 +294,7 @@ class AliAnalysisTaskJetChem : public AliAnalysisTaskFragmentationFunction {
 
  private:
   
-  Int_t fK0Type;                                           //! K0 cuts
+  Int_t fK0Type;                                           // K0 cuts
   UInt_t fFilterMaskK0;                                    //! K0 legs cuts
   TList* fListK0s;                                         //! K0 list 
   AliPIDResponse *fPIDResponse;                                   // PID
@@ -303,7 +306,7 @@ class AliAnalysisTaskJetChem : public AliAnalysisTaskFragmentationFunction {
   AliFragFuncHistosInvMass*  fFFHistosIMK0Cone;            //! K0 FF jet cone   
   AliFragFuncHistosPhiCorrInvMass*  fFFHistosPhiCorrIMK0;  //! K0 correlation to jet axis 
   
-  Int_t fLaType;                                           //! La cuts
+  Int_t fLaType;                                           // La cuts
   UInt_t fFilterMaskLa;                                    //! La legs cuts
   TList* fListLa;                                          //! La list 
   
@@ -312,7 +315,7 @@ class AliAnalysisTaskJetChem : public AliAnalysisTaskFragmentationFunction {
   AliFragFuncHistosInvMass*  fFFHistosIMLaCone;            //! La FF jet cone   
   AliFragFuncHistosPhiCorrInvMass*  fFFHistosPhiCorrIMLa;  //! La correlation to jet axis 
   
-  Int_t fALaType;                                          //! ALa cuts
+  Int_t fALaType;                                          // ALa cuts
 
   UInt_t fFilterMaskALa;                                   //! ALa legs cuts
   TList* fListALa;                                         //! ALa list 
@@ -450,11 +453,8 @@ class AliAnalysisTaskJetChem : public AliAnalysisTaskFragmentationFunction {
   TH1F* fh1DcaNegToPrimVertex;        
   TH2F* fh2ArmenterosBeforeCuts;     
   TH2F* fh2ArmenterosAfterCuts;      
-  TH2F* fh2BB3SigProton;             
   TH2F* fh2BBLaPos;                  
   TH2F* fh2BBLaNeg;                  
-  TH1F* fh1CrossedRowsOverFindableNeg;
-  TH1F* fh1CrossedRowsOverFindablePos;
   TH1F* fh1PosDaughterCharge;
   TH1F* fh1NegDaughterCharge;
   TH1F* fh1PtMCK0s;
@@ -466,7 +466,6 @@ class AliAnalysisTaskJetChem : public AliAnalysisTaskFragmentationFunction {
   TH3F* fh3InvMassEtaTrackPtK0s;
   TH3F* fh3InvMassEtaTrackPtLa;
   TH3F* fh3InvMassEtaTrackPtALa;
-  TH1F* fh1noAssociatedK0s;
   TH1F* fh1TrackMultCone;
   TH2F* fh2TrackMultCone;
   TH2F* fh2MCgenK0Cone;
@@ -492,13 +491,15 @@ class AliAnalysisTaskJetChem : public AliAnalysisTaskFragmentationFunction {
   TH3F* fh3IMK0MedianCone;
   TH3F* fh3IMLaMedianCone;
   TH3F* fh3IMALaMedianCone;
+  TH1F* fh1MedianEta;
+  TH1F* fh1JetPtMedian; //for normalisation by total number of median cluster jets TH3F* fh3IMALaMedianCone;
   TH1F* fh1MCMultiplicityPrimary;
   TH1F* fh1MCMultiplicityTracks;
   TH1F* fh1MCmotherLa;
   TH1F* fh1MCmotherALa;
   TH3F* fh3FeedDownLa;
   TH3F* fh3FeedDownALa; 
-   TH3F* fh3FeedDownLaCone;
+  TH3F* fh3FeedDownLaCone;
   TH3F* fh3FeedDownALaCone;   
   TH1F* fh1MCProdRadiusK0s;
   TH1F* fh1MCProdRadiusLambda;
index d57684444314f7d31d5c842244d352106f555f8d..70c0c8d7cfd31edb8cfea40b8dbd66470c05d582 100644 (file)
 ClassImp(AliAnalysisTaskV0sInJets)
 
 // upper edges of centrality bins
-const Int_t AliAnalysisTaskV0sInJets::fgkiCentBinRanges[AliAnalysisTaskV0sInJets::fgkiNBinsCent] = {10, 30, 50, 80}; // Alice Zimmermann
+//const Int_t AliAnalysisTaskV0sInJets::fgkiCentBinRanges[AliAnalysisTaskV0sInJets::fgkiNBinsCent] = {10, 30, 50, 80}; // Alice Zimmermann
 //const Int_t AliAnalysisTaskV0sInJets::fgkiCentBinRanges[AliAnalysisTaskV0sInJets::fgkiNBinsCent] = {10, 20, 40, 60, 80}; // Vit Kucera, initial binning
 //const Int_t AliAnalysisTaskV0sInJets::fgkiCentBinRanges[AliAnalysisTaskV0sInJets::fgkiNBinsCent] = {5, 10, 20, 40, 60, 80}; // Iouri Belikov, LF analysis
-//const Int_t AliAnalysisTaskV0sInJets::fgkiCentBinRanges[AliAnalysisTaskV0sInJets::fgkiNBinsCent] = {10}; // only central
+const Int_t AliAnalysisTaskV0sInJets::fgkiCentBinRanges[AliAnalysisTaskV0sInJets::fgkiNBinsCent] = {10}; // only central
 
 // axis: pT of V0
-const Double_t AliAnalysisTaskV0sInJets::fgkdBinsPtV0[2] = {0, 30};
+const Double_t AliAnalysisTaskV0sInJets::fgkdBinsPtV0[2] = {0, 12};
 const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsPtV0 = sizeof(AliAnalysisTaskV0sInJets::fgkdBinsPtV0)/sizeof((AliAnalysisTaskV0sInJets::fgkdBinsPtV0)[0])-1;
 const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsPtV0Init = int(((AliAnalysisTaskV0sInJets::fgkdBinsPtV0)[AliAnalysisTaskV0sInJets::fgkiNBinsPtV0]-(AliAnalysisTaskV0sInJets::fgkdBinsPtV0)[0])/0.1); // bin width 0.1 GeV/c
 // axis: pT of jets
@@ -60,9 +60,9 @@ const Double_t AliAnalysisTaskV0sInJets::fgkdBinsPtJet[2] = {0, 100};
 const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsPtJet = sizeof(AliAnalysisTaskV0sInJets::fgkdBinsPtJet)/sizeof(AliAnalysisTaskV0sInJets::fgkdBinsPtJet[0])-1;
 const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsPtJetInit = int(((AliAnalysisTaskV0sInJets::fgkdBinsPtJet)[AliAnalysisTaskV0sInJets::fgkiNBinsPtJet]-(AliAnalysisTaskV0sInJets::fgkdBinsPtJet)[0])/5.); // bin width 5 GeV/c
 // axis: K0S invariant mass
-const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsMassK0s = 200;
-const Double_t AliAnalysisTaskV0sInJets::fgkdMassK0sMin = 0.4;
-const Double_t AliAnalysisTaskV0sInJets::fgkdMassK0sMax = 0.6;
+const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsMassK0s = 300;
+const Double_t AliAnalysisTaskV0sInJets::fgkdMassK0sMin = 0.35;
+const Double_t AliAnalysisTaskV0sInJets::fgkdMassK0sMax = 0.65;
 // axis: Lambda invariant mass
 const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsMassLambda = 200;
 const Double_t AliAnalysisTaskV0sInJets::fgkdMassLambdaMin = 1.05;
@@ -89,6 +89,7 @@ AliAnalysisTaskV0sInJets::AliAnalysisTaskV0sInJets():
   fdCutNTauMax(5),
 
   fsJetBranchName(0),
+  fsJetBgBranchName(0),
   fdCutPtJetMin(0),
   fdCutPtTrackMin(5),
   fdRadiusJet(0.4),
@@ -115,6 +116,7 @@ AliAnalysisTaskV0sInJets::AliAnalysisTaskV0sInJets():
   fh2EventCentTracks(0),
   fh1V0CandPerEvent(0),
   fh1NRndConeCent(0),
+  fh1NMedConeCent(0),
   fh1AreaExcluded(0),
 
   fh2CCK0s(0),
@@ -277,16 +279,19 @@ AliAnalysisTaskV0sInJets::AliAnalysisTaskV0sInJets():
       fhnV0InJetK0s[i] = 0;
       fhnV0InPerpK0s[i] = 0;
       fhnV0InRndK0s[i] = 0;
+      fhnV0InMedK0s[i] = 0;
       fhnV0OutJetK0s[i] = 0;
       fhnV0NoJetK0s[i] = 0;
       fhnV0InJetLambda[i] = 0;
       fhnV0InPerpLambda[i] = 0;
       fhnV0InRndLambda[i] = 0;
+      fhnV0InMedLambda[i] = 0;
       fhnV0OutJetLambda[i] = 0;
       fhnV0NoJetLambda[i] = 0;
       fhnV0InJetALambda[i] = 0;
       fhnV0InPerpALambda[i] = 0;
       fhnV0InRndALambda[i] = 0;
+      fhnV0InMedALambda[i] = 0;
       fhnV0OutJetALambda[i] = 0;
       fhnV0NoJetALambda[i] = 0;
 
@@ -309,6 +314,7 @@ AliAnalysisTaskV0sInJets::AliAnalysisTaskV0sInJets():
       fh1PhiJet[i] = 0;
       fh1NJetPerEvent[i] = 0;
       fh2EtaPhiRndCone[i] = 0;
+      fh2EtaPhiMedCone[i] = 0;
 
       fh1VtxZ[i] = 0;
       fh2VtxXY[i] = 0;
@@ -335,6 +341,7 @@ AliAnalysisTaskV0sInJets::AliAnalysisTaskV0sInJets(const char* name):
   fdCutNTauMax(5),
 
   fsJetBranchName(0),
+  fsJetBgBranchName(0),
   fdCutPtJetMin(0),
   fdCutPtTrackMin(5),
   fdRadiusJet(0.4),
@@ -360,6 +367,7 @@ AliAnalysisTaskV0sInJets::AliAnalysisTaskV0sInJets(const char* name):
   fh2EventCentTracks(0),
   fh1V0CandPerEvent(0),
   fh1NRndConeCent(0),
+  fh1NMedConeCent(0),
   fh1AreaExcluded(0),
 
   fh2CCK0s(0),
@@ -522,16 +530,19 @@ AliAnalysisTaskV0sInJets::AliAnalysisTaskV0sInJets(const char* name):
       fhnV0InJetK0s[i] = 0;
       fhnV0InPerpK0s[i] = 0;
       fhnV0InRndK0s[i] = 0;
+      fhnV0InMedK0s[i] = 0;
       fhnV0OutJetK0s[i] = 0;
       fhnV0NoJetK0s[i] = 0;
       fhnV0InJetLambda[i] = 0;
       fhnV0InPerpLambda[i] = 0;
       fhnV0InRndLambda[i] = 0;
+      fhnV0InMedLambda[i] = 0;
       fhnV0OutJetLambda[i] = 0;
       fhnV0NoJetLambda[i] = 0;
       fhnV0InJetALambda[i] = 0;
       fhnV0InPerpALambda[i] = 0;
       fhnV0InRndALambda[i] = 0;
+      fhnV0InMedALambda[i] = 0;
       fhnV0OutJetALambda[i] = 0;
       fhnV0NoJetALambda[i] = 0;
 
@@ -554,6 +565,7 @@ AliAnalysisTaskV0sInJets::AliAnalysisTaskV0sInJets(const char* name):
       fh1PhiJet[i] = 0;
       fh1NJetPerEvent[i] = 0;
       fh2EtaPhiRndCone[i] = 0;
+      fh2EtaPhiMedCone[i] = 0;
 
       fh1VtxZ[i] = 0;
       fh2VtxXY[i] = 0;
@@ -572,24 +584,24 @@ AliAnalysisTaskV0sInJets::AliAnalysisTaskV0sInJets(const char* name):
 
 AliAnalysisTaskV0sInJets::~AliAnalysisTaskV0sInJets()
 {
-/*
-  if (fBranchV0Rec)
-    fBranchV0Rec->Delete();
-  delete fBranchV0Rec;
-  fBranchV0Rec = 0;
-  if (fBranchV0Gen)
-    fBranchV0Gen->Delete();
-  delete fBranchV0Gen;
-  fBranchV0Gen = 0;
-  if (fBranchJet)
-    fBranchJet->Delete();
-  delete fBranchJet;
-  fBranchJet = 0;
-  if (fEventInfo)
-    fEventInfo->Delete();
-  delete fEventInfo;
-  fEventInfo = 0;
-*/
+  /*
+    if (fBranchV0Rec)
+      fBranchV0Rec->Delete();
+    delete fBranchV0Rec;
+    fBranchV0Rec = 0;
+    if (fBranchV0Gen)
+      fBranchV0Gen->Delete();
+    delete fBranchV0Gen;
+    fBranchV0Gen = 0;
+    if (fBranchJet)
+      fBranchJet->Delete();
+    delete fBranchJet;
+    fBranchJet = 0;
+    if (fEventInfo)
+      fEventInfo->Delete();
+    delete fEventInfo;
+    fEventInfo = 0;
+  */
   delete fRandom;
   fRandom = 0;
 }
@@ -601,39 +613,39 @@ void AliAnalysisTaskV0sInJets::UserCreateOutputObjects()
 
   fRandom = new TRandom3(0);
 
-/*
-  if (!fBranchV0Rec && fbTreeOutput)
-    {
-//      fBranchV0Rec = new TClonesArray("AliAODv0",0);
-      fBranchV0Rec = new TClonesArray("AliV0Object",0);
-      fBranchV0Rec->SetName("branch_V0Rec");
-    }
-  if (!fBranchV0Gen && fbTreeOutput)
-    {
-      fBranchV0Gen = new TClonesArray("AliAODMCParticle",0);
-      fBranchV0Gen->SetName("branch_V0Gen");
-    }
-  if (!fBranchJet && fbTreeOutput)
-    {
-//      fBranchJet = new TClonesArray("AliAODJet",0);
-      fBranchJet = new TClonesArray("AliJetObject",0);
-      fBranchJet->SetName("branch_Jet");
-    }
-  if (!fEventInfo && fbTreeOutput)
+  /*
+    if (!fBranchV0Rec && fbTreeOutput)
+      {
+  //      fBranchV0Rec = new TClonesArray("AliAODv0",0);
+        fBranchV0Rec = new TClonesArray("AliV0Object",0);
+        fBranchV0Rec->SetName("branch_V0Rec");
+      }
+    if (!fBranchV0Gen && fbTreeOutput)
+      {
+        fBranchV0Gen = new TClonesArray("AliAODMCParticle",0);
+        fBranchV0Gen->SetName("branch_V0Gen");
+      }
+    if (!fBranchJet && fbTreeOutput)
+      {
+  //      fBranchJet = new TClonesArray("AliAODJet",0);
+        fBranchJet = new TClonesArray("AliJetObject",0);
+        fBranchJet->SetName("branch_Jet");
+      }
+    if (!fEventInfo && fbTreeOutput)
+      {
+        fEventInfo = new AliEventInfoObject();
+        fEventInfo->SetName("eventInfo");
+      }
+    Int_t dSizeBuffer = 32000; // default 32000
+    if (fbTreeOutput)
     {
-      fEventInfo = new AliEventInfoObject();
-      fEventInfo->SetName("eventInfo");
+    ftreeOut = new TTree("treeV0","Tree V0");
+    ftreeOut->Branch("branch_V0Rec",&fBranchV0Rec,dSizeBuffer,2);
+    ftreeOut->Branch("branch_V0Gen",&fBranchV0Gen,dSizeBuffer,2);
+    ftreeOut->Branch("branch_Jet",&fBranchJet,dSizeBuffer,2);
+    ftreeOut->Branch("eventInfo",&fEventInfo,dSizeBuffer,2);
     }
-  Int_t dSizeBuffer = 32000; // default 32000
-  if (fbTreeOutput)
-  {
-  ftreeOut = new TTree("treeV0","Tree V0");
-  ftreeOut->Branch("branch_V0Rec",&fBranchV0Rec,dSizeBuffer,2);
-  ftreeOut->Branch("branch_V0Gen",&fBranchV0Gen,dSizeBuffer,2);
-  ftreeOut->Branch("branch_Jet",&fBranchJet,dSizeBuffer,2);
-  ftreeOut->Branch("eventInfo",&fEventInfo,dSizeBuffer,2);
-  }
-*/
+  */
 
   fOutputListStd = new TList();
   fOutputListStd->SetOwner();
@@ -661,6 +673,9 @@ void AliAnalysisTaskV0sInJets::UserCreateOutputObjects()
   fh1NRndConeCent = new TH1D("fh1NRndConeCent","Number of rnd. cones in centrality bins;centrality;counts",fgkiNBinsCent,0,fgkiNBinsCent);
   for (Int_t i = 0; i < fgkiNBinsCent; i++)
     fh1NRndConeCent->GetXaxis()->SetBinLabel(i+1,GetCentBinLabel(i).Data());
+  fh1NMedConeCent = new TH1D("fh1NMedConeCent","Number of med.-cl. cones in centrality bins;centrality;counts",fgkiNBinsCent,0,fgkiNBinsCent);
+  for (Int_t i = 0; i < fgkiNBinsCent; i++)
+    fh1NMedConeCent->GetXaxis()->SetBinLabel(i+1,GetCentBinLabel(i).Data());
   fh1AreaExcluded = new TH1D("fh1AreaExcluded","Area of excluded cones in centrality bins;centrality;area",fgkiNBinsCent,0,fgkiNBinsCent);
   for (Int_t i = 0; i < fgkiNBinsCent; i++)
     fh1AreaExcluded->GetXaxis()->SetBinLabel(i+1,GetCentBinLabel(i).Data());
@@ -668,6 +683,7 @@ void AliAnalysisTaskV0sInJets::UserCreateOutputObjects()
   fOutputListStd->Add(fh1EventCent);
   fOutputListStd->Add(fh1EventCent2);
   fOutputListStd->Add(fh1NRndConeCent);
+  fOutputListStd->Add(fh1NMedConeCent);
   fOutputListStd->Add(fh1AreaExcluded);
   fOutputListStd->Add(fh2EventCentTracks);
 
@@ -794,6 +810,8 @@ void AliAnalysisTaskV0sInJets::UserCreateOutputObjects()
       fOutputListStd->Add(fhnV0InPerpK0s[i]);
       fhnV0InRndK0s[i] = new THnSparseD(Form("fhnV0InRndK0s_%d",i),Form("K0s: Mass vs Pt in rnd. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsKIncl,xminKIncl,xmaxKIncl);
       fOutputListStd->Add(fhnV0InRndK0s[i]);
+      fhnV0InMedK0s[i] = new THnSparseD(Form("fhnV0InMedK0s_%d",i),Form("K0s: Mass vs Pt in med.-cl. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsKIncl,xminKIncl,xmaxKIncl);
+      fOutputListStd->Add(fhnV0InMedK0s[i]);
       fhnV0OutJetK0s[i] = new THnSparseD(Form("fhnV0OutJetK0s_%d",i),Form("K0s: Pt outside jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsKIncl,xminKIncl,xmaxKIncl);
       fOutputListStd->Add(fhnV0OutJetK0s[i]);
       fhnV0NoJetK0s[i] = new THnSparseD(Form("fhnV0NoJetK0s_%d",i),Form("K0s: Pt in jet-less events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsKIncl,xminKIncl,xmaxKIncl);
@@ -804,6 +822,8 @@ void AliAnalysisTaskV0sInJets::UserCreateOutputObjects()
       fOutputListStd->Add(fhnV0InPerpLambda[i]);
       fhnV0InRndLambda[i] = new THnSparseD(Form("fhnV0InRndLambda_%d",i),Form("Lambda: Mass vs Pt in rnd. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsLIncl,xminLIncl,xmaxLIncl);
       fOutputListStd->Add(fhnV0InRndLambda[i]);
+      fhnV0InMedLambda[i] = new THnSparseD(Form("fhnV0InMedLambda_%d",i),Form("Lambda: Mass vs Pt in med.-cl. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsLIncl,xminLIncl,xmaxLIncl);
+      fOutputListStd->Add(fhnV0InMedLambda[i]);
       fhnV0OutJetLambda[i] = new THnSparseD(Form("fhnV0OutJetLambda_%d",i),Form("Lambda: Pt outside jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsLIncl,xminLIncl,xmaxLIncl);
       fOutputListStd->Add(fhnV0OutJetLambda[i]);
       fhnV0NoJetLambda[i] = new THnSparseD(Form("fhnV0NoJetLambda_%d",i),Form("Lambda: Pt in jet-less events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsLIncl,xminLIncl,xmaxLIncl);
@@ -814,6 +834,8 @@ void AliAnalysisTaskV0sInJets::UserCreateOutputObjects()
       fOutputListStd->Add(fhnV0InPerpALambda[i]);
       fhnV0InRndALambda[i] = new THnSparseD(Form("fhnV0InRndALambda_%d",i),Form("ALambda: Mass vs Pt in rnd. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsLIncl,xminLIncl,xmaxLIncl);
       fOutputListStd->Add(fhnV0InRndALambda[i]);
+      fhnV0InMedALambda[i] = new THnSparseD(Form("fhnV0InMedALambda_%d",i),Form("ALambda: Mass vs Pt in med.-cl. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsLIncl,xminLIncl,xmaxLIncl);
+      fOutputListStd->Add(fhnV0InMedALambda[i]);
       fhnV0OutJetALambda[i] = new THnSparseD(Form("fhnV0OutJetALambda_%d",i),Form("ALambda: Pt outside jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsLIncl,xminLIncl,xmaxLIncl);
       fOutputListStd->Add(fhnV0OutJetALambda[i]);
       fhnV0NoJetALambda[i] = new THnSparseD(Form("fhnV0NoJetALambda_%d",i),Form("ALambda: Pt in jet-less events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})",GetCentBinLabel(i).Data()),iNDimIncl,binsLIncl,xminLIncl,xmaxLIncl);
@@ -856,6 +878,8 @@ void AliAnalysisTaskV0sInJets::UserCreateOutputObjects()
       fOutputListStd->Add(fh2EtaPtJet[i]);
       fh2EtaPhiRndCone[i] = new TH2D(Form("fh2EtaPhiRndCone_%d",i),Form("Rnd. cones: eta vs phi, cent: %s;#it{#eta} cone;#it{#phi} cone",GetCentBinLabel(i).Data()),80,-1.,1.,100,0.,TMath::TwoPi());
       fOutputListStd->Add(fh2EtaPhiRndCone[i]);
+      fh2EtaPhiMedCone[i] = new TH2D(Form("fh2EtaPhiMedCone_%d",i),Form("Med.-cl. cones: eta vs phi, cent: %s;#it{#eta} cone;#it{#phi} cone",GetCentBinLabel(i).Data()),80,-1.,1.,100,0.,TMath::TwoPi());
+      fOutputListStd->Add(fh2EtaPhiMedCone[i]);
       fh1PhiJet[i] = new TH1D(Form("fh1PhiJet_%d",i),Form("Jet phi spectrum, cent: %s;#it{#phi} jet",GetCentBinLabel(i).Data()),100,0.,TMath::TwoPi());
       fOutputListStd->Add(fh1PhiJet[i]);
       fh1NJetPerEvent[i] = new TH1D(Form("fh1NJetPerEvent_%d",i),Form("Number of selected jets per event, cent: %s;# jets;# events",GetCentBinLabel(i).Data()),100,0.,100.);
@@ -1197,17 +1221,17 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
 {
   // Main loop, called for each event
   if(fDebug>5) printf("TaskV0sInJets: UserExec: Start\n");
-/*
-  // reset branches for each event
-  if (fBranchV0Rec)
-    fBranchV0Rec->Clear();
-  if (fBranchV0Gen)
-    fBranchV0Gen->Clear();
-  if (fBranchJet)
-    fBranchJet->Clear();
-  if (fEventInfo)
-    fEventInfo->Reset();
-*/
+  /*
+    // reset branches for each event
+    if (fBranchV0Rec)
+      fBranchV0Rec->Clear();
+    if (fBranchV0Gen)
+      fBranchV0Gen->Clear();
+    if (fBranchJet)
+      fBranchJet->Clear();
+    if (fEventInfo)
+      fEventInfo->Reset();
+  */
   if (!fiAODAnalysis)
     return;
 
@@ -1284,6 +1308,11 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
 //  fdCentrality = fAODIn->GetHeader()->GetCentrality(); // event centrality
   fdCentrality = fAODIn->GetHeader()->GetCentralityP()->GetCentralityPercentile("V0M"); // event centrality
   Int_t iCentIndex = GetCentralityBinIndex(fdCentrality); // get index of centrality bin
+  if (iCentIndex<0)
+    {
+      if(fDebug>5) printf("TaskV0sInJets: Event is out of histogram range\n");
+      return;
+    }
   fh1EventCounterCut->Fill(2); // selected events (vertex, centrality)
   fh1EventCounterCutCent[iCentIndex]->Fill(2);
 
@@ -1421,6 +1450,7 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
 //  Int_t iNJetAll = 0; // number of reconstructed jets in fBranchJet
 //  iNJetAll = fBranchJet->GetEntriesFast(); // number of reconstructed jets
   TClonesArray* jetArray = 0; // object where the input jets are stored
+  TClonesArray* jetArrayBg = 0; // object where the kt clusters are stored
   Int_t iNJet = 0; // number of reconstructed jets in the input
   TClonesArray* jetArraySel = new TClonesArray("AliAODJet",0); // object where the selected jets are copied
   Int_t iNJetSel = 0; // number of selected reconstructed jets
@@ -1432,6 +1462,7 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
 //  AliJetObject* objectJet = 0;
   AliAODJet* jetPerp = 0; // pointer to a perp. cone
   AliAODJet* jetRnd = 0; // pointer to a rand. cone
+  AliAODJet* jetMed = 0; // pointer to a median cluster
   TVector3 vecJetMomentum; // 3D vector of jet momentum
 //  TVector3 vecPerpConeMomentum; // 3D vector of perpendicular cone momentum
 //  TVector3 vecRndConeMomentum; // 3D vector of random cone momentum
@@ -1454,6 +1485,16 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
           if(fDebug>2) printf("TaskV0sInJets: No jets in array\n");
           bJetEventGood = kFALSE;
         }
+      if (bJetEventGood)
+        {
+//          printf("TaskV0sInJets: Loading bg array of name: %s\n",fsJetBgBranchName.Data());
+          jetArrayBg = (TClonesArray*)(fAODOut->FindListObject(fsJetBgBranchName.Data())); // find object with jets in the output AOD
+          if (!jetArrayBg)
+            {
+              if(fDebug>0) printf("TaskV0sInJets: No bg array of name: %s\n",fsJetBgBranchName.Data());
+//              bJetEventGood = kFALSE;
+            }
+        }
     }
   else // no in-jet analysis
     bJetEventGood = kFALSE;
@@ -1524,16 +1565,16 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
           if (bPrintJetSelection)
             if(fDebug>7) printf("accepted\n");
           if(fDebug>5) printf("TaskV0sInJets: Jet %d with pt %.2f passed selection\n",iJet,jetSel->Pt());
-/*
-          if (fbTreeOutput)
-          {
-//          new ((*fBranchJet)[iNJetAll++]) AliAODJet(*((AliAODJet*)jetSel));
-          objectJet = new ((*fBranchJet)[iNJetAll++]) AliJetObject(jetSel); // copy selected jet to the array
-//          objectJet->SetPtLeadingTrack(dPtLeadTrack);
-          objectJet->SetRadius(fdRadiusJet);
-          objectJet = 0;
-          }
-*/
+          /*
+                    if (fbTreeOutput)
+                    {
+          //          new ((*fBranchJet)[iNJetAll++]) AliAODJet(*((AliAODJet*)jetSel));
+                    objectJet = new ((*fBranchJet)[iNJetAll++]) AliJetObject(jetSel); // copy selected jet to the array
+          //          objectJet->SetPtLeadingTrack(dPtLeadTrack);
+                    objectJet->SetRadius(fdRadiusJet);
+                    objectJet = 0;
+                    }
+          */
           TLorentzVector vecPerpPlus(*(jetSel->MomentumVector()));
           vecPerpPlus.RotateZ(TMath::Pi()/2.); // rotate vector by 90 deg around z
           TLorentzVector vecPerpMinus(*(jetSel->MomentumVector()));
@@ -1586,6 +1627,12 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
           fh1NRndConeCent->Fill(iCentIndex);
           fh2EtaPhiRndCone[iCentIndex]->Fill(jetRnd->Eta(),jetRnd->Phi());
         }
+      jetMed = GetMedianCluster(jetArrayBg,dJetEtaWindow);
+      if (jetMed)
+        {
+          fh1NMedConeCent->Fill(iCentIndex);
+          fh2EtaPhiMedCone[iCentIndex]->Fill(jetMed->Eta(),jetMed->Phi());
+        }
     }
 
   // Loading primary vertex info
@@ -1614,6 +1661,7 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
       Bool_t bIsInConeJet = kFALSE; // candidate within the jet cones
       Bool_t bIsInConePerp = kFALSE; // candidate within the perpendicular cone
       Bool_t bIsInConeRnd = kFALSE; // candidate within the random cone
+      Bool_t bIsInConeMed = kFALSE; // candidate within the median-cluster cone
       Bool_t bIsOutsideCones = kFALSE; // candidate outside excluded cones
 
       // Invariant mass calculation
@@ -1976,20 +2024,20 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
       if (!bIsCandidateK0s && !bIsCandidateLambda && !bIsCandidateALambda)
         continue;
 
-/*
-      if(fDebug>5) printf("TaskV0sInJets: Adding selected V0 to branch\n");
-      // Add selected candidates to the output tree branch
-      if ((bIsCandidateK0s || bIsCandidateLambda || bIsCandidateALambda) && fbTreeOutput)
-        {
-          objectV0 = new ((*fBranchV0Rec)[iNV0SelV0Rec++]) AliV0Object(v0,primVtx);
-//          new ((*fBranchV0Rec)[iNV0SelV0Rec++]) AliAODv0(*((AliAODv0*)v0));
-          objectV0->SetIsCandidateK0S(bIsCandidateK0s);
-          objectV0->SetIsCandidateLambda(bIsCandidateLambda);
-          objectV0->SetIsCandidateALambda(bIsCandidateALambda);
-          objectV0->SetNSigmaPosProton(dNSigmaPosProton);
-          objectV0->SetNSigmaNegProton(dNSigmaNegProton);
-        }
-*/
+      /*
+            if(fDebug>5) printf("TaskV0sInJets: Adding selected V0 to branch\n");
+            // Add selected candidates to the output tree branch
+            if ((bIsCandidateK0s || bIsCandidateLambda || bIsCandidateALambda) && fbTreeOutput)
+              {
+                objectV0 = new ((*fBranchV0Rec)[iNV0SelV0Rec++]) AliV0Object(v0,primVtx);
+      //          new ((*fBranchV0Rec)[iNV0SelV0Rec++]) AliAODv0(*((AliAODv0*)v0));
+                objectV0->SetIsCandidateK0S(bIsCandidateK0s);
+                objectV0->SetIsCandidateLambda(bIsCandidateLambda);
+                objectV0->SetIsCandidateALambda(bIsCandidateALambda);
+                objectV0->SetNSigmaPosProton(dNSigmaPosProton);
+                objectV0->SetNSigmaNegProton(dNSigmaNegProton);
+              }
+      */
 
       // Selection of V0s in jet cones, perpendicular cones, random cones, outside cones
       if (bJetEventGood && iNJetSel && (bIsCandidateK0s || bIsCandidateLambda || bIsCandidateALambda))
@@ -2031,6 +2079,16 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
                   bIsInConeRnd = kTRUE;
                 }
             }
+          // Selection of V0s in median-cluster cones
+          if (jetMed)
+            {
+              if(fDebug>5) printf("TaskV0sInJets: Searching for V0 %d %d in the med. cone\n",bIsCandidateK0s,bIsCandidateLambda);
+              if (IsParticleInCone(v0,jetMed,fdRadiusJet)) // V0 in med. cone?
+                {
+                  if(fDebug>5) printf("TaskV0sInJets: V0 %d %d found in the med. cone\n",bIsCandidateK0s,bIsCandidateLambda);
+                  bIsInConeMed = kTRUE;
+                }
+            }
           // Selection of V0s outside jet cones
           if(fDebug>5) printf("TaskV0sInJets: Searching for V0 %d %d outside jet cones\n",bIsCandidateK0s,bIsCandidateLambda);
           if (!OverlapWithJets(jetArraySel,v0,dRadiusExcludeCone)) // V0 oustide jet cones
@@ -2127,6 +2185,11 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
               Double_t valueKInRnd[3] = {dMassV0K0s,dPtV0,dEtaV0};
               fhnV0InRndK0s[iCentIndex]->Fill(valueKInRnd);
             }
+          if (bIsInConeMed)
+            {
+              Double_t valueKInMed[3] = {dMassV0K0s,dPtV0,dEtaV0};
+              fhnV0InMedK0s[iCentIndex]->Fill(valueKInMed);
+            }
           if (!iNJetSel)
             {
               Double_t valueKNoJet[3] = {dMassV0K0s,dPtV0,dEtaV0};
@@ -2170,6 +2233,11 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
               Double_t valueLInRnd[3] = {dMassV0Lambda,dPtV0,dEtaV0};
               fhnV0InRndLambda[iCentIndex]->Fill(valueLInRnd);
             }
+          if (bIsInConeMed)
+            {
+              Double_t valueLInMed[3] = {dMassV0Lambda,dPtV0,dEtaV0};
+              fhnV0InMedLambda[iCentIndex]->Fill(valueLInMed);
+            }
           if (!iNJetSel)
             {
               Double_t valueLNoJet[3] = {dMassV0Lambda,dPtV0,dEtaV0};
@@ -2213,6 +2281,11 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
               Double_t valueALInRnd[3] = {dMassV0ALambda,dPtV0,dEtaV0};
               fhnV0InRndALambda[iCentIndex]->Fill(valueALInRnd);
             }
+          if (bIsInConeMed)
+            {
+              Double_t valueALInMed[3] = {dMassV0ALambda,dPtV0,dEtaV0};
+              fhnV0InMedALambda[iCentIndex]->Fill(valueALInMed);
+            }
           if (!iNJetSel)
             {
               Double_t valueALNoJet[3] = {dMassV0ALambda,dPtV0,dEtaV0};
@@ -2321,16 +2394,16 @@ void AliAnalysisTaskV0sInJets::UserExec(Option_t *)
 //          Double_t dResolutionV0Eta = particleMCMother->Eta()-v0->Eta();
 //          Double_t dResolutionV0Phi = particleMCMother->Phi()-v0->Phi();
 
-/*
-          if (fbTreeOutput)
-          {
-          objectV0->SetPtTrue(dPtV0Gen);
-          objectV0->SetEtaTrue(dEtaV0Gen);
-          objectV0->SetPhiTrue(dPhiV0Gen);
-          objectV0->SetPDGCode(iPdgCodeMother);
-          objectV0->SetPDGCodeMother(iPdgCodeMotherOfMother);
-          }
-*/
+          /*
+                    if (fbTreeOutput)
+                    {
+                    objectV0->SetPtTrue(dPtV0Gen);
+                    objectV0->SetEtaTrue(dEtaV0Gen);
+                    objectV0->SetPhiTrue(dPhiV0Gen);
+                    objectV0->SetPDGCode(iPdgCodeMother);
+                    objectV0->SetPDGCodeMother(iPdgCodeMotherOfMother);
+                    }
+          */
 
           // K0s
 //          if (bIsCandidateK0s && bIsInPeakK0s) // selected candidates in peak
@@ -2841,7 +2914,7 @@ Bool_t AliAnalysisTaskV0sInJets::OverlapWithJets(const TClonesArray* array, cons
   return kFALSE;
 }
 
-AliAODJet* AliAnalysisTaskV0sInJets::GetRandomCone(const TClonesArray* array, Double_t dEtaMax, Double_t dDistance) const
+AliAODJet* AliAnalysisTaskV0sInJets::GetRandomCone(const TClonesArray* array, Double_t dEtaConeMax, Double_t dDistance) const
 {
 // generate a random cone which does not overlap with selected jets
 //  printf("Generating random cone...\n");
@@ -2853,7 +2926,7 @@ AliAODJet* AliAnalysisTaskV0sInJets::GetRandomCone(const TClonesArray* array, Do
   for (Int_t iTry=0; iTry<iNTrialsMax; iTry++)
     {
 //      printf("Try %d\n",iTry);
-      dEta = dEtaMax*(2*fRandom->Rndm()-1.); // random eta in [-dEtaMax,+dEtaMax]
+      dEta = dEtaConeMax*(2*fRandom->Rndm()-1.); // random eta in [-dEtaConeMax,+dEtaConeMax]
       dPhi = TMath::TwoPi()*fRandom->Rndm(); // random phi in [0,2*Pi]
       vecCone.SetPtEtaPhiM(1.,dEta,dPhi,0.);
       part = new AliAODJet(vecCone);
@@ -2871,6 +2944,75 @@ AliAODJet* AliAnalysisTaskV0sInJets::GetRandomCone(const TClonesArray* array, Do
   return part;
 }
 
+AliAODJet* AliAnalysisTaskV0sInJets::GetMedianCluster(const TClonesArray* array, Double_t dEtaConeMax) const
+{
+// sort kt clusters by pT/area and return the middle one, based on code in AliAnalysisTaskJetChem
+  if (!array)
+    {
+      if(fDebug>0) printf("AliAnalysisTaskV0sInJets::GetMedianCluster: Error: No array\n");
+      return NULL;
+    }
+  Int_t iNCl = array->GetEntriesFast();
+//  Int_t iNClE = array->GetEntries();
+  if (iNCl<3) // need at least 3 clusters (skipping 2 highest)
+    {
+      if(fDebug>2) printf("AliAnalysisTaskV0sInJets::GetMedianCluster: Warning: Too little clusters\n");
+      return NULL;
+    }
+//  printf("AliAnalysisTaskV0sInJets::GetMedianCluster: EntriesFast: %d, Entries: %d\n",iNCl,iNClE);
+
+  // get list of densities
+  Double_t* dBgDensity = new Double_t[iNCl];
+  Int_t* iIndexList = new Int_t[iNCl];
+  for (Int_t ij=0; ij<iNCl; ij++)
+    {
+      AliAODJet* clusterBg = (AliAODJet*)(array->At(ij));
+      if (!clusterBg)
+        {
+//          printf("AliAnalysisTaskV0sInJets::GetMedianCluster: cluster %d/%d not ok\n",ij,iNCl);
+          delete[] dBgDensity;
+          delete[] iIndexList;
+          return NULL;
+        }
+      Double_t dPtBg = clusterBg->Pt();
+      Double_t dAreaBg = clusterBg->EffectiveAreaCharged();
+
+      Double_t dDensityBg = 0;
+      if(dAreaBg>0)
+        dDensityBg = dPtBg/dAreaBg;
+      dBgDensity[ij] = dDensityBg;
+      iIndexList[ij] = ij;
+    }
+  // sort iIndexList by dBgDensity in descending order
+  TMath::Sort(iNCl, dBgDensity, iIndexList);
+
+  // get median cluster with median density
+  AliAODJet* clusterMed = 0;
+  Int_t iIndexMed = 0;
+  if (TMath::Odd(iNCl)) // odd number of clusters
+    {
+      iIndexMed = iIndexList[(Int_t) (0.5*(iNCl+1))]; // = (n - skip + 1)/2 + 1, skip = 2
+    }
+  else // even number: picking randomly one of the two closest to median
+    {
+      Int_t iIndexMed1 = iIndexList[(Int_t) (0.5*iNCl)]; // = (n - skip)/2 + 1, skip = 2
+      Int_t iIndexMed2 = iIndexList[(Int_t) (0.5*iNCl+1)]; // = (n - skip)/2 + 1 + 1, skip = 2
+      iIndexMed = ( (fRandom->Rndm()>0.5) ? iIndexMed1 : iIndexMed2 ); // select one randomly to avoid adding areas
+    }
+//  printf("AliAnalysisTaskV0sInJets::GetMedianCluster: getting median cluster %d/%d ok\n",iIndexMed,iNCl);
+  clusterMed = (AliAODJet*)(array->At(iIndexMed));
+
+  delete[] dBgDensity;
+  delete[] iIndexList;
+
+//  printf("AliAnalysisTaskV0sInJets::GetMedianCluster: checking eta cut %g\n",dEtaConeMax);
+//  printf("AliAnalysisTaskV0sInJets::GetMedianCluster: checking eta cut |%g| < %g?\n",clusterMed->Eta(),dEtaConeMax);
+  if (TMath::Abs(clusterMed->Eta())>dEtaConeMax)
+    return NULL;
+//  printf("AliAnalysisTaskV0sInJets::GetMedianCluster: cluster %d/%d passed\n",iIndexMed,iNCl);
+  return clusterMed;
+}
+
 Double_t AliAnalysisTaskV0sInJets::AreaCircSegment(Double_t dRadius, Double_t dDistance) const
 {
 // calculate area of a circular segment defined by the circle radius and the (oriented) distance between the secant line and the circle centre
index 2988586c5f4ca1933ef4ed51b1d2227c30263f04..899db3a908074b3d3576c5e62bb742c6256db4de 100644 (file)
@@ -30,6 +30,7 @@ public:
 
   void SetTypeAOD(Int_t type = 1) {fiAODAnalysis = type;}
   void SetJetBranchName(char* line){fsJetBranchName = line;}
+  void SetJetBgBranchName(char* line){fsJetBgBranchName = line;}
   void SetCuts(Double_t z = 10,Double_t r = 1,Double_t cL = 0,Double_t cH = 80){fdCutVertexZ = z; fdCutVertexR2 = r*r;fdCutCentLow = cL;fdCutCentHigh = cH;}
   void SetPtJetMin(Double_t ptMin = 0){fdCutPtJetMin = ptMin;}
   void SetPtTrackMin(Double_t ptMin = 0){fdCutPtTrackMin = ptMin;}
@@ -43,7 +44,8 @@ public:
   void FillCandidates(Double_t mK, Double_t mL, Double_t mAL, Bool_t isK, Bool_t isL, Bool_t isAL, Int_t iCut, Int_t iCent);
   Bool_t IsParticleInCone(const AliVParticle* part1, const AliVParticle* part2, Double_t dRMax) const; // decides whether a particle is inside a jet cone
   Bool_t OverlapWithJets(const TClonesArray* array, const AliVParticle* cone, Double_t dDistance) const; // decides whether a cone overlaps with other jets
-  AliAODJet* GetRandomCone(const TClonesArray* array, Double_t dEtaMax, Double_t dDistance) const; // generate a random cone which does not overlap with selected jets
+  AliAODJet* GetRandomCone(const TClonesArray* array, Double_t dEtaConeMax, Double_t dDistance) const; // generate a random cone which does not overlap with selected jets
+  AliAODJet* GetMedianCluster(const TClonesArray* array, Double_t dEtaConeMax) const; // get median kt cluster
   Double_t AreaCircSegment(Double_t dRadius, Double_t dDistance) const; // area of circular segment
 
   void SetCutDCAToPrimVtxMin(Double_t val = 0.1){fdCutDCAToPrimVtxMin = val;}
@@ -59,7 +61,7 @@ public:
   static Double_t MassPeakSigmaOld(Double_t pt, Int_t particle);
 
   // upper edges of centrality bins
-  static const Int_t fgkiNBinsCent = 4; // number of centrality bins
+  static const Int_t fgkiNBinsCent = 1; // number of centrality bins
   static const Int_t fgkiCentBinRanges[fgkiNBinsCent]; // upper edges of centrality bins
   // axis: pT of V0
   static const Double_t fgkdBinsPtV0[2]; // [GeV/c] minimum and maximum or desired binning of the axis (intended for the rebinned axis)
@@ -79,13 +81,13 @@ public:
   static const Double_t fgkdMassLambdaMax; // maximum
 
 private:
-  AliAODEvent*  fAODIn;  // Input AOD event
-  AliAODEvent*  fAODOut;  // Output AOD event
-  TList*      fOutputListStd; // Output list for standard analysis results
-  TList*      fOutputListQA; // Output list for quality assurance
-  TList*      fOutputListCuts; // Output list for checking cuts
-  TList*      fOutputListMC; // Output list for MC related results
-//  TTree*      ftreeOut; // output tree
+  AliAODEvent*  fAODIn; //! Input AOD event
+  AliAODEvent*  fAODOut; //! Output AOD event
+  TList*      fOutputListStd; //! Output list for standard analysis results
+  TList*      fOutputListQA; //! Output list for quality assurance
+  TList*      fOutputListCuts; //! Output list for checking cuts
+  TList*      fOutputListMC; //! Output list for MC related results
+//  TTree*      ftreeOut; //! output tree
 
   Int_t       fiAODAnalysis; // switch for input AOD/ESD
 
@@ -97,6 +99,7 @@ private:
   Double_t fdCutNTauMax; // [tau] max proper lifetime in multiples of the mean lifetime
   // jet selection
   TString     fsJetBranchName; // name of the branch with jets
+  TString     fsJetBgBranchName; // name of the branch with kt clusters used for the rho calculation
   Double_t     fdCutPtJetMin; // [GeV/c] minimum jet pt
   Double_t     fdCutPtTrackMin; // [GeV/c] minimum pt of leading jet-track
   Double_t    fdRadiusJet; // R of jet finder used for finding V0s in the jet cone
@@ -104,7 +107,7 @@ private:
 
   Bool_t      fbMCAnalysis; // switch for the analysis of simulated data
 //  Bool_t      fbTreeOutput; // switch for the output tree
-  TRandom*   fRandom; // random number generator
+  TRandom*   fRandom; //! random-number generator
 
   // event cuts
   Double_t fdCutVertexZ; // [cm] maximum |z| of primary vertex
@@ -113,248 +116,253 @@ private:
   Double_t fdCutCentHigh; // [%] maximum centrality
 /*
   // output branches
-  TClonesArray* fBranchV0Rec; // output branch for reconstructed V0s
-  TClonesArray* fBranchV0Gen; // output branch for generated V0s
-  TClonesArray* fBranchJet; // output branch for selected jets
-  AliEventInfoObject* fEventInfo; // class to store info about events
+  TClonesArray* fBranchV0Rec; //! output branch for reconstructed V0s
+  TClonesArray* fBranchV0Gen; //! output branch for generated V0s
+  TClonesArray* fBranchJet; //! output branch for selected jets
+  AliEventInfoObject* fEventInfo; //! class to store info about events
 */
-  Double_t fdCentrality;
+  Double_t fdCentrality; //!
 
   // event histograms
-  TH1D*       fh1EventCounterCut; // number of events for different selection steps
-  TH1D*       fh1EventCounterCutCent[fgkiNBinsCent]; // number of events for different selection steps and different centralities
-  TH1D*       fh1EventCent; // number of events for different centralities
-  TH1D*       fh1EventCent2; // number of events for different centralities
-  TH2D*       fh2EventCentTracks; // number of tracks vs centrality
-  TH1D*       fh1VtxZ[fgkiNBinsCent]; // z coordinate of the primary vertex
-  TH2D*       fh2VtxXY[fgkiNBinsCent]; // xy coordinates of the primary vertex
-  TH1D*       fh1V0CandPerEvent; // number of V0 cand per event
+  TH1D*       fh1EventCounterCut; //! number of events for different selection steps
+  TH1D*       fh1EventCounterCutCent[fgkiNBinsCent]; //! number of events for different selection steps and different centralities
+  TH1D*       fh1EventCent; //! number of events for different centralities
+  TH1D*       fh1EventCent2; //! number of events for different centralities
+  TH2D*       fh2EventCentTracks; //! number of tracks vs centrality
+  TH1D*       fh1VtxZ[fgkiNBinsCent]; //! z coordinate of the primary vertex
+  TH2D*       fh2VtxXY[fgkiNBinsCent]; //! xy coordinates of the primary vertex
+  TH1D*       fh1V0CandPerEvent; //! number of V0 cand per event
 
   // jet histograms
-  TH1D*       fh1PtJet[fgkiNBinsCent]; // pt spectra of jets for normalisation of in-jet V0 spectra
-  TH1D*       fh1EtaJet[fgkiNBinsCent]; // jet eta
-  TH2D*       fh2EtaPtJet[fgkiNBinsCent]; // jet eta-pT
-  TH1D*       fh1PhiJet[fgkiNBinsCent]; // jet phi
-  TH1D*       fh1NJetPerEvent[fgkiNBinsCent]; // number of jets per event
-  TH1D*       fh1NRndConeCent; // number of generated random cones in centrality bins
-  TH2D*       fh2EtaPhiRndCone[fgkiNBinsCent]; // jet eta-pT
-  TH1D*       fh1AreaExcluded; // area of excluded cones for outside-cones V0s
+  TH1D*       fh1PtJet[fgkiNBinsCent]; //! pt spectra of jets for normalisation of in-jet V0 spectra
+  TH1D*       fh1EtaJet[fgkiNBinsCent]; //! jet eta
+  TH2D*       fh2EtaPtJet[fgkiNBinsCent]; //! jet eta-pT
+  TH1D*       fh1PhiJet[fgkiNBinsCent]; //! jet phi
+  TH1D*       fh1NJetPerEvent[fgkiNBinsCent]; //! number of jets per event
+  TH1D*       fh1NRndConeCent; //! number of generated random cones in centrality bins
+  TH2D*       fh2EtaPhiRndCone[fgkiNBinsCent]; //! random cone eta-pT
+  TH1D*       fh1NMedConeCent; //! number of found median-cluster cones in centrality bins
+  TH2D*       fh2EtaPhiMedCone[fgkiNBinsCent]; //! median-cluster cone eta-phi
+  TH1D*       fh1AreaExcluded; //! area of excluded cones for outside-cones V0s
 
   static const Int_t fgkiNCategV0 = 17; // number of V0 selection steps
 
   // QA histograms
   static const Int_t fgkiNQAIndeces = 2; // 0 - before cuts, 1 - after cuts
-  TH1D* fh1QAV0Status[fgkiNQAIndeces]; // online vs offline reconstructed V0 candidates
-  TH1D* fh1QAV0TPCRefit[fgkiNQAIndeces]; // TPC refit on vs off
-  TH1D* fh1QAV0TPCRows[fgkiNQAIndeces]; // crossed TPC pad rows
-  TH1D* fh1QAV0TPCFindable[fgkiNQAIndeces]; // findable clusters
-  TH1D* fh1QAV0TPCRowsFind[fgkiNQAIndeces]; // ratio rows/clusters
-  TH1D* fh1QAV0Eta[fgkiNQAIndeces]; // pseudorapidity
-  TH2D* fh2QAV0EtaRows[fgkiNQAIndeces]; // pseudorapidity vs TPC rows
-  TH2D* fh2QAV0PtRows[fgkiNQAIndeces]; // pt vs TPC rows
-  TH2D* fh2QAV0PhiRows[fgkiNQAIndeces]; // azimuth vs TPC rows
-  TH2D* fh2QAV0NClRows[fgkiNQAIndeces]; // clusters vs TPC rows
-  TH2D* fh2QAV0EtaNCl[fgkiNQAIndeces]; // pseudorapidity vs clusters
+  TH1D* fh1QAV0Status[fgkiNQAIndeces]; //! online vs offline reconstructed V0 candidates
+  TH1D* fh1QAV0TPCRefit[fgkiNQAIndeces]; //! TPC refit on vs off
+  TH1D* fh1QAV0TPCRows[fgkiNQAIndeces]; //! crossed TPC pad rows
+  TH1D* fh1QAV0TPCFindable[fgkiNQAIndeces]; //! findable clusters
+  TH1D* fh1QAV0TPCRowsFind[fgkiNQAIndeces]; //! ratio rows/clusters
+  TH1D* fh1QAV0Eta[fgkiNQAIndeces]; //! pseudorapidity
+  TH2D* fh2QAV0EtaRows[fgkiNQAIndeces]; //! pseudorapidity vs TPC rows
+  TH2D* fh2QAV0PtRows[fgkiNQAIndeces]; //! pt vs TPC rows
+  TH2D* fh2QAV0PhiRows[fgkiNQAIndeces]; //! azimuth vs TPC rows
+  TH2D* fh2QAV0NClRows[fgkiNQAIndeces]; //! clusters vs TPC rows
+  TH2D* fh2QAV0EtaNCl[fgkiNQAIndeces]; //! pseudorapidity vs clusters
 
   // K0s
-  TH1D* fh1V0CounterCentK0s[fgkiNBinsCent]; // number of K0s candidates after various cuts
-  TH1D* fh1V0InvMassK0sAll[fgkiNCategV0]; // V0 invariant mass, selection steps
-  TH2D* fh2QAV0EtaPtK0sPeak[fgkiNQAIndeces]; // daughters pseudorapidity vs V0 pt, in mass peak
-  TH2D* fh2QAV0EtaEtaK0s[fgkiNQAIndeces]; // daughters pseudorapidity vs pseudorapidity
-  TH2D* fh2QAV0PhiPhiK0s[fgkiNQAIndeces]; // daughters azimuth vs azimuth
-  TH1D* fh1QAV0RapK0s[fgkiNQAIndeces]; // V0 rapidity
-  TH2D* fh2QAV0PtPtK0sPeak[fgkiNQAIndeces]; // daughters pt vs pt, in mass peak
-  TH2D* fh2ArmPodK0s[fgkiNQAIndeces]; // Armenteros-Podolanski
-  TH1D* fh1V0CandPerEventCentK0s[fgkiNBinsCent]; // number of K0s candidates per event, in centrality bins
-  TH1D* fh1V0InvMassK0sCent[fgkiNBinsCent]; // V0 invariant mass, in centrality bins
+  TH1D* fh1V0CounterCentK0s[fgkiNBinsCent]; //! number of K0s candidates after various cuts
+  TH1D* fh1V0InvMassK0sAll[fgkiNCategV0]; //! V0 invariant mass, selection steps
+  TH2D* fh2QAV0EtaPtK0sPeak[fgkiNQAIndeces]; //! daughters pseudorapidity vs V0 pt, in mass peak
+  TH2D* fh2QAV0EtaEtaK0s[fgkiNQAIndeces]; //! daughters pseudorapidity vs pseudorapidity
+  TH2D* fh2QAV0PhiPhiK0s[fgkiNQAIndeces]; //! daughters azimuth vs azimuth
+  TH1D* fh1QAV0RapK0s[fgkiNQAIndeces]; //! V0 rapidity
+  TH2D* fh2QAV0PtPtK0sPeak[fgkiNQAIndeces]; //! daughters pt vs pt, in mass peak
+  TH2D* fh2ArmPodK0s[fgkiNQAIndeces]; //! Armenteros-Podolanski
+  TH1D* fh1V0CandPerEventCentK0s[fgkiNBinsCent]; //! number of K0s candidates per event, in centrality bins
+  TH1D* fh1V0InvMassK0sCent[fgkiNBinsCent]; //! V0 invariant mass, in centrality bins
   // K0s Inclusive
-  THnSparse* fhnV0InclusiveK0s[fgkiNBinsCent]; // V0 inv mass vs pt before and after cuts, in centrality bins
+  THnSparse* fhnV0InclusiveK0s[fgkiNBinsCent]; //! V0 inv mass vs pt before and after cuts, in centrality bins
   // K0s Cones
-  THnSparse* fhnV0InJetK0s[fgkiNBinsCent]; // V0 invariant mass vs V0 pt vs jet pt, in centrality bins
-  THnSparse* fhnV0InPerpK0s[fgkiNBinsCent]; // V0 invariant mass vs V0 pt vs jet pt, in centrality bins
-  THnSparse* fhnV0InRndK0s[fgkiNBinsCent]; // V0 invariant mass vs V0 pt vs jet pt, in centrality bins
-  THnSparse* fhnV0OutJetK0s[fgkiNBinsCent]; // V0 invariant mass vs V0 pt, in centrality bins
-  THnSparse* fhnV0NoJetK0s[fgkiNBinsCent]; // V0 invariant mass vs V0 pt, in centrality bins
-
-  TH2D* fh2V0PtJetAngleK0s[fgkiNBinsCent]; // xi vs angle V0-jet, in centrality bins
-  TH1D* fh1DCAInK0s[fgkiNBinsCent]; // DCA between daughters of V0 inside jets, in centrality bins
-  TH1D* fh1DCAOutK0s[fgkiNBinsCent]; // DCA between daughters of V0 outside jets, in centrality bins
-  TH1D* fh1DeltaZK0s[fgkiNBinsCent]; // z-distance between V0 vertex and primary vertex, in centrality bins
+  THnSparse* fhnV0InJetK0s[fgkiNBinsCent]; //! V0 invariant mass vs V0 pt vs jet pt, in centrality bins
+  THnSparse* fhnV0InPerpK0s[fgkiNBinsCent]; //! V0 invariant mass vs V0 pt vs jet pt, in centrality bins
+  THnSparse* fhnV0InRndK0s[fgkiNBinsCent]; //! V0 invariant mass vs V0 pt vs jet pt, in centrality bins
+  THnSparse* fhnV0InMedK0s[fgkiNBinsCent]; //! V0 invariant mass vs V0 pt vs jet pt, in centrality bins
+  THnSparse* fhnV0OutJetK0s[fgkiNBinsCent]; //! V0 invariant mass vs V0 pt, in centrality bins
+  THnSparse* fhnV0NoJetK0s[fgkiNBinsCent]; //! V0 invariant mass vs V0 pt, in centrality bins
+
+  TH2D* fh2V0PtJetAngleK0s[fgkiNBinsCent]; //! pt jet vs angle V0-jet, in centrality bins
+  TH1D* fh1DCAInK0s[fgkiNBinsCent]; //! DCA between daughters of V0 inside jets, in centrality bins
+  TH1D* fh1DCAOutK0s[fgkiNBinsCent]; //! DCA between daughters of V0 outside jets, in centrality bins
+  TH1D* fh1DeltaZK0s[fgkiNBinsCent]; //! z-distance between V0 vertex and primary vertex, in centrality bins
   // MC histograms
   // inclusive
-  TH1D* fh1V0K0sPtMCGen[fgkiNBinsCent]; // pt spectrum of all generated K0s in event
-  TH2D* fh2V0K0sPtMassMCRec[fgkiNBinsCent]; // pt-mass spectrum of successfully reconstructed K0s in event
-  TH1D* fh1V0K0sPtMCRecFalse[fgkiNBinsCent]; // pt spectrum of false reconstructed K0s in event
+  TH1D* fh1V0K0sPtMCGen[fgkiNBinsCent]; //! pt spectrum of all generated K0s in event
+  TH2D* fh2V0K0sPtMassMCRec[fgkiNBinsCent]; //! pt-mass spectrum of successfully reconstructed K0s in event
+  TH1D* fh1V0K0sPtMCRecFalse[fgkiNBinsCent]; //! pt spectrum of false reconstructed K0s in event
   // inclusive eta-pT efficiency
-  TH2D* fh2V0K0sEtaPtMCGen[fgkiNBinsCent]; // eta-pt spectrum of all generated K0s in event
-  THnSparse* fh3V0K0sEtaPtMassMCRec[fgkiNBinsCent]; // eta-pt-mass spectrum of successfully reconstructed K0s in event
+  TH2D* fh2V0K0sEtaPtMCGen[fgkiNBinsCent]; //! eta-pt spectrum of all generated K0s in event
+  THnSparse* fh3V0K0sEtaPtMassMCRec[fgkiNBinsCent]; //! eta-pt-mass spectrum of successfully reconstructed K0s in event
   // MC daughter eta inclusive
-//  THnSparse* fhnV0K0sInclDaughterEtaPtPtMCGen[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 generated
-  THnSparse* fhnV0K0sInclDaughterEtaPtPtMCRec[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 reconstructed
+//  THnSparse* fhnV0K0sInclDaughterEtaPtPtMCGen[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 generated
+  THnSparse* fhnV0K0sInclDaughterEtaPtPtMCRec[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 reconstructed
   // in jets
-  TH2D* fh2V0K0sInJetPtMCGen[fgkiNBinsCent]; // pt spectrum of generated K0s in jet
-  THnSparse* fh3V0K0sInJetPtMassMCRec[fgkiNBinsCent]; // mass-pt spectrum of successfully reconstructed K0s in jet
+  TH2D* fh2V0K0sInJetPtMCGen[fgkiNBinsCent]; //! pt spectrum of generated K0s in jet
+  THnSparse* fh3V0K0sInJetPtMassMCRec[fgkiNBinsCent]; //! mass-pt spectrum of successfully reconstructed K0s in jet
   // in jets eta-pT efficiency
-  THnSparse* fh3V0K0sInJetEtaPtMCGen[fgkiNBinsCent]; // eta-pt spectrum of generated K0s in jet
-  THnSparse* fh4V0K0sInJetEtaPtMassMCRec[fgkiNBinsCent]; // mass-eta-pt spectrum of successfully reconstructed K0s in jet
+  THnSparse* fh3V0K0sInJetEtaPtMCGen[fgkiNBinsCent]; //! eta-pt spectrum of generated K0s in jet
+  THnSparse* fh4V0K0sInJetEtaPtMassMCRec[fgkiNBinsCent]; //! mass-eta-pt spectrum of successfully reconstructed K0s in jet
   // MC daughter eta in JC
-//  THnSparse* fhnV0K0sInJetsDaughterEtaPtPtMCGen[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 generated
-  THnSparse* fhnV0K0sInJetsDaughterEtaPtPtMCRec[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 reconstructed
+//  THnSparse* fhnV0K0sInJetsDaughterEtaPtPtMCGen[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 generated
+  THnSparse* fhnV0K0sInJetsDaughterEtaPtPtMCRec[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 reconstructed
 
   // resolution
-  TH2D* fh2V0K0sMCResolMPt[fgkiNBinsCent]; // K0s mass resolution vs pt
-  TH2D* fh2V0K0sMCPtGenPtRec[fgkiNBinsCent]; // K0s generated pt vs reconstructed pt
+  TH2D* fh2V0K0sMCResolMPt[fgkiNBinsCent]; //! K0s mass resolution vs pt
+  TH2D* fh2V0K0sMCPtGenPtRec[fgkiNBinsCent]; //! K0s generated pt vs reconstructed pt
 
   // Lambda
-  TH1D* fh1V0CounterCentLambda[fgkiNBinsCent]; // number of Lambda candidates after various cuts
-  TH1D* fh1V0InvMassLambdaAll[fgkiNCategV0];
-  TH2D* fh2QAV0EtaPtLambdaPeak[fgkiNQAIndeces];
-  TH2D* fh2QAV0EtaEtaLambda[fgkiNQAIndeces];
-  TH2D* fh2QAV0PhiPhiLambda[fgkiNQAIndeces];
-  TH1D* fh1QAV0RapLambda[fgkiNQAIndeces];
-  TH2D* fh2QAV0PtPtLambdaPeak[fgkiNQAIndeces];
-  TH2D* fh2ArmPodLambda[fgkiNQAIndeces];
-  TH1D* fh1V0CandPerEventCentLambda[fgkiNBinsCent];
-  TH1D* fh1V0InvMassLambdaCent[fgkiNBinsCent];
+  TH1D* fh1V0CounterCentLambda[fgkiNBinsCent]; //! number of Lambda candidates after various cuts
+  TH1D* fh1V0InvMassLambdaAll[fgkiNCategV0]; //!
+  TH2D* fh2QAV0EtaPtLambdaPeak[fgkiNQAIndeces]; //!
+  TH2D* fh2QAV0EtaEtaLambda[fgkiNQAIndeces]; //!
+  TH2D* fh2QAV0PhiPhiLambda[fgkiNQAIndeces]; //!
+  TH1D* fh1QAV0RapLambda[fgkiNQAIndeces]; //!
+  TH2D* fh2QAV0PtPtLambdaPeak[fgkiNQAIndeces]; //!
+  TH2D* fh2ArmPodLambda[fgkiNQAIndeces]; //!
+  TH1D* fh1V0CandPerEventCentLambda[fgkiNBinsCent]; //!
+  TH1D* fh1V0InvMassLambdaCent[fgkiNBinsCent]; //!
   // Lambda Inclusive
-  THnSparse* fhnV0InclusiveLambda[fgkiNBinsCent];
+  THnSparse* fhnV0InclusiveLambda[fgkiNBinsCent]; //!
   // Lambda Cones
-  THnSparse* fhnV0InJetLambda[fgkiNBinsCent];
-  THnSparse* fhnV0InPerpLambda[fgkiNBinsCent];
-  THnSparse* fhnV0InRndLambda[fgkiNBinsCent];
-  THnSparse* fhnV0OutJetLambda[fgkiNBinsCent];
-  THnSparse* fhnV0NoJetLambda[fgkiNBinsCent];
-
-  TH2D* fh2V0PtJetAngleLambda[fgkiNBinsCent];
-  TH1D* fh1DCAInLambda[fgkiNBinsCent];
-  TH1D* fh1DCAOutLambda[fgkiNBinsCent];
-  TH1D* fh1DeltaZLambda[fgkiNBinsCent];
+  THnSparse* fhnV0InJetLambda[fgkiNBinsCent]; //!
+  THnSparse* fhnV0InPerpLambda[fgkiNBinsCent]; //!
+  THnSparse* fhnV0InRndLambda[fgkiNBinsCent]; //!
+  THnSparse* fhnV0InMedLambda[fgkiNBinsCent]; //!
+  THnSparse* fhnV0OutJetLambda[fgkiNBinsCent]; //!
+  THnSparse* fhnV0NoJetLambda[fgkiNBinsCent]; //!
+
+  TH2D* fh2V0PtJetAngleLambda[fgkiNBinsCent]; //!
+  TH1D* fh1DCAInLambda[fgkiNBinsCent]; //!
+  TH1D* fh1DCAOutLambda[fgkiNBinsCent]; //!
+  TH1D* fh1DeltaZLambda[fgkiNBinsCent]; //!
   // MC histograms
   // inclusive
-  TH1D* fh1V0LambdaPtMCGen[fgkiNBinsCent];
-  TH2D* fh2V0LambdaPtMassMCRec[fgkiNBinsCent];
-  TH1D* fh1V0LambdaPtMCRecFalse[fgkiNBinsCent];
+  TH1D* fh1V0LambdaPtMCGen[fgkiNBinsCent]; //!
+  TH2D* fh2V0LambdaPtMassMCRec[fgkiNBinsCent]; //!
+  TH1D* fh1V0LambdaPtMCRecFalse[fgkiNBinsCent]; //!
   // inclusive eta-pT efficiency
-  TH2D* fh2V0LambdaEtaPtMCGen[fgkiNBinsCent];
-  THnSparse* fh3V0LambdaEtaPtMassMCRec[fgkiNBinsCent];
+  TH2D* fh2V0LambdaEtaPtMCGen[fgkiNBinsCent]; //!
+  THnSparse* fh3V0LambdaEtaPtMassMCRec[fgkiNBinsCent]; //!
   // MC daughter eta inclusive
-//  THnSparse* fhnV0LambdaInclDaughterEtaPtPtMCGen[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 generated
-  THnSparse* fhnV0LambdaInclDaughterEtaPtPtMCRec[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 reconstructed
+//  THnSparse* fhnV0LambdaInclDaughterEtaPtPtMCGen[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 generated
+  THnSparse* fhnV0LambdaInclDaughterEtaPtPtMCRec[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 reconstructed
   // in jets
-  TH2D* fh2V0LambdaInJetPtMCGen[fgkiNBinsCent];
-  THnSparse* fh3V0LambdaInJetPtMassMCRec[fgkiNBinsCent];
+  TH2D* fh2V0LambdaInJetPtMCGen[fgkiNBinsCent]; //!
+  THnSparse* fh3V0LambdaInJetPtMassMCRec[fgkiNBinsCent]; //!
   // in jets eta-pT efficiency
-  THnSparse* fh3V0LambdaInJetEtaPtMCGen[fgkiNBinsCent];
-  THnSparse* fh4V0LambdaInJetEtaPtMassMCRec[fgkiNBinsCent];
+  THnSparse* fh3V0LambdaInJetEtaPtMCGen[fgkiNBinsCent]; //!
+  THnSparse* fh4V0LambdaInJetEtaPtMassMCRec[fgkiNBinsCent]; //!
   // MC daughter eta in JC
-//  THnSparse* fhnV0LambdaInJetsDaughterEtaPtPtMCGen[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 generated
-  THnSparse* fhnV0LambdaInJetsDaughterEtaPtPtMCRec[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 reconstructed
+//  THnSparse* fhnV0LambdaInJetsDaughterEtaPtPtMCGen[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 generated
+  THnSparse* fhnV0LambdaInJetsDaughterEtaPtPtMCRec[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 reconstructed
 
   // resolution
-  TH2D* fh2V0LambdaMCResolMPt[fgkiNBinsCent];
-  TH2D* fh2V0LambdaMCPtGenPtRec[fgkiNBinsCent];
+  TH2D* fh2V0LambdaMCResolMPt[fgkiNBinsCent]; //!
+  TH2D* fh2V0LambdaMCPtGenPtRec[fgkiNBinsCent]; //!
   // feed-down
-  THnSparseD* fhnV0LambdaInclMCFD[fgkiNBinsCent];
-  THnSparseD* fhnV0LambdaInJetsMCFD[fgkiNBinsCent];
-  THnSparseD* fhnV0LambdaBulkMCFD[fgkiNBinsCent];
-  TH1D* fh1V0XiPtMCGen[fgkiNBinsCent];
+  THnSparseD* fhnV0LambdaInclMCFD[fgkiNBinsCent]; //!
+  THnSparseD* fhnV0LambdaInJetsMCFD[fgkiNBinsCent]; //!
+  THnSparseD* fhnV0LambdaBulkMCFD[fgkiNBinsCent]; //!
+  TH1D* fh1V0XiPtMCGen[fgkiNBinsCent]; //!
 
   // ALambda
-  TH1D* fh1V0CounterCentALambda[fgkiNBinsCent]; // number of ALambda candidates after various cuts
-  TH1D* fh1V0InvMassALambdaAll[fgkiNCategV0];
-  TH2D* fh2QAV0EtaPtALambdaPeak[fgkiNQAIndeces];
-  TH2D* fh2QAV0EtaEtaALambda[fgkiNQAIndeces];
-  TH2D* fh2QAV0PhiPhiALambda[fgkiNQAIndeces];
-  TH1D* fh1QAV0RapALambda[fgkiNQAIndeces];
-  TH2D* fh2QAV0PtPtALambdaPeak[fgkiNQAIndeces];
-  TH2D* fh2ArmPodALambda[fgkiNQAIndeces];
-  TH1D* fh1V0CandPerEventCentALambda[fgkiNBinsCent];
-  TH1D* fh1V0InvMassALambdaCent[fgkiNBinsCent];
-  TH1D* fh1V0ALambdaPt[fgkiNBinsCent];
+  TH1D* fh1V0CounterCentALambda[fgkiNBinsCent]; //! number of ALambda candidates after various cuts
+  TH1D* fh1V0InvMassALambdaAll[fgkiNCategV0]; //!
+  TH2D* fh2QAV0EtaPtALambdaPeak[fgkiNQAIndeces]; //!
+  TH2D* fh2QAV0EtaEtaALambda[fgkiNQAIndeces]; //!
+  TH2D* fh2QAV0PhiPhiALambda[fgkiNQAIndeces]; //!
+  TH1D* fh1QAV0RapALambda[fgkiNQAIndeces]; //!
+  TH2D* fh2QAV0PtPtALambdaPeak[fgkiNQAIndeces]; //!
+  TH2D* fh2ArmPodALambda[fgkiNQAIndeces]; //!
+  TH1D* fh1V0CandPerEventCentALambda[fgkiNBinsCent]; //!
+  TH1D* fh1V0InvMassALambdaCent[fgkiNBinsCent]; //!
+  TH1D* fh1V0ALambdaPt[fgkiNBinsCent]; //!
   // ALambda Inclusive
-  THnSparse* fhnV0InclusiveALambda[fgkiNBinsCent];
+  THnSparse* fhnV0InclusiveALambda[fgkiNBinsCent]; //!
   // ALambda Cones
-  THnSparse* fhnV0InJetALambda[fgkiNBinsCent];
-  THnSparse* fhnV0InPerpALambda[fgkiNBinsCent];
-  THnSparse* fhnV0InRndALambda[fgkiNBinsCent];
-  THnSparse* fhnV0OutJetALambda[fgkiNBinsCent];
-  THnSparse* fhnV0NoJetALambda[fgkiNBinsCent];
-
-  TH2D* fh2V0PtJetAngleALambda[fgkiNBinsCent];
-  TH1D* fh1DCAInALambda[fgkiNBinsCent];
-  TH1D* fh1DCAOutALambda[fgkiNBinsCent];
-  TH1D* fh1DeltaZALambda[fgkiNBinsCent];
+  THnSparse* fhnV0InJetALambda[fgkiNBinsCent]; //!
+  THnSparse* fhnV0InPerpALambda[fgkiNBinsCent]; //!
+  THnSparse* fhnV0InRndALambda[fgkiNBinsCent]; //!
+  THnSparse* fhnV0InMedALambda[fgkiNBinsCent]; //!
+  THnSparse* fhnV0OutJetALambda[fgkiNBinsCent]; //!
+  THnSparse* fhnV0NoJetALambda[fgkiNBinsCent]; //!
+
+  TH2D* fh2V0PtJetAngleALambda[fgkiNBinsCent]; //!
+  TH1D* fh1DCAInALambda[fgkiNBinsCent]; //!
+  TH1D* fh1DCAOutALambda[fgkiNBinsCent]; //!
+  TH1D* fh1DeltaZALambda[fgkiNBinsCent]; //!
   // MC histograms
   // inclusive
-  TH1D* fh1V0ALambdaPtMCGen[fgkiNBinsCent];
-  TH1D* fh1V0ALambdaPtMCRec[fgkiNBinsCent];
-  TH2D* fh2V0ALambdaPtMassMCRec[fgkiNBinsCent];
-  TH1D* fh1V0ALambdaPtMCRecFalse[fgkiNBinsCent];
+  TH1D* fh1V0ALambdaPtMCGen[fgkiNBinsCent]; //!
+  TH1D* fh1V0ALambdaPtMCRec[fgkiNBinsCent]; //!
+  TH2D* fh2V0ALambdaPtMassMCRec[fgkiNBinsCent]; //!
+  TH1D* fh1V0ALambdaPtMCRecFalse[fgkiNBinsCent]; //!
   // inclusive eta-pT efficiency
-  TH2D* fh2V0ALambdaEtaPtMCGen[fgkiNBinsCent];
-  THnSparse* fh3V0ALambdaEtaPtMassMCRec[fgkiNBinsCent];
+  TH2D* fh2V0ALambdaEtaPtMCGen[fgkiNBinsCent]; //!
+  THnSparse* fh3V0ALambdaEtaPtMassMCRec[fgkiNBinsCent]; //!
   // MC daughter eta inclusive
-//  THnSparse* fhnV0ALambdaInclDaughterEtaPtPtMCGen[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 generated
-  THnSparse* fhnV0ALambdaInclDaughterEtaPtPtMCRec[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 reconstructed
+//  THnSparse* fhnV0ALambdaInclDaughterEtaPtPtMCGen[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 generated
+  THnSparse* fhnV0ALambdaInclDaughterEtaPtPtMCRec[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 reconstructed
   // in jets
-  TH2D* fh2V0ALambdaInJetPtMCGen[fgkiNBinsCent];
-  TH2D* fh2V0ALambdaInJetPtMCRec[fgkiNBinsCent];
-  THnSparse* fh3V0ALambdaInJetPtMassMCRec[fgkiNBinsCent];
+  TH2D* fh2V0ALambdaInJetPtMCGen[fgkiNBinsCent]; //!
+  TH2D* fh2V0ALambdaInJetPtMCRec[fgkiNBinsCent]; //!
+  THnSparse* fh3V0ALambdaInJetPtMassMCRec[fgkiNBinsCent]; //!
   // in jets eta-pT efficiency
-  THnSparse* fh3V0ALambdaInJetEtaPtMCGen[fgkiNBinsCent];
-  THnSparse* fh4V0ALambdaInJetEtaPtMassMCRec[fgkiNBinsCent];
+  THnSparse* fh3V0ALambdaInJetEtaPtMCGen[fgkiNBinsCent]; //!
+  THnSparse* fh4V0ALambdaInJetEtaPtMassMCRec[fgkiNBinsCent]; //!
   // MC daughter eta in JC
-//  THnSparse* fhnV0ALambdaInJetsDaughterEtaPtPtMCGen[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 generated
-  THnSparse* fhnV0ALambdaInJetsDaughterEtaPtPtMCRec[fgkiNBinsCent]; // eta_daughter-pt_daughter-pt_V0 reconstructed
+//  THnSparse* fhnV0ALambdaInJetsDaughterEtaPtPtMCGen[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 generated
+  THnSparse* fhnV0ALambdaInJetsDaughterEtaPtPtMCRec[fgkiNBinsCent]; //! eta_daughter-pt_daughter-pt_V0 reconstructed
 
   // resolution
-  TH2D* fh2V0ALambdaMCResolMPt[fgkiNBinsCent];
-  TH2D* fh2V0ALambdaMCPtGenPtRec[fgkiNBinsCent];
+  TH2D* fh2V0ALambdaMCResolMPt[fgkiNBinsCent]; //!
+  TH2D* fh2V0ALambdaMCPtGenPtRec[fgkiNBinsCent]; //!
   // feed-down
-  THnSparseD* fhnV0ALambdaInclMCFD[fgkiNBinsCent];
-  THnSparseD* fhnV0ALambdaInJetsMCFD[fgkiNBinsCent];
-  THnSparseD* fhnV0ALambdaBulkMCFD[fgkiNBinsCent];
-  TH1D* fh1V0AXiPtMCGen[fgkiNBinsCent];
-
-  TH1D* fh1QAV0Pt[fgkiNQAIndeces]; // pt
-  TH1D* fh1QAV0Charge[fgkiNQAIndeces]; // charge
-  TH1D* fh1QAV0DCAVtx[fgkiNQAIndeces]; // DCA of daughters to prim vtx
-  TH1D* fh1QAV0DCAV0[fgkiNQAIndeces]; // DCA between daughters
-  TH1D* fh1QAV0Cos[fgkiNQAIndeces]; // cosine of pointing angle (CPA)
-  TH1D* fh1QAV0R[fgkiNQAIndeces]; // radial distance between prim vtx and decay vertex
-  TH1D* fh1QACTau2D[fgkiNQAIndeces]; // lifetime calculated in xy
-  TH1D* fh1QACTau3D[fgkiNQAIndeces]; // lifetime calculated in xyz
-  TH2D* fh2ArmPod[fgkiNQAIndeces]; // Armenteros-Podolanski
-  TH2D* fh2CCK0s; // K0s candidates in Lambda peak
-  TH2D* fh2CCLambda; // Lambda candidates in K0s peak
-  THnSparse* fh3CCMassCorrelBoth; // mass correlation of candidates
-  THnSparse* fh3CCMassCorrelKNotL; // mass correlation of candidates
-  THnSparse* fh3CCMassCorrelLNotK; // mass correlation of candidates
+  THnSparseD* fhnV0ALambdaInclMCFD[fgkiNBinsCent]; //!
+  THnSparseD* fhnV0ALambdaInJetsMCFD[fgkiNBinsCent]; //!
+  THnSparseD* fhnV0ALambdaBulkMCFD[fgkiNBinsCent]; //!
+  TH1D* fh1V0AXiPtMCGen[fgkiNBinsCent]; //!
+
+  TH1D* fh1QAV0Pt[fgkiNQAIndeces]; //! pt
+  TH1D* fh1QAV0Charge[fgkiNQAIndeces]; //! charge
+  TH1D* fh1QAV0DCAVtx[fgkiNQAIndeces]; //! DCA of daughters to prim vtx
+  TH1D* fh1QAV0DCAV0[fgkiNQAIndeces]; //! DCA between daughters
+  TH1D* fh1QAV0Cos[fgkiNQAIndeces]; //! cosine of pointing angle (CPA)
+  TH1D* fh1QAV0R[fgkiNQAIndeces]; //! radial distance between prim vtx and decay vertex
+  TH1D* fh1QACTau2D[fgkiNQAIndeces]; //! lifetime calculated in xy
+  TH1D* fh1QACTau3D[fgkiNQAIndeces]; //! lifetime calculated in xyz
+  TH2D* fh2ArmPod[fgkiNQAIndeces]; //! Armenteros-Podolanski
+  TH2D* fh2CCK0s; //! K0s candidates in Lambda peak
+  TH2D* fh2CCLambda; //! Lambda candidates in K0s peak
+  THnSparse* fh3CCMassCorrelBoth; //! mass correlation of candidates
+  THnSparse* fh3CCMassCorrelKNotL; //! mass correlation of candidates
+  THnSparse* fh3CCMassCorrelLNotK; //! mass correlation of candidates
 
   // Cut tuning
   // crossed/findable, daughter pt, dca, cpa, r, pseudorapidity, y, decay length, PID sigma
-  TH2D* fh2CutTPCRowsK0s[fgkiNQAIndeces]; // inv mass vs TPC rows
-  TH2D* fh2CutTPCRowsLambda[fgkiNQAIndeces];
-  TH2D* fh2CutPtPosK0s[fgkiNQAIndeces]; // inv mass vs pt of positive daughter
-  TH2D* fh2CutPtNegK0s[fgkiNQAIndeces]; // inv mass vs pt of negative daughter
-  TH2D* fh2CutPtPosLambda[fgkiNQAIndeces];
-  TH2D* fh2CutPtNegLambda[fgkiNQAIndeces];
-  TH2D* fh2CutDCAVtx[fgkiNQAIndeces]; // inv mass vs DCA of daughters to prim vtx
-  TH2D* fh2CutDCAV0[fgkiNQAIndeces]; // inv mass vs DCA between daughters
-  TH2D* fh2CutCos[fgkiNQAIndeces]; // inv mass vs CPA
-  TH2D* fh2CutR[fgkiNQAIndeces]; // inv mass vs R
-  TH2D* fh2CutEtaK0s[fgkiNQAIndeces]; // inv mass vs pseudorapidity
-  TH2D* fh2CutEtaLambda[fgkiNQAIndeces];
-  TH2D* fh2CutRapK0s[fgkiNQAIndeces]; // inv mass vs rapidity
-  TH2D* fh2CutRapLambda[fgkiNQAIndeces];
-  TH2D* fh2CutCTauK0s[fgkiNQAIndeces]; // inv mass vs lifetime
-  TH2D* fh2CutCTauLambda[fgkiNQAIndeces];
-  TH2D* fh2CutPIDPosK0s[fgkiNQAIndeces]; // inv mass vs number of dE/dx sigmas for positive daughter
-  TH2D* fh2CutPIDNegK0s[fgkiNQAIndeces]; // inv mass vs number of dE/dx sigmas for negative daughter
-  TH2D* fh2CutPIDPosLambda[fgkiNQAIndeces];
-  TH2D* fh2CutPIDNegLambda[fgkiNQAIndeces];
-
-  TH2D* fh2Tau3DVs2D[fgkiNQAIndeces]; // pt vs ratio 3D lifetime / 2D lifetime
+  TH2D* fh2CutTPCRowsK0s[fgkiNQAIndeces]; //! inv mass vs TPC rows
+  TH2D* fh2CutTPCRowsLambda[fgkiNQAIndeces]; //!
+  TH2D* fh2CutPtPosK0s[fgkiNQAIndeces]; //! inv mass vs pt of positive daughter
+  TH2D* fh2CutPtNegK0s[fgkiNQAIndeces]; //! inv mass vs pt of negative daughter
+  TH2D* fh2CutPtPosLambda[fgkiNQAIndeces]; //!
+  TH2D* fh2CutPtNegLambda[fgkiNQAIndeces]; //!
+  TH2D* fh2CutDCAVtx[fgkiNQAIndeces]; //! inv mass vs DCA of daughters to prim vtx
+  TH2D* fh2CutDCAV0[fgkiNQAIndeces]; //! inv mass vs DCA between daughters
+  TH2D* fh2CutCos[fgkiNQAIndeces]; //! inv mass vs CPA
+  TH2D* fh2CutR[fgkiNQAIndeces]; //! inv mass vs R
+  TH2D* fh2CutEtaK0s[fgkiNQAIndeces]; //! inv mass vs pseudorapidity
+  TH2D* fh2CutEtaLambda[fgkiNQAIndeces]; //!
+  TH2D* fh2CutRapK0s[fgkiNQAIndeces]; //! inv mass vs rapidity
+  TH2D* fh2CutRapLambda[fgkiNQAIndeces]; //!
+  TH2D* fh2CutCTauK0s[fgkiNQAIndeces]; //! inv mass vs lifetime
+  TH2D* fh2CutCTauLambda[fgkiNQAIndeces]; //!
+  TH2D* fh2CutPIDPosK0s[fgkiNQAIndeces]; //! inv mass vs number of dE/dx sigmas for positive daughter
+  TH2D* fh2CutPIDNegK0s[fgkiNQAIndeces]; //! inv mass vs number of dE/dx sigmas for negative daughter
+  TH2D* fh2CutPIDPosLambda[fgkiNQAIndeces]; //!
+  TH2D* fh2CutPIDNegLambda[fgkiNQAIndeces]; //!
+
+  TH2D* fh2Tau3DVs2D[fgkiNQAIndeces]; //! pt vs ratio 3D lifetime / 2D lifetime
 
   AliAnalysisTaskV0sInJets(const AliAnalysisTaskV0sInJets&); // not implemented
   AliAnalysisTaskV0sInJets& operator=(const AliAnalysisTaskV0sInJets&); // not implemented
index 5ae16fcfb72553e1478690ae9c2ea7ba434e1754..3f25390dc4d24a07778f11268ce1045cc8a2f0c6 100644 (file)
@@ -1,4 +1,4 @@
-AliAnalysisTaskJetChem *AddTaskJetChem(const char* recJetsBranch = "clustersAOD_ANTIKT02_B2_Filter00768_Cut00150_Skip00", Int_t eventClass = 1, Int_t K0type = AliAnalysisTaskJetChem::kOffl, Int_t Latype = AliAnalysisTaskJetChem::kOffl, Int_t ALatype = AliAnalysisTaskJetChem::kOffl, Bool_t IsArmenterosSelected = kTRUE, Bool_t IsJetPtBiasSelected = kTRUE, Double_t jetradius = 0.2, Double_t V0EtaCut = 0.7, Double_t jetEtaCut = 0.5, Bool_t IsMC = kFALSE, Double_t DeltaVtxZCut = 0.1, Int_t filtermask = 768)
+AliAnalysisTaskJetChem *AddTaskJetChem(const char* recJetsBranch = "clustersAOD_ANTIKT02_B2_Filter00768_Cut00150_Skip00", Int_t eventClass = 1, Int_t K0type = AliAnalysisTaskJetChem::kOffl, Int_t Latype = AliAnalysisTaskJetChem::kOffl, Int_t ALatype = AliAnalysisTaskJetChem::kOffl, Bool_t IsArmenterosSelected = kTRUE, Bool_t IsJetPtBiasSelected = kTRUE, Double_t jetradius = 0.2, Double_t V0EtaCut = 0.7, Double_t jetEtaCut = 0.5, Bool_t IsMC = kFALSE, Double_t DeltaVtxZCut = 0.1, Int_t filtermask = 768, Int_t fdebug = -1)
 {
   // Creates a JetChem task,
   // configures it and adds it to the analysis manager.
@@ -27,14 +27,14 @@ AliAnalysisTaskJetChem *AddTaskJetChem(const char* recJetsBranch = "clustersAOD_
   //===========================================================================
   AliAnalysisTaskJetChem *task = new AliAnalysisTaskJetChem("TaskJetChem");
 
-  Int_t debug = -1; // debug level
+  Int_t debug = fdebug; // debug level
   if(debug>=0) task->SetDebugLevel(debug);
   
   TString branchRecJets(recJetsBranch);
   if(!branchRecJets.Contains("noRecJets")) task->SetBranchRecJets(branchRecJets);
 
   // Double_t V0EtaCut, Double_t jetEtaCut, Bool_t IsMC, Double_t DeltaVtxZCut can be set externally
-
+  task->SetCutJetEta(jetEtaCut);
   task->SetDeltaZVertexCut(DeltaVtxZCut);
   task->SetBranchRecBackClusters("clustersAOD_KT04_B0_Filter00768_Cut00150_Skip00"); 
   //task->SetEventSelectionMask(AliVEvent::kMB); //for 2010 Pb-Pb data !!
@@ -50,13 +50,13 @@ AliAnalysisTaskJetChem *AddTaskJetChem(const char* recJetsBranch = "clustersAOD_
   if(Latype == AliAnalysisTaskJetChem::kOnFlyPrim || AliAnalysisTaskJetChem::kOfflPrim) task->SetFilterMaskLa(768);
   if(ALatype == AliAnalysisTaskJetChem::kOnFlyPrim || AliAnalysisTaskJetChem::kOfflPrim) task->SetFilterMaskALa(768);
 
-  task->SetFFRadius(radius); //jet cone size
+  task->SetFFRadius(jetradius); //jet cone size
   task->SetFilterMask(filtermask);//2011 Track FilterMask
 
   //Cuts---------------------------------
   
   task->SetTrackCuts(0.15, -0.9, 0.9, 0., 2*TMath::Pi());// (pt Cut, daughtertrack rap's, phi min max cuts)
-  task->SetJetCuts(5., -jetEtaCut, jetEtaCut, 0., 2*TMath::Pi());//(jet pt Cut, jet acceptance, phi min max cuts)
+  task->SetJetCuts(5., (-1)*jetEtaCut, jetEtaCut, 0., 2*TMath::Pi());//(jet pt Cut, jet acceptance, phi min max cuts)
 
   task->SetCuttrackPosEta(0.8);
   task->SetCuttrackNegEta(0.8);
index 1c33557c1687d5f13cbd50f07765a86b76363f0b..549c12cf64eaa72e1e291799774d23b83ae6e486 100644 (file)
@@ -186,6 +186,7 @@ AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF()
    ,fQATrackHistosRecEffGen(0)  
    ,fQATrackHistosRecEffRec(0)
    ,fQATrackHistosSecRec(0)   
+   ,fQATrackHistosSecRecSSc(0)   
    ,fQATrackHistosRecEffGenPi(0)  
    ,fQATrackHistosRecEffGenPro(0) 
    ,fQATrackHistosRecEffGenK(0)   
@@ -205,8 +206,16 @@ AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF()
    ,fQATrackHistosSecRecMu(0)  
    ,fQATrackHistosSecRecProGFL(0) 
    ,fQATrackHistosSecRecKGFL(0)
+   ,fQATrackHistosSecRecPiSSc(0)  
+   ,fQATrackHistosSecRecProSSc(0) 
+   ,fQATrackHistosSecRecKSSc(0)   
+   ,fQATrackHistosSecRecElSSc(0)  
+   ,fQATrackHistosSecRecMuSSc(0)  
+   ,fQATrackHistosSecRecProGFLSSc(0) 
+   ,fQATrackHistosSecRecKGFLSSc(0)
    ,fFFHistosRecEffRec(0)
    ,fFFHistosSecRec(0)
+   ,fFFHistosSecRecSSc(0)
    ,fFFHistosRecEffRecPi(0) 
    ,fFFHistosRecEffRecPro(0)
    ,fFFHistosRecEffRecK(0)  
@@ -221,6 +230,13 @@ AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF()
    ,fFFHistosSecRecMu(0) 
    ,fFFHistosSecRecProGFL(0)   
    ,fFFHistosSecRecKGFL(0)
+   ,fFFHistosSecRecPiSSc(0)    
+   ,fFFHistosSecRecProSSc(0)   
+   ,fFFHistosSecRecKSSc(0)     
+   ,fFFHistosSecRecElSSc(0)    
+   ,fFFHistosSecRecMuSSc(0) 
+   ,fFFHistosSecRecProGFLSSc(0)   
+   ,fFFHistosSecRecKGFLSSc(0)
    ,fRandom(0)
 {
    // default constructor
@@ -349,7 +365,8 @@ AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const char *name)
   ,fh2PtRecVsGenSec(0)
   ,fQATrackHistosRecEffGen(0)  
   ,fQATrackHistosRecEffRec(0)
-  ,fQATrackHistosSecRec(0) 
+  ,fQATrackHistosSecRec(0)
+  ,fQATrackHistosSecRecSSc(0)    
   ,fQATrackHistosRecEffGenPi(0)  
   ,fQATrackHistosRecEffGenPro(0) 
   ,fQATrackHistosRecEffGenK(0)   
@@ -369,8 +386,16 @@ AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const char *name)
   ,fQATrackHistosSecRecMu(0)
   ,fQATrackHistosSecRecProGFL(0) 
   ,fQATrackHistosSecRecKGFL(0)
+  ,fQATrackHistosSecRecPiSSc(0)  
+  ,fQATrackHistosSecRecProSSc(0) 
+  ,fQATrackHistosSecRecKSSc(0)   
+  ,fQATrackHistosSecRecElSSc(0)  
+  ,fQATrackHistosSecRecMuSSc(0)  
+  ,fQATrackHistosSecRecProGFLSSc(0) 
+  ,fQATrackHistosSecRecKGFLSSc(0)
   ,fFFHistosRecEffRec(0)
   ,fFFHistosSecRec(0)
+  ,fFFHistosSecRecSSc(0)
   ,fFFHistosRecEffRecPi(0) 
   ,fFFHistosRecEffRecPro(0)
   ,fFFHistosRecEffRecK(0)  
@@ -385,6 +410,13 @@ AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const char *name)
   ,fFFHistosSecRecMu(0)
   ,fFFHistosSecRecProGFL(0)   
   ,fFFHistosSecRecKGFL(0)  
+  ,fFFHistosSecRecPiSSc(0)    
+  ,fFFHistosSecRecProSSc(0)   
+  ,fFFHistosSecRecKSSc(0)     
+  ,fFFHistosSecRecElSSc(0)    
+  ,fFFHistosSecRecMuSSc(0) 
+  ,fFFHistosSecRecProGFLSSc(0)   
+  ,fFFHistosSecRecKGFLSSc(0)
   ,fRandom(0)
 {
   // constructor
@@ -521,7 +553,8 @@ AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const  AliAnalysisTaskIDFFTCF &co
   ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
   ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)  
   ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)  
-  ,fQATrackHistosSecRec(copy.fQATrackHistosSecRec)  
+  ,fQATrackHistosSecRec(copy.fQATrackHistosSecRec)
+  ,fQATrackHistosSecRecSSc(copy.fQATrackHistosSecRecSSc)   
   ,fQATrackHistosRecEffGenPi(copy.fQATrackHistosRecEffGenPi)  
   ,fQATrackHistosRecEffGenPro(copy.fQATrackHistosRecEffGenPro) 
   ,fQATrackHistosRecEffGenK(copy.fQATrackHistosRecEffGenK)
@@ -541,8 +574,16 @@ AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const  AliAnalysisTaskIDFFTCF &co
   ,fQATrackHistosSecRecMu(copy.fQATrackHistosSecRecMu) 
   ,fQATrackHistosSecRecProGFL(copy.fQATrackHistosSecRecProGFL) 
   ,fQATrackHistosSecRecKGFL(copy.fQATrackHistosSecRecKGFL)
+  ,fQATrackHistosSecRecPiSSc(copy.fQATrackHistosSecRecPiSSc)      
+  ,fQATrackHistosSecRecProSSc(copy.fQATrackHistosSecRecProSSc)   
+  ,fQATrackHistosSecRecKSSc(copy.fQATrackHistosSecRecKSSc) 
+  ,fQATrackHistosSecRecElSSc(copy.fQATrackHistosSecRecElSSc)     
+  ,fQATrackHistosSecRecMuSSc(copy.fQATrackHistosSecRecMuSSc)    
+  ,fQATrackHistosSecRecProGFLSSc(copy.fQATrackHistosSecRecProGFLSSc) 
+  ,fQATrackHistosSecRecKGFLSSc(copy.fQATrackHistosSecRecKGFLSSc)
   ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)  
   ,fFFHistosSecRec(copy.fFFHistosSecRec)   
+  ,fFFHistosSecRecSSc(copy.fFFHistosSecRecSSc)   
   ,fFFHistosRecEffRecPi(copy.fFFHistosRecEffRecPi)  
   ,fFFHistosRecEffRecPro(copy.fFFHistosRecEffRecPro)
   ,fFFHistosRecEffRecK(copy.fFFHistosRecEffRecK)  
@@ -557,6 +598,13 @@ AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const  AliAnalysisTaskIDFFTCF &co
   ,fFFHistosSecRecMu(copy.fFFHistosSecRecMu)
   ,fFFHistosSecRecProGFL(copy.fFFHistosSecRecProGFL)   
   ,fFFHistosSecRecKGFL(copy.fFFHistosSecRecKGFL)  
+  ,fFFHistosSecRecPiSSc(copy.fFFHistosSecRecPiSSc)
+  ,fFFHistosSecRecProSSc(copy.fFFHistosSecRecProSSc)   
+  ,fFFHistosSecRecKSSc(copy.fFFHistosSecRecKSSc)
+  ,fFFHistosSecRecElSSc(copy.fFFHistosSecRecElSSc) 
+  ,fFFHistosSecRecMuSSc(copy.fFFHistosSecRecMuSSc)
+  ,fFFHistosSecRecProGFLSSc(copy.fFFHistosSecRecProGFLSSc)
+  ,fFFHistosSecRecKGFLSSc(copy.fFFHistosSecRecKGFLSSc)
   ,fRandom(copy.fRandom)
 {
   // copy constructor
@@ -691,6 +739,7 @@ AliAnalysisTaskIDFFTCF& AliAnalysisTaskIDFFTCF::operator=(const AliAnalysisTaskI
     fQATrackHistosRecEffGen        = o.fQATrackHistosRecEffGen;  
     fQATrackHistosRecEffRec        = o.fQATrackHistosRecEffRec;  
     fQATrackHistosSecRec           = o.fQATrackHistosSecRec;  
+    fQATrackHistosSecRecSSc        = o.fQATrackHistosSecRecSSc;
     fQATrackHistosRecEffGenPi      = o.fQATrackHistosRecEffGenPi;  
     fQATrackHistosRecEffGenPro     = o.fQATrackHistosRecEffGenPro; 
     fQATrackHistosRecEffGenK       = o.fQATrackHistosRecEffGenK;
@@ -710,8 +759,16 @@ AliAnalysisTaskIDFFTCF& AliAnalysisTaskIDFFTCF::operator=(const AliAnalysisTaskI
     fQATrackHistosSecRecMu         = o.fQATrackHistosSecRecMu; 
     fQATrackHistosSecRecProGFL     = o.fQATrackHistosSecRecProGFL;
     fQATrackHistosSecRecKGFL       = o.fQATrackHistosSecRecKGFL;
+    fQATrackHistosSecRecPiSSc      = o.fQATrackHistosSecRecPiSSc;      
+    fQATrackHistosSecRecProSSc     = o.fQATrackHistosSecRecProSSc;   
+    fQATrackHistosSecRecKSSc       = o.fQATrackHistosSecRecKSSc;    
+    fQATrackHistosSecRecElSSc      = o.fQATrackHistosSecRecElSSc;     
+    fQATrackHistosSecRecMuSSc      = o.fQATrackHistosSecRecMuSSc;    
+    fQATrackHistosSecRecProGFLSSc  = o.fQATrackHistosSecRecProGFLSSc; 
+    fQATrackHistosSecRecKGFLSSc    = o.fQATrackHistosSecRecKGFLSSc;
     fFFHistosRecEffRec             = o.fFFHistosRecEffRec;  
     fFFHistosSecRec                = o.fFFHistosSecRec;   
+    fFFHistosSecRecSSc             = o.fFFHistosSecRecSSc;
     fFFHistosRecEffRecPi           = o.fFFHistosRecEffRecPi;  
     fFFHistosRecEffRecPro          = o.fFFHistosRecEffRecPro;
     fFFHistosRecEffRecK            = o.fFFHistosRecEffRecK;  
@@ -726,6 +783,13 @@ AliAnalysisTaskIDFFTCF& AliAnalysisTaskIDFFTCF::operator=(const AliAnalysisTaskI
     fFFHistosSecRecMu              = o.fFFHistosSecRecMu;    
     fFFHistosSecRecProGFL          = o.fFFHistosSecRecProGFL;   
     fFFHistosSecRecKGFL            = o.fFFHistosSecRecKGFL;  
+    fFFHistosSecRecPiSSc           = o.fFFHistosSecRecPiSSc;
+    fFFHistosSecRecProSSc          = o.fFFHistosSecRecProSSc;   
+    fFFHistosSecRecKSSc            = o.fFFHistosSecRecKSSc;
+    fFFHistosSecRecElSSc           = o.fFFHistosSecRecElSSc; 
+    fFFHistosSecRecMuSSc           = o.fFFHistosSecRecMuSSc;
+    fFFHistosSecRecProGFLSSc       = o.fFFHistosSecRecProGFLSSc;
+    fFFHistosSecRecKGFLSSc         = o.fFFHistosSecRecKGFLSSc;
     fRandom                        = o.fRandom;
   }
   
@@ -773,6 +837,8 @@ AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AliFragFuncHistos(const char* name,
   ,fh2Xi(0)
   ,fh2Z(0)
   ,fh1JetPt(0)
+  ,fh3TrackPtVsEta(0)
+  ,fh3TrackPVsEta(0)
   ,fNameFF(name)
 {
   // default constructor
@@ -798,6 +864,8 @@ AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHi
   ,fh2Xi(copy.fh2Xi)
   ,fh2Z(copy.fh2Z)
   ,fh1JetPt(copy.fh1JetPt)
+  ,fh3TrackPtVsEta(copy.fh3TrackPtVsEta) 
+  ,fh3TrackPVsEta(copy.fh3TrackPVsEta) 
   ,fNameFF(copy.fNameFF)
 {
   // copy constructor
@@ -810,23 +878,25 @@ AliAnalysisTaskIDFFTCF::AliFragFuncHistos& AliAnalysisTaskIDFFTCF::AliFragFuncHi
   
   if(this!=&o){
     TObject::operator=(o);
-    fNBinsJetPt = o.fNBinsJetPt;
-    fJetPtMin   = o.fJetPtMin;
-    fJetPtMax   = o.fJetPtMax;
-    fNBinsPt    = o.fNBinsPt; 
-    fPtMin      = o.fPtMin;   
-    fPtMax      = o.fPtMax;   
-    fNBinsXi    = o.fNBinsXi; 
-    fXiMin      = o.fXiMin;   
-    fXiMax      = o.fXiMax;   
-    fNBinsZ     = o.fNBinsZ;  
-    fZMin       = o.fZMin;    
-    fZMax       = o.fZMax;    
-    fh2TrackPt  = o.fh2TrackPt;
-    fh2Xi       = o.fh2Xi;
-    fh2Z        = o.fh2Z;
-    fh1JetPt    = o.fh1JetPt;
-    fNameFF     = o.fNameFF;
+    fNBinsJetPt     = o.fNBinsJetPt;
+    fJetPtMin       = o.fJetPtMin;
+    fJetPtMax       = o.fJetPtMax;
+    fNBinsPt        = o.fNBinsPt; 
+    fPtMin          = o.fPtMin;   
+    fPtMax          = o.fPtMax;   
+    fNBinsXi        = o.fNBinsXi; 
+    fXiMin          = o.fXiMin;   
+    fXiMax          = o.fXiMax;   
+    fNBinsZ         = o.fNBinsZ;  
+    fZMin           = o.fZMin;    
+    fZMax           = o.fZMax;    
+    fh2TrackPt      = o.fh2TrackPt;
+    fh2Xi           = o.fh2Xi;
+    fh2Z            = o.fh2Z;
+    fh1JetPt        = o.fh1JetPt;
+    fh3TrackPtVsEta = o.fh3TrackPtVsEta;
+    fh3TrackPVsEta  = o.fh3TrackPVsEta;
+    fNameFF         = o.fNameFF;
   }
     
   return *this;
@@ -837,10 +907,13 @@ AliAnalysisTaskIDFFTCF::AliFragFuncHistos::~AliFragFuncHistos()
 {
   // destructor 
 
-  if(fh1JetPt)   delete fh1JetPt;
   if(fh2TrackPt) delete fh2TrackPt;
   if(fh2Xi)      delete fh2Xi;
   if(fh2Z)       delete fh2Z;
+  if(fh1JetPt)   delete fh1JetPt;
+  
+  if(fh3TrackPtVsEta) delete fh3TrackPtVsEta; 
+  if(fh3TrackPVsEta)  delete fh3TrackPVsEta; 
 }
 
 //_________________________________________________________________
@@ -853,15 +926,25 @@ void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::DefineHistos()
   fh2Z       = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
   fh2Xi      = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
 
+  fh3TrackPtVsEta = new TH3F(Form("fh3FFTrackPtVsEta%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,
+                            20,-1,1,fNBinsPt, fPtMin, fPtMax);
+
+  fh3TrackPVsEta  = new TH3F(Form("fh3FFTrackPVsEta%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,
+                            20,-1,1,300, -1, 2); // Xianguo: fine log binning
+
+
   AliAnalysisTaskIDFFTCF::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries"); 
   AliAnalysisTaskIDFFTCF::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
   AliAnalysisTaskIDFFTCF::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
   AliAnalysisTaskIDFFTCF::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
+
+  AliAnalysisTaskIDFFTCF::SetProperties(fh3TrackPtVsEta,"jet pt","eta","p_{T} [GeV/c]");
+  AliAnalysisTaskIDFFTCF::SetProperties(fh3TrackPVsEta,"jet pt","eta","p [GeV/c]");
 }
 
 //_______________________________________________________________________________________________________________
-void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm
-                                                                       Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
+void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t trackEta, Float_t jetPt, Bool_t incrementJetPt
+                                                      Float_t norm, Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
 {
 
   // fill FF
@@ -873,10 +956,25 @@ void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t
   // when zero track are found in the background region
   if((int)trackPt==-1) return;
  
-  if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
-  else if(scaleStrangeness) fh2TrackPt->Fill(jetPt,trackPt,scaleFacStrangeness);
-  else fh2TrackPt->Fill(jetPt,trackPt);
+  const Double_t tracklogPt  = TMath::Log10(trackPt);
+
+  Double_t theta     = 2*TMath::ATan(TMath::Exp(-1*trackEta));
+  Double_t trackP    = trackPt / TMath::Sin(theta);
+  Double_t tracklogP = TMath::Log10(trackP);
+
+  if(norm)fh2TrackPt->Fill(jetPt,tracklogPt,1/norm);
+  else if(scaleStrangeness) fh2TrackPt->Fill(jetPt,tracklogPt,scaleFacStrangeness);
+  else fh2TrackPt->Fill(jetPt,tracklogPt);
+
+  if(norm) fh3TrackPtVsEta->Fill(jetPt,trackEta,tracklogPt,1/norm);
+  else if(scaleStrangeness) fh3TrackPtVsEta->Fill(jetPt,trackEta,tracklogPt,scaleFacStrangeness);
+  else fh3TrackPtVsEta->Fill(jetPt,trackEta,tracklogPt);
+
+  if(norm) fh3TrackPVsEta->Fill(jetPt,trackEta,tracklogP,1/norm);
+  else if(scaleStrangeness) fh3TrackPVsEta->Fill(jetPt,trackEta,tracklogP,scaleFacStrangeness);
+  else fh3TrackPVsEta->Fill(jetPt,trackEta,tracklogP);
+
+
   Double_t z = 0.;
   if(jetPt>0) z = trackPt / jetPt;
   Double_t xi = 0;
@@ -887,7 +985,6 @@ void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t
     xi = 1e-06;
   }
 
-
   if(norm){
     fh2Xi->Fill(jetPt,xi,1/norm);
     fh2Z->Fill(jetPt,z,1/norm);
@@ -912,6 +1009,9 @@ void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AddToOutput(TList* list) const
   list->Add(fh2TrackPt);
   list->Add(fh2Xi);
   list->Add(fh2Z);
+
+  list->Add(fh3TrackPtVsEta);
+  list->Add(fh3TrackPVsEta);
 }
 
 //_________________________________________________________________________________________________________
@@ -1304,7 +1404,7 @@ void AliAnalysisTaskIDFFTCF::UserCreateOutputObjects()
 
 
     fTHnIDFF  = AliIDFFUtils::GetTHn("THnIDFF");
-    fTHnIncl  = AliIDFFUtils::GetTHn("THnIncl");
+    fTHnIncl  = 0x0;//AliIDFFUtils::GetTHn("THnIncl");
   } // end: FF
   
   // efficiency
@@ -1332,7 +1432,7 @@ void AliAnalysisTaskIDFFTCF::UserCreateOutputObjects()
   
   if(fFFMode){
     fCommonHistList->Add(fTHnIDFF);
-    fCommonHistList->Add(fTHnIncl);
+    //fCommonHistList->Add(fTHnIncl);
   }
     
   Bool_t genJets    = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
@@ -1389,6 +1489,7 @@ void AliAnalysisTaskIDFFTCF::UserCreateOutputObjects()
   if(fEffMode && recJetsEff && genTracks){
     if(fQAMode&1){
       BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRec,"RecEffRec",&fQATrackHistosRecEffGen,"RecEffGen",&fQATrackHistosSecRec,"SecRec");
+      BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecSSc,"SecRecSSc");
       BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecPi,"RecEffRec_piPlusPiMinus",&fQATrackHistosRecEffGenPi,"RecEffGen_piPlusPiMinus",&fQATrackHistosSecRecPi,"SecRec_piPlusPiMinus");
       BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecPro,"RecEffRec_ppbar",&fQATrackHistosRecEffGenPro,"RecEffGen_ppbar",&fQATrackHistosSecRecPro,"SecRec_ppbar");
       BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecK,"RecEffRec_kPlusKMinus",&fQATrackHistosRecEffGenK,"RecEffGen_kPlusKMinus",&fQATrackHistosSecRecK,"SecRec_kPlusKMinus");
@@ -1396,9 +1497,17 @@ void AliAnalysisTaskIDFFTCF::UserCreateOutputObjects()
       BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecMu,"RecEffRec_muPlusMuMinus",&fQATrackHistosRecEffGenMu,"RecEffGen_muPlusMuMinus",&fQATrackHistosSecRecMu,"SecRec_muPlusMuMinus");
       BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecProGFL,"RecEffRec_ppbarGFL",0,"",&fQATrackHistosSecRecProGFL,"SecRec_ppbarGFL");
       BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecKGFL,"RecEffRec_kPlusKMinusGFL",0,"",&fQATrackHistosSecRecKGFL,"SecRec_kPlusKMinusGFL");
+      BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecPiSSc ,"SecRec_piPlusPiMinusSSc");
+      BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecProSSc,"SecRec_ppbarSSc");
+      BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecKSSc,"SecRec_kPlusKMinusSSc");
+      BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecElSSc,"SecRec_ePlusEMinusSSc");
+      BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecMuSSc,"SecRec_muPlusMuMinusSSc");
+      BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecProGFLSSc,"SecRec_ppbarGFLSSc");
+      BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecKGFLSSc,"SecRec_kPlusKMinusGFLSSc");
     }
     if(fFFMode){
       BookFFHistos(fCommonHistList,&fFFHistosRecEffRec,"RecEffRec",0x0,"",&fFFHistosSecRec,"SecRec");
+      BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecSSc,"SecRecSSc");
       BookFFHistos(fCommonHistList,&fFFHistosRecEffRecPi,"RecEffRec_piPlusPiMinus",0x0,"",&fFFHistosSecRecPi,"SecRec_piPlusPiMinus");
       BookFFHistos(fCommonHistList,&fFFHistosRecEffRecPro,"RecEffRec_ppbar",0x0,"",&fFFHistosSecRecPro,"SecRec_ppbar");
       BookFFHistos(fCommonHistList,&fFFHistosRecEffRecK,"RecEffRec_kPlusKMinus",0x0,"",&fFFHistosSecRecK,"SecRec_kPlusKMinus");
@@ -1406,6 +1515,13 @@ void AliAnalysisTaskIDFFTCF::UserCreateOutputObjects()
       BookFFHistos(fCommonHistList,&fFFHistosRecEffRecMu,"RecEffRec_muPlusMuMinus",0x0,"",&fFFHistosSecRecMu,"SecRec_muPlusMuMinus");
       BookFFHistos(fCommonHistList,&fFFHistosRecEffRecProGFL,"RecEffRec_ppbarGFL",0x0,"",&fFFHistosSecRecProGFL,"SecRec_ppbarGFL");
       BookFFHistos(fCommonHistList,&fFFHistosRecEffRecKGFL,"RecEffRec_kPlusKMinusGFL",0x0,"",&fFFHistosSecRecKGFL,"SecRec_kPlusKMinusGFL");
+      BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecPiSSc,"SecRec_piPlusPiMinusSSc");
+      BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecProSSc,"SecRec_ppbarSSc");
+      BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecKSSc,"SecRec_kPlusKMinusSSc");
+      BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecElSSc,"SecRec_ePlusEMinusSSc");
+      BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecMuSSc,"SecRec_muPlusMuMinusSSc");
+      BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecProGFLSSc,"SecRec_ppbarGFLSSc");
+      BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecKGFLSSc,"SecRec_kPlusKMinusGFLSSc");
     }
 
     fCommonHistList->Add(fh1nRecEffJets);
@@ -1695,7 +1811,7 @@ void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
         // fill inclusive tracks XXX, they have the same track cuts!
         AliAODTrack * inclusiveaod  = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
         if(inclusiveaod){
-          AliIDFFUtils::FillTHn(fTHnIncl, -999, inclusiveaod, fAOD, fTOFCutMode);
+          //AliIDFFUtils::FillTHn(fTHnIncl, -999, inclusiveaod, fAOD, fTOFCutMode);
         }
 
       }      
@@ -1750,18 +1866,19 @@ void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
        AliAODTrack * aodtrack  = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
        if(!aodtrack) continue;
                
-       Float_t trackPt = trackVP->Pt();
+       Float_t trackPt  = trackVP->Pt();
+       Float_t trackEta = trackVP->Eta();
        
        Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
        
        if(fFFMode){
          
-         fFFHistosRecCutsInc->FillFF(trackPt, jetPt, incrementJetPt); 
+         fFFHistosRecCutsInc->FillFF(trackPt, trackEta, jetPt, incrementJetPt); 
            
          AliIDFFUtils::FillTHn(fTHnIDFF, jetPt, aodtrack, fAOD, fTOFCutMode);
 
          if(it==0){ // leading track, all jets 
-           fFFHistosRecLeadingTrack->FillFF( trackPt, jetPt, kTRUE);
+           fFFHistosRecLeadingTrack->FillFF( trackPt, trackEta, jetPt, kTRUE);
          }
        } 
 
@@ -1802,21 +1919,22 @@ void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
        if(isBadJet) continue; 
        
        Bool_t incrementJetPt = kTRUE; // there could be 0 tracks in jet: first fill jet pt histo once 
-       fFFHistosRecCutsIncPi->FillFF(-1, jetPt, incrementJetPt);
-       fFFHistosRecCutsIncPro->FillFF(-1, jetPt, incrementJetPt); 
-       fFFHistosRecCutsIncK->FillFF(-1, jetPt, incrementJetPt);   
-       fFFHistosRecCutsIncEl->FillFF(-1, jetPt, incrementJetPt);  
-       fFFHistosRecCutsIncMu->FillFF(-1, jetPt, incrementJetPt);   
+       fFFHistosRecCutsIncPi->FillFF(-1, -1, jetPt, incrementJetPt);
+       fFFHistosRecCutsIncPro->FillFF(-1,-1, jetPt, incrementJetPt); 
+       fFFHistosRecCutsIncK->FillFF(-1,  -1, jetPt, incrementJetPt);   
+       fFFHistosRecCutsIncEl->FillFF(-1, -1, jetPt, incrementJetPt);  
+       fFFHistosRecCutsIncMu->FillFF(-1, -1, jetPt, incrementJetPt);   
       
        incrementJetPt = kFALSE; 
 
        for(Int_t it=0; it<jettracklist->GetSize(); ++it){
-         
+
          AliAODTrack * rectrack  = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
          if(!rectrack) continue;
 
          Int_t label   = TMath::Abs(rectrack->GetLabel());
-         Float_t recPt = rectrack->Pt();
+         Float_t recPt  = rectrack->Pt();
+         Float_t recEta = rectrack->Eta();
          
          // find MC track in our list
          AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
@@ -1826,11 +1944,11 @@ void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
          if(gentrack){
            Int_t mcpdg = TMath::Abs(gentrack->GetPdgCode());
            
-           if(mcpdg == 211)  fFFHistosRecCutsIncPi->FillFF(recPt, jetPt, incrementJetPt);
-           if(mcpdg == 2212) fFFHistosRecCutsIncPro->FillFF(recPt, jetPt, incrementJetPt);
-           if(mcpdg == 321)  fFFHistosRecCutsIncK->FillFF(recPt, jetPt, incrementJetPt);
-           if(mcpdg == 11)   fFFHistosRecCutsIncEl->FillFF(recPt, jetPt, incrementJetPt);
-           if(mcpdg == 13)   fFFHistosRecCutsIncMu->FillFF(recPt, jetPt, incrementJetPt); 
+           if(mcpdg == 211)  fFFHistosRecCutsIncPi->FillFF(recPt,  recEta, jetPt, incrementJetPt);
+           if(mcpdg == 2212) fFFHistosRecCutsIncPro->FillFF(recPt, recEta, jetPt, incrementJetPt);
+           if(mcpdg == 321)  fFFHistosRecCutsIncK->FillFF(recPt,   recEta, jetPt, incrementJetPt);
+           if(mcpdg == 11)   fFFHistosRecCutsIncEl->FillFF(recPt,  recEta, jetPt, incrementJetPt);
+           if(mcpdg == 13)   fFFHistosRecCutsIncMu->FillFF(recPt,  recEta, jetPt, incrementJetPt); 
          }
        }
        delete jettracklist;    
@@ -1868,12 +1986,12 @@ void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
       if(isBadJet) continue; 
 
       Bool_t incrementJetPt = kTRUE; // first fill jet pt histo once 
-      fFFHistosGenInc->FillFF(-1, jetPt, incrementJetPt);
-      fFFHistosGenIncPi->FillFF(-1, jetPt, incrementJetPt);
-      fFFHistosGenIncPro->FillFF(-1, jetPt, incrementJetPt); 
-      fFFHistosGenIncK->FillFF(-1, jetPt, incrementJetPt);   
-      fFFHistosGenIncEl->FillFF(-1, jetPt, incrementJetPt);  
-      fFFHistosGenIncMu->FillFF(-1, jetPt, incrementJetPt);   
+      fFFHistosGenInc->FillFF(-1,   -1, jetPt, incrementJetPt);
+      fFFHistosGenIncPi->FillFF(-1, -1, jetPt, incrementJetPt);
+      fFFHistosGenIncPro->FillFF(-1,-1, jetPt, incrementJetPt); 
+      fFFHistosGenIncK->FillFF(-1,  -1, jetPt, incrementJetPt);   
+      fFFHistosGenIncEl->FillFF(-1, -1, jetPt, incrementJetPt);  
+      fFFHistosGenIncMu->FillFF(-1, -1, jetPt, incrementJetPt);   
 
       incrementJetPt = kFALSE;
 
@@ -1881,12 +1999,13 @@ void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
        
        AliVParticle*   trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
        if(!trackVP)continue;
-       
-       Float_t trackPt = trackVP->Pt();
+
+       Float_t trackPt  = trackVP->Pt();
+       Float_t trackEta = trackVP->Eta();
        
        if(fFFMode){
 
-         fFFHistosGenInc->FillFF( trackPt, jetPt, incrementJetPt);
+         fFFHistosGenInc->FillFF( trackPt, trackEta, jetPt, incrementJetPt);
 
          AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*>(trackVP);
          
@@ -1894,16 +2013,16 @@ void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
            
            Int_t mcpdg = TMath::Abs(gentrack->GetPdgCode());
            
-           if(mcpdg == 211)  fFFHistosGenIncPi->FillFF(trackPt, jetPt, incrementJetPt);
-           if(mcpdg == 2212) fFFHistosGenIncPro->FillFF(trackPt, jetPt, incrementJetPt);
-           if(mcpdg == 321)  fFFHistosGenIncK->FillFF(trackPt, jetPt, incrementJetPt);
-           if(mcpdg == 11)   fFFHistosGenIncEl->FillFF(trackPt, jetPt, incrementJetPt);
-           if(mcpdg == 13)   fFFHistosGenIncMu->FillFF(trackPt, jetPt, incrementJetPt);
+           if(mcpdg == 211)  fFFHistosGenIncPi->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
+           if(mcpdg == 2212) fFFHistosGenIncPro->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
+           if(mcpdg == 321)  fFFHistosGenIncK->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
+           if(mcpdg == 11)   fFFHistosGenIncEl->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
+           if(mcpdg == 13)   fFFHistosGenIncMu->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
          }
        }
        
        if(it==0){ // leading track, all jets 
-         fFFHistosGenLeadingTrack->FillFF( trackPt, jetPt, kTRUE );      
+         fFFHistosGenLeadingTrack->FillFF( trackPt, trackEta, jetPt, kTRUE);     
        }
        
       } // track loop 
@@ -1956,6 +2075,7 @@ void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
 
     // secondaries
     if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec);
+    if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,0,kFALSE,kTRUE);
     if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPi,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,211);
     if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPro,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212);
     if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecK,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321);
@@ -1963,8 +2083,15 @@ void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
     if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecMu,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,13);
     if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecProGFL,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212,kTRUE);
     if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecKGFL,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321,kTRUE);
 
+    if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPiSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,211,kFALSE,kTRUE);
+    if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecProSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212,kFALSE,kTRUE);
+    if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecKSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321,kFALSE,kTRUE);
+    if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecElSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,11,kFALSE,kTRUE);
+    if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecMuSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,13,kFALSE,kTRUE);
+    if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecProGFLSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212,kTRUE,kTRUE);
+    if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecKGFLSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321,kTRUE,kTRUE);
     // jet track eff    
     Double_t sumPtGenLeadingJetRecEff = 0;
     Double_t sumPtGenLeadingJetSec    = 0;
@@ -2047,6 +2174,9 @@ void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
          if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRec,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0);
          else                FillJetTrackHistosRec(fFFHistosSecRec,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec);
 
+         if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,0,kFALSE,kTRUE);
+         else                FillJetTrackHistosRec(fFFHistosSecRecSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,kFALSE,kTRUE);
+
          if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPi,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,211);
          else                FillJetTrackHistosRec(fFFHistosSecRecPi,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,211);
 
@@ -2067,6 +2197,31 @@ void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
 
          if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecKGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321,kTRUE); 
          else                FillJetTrackHistosRec(fFFHistosSecRecKGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321,kTRUE); 
+
+
+         if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPiSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,211,kFALSE,kTRUE);
+         else                FillJetTrackHistosRec(fFFHistosSecRecPiSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,211,kFALSE,kTRUE);
+
+         if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecProSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212,kFALSE,kTRUE); 
+         else                FillJetTrackHistosRec(fFFHistosSecRecProSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212,kFALSE,kTRUE);
+
+         if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecKSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321,kFALSE,kTRUE); 
+         else                FillJetTrackHistosRec(fFFHistosSecRecKSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321,kFALSE,kTRUE);
+
+         if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecElSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,11,kFALSE,kTRUE); 
+         else                FillJetTrackHistosRec(fFFHistosSecRecElSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,11,kFALSE,kTRUE);
+
+         if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecMuSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,13,kFALSE,kTRUE);
+         else                FillJetTrackHistosRec(fFFHistosSecRecMuSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,13,kFALSE,kTRUE);
+
+         if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecProGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212,kTRUE,kTRUE); 
+         else                FillJetTrackHistosRec(fFFHistosSecRecProGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212,kTRUE,kTRUE);
+
+         if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecKGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321,kTRUE,kTRUE); 
+         else                FillJetTrackHistosRec(fFFHistosSecRecKGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321,kTRUE,kTRUE); 
+
+
+
        }
        
        delete jettracklistGenPrim;
@@ -2377,7 +2532,7 @@ Int_t AliAnalysisTaskIDFFTCF::GetListOfJets(TList *list, Int_t type)
 }
 
 // _________________________________________________________________________________________________________
-void AliAnalysisTaskIDFFTCF::SetProperties(THnSparse* h, Int_t dim, const char** labels)
+void AliAnalysisTaskIDFFTCF::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
 {
   // Set properties of THnSparse 
 
@@ -2413,7 +2568,7 @@ void AliAnalysisTaskIDFFTCF::SetProperties(TH1* h,const char* x, const char* y,
 
 // ________________________________________________________________________________________________________________________________________________________
 void AliAnalysisTaskIDFFTCF::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet, 
-                                                 Double_t radius, Double_t& sumPt, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
+                                                 const Double_t radius, Double_t& sumPt, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
 {
   // fill list of tracks in cone around jet axis  
 
@@ -2454,7 +2609,7 @@ void AliAnalysisTaskIDFFTCF::GetJetTracksPointing(TList* inputlist, TList* outpu
 }
 
 // _________________________________________________________________________________________________________________________________________________________________
-void AliAnalysisTaskIDFFTCF::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
+void AliAnalysisTaskIDFFTCF::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
 {
   // list of jet tracks from trackrefs
   
@@ -2560,10 +2715,11 @@ void  AliAnalysisTaskIDFFTCF::AssociateGenRec(TList* tracksAODMCCharged,TList* t
 
 // _____________________________________________________________________________________________________________________________________________
 void AliAnalysisTaskIDFFTCF::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen, 
-                                                        const TArrayI& indexAODTr, const TArrayS& isRefGen, Int_t pdg, Bool_t scaleGFL){
+                                                        const TArrayI& indexAODTr, const TArrayS& isRefGen, const Int_t pdg, const Bool_t scaleGFL, 
+                                                         const Bool_t scaleStrangeness){
 
   // fill QA for single track reconstruction efficiency
-  
+
   Int_t nTracksGen  = tracksGen->GetSize();
 
   if(!nTracksGen) return;
@@ -2591,15 +2747,22 @@ void AliAnalysisTaskIDFFTCF::FillSingleTrackHistosRecGen(AliFragFuncQATrackHisto
 
     if(iRec>=0 && trackQARec){
 
-      if(scaleGFL){ 
+      if(scaleGFL || scaleStrangeness){ 
        
-       Double_t GFLcorr = 1; 
-       if(gentrack->GetPdgCode() == -2212)      GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);  
-       else if(gentrack->GetPdgCode() == -321)  GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);  
-
        Double_t weight = 1;
-       if(GFLcorr > 0) weight = 1/GFLcorr;
        
+       if(scaleGFL){
+         Double_t GFLcorr = 1; 
+         if(gentrack->GetPdgCode() == -2212)      GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);  
+         else if(gentrack->GetPdgCode() == -321)  GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);  
+         
+         if(GFLcorr > 0) weight *= 1/GFLcorr;
+       }       
+       if(scaleStrangeness){
+         Double_t strCorr = GetMCStrangenessFactorCMS(gentrack);         
+         weight *= strCorr;
+       }
+
        trackQARec->FillTrackQA(etaGen, phiGen, ptGen, kFALSE, 0, kTRUE, weight);
       }
       else trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
@@ -2611,7 +2774,8 @@ void AliAnalysisTaskIDFFTCF::FillSingleTrackHistosRecGen(AliFragFuncQATrackHisto
 
 void  AliAnalysisTaskIDFFTCF::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet, 
                                                    TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
-                                                   const TArrayS& isRefGen, TList* jetTrackListTR, Int_t pdg, Bool_t scaleGFL)
+                                                   const TArrayS& isRefGen, TList* jetTrackListTR, const Int_t pdg, 
+                                                   const Bool_t scaleGFL, const Bool_t scaleStrangeness)
 {
   // fill objects for jet track reconstruction efficiency or secondaries contamination 
   // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
@@ -2620,7 +2784,9 @@ void  AliAnalysisTaskIDFFTCF::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec
 
   // ensure proper normalization, even for secondaries
   Double_t jetPtRec = jet->Pt();
-  ffhistRec->FillFF(-1, jetPtRec, kTRUE);
+  //TVector3 jet3Mom = (jet->MomentumVector())->Vect();
+
+  ffhistRec->FillFF(-1, -1, jetPtRec, kTRUE);
 
   Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
   if(nTracksJet == 0) return; 
@@ -2653,7 +2819,8 @@ void  AliAnalysisTaskIDFFTCF::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec
     if(pdg && TMath::Abs(gentrack->GetPdgCode()) != pdg) continue;  
 
 
-    Double_t ptRec = -1;       
+    Double_t ptRec  = -1;      
+    Double_t etaRec = -1;      
 
     Int_t iRec   = indexAODTr[iGen]; // can be -1 if no good reconstructed track 
     Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE; 
@@ -2666,8 +2833,9 @@ void  AliAnalysisTaskIDFFTCF::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec
       AliAODTrack* rectrack = dynamic_cast<AliAODTrack*> (tracksRec->At(iRec));
       if(!rectrack) continue;
 
-      ptRec = rectrack->Pt();  
-      
+      ptRec  = rectrack->Pt(); 
+      etaRec = rectrack->Eta();        
+     
       if(jetTrackListTR){ 
         Int_t iRecTR = jetTrackListTR->IndexOf(rectrack); 
         if(iRecTR >=0 ) isJetTrack = kTRUE; // rec tracks assigned to jet 
@@ -2675,26 +2843,29 @@ void  AliAnalysisTaskIDFFTCF::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec
     
       if(isJetTrack){
        
-       Double_t trackPt = ptRec;
+       Double_t trackPt  = ptRec;
+       Double_t trackEta = etaRec;
        Bool_t incrementJetPt = kFALSE; 
        
-       if(scaleGFL){
-       
-         //Double_t weight = 1; 
-         //if(gentrack->GetPdgCode() == -2212)      weight = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);  
-         //else if(gentrack->GetPdgCode() == -321)  weight = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);  
-         //else                                     weight = 1; 
-         
-         Double_t GFLcorr = 1; 
-         if(gentrack->GetPdgCode() == -2212)      GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);  
-         else if(gentrack->GetPdgCode() == -321)  GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);  
+       if(scaleGFL || scaleStrangeness){
 
          Double_t weight = 1;
-         if(GFLcorr > 0) weight = 1/GFLcorr;
 
-         ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt, 0, kTRUE, weight );
+         if(scaleGFL){
+           Double_t GFLcorr = 1; 
+           if(gentrack->GetPdgCode() == -2212)      GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);  
+           else if(gentrack->GetPdgCode() == -321)  GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);  
+
+           if(GFLcorr > 0) weight *= 1/GFLcorr;
+         }
+         if(scaleStrangeness){
+           Double_t strCorr = GetMCStrangenessFactorCMS(gentrack);       
+           weight *= strCorr;
+         }
+
+         ffhistRec->FillFF( trackPt, trackEta, jetPtRec, incrementJetPt, 0, kTRUE, weight );
        }
-       else  ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt );
+       else  ffhistRec->FillFF( trackPt, trackEta, jetPtRec, incrementJetPt);
        
        listRecTracks->Add(rectrack);   
       }
@@ -2809,7 +2980,7 @@ void AliAnalysisTaskIDFFTCF::BookFFHistos(TList* list, AliFragFuncHistos** rec,
 }
 
 //____________________________________________________________________________________
-Double_t  AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
+Double_t  AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionPrMinus(const Double_t pTmc)
 {
   // GEANT-FLUKA correction for pbar from Roberto via Benjamin
 
@@ -2818,7 +2989,7 @@ Double_t  AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionPrMinus(Double_t
 }
 
 //____________________________________________________________________________________
-Double_t  AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
+Double_t  AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionKaMinus(const Double_t pTmc)
 {
 
   // GEANT-FLUKA correction for K- from Roberto via Benjamin
@@ -2826,3 +2997,145 @@ Double_t  AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionKaMinus(Double_t
   Double_t corr = TMath::Min((0.972865 + 0.0117093 * pTmc), 1.);
   return corr; 
 }
+
+//__________________________________________________________________________________________________
+Double_t AliAnalysisTaskIDFFTCF::GetMCStrangenessFactorCMS(AliAODMCParticle* daughter)
+{
+  // strangeness ratio MC/data as function of mother pt from CMS data in |eta|<2.0
+
+  TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
+  if(!tca) return 1;
+
+  AliAODMCParticle* currentMother   = daughter;
+  AliAODMCParticle* currentDaughter = daughter;
+
+
+  // find first primary mother K0s, Lambda or Xi   
+  while(1){
+
+    Int_t daughterPDG   = currentDaughter->GetPdgCode();       
+
+    Int_t motherLabel   = currentDaughter->GetMother();
+    if(motherLabel >= tca->GetEntriesFast()){ // protection
+      currentMother = currentDaughter; 
+      break; 
+    }
+
+    currentMother     = (AliAODMCParticle*) tca->At(motherLabel);
+
+    if(!currentMother){ 
+      currentMother = currentDaughter; 
+      break; 
+    }
+
+    Int_t motherPDG   = currentMother->GetPdgCode();   
+    // phys. primary found ?   
+    if(currentMother->IsPhysicalPrimary()) break; 
+
+    if(TMath::Abs(daughterPDG) == 321){ // K+/K- e.g. from phi (ref data not feeddown corrected)
+      currentMother = currentDaughter; break; 
+    }          
+    if(TMath::Abs(motherPDG) == 310 ){ // K0s e.g. from phi (ref data not feeddown corrected)
+      break; 
+    }  
+    if(TMath::Abs(motherPDG) == 3212 && TMath::Abs(daughterPDG) == 3122){ // mother Sigma0, daughter Lambda (this case not included in feeddown corr.)
+      currentMother = currentDaughter; break; 
+    }
+
+    currentDaughter = currentMother;
+  }
+
+
+  Int_t motherPDG   = currentMother->GetPdgCode();     
+  Double_t motherPt = currentMother->Pt();     
+
+  Double_t fac = 1;
+
+  if(TMath::Abs(motherPDG) == 310 || TMath::Abs(motherPDG)==321){ // K0s / K+ / K-
+
+    if(0.00 <= motherPt && motherPt < 0.20) fac = 0.768049;
+    else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.732933;
+    else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.650298;
+    else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.571332;
+    else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.518734;
+    else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.492543;
+    else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.482704;
+    else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.488056;
+    else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.488861;
+    else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.492862;
+    else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.504332;
+    else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.501858;
+    else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.512970;
+    else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.524131;
+    else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.539130;
+    else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.554101;
+    else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.560348;
+    else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.568869;
+    else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.583310;
+    else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.604818;
+    else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.632630;
+    else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.710070;
+    else if(6.00 <= motherPt && motherPt < 8.00) fac = 0.736365;
+    else if(8.00 <= motherPt && motherPt < 10.00) fac = 0.835865;
+  }
+
+  if(TMath::Abs(motherPDG) == 3122){ // Lambda
+
+    if(0.00 <= motherPt && motherPt < 0.20) fac = 0.645162;
+    else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.627431;
+    else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.457136;
+    else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.384369;
+    else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.330597;
+    else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.309571;
+    else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.293620;
+    else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.283709;
+    else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.282047;
+    else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.277261;
+    else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.275772;
+    else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.280726;
+    else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.288540;
+    else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.288315;
+    else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.296619;
+    else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.302993;
+    else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.338121;
+    else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.349800;
+    else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.356802;
+    else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.391202;
+    else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.422573;
+    else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.573815;
+    else if(6.00 <= motherPt && motherPt < 8.00) fac = 0.786984;
+    else if(8.00 <= motherPt && motherPt < 10.00) fac = 1.020021;
+  }    
+  
+  if(TMath::Abs(motherPDG) == 3312 || TMath::Abs(motherPDG) == 3322){ // xi 
+
+    if(0.00 <= motherPt && motherPt < 0.20) fac = 0.666620;
+    else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.575908;
+    else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.433198;
+    else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.340901;
+    else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.290896;
+    else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.236074;
+    else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.218681;
+    else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.207763;
+    else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.222848;
+    else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.208806;
+    else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.197275;
+    else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.183645;
+    else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.188788;
+    else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.188282;
+    else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.207442;
+    else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.240388;
+    else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.241916;
+    else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.208276;
+    else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.234550;
+    else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.251689;
+    else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.310204;
+    else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.343492;  
+  }
+  
+  Double_t weight = 1;
+  if(fac > 0) weight = 1/fac;
+       
+  return weight;
+}
index 494cd74dbe3d2be6379a93cfc30b5b06188cde04..09d4e4d37e04bd97902cdc34d3030e4e5621a90d 100644 (file)
@@ -51,7 +51,8 @@ class AliAnalysisTaskIDFFTCF : public AliAnalysisTaskSE {
     virtual ~AliFragFuncHistos();
     
     virtual void DefineHistos();
-    virtual void FillFF(Float_t trackPt, Float_t jetPt,Bool_t incrementJetPt, Float_t norm = 0, Bool_t scaleStrangeness = kFALSE, Float_t scaleFacStrangeness = 1.);
+    virtual void FillFF(Float_t trackPt, Float_t trackEta, Float_t jetPt, 
+                       Bool_t incrementJetPt, Float_t norm = 0, Bool_t scaleStrangeness = kFALSE, Float_t scaleFacStrangeness = 1.);
 
     virtual void AddToOutput(TList* list) const;
 
@@ -75,6 +76,9 @@ class AliAnalysisTaskIDFFTCF : public AliAnalysisTaskSE {
     TH2F*   fh2Z;         //! FF: z  
     TH1F*   fh1JetPt;     //! jet pt 
 
+    TH3F*   fh3TrackPtVsEta;  //! FF: track transverse momentum vs track eta 
+    TH3F*   fh3TrackPVsEta;   //! FF: track momentum vs track eta 
+
     TString fNameFF;      // histo names prefix
     
     ClassDef(AliFragFuncHistos, 1);
@@ -257,18 +261,20 @@ class AliAnalysisTaskIDFFTCF : public AliAnalysisTaskSE {
   Float_t  GetFFMaxTrackPt() const { return fFFMaxTrackPt; }
   Float_t  GetFFMinNTracks() const { return fFFMinnTracks; }
 
-  void    GetJetTracksTrackrefs(TList* l, const AliAODJet* j, const Double_t minPtL, Double_t maxPt, Bool_t& isBadPt);
+  void    GetJetTracksTrackrefs(TList* l, const AliAODJet* j, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt);
   void    GetJetTracksPointing(TList* in, TList* out, const AliAODJet* j, Double_t r, Double_t& sumPt, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt);  
 
   void     AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,TArrayS& isRefGen,TH2F* fh2PtRecVsGen);
 
   void     FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen, 
-                                      const TArrayI& indexAODTr, const TArrayS& isRefGen, Int_t pdg = 0, Bool_t scaleGFL = kFALSE);
+                                      const TArrayI& indexAODTr, const TArrayS& isRefGen, Int_t pdg = 0, 
+                                      Bool_t scaleGFL = kFALSE, Bool_t scaleStrangeness = kFALSE);
 
 
   void     FillJetTrackHistosRec(AliFragFuncHistos* histRec,  AliAODJet* jet, 
                                 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
-                                const TArrayS& isRefGen, TList* jetTrackListTR = 0, Int_t pdg = 0, Bool_t scaleGFL = kFALSE);
+                                const TArrayS& isRefGen, TList* jetTrackListTR = 0, Int_t pdg = 0, 
+                                Bool_t scaleGFL = kFALSE, Bool_t scaleStrangeness = kFALSE);
 
 
   Float_t  CalcJetArea(Float_t etaJet, Float_t rc) const;
@@ -281,8 +287,10 @@ class AliAnalysisTaskIDFFTCF : public AliAnalysisTaskSE {
 
   Double_t  TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc);
   Double_t  TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc);
+  Double_t  GetMCStrangenessFactorCMS(AliAODMCParticle* daughter);
     
 
+
   // Consts
   enum {kTrackUndef=0, kTrackAOD, kTrackAODQualityCuts, kTrackAODCuts,  
        kTrackKineAll, kTrackKineCharged, kTrackKineChargedAcceptance, 
@@ -462,6 +470,7 @@ class AliAnalysisTaskIDFFTCF : public AliAnalysisTaskSE {
   AliFragFuncQATrackHistos* fQATrackHistosRecEffGen;      //! tracking efficiency: generated primaries 
   AliFragFuncQATrackHistos* fQATrackHistosRecEffRec;      //! tracking efficiency: reconstructed primaries
   AliFragFuncQATrackHistos* fQATrackHistosSecRec;         //! reconstructed secondaries
+  AliFragFuncQATrackHistos* fQATrackHistosSecRecSSc;      //! reconstructed secondaries
 
   AliFragFuncQATrackHistos* fQATrackHistosRecEffGenPi;     //! tracking efficiency: generated primaries 
   AliFragFuncQATrackHistos* fQATrackHistosRecEffGenPro;    //! tracking efficiency: generated primaries 
@@ -485,10 +494,20 @@ class AliAnalysisTaskIDFFTCF : public AliAnalysisTaskSE {
   AliFragFuncQATrackHistos* fQATrackHistosSecRecProGFL;   //! tracking efficiency: generated primaries 
   AliFragFuncQATrackHistos* fQATrackHistosSecRecKGFL;     //! tracking efficiency: generated primaries 
 
+  AliFragFuncQATrackHistos* fQATrackHistosSecRecPiSSc;       //! tracking efficiency: generated primaries 
+  AliFragFuncQATrackHistos* fQATrackHistosSecRecProSSc;      //! tracking efficiency: generated primaries 
+  AliFragFuncQATrackHistos* fQATrackHistosSecRecKSSc;        //! tracking efficiency: generated primaries 
+  AliFragFuncQATrackHistos* fQATrackHistosSecRecElSSc;       //! tracking efficiency: generated primaries 
+  AliFragFuncQATrackHistos* fQATrackHistosSecRecMuSSc;       //! tracking efficiency: generated primaries 
+  AliFragFuncQATrackHistos* fQATrackHistosSecRecProGFLSSc;   //! tracking efficiency: generated primaries 
+  AliFragFuncQATrackHistos* fQATrackHistosSecRecKGFLSSc;     //! tracking efficiency: generated primaries 
+
+
 
 
   AliFragFuncHistos*  fFFHistosRecEffRec;                 //! tracking efficiency: FF reconstructed primaries
   AliFragFuncHistos*  fFFHistosSecRec;                    //! secondary contamination: FF reconstructed secondaries 
+  AliFragFuncHistos*  fFFHistosSecRecSSc;                 //! secondary contamination: FF reconstructed secondaries 
 
   AliFragFuncHistos*  fFFHistosRecEffRecPi;               //! tracking efficiency: FF reconstructed primaries
   AliFragFuncHistos*  fFFHistosRecEffRecPro;              //! tracking efficiency: FF reconstructed primaries
@@ -498,7 +517,6 @@ class AliAnalysisTaskIDFFTCF : public AliAnalysisTaskSE {
   AliFragFuncHistos*  fFFHistosRecEffRecProGFL;           //! tracking efficiency: FF reconstructed primaries
   AliFragFuncHistos*  fFFHistosRecEffRecKGFL;             //! tracking efficiency: FF reconstructed primaries
 
-
   AliFragFuncHistos*  fFFHistosSecRecPi;                  //! secondary contamination: FF reconstructed secondaries 
   AliFragFuncHistos*  fFFHistosSecRecPro;                 //! secondary contamination: FF reconstructed secondaries 
   AliFragFuncHistos*  fFFHistosSecRecK;                   //! secondary contamination: FF reconstructed secondaries 
@@ -507,6 +525,13 @@ class AliAnalysisTaskIDFFTCF : public AliAnalysisTaskSE {
   AliFragFuncHistos*  fFFHistosSecRecProGFL;              //! secondary contamination: FF reconstructed secondaries 
   AliFragFuncHistos*  fFFHistosSecRecKGFL;                //! secondary contamination: FF reconstructed secondaries 
 
+  AliFragFuncHistos*  fFFHistosSecRecPiSSc;            //! tracking efficiency: FF reconstructed primaries
+  AliFragFuncHistos*  fFFHistosSecRecProSSc;           //! tracking efficiency: FF reconstructed primaries
+  AliFragFuncHistos*  fFFHistosSecRecKSSc;             //! tracking efficiency: FF reconstructed primaries
+  AliFragFuncHistos*  fFFHistosSecRecElSSc;            //! tracking efficiency: FF reconstructed primaries
+  AliFragFuncHistos*  fFFHistosSecRecMuSSc;            //! tracking efficiency: FF reconstructed primaries
+  AliFragFuncHistos*  fFFHistosSecRecProGFLSSc;        //! tracking efficiency: FF reconstructed primaries
+  AliFragFuncHistos*  fFFHistosSecRecKGFLSSc;          //! tracking efficiency: FF reconstructed primaries
 
 
   TRandom3*                   fRandom;          // TRandom3 for background estimation 
index dacb4a842583ba48537977cd9e3f3d35b6128406..d30fcd8d8fe079e026b28189d3a08e44eb2b4d33 100644 (file)
@@ -4,6 +4,7 @@
 #include "TH1.h"
 #include "TH2.h"
 #include "TH3.h"
+#include "TF1.h"
 #include "TFormula.h"
 #include "TRandom.h"
 
@@ -72,6 +73,7 @@ AliAnalysisTaskJetProtonCorr::AliAnalysisTaskJetProtonCorr(const char *name) :
   fPoolMgr(),
   fPool(),
   fHistCorr(0x0),
+  fErrorMsg(10),
   fOutputList(),
   fHist(),
   fShortTaskId("jet_prot_corr"),
@@ -81,14 +83,23 @@ AliAnalysisTaskJetProtonCorr::AliAnalysisTaskJetProtonCorr(const char *name) :
   fCutsPrimTrgConstrain(new AliESDtrackCuts()),
   fCutsPrimAss(0x0),
   fCutsTwoTrackEff(0.02),
+  fAssFilterMask(1 << 10),
+  fRequirePID(kTRUE),
+  fTrgJetEtaMax(0.45),
+  fHadEtaMax(0.8),
   fTrgPartPtMin(6.),
   fTrgPartPtMax(8.),
   fTrgJetPtMin(50.),
   fTrgJetPtMax(80.),
-  fTrgJetLeadTrkPtMin(5.),
+  fTrgJetLeadTrkPtMin(6.),
+  fTrgJetLeadTrkPtMax(100.),
+  fTrgJetAreaMin(0.6 * TMath::Pi() * 0.2*0.2),
   fAssPartPtMin(2.),
   fAssPartPtMax(4.),
   fTrgAngleToEvPlane(TMath::Pi() / 4.),
+  fToyMeanNoPart(1.),
+  fToyRadius(.8),
+  fToySmearPhi(.2),
   fTrgJetPhiModCent(new TF1("jetphimodcent", "1 + 2 * [0] * cos(2*x)", 0., 2 * TMath::Pi())),
   fTrgJetPhiModSemi(new TF1("jetphimodsemi", "1 + 2 * [0] * cos(2*x)", 0., 2 * TMath::Pi())),
   fTrgHadPhiModCent(new TF1("hadphimodcent", "1 + 2 * [0] * cos(2*x)", 0., 2 * TMath::Pi())),
@@ -147,15 +158,15 @@ AliAnalysisTaskJetProtonCorr::AliAnalysisTaskJetProtonCorr(const char *name) :
 
   }
 
-  fCutsPrimAss->SetEtaRange(-0.9, 0.9);
+  fCutsPrimAss->SetEtaRange(-fHadEtaMax, fHadEtaMax);
   fCutsPrimAss->SetPtRange(0.15, 1E+15);
 
   // track cuts for triggers
   fCutsPrimTrg = new AliESDtrackCuts(*fCutsPrimAss);
 
   // azimuthal modulation for triggers
-  fTrgJetPhiModCent->SetParameter(0, .02);
-  fTrgJetPhiModSemi->SetParameter(0, .02);
+  fTrgJetPhiModCent->SetParameter(0, .10);
+  fTrgJetPhiModSemi->SetParameter(0, .10);
   fTrgHadPhiModCent->SetParameter(0, .04);
   fTrgHadPhiModSemi->SetParameter(0, .10);
 
@@ -267,165 +278,165 @@ void AliAnalysisTaskJetProtonCorr::UserCreateOutputObjects()
               100, 0., 100.,
               100, 0., 2500.);
 
-  AddHistogram(ID(kHistSignalTPC), "TPC dE/dx;p (GeV/c);dE/dx (arb. units)",
+  AddHistogram(ID(kHistSignalTPC), "TPC dE/dx;p (GeV/#it{c});dE/dx (arb. units)",
               100, 0., 10., 200, 0., 300.);
-  AddHistogram(ID(kHistSignalTOF), "TOF time of flight;p_{T} (GeV/c);t (ns)",
+  AddHistogram(ID(kHistSignalTOF), "TOF time of flight;p_{T} (GeV/#it{c});t (ns)",
               100, 0., 10., 200, 0., 50.);
-  AddHistogram(ID(kHistBetaTOF), "TOF beta;p (GeV/c); #beta",
+  AddHistogram(ID(kHistBetaTOF), "TOF beta;p (GeV/#it{c}); #beta",
               100, 0., 10.,
               100, 0., 1.);
 
-  AddHistogram(ID(kHistDeltaTPC), "TPC dE/dx;p (GeV/c);dE/dx (arb. units)",
+  AddHistogram(ID(kHistDeltaTPC), "TPC dE/dx;p (GeV/#it{c});dE/dx (arb. units)",
               100, 0., 10., 200, -100., 100.);
-  AddHistogram(ID(kHistDeltaTPCSemi), "TPC dE/dx;p (GeV/c);dE/dx (arb. units)",
+  AddHistogram(ID(kHistDeltaTPCSemi), "TPC dE/dx;p (GeV/#it{c});dE/dx (arb. units)",
               100, 0., 10., 200, -100., 100.);
-  AddHistogram(ID(kHistDeltaTOF), "TOF time of flight;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOF), "TOF time of flight;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
-  AddHistogram(ID(kHistDeltaTOFSemi), "TOF time of flight;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFSemi), "TOF time of flight;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
 
   // Nsigma templates - central
-  AddHistogram(ID(kHistNsigmaTPCe), "TPC N_{#sigma,p} - e hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCe), "TPC N_{#sigma,p} - e hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCmu), "TPC N_{#sigma,p} - #mu hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCmu), "TPC N_{#sigma,p} - #mu hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCpi), "TPC N_{#sigma,p} - #pi hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCpi), "TPC N_{#sigma,p} - #pi hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCk), "TPC N_{#sigma,p} - K hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCk), "TPC N_{#sigma,p} - K hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCp), "TPC N_{#sigma,p} - p hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCp), "TPC N_{#sigma,p} - p hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCd), "TPC N_{#sigma,p} - d hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCd), "TPC N_{#sigma,p} - d hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCe_e), "TPC N_{#sigma,p} - e hypothesis (id. e);p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCe_e), "TPC N_{#sigma,p} - e hypothesis (id. e);p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
 
-  AddHistogram(ID(kHistNsigmaTOFe), "TOF N_{#sigma,p} - e hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFe), "TOF N_{#sigma,p} - e hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFmu), "TOF N_{#sigma,p} - #mu hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFmu), "TOF N_{#sigma,p} - #mu hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFpi), "TOF N_{#sigma,p} - #pi hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFpi), "TOF N_{#sigma,p} - #pi hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFk), "TOF N_{#sigma,p} - K hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFk), "TOF N_{#sigma,p} - K hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFp), "TOF N_{#sigma,p} - p hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFp), "TOF N_{#sigma,p} - p hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFd), "TOF N_{#sigma,p} - d hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFd), "TOF N_{#sigma,p} - d hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFmismatch), "TOF N_{#sigma,p} - mismatch;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFmismatch), "TOF N_{#sigma,p} - mismatch;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
 
   // Nsigma templates - semi-central
-  AddHistogram(ID(kHistNsigmaTPCeSemi), "TPC N_{#sigma,p} - e hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCeSemi), "TPC N_{#sigma,p} - e hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCmuSemi), "TPC N_{#sigma,p} - #mu hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCmuSemi), "TPC N_{#sigma,p} - #mu hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCpiSemi), "TPC N_{#sigma,p} - #pi hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCpiSemi), "TPC N_{#sigma,p} - #pi hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCkSemi), "TPC N_{#sigma,p} - K hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCkSemi), "TPC N_{#sigma,p} - K hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCpSemi), "TPC N_{#sigma,p} - p hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCpSemi), "TPC N_{#sigma,p} - p hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCdSemi), "TPC N_{#sigma,p} - d hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCdSemi), "TPC N_{#sigma,p} - d hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
-  AddHistogram(ID(kHistNsigmaTPCe_eSemi), "TPC N_{#sigma,p} - e hypothesis (id. e);p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTPCe_eSemi), "TPC N_{#sigma,p} - e hypothesis (id. e);p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               100, -25., 25.);
 
-  AddHistogram(ID(kHistNsigmaTOFeSemi), "TOF N_{#sigma,p} - e hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFeSemi), "TOF N_{#sigma,p} - e hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFmuSemi), "TOF N_{#sigma,p} - #mu hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFmuSemi), "TOF N_{#sigma,p} - #mu hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFpiSemi), "TOF N_{#sigma,p} - #pi hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFpiSemi), "TOF N_{#sigma,p} - #pi hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFkSemi), "TOF N_{#sigma,p} - K hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFkSemi), "TOF N_{#sigma,p} - K hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFpSemi), "TOF N_{#sigma,p} - p hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFpSemi), "TOF N_{#sigma,p} - p hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFdSemi), "TOF N_{#sigma,p} - d hypothesis;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFdSemi), "TOF N_{#sigma,p} - d hypothesis;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTOFmismatchSemi), "TOF N_{#sigma,p} - mismatch;p (GeV/c);N_{#sigma,p}",
+  AddHistogram(ID(kHistNsigmaTOFmismatchSemi), "TOF N_{#sigma,p} - mismatch;p (GeV/#it{c});N_{#sigma,p}",
               100, 0., 10.,
               200, -100., 100.);
 
   // delta templates
-  AddHistogram(ID(kHistDeltaTOFe), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFe), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
-  AddHistogram(ID(kHistDeltaTOFmu), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFmu), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
-  AddHistogram(ID(kHistDeltaTOFpi), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFpi), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
-  AddHistogram(ID(kHistDeltaTOFk), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFk), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
-  AddHistogram(ID(kHistDeltaTOFp), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFp), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
-  AddHistogram(ID(kHistDeltaTOFd), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFd), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
 
-  AddHistogram(ID(kHistDeltaTOFeSemi), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFeSemi), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
-  AddHistogram(ID(kHistDeltaTOFmuSemi), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFmuSemi), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
-  AddHistogram(ID(kHistDeltaTOFpiSemi), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFpiSemi), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
-  AddHistogram(ID(kHistDeltaTOFkSemi), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFkSemi), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
-  AddHistogram(ID(kHistDeltaTOFpSemi), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFpSemi), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
-  AddHistogram(ID(kHistDeltaTOFdSemi), "TOF #Delta;p (GeV/c);t (ns)",
+  AddHistogram(ID(kHistDeltaTOFdSemi), "TOF #Delta;p (GeV/#it{c});t (ns)",
               100, 0., 10., 200, -2., 2.);
 
   // sigma comparisons
-  // AddHistogram(ID(kHistExpSigmaTOFe), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFe), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
-  // AddHistogram(ID(kHistExpSigmaTOFmu), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFmu), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
-  // AddHistogram(ID(kHistExpSigmaTOFpi), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFpi), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
-  // AddHistogram(ID(kHistExpSigmaTOFk), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFk), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
-  // AddHistogram(ID(kHistExpSigmaTOFp), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFp), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
-  // AddHistogram(ID(kHistExpSigmaTOFd), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFd), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
 
-  // AddHistogram(ID(kHistExpSigmaTOFeSemi), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFeSemi), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
-  // AddHistogram(ID(kHistExpSigmaTOFmuSemi), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFmuSemi), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
-  // AddHistogram(ID(kHistExpSigmaTOFpiSemi), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFpiSemi), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
-  // AddHistogram(ID(kHistExpSigmaTOFkSemi), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFkSemi), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
-  // AddHistogram(ID(kHistExpSigmaTOFpSemi), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFpSemi), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
-  // AddHistogram(ID(kHistExpSigmaTOFdSemi), "TOF time of flight;p (GeV/c);t (ns)",
+  // AddHistogram(ID(kHistExpSigmaTOFdSemi), "TOF time of flight;p (GeV/#it{c});t (ns)",
   //          100, 0., 10., 200, 0., .25);
 
   // AddHistogram(ID(kHistCmpSigmaTOFe), "#sigma comparison;exp #sigma;template #sigma",
@@ -455,35 +466,35 @@ void AliAnalysisTaskJetProtonCorr::UserCreateOutputObjects()
   //          200, 0., .25, 200, 0., .25);
 
   // Nsigma distributions
-  AddHistogram(ID(kHistNsigmaTPCTOF), "N_{#sigma,p} TPC-TOF;p (GeV/c);N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
+  AddHistogram(ID(kHistNsigmaTPCTOF), "N_{#sigma,p} TPC-TOF;p (GeV/#it{c});N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
                100, 0., 10.,
                100, -25., 25.,
                200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTPCTOFPt), "N_{#sigma,p} TPC-TOF;p_{T} (GeV/c);N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
+  AddHistogram(ID(kHistNsigmaTPCTOFPt), "N_{#sigma,p} TPC-TOF;p_{T} (GeV/#it{c});N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
                100, 0., 10.,
                100, -25., 25.,
                200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTPCTOFUsed), "N_{#sigma,p} TPC-TOF;p (GeV/c);N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
+  AddHistogram(ID(kHistNsigmaTPCTOFUsed), "N_{#sigma,p} TPC-TOF;p (GeV/#it{c});N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
                100, 0., 10.,
                100, -25., 25.,
                200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTPCTOFUsedCentral), "N_{#sigma,p} TPC-TOF (central);p (GeV/c);N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
+  AddHistogram(ID(kHistNsigmaTPCTOFUsedCentral), "N_{#sigma,p} TPC-TOF (central);p (GeV/#it{c});N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
                100, 0., 10.,
                100, -25., 25.,
                200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTPCTOFUsedSemiCentral), "N_{#sigma,p} TPC-TOF (semi-central);p (GeV/c);N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
+  AddHistogram(ID(kHistNsigmaTPCTOFUsedSemiCentral), "N_{#sigma,p} TPC-TOF (semi-central);p (GeV/#it{c});N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
                100, 0., 10.,
                100, -25., 25.,
                200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTPCTOFUsedPt), "N_{#sigma,p} TPC-TOF;p_{T} (GeV/c);N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
+  AddHistogram(ID(kHistNsigmaTPCTOFUsedPt), "N_{#sigma,p} TPC-TOF;p_{T} (GeV/#it{c});N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
                50, 0., 10.,
                100, -25., 25.,
                200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTPCTOFUsedPtCentral), "N_{#sigma,p} TPC-TOF;p_{T} (GeV/c);N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
+  AddHistogram(ID(kHistNsigmaTPCTOFUsedPtCentral), "N_{#sigma,p} TPC-TOF;p_{T} (GeV/#it{c});N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
                50, 0., 10.,
                100, -25., 25.,
                200, -100., 100.);
-  AddHistogram(ID(kHistNsigmaTPCTOFUsedPtSemiCentral), "N_{#sigma,p} TPC-TOF;p_{T} (GeV/c);N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
+  AddHistogram(ID(kHistNsigmaTPCTOFUsedPtSemiCentral), "N_{#sigma,p} TPC-TOF;p_{T} (GeV/#it{c});N_{#sigma,p}^{TPC};N_{#sigma,p}^{TOF}",
                50, 0., 10.,
                100, -25., 25.,
                200, -100., 100.);
@@ -533,39 +544,45 @@ void AliAnalysisTaskJetProtonCorr::UserCreateOutputObjects()
 
   AddHistogram(ID(kHistPhiTrgJetEvPlane), "trg jet;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiTrgHadEvPlane), "trg had;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
+  AddHistogram(ID(kHistPhiRndTrgJetEvPlane), "rnd trg jet;#varphi - #Psi_{ev};centrality",
+              100, -0. * TMath::Pi(), 2. * TMath::Pi(),
+              100, 0., 100.);
+  AddHistogram(ID(kHistPhiRndTrgHadEvPlane), "rnd trg had;#varphi - #Psi_{ev};centrality",
+              100, -0. * TMath::Pi(), 2. * TMath::Pi(),
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiAssHadEvPlane), "ass had;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiAssProtEvPlane), "ass prot;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiAssHadVsEvPlane), "ass had;#Psi_{ev};#varphi;centrality",
               100, -0. * TMath::Pi(), 1. * TMath::Pi(),
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
 
   AddHistogram(ID(kHistPhiTrgJetEvPlane3), "trg jet;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiTrgHadEvPlane3), "trg had;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiAssHadEvPlane3), "ass had;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
   AddHistogram(ID(kHistPhiAssProtEvPlane3), "ass prot;#varphi - #Psi_{ev};centrality",
               100, -0. * TMath::Pi(), 2. * TMath::Pi(),
-              100., 0., 100.);
+              100, 0., 100.);
 
   for (Int_t iCorr = 0; iCorr < kCorrLast; ++iCorr) {
     for (Int_t iCl = 0; iCl < kClLast; ++iCl) {
       for (Int_t iEv = 0; iEv < kEvLast; ++iEv) {
        // we don't need the mixed event histograms for the embedded excess particles
-       if ((iCorr > kCorrRndHadProt) && (iEv == kEvMix))
+       if ((iCorr > kCorrRndJetProt) && (iEv == kEvMix))
          continue;
 
        GetHistCorr((CorrType_t) iCorr, (Class_t) iCl, (Ev_t) iEv) =
@@ -871,11 +888,11 @@ void AliAnalysisTaskJetProtonCorr::UserExec(Option_t * /* option */)
          Double_t rndTOFmismatch = AliTOFPIDResponse::GetMismatchRandomValue(trk->Eta());
 
          if(IsClass(kClCentral)) {
-           FillH2(kHistNsigmaTOFmismatch, p, (rndTOFmismatch - expTOF) / expSigmaTOF);
+           FillH2(kHistNsigmaTOFmismatch, trk->P(), (rndTOFmismatch - expTOF) / expSigmaTOF);
            FillH2(kHistDeltaTOF, trk->P(), deltaTOF * 1.e-3); // ps -> ns
          }
          if(IsClass(kClSemiCentral)) {
-           FillH2(kHistNsigmaTOFmismatchSemi, p, (rndTOFmismatch - expTOF) / expSigmaTOF);
+           FillH2(kHistNsigmaTOFmismatchSemi, trk->P(), (rndTOFmismatch - expTOF) / expSigmaTOF);
            FillH2(kHistDeltaTOFSemi, trk->P(), deltaTOF * 1.e-3); // ps -> ns
          }
        }
@@ -1139,9 +1156,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::PrepareEvent()
     const Int_t nTracksAODAss = fAODEvent->GetNumberOfTracks();
     for (Int_t iTrack = 0; iTrack < nTracksAODAss; ++iTrack) {
       AliAODTrack *trk = fAODEvent->GetTrack(iTrack);
-      // 4: track cuts esdTrackCutsH ???
-      // 10: R_AA cuts
-      if (trk->TestFilterMask(1 << 4))
+      if (trk->TestFilterBit(fAssFilterMask))
         fPrimTrackArrayAss->Add(trk);
     }
 
@@ -1165,7 +1180,10 @@ Bool_t AliAnalysisTaskJetProtonCorr::PrepareEvent()
       if (AODEvent())
         fJetArray = dynamic_cast<TClonesArray*> (AODEvent()->FindListObject(fJetBranchName));
       if (!fJetArray) {
-        printf("no jet branch \"%s\" found, in the AODs are:\n", fJetBranchName);
+       if (fErrorMsg > 0) {
+         AliError(Form("no jet branch \"%s\" found, in the AODs are:", fJetBranchName));
+         --fErrorMsg;
+       }
         if (fDebug > 0) {
          fAODEvent->GetList()->Print();
           if (AODEvent())
@@ -1188,8 +1206,11 @@ Bool_t AliAnalysisTaskJetProtonCorr::PrepareEvent()
   return eventGood;
 }
 
-Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(AliVTrack *trg)
+Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(const AliVTrack *trg)
 {
+  if (TMath::Abs(trg->Eta()) > fHadEtaMax)
+    return kFALSE;
+
   // check pt interval
   Bool_t acceptPt =
     (trg->Pt() >= fTrgPartPtMin) &&
@@ -1216,7 +1237,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(AliVTrack *trg)
   return (acceptPt && acceptOrientation);
 }
 
-AliVTrack* AliAnalysisTaskJetProtonCorr::GetLeadingTrack(AliAODJet *jet) const
+AliVTrack* AliAnalysisTaskJetProtonCorr::GetLeadingTrack(const AliAODJet *jet) const
 {
   // return leading track within a jet
 
@@ -1237,15 +1258,22 @@ AliVTrack* AliAnalysisTaskJetProtonCorr::GetLeadingTrack(AliAODJet *jet) const
   return (AliAODTrack*) jet->GetRefTracks()->At(iLeadingTrack);
 }
 
-Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(AliAODJet *trg)
+Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(const AliAODJet *trg)
 {
   // restrict eta
-  if (TMath::Abs(trg->Eta()) > .5)
+  if (TMath::Abs(trg->Eta()) > fTrgJetEtaMax)
+    return kFALSE;
+
+  // reject too small jets
+  if (trg->EffectiveAreaCharged() < fTrgJetAreaMin)
     return kFALSE;
 
   // require hard leading track
   // (leading track biased jet sample)
-  if (GetLeadingTrack(trg)->Pt() < fTrgJetLeadTrkPtMin)
+  // but reject jets with too high pt constituents
+  const Float_t ptLeadTrack = GetLeadingTrack(trg)->Pt();
+  if ((ptLeadTrack < fTrgJetLeadTrkPtMin) ||
+      (ptLeadTrack > fTrgJetLeadTrkPtMax))
     return kFALSE;
 
   // check for jet orientation w.r.t. event plane
@@ -1253,6 +1281,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(AliAODJet *trg)
   Bool_t acceptOrientation = IsSemiCentral() ?
     AcceptAngleToEvPlane(trg->Phi(), GetEventPlaneAngle()) :
     kTRUE;
+
   // check for jet pt
   Bool_t acceptPt =
     (trg->Pt() >= fTrgJetPtMin) &&
@@ -1284,21 +1313,30 @@ Bool_t AliAnalysisTaskJetProtonCorr::AcceptTrigger(AliAODJet *trg)
   return (acceptPt && acceptOrientation);
 }
 
-Bool_t AliAnalysisTaskJetProtonCorr::AcceptAssoc(AliVTrack *trk)
+Bool_t AliAnalysisTaskJetProtonCorr::AcceptAssoc(const AliVTrack *trk) const
 {
-  if ((trk->Pt() > fAssPartPtMin) && (trk->Pt() < fAssPartPtMax) &&
-      (fPIDResponse->CheckPIDStatus(AliPIDResponse::kTPC, trk) == AliPIDResponse::kDetPidOk) &&
-      (fPIDResponse->CheckPIDStatus(AliPIDResponse::kTOF, trk) == AliPIDResponse::kDetPidOk))
-    if ((trk->GetTPCsignalN() >= 60.) &&
-       (trk->GetTPCsignal() >= 10) &&
-       (TMath::Abs(trk->Eta()) < .9))
+  if ((trk->Pt() > fAssPartPtMin) && (trk->Pt() < fAssPartPtMax) && (TMath::Abs(trk->Eta()) < fHadEtaMax))
+    if (fRequirePID) {
+      if ((fPIDResponse->CheckPIDStatus(AliPIDResponse::kTPC, trk) == AliPIDResponse::kDetPidOk) &&
+         (fPIDResponse->CheckPIDStatus(AliPIDResponse::kTOF, trk) == AliPIDResponse::kDetPidOk) && 
+         (trk->GetTPCsignalN() >= 60.) && (trk->GetTPCsignal() >= 10))
+       return kTRUE;
+      else
+       return kFALSE;
+    }
+    else
       return kTRUE;
-
-  return kFALSE;
+  else
+    return kFALSE;
 }
 
-Bool_t AliAnalysisTaskJetProtonCorr::IsProton(AliVTrack *trk)
+Bool_t AliAnalysisTaskJetProtonCorr::IsProton(const AliVTrack *trk) const
 {
+  if ((fPIDResponse->CheckPIDStatus(AliPIDResponse::kTPC, trk) != AliPIDResponse::kDetPidOk) ||
+      (fPIDResponse->CheckPIDStatus(AliPIDResponse::kTOF, trk) != AliPIDResponse::kDetPidOk) || 
+      (trk->GetTPCsignalN() < 60.) || (trk->GetTPCsignal() < 10))
+    return kFALSE;
+
   Double_t nSigmaProtonTPC = fPIDResponse->NumberOfSigmasTPC(trk, AliPID::kProton);
   Double_t nSigmaProtonTOF = fPIDResponse->NumberOfSigmasTOF(trk, AliPID::kProton);
 
@@ -1309,7 +1347,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::IsProton(AliVTrack *trk)
   return kFALSE;
 }
 
-Bool_t AliAnalysisTaskJetProtonCorr::AcceptAngleToEvPlane(Float_t phi, Float_t psi)
+Bool_t AliAnalysisTaskJetProtonCorr::AcceptAngleToEvPlane(Float_t phi, Float_t psi) const
 {
   Float_t deltaPhi = phi - psi;
   while (deltaPhi < 0.)
@@ -1327,7 +1365,7 @@ Bool_t AliAnalysisTaskJetProtonCorr::AcceptAngleToEvPlane(Float_t phi, Float_t p
 
 Float_t AliAnalysisTaskJetProtonCorr::GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1,
                                                  Float_t phi2, Float_t pt2, Float_t charge2,
-                                                 Float_t radius, Float_t bSign)
+                                                 Float_t radius, Float_t bSign) const
 {
   // calculates dphistar
   // from AliUEHistograms
@@ -1350,7 +1388,7 @@ Float_t AliAnalysisTaskJetProtonCorr::GetDPhiStar(Float_t phi1, Float_t pt1, Flo
 }
 
 
-Bool_t AliAnalysisTaskJetProtonCorr::AcceptTwoTracks(AliVParticle *trgPart, AliVParticle *assPart)
+Bool_t AliAnalysisTaskJetProtonCorr::AcceptTwoTracks(const AliVParticle *trgPart, const AliVParticle *assPart) const
 {
   // apply two track pair cut
 
@@ -1456,6 +1494,12 @@ Bool_t AliAnalysisTaskJetProtonCorr::Correlate(CorrType_t corr, Class_t cl, Ev_t
 Bool_t AliAnalysisTaskJetProtonCorr::Correlate(Trg_t trg, Ass_t ass, Class_t cl, Ev_t ev,
                                               TCollection *trgArray, TCollection *assArray, Float_t weight)
 {
+  if ((trg < 0) || (trg > kTrgJetRnd))
+    AliFatal(Form("wrong request for correlation with trigger: %d", trg));
+
+  if ((ass < 0) || (ass > kAssProt))
+    AliFatal(Form("wrong request for correlation with associate: %d", ass));
+
   CorrType_t corr = (CorrType_t) (2 * trg + ass);
 
   return Correlate(corr, cl, ev, trgArray, assArray, weight);
@@ -1471,24 +1515,27 @@ Bool_t AliAnalysisTaskJetProtonCorr::GenerateRandom(TCollection *trgJetArray,
 {
   // generate random direction
 
-  Float_t meanNoPart = 10;
-  Int_t nPart = gRandom->Poisson(meanNoPart);
+  const Int_t nPart = gRandom->Poisson(fToyMeanNoPart);
 
-  Float_t trgJetEta = gRandom->Uniform(-.5, .5);
+  Float_t trgJetEta = gRandom->Uniform(-fTrgJetEtaMax, fTrgJetEtaMax);
   Float_t trgJetPhi = 0.;
-  if (IsClass(kClSemiCentral)) {
-    do {
-      trgJetPhi = fTrgJetPhiModSemi->GetRandom();
-    } while (!AcceptAngleToEvPlane(trgJetPhi, 0));
+  do {
+    trgJetPhi = IsClass(kClSemiCentral) ?
+      fTrgJetPhiModSemi->GetRandom() :
+      fTrgJetPhiModCent->GetRandom();
+
     trgJetPhi += fEventPlaneAngle;
     if (trgJetPhi < 0.)
       trgJetPhi += 2. * TMath::Pi();
     else if (trgJetPhi > 2. * TMath::Pi())
       trgJetPhi -= 2. * TMath::Pi();
-  }
-  else {
-    trgJetPhi = fTrgJetPhiModCent->GetRandom();
-  }
+
+    Float_t phiRel = trgJetPhi- fEventPlaneAngle;
+    if (phiRel < 0.)
+      phiRel += 2. * TMath::Pi();
+    FillH2(kHistPhiRndTrgJetEvPlane, phiRel, fCentrality);
+  } while (IsClass(kClSemiCentral) &&
+          !AcceptAngleToEvPlane(trgJetPhi, GetEventPlaneAngle()));
 
   // generate one trigger particle
   TLorentzVector *trgJet = new TLorentzVector();
@@ -1496,14 +1543,14 @@ Bool_t AliAnalysisTaskJetProtonCorr::GenerateRandom(TCollection *trgJetArray,
   trgJetArray->Add(trgJet);
 
   // generate direction for away side
-  Float_t trgJetEtaAway = gRandom->Uniform(-.9, .9);
-  Float_t trgJetPhiAway = trgJetPhi + TMath::Pi() + gRandom->Gaus(0., .2);
+  Float_t trgJetEtaAway = gRandom->Uniform(-fHadEtaMax, fHadEtaMax);
+  Float_t trgJetPhiAway = trgJetPhi + TMath::Pi() + gRandom->Gaus(0., fToySmearPhi);
 
   // generate associated particles
   // with proton/hadron ratio observed in this event
   for (Int_t iPart = 0; iPart < nPart; ++iPart) {
     Float_t deltaEta, deltaPhi;
-    const Float_t r = .8;
+    const Float_t r = fToyRadius;
     do {
       deltaEta = gRandom->Uniform(-r, r);
       deltaPhi = gRandom->Uniform(-r, r);
@@ -1512,13 +1559,13 @@ Bool_t AliAnalysisTaskJetProtonCorr::GenerateRandom(TCollection *trgJetArray,
     TLorentzVector *assPart = new TLorentzVector();
     Float_t eta = trgJetEtaAway + deltaEta;
     Float_t phi = trgJetPhiAway + deltaPhi;
-    if (eta > .9) {
+    if (TMath::Abs(eta) > fHadEtaMax) {
       delete assPart;
       continue;
     }
-    if (phi < 0.)
+    while (phi < 0.)
       phi += 2. * TMath::Pi();
-    else if (phi > 2. * TMath::Pi())
+    while (phi > 2. * TMath::Pi())
       phi -= 2. * TMath::Pi();
     assPart->SetPtEtaPhiM(3., eta, phi, .14);
     assHadJetArray->Add(assPart);
@@ -1527,21 +1574,25 @@ Bool_t AliAnalysisTaskJetProtonCorr::GenerateRandom(TCollection *trgJetArray,
   }
 
   // trigger hadron
-  Float_t trgHadEta = gRandom->Uniform(-.9, .9);
+  Float_t trgHadEta = gRandom->Uniform(-fHadEtaMax, fHadEtaMax);
   Float_t trgHadPhi = 0.;
-  if (IsClass(kClSemiCentral)) {
-    do {
-      trgHadPhi = fTrgHadPhiModSemi->GetRandom();
-    } while (!AcceptAngleToEvPlane(trgHadPhi, 0));
+  do {
+    trgHadPhi = IsClass(kClSemiCentral) ?
+      fTrgHadPhiModSemi->GetRandom() :
+      fTrgHadPhiModCent->GetRandom();
+
     trgHadPhi += fEventPlaneAngle;
     if (trgHadPhi < 0.)
       trgHadPhi += 2. * TMath::Pi();
     else if (trgHadPhi > 2. * TMath::Pi())
       trgHadPhi -= 2. * TMath::Pi();
-  }
-  else {
-    trgHadPhi = fTrgHadPhiModCent->GetRandom();
-  }
+
+    Float_t phiRel = trgHadPhi - fEventPlaneAngle;
+    if (phiRel < 0.)
+      phiRel += 2. * TMath::Pi();
+    FillH2(kHistPhiRndTrgHadEvPlane, phiRel, fCentrality);
+  } while (IsClass(kClSemiCentral) &&
+          !AcceptAngleToEvPlane(trgHadPhi, GetEventPlaneAngle()));
 
   // generate one trigger particle
   TLorentzVector *trgHad = new TLorentzVector();
@@ -1549,14 +1600,14 @@ Bool_t AliAnalysisTaskJetProtonCorr::GenerateRandom(TCollection *trgJetArray,
   trgHadArray->Add(trgHad);
 
   // generate direction for away side
-  Float_t trgHadEtaAway = gRandom->Uniform(-.9, .9);
-  Float_t trgHadPhiAway = trgHadPhi + TMath::Pi() + gRandom->Gaus(0., .2);
+  Float_t trgHadEtaAway = gRandom->Uniform(-fHadEtaMax, fHadEtaMax);
+  Float_t trgHadPhiAway = trgHadPhi + TMath::Pi() + gRandom->Gaus(0., fToySmearPhi);
 
   // generate associated particles
   // with proton/hadron ratio observed in this event
   for (Int_t iPart = 0; iPart < nPart; ++iPart) {
     Float_t deltaEta, deltaPhi;
-    const Float_t r = .8;
+    const Float_t r = fToyRadius;
     do {
       deltaEta = gRandom->Uniform(-r, r);
       deltaPhi = gRandom->Uniform(-r, r);
@@ -1565,13 +1616,13 @@ Bool_t AliAnalysisTaskJetProtonCorr::GenerateRandom(TCollection *trgJetArray,
     TLorentzVector *assPart = new TLorentzVector();
     Float_t eta = trgHadEtaAway + deltaEta;
     Float_t phi = trgHadPhiAway + deltaPhi;
-    if (eta > .9) {
+    if (TMath::Abs(eta) > fHadEtaMax) {
       delete assPart;
       continue;
     }
-    if (phi < 0.)
+    while (phi < 0.)
       phi += 2. * TMath::Pi();
-    else if (phi > 2. * TMath::Pi())
+    while (phi > 2. * TMath::Pi())
       phi -= 2. * TMath::Pi();
     assPart->SetPtEtaPhiM(3., eta, phi, .14);
     assHadHadArray->Add(assPart);
@@ -1603,15 +1654,16 @@ TObjArray* AliAnalysisTaskJetProtonCorr::CloneTracks(TObjArray* tracks) const
 
   Int_t nTracks = tracks->GetEntriesFast();
   for (Int_t i = 0; i < nTracks; i++) {
-    // tracksClone->Add(new AliDPhiBasicParticle(particle->Eta(), particle->Phi(), particle->Pt(), particle->Charge()));
-
     // WARNING: TObject::Clone() is very!!! expensive, unusable
     // tracksClone->Add(particle->Clone());
 
-    if (AliESDtrack* esdTrack = dynamic_cast<AliESDtrack*> (tracks->At(i)))
-      tracksClone->Add(new AliESDtrack(*esdTrack));
-    else if (AliAODTrack* aodTrack = dynamic_cast<AliAODTrack*> (tracks->At(i)))
-      tracksClone->Add(new AliAODTrack(*aodTrack));
+    // if (AliESDtrack* esdTrack = dynamic_cast<AliESDtrack*> (tracks->At(i)))
+    //   tracksClone->Add(new AliESDtrack(*esdTrack));
+    // else if (AliAODTrack* aodTrack = dynamic_cast<AliAODTrack*> (tracks->At(i)))
+    //   tracksClone->Add(new AliAODTrack(*aodTrack));
+
+    if (const AliVTrack *track = dynamic_cast<const AliVTrack*> (tracks->At(i)))
+      tracksClone->Add(new AliPartCorr(*track));
   }
 
   return tracksClone;
@@ -1626,44 +1678,47 @@ AliAnalysisTaskJetProtonCorr::AliHistCorr::AliHistCorr(TString name, TList *outp
   fHistCorrEtaPhi(0x0),
   fHistCorrAvgEtaPhi(0x0),
   fHistCorrTrgEtaPhi(0x0),
-  fHistCorrAssEtaPhi(0x0)
+  fHistCorrAssEtaPhi(0x0),
+  fHistDphiLo(-TMath::Pi() / 2.),
+  fHistDphiNbins(120),
+  fHistDetaNbins(120)
 {
   // ctor
 
   fHistStat = new TH1F(Form("%s_stat", name.Data()), "statistics",
                       1, .5, 1.5);
 
-  fHistCorrPhi = new TH1F(Form("%s_phi", name.Data()), ";#Delta #phi",
-                         100, -2.*TMath::Pi(), 2.*TMath::Pi());
+  fHistCorrPhi = new TH1F(Form("%s_phi", name.Data()), ";#Delta#phi",
+                         fHistDphiNbins, fHistDphiLo, 2.*TMath::Pi() + fHistDphiLo);
   fHistCorrPhi->Sumw2();
-  fHistCorrPhi2 = new TH2F(Form("%s_phi2", name.Data()), ";#phi_{trg};#phi_{ass}",
-                         100, 0.*TMath::Pi(), 2.*TMath::Pi(),
-                         100, 0.*TMath::Pi(), 2.*TMath::Pi());
-  fHistCorrPhi2->Sumw2();
+  // fHistCorrPhi2 = new TH2F(Form("%s_phi2", name.Data()), ";#phi_{trg};#phi_{ass}",
+  //                     120, 0.*TMath::Pi(), 2.*TMath::Pi(),
+  //                     120, 0.*TMath::Pi(), 2.*TMath::Pi());
+  // fHistCorrPhi2->Sumw2();
   fHistCorrEtaPhi = new TH2F(Form("%s_etaphi", name.Data()), ";#Delta#phi;#Delta#eta",
-                            100, -1., 2*TMath::Pi()-1.,
-                            100, -2., 2.);
+                            fHistDphiNbins, fHistDphiLo, 2*TMath::Pi() + fHistDphiLo,
+                            fHistDetaNbins, -2., 2.);
   fHistCorrEtaPhi->Sumw2();
-  fHistCorrAvgEtaPhi = new TH2F(Form("%s_avgetaphi", name.Data()), ";#Delta#phi;avg #eta",
-                               100, -1., 2*TMath::Pi()-1.,
-                               100, -2., 2.);
-  fHistCorrAvgEtaPhi->Sumw2();
-  fHistCorrTrgEtaPhi = new TH2F(Form("%s_trg_etaphi", name.Data()), ";#varphi;#eta",
-                               100, 0., 2*TMath::Pi(),
-                               100, -1., 1.);
-  fHistCorrTrgEtaPhi->Sumw2();
-  fHistCorrAssEtaPhi = new TH2F(Form("%s_ass_etaphi", name.Data()), ";#varphi;#eta",
-                               100, 0., 2*TMath::Pi(),
-                               100, -1., 1.);
-  fHistCorrAssEtaPhi->Sumw2();
+  // fHistCorrAvgEtaPhi = new TH2F(Form("%s_avgetaphi", name.Data()), ";#Delta#phi;avg #eta",
+  //                           fHistDphiNbins, fHistDphiLo, 2*TMath::Pi() + fHistDphiLo,
+  //                           fHistDetaNbins, -2., 2.);
+  // fHistCorrAvgEtaPhi->Sumw2();
+  // fHistCorrTrgEtaPhi = new TH2F(Form("%s_trg_etaphi", name.Data()), ";#varphi;#eta",
+  //                           120, 0., 2*TMath::Pi(),
+  //                           120, -1., 1.);
+  // fHistCorrTrgEtaPhi->Sumw2();
+  // fHistCorrAssEtaPhi = new TH2F(Form("%s_ass_etaphi", name.Data()), ";#varphi;#eta",
+  //                           120, 0., 2*TMath::Pi(),
+  //                           120, -1., 1.);
+  // fHistCorrAssEtaPhi->Sumw2();
 
   fOutputList->Add(fHistStat);
   fOutputList->Add(fHistCorrPhi);
-  fOutputList->Add(fHistCorrPhi2);
+  // fOutputList->Add(fHistCorrPhi2);
   fOutputList->Add(fHistCorrEtaPhi);
-  fOutputList->Add(fHistCorrAvgEtaPhi);
-  fOutputList->Add(fHistCorrTrgEtaPhi);
-  fOutputList->Add(fHistCorrAssEtaPhi);
+  // fOutputList->Add(fHistCorrAvgEtaPhi);
+  // fOutputList->Add(fHistCorrTrgEtaPhi);
+  // fOutputList->Add(fHistCorrAssEtaPhi);
 }
 
 AliAnalysisTaskJetProtonCorr::AliHistCorr::~AliHistCorr()
@@ -1678,15 +1733,17 @@ void AliAnalysisTaskJetProtonCorr::AliHistCorr::Fill(AliVParticle *trgPart, AliV
   Float_t deltaEta = assPart->Eta() - trgPart->Eta();
   Float_t avgEta = (assPart->Eta() + trgPart->Eta()) / 2.;
   Float_t deltaPhi = assPart->Phi() - trgPart->Phi();
-  if (deltaPhi > (2.*TMath::Pi()-1.))
+  while (deltaPhi > (2.*TMath::Pi() + fHistDphiLo))
     deltaPhi -= 2. * TMath::Pi();
-  else if (deltaPhi < -1.)
+  while (deltaPhi < fHistDphiLo)
     deltaPhi += 2. * TMath::Pi();
 
   fHistCorrPhi->Fill(deltaPhi, weight);
-  fHistCorrPhi2->Fill(trgPart->Phi(), assPart->Phi(), weight);
+  if (fHistCorrPhi2)
+    fHistCorrPhi2->Fill(trgPart->Phi(), assPart->Phi(), weight);
   fHistCorrEtaPhi->Fill(deltaPhi, deltaEta, weight);
-  fHistCorrAvgEtaPhi->Fill(deltaPhi, avgEta, weight);
+  if (fHistCorrAvgEtaPhi)
+    fHistCorrAvgEtaPhi->Fill(deltaPhi, avgEta, weight);
 }
 
 void AliAnalysisTaskJetProtonCorr::AliHistCorr::Fill(TLorentzVector *trgPart, AliVParticle *assPart, Float_t weight)
@@ -1696,18 +1753,21 @@ void AliAnalysisTaskJetProtonCorr::AliHistCorr::Fill(TLorentzVector *trgPart, Al
   Float_t deltaEta = assPart->Eta() - trgPart->Eta();
   Float_t avgEta = (assPart->Eta() + trgPart->Eta()) / 2.;
   Float_t deltaPhi = assPart->Phi() - trgPart->Phi();
-  if (deltaPhi > (2.*TMath::Pi()-1.))
+  while (deltaPhi > (2.*TMath::Pi() + fHistDphiLo))
     deltaPhi -= 2. * TMath::Pi();
-  else if (deltaPhi < -1.)
+  while (deltaPhi < fHistDphiLo)
     deltaPhi += 2. * TMath::Pi();
 
   fHistCorrPhi->Fill(deltaPhi, weight);
-  Float_t trgPhi = trgPart->Phi();
-  if (trgPhi < 0)
-    trgPhi += 2. * TMath::Pi();
-  fHistCorrPhi2->Fill(trgPhi, assPart->Phi(), weight);
+  if (fHistCorrPhi2) {
+    Float_t trgPhi = trgPart->Phi();
+    if (trgPhi < 0)
+      trgPhi += 2. * TMath::Pi();
+    fHistCorrPhi2->Fill(trgPhi, assPart->Phi(), weight);
+  }
   fHistCorrEtaPhi->Fill(deltaPhi, deltaEta, weight);
-  fHistCorrAvgEtaPhi->Fill(deltaPhi, avgEta, weight);
+  if (fHistCorrAvgEtaPhi)
+    fHistCorrAvgEtaPhi->Fill(deltaPhi, avgEta, weight);
 }
 
 void AliAnalysisTaskJetProtonCorr::AliHistCorr::Fill(TLorentzVector *trgPart, TLorentzVector *assPart, Float_t weight)
@@ -1717,21 +1777,24 @@ void AliAnalysisTaskJetProtonCorr::AliHistCorr::Fill(TLorentzVector *trgPart, TL
   Float_t deltaEta = assPart->Eta() - trgPart->Eta();
   Float_t avgEta = (assPart->Eta() + trgPart->Eta()) / 2.;
   Float_t deltaPhi = assPart->Phi() - trgPart->Phi();
-  if (deltaPhi > (2.*TMath::Pi()-1.))
+  if (deltaPhi > (2.*TMath::Pi() + fHistDphiLo))
     deltaPhi -= 2. * TMath::Pi();
-  else if (deltaPhi < -1.)
+  else if (deltaPhi < fHistDphiLo)
     deltaPhi += 2. * TMath::Pi();
 
   fHistCorrPhi->Fill(deltaPhi, weight);
-  Float_t trgPhi = trgPart->Phi();
-  if (trgPhi < 0)
-    trgPhi += 2. * TMath::Pi();
-  Float_t assPhi = assPart->Phi();
-  if (assPhi < 0)
-    assPhi += 2. * TMath::Pi();
-  fHistCorrPhi2->Fill(trgPhi, assPhi, weight);
+  if (fHistCorrPhi2) {
+    Float_t trgPhi = trgPart->Phi();
+    if (trgPhi < 0)
+      trgPhi += 2. * TMath::Pi();
+    Float_t assPhi = assPart->Phi();
+    if (assPhi < 0)
+      assPhi += 2. * TMath::Pi();
+    fHistCorrPhi2->Fill(trgPhi, assPhi, weight);
+  }
   fHistCorrEtaPhi->Fill(deltaPhi, deltaEta, weight);
-  fHistCorrAvgEtaPhi->Fill(deltaPhi, avgEta, weight);
+  if (fHistCorrAvgEtaPhi)
+    fHistCorrAvgEtaPhi->Fill(deltaPhi, avgEta, weight);
 }
 
 // ----- histogram management -----
index 7a330816454a5109c9fca1e18d3067d4ced9fe8d..fa3a43431b5e97b4ff2d9d81768752f1605ec6f6 100644 (file)
@@ -1,21 +1,21 @@
 #include "TH1.h"
 #include "TH2.h"
 #include "TH3.h"
+#include "TF1.h"
 
 #include "AliLog.h"
 
+#include "AliVParticle.h"
 #include "AliAnalysisTaskSE.h"
 #include "AliESDtrackCuts.h"
 
 #define ID(x) x, #x
 #define LAB(x) x + 1, #x
 
-class TF1;
 class TList;
 class TClonesArray;
 class AliOADBContainer;
 class AliTOFPIDParams;
-class AliVParticle;
 class AliVTrack;
 class AliPIDResponse;
 class AliEventPoolManager;
@@ -38,7 +38,7 @@ public:
   void SetParamsTOF();
 
   // task configuration
-  void SetJetBranchName(const char* const branchName) { strncpy(fJetBranchName, branchName, fgkStringLength-1); }
+  void SetJetBranchName(const char* branchName) { strncpy(fJetBranchName, branchName, fgkStringLength-1); }
   const char* GetJetBranchName() const { return fJetBranchName; }
 
   void SetPtThrPart(Float_t minPt, Float_t maxPt) { fTrgPartPtMin = minPt; fTrgPartPtMax = maxPt; }
@@ -51,13 +51,55 @@ public:
   Float_t GetPtMinAss() const { return fAssPartPtMin; }
   Float_t GetPtMaxAss() const { return fAssPartPtMax; }
 
-  void SetTrackCutsAss(AliESDtrackCuts cuts) { *fCutsPrimAss = cuts; }
-  void SetTrackCutsTrg(AliESDtrackCuts cuts) { *fCutsPrimTrg = cuts; }
-  void SetTrackCutsTrgConstrain(AliESDtrackCuts cuts) { *fCutsPrimTrgConstrain = cuts; }
+  void SetTwoTrackCut(Float_t cut) { fCutsTwoTrackEff = cut; }
+  Float_t GetTwoTrackCut() const { return fCutsTwoTrackEff; }
+
+  void SetTrackCutsAss(const AliESDtrackCuts &cuts) { *fCutsPrimAss = cuts; }
+  void SetTrackCutsTrg(const AliESDtrackCuts &cuts) { *fCutsPrimTrg = cuts; }
+  void SetTrackCutsTrgConstrain(const AliESDtrackCuts &cuts) { *fCutsPrimTrgConstrain = cuts; }
+
+  void SetTrgJetEtaMax(Float_t etamax) { fTrgJetEtaMax = etamax; }
+  Float_t GetTrgJetEtaMax() const { return fTrgJetEtaMax; }
+  void SetHadEtaMax(Float_t etamax) { fHadEtaMax = etamax; }
+  Float_t GetHadEtaMax() const { return fHadEtaMax; }
 
   void SetUseEvplaneV0(Bool_t usev0 = kTRUE) { fUseEvplaneV0 = usev0; }
   Bool_t GetUseEvplaneV0() const { return fUseEvplaneV0; }
 
+  void SetJetV2(Float_t v2Cent, Float_t v2Semi) {
+    fTrgJetPhiModCent->SetParameter(0, v2Cent);
+    fTrgJetPhiModSemi->SetParameter(0, v2Semi);
+  }
+  void SetHadV2(Float_t v2Cent, Float_t v2Semi) {
+    fTrgHadPhiModCent->SetParameter(0, v2Cent);
+    fTrgHadPhiModSemi->SetParameter(0, v2Semi);
+  }
+
+  void SetLeadingTrackPtMin(Float_t pt) { fTrgJetLeadTrkPtMin = pt; }
+  void SetLeadingTrackPtMax(Float_t pt) { fTrgJetLeadTrkPtMax = pt; }
+
+  void SetJetAreaMin(Float_t area) { fTrgJetAreaMin = area; }
+  Float_t GetJetAreaMin() const { return fTrgJetAreaMin; }
+
+  void SetRequirePID(Bool_t req = kTRUE) { fRequirePID = req; }
+  Bool_t GetRequirePID() const { return fRequirePID; }
+
+  void SetFilterMask(Int_t mask) { fAssFilterMask = mask; }
+  Int_t GetFilterMask() const { return fAssFilterMask; }
+
+  void SetErrorCount(Int_t cnt) { fErrorMsg = cnt; }
+  Int_t GetErrorCount() const { return fErrorMsg; }
+
+  void SetTrgAngleToEvPlane(Float_t angle) { fTrgAngleToEvPlane = angle; }
+  Float_t GetTrgAngleToEvPlane() const { return fTrgAngleToEvPlane; }
+
+  void SetToyMeanNoPart(Float_t mean) { fToyMeanNoPart = mean; }
+  Float_t GetToyMeanNoPart() const { return fToyMeanNoPart; }
+  void SetToyRadius(Float_t radius) { fToyRadius = radius; }
+  Float_t GetToyRadius() const { return fToyRadius; }
+  void SetToySmearPhi(Float_t sigma) { fToySmearPhi = sigma; }
+  Float_t GetToySmearPhi() const { return fToySmearPhi; }
+
   void PrintTask(Option_t *option, Int_t indent) const;
 
   static Double_t TOFsignal(Double_t *x, Double_t *par)
@@ -181,6 +223,8 @@ public:
       kHistEtaPhiAssProt,
       kHistPhiTrgJetEvPlane,
       kHistPhiTrgHadEvPlane,
+      kHistPhiRndTrgJetEvPlane,
+      kHistPhiRndTrgHadEvPlane,
       kHistPhiAssHadEvPlane,
       kHistPhiAssHadVsEvPlane,
       kHistPhiAssProtEvPlane,
@@ -220,15 +264,15 @@ public:
     kCorrJetHad,
     kCorrJetProt,
 
-    kCorrRndJetHad,
-    kCorrRndJetProt,
     kCorrRndHadHad,
     kCorrRndHadProt,
+    kCorrRndJetHad,
+    kCorrRndJetProt,
 
-    kCorrRndJetExcHad,
-    kCorrRndJetExcProt,
     kCorrRndHadExcHad,
     kCorrRndHadExcProt,
+    kCorrRndJetExcHad,
+    kCorrRndJetExcProt,
 
     kCorrLast
   };
@@ -264,13 +308,66 @@ public:
     kEvLast
   };
 
+  class AliPartCorr : public AliVParticle {
+  public:
+    AliPartCorr(Float_t eta = 0., Float_t phi = 0., Float_t pt = 0., Float_t charge = 0) :
+      fPt(pt), fEta(eta), fPhi(phi), fCharge(charge) {}
+    AliPartCorr(const AliVParticle &rhs) :
+      fPt(rhs.Pt()), fEta(rhs.Eta()), fPhi(rhs.Phi()), fCharge(rhs.Charge()) {}
+    virtual ~AliPartCorr() {}
+    
+    // kinematics
+    virtual Double_t Px() const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Py() const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Pz() const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Pt() const { return fPt; }
+    virtual Double_t P()  const { AliFatal("not implemented"); return 0; }
+    virtual Bool_t   PxPyPz(Double_t[3]) const { AliFatal("not implemented"); return 0; }
+
+    virtual Double_t Xv() const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Yv() const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Zv() const { AliFatal("not implemented"); return 0; }
+    virtual Bool_t   XvYvZv(Double_t[3]) const { AliFatal("not implemented"); return 0; }
+
+    virtual Double_t OneOverPt()  const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Phi()        const { return fPhi; }
+    virtual Double_t Theta()      const { AliFatal("not implemented"); return 0; }
+
+    virtual Double_t E()          const { AliFatal("not implemented"); return 0; }
+    virtual Double_t M()          const { AliFatal("not implemented"); return 0; }
+
+    virtual Double_t Eta()        const { return fEta; }
+    virtual Double_t Y()          const { AliFatal("not implemented"); return 0; }
+
+    virtual Short_t Charge()      const { return fCharge; }
+    virtual Int_t   GetLabel()    const { AliFatal("not implemented"); return 0; }
+
+    virtual Int_t   PdgCode()     const { AliFatal("not implemented"); return 0; }
+    virtual const Double_t *PID() const { AliFatal("not implemented"); return 0; }
+
+  protected:
+    Float_t fPt;
+    Float_t fEta;
+    Float_t fPhi;
+    Short_t fCharge;
+
+    ClassDef(AliPartCorr, 1);
+  };
+
   class AliHistCorr : public TNamed {
   public:
     AliHistCorr(TString name, TList *outputList = 0x0);
     ~AliHistCorr();
 
-    void Trigger(Float_t phi, Float_t eta, Float_t weight = 1.) { fHistStat->Fill(1., weight); fHistCorrTrgEtaPhi->Fill(phi, eta, weight); }
-    void Ass(Float_t phi, Float_t eta, Float_t weight = 1.) { fHistCorrAssEtaPhi->Fill(phi, eta, weight); }
+    void Trigger(Float_t phi, Float_t eta, Float_t weight = 1.) {
+      fHistStat->Fill(1., weight);
+      if (fHistCorrTrgEtaPhi)
+       fHistCorrTrgEtaPhi->Fill(phi, eta, weight);
+    }
+    void Ass(Float_t phi, Float_t eta, Float_t weight = 1.) {
+      if (fHistCorrAssEtaPhi)
+       fHistCorrAssEtaPhi->Fill(phi, eta, weight);
+    }
     void Fill(AliVParticle *trgPart, AliVParticle *assPart, Float_t weight = 1.);
     void Fill(TLorentzVector *trgPart, AliVParticle *assPart, Float_t weight = 1.);
     void Fill(TLorentzVector *trgPart, TLorentzVector *assPart, Float_t weight = 1.);
@@ -287,6 +384,10 @@ public:
     TH2F *fHistCorrTrgEtaPhi;
     TH2F *fHistCorrAssEtaPhi;
 
+    const Float_t fHistDphiLo;
+    const Int_t   fHistDphiNbins;
+    const Int_t   fHistDetaNbins;
+
     AliHistCorr(const AliHistCorr &rhs);
     AliHistCorr& operator=(const AliHistCorr &rhs);
 
@@ -328,6 +429,8 @@ protected:
 
   AliHistCorr **fHistCorr; //! [kCorrLast*kEvLast*kClLast]; //!
 
+  Int_t fErrorMsg; //! remaining number of error messages to be printed
+
   Bool_t DetectTriggers();
   void   MarkTrigger(Trigger_t trg) { fTriggerMask |= (1 << trg); }
   Bool_t IsTrigger(Trigger_t trg) const { return (fTriggerMask & (1 << trg)); }
@@ -342,21 +445,21 @@ protected:
   Float_t GetCentrality() const { return fCentrality; }
   Float_t GetEventPlaneAngle() const { return fEventPlaneAngle; }
   AliPIDResponse* GetPID() const { return fPIDResponse; }
-  Bool_t IsCentral() { return ((fCentrality >= 0.) && (fCentrality <= 10.)); }
-  Bool_t IsSemiCentral() { return ((fCentrality >= 30.) && (fCentrality <= 50.)); }
+  Bool_t IsCentral() const { return ((fCentrality >= 0.) && (fCentrality <= 10.)); }
+  Bool_t IsSemiCentral() const { return ((fCentrality >= 30.) && (fCentrality <= 50.)); }
 
-  AliVTrack* GetLeadingTrack(AliAODJet *jet) const;
+  AliVTrack* GetLeadingTrack(const AliAODJet *jet) const;
 
   Float_t GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1,
                      Float_t phi2, Float_t pt2, Float_t charge2,
-                     Float_t radius, Float_t bSign);
+                     Float_t radius, Float_t bSign) const;
 
-  Bool_t AcceptTrigger(AliVTrack *trg);
-  Bool_t AcceptTrigger(AliAODJet *trg);
-  Bool_t AcceptAssoc(AliVTrack *trk);
-  Bool_t IsProton(AliVTrack *trk);
-  Bool_t AcceptAngleToEvPlane(Float_t phi, Float_t psi);
-  Bool_t AcceptTwoTracks(AliVParticle *trgPart, AliVParticle *assPart);
+  Bool_t AcceptTrigger(const AliVTrack *trg);
+  Bool_t AcceptTrigger(const AliAODJet *trg);
+  Bool_t AcceptAssoc(const AliVTrack *trk) const;
+  Bool_t IsProton(const AliVTrack *trk) const;
+  Bool_t AcceptAngleToEvPlane(Float_t phi, Float_t psi) const;
+  Bool_t AcceptTwoTracks(const AliVParticle *trgPart, const AliVParticle *assPart) const;
 
   TObjArray* CloneTracks(TObjArray *tracks) const;
 
@@ -405,7 +508,7 @@ protected:
   static const Int_t fgkStringLength = 100; // max length for the jet branch name
   char fJetBranchName[fgkStringLength];     // jet branch name
 
-  Bool_t fUseStandardCuts;
+  const Bool_t fUseStandardCuts;
   Bool_t fUseEvplaneV0;
 
   AliESDtrackCuts *fCutsPrimTrg;       // track cuts for primary particles (trigger)
@@ -413,15 +516,25 @@ protected:
   AliESDtrackCuts *fCutsPrimAss;       // track cuts for primary particles (associate)
   Float_t fCutsTwoTrackEff;
 
+  UInt_t  fAssFilterMask;
+  Bool_t  fRequirePID;
+  Float_t fTrgJetEtaMax;
+  Float_t fHadEtaMax;
   Float_t fTrgPartPtMin;
   Float_t fTrgPartPtMax;
   Float_t fTrgJetPtMin;
   Float_t fTrgJetPtMax;
   Float_t fTrgJetLeadTrkPtMin;
+  Float_t fTrgJetLeadTrkPtMax;
+  Float_t fTrgJetAreaMin;
   Float_t fAssPartPtMin;
   Float_t fAssPartPtMax;
   Float_t fTrgAngleToEvPlane;
 
+  Float_t fToyMeanNoPart;
+  Float_t fToyRadius;
+  Float_t fToySmearPhi;
+
   TF1 *fTrgJetPhiModCent;
   TF1 *fTrgJetPhiModSemi;
   TF1 *fTrgHadPhiModCent;
index 4c2b20ffecb290d0cf014c1b46aa5e24587050c2..9d361bb7dc978bc01c94df7b6b4225c7575b45c5 100644 (file)
@@ -48,6 +48,7 @@ const Double_t AliAnalysisTaskPID::fgkSigmaReferenceForTransitionPars = 0.05; //
 //________________________________________________________________________
 AliAnalysisTaskPID::AliAnalysisTaskPID()
   : AliAnalysisTaskPIDV0base()
+  , fRun(-1)
   , fPIDcombined(new AliPIDCombined())
   , fInputFromOtherTask(kFALSE)
   , fDoPID(kTRUE)
@@ -130,6 +131,7 @@ AliAnalysisTaskPID::AliAnalysisTaskPID()
   , fGenRespPrDeltaPi(new Double_t[fgkMaxNumGenEntries])
   , fGenRespPrDeltaPr(new Double_t[fgkMaxNumGenEntries])
   */
+  , fhMaxEtaVariation(0x0)
   , fhEventsProcessed(0x0)
   , fhEventsTriggerSel(0x0)
   , fhEventsTriggerSelVtxCut(0x0) 
@@ -177,6 +179,7 @@ AliAnalysisTaskPID::AliAnalysisTaskPID()
 //________________________________________________________________________
 AliAnalysisTaskPID::AliAnalysisTaskPID(const char *name)
   : AliAnalysisTaskPIDV0base(name)
+  , fRun(-1)
   , fPIDcombined(new AliPIDCombined())
   , fInputFromOtherTask(kFALSE)
   , fDoPID(kTRUE)
@@ -259,6 +262,7 @@ AliAnalysisTaskPID::AliAnalysisTaskPID(const char *name)
   , fGenRespPrDeltaPi(new Double_t[fgkMaxNumGenEntries])
   , fGenRespPrDeltaPr(new Double_t[fgkMaxNumGenEntries])
   */
+  , fhMaxEtaVariation(0x0)
   , fhEventsProcessed(0x0)
   , fhEventsTriggerSel(0x0)
   , fhEventsTriggerSelVtxCut(0x0) 
@@ -380,6 +384,9 @@ AliAnalysisTaskPID::~AliAnalysisTaskPID()
   fGenRespPrDeltaPrimePi = 0x0;
   fGenRespPrDeltaPrimePr = 0x0;
   
+  delete fhMaxEtaVariation;
+  fhMaxEtaVariation = 0x0;
+  
   /*OLD with deltaSpecies 
   delete [] fGenRespElDeltaEl;
   delete [] fGenRespElDeltaKa;
@@ -482,6 +489,56 @@ void AliAnalysisTaskPID::SetUpPIDcombined()
 }
 
 
+//________________________________________________________________________
+Bool_t AliAnalysisTaskPID::CalculateMaxEtaVariationMapFromPIDResponse()
+{
+  // Calculate the maximum deviation from unity of the eta correction factors for each row in 1/dEdx(splines)
+  // from the eta correction map of the TPCPIDResponse. The result is stored in fhMaxEtaVariation.
+  
+  if (!fPIDResponse) {
+    AliError("No PID response!");
+    return kFALSE;
+  }
+  
+  delete fhMaxEtaVariation;
+  
+  const TH2D* hEta = fPIDResponse->GetTPCResponse().GetEtaCorrMap();
+  if (!hEta) {
+    AliError("No eta correction map!");
+    return kFALSE;
+  }
+  
+  // Take binning from hEta in Y for fhMaxEtaVariation
+  fhMaxEtaVariation = hEta->ProjectionY("hMaxEtaVariation");
+  fhMaxEtaVariation->SetDirectory(0);
+  fhMaxEtaVariation->Reset();
+  
+  // For each bin in 1/dEdx, loop of all tanTheta bins and find the maximum deviation from unity.
+  // Store the result in fhMaxEtaVariation
+  
+  for (Int_t binY = 1; binY <= fhMaxEtaVariation->GetNbinsX(); binY++) {
+    Double_t maxAbs = -1;
+    for (Int_t binX = 1; binX <= hEta->GetNbinsX(); binX++) {
+      Double_t curr = TMath::Abs(hEta->GetBinContent(binX, binY) - 1.);
+      if (curr > maxAbs)
+        maxAbs = curr;
+    }
+    
+    if (maxAbs < 1e-12) {
+      AliError(Form("Maximum deviation from unity is zero for 1/dEdx = %f (bin %d)", hEta->GetYaxis()->GetBinCenter(binY), binY));
+      delete fhMaxEtaVariation;
+      return kFALSE;
+    }
+    
+    fhMaxEtaVariation->SetBinContent(binY, maxAbs);
+  }
+  
+  printf("AliAnalysisTaskPID: Calculated max eta variation.\n");
+  
+  return kTRUE;
+}
+
+
 //________________________________________________________________________
 void AliAnalysisTaskPID::UserCreateOutputObjects()
 {
@@ -877,6 +934,19 @@ void AliAnalysisTaskPID::UserExec(Option_t *)
   if(fDebug > 1)
     printf("File: %s, Line: %d: UserExec\n", (char*)__FILE__, __LINE__);
   
+  Int_t run = InputEvent()->GetRunNumber();
+  
+  if (run != fRun){
+    // If systematics on eta is investigated, need to calculate the maxEtaVariationMap
+    if ((TMath::Abs(fSystematicScalingEtaCorrectionLowMomenta - 1.0) > fgkEpsilon) ||
+        (TMath::Abs(fSystematicScalingEtaCorrectionHighMomenta - 1.0) > fgkEpsilon)) {
+      if (!CalculateMaxEtaVariationMapFromPIDResponse())
+        AliFatal("Systematics on eta correction requested, but failed to calculate max eta varation map!");
+    }
+  }
+  
+  fRun = run;
+  
   // No processing of event, if input is fed in directly from another task
   if (fInputFromOtherTask)
     return;
@@ -1915,6 +1985,28 @@ Bool_t AliAnalysisTaskPID::SetParticleFractionHistosFromFile(const TString fileP
 }
 
 
+//_____________________________________________________________________________
+Double_t AliAnalysisTaskPID::GetMaxEtaVariation(Double_t dEdxSplines)
+{
+  // Returns the maximum eta variation (i.e. deviation of eta correction factor from unity) for the
+  // given (spline) dEdx
+  
+  if (dEdxSplines < 1. || !fhMaxEtaVariation) {
+    Printf("Error GetMaxEtaVariation: No map or invalid dEdxSplines (%f)!", dEdxSplines);
+    return 999.;
+  } 
+  
+  Int_t bin = fhMaxEtaVariation->GetXaxis()->FindFixBin(1. / dEdxSplines);
+  
+  if (bin == 0) 
+    bin = 1;
+  if (bin > fhMaxEtaVariation->GetXaxis()->GetNbins())
+    bin = fhMaxEtaVariation->GetXaxis()->GetNbins();
+  
+  return fhMaxEtaVariation->GetBinContent(bin);
+}
+
+
 //_____________________________________________________________________________
 Int_t AliAnalysisTaskPID::GetRandomParticleTypeAccordingToParticleFractions(Double_t trackPt, Double_t jetPt,
                                                                             Double_t centralityPercentile, 
@@ -2229,7 +2321,7 @@ Bool_t AliAnalysisTaskPID::ProcessTrack(const AliVTrack* track, Int_t particlePD
     Double_t etaCorrEl = fPIDResponse->UseTPCEtaCorrection() ? fPIDResponse->GetTPCResponse().GetEtaCorrectionFast(track, dEdxEl) : 1.;
     Double_t etaCorrKa = fPIDResponse->UseTPCEtaCorrection() ? fPIDResponse->GetTPCResponse().GetEtaCorrectionFast(track, dEdxKa) : 1.;
     Double_t etaCorrPi = fPIDResponse->UseTPCEtaCorrection() ? fPIDResponse->GetTPCResponse().GetEtaCorrectionFast(track, dEdxPi) : 1.;
-    Double_t etaCorrMu = fTakeIntoAccountMuons && !fPIDResponse->UseTPCEtaCorrection() ? 
+    Double_t etaCorrMu = fTakeIntoAccountMuons && fPIDResponse->UseTPCEtaCorrection() ? 
                             fPIDResponse->GetTPCResponse().GetEtaCorrectionFast(track, dEdxMu) : 1.;
     Double_t etaCorrPr = fPIDResponse->UseTPCEtaCorrection() ? fPIDResponse->GetTPCResponse().GetEtaCorrectionFast(track, dEdxPr) : 1.;
 
@@ -2252,11 +2344,33 @@ Bool_t AliAnalysisTaskPID::ProcessTrack(const AliVTrack* track, Int_t particlePD
                                              + fSystematicScalingEtaCorrectionHighMomenta * fractionHighMomentumScaleFactor;
       }
       
+      Double_t maxEtaVariationEl = GetMaxEtaVariation(dEdxEl);
+      etaCorrEl = etaCorrEl * (1.0 + (usedSystematicScalingEtaCorrection - 1.) * (etaCorrEl - 1.0) / maxEtaVariationEl);
+      
+      Double_t maxEtaVariationKa = GetMaxEtaVariation(dEdxKa);
+      etaCorrKa = etaCorrKa * (1.0 + (usedSystematicScalingEtaCorrection - 1.) * (etaCorrKa - 1.0) / maxEtaVariationKa);
+      
+      Double_t maxEtaVariationPi = GetMaxEtaVariation(dEdxPi);
+      etaCorrPi = etaCorrPi * (1.0 + (usedSystematicScalingEtaCorrection - 1.) * (etaCorrPi - 1.0) / maxEtaVariationPi);
+      
+      if (fTakeIntoAccountMuons) {
+        Double_t maxEtaVariationMu = GetMaxEtaVariation(dEdxMu);
+        etaCorrMu = etaCorrMu * (1.0 + (usedSystematicScalingEtaCorrection - 1.) * (etaCorrMu - 1.0) / maxEtaVariationMu);
+      }
+      else
+        etaCorrMu = 1.0;
+      
+      Double_t maxEtaVariationPr = GetMaxEtaVariation(dEdxPr);
+      etaCorrPr = etaCorrPr * (1.0 + (usedSystematicScalingEtaCorrection - 1.) * (etaCorrPr - 1.0) / maxEtaVariationPr);
+      
+      
+      /*OLD
       etaCorrEl = 1.0 + usedSystematicScalingEtaCorrection * (etaCorrEl - 1.0);
       etaCorrKa = 1.0 + usedSystematicScalingEtaCorrection * (etaCorrKa - 1.0);
       etaCorrPi = 1.0 + usedSystematicScalingEtaCorrection * (etaCorrPi - 1.0);
       etaCorrMu = fTakeIntoAccountMuons ? (1.0 + usedSystematicScalingEtaCorrection * (etaCorrMu - 1.0)) : 1.0;
       etaCorrPr = 1.0 + usedSystematicScalingEtaCorrection * (etaCorrPr - 1.0);
+      */
     }
     
     // Get the multiplicity correction factors for the (modified) expected dEdx
index cb339ad61ee08c6a7214eaee86681e38e08c5522..a063ff9472fc50507a9d047cf826d09ba28060ab 100644 (file)
@@ -218,6 +218,9 @@ class AliAnalysisTaskPID : public AliAnalysisTaskPIDV0base {
   void SetSystematicScalingMultCorrection(Double_t scaleFactor) 
     { fSystematicScalingMultCorrection = scaleFactor; CheckDoAnyStematicStudiesOnTheExpectedSignal(); };
   
+  Double_t GetMaxEtaVariation(Double_t dEdxSplines);
+  Bool_t CalculateMaxEtaVariationMapFromPIDResponse();
+  
   void CleanupParticleFractionHistos();
   Bool_t GetParticleFraction(Double_t trackPt, Double_t jetPt, Double_t multiplicity,
                              AliPID::EParticleType species, Double_t& fraction, Double_t& fractionErrorStat,
@@ -259,6 +262,7 @@ class AliAnalysisTaskPID : public AliAnalysisTaskPIDV0base {
  private:
   static const Double_t fgkOneOverSqrt2; // = 1. / TMath::Sqrt2();
   
+  Int_t fRun; // Current run number
   AliPIDCombined* fPIDcombined; //! PID combined object
   
   Bool_t fInputFromOtherTask; // If set to kTRUE, no events are processed and the input must be fed in from another task. If set to kFALSE, normal event processing
@@ -364,6 +368,8 @@ class AliAnalysisTaskPID : public AliAnalysisTaskPIDV0base {
   Double_t* fGenRespPrDeltaPr; //! Generated responses for a single track
   */
   
+  TH1D* fhMaxEtaVariation; //! Histo holding the maximum deviation of the eta correction factor from unity vs. 1/dEdx(splines)
+  
   TH1D* fhEventsProcessed; //! Histo holding the number of processed events (i.e. passing trigger selection, vtx and zvtx cuts
   TH1D* fhEventsTriggerSel; //! Histo holding the number of events passing trigger selection
   TH1D* fhEventsTriggerSelVtxCut; //! Histo holding the number of events passing trigger selection and vtx cut
@@ -388,7 +394,7 @@ class AliAnalysisTaskPID : public AliAnalysisTaskPIDV0base {
   AliAnalysisTaskPID(const AliAnalysisTaskPID&); // not implemented
   AliAnalysisTaskPID& operator=(const AliAnalysisTaskPID&); // not implemented
   
-  ClassDef(AliAnalysisTaskPID, 17);
+  ClassDef(AliAnalysisTaskPID, 18);
 };
 
 
diff --git a/PWGJE/UserTasks/AliAnalysisTaskPPJetSpectra.cxx b/PWGJE/UserTasks/AliAnalysisTaskPPJetSpectra.cxx
new file mode 100755 (executable)
index 0000000..e5fc124
--- /dev/null
@@ -0,0 +1,1062 @@
+#include "AliAnalysisTaskSE.h"
+#include "AliAnalysisHelperJetTasks.h"
+#include "THnSparse.h"
+#include "AliAnalysisManager.h"
+#include "AliInputEventHandler.h"
+#include "AliAODHandler.h"
+#include "AliAODInputHandler.h"
+#include "AliAODEvent.h"
+#include "AliESDEvent.h"
+#include "TAxis.h"
+#include "AliAODMCParticle.h"
+
+
+#include "AliAnalysisTaskPPJetSpectra.h"
+#include "AliAnalysisHelperJetTasks.h"
+
+ClassImp(AliAnalysisTaskPPJetSpectra)
+
+//---------------------------------------------------------------------------------------------------
+AliAnalysisTaskPPJetSpectra::AliAnalysisTaskPPJetSpectra()
+ :AliAnalysisTaskSE()
+  ,fOutputList(0)
+  ,fESD(0)
+  ,fAOD(0)
+  ,fMC(0)
+  ,fAODJets(0)
+  ,fAODExtension(0)
+  ,fNonStdFile("")
+  ,fDebug(0)
+  ,fUseMC(kFALSE)
+  ,fEvtSelectionMask(0)
+  ,fEventClass(-1)
+  ,nVtxContCut(2)
+  ,fVtxZcut(10)
+  ,fVtxRcut(1)
+  ,nTrackFilter(272)
+  ,trackPtMin(0.15)
+  ,trackPtMax(100.)
+  ,trackEtaAbsMax(0.9)
+  ,jetPtMin(0.)
+  ,jetEtaCut(0.)
+  ,jetZmax(0.)
+  ,fhnEvent(0)
+  ,fhnTracks(0)
+  ,fhnMC(0)
+  ,fhnMC2(0)
+  ,fhnRecJetsNoCut(0)
+  ,fhnGenJetsNoCut(0)
+  ,fhnRecJetsCut(0)
+  ,fhnGenJetsCut(0)
+  ,fhnRecBckg(0)
+  ,fhnGenBckg(0)
+  ,fhnRecJetsTrackUEcor(0)
+  ,fhnGenJetsTrackUEcor(0)
+  ,fhnRecJetsBckgUEcor(0)
+  ,fhnGenJetsBckgUEcor(0)
+  ,fhnTrackUE(0)
+  ,fhnParticleUE(0)
+  ,fhnBckgRecUE(0)
+  ,fhnBckgGenUE(0)
+  ,fRecJetBranch("")
+  ,fGenJetBranch("")
+  ,fRecBckgBranch("")
+  ,fGenBckgBranch("")
+  ,fRecJetR(0.)
+  ,fGenJetR(0.)
+  ,fRecBckgR(0.)
+  ,fGenBckgR(0.)
+  ,fTrackType(0)
+  ,fParticleType(0)
+  ,fhnMatching(0)
+  ,fhnTrackCorrMatching(0)
+  ,fhnBckgCorrMatching(0)
+  ,fhnTrackUEanal(0)
+  ,kDoUEanalysis(kFALSE)
+  ,fRejectPileUp(1)
+{
+  if(fDebug) printf("%s: %d  Constructor\n",(char*)__FILE__, __LINE__);
+  //DefineOutput(1, TList::Class());
+}
+
+//---------------------------------------------------------------------------------------------------
+AliAnalysisTaskPPJetSpectra::AliAnalysisTaskPPJetSpectra(const char* name):AliAnalysisTaskSE(name)
+  ,fOutputList(0)
+  ,fESD(0)
+  ,fAOD(0)
+  ,fMC(0)
+  ,fAODJets(0)
+  ,fAODExtension(0)
+  ,fNonStdFile("")
+  ,fDebug(0)
+  ,fUseMC(kFALSE)
+  ,fEvtSelectionMask(0)
+  ,fEventClass(-1)
+  ,nVtxContCut(2)
+  ,fVtxZcut(10)
+  ,fVtxRcut(1)
+  ,nTrackFilter(272)
+  ,trackPtMin(0.15)
+  ,trackPtMax(100.)
+  ,trackEtaAbsMax(0.9)
+  ,jetPtMin(0.)
+  ,jetEtaCut(0.)
+  ,jetZmax(0.)
+  ,fhnEvent(0)
+  ,fhnTracks(0)
+  ,fhnMC(0)
+  ,fhnMC2(0)
+  ,fhnRecJetsNoCut(0)
+  ,fhnGenJetsNoCut(0)
+  ,fhnRecJetsCut(0)
+  ,fhnGenJetsCut(0)
+  ,fhnRecBckg(0)
+  ,fhnGenBckg(0)
+  ,fhnRecJetsTrackUEcor(0)
+  ,fhnGenJetsTrackUEcor(0)
+  ,fhnRecJetsBckgUEcor(0)
+  ,fhnGenJetsBckgUEcor(0)
+  ,fhnTrackUE(0)
+  ,fhnParticleUE(0)
+  ,fhnBckgRecUE(0)
+  ,fhnBckgGenUE(0)
+  ,fRecJetBranch("")
+  ,fGenJetBranch("")
+  ,fRecBckgBranch("")
+  ,fGenBckgBranch("")
+  ,fRecJetR(0.)
+  ,fGenJetR(0.)
+  ,fRecBckgR(0.)
+  ,fGenBckgR(0.)
+  ,fTrackType(0)
+  ,fParticleType(0)
+  ,fhnMatching(0)
+  ,fhnTrackCorrMatching(0)
+  ,fhnBckgCorrMatching(0)
+  ,fhnTrackUEanal(0)
+  ,kDoUEanalysis(kFALSE)
+  ,fRejectPileUp(1)
+{
+  if(fDebug) printf("%s: %d  Constructor\n",(char*)__FILE__, __LINE__);
+  DefineOutput(1, TList::Class());
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::Init()
+{
+  if(fDebug) printf("%s: %d  Initialize\n", (char*)__FILE__, __LINE__);
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+Bool_t AliAnalysisTaskPPJetSpectra::Notify()
+{
+
+  if(fDebug) printf("%s: %d  Notify\n", (char*)__FILE__, __LINE__);
+  return kTRUE;
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::UserCreateOutputObjects()
+{
+  fOutputList = new TList;
+  PostData(1,fOutputList);
+  fOutputList->SetOwner(1);
+
+  const Double_t binsPt[] = {0.,2.,4.,6.,8.,10.,12., 14.,16., 18.,20.,24.,28.,32.,38.,44.,50.,58.,66.,76.,86.,100.,114.,128.,150.,250.};
+  const Int_t nBinsPt = 25;
+
+  const Double_t trackPtBins[42] = {0,0.2,0.4,0.6,0.8,1.,1.2,1.4,1.6,1.8,2.,2.5,3.,3.5,4.,4.5,5.,5.5,6.,8.,10.,12.,14.,16.,18.,20.,25.,30.,35.,40.,45.,50.,55.,60.,65.,70.,75.,80.,85.,90.,95.,100};
+  const Int_t nTrackPtBins = 41;
+
+  if(fDebug) printf("%s: %d  Creating output objects\n",(char*)__FILE__,__LINE__);
+  // triggered - centrality - z-vtxs - r-vtx - ncontrib - ntracks - IsPileUp?- njetsrec - njetsgen - accepted
+  const Int_t evtsDim = 7;
+  Int_t     evtsBins[evtsDim] = {   2,   22,   40,  20,  20,    2,  2};
+  Double_t  evtsMins[evtsDim] = {-0.5,  -5., -20.,  0.,  0., -0.5, -0.5};
+  Double_t  evtsMaxs[evtsDim] = { 1.5, 105.,  20.,  2., 40.,  1.5, 1.5};
+  // pt - eta - phi - is272 - charge
+  const Int_t trksDim = 7;
+  Int_t     trksBins[trksDim] = {  nTrackPtBins,  10,             10,    2,   2,   2,    3};
+  Double_t  trksMins[trksDim] = {            0.,  -1.,            0., -0.5,-0.5,-0.5, -1.5};
+  Double_t  trksMaxs[trksDim] = {            0.,   1., 2*TMath::Pi(),  1.5, 1.5, 1.5,  1.5};
+  // pt - eta - phi - AreaCh - AreaN - ptLeadingTrack/ptJet - nTracks
+  const Int_t jetsDim = 7;
+  Int_t     jetsBins[jetsDim] = { nBinsPt,  20,            10,3, 5, 20, 30};
+  Double_t  jetsMins[jetsDim] = {      0., -1.,            0., 0., 0., 0., 0.};
+  Double_t  jetsMaxs[jetsDim] = {      0.,  1., 2*TMath::Pi(), 3., 5., 1.,30.};
+  // pt - eta - phi - AreaCH - AreaN - UEdensity - ptLeadingTrack/ptJet - ptOrig 
+  const Int_t jetsUEcorDim = 8;
+  Int_t     jetsUEcorBins[jetsUEcorDim] = { nBinsPt,  10,            10, 3,  5, 100,  20, nBinsPt};
+  Double_t  jetsUEcorMins[jetsUEcorDim] = {     0., -1.,            0., 0., 0.,  0.,  0.,  0.};
+  Double_t  jetsUEcorMaxs[jetsUEcorDim] = {     0.,  1., 2*TMath::Pi(), 3., 5., 10.,  1.,  0.};
+  // leading jet pt - eta - sumAllPt1 - sumAllPt2 - Rpar
+  const Int_t ueDim = 5;
+  Int_t       ueBins[ueDim] = {  nBinsPt, 20, 100, 100, 100};
+  Double_t    ueMins[ueDim] = {       0., -1,  0.,  0., 0.};
+  Double_t    ueMaxs[ueDim] = {       0.,  1, 10., 10., 10.};
+  // ptGen - ptRec - ptFraction - maxDist - bothWays - (1 - rec/gen) - dR - dEta - dPhi - isSamePtBin
+  const Int_t matchingDim = 10;
+  Int_t              matchingBins[matchingDim] = {nBinsPt, nBinsPt,  20,    5,    2, 100, 10,  10, 10, 2  };
+  Double_t    matchingMins[matchingDim] = {    0.,      0.,  0., 0.05, -0.5,   0,  0,   0,  0,-0.5};
+  Double_t    matchingMaxs[matchingDim] = {    0.,      0.,  1., 0.55,  1.5,   1,0.5, 0.5,0.5, 1.5};
+
+  fhnEvent    = new THnSparseF("fhnEvent", "fhnEvent;triggered;centrality;zVtx;rVtx;Ncontrib;IsPileUp;isAccepted", evtsDim, evtsBins, evtsMins, evtsMaxs);
+  fhnTracks   = new THnSparseF("fhnTracks", "fhnTraks;pT;eta;phi;isFilterMask272;isMask16;isMask256;charge;", trksDim, trksBins, trksMins, trksMaxs);
+  fhnMC       = new THnSparseF("fhnMC",     "fhnTraks;pT;eta;phi;isFilterMask272;isMask16;isMask256;charge;", trksDim, trksBins, trksMins, trksMaxs);
+  fhnMC2      = new THnSparseF("fhnMC2",    "fhnTraks;pT;eta;phi;isFilterMask272;isMask16;isMask256;charge;", trksDim, trksBins, trksMins, trksMaxs);
+
+  fhnRecJetsNoCut  = new THnSparseF("fhnRecJetsNoCut", "fhnRecJetsNoCut;pT;eta;phi;AreaCH;AreaN;z;nTracks;", jetsDim, jetsBins, jetsMins, jetsMaxs);
+  fhnGenJetsNoCut  = new THnSparseF("fhnGenJetsNoCut", "fhnGenJetsNoCut;pT;eta;phi;AreaCH;AreaN;z;nTracks;", jetsDim, jetsBins, jetsMins, jetsMaxs);
+  fhnRecJetsCut    = new THnSparseF("fhnRecJetsCut",     "fhnRecJetsCut;pT;eta;phi;AreaCH;AreaN;z;nTracks;", jetsDim, jetsBins, jetsMins, jetsMaxs);
+  fhnGenJetsCut    = new THnSparseF("fhnGenJetsCut",     "fhnGenJetsCut;pT;eta;phi;AreaCH;AreaN;z;nTracks;", jetsDim, jetsBins, jetsMins, jetsMaxs);
+  //UE sparses
+  fhnTrackUE     = new THnSparseF("fhnTrackUE",      "fhnTrackUE;pT-leading jet;eta;sum1;sum2;avgSum;", ueDim, ueBins, ueMins, ueMaxs);
+  fhnParticleUE  = new THnSparseF("fhnParticleUE","fhnParticleUE;pT-leading jet;eta;sum1;sum2;avgSum;", ueDim, ueBins, ueMins, ueMaxs);
+  // pt - eta - phi - AreaCH - AreaN - UEdensity - ptLeadingTrack/ptJet - ptOrig 
+  fhnRecJetsTrackUEcor  = new THnSparseF("fhnRecJetsTrackUEcor", "fhnRecJetsTrackUEcor;pT;eta;phi;AreaCH;AreaN;UE;z;pTorig;", jetsUEcorDim, jetsUEcorBins, jetsUEcorMins, jetsUEcorMaxs);
+  fhnGenJetsTrackUEcor  = new THnSparseF("fhnGenJetsTrackUEcor", "fhnGenJetsTrackUEcor;pT;eta;phi;AreaCH;AreaN;UE;z;pTorig;", jetsUEcorDim, jetsUEcorBins, jetsUEcorMins, jetsUEcorMaxs);
+  // ptGen - ptRec - ptFraction - maxDist - bothWays
+  fhnMatching = new THnSparseF("fhnMatching","fhnMatching;pTgen;pTrec;ptFraction;maxDist;bothWays;1-p_{T,rec}/p_{T,gen}; dR; dEta; dPhi;;isSamePtBin;", matchingDim, matchingBins, matchingMins, matchingMaxs);
+  fhnTrackCorrMatching = new THnSparseF("fhnTrackCorrMatching","fhnTrackCorrMatching;pTgen;pTrec;ptFraction;maxDist;bothWays;1-p_{T,rec}/p_{T,gen}; dR; dEta; dPhi;isSamePtBin;", matchingDim, matchingBins, matchingMins, matchingMaxs);
+
+  fhnTracks->SetBinEdges(0, trackPtBins);
+  fhnTrackUE->SetBinEdges(0, trackPtBins);
+  fhnParticleUE->SetBinEdges(0, trackPtBins);
+
+  fhnRecJetsNoCut->SetBinEdges(0, binsPt);
+  fhnGenJetsNoCut->SetBinEdges(0, binsPt);
+  fhnRecJetsCut->SetBinEdges(0, binsPt);
+  fhnGenJetsCut->SetBinEdges(0, binsPt);
+
+  fhnRecJetsTrackUEcor->SetBinEdges(0,binsPt);
+  fhnRecJetsTrackUEcor->SetBinEdges(7,binsPt);
+  fhnGenJetsTrackUEcor->SetBinEdges(0,binsPt);
+  fhnGenJetsTrackUEcor->SetBinEdges(7,binsPt);
+
+  fhnMatching->SetBinEdges(0,binsPt);
+  fhnMatching->SetBinEdges(1,binsPt);
+  fhnTrackCorrMatching->SetBinEdges(0,binsPt);
+  fhnTrackCorrMatching->SetBinEdges(1,binsPt);
+
+  fhnEvent->Sumw2();
+  fhnTracks->Sumw2();
+  fhnMC->Sumw2();
+  fhnMC2->Sumw2();
+  fhnRecJetsNoCut->Sumw2();
+  fhnGenJetsNoCut->Sumw2();
+  fhnRecJetsCut->Sumw2();
+  fhnGenJetsCut->Sumw2();
+  fhnRecJetsTrackUEcor->Sumw2();
+  fhnGenJetsTrackUEcor->Sumw2();
+  fhnTrackUE->Sumw2();
+  fhnParticleUE->Sumw2();
+  fhnMatching->Sumw2();
+  fhnTrackCorrMatching->Sumw2();
+
+  fOutputList->Add(fhnEvent);
+  fOutputList->Add(fhnTracks);
+  fOutputList->Add(fhnMC);
+  fOutputList->Add(fhnMC2);
+  fOutputList->Add(fhnRecJetsNoCut);
+  fOutputList->Add(fhnGenJetsNoCut);
+  fOutputList->Add(fhnRecJetsCut);
+  fOutputList->Add(fhnGenJetsCut);
+  fOutputList->Add(fhnRecJetsTrackUEcor);
+  fOutputList->Add(fhnGenJetsTrackUEcor);
+  fOutputList->Add(fhnTrackUE);
+  fOutputList->Add(fhnParticleUE);
+  fOutputList->Add(fhnMatching);
+  fOutputList->Add(fhnTrackCorrMatching);
+
+  const Int_t trackUEdim = 11;
+  //max track pt - ch_part_dens - ch_pt_dens - avg_pt_track - zero particles -tMAX_part_dens-tMIN_part_dens-tDIF_part_dens-tMAX_pt_dens-tMIN_pt_dens-tDIF_pt_dens
+  Int_t trackUEbins[trackUEdim] = { 100, 50, 50, 50,   2, 50, 50, 50, 50, 50, 50};
+  Double_t trackUEmins[trackUEdim] = {  0., 0., 0.,  0.,-0.5, 0., 0., 0., 0., 0., 0.};
+  Double_t trackUEmaxs[trackUEdim] = {100., 5., 5., 5., 1.5, 5., 5., 5., 5., 5., 5.};
+
+  fhnTrackUEanal = new THnSparseF("fhnTrackUEanal","fhnTrackUEanal;PTmax;#rho^{ch.part}_{T};#rho^{pT}_{T};avg-pt/track;zero_particles;#rho^{ch.part}_{transMAX};#rho^{ch.part}_{transMIN};#rho^{ch.part}_{transDIF};#rho^{pT}_{transMAX};#rho^{pT}_{transMIN};#rho^{pT}_{transDIF}", trackUEdim, trackUEbins, trackUEmins, trackUEmaxs);
+  fhnTrackUEanal->Sumw2();
+  fOutputList->Add(fhnTrackUEanal);
+
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::UserExec(Option_t *option)
+{
+  Double_t evtContainer[7];
+  Bool_t isEventSelected = EventSelection(evtContainer);
+
+  TList trackList; 
+  TList particleList;
+  Int_t nTracks         = GetListOfTracks(fTrackType, &trackList);
+  Int_t nParticles      = GetListOfTracks(fParticleType, &particleList);
+
+ if(fDebug > 10 ) 
+    std::cout<< nTracks<< " " << nParticles<<std::endl;  
+
+  TClonesArray *tcaRecJets = 0;
+  TClonesArray *tcaGenJets = 0;
+  TClonesArray *tcaRecBckg = 0;
+  TClonesArray *tcaGenBckg = 0;
+
+  Int_t rJ, gJ, rB, gB;
+
+  if(fRecJetBranch.Length() > 0) {
+    tcaRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fRecJetBranch.Data()));
+    if(!tcaRecJets)                tcaRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fRecJetBranch.Data()));
+    if(!tcaRecJets)                tcaRecJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fRecJetBranch.Data()));
+    if(!tcaRecJets)                tcaRecJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fRecJetBranch.Data()));
+    if(fAODExtension&&!tcaRecJets) tcaRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fRecJetBranch.Data()));
+    if(tcaRecJets) rJ =  tcaRecJets->GetEntries();
+    else rJ = -1;
+  } else rJ = -1;
+
+  if(fGenJetBranch.Length() > 0) {
+    tcaGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fGenJetBranch.Data()));
+    if(!tcaGenJets)                tcaGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fGenJetBranch.Data()));
+    if(!tcaGenJets)                tcaGenJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fGenJetBranch.Data()));
+    if(!tcaGenJets)                tcaGenJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fGenJetBranch.Data()));
+    if(fAODExtension&&!tcaGenJets) tcaGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fGenJetBranch.Data()));
+    if(tcaGenJets) gJ =  tcaGenJets->GetEntries();
+    else gJ = -1;
+  } else gJ = -1;
+
+  if(fRecBckgBranch.Length() > 0) {
+    tcaRecBckg = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fRecBckgBranch.Data()));
+    if(!tcaRecBckg)                tcaRecBckg = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fRecBckgBranch.Data()));
+    if(!tcaRecBckg)                tcaRecBckg = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fRecBckgBranch.Data()));
+    if(!tcaRecBckg)                tcaRecBckg = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fRecBckgBranch.Data()));
+    if(fAODExtension&&!tcaRecBckg) tcaRecBckg = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fRecBckgBranch.Data()));
+    rB =  tcaRecBckg->GetEntries();
+  } else rB = -1;
+
+  if(fGenBckgBranch.Length() > 0) {
+    tcaGenBckg = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fGenBckgBranch.Data()));
+    if(!tcaGenBckg)                tcaGenBckg = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fGenBckgBranch.Data()));
+    if(!tcaGenBckg)                tcaGenBckg = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fGenBckgBranch.Data()));
+    if(!tcaGenBckg)                tcaGenBckg = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fGenBckgBranch.Data()));
+    if(fAODExtension&&!tcaGenBckg) tcaGenBckg = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fGenBckgBranch.Data()));
+    gB =  tcaGenBckg->GetEntries();
+  } else gB = -1;
+
+  TList jetRecListNoCut; 
+  TList jetGenListNoCut; 
+  Int_t nRecJetsNoCut   = (rJ>0?GetListOfJets(tcaRecJets, &jetRecListNoCut, kFALSE):0);
+  Int_t nGenJetsNoCut   = (gJ>0?GetListOfJets(tcaGenJets, &jetGenListNoCut, kFALSE):0);
+
+  TList jetRecListCut;   
+  TList jetGenListCut;   
+  Int_t nRecJetsCut     = (rJ>0?GetListOfJets(tcaRecJets, &jetRecListCut, kTRUE):0);
+  Int_t nGenJetsCut     = (gJ>0?GetListOfJets(tcaGenJets, &jetGenListCut, kTRUE):0);
+
+  TList bckgRecListCut;  
+  TList bckgGenListCut;  
+  Int_t nRecBckgCut     = (rB>0?GetListOfJets(tcaRecBckg, &bckgRecListCut, kTRUE):0);
+  Int_t nGenBckgCut     = (gB>0?GetListOfJets(tcaGenBckg, &bckgGenListCut, kTRUE):0);
+
+  if(fDebug > 10) std::cout<<nRecJetsNoCut<<" "<<nGenJetsNoCut<<" "<<nRecJetsCut<< " "<< nGenJetsCut<<" "<<nRecBckgCut<<" "<<nGenBckgCut<<std::endl;
+
+  evtContainer[6] = (isEventSelected?1:0);
+  fhnEvent->Fill(evtContainer);
+
+  if(!isEventSelected) {
+    PostData(1,fOutputList);
+    return;
+  }
+
+  if(kDoUEanalysis) DoUEAnalysis(&trackList, (Double_t)0.15, (Double_t)0.9);
+
+  Double_t  recUEdensity = GetUE(&jetRecListCut, &trackList, fRecJetR, fhnTrackUE);
+  Double_t  genUEdensity = GetUE(&jetGenListCut, &particleList, fGenJetR, fhnParticleUE);
+
+  TList  trackUEcorrJetRecListCut;
+  TList  trackUEcorrJetGenListCut;
+
+  CorrectForUE(&jetRecListCut, recUEdensity, &trackUEcorrJetRecListCut, fhnRecJetsTrackUEcor);
+  CorrectForUE(&jetGenListCut, genUEdensity, &trackUEcorrJetGenListCut, fhnGenJetsTrackUEcor);
+
+  FillJetContainer(&jetRecListNoCut, fhnRecJetsNoCut);
+  FillJetContainer(&jetGenListNoCut, fhnGenJetsNoCut);
+  FillJetContainer(&jetRecListCut,   fhnRecJetsCut);
+  FillJetContainer(&jetGenListCut,   fhnGenJetsCut);
+
+    if(trackUEcorrJetRecListCut.GetEntries() != 0  && trackUEcorrJetGenListCut.GetEntries() != 0 ) {
+       MatchJets(kTRUE,  &trackUEcorrJetRecListCut,    &trackUEcorrJetGenListCut, 0.1,  fhnTrackCorrMatching);
+       MatchJets(kTRUE,  &trackUEcorrJetRecListCut,    &trackUEcorrJetGenListCut, 0.3,  fhnTrackCorrMatching);
+       MatchJets(kTRUE,  &trackUEcorrJetRecListCut,    &trackUEcorrJetGenListCut, 0.5,  fhnTrackCorrMatching);
+    }
+    if(jetRecListCut.GetEntries() != 0  && jetGenListCut.GetEntries() != 0 ) {
+       MatchJets(kTRUE,  &jetRecListCut,               &jetGenListCut,           0.1,  fhnMatching);
+       MatchJets(kTRUE,  &jetRecListCut,               &jetGenListCut,           0.3,  fhnMatching);
+       MatchJets(kTRUE,  &jetRecListCut,               &jetGenListCut,           0.5,  fhnMatching);
+    }
+
+
+  PostData(1,fOutputList);
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::Terminate(Option_t *)
+{
+  if(fDebug) printf("%s: %d Terminating\n",(char*)__FILE__, __LINE__);
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::SetRecJetBranch(TString s) {
+  fRecJetBranch = s;
+  if(s.Contains("KT02") || s.Contains("SISCONE02") || s.Contains("UA102")) fRecJetR = 0.2;
+  else if(s.Contains("KT03") || s.Contains("SISCONE03") || s.Contains("UA103")) fRecJetR = 0.3;
+  else if(s.Contains("KT04") || s.Contains("SISCONE04") || s.Contains("UA104")) fRecJetR = 0.4;
+  else if(s.Contains("KT05") || s.Contains("SISCONE05") || s.Contains("UA105")) fRecJetR = 0.5;
+  else if(s.Contains("KT06") || s.Contains("SISCONE06") || s.Contains("UA106")) fRecJetR = 0.6;
+  else fRecJetR = 0;
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::SetGenJetBranch(TString s) {
+  fGenJetBranch = s;
+  if(s.Contains("KT02") || s.Contains("SISCONE02") || s.Contains("UA102")) fGenJetR = 0.2;
+  else if(s.Contains("KT03") || s.Contains("SISCONE03") || s.Contains("UA103")) fGenJetR = 0.3;
+  else if(s.Contains("KT04") || s.Contains("SISCONE04") || s.Contains("UA104")) fGenJetR = 0.4;
+  else if(s.Contains("KT05") || s.Contains("SISCONE05") || s.Contains("UA105")) fGenJetR = 0.5;
+  else if(s.Contains("KT06") || s.Contains("SISCONE06") || s.Contains("UA106")) fGenJetR = 0.6;
+  else fGenJetR = 0;
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::SetRecBckgBranch(TString s) {
+  fRecBckgBranch = s;
+  if(s.Contains("KT02") || s.Contains("SISCONE02") || s.Contains("UA102")) fRecBckgR = 0.2;
+  else if(s.Contains("KT03") || s.Contains("SISCONE03") || s.Contains("UA103")) fRecBckgR = 0.3;
+  else if(s.Contains("KT04") || s.Contains("SISCONE04") || s.Contains("UA104")) fRecBckgR = 0.4;
+  else if(s.Contains("KT05") || s.Contains("SISCONE05") || s.Contains("UA105")) fRecBckgR = 0.5;
+  else if(s.Contains("KT06") || s.Contains("SISCONE06") || s.Contains("UA106")) fRecBckgR = 0.6;
+  else fRecBckgR = 0;
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::SetGenBckgBranch(TString s) {
+  fGenBckgBranch = s;
+  if(s.Contains("KT02") || s.Contains("SISCONE02") || s.Contains("UA102")) fGenBckgR = 0.2;
+  else if(s.Contains("KT03") || s.Contains("SISCONE03") || s.Contains("UA103")) fGenBckgR = 0.3;
+  else if(s.Contains("KT04") || s.Contains("SISCONE04") || s.Contains("UA104")) fGenBckgR = 0.4;
+  else if(s.Contains("KT05") || s.Contains("SISCONE05") || s.Contains("UA105")) fGenBckgR = 0.5;
+  else if(s.Contains("KT06") || s.Contains("SISCONE06") || s.Contains("UA106")) fGenBckgR = 0.6;
+  else fGenBckgR = 0;
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::SetVertexCuts(Int_t nCont, Double_t Zcut, Double_t Rcut) {
+  if(fDebug)
+    printf("%s: %d Setting Vertex Cuts\n",(char*)__FILE__,__LINE__);
+  nVtxContCut = nCont;
+  fVtxZcut = Zcut;
+  fVtxRcut = Rcut;
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::SetTrackCuts(Double_t ptMin, Double_t ptMax, Double_t etaMax) {
+  if(fDebug > 1) 
+    printf("%s: %d Track cuts set\n",(char*)__FILE__,__LINE__);
+  trackPtMin = ptMin;
+  trackPtMax = ptMax;
+  trackEtaAbsMax = etaMax;
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::SetJetCuts(Double_t ptMin, Double_t eta, Double_t z) {
+  jetPtMin = ptMin;
+  jetEtaCut = eta;
+  jetZmax = z;
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+Bool_t AliAnalysisTaskPPJetSpectra::EventSelection(Double_t evtContainer[6]) {
+  if(fDebug > 1) 
+    printf("%s: %d UserExec analysing event %d.\n", (char*)__FILE__, __LINE__, (Int_t)fEntry);
+
+  // Trigger selection
+  AliInputEventHandler* inputHandler = (AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+  if(fDebug > 2 ) 
+    printf("IsEventSelected: %d eventSelectionMask: %d\n", (Int_t)inputHandler->IsEventSelected(), (Int_t)fEvtSelectionMask);
+
+  Bool_t isTriggerSelected = inputHandler->IsEventSelected() & fEvtSelectionMask;
+  evtContainer[0] = (Int_t)isTriggerSelected;
+
+  fESD = (AliESDEvent*)InputEvent();
+  if(!fESD && fDebug > 2) 
+    printf("%s: %d No ESD event found\n",(char*)__FILE__, __LINE__);
+
+  fMC = MCEvent();
+  if(!fMC && fDebug > 2) 
+    printf("%s: %d No MC event found\n", (char*)__FILE__, __LINE__);
+
+
+  TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
+  if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
+    fAOD  =  ((AliAODInputHandler*)handler)->GetEvent();
+    handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
+    fAODJets = ((AliAODHandler*)handler)->GetAOD();
+    if (fDebug > 1)  
+      Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
+  }
+  else {
+    handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
+    if( handler && handler->InheritsFrom("AliAODHandler") ) {
+      fAOD = ((AliAODHandler*)handler)->GetAOD();
+      fAODJets = fAOD;
+      if (fDebug > 1)  
+        Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
+    }    
+  }
+  
+  if(!fAODJets)
+  {
+    if(fDebug > 1) 
+      printf("%s: %d No AOD found\n",(char*)__FILE__,__LINE__);
+    return kFALSE;
+  }
+  handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
+  Float_t centrality = -1;
+  if(fEventClass > 0)
+  {
+    if(handler->InheritsFrom("AliAODHandler")) centrality = fAOD->GetHeader()->GetCentrality();
+    else if(fESD) centrality = fESD->GetCentrality()->GetCentralityPercentile("V0M");
+    else centrality = AliAnalysisHelperJetTasks::EventClass();
+  }
+  evtContainer[1] = centrality;
+
+  // Event selection
+  AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
+  if(!primVtx) {
+    evtContainer[2]  =  1e10;
+    evtContainer[3]  =  1e10;
+    evtContainer[4]  =  1e10;
+    return kFALSE;
+  } else {  
+    primVtx->Print();
+    evtContainer[2] = primVtx->GetZ();
+    evtContainer[3] = TMath::Sqrt(primVtx->GetX()*primVtx->GetX() + primVtx->GetY()*primVtx->GetY() );
+    evtContainer[4] = primVtx->GetNContributors();
+  }
+
+  if(fRejectPileUp && AliAnalysisHelperJetTasks::IsPileUp()){
+    if (fDebug > 1) Printf("%s:%d SPD pileup: event REJECTED...", (char*)__FILE__,__LINE__);
+    evtContainer[5] = 0.;
+    return kFALSE;
+  }
+  else 
+    evtContainer[5] = 1.;
+
+  if(evtContainer[0] == 0) 
+  {
+    if(fDebug > 2) 
+      printf("%s: %d Event rejected: Trigger\n",(char*)__FILE__, __LINE__);
+    return kFALSE;
+  }
+  if(evtContainer[1] >= 0 && evtContainer[1] < 10*((Int_t)fEventClass/10) && evtContainer[1] > 10*((Int_t)fEventClass/10 + 1) )
+  {
+    if(fDebug > 2) 
+      printf("%s: %d Event rejected: Centrality\n",(char*)__FILE__, __LINE__);
+    return kFALSE;
+  }
+  if(TMath::Abs(evtContainer[2]) > fVtxZcut)
+  {
+    if(fDebug > 2) 
+      printf("%s: %d Event rejected: Vertex position (z)\n",(char*)__FILE__, __LINE__);
+    return kFALSE;
+  }
+  if(evtContainer[3] > fVtxRcut)
+  {
+    if(fDebug > 2)
+      printf("%s: %d Event rejected: Vertex position (x-y)\n",(char*)__FILE__,__LINE__);
+    return kFALSE;
+  }
+  if(evtContainer[4] < nVtxContCut)
+  {
+    if(fDebug > 2) 
+      printf("%s: %d Event rejected: Vertex contributors \n",(char*)__FILE__, __LINE__);
+    return kFALSE;
+  }
+
+  return kTRUE;
+}
+
+//---------------------------------------------------------------------------------------------------
+Int_t AliAnalysisTaskPPJetSpectra::GetListOfTracks(Int_t trackType, TList *trackList) {
+  if(fDebug) 
+    printf("%s: %d Getting Tracks\n",(char*)__FILE__,__LINE__);
+  if(trackType == AliAnalysisTaskPPJetSpectra::kNone) {
+    if(fDebug) printf("%s: %d No track type selected", (char*)__FILE__,__LINE__);
+    return 0;
+  }
+
+  if(1 == trackType) {
+    for(Int_t i = 0; i < fAOD->GetNumberOfTracks(); i++) {
+      Bool_t isOK = kTRUE;
+      Bool_t isOK16 = kTRUE;
+      Bool_t isOK256 = kTRUE;
+      AliAODTrack* track = (AliAODTrack*)fAOD->GetTrack(i);
+      if(!track) continue;
+      if(nTrackFilter>0 && !track->TestFilterBit(nTrackFilter) ) isOK = kFALSE;
+      if(nTrackFilter>0 && !track->TestFilterBit(16) ) isOK16 = kFALSE;
+      if(nTrackFilter>0 && !track->TestFilterBit(256) ) isOK256 = kFALSE;
+      if(track->Pt() < trackPtMin || track->Pt() > trackPtMax) isOK = kFALSE;
+      if(trackEtaAbsMax < TMath::Abs(track->Eta())) isOK = kFALSE;
+      Double_t tmpContainer[] = {track->Pt(), track->Eta(), track->Phi(), (Double_t)isOK, (Double_t)isOK16, (Double_t)isOK256, (Double_t)track->Charge()/3};
+      if(isOK) trackList->Add(track);
+      fhnTracks->Fill(tmpContainer);
+    }
+  }
+  else {
+    TClonesArray *tca=dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
+    for(Int_t i = 0; i < tca->GetEntries(); i++) {
+      AliAODMCParticle *particle = (AliAODMCParticle*)tca->At(i);
+      if(!particle) continue;
+      if(!particle->IsPhysicalPrimary()) continue;
+      Double_t charge = particle->Charge();
+      if( charge > 0 ) charge = 1;
+      if( charge < 0 ) charge = -1;
+      if( (trackType == 3) && (charge == 0) ) continue;
+      trackList->Add(particle);
+      Double_t tmpContainer[] = {particle->Pt(), particle->Eta(), particle->Phi(), -999, -999, -999, charge };
+      if(trackType == 2) fhnMC->Fill(tmpContainer);
+      else fhnMC2->Fill(tmpContainer);
+    }
+  }
+  trackList->Sort();
+  return trackList->GetEntries();
+}
+
+//---------------------------------------------------------------------------------------------------
+Int_t AliAnalysisTaskPPJetSpectra::GetTCAJets(TClonesArray* jca, TString branch) {
+  if( branch.Length() == 0) {
+    if(fDebug) printf("%s: %d No branch \"%s\" selected\n", (char*)__FILE__,__LINE__, branch.Data() );
+    return 0;
+  }
+
+  jca = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(branch.Data()));
+  if(!jca)                jca = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(branch.Data()));
+  if(!jca)                jca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(branch.Data()));
+  if(!jca)                jca = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(branch.Data()));
+  if(fAODExtension&&!jca) jca = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(branch.Data()));
+  return jca->GetEntries();
+
+}
+
+//---------------------------------------------------------------------------------------------------
+Int_t AliAnalysisTaskPPJetSpectra::GetListOfJets(TClonesArray* jca, TList* jetList, Bool_t useCuts) {
+  if(fDebug) 
+    printf("%s: %d Getting list of jets\n",(char*)__FILE__,__LINE__);
+
+  Double_t ptCut = (useCuts   &&  jetPtMin>0 ?jetPtMin :0.1);
+  Double_t etaCut = (useCuts  &&  jetEtaCut>0?jetEtaCut:0.9);
+  Double_t zCut  = (useCuts   &&  jetZmax>0  ?jetZmax  :1);
+
+  if(!jca){
+    return -2;
+  } 
+
+  for(Int_t i =0 ; i < jca->GetEntries(); i++) {
+    AliAODJet* jet = (AliAODJet*)jca->At(i);
+    if(!jet) continue;
+    Double_t zLeading = -1;
+//    if(jet->GetPtLeading() <= 0) {
+//      TRefArray* jetRef = (TRefArray*)jet->GetRefTracks();
+//      for(int j = 0; j < jetRef->GetEntries(); j++) {
+//     AliVTrack *track = (AliVTrack*)jet->GetTrack(j);
+//        if(!track) continue;
+//        cout<<track->Pt()<<" "<<zLeading<<endl;
+//     if(track->Pt() > zLeading) zLeading = track->Pt();
+//        cout<<__LINE__<<endl;
+//      }
+//      if(jet->Pt() > 0) zLeading /= jet->Pt();
+//      else zLeading = -1;
+//    }
+    //cuty
+    if(ptCut > 0  && ptCut > jet->Pt()                ) continue;
+    if(etaCut > 0 && etaCut < TMath::Abs(jet->Eta())  ) continue;
+    if(zCut > 0   && zCut < zLeading  && zLeading > 0 ) continue;
+
+    jetList->Add(jet);
+  }
+
+  jetList->Sort();
+  return jetList->GetEntries();
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::FillJetContainer(TList* jets, THnSparseF* container) {
+  if(!jets || !container) return;
+
+  for(Int_t i =0 ; i < jets->GetEntries(); i++) {
+    AliAODJet* jet = (AliAODJet*)jets->At(i);
+    if(!jet) continue;
+  // pt - eta - phi - AreaCH - AreaN -  ptLeadingTrack/ptJet - ptOrig 
+    Double_t tmpContainer[] = {jet->Pt(), jet->Eta(), jet->Phi(), jet->EffectiveAreaCharged(), jet->EffectiveAreaNeutral(), jet->GetPtLeading()/jet->Pt(), (Double_t)((TRefArray*)jet->GetRefTracks())->GetEntries() };
+    container->Fill(tmpContainer);
+  }
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+Double_t AliAnalysisTaskPPJetSpectra::GetUE(TList* jets, TList* tracks, Double_t Rpar,THnSparseF* thnCont) {
+  if(!jets || !tracks) {
+    if(fDebug) printf("%s: %d No jets or tracks\n",(char*)__FILE__,__LINE__);
+    return 0;
+  }
+
+  //find leading jet
+  AliAODJet *jet = 0;
+  for(Int_t iTmp = 0; iTmp < jets->GetEntries(); iTmp++) {
+    AliAODJet* tmp = (AliAODJet*)jets->At(iTmp);
+    if(!tmp) continue;
+    if(!jet) jet = tmp;
+    else 
+      if( jet->Pt() < tmp->Pt() ) jet = tmp;
+  }
+  if(!jet) return 0;
+  
+  //get track in perpendicular cone
+  //TVector3 for jet and perpendicular cones with same eta axis
+  TVector3 j(jet->Px(), jet->Py(), jet->Pz());
+  TVector3 p1(j);
+  TVector3 p2(j);
+
+  p1.RotateZ(TMath::Pi()/2.);
+  p2.RotateZ(-TMath::Pi()/2.);
+
+  Double_t sumAllPt1 = 0;
+  Double_t sumAllPt2 = 0;
+
+  for(int i = 0; i < tracks->GetEntries(); i++)  {
+    AliVParticle* tr = (AliVParticle*)tracks->At(i);
+    if(!tr) continue;
+    TVector3 v(tr->Px(), tr->Py(), tr->Pz());
+    Double_t dR1 = v.DrEtaPhi(p1);
+    Double_t dR2 = v.DrEtaPhi(p2);
+
+    if(dR1 < Rpar) sumAllPt1+=v.Pt();
+    if(dR2 < Rpar) sumAllPt2+=v.Pt();
+  }
+
+  if(Rpar != 0) {
+    sumAllPt1/=(TMath::Pi()*Rpar*Rpar);
+    sumAllPt2/=(TMath::Pi()*Rpar*Rpar);
+  }
+
+  Double_t container[] = {j.Pt(), j.Eta(), sumAllPt1, sumAllPt2, (sumAllPt1+sumAllPt2)/2.};
+  thnCont->Fill(container);
+
+  return (sumAllPt1+sumAllPt2)/2.;
+
+}
+
+//---------------------------------------------------------------------------------------------------
+Double_t AliAnalysisTaskPPJetSpectra::GetBckgUE(TList* jets, Double_t Rpar, Bool_t isSkipped, THnSparseF* cont) {
+  if(!jets) return 0;
+
+  Int_t leading01 = -1;
+  Int_t leading02 = -1;
+  Double_t leading01pt = 0;
+  Double_t leading02pt = 0;
+
+  if(!isSkipped) {
+    for(Int_t i = 0; i < jets->GetEntries(); i++) {
+      AliAODJet* tmp = (AliAODJet*)jets->At(i);
+      if(!tmp) continue;
+      if(tmp->Pt() > leading01pt) {
+        leading02 = leading01;
+        leading01 = i;
+        leading02pt = leading01pt;
+        leading01pt = tmp->Pt();
+      } else if(tmp->Pt() > leading02) {
+        leading02 = i;
+        leading02pt = tmp->Pt();
+      }
+    }
+  }
+
+  Int_t subLeading01 = -1;
+  Int_t subLeading02 = -1;
+  Double_t subLeading01pt = 0;
+  Double_t subLeading02pt = 0;
+  Double_t subLeading01area = 0;
+  Double_t subLeading02area = 0;
+
+  Double_t avgAll = 0;
+  Double_t areaAll = 0;
+  //search for subleading jets assuming leading 2 (skip02) jets are skipped
+  if(jets->GetEntries() > 0) {
+    for(Int_t i = 0; i < jets->GetEntries(); i++) {
+      if(i == leading01 || i == leading02) continue;
+      AliAODJet* tmp = (AliAODJet*)jets->At(i);
+      if(!tmp) continue;
+      if( subLeading01pt < tmp->Pt() ) {
+        subLeading02 = subLeading01;
+        subLeading01 = i;
+        subLeading02pt = subLeading01pt;
+        subLeading01pt = tmp->Pt();
+        subLeading02area = subLeading01area;
+        subLeading01area = tmp->EffectiveAreaCharged();
+      } else if( subLeading02pt < tmp->Pt() ) {
+        subLeading02 = i;
+        subLeading02pt = tmp->Pt();
+        subLeading02area = tmp->EffectiveAreaCharged();
+      }
+    }
+
+    //do avg jet pt
+    Int_t nJets = 0;
+    for(int i = 0; i < jets->GetEntries();i++) {
+      if(i == leading01 || i == leading02) continue;
+      AliAODJet* tmp = (AliAODJet*)jets->At(i);
+      if(!tmp) continue;
+      nJets++;
+      avgAll+= tmp->Pt();
+      areaAll += tmp->EffectiveAreaCharged();
+    }
+  }
+
+
+  if(avgAll!=0) avgAll/=areaAll;
+  if(subLeading01pt!=0) subLeading01pt/=subLeading01area;
+  if(subLeading02pt!=0)subLeading02pt/=subLeading02area;
+  Double_t tmpContainer[]={subLeading01pt,subLeading02pt,avgAll,Rpar*10};
+
+  cont->Fill(tmpContainer);
+
+  return avgAll; 
+}
+
+//---------------------------------------------------------------------------------------------------
+Int_t  AliAnalysisTaskPPJetSpectra::CorrectForUE(TList* jets, Double_t UE, TList* newList, THnSparseF* container) {
+  if(!jets) return 0;
+
+  for(Int_t i = 0; i < jets->GetEntries(); i++) {
+    AliAODJet* tmpJet = (AliAODJet*)jets->At(i);
+    if(!tmpJet) continue;
+
+    AliAODJet* jet = (AliAODJet*)tmpJet->Clone(Form("%s%s",tmpJet->GetName(),"_clone"));
+    Double_t corrUE = UE*(jet->EffectiveAreaCharged() + jet->EffectiveAreaNeutral() );
+
+    if(jet->Pt() > corrUE) jet->SetPtEtaPhiM(jet->Pt()- corrUE, jet->Eta(), jet->Phi(), jet->M());
+    else jet->SetPtEtaPhiM(0, jet->Eta(), jet->Phi(), jet->M());
+    newList->Add(jet);
+
+  // pt - eta - phi - AreaCH - AreaN - UEdensity - ptLeadingTrack/ptJet - ptOrig 
+    Double_t cont[8]={jet->Pt(), jet->Eta(), jet->Phi(), jet->EffectiveAreaCharged(),jet->EffectiveAreaNeutral(), corrUE, (jet->Pt() > 0?jet->GetPtLeading() / jet->Pt():-1),tmpJet->Pt()};
+    container->Fill(cont);
+  }
+  newList->Sort();
+  return newList->GetEntries();
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::MatchJets(Bool_t doBothWay, TList* recList, TList* genList, Float_t maxDist, THnSparseF* container) {
+  if(!genList || !recList) return;
+  Int_t mode = 1;
+
+  const Int_t kGenJets = genList->GetEntries();
+  const Int_t kRecJets = recList->GetEntries();
+
+  TArrayI iMatchIndex(kGenJets);
+  TArrayF fPtFraction(kGenJets);
+
+  TArrayI aGenIndex(kRecJets);
+  TArrayI aRecIndex(kGenJets);
+
+  Double_t genPt = -1;
+  Double_t recPt = -1;
+  Double_t ptFraction = -1;
+
+  //-- Closest jets to generated and checked for E-fraction
+  if(!doBothWay) {
+    AliAnalysisHelperJetTasks::GetJetMatching(genList, kGenJets, recList, kRecJets, iMatchIndex, fPtFraction, fDebug, maxDist, mode);
+    for(Int_t ig = 0; ig < kGenJets; ig++) {
+      //get gen-jet
+      AliAODJet* genJet = (AliAODJet*)genList->At(ig);
+      if(!genJet) continue;
+      genPt = genJet->Pt();
+      
+      //get rec-jet
+      Int_t ir = iMatchIndex[ig];
+      if(ir<0||ir>=recList->GetEntries()) continue;
+      AliAODJet* recJet = (AliAODJet*)recList->At(ir);
+      if(!recJet) continue;
+      recPt = recJet->Pt();
+
+      ptFraction = fPtFraction[ig];
+
+      Double_t dR = recJet->DeltaR(genJet);
+      Double_t dEta = recJet->Eta() - genJet->Eta();
+      Double_t dPhi2 = dR*dR - dEta*dEta;
+      
+       Bool_t isSame = kFALSE;
+       if(CheckPtBin(genPt) == CheckPtBin(recPt)) isSame = kTRUE;
+      // ptGen - ptRec - ptFraction - maxDist - bothWays - (1 - rec/gen) - dR - dEta  - dPhi
+      Double_t cont[] = {genPt,recPt,ptFraction,maxDist,(Float_t)doBothWay, (genPt != 0 ? (1. - recPt/genPt):1), dR, dEta, (dPhi2>=0?TMath::Sqrt(dPhi2):-1), (Double_t)isSame};
+      container->Fill(cont);
+    }
+  }
+  //-- Closest rec jet to gen and vice-versa & check for E-fraction
+  else {
+    AliAnalysisHelperJetTasks::GetClosestJets(genList, kGenJets, recList, kRecJets, aGenIndex, aRecIndex,fDebug, maxDist);
+    for(Int_t ig = 0; ig < kGenJets; ig++) {
+      //get gen-jet
+      AliAODJet* genJet = (AliAODJet*)genList->At(ig);
+      if(!genJet) continue;
+      genPt = genJet->Pt();
+
+      //get rec-jet
+      Int_t ir = aRecIndex[ig];
+      if(ir>=0&&ir<recList->GetEntries()) {
+       AliAODJet *recJet = (AliAODJet*)recList->At(ir);
+       if(!recJet) continue;
+       recPt = recJet->Pt();
+       Double_t dR = recJet->DeltaR(genJet);
+       Double_t dEta = recJet->Eta() - genJet->Eta();
+       Double_t dPhi2 = dR*dR - dEta*dEta;
+
+       ptFraction = AliAnalysisHelperJetTasks::GetFractionOfJet(recJet,genJet,mode);
+
+       Bool_t isSame = kFALSE;
+       if(CheckPtBin(genPt) == CheckPtBin(recPt)) isSame = kTRUE;
+       // ptGen - ptRec - ptFraction - maxDist - bothWays - (1 - rec/gen) - dR - dEta  - dPhi
+       Double_t cont[] = {genPt,recPt,ptFraction,maxDist,(Float_t)doBothWay, (genPt != 0 ? (1. - recPt/genPt):1), dR, dEta, (dPhi2>=0?TMath::Sqrt(dPhi2):-1), (Double_t)isSame  };
+        container->Fill(cont);
+      }
+    }
+  }
+
+  return;
+}
+
+//---------------------------------------------------------------------------------------------------
+Int_t AliAnalysisTaskPPJetSpectra::CheckPtBin(Double_t pT) {
+  Double_t bins[]      = {0.,2.,4.,6.,8.,10.,12., 14.,16., 18.,20.,24.,28.,32.,38.,44.,50.,58.,66.,76.,86.,100.,114.,128.,150.,250.};
+  Double_t nBins       = 25;
+
+  for(Int_t i = 0; i <= nBins; i++) {
+    if(pT < bins[i] ) return i;
+  }
+  return nBins+1;
+}
+
+//---------------------------------------------------------------------------------------------------
+void AliAnalysisTaskPPJetSpectra::DoUEAnalysis(TList* tracks, Double_t PTcut, Double_t ETAcut) {
+       Double_t PTmax = 0;
+       int iMax = -1;
+       for(int i = 0; i < tracks->GetEntries(); i++) {
+               AliVParticle *part = (AliVParticle*)tracks->At(i);
+               if(!part) continue;
+
+               if(part->Pt() < PTcut) continue;
+               if(TMath::Abs(part->Eta()) > ETAcut ) continue;
+
+               if(PTmax < part->Pt()) {
+                       PTmax = part->Pt();
+                       iMax = i;
+               }
+       }
+
+       if(PTmax < trackPtMin) return;
+
+       Double_t ch_part_density = 0;
+       Double_t ch_part_pt_density = 0;
+       Double_t avg_track_pt = 0;
+       Double_t zero_ch_part = 0;
+       Double_t transMAX_part_density = 0;
+       Double_t transMIN_part_density = 0;
+       Double_t transMAX_pt_density = 0;
+       Double_t transMIN_pt_density = 0;
+       Double_t transDIF_pt_density = 0;
+       Double_t transDIF_part_density = 0;
+
+       Double_t A1_part_density = 0;
+       Double_t A2_part_density = 0;
+       Double_t A1_pt_density = 0;
+       Double_t A2_pt_density = 0;
+
+       AliVParticle *maxParticle = (AliVParticle*)tracks->At(iMax);
+
+       Double_t PHImax = maxParticle->Phi();
+
+       for(int i = 0; i < tracks->GetEntries(); i++) {
+               AliVParticle* part = (AliVParticle*)tracks->At(i);
+               if(!part) continue;
+               if(part->Pt() < PTcut) continue;
+
+               Bool_t isArea1 = kFALSE;
+               Bool_t isArea2 = kFALSE;
+
+               Double_t dPhi = part->Phi() - PHImax;
+               if(dPhi > TMath::Pi()) dPhi -= TMath::Pi();
+               if(dPhi < -TMath::Pi()) dPhi +=TMath::Pi();
+
+               if(TMath::Abs(dPhi) > TMath::Pi()/3 && TMath::Abs(dPhi) < 2*TMath::Pi()/3 ) {
+                       if(dPhi>0) isArea1 = kTRUE;
+                       else isArea2 = kTRUE;
+               }
+
+               if(!isArea1 && !isArea2) continue;
+
+               ch_part_density += 1;
+               ch_part_pt_density += part->Pt();
+               avg_track_pt += part->Pt();
+
+               if(isArea1) {
+                       A1_part_density += 1;
+                       A1_pt_density += part->Pt();
+               } else if(isArea2) {
+                       A2_part_density += 1;
+                       A2_pt_density += part->Pt();
+               }
+       }
+
+
+       if(ch_part_density > 0) avg_track_pt/=ch_part_density;
+       else zero_ch_part = 1;
+       ch_part_density*=3./(4.*TMath::Pi()*ETAcut);
+       ch_part_pt_density*= 3./(4.*TMath::Pi()*ETAcut);
+
+       A1_part_density*=3./(4.*TMath::Pi()*ETAcut);
+       A1_pt_density*= 3./(4.*TMath::Pi()*ETAcut);
+       A2_part_density*=3./(4.*TMath::Pi()*ETAcut);
+       A2_pt_density*= 3./(4.*TMath::Pi()*ETAcut);
+
+       if(A1_part_density < A2_part_density) {
+               transMAX_part_density = A2_part_density;
+               transMIN_part_density = A1_part_density;
+       } else {
+               transMAX_part_density = A1_part_density;
+               transMIN_part_density = A2_part_density;
+       }
+
+       if(A1_pt_density < A2_pt_density) {
+               transMAX_pt_density = A2_pt_density;
+               transMIN_pt_density = A1_pt_density;
+       } else {
+               transMAX_pt_density = A1_pt_density;
+               transMIN_pt_density = A2_pt_density;
+       }
+
+       transDIF_pt_density     = transMAX_pt_density - transMIN_pt_density;
+       transDIF_part_density   = transMAX_part_density - transMIN_part_density;
+
+       Double_t container[] = {PTmax, ch_part_density, ch_part_pt_density, avg_track_pt, zero_ch_part,
+                                                       transMAX_part_density, transMIN_part_density, transDIF_part_density,
+                                                       transMAX_pt_density, transMIN_pt_density, transDIF_pt_density};
+
+       fhnTrackUEanal->Fill(container);
+}
diff --git a/PWGJE/UserTasks/AliAnalysisTaskPPJetSpectra.h b/PWGJE/UserTasks/AliAnalysisTaskPPJetSpectra.h
new file mode 100755 (executable)
index 0000000..f3a5c08
--- /dev/null
@@ -0,0 +1,134 @@
+#ifndef AliAnalysisTaskPPJetSpectra_cxx
+#define AliAnalysisTaskPPJetSpectra_cxx
+
+class THnSparse;
+class TNtuple;
+class TH2F;
+class AliAODEvent;
+class AliESDEvent;
+class AliAODExtension;
+class AliAODJet;
+
+#include "AliAnalysisTaskSE.h"
+
+class AliAnalysisTaskPPJetSpectra : public AliAnalysisTaskSE
+{
+  public:
+    AliAnalysisTaskPPJetSpectra();
+    AliAnalysisTaskPPJetSpectra(const char* name);
+    virtual ~AliAnalysisTaskPPJetSpectra() {}
+
+    virtual void        Init();
+    virtual Bool_t      Notify();
+    virtual void        UserCreateOutputObjects();
+    virtual void        UserExec(Option_t *option);
+    virtual void        Terminate(Option_t *);
+
+    void                SetVertexCuts(Int_t, Double_t, Double_t);
+    void                SetTrackFilter(UInt_t i) {nTrackFilter = i;}
+    void                SetEventSelectionMask(UInt_t i) {fEvtSelectionMask = i;}
+    void                SetEventClass(Float_t i) {fEventClass = i;}
+    void                SetTrackCuts(Double_t,Double_t,Double_t);
+    void                SetJetCuts(Double_t, Double_t, Double_t);
+
+    void                SetRecJetBranch(TString);
+    void                SetGenJetBranch(TString);
+    void                SetRecBckgBranch(TString);
+    void                SetGenBckgBranch(TString);
+    void                SetTrackType(Int_t i) {fTrackType = i;}
+    void                SetParticleType(Int_t i) {fParticleType = i;}
+    void                SetNonStdFile(TString s) {fNonStdFile = s;}
+    void                               SetDoUEanalysis(Bool_t i) {kDoUEanalysis = i;}
+
+    void                UseMC(Bool_t i) {fUseMC = i;}
+
+    enum                {kNone = 0, kAOD, kAODMC, kAODMC2};
+  private:
+
+    Bool_t              EventSelection(Double_t*);
+    Int_t               GetListOfTracks(Int_t, TList*);
+    Int_t               GetTCAJets(TClonesArray*,TString);
+    Int_t               GetListOfJets(TClonesArray*, TList*, Bool_t);
+    void                FillJetContainer(TList*, THnSparseF*);
+    Double_t            GetUE(TList*, TList*, Double_t,THnSparseF*);
+    Double_t            GetBckgUE(TList*, Double_t,Bool_t, THnSparseF*);
+    Int_t               CorrectForUE(TList*,Double_t,TList*,THnSparseF*);
+    void                MatchJets(Bool_t,TList*,TList*,Float_t, THnSparseF*);
+    Int_t              CheckPtBin(Double_t);
+    void               DoUEAnalysis(TList*, Double_t, Double_t);
+
+    TList*              fOutputList;
+
+    AliESDEvent*        fESD;
+    AliAODEvent*        fAOD;
+    AliMCEvent*         fMC;
+    AliAODEvent*        fAODJets;
+    AliAODExtension*    fAODExtension;
+    TString             fNonStdFile;
+    Int_t               fDebug;
+    Bool_t              fUseMC;
+
+    UInt_t              fEvtSelectionMask;
+    Float_t             fEventClass;
+    Int_t               nVtxContCut;
+    Double_t            fVtxZcut;
+    Double_t            fVtxRcut;
+
+    UInt_t              nTrackFilter;
+    Double_t            trackPtMin;
+    Double_t            trackPtMax;
+    Double_t            trackEtaAbsMax;
+
+    Double_t            jetPtMin;
+    Double_t            jetEtaCut;
+    Double_t            jetZmax;
+
+    THnSparseF*         fhnEvent;
+
+    THnSparseF*         fhnTracks;
+    THnSparseF*         fhnMC;
+    THnSparseF*         fhnMC2;
+
+    THnSparseF*         fhnRecJetsNoCut;
+    THnSparseF*         fhnGenJetsNoCut;
+    THnSparseF*         fhnRecJetsCut;
+    THnSparseF*         fhnGenJetsCut;
+    THnSparseF*         fhnRecBckg;
+    THnSparseF*         fhnGenBckg;
+
+    THnSparseF*         fhnRecJetsTrackUEcor;
+    THnSparseF*         fhnGenJetsTrackUEcor;
+    THnSparseF*         fhnRecJetsBckgUEcor;
+    THnSparseF*         fhnGenJetsBckgUEcor;
+
+    THnSparseF*         fhnTrackUE;
+    THnSparseF*         fhnParticleUE;
+    THnSparseF*         fhnBckgRecUE;
+    THnSparseF*         fhnBckgGenUE;
+
+    TString             fRecJetBranch;
+    TString             fGenJetBranch;
+    TString             fRecBckgBranch;
+    TString             fGenBckgBranch;
+
+    Double_t            fRecJetR;
+    Double_t            fGenJetR;
+    Double_t            fRecBckgR;
+    Double_t            fGenBckgR;
+
+    Int_t               fTrackType;
+    Int_t               fParticleType;
+
+    THnSparseF*                fhnMatching;
+    THnSparseF*                fhnTrackCorrMatching;
+    THnSparseF*                fhnBckgCorrMatching;
+
+    THnSparseF*                fhnTrackUEanal;
+
+    Bool_t             kDoUEanalysis;
+    Int_t               fRejectPileUp;
+
+    ClassDef(AliAnalysisTaskPPJetSpectra, 2);
+};
+
+#endif
index 9ef76f6c707dced34cdba1f38830d2d45cac5cb6..2db22827e187c7a7f9a690e22bf1a3b691138fd3 100644 (file)
@@ -60,12 +60,12 @@ THnSparseD *AliIDFFUtils::GetTHn(const TString name)
   //get THnSparseD
   //
 
-  const Int_t nvar = 10;
-  //                                   0       1              2              3               4     5      6       7       8         9
-  const TString atitle[nvar]={"TrackEta","JetPt", "TrackTPCsig", "Log10TrackP", "Log10TrackPt",  "z",  "xi",  "pdg",  "tof",  "hmpid"};
-  const Int_t nbins[nvar]   ={         4,     20,          2400,          Nx(),             50,   25,    50,      7,      7,        7};
-  const Double_t xmins[nvar]={         0,      0,             0,        Xmin(),         Xmin(),    0,     0,   -3.5,   -3.5,     -3.5};
-  const Double_t xmaxs[nvar]={       0.9,    100,           200,        Xmax(),         Xmax(),    1,     6,    3.5,    3.5,      3.5};
+  const Int_t nvar = 11;
+  //                                   0       1              2              3               4     5      6       7       8         9     10   
+  const TString atitle[nvar]={"TrackEta","JetPt", "TrackTPCsig", "Log10TrackP", "Log10TrackPt",  "z",  "xi",  "pdg",  "comb",   "tof",  "tpc"};
+  const Int_t nbins[nvar]   ={         4,     15,          1200,          Nx(),             50,   30,    60,      7,      7,        7,      7};
+  const Double_t xmins[nvar]={         0,      5,             0,        Xmin(),         Xmin(),    0,     0,   -3.5,   -3.5,     -3.5,   -3.5};
+  const Double_t xmaxs[nvar]={       0.9,     20,           200,        Xmax(),         Xmax(),  1.2,     6,    3.5,    3.5,      3.5,    3.5};
 
   THnSparseD * hh = new THnSparseD(name,"", nvar, nbins, xmins, xmaxs);
   for(Int_t ia=0; ia<nvar; ia++){
@@ -84,6 +84,7 @@ THnSparseD *AliIDFFUtils::GetTHn(const TString name)
   return hh;
 }
 
+/*
 Bool_t AliIDFFUtils::HMPIDAcceptance(const AliAODTrack *track)
 {
   //
@@ -173,6 +174,41 @@ Int_t AliIDFFUtils::HMPIDType(const AliAODTrack * track)
 
   return kNOTSELECTED;
 }
+*/
+
+
+Int_t AliIDFFUtils::TPCType(const AliAODTrack * trackptr)
+{
+  //
+  //return the (locally defined) particle type judged by TPC
+  //use tofmode for TPC mode
+  //
+
+  const AliPIDResponse::EDetPidStatus tpcstatus =  fPid->CheckPIDStatus(AliPIDResponse::kTPC, trackptr);
+  if(tpcstatus != AliPIDResponse::kDetPidOk)
+    return kNOINFO;
+
+  Double_t nsigma[]={-999,-999,-999, -999};
+  nsigma[kPION]     = fPid->NumberOfSigmasTPC( trackptr, AliPID::kPion);
+  nsigma[kKAON]     = fPid->NumberOfSigmasTPC( trackptr, AliPID::kKaon);
+  nsigma[kPROTON]   = fPid->NumberOfSigmasTPC( trackptr, AliPID::kProton);
+  nsigma[kELECTRON] = fPid->NumberOfSigmasTPC( trackptr, AliPID::kElectron);
+
+  //so that the effective region is really low momentum
+  const Double_t inclusion=5;
+  const Double_t exclusion=5;
+
+  //don't destroy TPC signal shape below 120
+  const Double_t maxsig = 150;
+  if(trackptr->GetTPCsignal()> maxsig){
+    if(TMath::Abs(nsigma[kPION])<inclusion && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])>exclusion && TMath::Abs(nsigma[kELECTRON])>exclusion) return kPION;
+    if(TMath::Abs(nsigma[kPION])>exclusion && TMath::Abs(nsigma[kKAON])<inclusion && TMath::Abs(nsigma[kPROTON])>exclusion && TMath::Abs(nsigma[kELECTRON])>exclusion) return kKAON;
+    if(TMath::Abs(nsigma[kPION])>exclusion && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])<inclusion && TMath::Abs(nsigma[kELECTRON])>exclusion) return kPROTON;
+    if(TMath::Abs(nsigma[kPION])>exclusion && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])>exclusion && TMath::Abs(nsigma[kELECTRON])<inclusion) return kELECTRON;
+  }
+
+  return kNOTSELECTED;
+}
 
 Int_t AliIDFFUtils::TOFType(const AliAODTrack * trackptr, const Int_t tofmode)
 {
@@ -185,36 +221,70 @@ Int_t AliIDFFUtils::TOFType(const AliAODTrack * trackptr, const Int_t tofmode)
   if(tofstatus != AliPIDResponse::kDetPidOk)
     return kNOINFO;
 
-  Double_t nsigma[]={-999,-999,-999};
+  Double_t nsigma[]={-999,-999,-999, -999};
   nsigma[kPION]     = fPid->NumberOfSigmasTOF( trackptr, AliPID::kPion);
   nsigma[kKAON]     = fPid->NumberOfSigmasTOF( trackptr, AliPID::kKaon);
   nsigma[kPROTON]   = fPid->NumberOfSigmasTOF( trackptr, AliPID::kProton);
+  nsigma[kELECTRON] = fPid->NumberOfSigmasTOF( trackptr, AliPID::kElectron);
 
   Double_t inclusion=-999;
   Double_t exclusion=-999;
-  if(tofmode==1){
-    inclusion = 1.5;
-    exclusion = 3;
+  if(tofmode == 1){
+    inclusion = 2;
+    exclusion = 2;
   }
-  else if(tofmode==2){
+  else if(tofmode == 2){
     inclusion = 2;
     exclusion = 3;
   }
-  else if(tofmode==3){
-    inclusion = 2.5;
+  else if(tofmode == 3){
+    inclusion = 3;
     exclusion = 3;
   }
+  else if(tofmode == 4){
+    inclusion = 3;
+    exclusion = 4;
+  }
   else{
     printf("AliIDFFUtils::TOFType bad tofmode ! %d\n", tofmode); exit(1);
   }
 
-  if(TMath::Abs(nsigma[kPION])<inclusion && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])>exclusion) return kPION;
-  if(TMath::Abs(nsigma[kPION])>exclusion && TMath::Abs(nsigma[kKAON])<inclusion && TMath::Abs(nsigma[kPROTON])>exclusion) return kKAON;
-  if(TMath::Abs(nsigma[kPION])>exclusion && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])<inclusion) return kPROTON;
+  const Bool_t kpassEle = kTRUE;
+  /*
+  const Double_t cutEle = 1.5; 
+  //tofmode = 1x then require electron exclusion cut
+  if( tofmode == 4 ){
+    if(TMath::Abs(nsigma[kELECTRON])> cutEle ){
+      kpassEle = kTRUE;
+    }
+    else{
+      kpassEle = kFALSE;
+    }
+  }
+  */
+
+  //cut on electron for pion because the precision of pion is good and the contamination of electron can not be ignored
+  //+1 exclusion sigma in electron/pion to enforce better purity, otherwise not only pion, but also kaon is bias for jet pt 5-10 GeV/c
+  if(TMath::Abs(nsigma[kPION])<inclusion     && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])>exclusion && kpassEle) return kPION;
+  if(TMath::Abs(nsigma[kPION])>exclusion     && TMath::Abs(nsigma[kKAON])<inclusion && TMath::Abs(nsigma[kPROTON])>exclusion && kpassEle) return kKAON;
+  if(TMath::Abs(nsigma[kPION])>exclusion     && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])<inclusion && kpassEle) return kPROTON;
+  if(TMath::Abs(nsigma[kPION])>exclusion+0.5 && TMath::Abs(nsigma[kKAON])>exclusion && TMath::Abs(nsigma[kPROTON])>exclusion && TMath::Abs(nsigma[kELECTRON])<inclusion) return kELECTRON;
 
   return kNOTSELECTED;
 }
 
+Int_t AliIDFFUtils::CombineTPCTOF(const Int_t ktpc, const Int_t ktof)
+{
+  //tpc and tof, if <0 only noinfo or notselected
+  if(ktpc == ktof)
+    return ktpc;
+  else if(ktpc < 0 && ktof >= 0 )
+    return ktof;
+  else if(ktof < 0 && ktpc >= 0)
+    return ktpc;
+  else
+    return kNOTACCEPTED;
+}
 
 void AliIDFFUtils::FillTHn(THnSparseD * hh, Double_t jetpt, const AliAODTrack * track,  AliAODEvent *aodevent, const Int_t tofmode) //AliMCEvent * mcevent)
 {
@@ -237,8 +307,14 @@ void AliIDFFUtils::FillTHn(THnSparseD * hh, Double_t jetpt, const AliAODTrack *
   
   //===========================================================================================================
 
+  //use tofmode for tpcmode
+  const Int_t ktpc = TPCType(track);
   const Int_t ktof = TOFType(track, tofmode);
-  const Int_t khmpid = HMPIDType(track);
+
+  //fake kcomb by pretpc+pretof
+  const Int_t kcomb = CombineTPCTOF(ktpc, ktof);
+
+  //const Int_t khmpid = HMPIDType(track);
 
   //===========================================================================================================
 
@@ -267,7 +343,7 @@ void AliIDFFUtils::FillTHn(THnSparseD * hh, Double_t jetpt, const AliAODTrack *
 
   //===========================================================================================================
 
-  const Double_t vars[]={tracketa, jetpt, tracktpc, tracklogmom, tracklogpt, zz, xi, Double_t(mcpdg), Double_t(ktof), Double_t(khmpid)};
+  const Double_t vars[]={tracketa, jetpt, tracktpc, tracklogmom, tracklogpt, zz, xi, (Double_t)mcpdg, (Double_t)kcomb, (Double_t)ktof, (Double_t)ktpc};
   
   hh->Fill(vars);
 }
index 60191e3af2c35efcc9c08fb09d40752f5b94ce94..556b28477a9904499434789aa9cc5e862c2f3d40 100644 (file)
@@ -40,7 +40,7 @@ class AliIDFFUtils
   };
 
   static THnSparseD* GetTHn(const TString name);
-  static void FillTHn(THnSparseD * hh, Double_t jetpt, const AliAODTrack * trackk,  AliAODEvent* aodevt, const Int_t tofmode);  
+  static void FillTHn(THnSparseD * hh, Double_t jetpt, const AliAODTrack * trackk,  AliAODEvent* aodevt, Int_t tofmode);  
 
   static Bool_t TPCCutPIDN(const AliAODTrack * track);
   static Bool_t TPCCutMIGeo(const AliAODTrack * track, const AliVEvent* evt, TTreeStream * streamer=0x0);
@@ -53,13 +53,16 @@ class AliIDFFUtils
   static Double_t Xmax(){return 2;}
   static Int_t Nx(){return 300;}
 
-  static Int_t PDG2Type(const Int_t pdg);
+  static Int_t PDG2Type(Int_t pdg);
   
-  static Int_t TOFType(const AliAODTrack * trackptr, const Int_t tofmode);
+  static Int_t TOFType(const AliAODTrack * trackptr, Int_t tofmode);
+  static Int_t TPCType(const AliAODTrack * trackptr);
 
-  static Bool_t HMPIDAcceptance(const AliAODTrack *track);
-  static Bool_t HMPIDQA(const AliAODTrack *track);
-  static Int_t HMPIDType(const AliAODTrack * track);
+  static Int_t CombineTPCTOF(Int_t ktpc, Int_t ktof);
+
+  //static Bool_t HMPIDAcceptance(const AliAODTrack *track);
+  //static Bool_t HMPIDQA(const AliAODTrack *track);
+  //static Int_t HMPIDType(const AliAODTrack * track);
 
 };
 
index 24634c57d5139b5f9aa7f4b3df05b172ba7731ce..f0f2618fb75f495235debd55e71f91334cba61a2 100644 (file)
@@ -186,8 +186,8 @@ AliAnalysisTaskJetCorePP* AddTaskJetCorePP(
         mgr->ConnectInput(task, 1, containerKineJets); 
       }
       if(analBranchBgKine.Length()>0){ //kine jets to be removed from bg = input slot 2
-        //XXXX// AliAnalysisDataContainer* containerKineJetsBg = (AliAnalysisDataContainer*)mgr->GetContainers()->FindObject(analBranchBgKine.Data());
-        //XXXX// mgr->ConnectInput(task, 2, containerKineJetsBg);  
+         AliAnalysisDataContainer* containerKineJetsBg = (AliAnalysisDataContainer*)mgr->GetContainers()->FindObject(analBranchBgKine.Data());
+         mgr->ConnectInput(task, 2, containerKineJetsBg);  
       }
    }
 
index 3973295b0710e69d88d494d0b94e7bcfe090948d..885c2998da2a39c3aec49ba25f23ec167b143062 100644 (file)
@@ -81,6 +81,10 @@ AliAnalysisTaskJetProperties *AddTaskJetProperties(Char_t* bJet="clustersAOD",
   else if(JetBranch.Contains("AOD"))   task->SetTrackType(AliAnalysisTaskJetProperties::kTrackAOD);
   else task->SetTrackType(AliAnalysisTaskJetProperties::kTrackUndef);//undefined track type
   
+  //setting pileup rejection
+  Bool_t IsPileupReject = kTRUE;//=kTRUE if you want to reject pileup, =kFALSE for no pileup rejection
+  task->SetPileupRejection(IsPileupReject);
+  
   //setting the jet rejection
   //two types implemented:kNoReject and kReject1Trk
   TString contName="";
diff --git a/PWGJE/macros/AddTaskPPJetSpectra.C b/PWGJE/macros/AddTaskPPJetSpectra.C
new file mode 100755 (executable)
index 0000000..3024c16
--- /dev/null
@@ -0,0 +1,50 @@
+AliAnalysisTaskPPJetSpectra *jetAnal = 0;
+
+AliAnalysisTaskPPJetSpectra *AddTaskPPJetSpectra(TString name = "", TString recBranch = "", TString genBranch = "", TString recBckg = "", TString genBckg= "", UInt_t fEvtSelMask=AliVEvent::kMB, Float_t fEvtClass = -1,  Int_t nVtxContCut=0, Double_t fVtxZcut = 10, Double_t fVtxRcut = 1, UInt_t nTrackFilter = 272, Double_t trackPtMin = 0.15, Double_t trackPtMax = 100., Double_t trackEtaAbs = 0.9, Double_t fJetPtMin= 5, Double_t fJetEta = 0.9, Double_t fJetZ = 0.99)
+{
+
+  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+  if(!mgr) 
+  {
+    ::Error("AddTaskJetAnalysis", "No Analysis Manager found");
+    return NULL;
+  }
+  AliAnalysisTaskPPJetSpectra *task = 0;
+
+  if(name.Length() == 0) name = Form("JetAnalysis-%s-%s-%s-%s",recBranch.Data(),genBranch.Data(), recBckg.Data(), genBckg.Data() );
+  task = new AliAnalysisTaskPPJetSpectra(name.Data());
+  task->SetRecJetBranch(recBranch);
+  task->SetGenJetBranch(genBranch);
+  task->SetRecBckgBranch(recBckg);
+  task->SetGenBckgBranch(genBckg);
+  task->SetEventSelectionMask(fEvtSelMask);
+  task->SetEventClass(fEvtClass);
+  task->SetTrackFilter(nTrackFilter);
+  task->SetVertexCuts(nVtxContCut, fVtxZcut, fVtxRcut);
+  task->SetTrackCuts(trackPtMin, trackPtMax, trackEtaAbs);
+  task->SetJetCuts(fJetPtMin, fJetEta, fJetZ);
+
+  if(recBranch.Contains("MC") || genBranch.Contains("MC")) task->UseMC(kTRUE);
+  else task->UseMC(kFALSE);
+
+  if(recBranch.Contains("MC2")) task->SetTrackType(3);
+  else if(recBranch.Contains("MC")) task->SetTrackType(2);
+  else task->SetTrackType(1);
+  
+  if(genBranch.Contains("MC2")) task->SetParticleType(3);
+  else if(genBranch.Contains("MC")) task->SetParticleType(2);
+  else task->SetParticleType(1);
+
+  mgr->AddTask(task);
+
+  AliAnalysisDataContainer *container = mgr->CreateContainer(name.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:JETANALYSIS_%s", AliAnalysisManager::GetCommonFileName(), name.Data()));
+
+  mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
+  mgr->ConnectOutput(task, 0, mgr->GetCommonOutputContainer());
+  mgr->ConnectOutput(task, 1, container);
+
+  mgr->Print();
+  cout<<__LINE__<<endl;
+  
+  return task;
+}
index cd285a85e4e65118e64f3041164c14b955e2f247..f7c3a863e1bacde1001f0768de6047063868a951 100644 (file)
@@ -194,6 +194,37 @@ struct QAPlotter : public QABase
     TGraphAsymmErrors* fGOccupancy;// Graph of mean occupancy              
     Bool_t             fUseVar;    // Use variance 
   };
+  // =================================================================
+  /** 
+   * Compatiblity constructor 
+   * 
+   * @param prodYear    Year
+   * @param prodLetter  Letter
+   * @param useVar      Use variance 
+   */
+  QAPlotter(Long_t prodYear, Char_t prodLetter, Bool_t useVar) 
+    : QABase("", (prodYear < 2000 ? 2000 : 0) + prodYear, 
+            Form("LHC%02d%c", prodYear % 100, prodLetter, "pass0")), 
+      fNAccepted(0),
+      fVz(0), 
+      fUseVar(useVar)
+  {
+    Info("QAPlotter", "Do we use variance? %s", fUseVar ? "yes" : "no");
+    fFMD1i = new Ring(1, 'I', useVar); 
+    fFMD2i = new Ring(2, 'I', useVar); 
+    fFMD2o = new Ring(2, 'O', useVar); 
+    fFMD3i = new Ring(3, 'I', useVar); 
+    fFMD3o = new Ring(3, 'O', useVar); 
+    fNAccepted = new TGraph;
+    fNAccepted->SetName("nAccepted");
+    fNAccepted->SetMarkerStyle(20);
+    fNAccepted->SetLineWidth(2);
+
+    fVz = new TGraphErrors;
+    fVz->SetName("vz");
+    fVz->SetMarkerStyle(20);
+    fVz->SetLineWidth(2);
+  }
   /** 
    * Constructor 
    */
index a614332a5ca4f2c85e62c0393a918703f6897906..583e9fb61c7e2c986fc4454c082c0889b40d2e26 100644 (file)
@@ -545,6 +545,35 @@ public:
   };
 
   /******************************************************************/
+  /** 
+   * Backward compatibility mode constructor 
+   * 
+   * @param keep       Keep temporary files
+   * @param single     Not used  
+   * @param prodYear   Period year 
+   * @param prodLetter Period letter
+   */
+  QATrender(Bool_t keep, 
+           Bool_t single, 
+           Int_t  prodYear, 
+           char   prodLetter) 
+    : QABase("data", (prodYear < 2000 ? 2000 : 0) + prodYear,
+            Form("LHC%02d%c", (prodYear%2000), prodLetter), "pass0")
+      fRunNo(-1),
+      fCurrentFile(0),
+      fSharingFilter(0),
+      fEventInspector(0),
+      fDensityCalculator(0),
+      fEnergyFitter(0),
+      fFiles(0), 
+      fKeep(keep)
+  {
+    fFMD1i = new Ring(1, 'I'); 
+    fFMD2i = new Ring(2, 'I'); 
+    fFMD2o = new Ring(2, 'O'); 
+    fFMD3i = new Ring(3, 'I'); 
+    fFMD3o = new Ring(3, 'O'); 
+  }      
   /** 
    * CTOR
    * 
@@ -705,6 +734,8 @@ public:
     if (!oRun) return false;
     
     fGlobal->runNo = oRun->GetUniqueID();
+    if (fRunNo <= 0) fRunNo = fGlobal->runNo;
+
     TH1* oAcc = GetHistogram(fEventInspector,"nEventsAccepted");
     if (!oAcc) return false; 
 
index dd8832e5b233d98a1b8933fdb851efdd9b6bad5b..5ba700c614d2eb0defff22e9b49d51e9ff045d8e 100644 (file)
@@ -173,8 +173,8 @@ GetListOfFiles(const char* input=".")
  * @ingroup pwglf_forward_qa_scripts
  */
 void
-RunQA(const char* input=".", Bool_t keep=true, Int_t runNo=-1,
-      UShort_t what=0x3)
+RunQAOld(const char* input=".", Bool_t keep=true, Int_t runNo=-1,
+        UShort_t what=0x3)
 {
   gROOT->SetMacroPath(Form(".:$(ALICE_ROOT)/PWGLF/FORWARD/analysis2/qa:"
                           "$(ALICE_ROOT)/PWGLF/FORWARD/analysis2/corrs:%s",
similarity index 99%
rename from PWGLF/FORWARD/analysis2/qa/RunQA.sh
rename to PWGLF/FORWARD/analysis2/qa/RunQAOld.sh
index 97097e98f06440bffb1fed7ca596ae85be9220a5..f07531087f8edfd620016753d3fa3e958b98464f 100755 (executable)
@@ -227,7 +227,7 @@ what=3
 if test $notr -gt 0 ; then let what=$what^0x2 ; fi
 if test $norn -gt 0 ; then let what=$what^0x1 ; fi
 
-scr=$ALICE_ROOT/PWGLF/FORWARD/analysis2/qa/RunQA.C
+scr=$ALICE_ROOT/PWGLF/FORWARD/analysis2/qa/RunQAOld.C
 mess "Running root -l -b -q ${scr}\(\".\",1,-1,$what\)"
 
 enable_trap
index 1512c846b8dcfd23c219e7adb81efd307339bc34..d359a4054211a7540525e06951584498a309cb7b 100644 (file)
@@ -169,7 +169,7 @@ Bool_t ConfigD0
 
       // axis X: invmass (or resolution)
       //if (useIM[i]) 
-         out->AddAxis(imID, 1600, 0.6, 2.2);
+         out->AddAxis(imID, 320, 0.6, 2.2);
       //else
       //   out->AddAxis(resID, 200, -0.02, 0.02);
       // axis Y: transverse momentum
@@ -228,7 +228,7 @@ Bool_t ConfigD0
    out->SetMaxNSisters(maxSisters);
    out->SetCheckMomentumConservation(checkP);
    // binnings
-   out->AddAxis(imID, 1600, 0.6, 2.2);
+   out->AddAxis(imID, 320, 0.6, 2.2);
    out->AddAxis(ptID, 200, 0.0, 20.0);
    //out->AddAxis(yID, 100, -1, 1);
    //out->AddAxis(dcapID, 100, -0.001, 0.001);
@@ -251,7 +251,7 @@ Bool_t ConfigD0
    out->SetMaxNSisters(maxSisters);
    out->SetCheckMomentumConservation(checkP);
    // binnings
-   out->AddAxis(imID, 1600, 0.6, 2.2);
+   out->AddAxis(imID, 320, 0.6, 2.2);
    out->AddAxis(ptID, 200, 0.0, 20.0);
    //out->AddAxis(yID, 100, -1, 1);
    //out->AddAxis(dcapID, 100, -0.001, 0.001);
@@ -326,7 +326,7 @@ Bool_t ConfigD0
    // pair cuts
    out->SetPairCuts(cutsPairY);
    // binnings
-   out->AddAxis(imID, 1600, 0.6, 2.2);
+   out->AddAxis(imID, 320, 0.6, 2.2);
    out->AddAxis(ptID, 200, 0.0, 20.0);
    //out->AddAxis(yID, 100, -1, 1);
 
@@ -343,7 +343,7 @@ Bool_t ConfigD0
    // pair cuts
    out->SetPairCuts(cutsPairY);
    // binnings
-   out->AddAxis(imID, 1600, 0.6, 2.2);
+   out->AddAxis(imID, 320, 0.6, 2.2);
    out->AddAxis(ptID, 200, 0.0, 20.0);
    //out->AddAxis(yID, 100, -1, 1);
 
@@ -363,7 +363,7 @@ void AddMonitorOutput_PionEta(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter
 
    // PionEta
    AliRsnValueDaughter *axisPionEta = new AliRsnValueDaughter("pion_eta", AliRsnValueDaughter::kEta);
-   axisPionEta->SetBins(-1.0,1.0,0.001);
+   axisPionEta->SetBins(-1.0,1.0,0.01);
 
    // output: 2D histogram
    AliRsnListOutput *outMonitorPionEta = new AliRsnListOutput("Pion_Eta", AliRsnListOutput::kHistoDefault);
@@ -380,7 +380,7 @@ void AddMonitorOutput_PionY(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *
 
    // PionY
    AliRsnValueDaughter *axisPionY = new AliRsnValueDaughter("pion_y", AliRsnValueDaughter::kY);
-   axisPionY->SetBins(-1.0,1.0,0.001);
+   axisPionY->SetBins(-1.0,1.0,0.01);
 
    // output: 2D histogram
    AliRsnListOutput *outMonitorPionY = new AliRsnListOutput("Pion_Y", AliRsnListOutput::kHistoDefault);
@@ -397,7 +397,7 @@ void AddMonitorOutput_PionMinPt(TObjArray *mon=0,TString opt="",AliRsnLoopDaught
 
    // PionMinPt
    AliRsnValueDaughter *axisPionMinPt = new AliRsnValueDaughter("pion_minpt", AliRsnValueDaughter::kPt);
-   axisPionMinPt->SetBins(0.0,1,0.001);
+   axisPionMinPt->SetBins(0.0,1,0.01);
 
    // output: 2D histogram
    AliRsnListOutput *outMonitorPionMinPt = new AliRsnListOutput("Pion_MinPt", AliRsnListOutput::kHistoDefault);
@@ -431,7 +431,7 @@ void AddMonitorOutput_PionTPC_PIDCut(TObjArray *mon=0,TString opt="",AliRsnLoopD
 
    // Pion PID Cut
    AliRsnValueDaughter *axisPionTPCPIDCut = new AliRsnValueDaughter("pionTPCPID", AliRsnValueDaughter::kTPCnsigmaPi);
-   axisPionTPCPIDCut->SetBins(0.0,5,0.01);
+   axisPionTPCPIDCut->SetBins(0.0,5,0.1);
 
    // output: 2D histogram
    AliRsnListOutput *outMonitorPionTPCPIDCut = new AliRsnListOutput("Pion_TPC_PID_Cut", AliRsnListOutput::kHistoDefault);
@@ -448,7 +448,7 @@ void AddMonitorOutput_PionTOF_PIDCut(TObjArray *mon=0,TString opt="",AliRsnLoopD
 
    // Pion PID Cut
    AliRsnValueDaughter *axisPionTOFPIDCut = new AliRsnValueDaughter("pionTOFPID", AliRsnValueDaughter::kTOFnsigmaPi);
-   axisPionTOFPIDCut->SetBins(0.0,5,0.01);
+   axisPionTOFPIDCut->SetBins(0.0,5,0.1);
 
    // output: 2D histogram
    AliRsnListOutput *outMonitorPionTOFPIDCut = new AliRsnListOutput("Pion_TOF_PID_Cut", AliRsnListOutput::kHistoDefault);
@@ -482,7 +482,7 @@ void AddMonitorOutput_KaonEta(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter
 
    // KaonEta
    AliRsnValueDaughter *axisKaonEta = new AliRsnValueDaughter("kaon_eta", AliRsnValueDaughter::kEta);
-   axisKaonEta->SetBins(-1.0,1.0,0.001);
+   axisKaonEta->SetBins(-1.0,1.0,0.01);
 
    // output: 2D histogram
    AliRsnListOutput *outMonitorKaonEta = new AliRsnListOutput("Kaon_Eta", AliRsnListOutput::kHistoDefault);
@@ -499,7 +499,7 @@ void AddMonitorOutput_KaonY(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *
 
    // KaonY
    AliRsnValueDaughter *axisKaonY = new AliRsnValueDaughter("kaon_y", AliRsnValueDaughter::kY);
-   axisKaonY->SetBins(-1.0,1.0,0.001);
+   axisKaonY->SetBins(-1.0,1.0,0.01);
 
    // output: 2D histogram
    AliRsnListOutput *outMonitorKaonY = new AliRsnListOutput("Kaon_Y", AliRsnListOutput::kHistoDefault);
@@ -516,7 +516,7 @@ void AddMonitorOutput_KaonMinPt(TObjArray *mon=0,TString opt="",AliRsnLoopDaught
 
    // KaonMinPt
    AliRsnValueDaughter *axisKaonMinPt = new AliRsnValueDaughter("kaon_minpt", AliRsnValueDaughter::kPt);
-   axisKaonMinPt->SetBins(0.0,1,0.001);
+   axisKaonMinPt->SetBins(0.0,1,0.01);
 
    // output: 2D histogram
    AliRsnListOutput *outMonitorKaonMinPt = new AliRsnListOutput("Kaon_MinPt", AliRsnListOutput::kHistoDefault);
@@ -550,7 +550,7 @@ void AddMonitorOutput_KaonTPC_PIDCut(TObjArray *mon=0,TString opt="",AliRsnLoopD
 
    // Kaon TPC PID Cut
    AliRsnValueDaughter *axisKaonTPCPIDCut = new AliRsnValueDaughter("kaonTPCPID", AliRsnValueDaughter::kTPCnsigmaK);
-   axisKaonTPCPIDCut->SetBins(0.0,5,0.01);
+   axisKaonTPCPIDCut->SetBins(0.0,5,0.1);
 
    // output: 2D histogram
    AliRsnListOutput *outMonitorKaonTPCPIDCut = new AliRsnListOutput("Kaon_TPC_PID_Cut", AliRsnListOutput::kHistoDefault);
@@ -567,7 +567,7 @@ void AddMonitorOutput_KaonTOF_PIDCut(TObjArray *mon=0,TString opt="",AliRsnLoopD
 
    // Kaon TOF PID Cut
    AliRsnValueDaughter *axisKaonTOFPIDCut = new AliRsnValueDaughter("kaonTOFPID", AliRsnValueDaughter::kTOFnsigmaK);
-   axisKaonTOFPIDCut->SetBins(0.0,5,0.01);
+   axisKaonTOFPIDCut->SetBins(0.0,5,0.1);
 
    // output: 2D histogram
    AliRsnListOutput *outMonitorKaonTOFPIDCut = new AliRsnListOutput("Kaon_TOF_PID_Cut", AliRsnListOutput::kHistoDefault);
index 05e7361e52f9baf5f1851e2f3fb7a90bc35bc71a..a90cb1f9cd9f891569545c3fb5f36c78f0ad28ee 100644 (file)
@@ -75,6 +75,7 @@ fMCEventplaneDist(0),
 fCorrelEventplaneMCDATA(0),
 //global
 fIsMonteCarlo(0),
+fEPselector("Q"),
 // event cut variables
 fCutMaxZVertex(10.),  
 // track kinematic cut variables
@@ -676,7 +677,7 @@ void AlidNdPtAnalysisPbPbAOD::UserExec(Option_t *option)
        
        dMCEventZv = mcHdr->GetVtxZ();
        dMCTrackZvPtEtaCent[0] = dMCEventZv;
-       dMCEventplaneAngle = MoveMCEventplane(genHijingHeader->ReactionPlaneAngle());
+       dMCEventplaneAngle = MoveEventplane(genHijingHeader->ReactionPlaneAngle());
        fEventStatistics->Fill("MC all events",1);
        fMCEventplaneDist->Fill(dMCEventplaneAngle);
   }
@@ -690,7 +691,7 @@ void AlidNdPtAnalysisPbPbAOD::UserExec(Option_t *option)
   // get event plane Angle from AODHeader, default is Q
   ep = const_cast<AliAODEvent*>(eventAOD)->GetEventplane();
   if(ep) {
-       dEventplaneAngle = ep->GetEventplane("V0",eventAOD);
+       dEventplaneAngle = MoveEventplane(ep->GetEventplane(GetEventplaneSelector().Data(),eventAOD));
   }
   
   //   cout << dEventplaneAngle << endl;
@@ -937,7 +938,7 @@ void AlidNdPtAnalysisPbPbAOD::UserExec(Option_t *option)
   
 }
 
-Double_t AlidNdPtAnalysisPbPbAOD::MoveMCEventplane(Double_t dMCEP)
+Double_t AlidNdPtAnalysisPbPbAOD::MoveEventplane(Double_t dMCEP)
 {
   Double_t retval = 0;
   retval = dMCEP;
@@ -1256,6 +1257,7 @@ void AlidNdPtAnalysisPbPbAOD::StoreCutSettingsToHistogram()
   fCutSettings->Fill("fCutMaxChi2TPCConstrainedGlobal", fCutMaxChi2TPCConstrainedGlobal);
   if(fCutLengthInTPCPtDependent) fCutSettings->Fill("fCutLengthInTPCPtDependent", 1);
   fCutSettings->Fill("fPrefactorLengthInTPCPtDependent", fPrefactorLengthInTPCPtDependent);
+  fCutSettings->Fill(Form("EP selector %s", fEPselector.Data()), 1);
 }
 
 Bool_t AlidNdPtAnalysisPbPbAOD::GetDCA(const AliAODTrack *track, AliAODEvent *evt, Double_t d0z0[2])
index 905847c4596ce0286d800c466dac7683620598e7..deb80a388054cfb049c48d5a59785e4105bb3190 100644 (file)
@@ -24,6 +24,7 @@ class iostream;
 #include "THnSparse.h"
 #include "THn.h"
 #include "TClonesArray.h"
+#include "TString.h"
 
 #include "TParticlePDG.h"
 #include "TDatabasePDG.h"
@@ -154,7 +155,7 @@ class AlidNdPtAnalysisPbPbAOD : public AliAnalysisTaskSE {
     AliGenPythiaEventHeader* GetPythiaEventHeader(AliAODMCHeader *header);
     
        Double_t RotatePhi(Double_t phiTrack, Double_t phiEP);
-       Double_t MoveMCEventplane(Double_t dMCEP);
+       Double_t MoveEventplane(Double_t dMCEP);
     
     Bool_t SetRelativeCuts(AliAODEvent *event);
     
@@ -165,6 +166,9 @@ class AlidNdPtAnalysisPbPbAOD : public AliAnalysisTaskSE {
     Bool_t IsPythiaParticle(const AliAODMCParticle *part, AliGenPythiaEventHeader* pythiaGenHeader);
     
     static Double_t* GetArrayClone(Int_t n, Double_t* source);
+       
+       void SetEventplaneSelector(char *c) { fEPselector = c; }
+       TString GetEventplaneSelector() { return fEPselector; }
     
   private :
     
@@ -211,6 +215,8 @@ class AlidNdPtAnalysisPbPbAOD : public AliAnalysisTaskSE {
     TH2F               *fCorrelEventplaneMCDATA; // correlation between data and MC eventplane
     // global variables
     Bool_t fIsMonteCarlo;
+       
+       TString fEPselector;
     
     // event cut variables
     Double_t fCutMaxZVertex;
@@ -269,7 +275,7 @@ class AlidNdPtAnalysisPbPbAOD : public AliAnalysisTaskSE {
     AlidNdPtAnalysisPbPbAOD(const AlidNdPtAnalysisPbPbAOD&); // not implemented
     AlidNdPtAnalysisPbPbAOD& operator=(const AlidNdPtAnalysisPbPbAOD&); // not implemented  
     
-    ClassDef(AlidNdPtAnalysisPbPbAOD,7); // has to be at least 1, otherwise not streamable...
+    ClassDef(AlidNdPtAnalysisPbPbAOD,8); // has to be at least 1, otherwise not streamable...
 };
 
 #endif
index 66dd82ad0a5e6c4b77b86a629dfbba00c4446958..3ba6252a875e63d286170a630e24b9a71dab76b3 100644 (file)
@@ -31,6 +31,8 @@ AlidNdPtAnalysisPbPbAOD *AddTask_dNdPt_PbPbAOD( UInt_t uTriggerMask = AliVEvent:
   
   task->SelectCollisionCandidates(uTriggerMask);
   
+  task->SetEventplaneSelector("Q");
+  
   task->SetCutMinNCrossedRowsTPC(dNCrossedRowsTPC);
   task->SetCutMinNClustersTPC(dNClustersTPC);
   task->SetCutLengthInTPCPtDependent(bDoCutTPCLength);
index c6200203f9b22c8cb590cb3c2fcc8f3f1c77cc97..ea35d0e2f21b2535405beec690c80736c5a7d923 100644 (file)
@@ -310,7 +310,7 @@ void AliAnalysisNucleiMass::UserCreateOutputObjects()
       }
     }
 
-    const Int_t BinM2pT[nPart]={1,1,1,250,500,500,1,400,1};//1,1,600,250,500,500,1000,400,600
+    const Int_t BinM2pT[nPart]={1,1,1,1000,1000,500,1,400,1};//1,1,600,250,500,500,1000,400,600//1,1,1,250,500,500,1,400,1
     const Double_t RangeM2min[nPart]={0.0,0.0,-0.1,0.0,0.0,0.0,0.0,0.0,0.0};
     const Double_t RangeM2max[nPart]={1.0,1.0,0.5,2.0,4.0,6.0,12.0,4.0,6.0};
 
index b761a34b52472cc0819381498b4be3d3dbc26fda..dfded0901bd441e8f07125595a27d96fb4e20426 100644 (file)
@@ -209,7 +209,7 @@ void AliAnalysisTaskSpectraAllChAOD::UserExec(Option_t *)
          
          //flag to select particle in the same ETA acceptance of the tracks (to be used for the comparison with AllCh)
          Double_t etaselected=-1.;
-         if(partMC->Eta()<fTrackCuts->GetEtaMin() || partMC->Eta()>fTrackCuts->GetEtaMax())etaselected=1.;
+         if(partMC->Eta()>=fTrackCuts->GetEtaMin() && partMC->Eta()<=fTrackCuts->GetEtaMax())etaselected=1.;
          
          //pt     cent    IDgen        isph        y
          Double_t varSt[6];
index f577c23f36755f51178ea392e1562d844c191585..59f0fb5576f43234222f8071374379a855fccfd4 100644 (file)
@@ -491,7 +491,7 @@ Bool_t   OpenFile(TString dirname,TString outputname, Bool_t mcflag, Bool_t mcas
                if(!managerdata||!ecutsdata||!tcutsdata)
                        return false;
                if(managerdata->GetGenMulvsRawMulHistogram("hHistGenMulvsRawMul")->GetEntries()!=ecutsdata->GetHistoCuts()->GetBinContent(3))
-                       cout<<"Please check DATA file possible problem with merging"<<" "<<anagerdata->GetGenMulvsRawMulHistogram("hHistGenMulvsRawMul")->GetEntries()<<" "<<ecutsdata->GetHistoCuts()->GetBinContent(3)<<endl;
+                       cout<<"Please check DATA file possible problem with merging"<<" "<<managerdata->GetGenMulvsRawMulHistogram("hHistGenMulvsRawMul")->GetEntries()<<" "<<ecutsdata->GetHistoCuts()->GetBinContent(3)<<endl;
 
        }
        return true;
index 0a4c66c748c287a88628bf5505d3491773b1497b..268147cde4f24b559f918887b5f487222d9a4ce5 100644 (file)
@@ -30,8 +30,6 @@
 //                                                       //
 ///////////////////////////////////////////////////////////
 
-using std::cout;
-using std::endl;
 
 ClassImp(AliAnalysisTaskAntiHe4)
 
@@ -78,7 +76,9 @@ AliAnalysisTaskAntiHe4::AliAnalysisTaskAntiHe4()
   fHistHelium4PtAsoSec(0),
   fHistAntiHelium4PtAso(0),
   fTree(0), 
-  fOutputContainer(0)
+  fOutputContainer(0),
+  fEvnt(0),
+  fItrk(0)
 {
   // default Constructor
   
@@ -129,7 +129,9 @@ AliAnalysisTaskAntiHe4::AliAnalysisTaskAntiHe4(const char *name)
     fHistHelium4PtAsoSec(0),
     fHistAntiHelium4PtAso(0),
     fTree(0), 
-    fOutputContainer(0)
+    fOutputContainer(0),
+    fEvnt(0),
+    fItrk(0)
 {
   // Constructor
 
@@ -152,7 +154,7 @@ AliAnalysisTaskAntiHe4::AliAnalysisTaskAntiHe4(const char *name)
   fESDtrackCuts->SetRequireTPCRefit(kTRUE);
   //fESDtrackCuts->SetRequireITSRefit(kTRUE);
   fESDtrackCuts->SetMinNClustersITS(2);
-  fESDtrackCuts->SetEtaRange(-0.8,0.8);
+  fESDtrackCuts->SetEtaRange(-1.0,1.0);
   //
   // cuts for final plots
   //
@@ -372,38 +374,52 @@ void AliAnalysisTaskAntiHe4::UserCreateOutputObjects()
 
 
   //------------ Tree and branch definitions ----------------//  
-  fTree = new TTree("tree", " alpha tree");   
-  
+  fTree = new TTree("tree", "alpha tree");     
   //------------ Event variables ------------//
-  fTree->Branch("Name",Name,"Name/C");
-  fTree->Branch("Evnt",&evnt, "evnt/I"); 
-  fTree->Branch("itrk", &itrk, "itrk/I"); 
-
+  fTree->Branch("fName",fName,"fName/C");
+  fTree->Branch("fEvnt",&fEvnt, "fEvnt/I"); 
+  fTree->Branch("fFileName",fFileName,"fFileName/C");
+  fTree->Branch("fEventNumber",fEventNumber,"fEventNumber/I");
+  fTree->Branch("fItrk",&fItrk, "fItrk/I"); 
   //-------------------------------------------//  
   //----------- Track variables --------------//  
-
-  fTree->Branch("TrkPtot",TrkPtot,"TrkPtot[itrk]/F"); 
-  fTree->Branch("TPCPtot",TPCPtot,"TPCPtot[itrk]/F"); 
-  fTree->Branch("DeDx",DeDx,"DeDx[itrk]/F");  
-  fTree->Branch("Sign",Sign,"Sign[itrk]/F");  
-  fTree->Branch("DCAXY",DCAXY,"DCAXY[itrk]/F");  
-  fTree->Branch("DCAZ",DCAZ,"DCAZ[itrk]/F");
-  fTree->Branch("ITSnCluster",ITSnCluster,"ITSnCluster[itrk]/F"); 
-  fTree->Branch("TPCNsignal",TPCNsignal,"TPCNsignal[itrk]/F");  
-  fTree->Branch("Mass",Mass,"Mass[itrk]/F");
-  //
-  fTree->Branch("ITSRefit",ITSRefit,"ITSRefit[itrk]/F"); 
-  fTree->Branch("TOFtime",TOFtime,"TOFtime[itrk]/F"); 
-  fTree->Branch("TOFRefit",TOFRefit,"TOFRefit[itrk]/F"); 
-  fTree->Branch("TOFout",TOFout,"TOFout[itrk]/F"); 
-  //
-  fTree->Branch("ITSsignal",ITSsignal,"ITSsignal[itrk]/F");
-  fTree->Branch("SharedClusters",SharedClusters,"SharedClusters[itrk]/F");
-  fTree->Branch("fFileName",fFileName,"fFileName/C");  
-  fTree->Branch("fEventNumber",fEventNumber,"fEventNumber/I");
+  fTree->Branch("fEta",fEta,"fEta[fItrk]/D");
+  fTree->Branch("fKinkIndex",fKinkIndex,"fKinkIndex[fItrk]/I");
+  fTree->Branch("fCentrality",fCentrality,"fCentrality[fItrk]/F");
+  //
+  fTree->Branch("fTPCnCluster",fTPCnCluster,"fTPCnCluster[fItrk]/s");
+  fTree->Branch("fTPCNsignal",fTPCNsignal,"fTPCNsignal[fItrk]/s");
+  fTree->Branch("fChi2PerClusterTPC",fChi2PerClusterTPC,"fChi2PerClusterTPC[fItrk]/D");
+  fTree->Branch("fTPCRefit",fTPCRefit,"fTPCRefit[fItrk]/O");
+  fTree->Branch("fTPCsignal0",fTPCsignal0,"fTPCsignal0[fItrk]/D");
+  fTree->Branch("fTPCsignal1",fTPCsignal1,"fTPCsignal1[fItrk]/D");
+  fTree->Branch("fTPCsignal2",fTPCsignal2,"fTPCsignal2[fItrk]/D");
+  fTree->Branch("fTPCsignal3",fTPCsignal3,"fTPCsignal3[fItrk]/D");
+  fTree->Branch("fTPCSharedClusters",fTPCSharedClusters,"fTPCSharedClusters[fItrk]/I");
+  fTree->Branch("fTPCNclsIter1",fTPCNclsIter1,"fTPCNclsIter1[fItrk]/s");
+  //
+  fTree->Branch("fITSsignal",fITSsignal,"fITSsignal[fItrk]/D");
+  fTree->Branch("fITSnCluster",fITSnCluster,"fITSnCluster[fItrk]/I");
+  fTree->Branch("fChi2PerClusterITS",fChi2PerClusterITS,"fChi2PerClusterITS[fItrk]/D");
+  fTree->Branch("fITSRefit",fITSRefit,"fITSRefit[fItrk]/O");
   //
-  fTree->Branch("fAssociated",fAssociated,"fAssociated[itrk]/O");
-  fTree->Branch("fTrackPt",fTrackPt,"fTrackPt[itrk]/F");
+  fTree->Branch("fTOFtime",fTOFtime,"fTOFtime[fItrk]/O");
+  fTree->Branch("fTOFRefit",fTOFRefit,"fTOFRefit[fItrk]/O");
+  fTree->Branch("fTOFout",fTOFout,"fTOFout[fItrk]/O");
+  fTree->Branch("fTOFsignalDz",fTOFsignalDz,"fTOFsignalDz[fItrk]/D");
+  fTree->Branch("fTOFsignalDx",fTOFsignalDx,"fTOFsignalDx[fItrk]/D");
+  //
+  fTree->Branch("fDCAXY",fDCAXY,"fDCAXY[fItrk]/F");
+  fTree->Branch("fDCAZ",fDCAZ,"fDCAZ[fItrk]/F");
+  //
+  fTree->Branch("fTrkPtot",fTrkPtot,"fTrkPtot[fItrk]/D"); 
+  fTree->Branch("fTPCPtot",fTPCPtot,"fTPCPtot[fItrk]/D"); 
+  fTree->Branch("fTrackPt",fTrackPt,"fTrackPt[fItrk]/D");
+  fTree->Branch("fDeDx",fDeDx,"fDeDx[fItrk]/D");  
+  fTree->Branch("fSign",fSign,"fSign[fItrk]/D");  
+  fTree->Branch("fMass",fMass,"Mass[fItrk]/F");
+  //
+  fTree->Branch("fAssociated",fAssociated,"fAssociated[fItrk]/O");
 
 }
 
@@ -478,7 +494,7 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
   //centrality selection in PbPb 
   //
   Int_t centralityClass10 = -1;
-  Int_t centralityPercentile = -1;
+  Float_t centralityPercentile = -1;
   //
   if (fESD->GetEventSpecie() == 4) { //species == 4 == PbPb
     // PbPb
@@ -490,8 +506,6 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
     }
   }
   //
-  if (!fTriggerFired[0] && !fTriggerFired[1] && !fTriggerFired[2]) return; // select only events which pass kMB, kCentral, kSemiCentral
-  //
   fHistCentralityClass10->Fill(centralityClass10);
   fHistCentralityPercentile->Fill(centralityPercentile);
   //
@@ -509,9 +523,9 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
   }
   //
   Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z for th // for Anti-Alpha
-  evnt =  fESD->GetEventNumberInFile();
-  sscanf(fInputHandler->GetTree()->GetCurrentFile()->GetName(),"%s", Name);
-  itrk = 0;
+  fEvnt =  fESD->GetEventNumberInFile();
+  sscanf(fInputHandler->GetTree()->GetCurrentFile()->GetName(),"%s", fName);
+  fItrk = 0;
   //
   Int_t runNumber = 0;
   runNumber = fESD->GetRunNumber();
@@ -519,7 +533,45 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
   Bool_t fillTree = kFALSE;
   // Track loop to fill the spectram
   for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
-    //
+
+    fEventNumber[fItrk] = -1;
+
+    fEta[fItrk] = -2;
+    fCentrality[fItrk] = -1;
+    fTPCNsignal[fItrk] = -1;
+    fTPCnCluster[fItrk] = -1;
+    fChi2PerClusterTPC[fItrk] = -1;
+    fTPCRefit[fItrk] = kFALSE;
+    fTPCsignal0[fItrk] = -1;
+    fTPCsignal1[fItrk] = -1;
+    fTPCsignal2[fItrk] = -1;
+    fTPCsignal3[fItrk] = -1;
+    fTPCSharedClusters[fItrk] = -1;
+    fTPCNclsIter1[fItrk] = -1;
+
+    fITSsignal[fItrk] = -1;
+    fITSnCluster[fItrk] = -1;
+    fChi2PerClusterITS[fItrk] = -1;
+    fITSRefit[fItrk] = kFALSE;
+
+    fTOFRefit[fItrk] = kFALSE;
+    fTOFtime[fItrk] = kFALSE;
+    fTOFout[fItrk] = kFALSE;
+    fTOFsignalDz[fItrk] = -1;
+    fTOFsignalDx[fItrk] = -1;
+
+    fDCAZ[fItrk] = -1;
+    fDCAXY[fItrk] = -1;
+
+    fTrkPtot[fItrk] = -1;
+    fTPCPtot[fItrk] = -1;
+    fTrackPt[fItrk] = -1;
+    fDeDx[fItrk] = -1;
+    fSign[fItrk] = -2;
+    fMass[fItrk] = -1;
+    
+    fAssociated[fItrk] = kFALSE;
+
     AliESDtrack* track = dynamic_cast<AliESDtrack*>(fESD->GetTrack(iTracks));
     if (!fESDtrackCuts->AcceptTrack(track)) continue;
     //
@@ -596,7 +648,7 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
                                                                5.04114e-11,
                                                                2.13096,
                                                                2.38541);
-    if (eta < 0.8 && tpcSignal > 120 && tpcSignal > cut && tpcSignal < 1000 && track->GetTPCsignalN() > 60 && dcaZ < 15 && dcaXY < 15 && ptot > 1.0 && ptot < 20) {
+    if (eta < 1.0 && tpcSignal > 120 && tpcSignal > cut && tpcSignal < 1000 && track->GetTPCsignalN() > 60 && dcaZ < 15 && dcaXY < 15 && ptot > 1.0 && ptot < 20) {
       //
     cout << "AntiAlphaEvent" << " " 
           << AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetCurrentFile()->GetName() << " " 
@@ -607,38 +659,54 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
       //
       fillTree = kTRUE;
       //
-      TrkPtot[itrk] = track->P();
-      TPCPtot[itrk] = ptot;
-      DeDx[itrk] = tpcSignal;
-      DCAZ[itrk] = dcaZ;
-      TPCNsignal[itrk] = track->GetTPCsignalN();
-      ITSnCluster[itrk] = track->GetNcls(0);
-      Sign[itrk] = sign;
-      DCAXY[itrk] = dcaXY;
-      Mass[itrk] = mass;
-      //
-      ITSsignal[itrk] = track->GetITSsignal();
-      SharedClusters[itrk] = shared.CountBits();
+
       sscanf(fInputHandler->GetTree()->GetCurrentFile()->GetName(),"%s", fFileName);
-      //fFileName[itrk] = fInputHandler->GetTree()->GetCurrentFile()->GetName();
-      fEventNumber[itrk] = fESD->GetEventNumberInFile();
-      //
-      if(status&AliESDtrack::kITSrefit) 
-       ITSRefit[itrk] = 1;     
-      else ITSRefit[itrk] = 0;
-      //
-      if (time < 99998) {
-       TOFRefit[itrk] = 1;
-      } else {
-       TOFRefit[itrk] = 0;
-      }
-      //itrk++;
-      //
+      fEventNumber[fItrk] = fESD->GetEventNumberInFile();
+
+      fEta[fItrk] = eta;
+      fKinkIndex[fItrk] = track->GetKinkIndex(0);
+      fCentrality[fItrk] = centralityPercentile;
+
+      fTPCNsignal[fItrk] = track->GetTPCsignalN();
+      fTPCnCluster[fItrk] = track->GetTPCNcls();
+      fChi2PerClusterTPC[fItrk] = track->GetTPCchi2()/fTPCnCluster[fItrk];
+      if(status&AliESDtrack::kTPCrefit)
+        fTPCRefit[fItrk] = kTRUE;
+      else fTPCRefit[fItrk] = kFALSE;
+      fTPCsignal0[fItrk] = signal[0];
+      fTPCsignal1[fItrk] = signal[1];
+      fTPCsignal2[fItrk] = signal[2];
+      fTPCsignal3[fItrk] = signal[3];
+      fTPCSharedClusters[fItrk] = shared.CountBits();
+      fTPCNclsIter1[fItrk] = track->GetTPCNclsIter1();
+
+      fITSsignal[fItrk] = track->GetITSsignal();
+      fITSnCluster[fItrk] = track->GetNcls(0);
+      fChi2PerClusterITS[fItrk] = track->GetITSchi2()/fITSnCluster[fItrk];
+      if(status&AliESDtrack::kITSrefit)
+        fITSRefit[fItrk] = kTRUE;
+      else fITSRefit[fItrk] = kFALSE;
+
+
+      if(status&AliESDtrack::kITSrefit)
+        fITSRefit[fItrk] = kTRUE;
+      else fITSRefit[fItrk] = kFALSE;
       hasTOFout = status&AliESDtrack::kTOFout;
       hasTOFtime  = status&AliESDtrack::kTIME;
-      //
-      TOFtime[itrk] = hasTOFtime;
-      TOFout[itrk]  = hasTOFout;
+      fTOFtime[fItrk] = hasTOFtime;
+      fTOFout[fItrk]  = hasTOFout;
+      fTOFsignalDz[fItrk] = track->GetTOFsignalDz();
+      fTOFsignalDx[fItrk] = track->GetTOFsignalDx();
+
+      fDCAZ[fItrk] = dcaXY;
+      fDCAXY[fItrk] = dcaZ;
+
+      fTrkPtot[fItrk] = track->P();
+      fTPCPtot[fItrk] = ptot;
+      fTrackPt[fItrk] = track->Pt();
+      fDeDx[fItrk] = tpcSignal;
+      fSign[fItrk] = sign;
+      fMass[fItrk] = mass;
 
       if (fMCtrue){ //associated
 
@@ -667,10 +735,9 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
 
       }
       
-      fAssociated[itrk] = isAssociated;
-      fTrackPt[itrk] = track->Pt();
-      
-      itrk++;
+      fAssociated[fItrk] = isAssociated;
+
+      fItrk++;
     }
     //
     // do pid fill histogram for raw ratios
@@ -700,7 +767,7 @@ void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
     if(sign<0) {
       fHistDeDx->Fill(ptot, track->GetTPCsignal());
       if (track->GetTPCsignalN() > 100 &&
-          TMath::Abs(track->Eta()) < 0.8 &&
+          TMath::Abs(track->Eta()) < 1.0 &&
           signal[3]/signal[1] > 0.6 &&
           signal[0]/signal[1] > 0.5 &&
           signal[3]/signal[1] < 1.2 &&
@@ -958,8 +1025,8 @@ void AliAnalysisTaskAntiHe4::MCGenerated(AliStack* stack)
              fHistHelium4PtGen->Fill(pTGen);
              if(isPrimary) fHistHelium4PtGenPrim->Fill(pTGen);
              if(isSecondary) fHistHelium4PtGenSec->Fill(pTGen);
-             if(eta < 0.8)fHistHelium4PtGenEta->Fill(pTGen);
-             if(isPrimary && eta < 0.8)fHistHelium4PtGenPrimEta->Fill(pTGen);
+             if(TMath::Abs(eta) < 1.0)fHistHelium4PtGenEta->Fill(pTGen);
+             if(isPrimary && TMath::Abs(eta) < 1.0)fHistHelium4PtGenPrimEta->Fill(pTGen);
            }
 
          //Anti-Alpha
@@ -968,7 +1035,7 @@ void AliAnalysisTaskAntiHe4::MCGenerated(AliStack* stack)
              fHistAntiHelium4PtGen->Fill(pTGen);
              if(isPrimary) fHistAntiHelium4PtGenPrim->Fill(pTGen);
              if(isSecondary) fHistAntiHelium4PtGenSec->Fill(pTGen);
-             if(eta < 0.8)fHistAntiHelium4PtGenEta->Fill(pTGen);
+             if(TMath::Abs(eta) < 1.0)fHistAntiHelium4PtGenEta->Fill(pTGen);
            }
 
              
index 163acc90f08025129b51750b3f8500a041a26051..babee01a5dbac999104cb52d78d5a93b334d58f8 100644 (file)
@@ -94,29 +94,52 @@ class AliAnalysisTaskAntiHe4 : public AliAnalysisTaskSE {
   //
   // tree variables
   //
-  Char_t Name[1000];  
-  Int_t  evnt, itrk;
-  //
-  Float_t TrkPtot[1000];
-  Float_t TPCPtot[1000];
-  Float_t DeDx[1000];
-  Float_t DCAZ[1000];
-  Float_t TPCNsignal[1000];
-  Float_t ITSnCluster[1000];
-  Float_t Sign[1000];
-  Float_t DCAXY[1000];
-  Float_t Mass[1000];
-  Float_t ITSRefit[1000];
-  Float_t TOFRefit[1000];
-  Float_t TOFtime[1000];
-  Float_t TOFout[1000];
-  Float_t ITSsignal[1000];
-  Float_t SharedClusters[1000];
-  Char_t  fFileName[1000]; 
+  Char_t fName[1000];  
+  Int_t  fEvnt;
+  Char_t  fFileName[1000];
   Int_t   fEventNumber[1000];
-  Bool_t  fAssociated[1000];
-  Float_t fTrackPt[1000];
+  // 
+  Int_t  fItrk;
+  //
+  Double_t fEta[1000];
+  Int_t    fKinkIndex[1000];
+  Float_t    fCentrality[1000];
 
+  //
+  UShort_t   fTPCNsignal[1000];
+  UShort_t   fTPCnCluster[1000];
+  Double_t   fChi2PerClusterTPC[1000];
+  Bool_t  fTPCRefit[1000];
+  Double_t fTPCsignal0[1000];
+  Double_t fTPCsignal1[1000];
+  Double_t fTPCsignal2[1000];
+  Double_t fTPCsignal3[1000];
+  Int_t   fTPCSharedClusters[1000];
+  UShort_t   fTPCNclsIter1[1000];
+  //
+  Double_t fITSsignal[1000];
+  Int_t   fITSnCluster[1000];
+  Double_t   fChi2PerClusterITS[1000];
+  Bool_t  fITSRefit[1000];
+  //
+  Bool_t  fTOFRefit[1000];
+  Bool_t  fTOFtime[1000];
+  Bool_t  fTOFout[1000];
+  Double_t fTOFsignalDz[1000];
+  Double_t fTOFsignalDx[1000];
+  //
+  Float_t fDCAZ[1000];
+  Float_t fDCAXY[1000];
+  //
+  Double_t fTrkPtot[1000];
+  Double_t fTPCPtot[1000];
+  Double_t fTrackPt[1000];
+  Double_t fDeDx[1000];
+  Double_t fSign[1000];
+  Float_t fMass[1000];
+  //
+  Bool_t  fAssociated[1000];
   //
   //
   AliAnalysisTaskAntiHe4(const AliAnalysisTaskAntiHe4&); // not implemented
index 6148819a1ccf34ac71f8a6da132f84eda33ba49c..c7632d9389d111ac25ba060aa2e939efe7529997 100644 (file)
@@ -90,24 +90,24 @@ AliAnalysisTaskV0ForRAA *AddTaskV0ForRAA(Bool_t anaPP=kFALSE, Bool_t wSDD=kFALSE
    task->SetDoEtaOfMCDaughtersCut(kFALSE,0.8);
    
    //TPC cuts
-   task->SetCutMoreNclsThanRows(kTRUE);
-   task->SetCutMoreNclsThanFindable(kTRUE);
+   // task->SetCutMoreNclsThanRows(kTRUE);
+   // task->SetCutMoreNclsThanFindable(kTRUE);
    task->SetLowPtTPCCutAliESDTrackCut(-1.0);
-   task->SetRatioFoundOverFindable(0.5);
+   //  task->SetRatioFoundOverFindable(0.5);
 
    //V0 specific cuts
-   task->SetCosOfPointingAngleK(0.99,1000.0);
-   task->SetCosOfPointingAngleL(0.998,1000.0);
+   //task->SetCosOfPointingAngleK(0.99,1000.0);
+   //task->SetCosOfPointingAngleL(0.998,1000.0);
 
 
-   task->SetArmenterosCutQt(-1.0,6.0,kTRUE,kFALSE);
+   //task->SetArmenterosCutQt(-1.0,6.0,kTRUE,kFALSE);
    
-   task->SetDCAV0ToVertexK0(0.4);
-   task->SetDCAV0ToVertexL(1.2);
+   //task->SetDCAV0ToVertexK0(0.4);
+   //task->SetDCAV0ToVertexL(1.2);
 
-   task->SetDCADaughtersK0(0.23);
-   task->SetDCADaughtersL(0.35);
-   task->SetDCADaughtersAL(0.35);
+   //task->SetDCADaughtersK0(0.23);
+   //task->SetDCADaughtersL(0.35);
+   //task->SetDCADaughtersAL(0.35);
    
    task->SetDecayRadiusXYMinMax(radCut,1000.0);
 
@@ -115,9 +115,10 @@ AliAnalysisTaskV0ForRAA *AddTaskV0ForRAA(Bool_t anaPP=kFALSE, Bool_t wSDD=kFALSE
    //--- centrality ---//
    task->SetUseCentrality(centDet);        // 0=off, 1=VZERO, 2=SPD
    task->SetUseCentralityBin(cent);        // bin to be used 0,5,10,20,30,40,50,60,70,80,90,(100=SPDonly)
-   task->SetUseCentralityRange(centRange); // add centrality bin for increasing original bin range. For cent 60-80%: cent = 60 and centRange = 10
+   task->SetUseCentralityRange(centRange); // Add centrality bin for increasing original bin range. 
+                                           // For cent 60-80%: cent = 60 and centRange = 10
    
-   task->SelectCollisionCandidates(AliVEvent::kMB);// | AliVEvent::kCentral | AliVEvent::kSemiCentral );
+   task->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral );
    
    mgr->AddTask(task);
  
index 7067d2f991311c74578f08cc6551f5105ccce91a..5667e9deaaffdfe3ce5114d3873fdb02c7a65c19 100644 (file)
@@ -12,6 +12,7 @@
 #include "TTree.h"
 #include "TDirectory.h"
 #include "TEventList.h"
+#include "TCut.h"
 
 using std::endl;
 using std::left;
@@ -73,8 +74,10 @@ fTag(tag)
 
 {
   // Constructor
-  fPartName = TDatabasePDG::Instance()->GetParticle(fPdgCode)->GetName();
   AliPDG::AddParticlesToPdgDataBase(); // Make sure that ALICE-defined particles were added to the PDG DB
+  TParticlePDG * part = TDatabasePDG::Instance()->GetParticle(fPdgCode);
+  if(!part) AliError(Form("No particle with PDG code %d in the database", fPdgCode));
+  else fPartName = part->GetName();
 }
 
 AliParticleYield::AliParticleYield(Int_t pdg, Int_t system, Float_t sqrts, Float_t value, Float_t stat, Float_t syst, Float_t normPos, Float_t normNeg, Float_t ymin, Float_t ymax, Int_t status, Int_t type, TString centr, Int_t isSum, TString tag):
@@ -99,8 +102,10 @@ fTag(tag)
 
 {
   // Constructor
-  fPartName = TDatabasePDG::Instance()->GetParticle(fPdgCode)->GetName();
   AliPDG::AddParticlesToPdgDataBase(); // Make sure that ALICE-defined particles were added to the PDG DB
+  TParticlePDG * part = TDatabasePDG::Instance()->GetParticle(fPdgCode);
+  if(!part) AliError(Form("No particle with PDG code %d in the database", fPdgCode));
+  else fPartName = part->GetName();
 }
 
 
@@ -130,9 +135,8 @@ AliParticleYield::~AliParticleYield() {
 
 }
 
-TTree * AliParticleYield::ReadFromASCIIFileAsTree(const char * fileName, const char * separators){
-  // Read the table from an ASCII File and returns a tree of particles. See ReadFromASCIIFile for detailed info on the format
-  TClonesArray * arr = ReadFromASCIIFile(fileName, separators);
+TTree * AliParticleYield::GetTreeFromArray(TClonesArray * arr) {
+  // Returns a tree from an array of Tparticles
   AliParticleYield * part = 0;
   TTree * tree = new TTree ("treePart", "Particle Yields and Ratios");
   tree->Branch("particles", &part);
@@ -140,13 +144,23 @@ TTree * AliParticleYield::ReadFromASCIIFileAsTree(const char * fileName, const c
   while ((part = (AliParticleYield*) iterPart.Next())){
     tree->Fill();
   }
-  
+  if(part) delete part;
+  return tree;
+
+
+
+}
+
+
+TTree * AliParticleYield::ReadFromASCIIFileAsTree(const char * fileName, const char * separators){
+  // Read the table from an ASCII File and returns a tree of particles. See ReadFromASCIIFile for detailed info on the format
+  TClonesArray * arr = ReadFromASCIIFile(fileName, separators);
+  TTree * tree = GetTreeFromArray(arr);
   delete arr;
-  delete part;
   return tree;
 }
 
-TClonesArray * AliParticleYield::GetEntriesMatchingSelection(TTree * tree, TString selection) {
+TClonesArray * AliParticleYield::GetEntriesMatchingSelection(TTree * tree, TCut selection) {
   // Returns an array of particles from a tree created with ReadFromASCIIFileAsTree matching the selection. You can use the normal tree sintax for the selection, e.g. "fCentr == \"V0M0010\" && fStatus == 0".
 
   TClonesArray * arr = new TClonesArray("AliParticleYield");
@@ -192,7 +206,7 @@ TClonesArray * AliParticleYield::ReadFromASCIIFile(const char * fileName, const
   Int_t ipart = 0;
   std::cout << "Reading " << fileName << std::endl;
   
-  while (line.ReadLine(filestream) ) {
+  while (line.ReadLine(filestream) ) {    
     // Strip trailing and leading whitespaces
     line = line.Strip(TString::kLeading,  ' ');
     line = line.Strip(TString::kTrailing, ' ');
@@ -307,10 +321,11 @@ const char * AliParticleYield::GetLatexName(Int_t pdg) const {
   if(!pdg && fMeasurementType & kTypeParticleRatio) {
     // If it's a ratio, we try to build the ratio name. To avoid an infinite loop we have to call GetLatexname with a non-zero argument.
     static TString name;
-    name ="";
+    name ="#frac{";
     name += GetLatexName(fPdgCode);
-    name += " / ";
+    name += "}{";
     name += GetLatexName(fPdgCode2);
+    name += "}";
     return name.Data();
   }
 
@@ -320,56 +335,83 @@ const char * AliParticleYield::GetLatexName(Int_t pdg) const {
   case 211:
     if (fIsSum) return "(#pi^{+} + #pi^{-})";
     return "#pi^{+}";
+    break;
   case -211:
     return "#pi^{-}";
+    break;
   case 321:
     if (fIsSum) return "(K^{+} + K^{-})";
     return "K^{+}";
+    break;
   case -321:
     return "K^{-}";
+    break;
   case 2212:
     if (fIsSum) return "(p + #bar{p})";
     return "p";
+    break;
   case -2212:
     return "#bar^{p}";
+    break;
   case 3122:
-    if (fIsSum) return "(#Omega^{-} + #bar{#Omega}^{+})";
-    return "#Omega^{-}";
+    if (fIsSum) return "(#Lambda + #bar{#Lambda})";
+    return "#Lambda";
+    break;
   case -3122:
-    return "#bar{#Omega}^{+}";
+    return "#bar{#Lamnba}";
+    break;
   case 3312:
     if (fIsSum) return "(#Xi^{-} + #bar{#Xi}^{+})";
     return "#Xi^{-}";
+    break;
   case -3312:
     return "#bar{#Xi}^{+}";
+    break;
   case 3334:
     if (fIsSum) return "(#Omega^{-} + #bar{#Omega}^{+})";
     return "#Omega^{-}";
+    break;
   case -3334:
     return "#bar{#Omega}^{+}";
+    break;
   case 310:
     return "K^{0}_{S}";
+    break;
   case 333:
     return "#phi";
+    break;
   case 313:
-    return "K^{*}";
+    if(fIsSum) return "(K* + #bar{K*})";
+    return "K*";
+    break;
+  case -313:
+    return "#bar{K*}";
+    break;
   case 1000010020:
     if(fIsSum) return "(d + #bar{d})";
     return "d";// Deuteron
+    break;
   case -1000010020:
     return "#bar{d}";// Deuteron
+    break;
   case 1000020030:
     if(fIsSum) return "(^{3}He + #bar{^{3}He})";
     return "^{3}He";
+    break;
   case -1000020030:
     return "#bar{^{3}He}";
+    break;
   case 1010010030:
-    if(fIsSum) return "^{3}_{#Lambda}H + #bar{^{3}_{#Lambda}H}";
-    return "^{3}_{#Lambda}H";
+    if(fIsSum) return "{}^{3}_{#Lambda}H + {}^{3}_{#Lambda}#bar{H}";
+    return "{}^{3}_{#Lambda}H";
+    break;
   case -1010010030:
-    return "#bar{^{3}_{#Lambda}H}";    
+    return "{}^{3}_{#Lambda}#bar{H}";    
+    break;
+  default:
+    AliWarning("Latex Name not know for this particle");
   }
-  AliWarning("Latex Name not know for this particle");
+
   return fPartName.Data();
 
 }
@@ -573,28 +615,58 @@ Bool_t AliParticleYield::CheckTypeConsistency() const {
   } else if (!(fMeasurementType & kTypeOnlyTotError) && (!GetStatError() || !GetSystError())) {
     AliError("Stat or syst errors are null");
   } 
+  if((fMeasurementType & kTypeLinearInterpolation) && (fMeasurementType & kTypeAverageAndRefit) && (fMeasurementType & kTypeExtrPionRatio)) {
+    AliError("Only one out of the \"Liner interpolation\",  \"Average and refit\", \"Extrapolated with constant ratio to pions\" bits can be set"); 
+  }
 
   return isOK;
 }
 
-void AliParticleYield::Print (Option_t *) const {
+void AliParticleYield::Print (Option_t *opt) const {
   // Print
-  Printf("-------------------------------");
-  CheckTypeConsistency();
-  Printf("%s [%s] (%d) %s %s", fPartName.Data(), GetLatexName(), fPdgCode, fIsSum ? "particle + antiparticle" : "", fTag.Length() ? Form("[%s]", fTag.Data()) : "" );
-  Printf("Status: %s, %s", kStatusString[fStatus], fMeasurementType & kTypeLinearInterpolation ? "Interpolated" : "Measured");
-  Printf("%s , sqrt(s) = %2.2f GeV, %2.2f < y < %2.2f %s", kSystemString[fCollisionSystem], fSqrtS, fYMin, fYMax, fCentr.Data()); 
-  if(fMeasurementType & kTypeOnlyTotError) {
-    Printf("%f +- %f (total error)", fYield, fSystError);
-  }
-  else {
-    Printf("%f +- %f (stat) +- %f (syst)", fYield, fStatError, fSystError);
-  }
-  if(fNormErrorNeg) {
-    Printf("Normalizaion uncertainty: +%f-%f", fNormErrorPos, fNormErrorNeg);    
+  // Available options: 
+  //  - short
+  //  - justvalue (does not print normalization error)
+  TString sopt(opt);
+  if(sopt.Contains("short")) {
+    printf("[%s]: %f +- %f +- %f ", fPartName.Data(), fYield, fStatError, fSystError);
+    if(fNormErrorNeg) {
+      printf("(+%f-%f)", fNormErrorPos, fNormErrorNeg);    
+    }else if(fNormErrorPos) {
+      printf("(+-%f)", fNormErrorPos);    
+    }
+    printf("[0x%8.8x,%d]\n", fMeasurementType, fStatus);
   }
-  else {
-    Printf("Normalizaion uncertainty: %f", fNormErrorPos);
+  else if (sopt.Contains("justvalue")) {
+    Printf("%f +- %f +- %f ", fYield, fStatError, fSystError);
+    
+  } else {
+    Printf("-------------------------------");
+    CheckTypeConsistency();
+    if(fMeasurementType & kTypeParticleRatio) {
+      Printf("%s [%s] (%d/%d) %s %s", fPartName.Data(), GetLatexName(), fPdgCode, fPdgCode2, fIsSum ? "particle + antiparticle" : "", fTag.Length() ? Form("[%s]", fTag.Data()) : "" );
+    }
+    else{ 
+      Printf("%s [%s] (%d) %s %s", fPartName.Data(), GetLatexName(), fPdgCode, fIsSum ? "particle + antiparticle" : "", fTag.Length() ? Form("[%s]", fTag.Data()) : "" );
+    }
+    TString measurementType = IsTypeMeasured() ? "Measured" : ""; 
+    if(fMeasurementType & kTypeLinearInterpolation) measurementType += "Interpolated";
+    if(fMeasurementType & kTypeAverageAndRefit) measurementType     += "Averaged+Refitted";
+    if(fMeasurementType & kTypeExtrPionRatio)   measurementType     += "Extrapolated assuming constant ratio to pions";
+    Printf("Status: %s, %s", kStatusString[fStatus],  measurementType.Data());
+    Printf("%s , sqrt(s) = %2.2f GeV, %2.2f < y < %2.2f %s", kSystemString[fCollisionSystem], fSqrtS, fYMin, fYMax, fCentr.Data()); 
+    if(fMeasurementType & kTypeOnlyTotError) {
+      Printf("%f +- %f (total error)", fYield, fSystError);
+    }
+    else {
+      Printf("%f +- %f (stat) +- %f (syst)", fYield, fStatError, fSystError);
+    }
+    if(fNormErrorNeg) {
+      Printf("Normalization uncertainty: +%f-%f", fNormErrorPos, fNormErrorNeg);    
+    }
+    else {
+      Printf("Normalization uncertainty: %f", fNormErrorPos);
+    }
   }
 }
 
@@ -688,3 +760,227 @@ Float_t AliParticleYield::GetNormError() const {
   else return fNormErrorPos; // If the uncertainty is not asymmetric, fNormErrorPos stores it.
 
 }
+
+AliParticleYield * AliParticleYield::FindParticle(TClonesArray * arr, Int_t pdg, Int_t system, Float_t sqrts, TString centrality, Int_t isSum, Int_t status, Int_t pdg2){
+  // Finds a particle in array matching the search criteria. If more than one is found, prints a warning 
+  // If status is -1, tries to return the best (lower status value)
+  // If pdg2 is not zero, we try to match it as well (we are looking for a ratio) 
+  // The centrality is compared with TString::Contains
+
+  TIter iter(arr);
+  AliParticleYield * part = 0;
+  AliParticleYield * foundPart = 0;
+  while ((part = dynamic_cast<AliParticleYield*>(iter.Next()))){
+    if (part->GetPdgCode() == pdg &&                     // same pdg
+        part->GetCollisionSystem() == system &&          // same system
+        Compare2Floats(part->GetSqrtS(), sqrts) &&       // same energy
+        part->GetCentr().Contains(centrality) &&         // compatible centrality
+        (part->GetPdgCode2() == pdg2) &&                 // same PDG2, if requested (we are looking for a ratio). We also need to check explicitly for pdg2=0 not to match ratios
+        (status < 0 || part->GetStatus() == status)  &&  // same status, if requested
+        (isSum  < 0 || part->GetIsSum()  == isSum)       // part+antipart or not, if requested
+        ) { 
+      if (foundPart) { // we already found a patching particle
+        Printf("WARNING<AliParticleYield::FindParticle>: Found another particle matching the same criteria");
+        foundPart->Print();
+        part->Print();
+        if (part->GetStatus() == foundPart->GetStatus()) { // Does it have the same status?! Don't know what to do!
+          Printf("WARNING<AliParticleYield::FindParticle>: they have the same status, I cannot decide, resetting particle");
+          foundPart = 0;
+        }
+        else if (part->GetStatus()< foundPart->GetStatus()) { // Is it of better quality? select it!
+          Printf("WARNING<AliParticleYield::FindParticle>: the new one has a smaller status: selecting it!");
+          foundPart = part;
+        }
+      } else { // First match
+        foundPart = part;
+      }
+
+    }  
+
+  }
+  if(!foundPart) {
+    Printf("ERROR<AliParticleYield::FindParticle>: Cannot find %d (System %d, sqrts = %2.2f TeV, %s, %s, Status:%d, pdg2:%d)", 
+           pdg, system, sqrts, centrality.Data(), isSum ? "part+antipart" : "", status, pdg2);
+  }
+  return foundPart;
+
+}
+
+void AliParticleYield::CombineMetadata(AliParticleYield *part1, AliParticleYield*part2, const char * pdgSep) {
+  // Combines metadata from part1 and part2
+  // pdgSep is a separator to be added in the name and pdg (e.g. + for a sum, / for a ratio)
+
+  Int_t pdg1 = part1->GetPdgCode();
+  Int_t pdg2 = pdg1 == part2->GetPdgCode() ? part1->GetPdgCode2() : part2->GetPdgCode();
+  Int_t   system = part1->GetCollisionSystem() == part2->GetCollisionSystem() ? part2->GetCollisionSystem() : -1; 
+  Float_t sqrts = Compare2Floats(part1->GetSqrtS(), part2->GetSqrtS()) ? part1->GetSqrtS() : 0;
+  Int_t ymin = part1->GetYMin() == part2->GetYMin() ? part2->GetYMin() : -1000; 
+  Int_t ymax = part1->GetYMax() == part2->GetYMax() ? part2->GetYMax() : -1000; 
+  Int_t status = part1->GetStatus() == part2->GetStatus() ? part2->GetStatus() : -1; 
+  Int_t type = part1->GetMeasurementType() == part2->GetMeasurementType() ? part2->GetMeasurementType() : -1; 
+  
+  TString centr = part1->GetCentr() == part2->GetCentr() ? part2->GetCentr() : part1->GetCentr()+pdgSep+part2->GetCentr(); 
+  TString tag = part1->GetTag() == part2->GetTag() ? part2->GetTag() : part1->GetTag()+pdgSep+part2->GetTag(); 
+  TString name = part1->GetPartName()+pdgSep+part2->GetPartName();
+
+  Int_t issum = part1->GetIsSum() || part2->GetIsSum() ? 1 : 0; 
+
+  SetPdgCode(pdg1);
+  SetPdgCode2(pdg2);
+  SetCollisionSystem(AliPYCSystem_t(system));
+  SetSqrtS(sqrts);
+  SetYMin(ymin);
+  SetYMax(ymax);
+  SetStatus(AliPYStatusCode_t(status));
+  SetMeasurementType(type);
+  SetCentr(centr);
+  SetTag(tag);
+  SetIsSum(issum);
+  SetPartName(name);
+
+}
+
+AliParticleYield * AliParticleYield::Add   (AliParticleYield * part1, AliParticleYield * part2, Double_t correlatedError , Option_t * opt){
+
+  // Computes the ratio of 2 particles.
+  // Valid options:
+  //  - NQ: Propagates normalization errors quadratically (by default they are propagated linearly)
+  //  - SL: propagates STATISTICAL errors linearly
+  //  - YQ: propagates SYSTEMATIC errors quadratically
+  //  NB by default, statistical errors are propagated quadratically and systematic errors linearly
+  // if "Correlated error" is non null, it is subtracted in quadrature from the result. It should be a fractional error.
+
+  if(!part1 || !part2) {
+    Printf("WARNING<AliParticleYield::Add>: part1 or part2 is null!");
+    return 0;    
+  }
+
+  TString sopt(opt);
+  sopt.ToUpper();
+
+  Float_t value = part1->GetYield() + part2->GetYield();
+  Float_t stat  = SumErrors(part1, part2, 0, sopt.Contains("SL") ? "L": "" ); // the option decices if it is propagated linearly pr or quadratically
+  Float_t syst  = SumErrors(part1, part2, 1, sopt.Contains("YQ") ? "" : "L" );// the option decices if it is propagated linearly pr or quadratically
+  Float_t norm = SumErrors(part1, part2, 2, sopt.Contains("NQ") ? "" :"L");   
+  
+  
+  if(correlatedError) {
+    syst = TMath::Sqrt(syst*syst -correlatedError*correlatedError*value*value); // FIXME: this line was never tested
+  }
+
+  AliParticleYield * part = new AliParticleYield();
+  part->SetYield(value);
+  part->SetStatError(stat);
+  part->SetSystError(syst);
+  part->SetNormError(norm);
+  part->CombineMetadata(part1, part2, "+");
+  part->SetIsSum(1); // CombineMetadata inherits this form part1 and part2
+  return part;
+
+
+}
+
+void AliParticleYield::Scale(Float_t scale) {
+  // scales the measurement by an errorless number
+  fYield        *= scale;
+  fNormErrorNeg *= scale;
+  fNormErrorPos *= scale;
+  fStatError    *= scale;
+  fSystError    *= scale;
+  
+}
+
+AliParticleYield * AliParticleYield::Divide (AliParticleYield * part1, AliParticleYield * part2, Double_t correlatedError , Option_t * opt) {
+  // Computes the ratio of 2 particles.
+  // Valid options:
+  //  - NQ: assumes normalization errors to be uncorrelated and propagates them quadratically (otherwise the normalization error on the ratio is set to 0
+  //  - SL: propagates STATISTICAL errors linearly
+  //  - YQ: propagates SYSTEMATIC errors quadratically
+  //  NB by default, statistical errors are propagated quadratically and systematic errors linearly
+  // if "Correlated error" is non null, it is subtracted in quadrature from the result.It should be a fractional error.
+
+  if(!part1 || !part2) {
+    Printf("WARNING<AliParticleYield::Divide>: part1 or part2 is null!");
+    return 0;    
+  }
+
+  TString sopt(opt);
+  sopt.ToUpper();
+  if(part1->IsTypeRatio() || part2->IsTypeRatio()){
+    Printf("WARNING<AliParticleYield::Divide>: If computing a double ratio, some meta info may be not reliable!");          
+  }
+
+  Float_t value = part1->GetYield() / part2->GetYield();
+  // Since in a ratio we propagate a relative error, we have to multiply it back for value in order to get the absolute uncertainty
+  Float_t stat  = SumErrors(part1, part2, 0, sopt.Contains("SL") ? "RL": "R" ) *value; // R means that it's a relative error, the option decices if it is propagated linearly pr or quadratically
+  Float_t syst  = SumErrors(part1, part2, 1, sopt.Contains("YQ") ? "R" : "RL" )*value;// R means that it's a relative error, the option decices if it is propagated linearly pr or quadratically
+  Float_t norm = 0;
+  if(sopt.Contains("NQ")) {// if opt contains N, propagate the normalization error assuming it is independent
+    norm  = SumErrors(part1, part2, 2, "R")*value;   
+  }
+  
+  if(correlatedError) {
+    syst = TMath::Sqrt(syst/value*syst/value -correlatedError*correlatedError)*value; // FIXME: this line was never tested
+  }
+
+  AliParticleYield * part = new AliParticleYield();
+  part->SetYield(value);
+  part->SetStatError(stat);
+  part->SetSystError(syst);
+  part->SetNormError(norm);
+  part->CombineMetadata(part1, part2, "/");
+
+  part->SetMeasurementType(part->GetMeasurementType() | kTypeParticleRatio);// Set ratio bit
+
+  return part;
+
+}
+
+Double_t AliParticleYield::SumErrors(AliParticleYield * part1, AliParticleYield * part2, Int_t error, Option_t * opt) {
+
+  // Combines 2 errors. 
+  //  error = 0 -> statistical error
+  //  error = 1 -> systematic error
+  //  error = 2 -> normalization error
+  //  Valid options
+  //   "R" it propagates it as a relative error, WARNING: it also returns a relative error!
+  //   "L" it propagates it sums the errors linearly (by default it is done in quadrature)
+
+  
+  TString sopt(opt);
+  sopt.ToUpper();
+  Bool_t isRelative = sopt.Contains("R");
+  Bool_t isLinear   = sopt.Contains("L");
+
+  Double_t err1 = 0;
+  Double_t err2 = 0;
+  Double_t err  = 0;
+  if (error == 0) {
+    err1 = part1->GetStatError();
+    err2 = part2->GetStatError();
+  } else if (error == 1) {
+    err1 = part1->GetSystError();
+    err2 = part2->GetSystError();
+  } else if (error == 2) {
+    err1 = part1->GetNormError();
+    err2 = part2->GetNormError();
+  } else {
+    Printf("ERROR<AliParticleYield::SumErrors>: wrong error #:%d", error); 
+  }
+
+  if(isRelative) {
+    err1  /= part1->GetYield();
+    err2  /= part2->GetYield();
+  }
+
+  if(isLinear) {
+    err = err1+err2;
+  } else {
+    err = TMath::Sqrt(err1*err1 + err2*err2);
+  }
+
+  if(isRelative) return err;
+  
+  return err;
+
+}
index 7661cc79fc9c3bb835b8dd884a891c0da1e93202..bf74a70033bf4a6c4f9a90e0f57d655f6fb341dd 100644 (file)
@@ -9,10 +9,10 @@
 
 #include "TObject.h"
 #include "TString.h"
+#include "TCut.h"
 
 class TClonesArray;
 class TTree;
-
 class AliParticleYield : public TObject
 {
 public:
@@ -33,10 +33,13 @@ public:
   static const char * kStatusString[];
 
   enum AliPYMeasurementType_t { // this is a bit mask: more than one bit can be one (be careful not to set mutually exclusive ones).
-    // Type of measurements (lowest nibble reserved for this)
+    // Type of measurements
     kTypeLinearInterpolation = 0x1,
-    kTypeParticleRatio       = 0x2, // If true, this is a ratio of 2 particles where the propagation of uncertainty was properly taken into account. 
-    
+    kTypeParticleRatio       = 0x2,  // If true, this is a ratio of 2 particles where the propagation of uncertainty was properly taken into account. 
+    kTypeAverageAndRefit     = 0x4,  // this means that the measurement has been obtained summing several spectra in smaller centality bins (weihgted by the width of the centrality bin) and refitting them
+    kTypeExtrPionRatio       = 0x8,  // Extrapolated from a different centrality bin, assumin the ratio to pions is constant
+    kTypeExtrFit             = 0x20, // Extrapolated fitting the centrality dependence vs npart
+
     // Type of errors
     kTypeOnlyTotError        = 0x10, // If on, only the total error is returned as "GetSystError". GetStatError should be set to 0;
   };
@@ -52,7 +55,8 @@ public:
   static TTree * ReadFromASCIIFileAsTree(const char * fileName, const char * separators = " \t");
   static void SaveAsASCIIFile(TClonesArray * arr, const char * filename, const char * separator = " ", Int_t colWidth = 7);  
   static void WriteThermusFile(TClonesArray * arr, const char * filename, Int_t colWidth = 10);
-  static TClonesArray * GetEntriesMatchingSelection(TTree * tree, TString selection); 
+  static TClonesArray * GetEntriesMatchingSelection(TTree * tree, TCut selection); 
+  static TTree * GetTreeFromArray(TClonesArray * arr) ;
 
   // Misc helpers
   Bool_t CheckTypeConsistency() const;
@@ -61,8 +65,13 @@ public:
   static Float_t GetError(TString error, Float_t yield) ;
   static const char * FormatCol(const char * text, Int_t width,  const char * sep =" ") ;
   static Double_t RoundToSignificantFigures(double num, int n) ;  
+  static AliParticleYield * FindParticle(TClonesArray * arr, Int_t pdg, Int_t system, Float_t sqrts, TString centrality = "", Int_t isSum = -1, Int_t status = -1, Int_t pdg2 = 0);
+  static AliParticleYield * FindRatio   (TClonesArray * arr, Int_t pdg, Int_t pdg2, Int_t system, Float_t sqrts, TString centrality="", Int_t isSum = -1, Int_t status = -1) { return FindParticle(arr, pdg, system, sqrts, centrality, isSum, status, pdg2); }
   Bool_t operator==(const AliParticleYield& rhs);
   Bool_t IsTheSameMeasurement(AliParticleYield &rhs);
+  static AliParticleYield * Divide(AliParticleYield * part1, AliParticleYield * part2, Double_t correlatedError = 0, Option_t * opt="");
+  static AliParticleYield * Add   (AliParticleYield * part1, AliParticleYield * part2, Double_t correlatedError = 0, Option_t * opt="");
+  void Scale(Float_t scale) ;
 
   // Getters
   TString GetCentr()           const{ return fCentr           ;}
@@ -88,8 +97,9 @@ public:
   const char * GetLatexName(Int_t pdg = 0)  const;
   Float_t GetTotalError(Bool_t includeNormalization = kFALSE) const;
 
-  Bool_t  IsTypeMeasured()     const{ CheckTypeConsistency(); return !(fMeasurementType & kTypeLinearInterpolation);}
+  Bool_t  IsTypeMeasured()     const{ CheckTypeConsistency(); return (!(fMeasurementType & kTypeLinearInterpolation) && !(fMeasurementType & kTypeExtrPionRatio));}
   Bool_t  IsTypeRatio()        const{ CheckTypeConsistency(); return (fMeasurementType & kTypeParticleRatio);}
+  Bool_t  IsTypeExtrapolatedWithPionRatio() const { CheckTypeConsistency(); return (fMeasurementType & kTypeExtrPionRatio);}
   Bool_t  IsTypeLinearInterp() const{ CheckTypeConsistency(); return fMeasurementType & kTypeLinearInterpolation;}
   Bool_t  IsTypeOnlyTotErr()   const{ CheckTypeConsistency(); return fMeasurementType & kTypeOnlyTotError;       }
 
@@ -121,13 +131,16 @@ public:
   void SetTypeBits(UInt_t mask) { fMeasurementType |= mask; } // This switches on the bits passed. Does not affect the others! If you want to set the Whole mask, use SetMeasurementType
 
   static void SetSignificantDigits (Int_t var) { fSignificantDigits = var;}
-
+  
 
 
 
 private:
 
-  Bool_t Compare2Floats(Float_t a, Float_t b) ;
+  static Bool_t   Compare2Floats(Float_t a, Float_t b) ;
+  static Double_t SumErrors(AliParticleYield * part1, AliParticleYield * part2, Int_t error, Option_t * opt) ;
+  void CombineMetadata(AliParticleYield *part1, AliParticleYield*part2, const char * pdgSep) ;
+
 
   Int_t   fPdgCode;         // PdgCode
   Int_t   fPdgCode2;        // The PdgCode of the second particle, only needed in case of a ratio
@@ -155,7 +168,7 @@ private:
   static Int_t fSignificantDigits; // Significant Digits to be used in values and errors
   static Float_t fEpsilon; // Used for float conparisons
 
-  ClassDef(AliParticleYield,1)
+  ClassDef(AliParticleYield,2)
 };
 
 
diff --git a/PWGLF/ThermalFits/AverageAndExtrapolate.C b/PWGLF/ThermalFits/AverageAndExtrapolate.C
new file mode 100644 (file)
index 0000000..894fbd8
--- /dev/null
@@ -0,0 +1,472 @@
+#if !defined (__CINT__) || (defined(__MAKECINT__))
+#include <iostream>
+#include "TClonesArray.h"
+#include "TH1.h"
+#include "AliPWGFunc.h"
+//#include "LoadSpectraPiKPPbPb.C"
+#include "AliParticleYield.h"
+#include "TFile.h"
+#include "TDatabasePDG.h"
+
+#endif
+
+
+void AddHistograms (TH1 * hdest, TH1 * hsource, Float_t scale = 1. , Int_t isLinear = 0) ;
+TH1* PrintYieldAndError(TH1 * hsyst, TH1* hstat, Int_t ifunc = 0, Double_t massParticle=0.139) ;
+TH1* ReweightSpectra(TClonesArray * histos, Double_t * weights, Int_t isLinear = 0, TString suffix = "") ;
+void LoadStuff() ;
+void AverageAndExtrapolate(TString what);
+
+
+
+TH1 * hLambdaStat[7];
+TH1 * hLambdaSyst[7];
+TH1 * hK0SStat[7]   ;
+TH1 * hK0SSyst[7]   ;
+
+
+
+void AverageAndExtrapolate () {
+
+  LoadStuff();
+
+  //  PrintYieldAndError(hSpectraCentr_sys[0][kMyProton][0], hSpectraCentr_stat[0][kMyProton][0], 0, mass[2]);
+
+  //  PrintYieldAndError(hLambdaSyst[0], hLambdaStat[0], 0, TDatabasePDG::Instance()->GetParticle("Lambda0")->Mass());
+  // icentr, ipart, icharge
+
+  //  AverageAndExtrapolate("pions_pos_0020");
+  // AverageAndExtrapolate("pions_pos_0010");
+  // AverageAndExtrapolate("pions_neg_0010");
+  // AverageAndExtrapolate("kaons_pos_0010");
+  // AverageAndExtrapolate("kaons_neg_0010");
+  // AverageAndExtrapolate("protons_pos_0010");
+  // AverageAndExtrapolate("protons_neg_0010");
+  //  AverageAndExtrapolate("lambda_0010");
+  //  AverageAndExtrapolate("k0s_0010");
+  // AverageAndExtrapolate("pions_pos_6080");
+  // AverageAndExtrapolate("pions_neg_6080");
+  // AverageAndExtrapolate("kaons_pos_6080");
+  // AverageAndExtrapolate("kaons_neg_6080");
+  // AverageAndExtrapolate("protons_pos_6080");
+  // AverageAndExtrapolate("protons_neg_6080");
+
+}
+
+TH1* PrintYieldAndError(TH1 * hsyst, TH1* hstat, Int_t ifunc, Double_t massParticle) {
+
+  TF1 * f = 0;
+  if (ifunc == 0) {
+    f= BGBlastWave("fBlastWave",  massParticle);
+  }
+  else if (ifunc == 1) {
+    f  = fm.GetTsallis(massParticle, 0.2, 11, 800, "fTsallisPion");
+  }
+  
+  TH1 * h =  YieldMean(hstat, hsyst, f);
+  //  std::cout << "H " << h << std::endl;
+  std::cout << "" << std::endl;
+  std::cout << h->GetBinContent(1) << ", " << h->GetBinContent(2) << ", " << h->GetBinContent(3) << std::endl;
+  std::cout << "" << std::endl;
+  return h;
+
+
+}
+
+
+TH1* ReweightSpectra(TObjArray * histos, Double_t * weights, Int_t isLinear, TString suffix) {
+
+  // sums a number of spectra with a given weight. Used to combine
+  // several centrality bins.  The weights should add up to 1 and be
+  // proportional to the width of the centrality bin for each
+  // histogram
+  // Suffix is added to the name of the histogram.
+  // if linear = 1 errors are summed linearly rather than in quadrature
+
+
+  TIter it(histos);
+  TH1 * h = 0;
+  TH1 * hsum = 0;
+  Int_t ihisto = 0;
+  while ((h = dynamic_cast<TH1*>(it.Next()))) {
+    if(!h) {
+      std::cout << "ERROR cannot get one of the histos!" << std::endl;
+      return 0;
+    }
+
+    if (!hsum) {
+      // First histogram, clone it
+      hsum =  (TH1D*) h->Clone(TString(h->GetName())+suffix);
+      hsum->Scale(weights[ihisto++]);
+    }else {
+      AddHistograms(hsum, h, weights[ihisto++], isLinear);
+    }
+  }
+  return hsum;
+}
+
+void AddHistograms (TH1 * hdest, TH1 * hsource, Float_t scale, Int_t isLinear) {
+  // THis method assumes that the 2 histos are consistent!!
+  TH1 * hsourceLoc = (TH1*) hsource->Clone("hsourceLoc");
+  hsourceLoc->Scale(scale);
+  if(!isLinear) {
+    hdest->Add(hsourceLoc);
+  } 
+  else {
+    Int_t nbin = hsourceLoc->GetNbinsX();
+    for(Int_t ibin = 0; ibin < nbin; ibin++){
+      Double_t content = hdest->GetBinContent(ibin) + hsourceLoc->GetBinContent(ibin);
+      Double_t error   = hdest->GetBinError  (ibin) + hsourceLoc->GetBinError  (ibin);
+      hdest->SetBinContent(ibin,content);
+      hdest->SetBinError(ibin, error);
+    }
+    
+
+  }
+
+  delete hsourceLoc;
+  
+  
+
+}
+
+
+void LoadStuff() {
+  gROOT->LoadMacro("LoadSpectraPiKPPbPb.C");
+  LoadSpectraPiKPPbPb();
+  LoadLibs();
+  gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/UTILS/YieldMean.C");
+  gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/UTILS/SpectraUtils.C");
+
+  // Load Lambdas and K0s
+  TFile * f = new TFile("k0s_lambda_final_spectra.root");
+  const char * multTags[] = {  "0005",  "0510",  "1020",  "2040",  "4060",  "6080", "8090"};
+  for (Int_t icentr = 0; icentr<7; icentr++) {
+    hLambdaStat[icentr] = (TH1*) f->Get(Form("statonly_cent%s_Lambda",multTags[icentr]));
+    hLambdaSyst[icentr] = (TH1*) f->Get(Form("statonly_cent%s_Lambda",multTags[icentr]));
+    hK0SStat[icentr]    = (TH1*) f->Get(Form("systonly_cent%s_K0s",multTags[icentr]));
+    hK0SSyst[icentr]    = (TH1*) f->Get(Form("statonly_cent%s_K0s",multTags[icentr]));
+
+    // The bin 300-400 MeV was not used in the analysis
+    hK0SStat[icentr]->SetBinContent(4,0);   
+    hK0SSyst[icentr]->SetBinContent(4,0);
+    hK0SStat[icentr]->SetBinError(4,0);   
+    hK0SSyst[icentr]->SetBinError(4,0);
+  }
+
+}
+
+void AverageAndExtrapolate(TString what) {
+
+  TH1 * hstat =0;
+  TH1 * hsyst =0;
+  TH1 * hyieldmean =0;
+
+  if(what == "pions_pos_0020"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[0][kMyPion][kMyPos]);
+    arrStat->Add(hSpectraCentr_stat[1][kMyPion][kMyPos]);
+    arrStat->Add(hSpectraCentr_stat[2][kMyPion][kMyPos]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [0][kMyPion][kMyPos]);
+    arrSyst->Add(hSpectraCentr_sys [1][kMyPion][kMyPos]);
+    arrSyst->Add(hSpectraCentr_sys [2][kMyPion][kMyPos]);
+    
+    Double_t weights[] = {0.25, 0.25, 0.5};
+    //Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0020");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0020");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[0]);
+
+    
+  }
+  if(what == "pions_pos_0010"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[0][kMyPion][kMyPos]);
+    arrStat->Add(hSpectraCentr_stat[1][kMyPion][kMyPos]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [0][kMyPion][kMyPos]);
+    arrSyst->Add(hSpectraCentr_sys [1][kMyPion][kMyPos]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[0]);
+
+    
+  }
+  if(what == "pions_neg_0010"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[0][kMyPion][kMyNeg]);
+    arrStat->Add(hSpectraCentr_stat[1][kMyPion][kMyNeg]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [0][kMyPion][kMyNeg]);
+    arrSyst->Add(hSpectraCentr_sys [1][kMyPion][kMyNeg]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[0]);
+
+    
+  }
+  if(what == "protons_pos_0010"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[0][kMyProton][kMyPos]);
+    arrStat->Add(hSpectraCentr_stat[1][kMyProton][kMyPos]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [0][kMyProton][kMyPos]);
+    arrSyst->Add(hSpectraCentr_sys [1][kMyProton][kMyPos]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[2]);
+
+    
+  }
+  if(what == "protons_neg_0010"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[0][kMyProton][kMyNeg]);
+    arrStat->Add(hSpectraCentr_stat[1][kMyProton][kMyNeg]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [0][kMyProton][kMyNeg]);
+    arrSyst->Add(hSpectraCentr_sys [1][kMyProton][kMyNeg]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[2]);
+
+    
+  }
+    if(what == "kaons_pos_0010"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[0][kMyKaon][kMyPos]);
+    arrStat->Add(hSpectraCentr_stat[1][kMyKaon][kMyPos]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [0][kMyKaon][kMyPos]);
+    arrSyst->Add(hSpectraCentr_sys [1][kMyKaon][kMyPos]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[1]);
+
+    
+  }
+  if(what == "kaons_neg_0010"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[0][kMyKaon][kMyNeg]);
+    arrStat->Add(hSpectraCentr_stat[1][kMyKaon][kMyNeg]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [0][kMyKaon][kMyNeg]);
+    arrSyst->Add(hSpectraCentr_sys [1][kMyKaon][kMyNeg]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[1]);
+
+    
+  }
+
+  if(what == "pions_pos_6080"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[7][kMyPion][kMyPos]);
+    arrStat->Add(hSpectraCentr_stat[8][kMyPion][kMyPos]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [7][kMyPion][kMyPos]);
+    arrSyst->Add(hSpectraCentr_sys [8][kMyPion][kMyPos]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[0]);
+
+    
+  }
+  if(what == "pions_neg_6080"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[7][kMyPion][kMyNeg]);
+    arrStat->Add(hSpectraCentr_stat[8][kMyPion][kMyNeg]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [7][kMyPion][kMyNeg]);
+    arrSyst->Add(hSpectraCentr_sys [8][kMyPion][kMyNeg]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[0]);
+
+    
+  }
+  if(what == "protons_pos_6080"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[7][kMyProton][kMyPos]);
+    arrStat->Add(hSpectraCentr_stat[8][kMyProton][kMyPos]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [7][kMyProton][kMyPos]);
+    arrSyst->Add(hSpectraCentr_sys [8][kMyProton][kMyPos]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[2]);
+
+    
+  }
+  if(what == "protons_neg_6080"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[7][kMyProton][kMyNeg]);
+    arrStat->Add(hSpectraCentr_stat[8][kMyProton][kMyNeg]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [7][kMyProton][kMyNeg]);
+    arrSyst->Add(hSpectraCentr_sys [8][kMyProton][kMyNeg]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[2]);
+
+    
+  }
+    if(what == "kaons_pos_6080"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[7][kMyKaon][kMyPos]);
+    arrStat->Add(hSpectraCentr_stat[8][kMyKaon][kMyPos]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [7][kMyKaon][kMyPos]);
+    arrSyst->Add(hSpectraCentr_sys [8][kMyKaon][kMyPos]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[1]);
+
+    
+  }
+  if(what == "kaons_neg_6080"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hSpectraCentr_stat[7][kMyKaon][kMyNeg]);
+    arrStat->Add(hSpectraCentr_stat[8][kMyKaon][kMyNeg]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hSpectraCentr_sys [7][kMyKaon][kMyNeg]);
+    arrSyst->Add(hSpectraCentr_sys [8][kMyKaon][kMyNeg]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_6080");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_6080");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, mass[1]);
+
+    
+  }
+
+
+  if(what == "lambda_0010"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hLambdaStat[0]);
+    arrStat->Add(hLambdaStat[1]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hLambdaSyst[0]);
+    arrSyst->Add(hLambdaSyst[1]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, TDatabasePDG::Instance()->GetParticle("Lambda0")->Mass());
+
+    
+  }
+
+  if(what == "k0s_0010"){ 
+
+    TObjArray * arrStat = new TObjArray();
+    arrStat->Add(hK0SStat[0]);
+    arrStat->Add(hK0SStat[1]);
+    
+    TObjArray * arrSyst = new TObjArray();
+    arrSyst->Add(hK0SSyst[0]);
+    arrSyst->Add(hK0SSyst[1]);
+    
+    Double_t weights[] = {0.5, 0.5};
+    
+    TH1 * hstat = ReweightSpectra(arrStat, weights, 0, "_0010");
+    TH1 * hsyst = ReweightSpectra(arrSyst, weights, 1, "_0010");
+
+    hyieldmean = PrintYieldAndError(hsyst, hstat, 0, TDatabasePDG::Instance()->GetParticle("K_S0")->Mass());
+
+    
+  }
+
+
+
+  
+  TCanvas * c1 = new TCanvas("Averaging", "Averaging");
+  c1->Divide(2,1);
+  c1->cd(1);
+  hstat->Draw();
+  hsyst->Draw("same,e3");
+  c1->cd(2);
+  hyieldmean->Draw();
+  
+
+}
+
+
diff --git a/PWGLF/ThermalFits/InterpolateRatiosAndYields.C b/PWGLF/ThermalFits/InterpolateRatiosAndYields.C
new file mode 100644 (file)
index 0000000..63d5581
--- /dev/null
@@ -0,0 +1,163 @@
+#if !defined (__CINT__) || (defined(__MAKECINT__))
+#include <iostream>
+#include "TClonesArray.h"
+#include "AliParticleYield.h"
+
+#endif
+TClonesArray * arr =0;
+
+void InterpolateRatios(Int_t pdg1, Int_t pdg2, TString centr1="V0M0005", TString centr2="V0M0510", TString centrfinal="V0M0010") ;
+void Interpolate0010(Int_t pdg) ;
+void Interpolate6080(Int_t pdg) ;
+
+void ExtrapolateWithConstantRatioToPions(Int_t pdg, TString centrOrigin, TString centrDest);
+Int_t collSystem = -1;
+Float_t energy = -1;
+
+void InterpolateRatiosAndYields() {
+#if !(!defined (__CINT__) || (defined(__MAKECINT__)))
+  LoadLibs();
+#endif
+  collSystem = 2; energy =2760;
+  // *************** pi, K, pr *****************
+  arr=   AliParticleYield::ReadFromASCIIFile("PbPb_2760_PiKaPr.txt");
+  // Interpolate0010(211);
+  // Interpolate0010(-211);
+  // Interpolate0010(321);
+  // Interpolate0010(-321);
+  // Interpolate0010(2212);
+  // Interpolate0010(-2212);
+  //  InterpolateRatios(2212,211);  
+  //  InterpolateRatios(321,211);  
+  // Interpolate6080(211);
+  // Interpolate6080(-211);
+  // Interpolate6080(2212);
+  // Interpolate6080(-2212);
+  Interpolate6080(321);
+  Interpolate6080(-321);
+  // InterpolateRatios(2212,211, "V0M6070", "V0M7080", "V0M6080");  
+  // InterpolateRatios(321,211, "V0M6070", "V0M7080", "V0M6080");    
+
+  // *************** Lambda and K0 *****************
+  // arr=   AliParticleYield::ReadFromASCIIFile("PbPb_2760_LambdaK0.txt");
+  // Interpolate0010(3122);
+  // Interpolate0010(310);
+  // *************** Helium 3 *****************
+  // arr = AliParticleYield::ReadFromASCIIFile("PbPb_2760_DeuHelium3.txt");
+  // arr->AbsorbObjects(AliParticleYield::ReadFromASCIIFile("./PbPb_2760_AveragedNumbers.txt"));
+  // ExtrapolateWithConstantRatioToPions(1000020030, "V0M0020", "V0M0010");
+  // *************** Kstar *****************
+  // arr = AliParticleYield::ReadFromASCIIFile("PbPb_2760_Kstar892.txt");
+  // arr->AbsorbObjects(AliParticleYield::ReadFromASCIIFile("./PbPb_2760_AveragedNumbers.txt"));
+  // ExtrapolateWithConstantRatioToPions(313, "V0M0020", "V0M0010");
+
+  // *************** pPb, deuteron *********************
+  //  collSystem = 1; energy = 5020;
+  // 1. Average pions
+  //arr = AliParticleYield::ReadFromASCIIFile("pPb_5020_PiKaPrLamndaK0.txt");
+  //  Interpolate0010(211);
+  //  Interpolate0010(-211);
+  // 2. Extrapolate the deuteron
+  // arr = AliParticleYield::ReadFromASCIIFile("pPb_5020_deuteron.txt");
+  // arr->AbsorbObjects(AliParticleYield::ReadFromASCIIFile("pPb_5020_PiKaPrLamndaK0.txt"));
+  //  ExtrapolateWithConstantRatioToPions(1000010020, "V0A0010", "V0A0005");
+  // ExtrapolateWithConstantRatioToPions(-1000010020, "V0A0010", "V0A0005");
+
+
+}
+
+void DUMP(){
+  AliParticleYield * p0 = AliParticleYield::FindParticle(arr, 211,  2, 2760., "V0M0005");
+  //  p0 = AliParticleYield::Add(p0, AliParticleYield::FindParticle(arr, -211,  2, 2760., "V0M0005"));
+  AliParticleYield * p2 = AliParticleYield::FindParticle(arr, 2212, 2, 2760., "V0M0005");
+  //  p2 = AliParticleYield::Add(p2,AliParticleYield::FindParticle(arr, -2212, 2, 2760., "V0M0005"));
+  AliParticleYield *pratio = AliParticleYield::Divide(p2,p0);
+  pratio->Print();
+  AliParticleYield::FindRatio(arr, 2212, 211, 2, 2760, "V0M0005")->Print();
+
+}
+
+void Interpolate0010(Int_t pdg) {
+
+  TString centrPrefix = collSystem == 2 ? "V0M" : "V0A";
+
+  AliParticleYield * p0 = AliParticleYield::FindParticle(arr, pdg, collSystem, energy, centrPrefix+"0005");
+  AliParticleYield * p1 = AliParticleYield::FindParticle(arr, pdg, collSystem, energy, centrPrefix+"0510");
+  p0->Scale(0.5);
+  p1->Scale(0.5);
+  AliParticleYield * pav = AliParticleYield::Add(p0,p1);
+  std::cout << pav->GetYield() << ", " << pav->GetStatError() << ", "<< pav->GetSystError() << std::endl;
+
+
+} 
+void Interpolate6080(Int_t pdg) {
+
+  TString centrPrefix = collSystem == 2 ? "V0M" : "V0A";
+
+  AliParticleYield * p0 = AliParticleYield::FindParticle(arr, pdg, collSystem, energy, centrPrefix+"6070");
+  AliParticleYield * p1 = AliParticleYield::FindParticle(arr, pdg, collSystem, energy, centrPrefix+"7080");
+  p0->Scale(0.5);
+  p1->Scale(0.5);
+  AliParticleYield * pav = AliParticleYield::Add(p0,p1);
+  std::cout << pav->GetYield() << ", " << pav->GetStatError() << ", "<< pav->GetSystError() << std::endl;
+
+
+} 
+
+void InterpolateRatios(Int_t pdg1, Int_t pdg2, TString centr1, TString centr2, TString centrfinal) {
+
+  AliParticleYield * ratio[2];
+  ratio[0] = AliParticleYield::FindRatio(arr, pdg1, pdg2, 2, 2760., centr1, 1);
+  ratio[1] = AliParticleYield::FindRatio(arr, pdg1, pdg2, 2, 2760., centr2, 1);
+  AliParticleYield * average = AliParticleYield::Add(ratio[0], ratio[1]);
+  average->Scale(0.5);
+  AliParticleYield * pi[2];
+  pi[0] = AliParticleYield::FindParticle(arr, pdg2, 2, 2760., centr1, 0);
+  pi[0] = AliParticleYield::Add(pi[0],AliParticleYield::FindParticle(arr, -pdg2, 2, 2760., centr1, 0));
+  pi[1] = AliParticleYield::FindParticle(arr, pdg2, 2, 2760., centr2, 0);
+  pi[1] = AliParticleYield::Add(pi[1],AliParticleYield::FindParticle(arr, -pdg2, 2, 2760., centr2, 0));
+  
+
+  // Scale to get protons with errors corresponding to the ratio
+  ratio[0]->Scale(pi[0]->GetYield()) ;
+  ratio[1]->Scale(pi[1]->GetYield()) ;
+
+  ratio[0]->Add(ratio[0], ratio[1]);
+  pi[0]->Add(pi[0],pi[1]);
+  pi[0]->SetNormError(0);
+  pi[0]->SetStatError(0);
+  pi[0]->SetSystError(0);
+  
+  ratio[0]->Scale(1./pi[0]->GetYield());
+  ratio[0]->SetCentr(centrfinal);
+
+  ratio[0]->Print();
+  //  average->Dump();
+  average->Print();
+
+    
+}
+
+void ExtrapolateWithConstantRatioToPions(Int_t pdg, TString centrOrigin, TString centrDest) {
+
+  AliParticleYield * part       =  AliParticleYield::FindParticle(arr, pdg,collSystem, energy, centrOrigin);
+  AliParticleYield * pionOrigin =  AliParticleYield::FindParticle(arr, 211,collSystem, energy, centrOrigin);
+  AliParticleYield * pionDest   =  AliParticleYield::FindParticle(arr, 211,collSystem, energy, centrDest);
+  if(!part || !pionOrigin | !pionDest) {
+    return;
+  }
+  // The pion yield is takes
+  part->Scale (1./pionOrigin->GetYield());
+  part->Scale (pionDest->GetYield());
+  part->SetCentr(centrDest);
+  part->SetMeasurementType(part->GetMeasurementType() | AliParticleYield::kTypeExtrPionRatio);
+  part->Print();
+  //  std::cout << "1" << std::endl;
+  TClonesArray * arrOut = new TClonesArray("AliParticleYield");
+  //  std::cout << "2" << std::endl;
+  new((*arrOut)[0]) AliParticleYield(*part) ;
+
+  //  std::cout << "3" << std::endl;
+  //  std::cout << "4" << std::endl;
+  AliParticleYield::SaveAsASCIIFile(arrOut, "temp.txt");
+}
diff --git a/PWGLF/ThermalFits/PlotRatiosForQM14.C b/PWGLF/ThermalFits/PlotRatiosForQM14.C
new file mode 100644 (file)
index 0000000..0d506b0
--- /dev/null
@@ -0,0 +1,232 @@
+#if !defined (__CINT__) || (defined(__MAKECINT__))
+#include <iostream>
+#include "TClonesArray.h"
+#include "AliParticleYield.h"
+#include "TH1F.h"
+#include "TCanvas.h"
+#include <fstream>
+#endif
+
+enum MyParticles { kPDGPi = 211, kPDGK = 321, kPDGProton = 2212, kPDGKS0 = 310, kPDGLambda=3122, kPDGXi=3312,kPDGOmega=3334,kPDGPhi=333,kPDGKStar=313,kPDGDeuteron=1000010020,kPDGHE3 = 1000020030, kPDGHyperTriton = 1010010030, kPDGSigmaStarPlus=3224,kPDGSigmaStarMinus=3114,kPDGXiStar=3324};
+
+TH1F * GetHistoRatios(TClonesArray * arr, Int_t system, Float_t energy, TString centrality, const char * histotitle) ;
+TH1F * GetHistoYields(TClonesArray * arr, Int_t system, Float_t energy, TString centrality, const char * histotitle) ;
+void   PrepareThermalModelsInputFiles(TClonesArray * arr, Int_t system, Float_t energy, TString centrality, Bool_t separateCharges=0) ;
+
+// Plots ratios for QM and saves input files for thermal models
+
+TClonesArray * PlotRatiosForQM14() {
+#if !(!defined (__CINT__) || (defined(__MAKECINT__)))
+   LoadLibs();
+#endif
+  TClonesArray * arr = AliParticleYield::ReadFromASCIIFile("PbPb_2760_Cascades.txt");
+  arr->AbsorbObjects(  AliParticleYield::ReadFromASCIIFile("PbPb_2760_DeuHelium3.txt"));
+  arr->AbsorbObjects(  AliParticleYield::ReadFromASCIIFile("PbPb_2760_Hypertriton.txt"));
+  arr->AbsorbObjects(  AliParticleYield::ReadFromASCIIFile("PbPb_2760_Kstar892.txt"));
+  arr->AbsorbObjects(  AliParticleYield::ReadFromASCIIFile("PbPb_2760_LambdaK0.txt"));
+  arr->AbsorbObjects(  AliParticleYield::ReadFromASCIIFile("PbPb_2760_PiKaPr.txt"));
+  arr->AbsorbObjects(  AliParticleYield::ReadFromASCIIFile("PbPb_2760_phi1020.txt"));
+  arr->AbsorbObjects(  AliParticleYield::ReadFromASCIIFile("PbPb_2760_AveragedNumbers.txt"));
+
+  TClonesArray * arrpp7   = AliParticleYield::ReadFromASCIIFile("pp_7000.txt");
+
+  TClonesArray * arrpp276 = AliParticleYield::ReadFromASCIIFile("pp_2760.txt");
+  TClonesArray * arrpp900 = AliParticleYield::ReadFromASCIIFile("pp_900.txt");
+
+  TClonesArray * arrpPb   = AliParticleYield::ReadFromASCIIFile("pPb_5020_MultiStrange.txt");
+  arrpPb->AbsorbObjects(AliParticleYield::ReadFromASCIIFile("pPb_5020_PiKaPrLamndaK0.txt"));
+  arrpPb->AbsorbObjects(AliParticleYield::ReadFromASCIIFile("pPb_5020_deuteron.txt"));
+
+  TClonesArray * arrThermus = AliParticleYield::ReadFromASCIIFile("PbPb_2760_Thermus_Boris_20140407.txt");
+
+  // PrepareThermalModelsInputFiles(arr, AliParticleYield::kCSPbPb, 2760, "V0M0010", separateCharges0);
+  // PrepareThermalModelsInputFiles(arr, AliParticleYield::kCSPbPb, 2760, "V0M0010", separateCharges1);
+  // PrepareThermalModelsInputFiles(arrpp7, AliParticleYield::kCSpp, 7000, "", /*separateCharges*/0);
+  // PrepareThermalModelsInputFiles(arrpp7, AliParticleYield::kCSpp, 7000, "", /*separateCharges*/1);
+
+  TCanvas * c1 = new TCanvas("Ratios", "Ratios", 1400, 600);
+  c1->SetMargin( 0.0744986, 0.0329513, 0.225131, 0.0593368);
+
+  //  c1->SetLogy();
+  // CENTRAL
+  TH1 * h =  GetHistoRatios(arr,       AliParticleYield::kCSPbPb, 2760, "V0M0010", "Pb-Pb, #sqrt{s_{NN}} = 2.76 TeV, 0-10%");
+  h->GetYaxis()->SetRangeUser(0, 0.4);
+  h->Draw();
+  // //GetHistoRatios(arrThermus,       AliParticleYield::kCSPbPb, 2760, "V0M0010", "Thermus")->Draw("same");
+  // GetHistoRatios(arrpp7, AliParticleYield::kCSpp,   7000, ""       , "pp #sqrt{s} = 7 TeV"                   )->Draw("same");
+  // GetHistoRatios(arrpPb,    AliParticleYield::kCSpPb,  5020, "V0A0005", "p-Pb, #sqrt{s_{NN}} = 5.02 TeV, V0A 0-5%")->Draw("same");
+  // // GetHistoRatios(arrpp276, AliParticleYield::kCSpp,   2760, ""       , "pp #sqrt{s} = 2.76 TeV"                   )->Draw("same");
+  // // GetHistoRatios(arrpp900, AliParticleYield::kCSpp,   900, ""       , "pp #sqrt{s} = 0.9 TeV"                   )->Draw("same");
+  // NewLegend("", "lp",0,1,1);
+
+  // Peripheral
+  GetHistoRatios(arr,       AliParticleYield::kCSPbPb, 2760, "V0M6080", "Pb-Pb, #sqrt{s_{NN}} = 2.76 TeV, 60-80%")->Draw("same");
+  //GetHistoRatios(arrThermus,       AliParticleYield::kCSPbPb, 2760, "V0M0010", "Thermus")->Draw("same");
+  // GetHistoRatios(arrpp7, AliParticleYield::kCSpp,   7000, ""       , "pp #sqrt{s} = 7 TeV"                   )->Draw("same");
+  GetHistoRatios(arrpPb,    AliParticleYield::kCSpPb,  5020, "V0A0005", "p-Pb, #sqrt{s_{NN}} = 5.02 TeV, V0A 0-5%")->Draw("same");
+  // GetHistoRatios(arrpp276, AliParticleYield::kCSpp,   2760, ""       , "pp #sqrt{s} = 2.76 TeV"                   )->Draw("same");
+  // GetHistoRatios(arrpp900, AliParticleYield::kCSpp,   900, ""       , "pp #sqrt{s} = 0.9 TeV"                   )->Draw("same");
+  NewLegend("", "lp",0,1,1);
+
+  //return;
+  TCanvas * c2 = new TCanvas("Yields", "Yields", 1400, 600);
+  c2->SetMargin( 0.0744986, 0.0329513, 0.225131, 0.0593368);
+
+  GetHistoYields(arr,       AliParticleYield::kCSPbPb, 2760, "V0M0010", "Pb-Pb, #sqrt{s_{NN}} = 2.76 TeV, 0-10%")->Draw();
+  GetHistoYields(arrThermus,       AliParticleYield::kCSPbPb, 2760, "V0M0010", "Thermus")->Draw("same");
+  NewLegend("", "lp",0,1,1);
+  return arr;
+}
+
+TH1F * GetHistoRatios(TClonesArray * arr, Int_t system, Float_t energy, TString centrality, const char * histotitle) {
+  // FIXME: THIS SHOULD BE REVIEWED TO MAKE SURE THE PLOTS ARE LABELLED CORRECTLY
+
+  const Int_t nratio = 10;
+  Int_t num  [nratio]    = {kPDGK  , kPDGProton , kPDGLambda , kPDGXi  , kPDGOmega , kPDGDeuteron , kPDGHE3      , kPDGHyperTriton , kPDGPhi , kPDGKStar};
+  //  Int_t denum[nratio]    = {kPDGPi , kPDGPi     , kPDGKS0    ,  kPDGPi , kPDGPi    , kPDGPi       , kPDGDeuteron , kPDGPi          , kPDGK   , -kPDGK};
+  Int_t denum[nratio]    = {kPDGPi , kPDGPi     , kPDGKS0    ,  kPDGPi , kPDGPi    , kPDGProton   , kPDGDeuteron , kPDGPi          , kPDGK   , -kPDGK};
+  Int_t isSum[nratio]    = {1      ,1           ,0           ,1        ,1          ,0             ,0             ,1                ,0        ,1      };
+  Double_t scale[nratio] = {1      ,3           ,1           ,30       ,250         ,50            ,100           ,4e5              ,2       ,2      };
+  TH1F * h = new TH1F(Form("hRatio_%d_%0.0f_%s",system,energy,centrality.Data()), histotitle, nratio, 1, nratio+1);
+
+  //  Double_t isSum = -1; // if this is -1, then the sum criterion is ignored
+  for(Int_t iratio = 1; iratio <= nratio; iratio++){
+    AliParticleYield * ratio = AliParticleYield::FindRatio(arr, num[iratio-1], denum[iratio-1], system, energy, centrality,isSum[iratio-1]);
+    std::cout << num[iratio-1] << " " <<  denum[iratio-1]<< " " ;
+    if(ratio)ratio->Print("short");
+
+
+    if(!ratio) {
+      // If the ratio is not found, try to build it!
+      AliParticleYield * part1 = AliParticleYield::FindParticle(arr, num[iratio-1], system, energy, centrality,  isSum[iratio-1]);
+      // Try with the !sum, if part 1 is not found
+      if(!part1) {
+        part1 = AliParticleYield::FindParticle(arr, num[iratio-1], system, energy, centrality,!isSum[iratio-1]);
+        // If the sum was requested, try to recover it!
+        if(isSum[iratio-1]) { 
+          AliParticleYield * part1_bar = AliParticleYield::FindParticle(arr, -num[iratio-1], system, energy, centrality,0);
+          if(part1 && part1_bar) {
+            std::cout << "Adding " << part1_bar->GetPartName() << " " << part1->GetPartName() << std::endl;
+            
+            part1 = AliParticleYield::Add(part1, part1_bar);
+
+          }
+        } else if(part1) {
+          // if the not sum was requested, but the sum is found, divide by 2 so that it is comparable
+          part1->Scale(0.5);
+        }
+      }
+      AliParticleYield * part2 = AliParticleYield::FindParticle(arr, denum[iratio-1], system, energy, centrality,isSum[iratio-1]);
+      if(!part2) {// Try with the !sum, if part 2 is not found
+        part2 = AliParticleYield::FindParticle(arr, denum[iratio-1], system, energy, centrality,!isSum[iratio-1]);
+        if(isSum[iratio-1]) { 
+          AliParticleYield * part2_bar = AliParticleYield::FindParticle(arr, -denum[iratio-1], system, energy, centrality,0);
+          if(part2 && part2_bar) part2 = AliParticleYield::Add(part2, part2_bar);
+        } else if(part2){
+          // if the not sum was requested, but the sum is found, divide by 2 so that it is comparable
+          part2->Scale(0.5);
+        } 
+
+      }
+      ratio = AliParticleYield::Divide(part1, part2, 0, "YQ");
+      if(ratio) {
+        std::cout << "" << std::endl;
+        std::cout << "WARNING: building ratio " << num[iratio-1] <<"/"<<denum[iratio-1]<<": Check uncertainties!!" << std::endl;
+        ratio->Print("");
+        std::cout << "" << std::endl;
+      }
+    }
+    if(ratio){
+      ratio->Scale(scale[iratio-1]);
+      h->SetBinContent(iratio, ratio->GetYield());
+      h->SetBinError  (iratio, ratio->GetTotalError(0/* 0 = no normalization error */));
+      h->GetXaxis()->SetBinLabel(iratio, Form("#splitline{%s}{%s}",Form("#times%2.2f",  scale[iratio-1]), ratio->GetLatexName()));
+    }
+    else {
+      h->GetXaxis()->SetBinLabel(iratio, Form("#frac{%d}{%d}",num[iratio-1], denum[iratio-1]));
+      
+    }
+  }
+  
+  return h;
+
+
+
+}
+
+void   PrepareThermalModelsInputFiles(TClonesArray * arr, Int_t system, Float_t energy, TString centrality, Bool_t separateCharges)  {
+  // If "Separate charges" is true, tries to dump both charges are dumped
+  TClonesArray * arrOut = new TClonesArray("AliParticleYield");
+  const Int_t npart = 12;
+  Int_t particles  [npart] = {kPDGPi ,kPDGK   ,kPDGKS0, kPDGKStar, kPDGPhi, kPDGProton , kPDGLambda , kPDGXi  , kPDGOmega , kPDGDeuteron, kPDGHyperTriton, kPDGHE3    };
+  Int_t isSum[npart]       = {1      ,1       ,0      , 1        , 0      , 1           ,0           ,1        ,1          ,0           , 1              , 0          };
+
+  Int_t ipartOut = 0; // Index for the array
+  for(Int_t ipart = 0; ipart < npart; ipart++){
+    if(!separateCharges) {
+      AliParticleYield * part = AliParticleYield::FindParticle(arr, particles[ipart], system, energy, centrality,  isSum[ipart]);
+      if(!part && isSum[ipart]) {
+        //Could not find the particle, but the sum was requested: build the sum!
+        part = AliParticleYield::FindParticle(arr, particles[ipart], system, energy, centrality,  0);
+        AliParticleYield * part2 = AliParticleYield::FindParticle(arr, -particles[ipart], system, energy, centrality,  0);
+        if(part2 && part) part = AliParticleYield::Add(part, part2);
+        else part = 0;
+      }
+      if(part) new((*arrOut)[ipartOut++]) AliParticleYield(*part);
+    }
+    else {
+      // ignore isSum and try to find both particles
+      Bool_t notFound = 0;
+      AliParticleYield * part = AliParticleYield::FindParticle(arr, particles[ipart], system, energy, centrality,  0);
+      if(part) new((*arrOut)[ipartOut++]) AliParticleYield(*part);
+      else notFound=1;
+      // Try to find antiparticle (-pdg code)
+      part = AliParticleYield::FindParticle(arr, -particles[ipart], system, energy, centrality,  0);
+      if(part) new((*arrOut)[ipartOut++]) AliParticleYield(*part);
+      else if (notFound) {
+        // If neither charge was found, check if we at least have the sum 
+        part = AliParticleYield::FindParticle(arr, abs(particles[ipart]), system, energy, centrality,  1);
+        if (part) new((*arrOut)[ipartOut++]) AliParticleYield(*part);
+      }
+      
+    }
+  }
+  std::cout << "Particles for thermal model fits:" << std::endl; 
+  arrOut->Print("short");
+  std::cout << "" << std::endl;
+  // Write GSI input file
+  TIter it(arrOut);
+  AliParticleYield * part = 0;
+  ofstream fout(Form("gsi_System_%d_Energy_%0.0f_Centr_%s_BothCharges_%d", system, energy, centrality.Data(), separateCharges));
+  while ((part = (AliParticleYield*) it.Next())){
+    fout << part->GetYield() << " " << part->GetTotalError() << std::endl;
+  }
+  fout.close();
+  // Write thermus file
+  AliParticleYield::WriteThermusFile(arrOut, Form("thermus_System_%d_Energy_%0.0f_Centr_%s_BothCharges_%d", system, energy, centrality.Data(), separateCharges));
+}
+
+
+TH1F * GetHistoYields(TClonesArray * arr, Int_t system, Float_t energy, TString centrality, const char * histotitle) {
+
+  const Int_t npart = 11;
+  Int_t pdg  [npart]    = {kPDGPi, kPDGK  , kPDGProton , kPDGLambda , kPDGXi  , kPDGOmega , kPDGDeuteron , kPDGHE3      , kPDGHyperTriton , kPDGPhi , kPDGKStar};
+  //  Int_t isSum[npart]    = {1      ,1      ,1           ,0           ,1        ,1          ,0             ,0             ,1                ,0        ,1      };
+  Int_t isSum[npart]    = {0,0,0,0,0,0,0,0,0,0,1};
+  //  Double_t scale[npart] = {1      ,1      ,3           ,1           ,30       ,250         ,50            ,10            ,4e5              ,2       ,2      };
+  Double_t scale[npart] = {1,5,30,30,200,1000,4000,2e6,2e6,20,20,};
+  TH1F * h = new TH1F(Form("hPart_%d_%0.0f_%s",system,energy,centrality.Data()), histotitle, npart, 1, npart+1);
+
+  //  Double_t isSum = -1; // if this is -1, then the sum criterion is ignored
+  for(Int_t ipart = 1; ipart <= npart; ipart++){
+    AliParticleYield * part = AliParticleYield::FindParticle(arr, pdg[ipart-1], system, energy, centrality,isSum[ipart-1]);
+    if(!part) continue;
+    part->Scale(scale[ipart-1]);
+    h->SetBinContent(ipart, part->GetYield());
+    h->SetBinError  (ipart, part->GetTotalError(0/* 0 = no normalization error */));
+    h->GetXaxis()->SetBinLabel(ipart, Form("#splitline{%s}{%s}",Form("#times%2.0g",  scale[ipart-1]), part->GetLatexName()));
+
+  }
+  return h;
+}
index fd23ae7adcf90a2449918521202ec6f7ccdd38a3..d995ffcd0a16bd74075b94aa4b0c6c10111da99b 100644 (file)
@@ -53,17 +53,17 @@ Bool_t AliAnalysisEtSelector::IsNeutralMcParticle(Int_t pIdx, AliStack& s, const
   return s.IsPhysicalPrimary(pIdx) &&(TMath::Abs(TMath::Abs(pdg.Charge()) - fCuts->GetMonteCarloNeutralParticle())<1e-3);
 }
 
-Bool_t AliAnalysisEtSelector::IsEmEtParticle(const Int_t pdgCode) const
+Bool_t AliAnalysisEtSelector::IsEmEtParticle(Int_t pdgCode) const
 {
   return pdgCode == fgGammaCode || pdgCode == fgPi0Code || pdgCode == fgEtaCode || pdgCode == fgEPlusCode || pdgCode == fgEMinusCode;
 }
 
 
-Bool_t AliAnalysisEtSelector::PrimaryIsEmEtParticle(const Int_t pIdx, AliStack& stack) const
+Bool_t AliAnalysisEtSelector::PrimaryIsEmEtParticle(Int_t pIdx, AliStack& stack) const
 {
   return IsEmEtParticle(stack.Particle(GetPrimary(pIdx, stack))->GetPdgCode());
 }
-Int_t AliAnalysisEtSelector::GetPrimary(const Int_t partIdx, AliStack& stack) const
+Int_t AliAnalysisEtSelector::GetPrimary(Int_t partIdx, AliStack& stack) const
 { // get primary
   if(partIdx >= 0) 
   {
index fe1730cd30b2e0800e0de8012047a0ecc03b7bd6..15eded5536a711a2fe2c859ae9bc996d32bc31e8 100644 (file)
@@ -61,13 +61,13 @@ public:
     virtual Bool_t IsNeutralMcParticle(Int_t pIdx, AliStack& s, const TParticlePDG& pdg) const;
     
     // Is it an EM E_T particle
-    virtual Bool_t IsEmEtParticle(const Int_t pdgCode) const;
+    virtual Bool_t IsEmEtParticle(Int_t pdgCode) const;
     
     // Does the particle come from an EM E_T primary ?
-    virtual Bool_t PrimaryIsEmEtParticle(const Int_t pIdx, AliStack &stack) const;
+    virtual Bool_t PrimaryIsEmEtParticle(Int_t pIdx, AliStack &stack) const;
 
     // Get the index of primary particle for the particle
-    Int_t GetPrimary(const Int_t partIdx, AliStack &stack) const;
+    Int_t GetPrimary(Int_t partIdx, AliStack &stack) const;
     
     // Cut on geometrical acceptance 
     virtual Bool_t CutGeometricalAcceptance(const TParticle &/*part*/) { return true; }
index a3bdcf662c46ab2f30d8bbc4a40c8675720335d3..a2d18c00abc9fa9336fab21a21fe265661cd5909 100755 (executable)
@@ -7,6 +7,7 @@
 #  $period       e.g. LHC13g
 #  $runNumber     e.g. 169123
 #  $pass         e.g. cpass1,pass1,passMC
+#  #ocdbStorage  e.g. "raw://", "local://./OCDB"
 
 runLevelQA()
 {
index c78d16ed0c3532cc1120d716b1499725a076be12..8aaf93e31d3728ed6d7b8a1e0a9a9b87ebb4f386 100755 (executable)
@@ -4,13 +4,14 @@
 #  $period       e.g. LHC13g
 #  $runNumber     e.g. 169123
 #  $pass         e.g. cpass1,pass1,passMC
+#  #ocdbStorage  e.g. "raw://", "local://./OCDB"
 
 runLevelQA()
 {
   qaFile=$1
 
   cp $ALICE_ROOT/T0/MakeTrendT0.C .
-  aliroot -b -q -l "MakeTrendT0.C(\"$qaFile\",${runNumber})" 
+  aliroot -b -q -l "MakeTrendT0.C(\"$qaFile\",${runNumber},\"${ocdbStorage}\")" 
 }
 
 periodLevelQA()
index 17599325b3627e6980ecfaa9510fec4edf86a8f7..e00c732de33f465fe3f2df9e71c789627de77843 100755 (executable)
@@ -4,13 +4,14 @@
 #  $period       e.g. LHC13g
 #  $runNumber     e.g. 169123
 #  $pass         e.g. cpass1,pass1,passMC
+#  #ocdbStorage  e.g. "raw://", "local://./OCDB"
 
 runLevelQA()
 {
   qaFile=$1
 
   cp $ALICE_ROOT/PWGPP/TOF/trending/MakeTrendingTOFQA.C .
-  aliroot -b -q -l "MakeTrendingTOFQA.C(\"$qaFile\",${runNumber})" 
+  aliroot -b -q -l "MakeTrendingTOFQA.C(\"$qaFile\",${runNumber},kFALSE,kFALSE,kFALSE,\"${ocdbStorage}\")" 
 }
 
 periodLevelQA()
index 4ccbf3739db371614a5a5a21209039e2db3c4ee1..58be3d1369d8aaa5f25df4476c2c8fdc0b287e7a 100755 (executable)
@@ -4,6 +4,7 @@
 #  $period       e.g. LHC13g
 #  $runNumer     e.g. 169123
 #  $pass         e.g. cpass1,pass1,passMC
+#  #ocdbStorage  e.g. "raw://", "local://./OCDB"
 
 runLevelQA()
 {
@@ -69,8 +70,16 @@ makeHTMLindexPerPeriod()
 <a href="1overPt_vs_run.png">Delta 1/pt</a><br>
 <a href="DCAOffset_vs_run.png">DCAs</a><br>
 <br>
-<a href="Runs/index.html">Qualities relevant to individual runs</a><br>
+<p><font size="4">Runs:</font></p>
+EOF
+
+local dir
+for dir in 000*; do
+  echo "<a href="${dir}">${dir}</a>" >> index.html
+done
 
+  cat >> index.html <<EOF
+<br>
 <p><font size="4">Additional plots</font></p>
 <a href="occ_AC_Side_IROC_OROC_vs_run.png">Nr of Chambers with lower gain (occupancy)</a><br>
 <br>
index b10aa3f4b06b78a64397426fdb4c62cea97d38f0..ba7f724e67e05199529bd42d591efec753dc2a85 100755 (executable)
@@ -4,6 +4,7 @@
 #  $period       e.g. LHC13g
 #  $runNumer     e.g. 169123
 #  $pass         e.g. cpass1,pass1,passMC
+#  #ocdbStorage  e.g. "raw://", "local://./OCDB"
 
 runLevelHighPtTreeQA()
 {
index 77f8f1267186c8593324f6320c610a4655d587da..7c2544476ccdf539825f5a78ef4240afb1e0fb3a 100644 (file)
@@ -25,3 +25,390 @@ MAILTO="fbellini@cern.ch"
 
 #alien user name
 alienUserName="mkrzewic"
+
+#map the mc production manes to their anchor years
+mcProductionMap="
+LHC14c2_p3=2013
+LHC14c2_p2=2013
+LHC14c2=2013
+LHC14c1c=2010
+LHC14c1b=2010
+LHC14c1a=2010
+LHC14b8b=2010
+LHC14b8a=2010
+LHC14b7=2011
+LHC14b6d=2010
+LHC14b6c=2010
+LHC14b6b=2010
+LHC14b6a=2010
+LHC14b5=2013
+LHC14b4=2013
+LHC14b3c=2013
+LHC14b3b=2013
+LHC14b3a=2013
+LHC14b2=2013
+LHC14b1h=2011
+LHC14b1g=2011
+LHC14b1f=2011
+LHC14b1e=2011
+LHC14b1d=2011
+LHC14b1c=2011
+LHC14b1b=2011
+LHC14b1a=2011
+LHC14a6=2011
+LHC14a2=2013
+LHC14a1c=2011
+LHC14a1b=2011
+LHC14a1a=2011
+LHC13f7=2010
+LHC13f6d=2011
+LHC13f6c=2011
+LHC13f6b=2011
+LHC13f6a=2011
+LHC13f5=2011
+LHC13f4=2013
+LHC13f2d=2013
+LHC13f2c=2013
+LHC13f2b=2013
+LHC13f2a=2013
+LHC13f1r=2013
+LHC13f1q=2013
+LHC13f1p=2013
+LHC13f1o=2013
+LHC13f1n=2013
+LHC13f1m=2013
+LHC13f1l=2013
+LHC13f1k=2013
+LHC13f1j=2013
+LHC13f1i=2013
+LHC13f1h=2013
+LHC13f1g=2013
+LHC13f1f=2013
+LHC13f1e=2013
+LHC13f1d=2013
+LHC13f1c=2013
+LHC13f1b=2013
+LHC13f1a=2013
+LHC13e7=2013
+LHC13e6r=2013
+LHC13e6q=2013
+LHC13e6p=2013
+LHC13e6o=2013
+LHC13e6n=2013
+LHC13e6m=2013
+LHC13e6l=2013
+LHC13e6k=2013
+LHC13e6j=2013
+LHC13e6i=2013
+LHC13e6h=2013
+LHC13e6g=2013
+LHC13e6f=2013
+LHC13e6e=2013
+LHC13e6d=2013
+LHC13e6c=2013
+LHC13e6b=2013
+LHC13e6a=2013
+LHC13e5=2011
+LHC13e4=2011
+LHC13e3h=2010
+LHC13e3g=2010
+LHC13e3f=2010
+LHC13e3e=2010
+LHC13e3d=2010
+LHC13e3c=2010
+LHC13e3b_plus=2010
+LHC13e3b=2010
+LHC13e3a=2010
+LHC13e2_plus=2010
+LHC13e2_fix=2010
+LHC13e2=2010
+LHC13e1c=2011
+LHC13e1b=2011
+LHC13e1a=2011
+LHC13d9=2012
+LHC13d8=2012
+LHC13d7=2012
+LHC13d6=2012
+LHC13d4=2010
+LHC13d3_plus=2013
+LHC13d3=2013
+LHC13d2b=2010
+LHC13d22=2010
+LHC13d2=2010
+LHC13d21=2010
+LHC13d20=2010
+LHC13d19=2010
+LHC13d18e_plus=2010
+LHC13d18e=2010
+LHC13d18d_plus=2010
+LHC13d18d=2010
+LHC13d18c_plus=2010
+LHC13d18c=2010
+LHC13d18b_plus=2010
+LHC13d18b=2010
+LHC13d17a=2010
+LHC13d16_fix=2010
+LHC13d16=2010
+LHC13d15=2010
+LHC13d14=2010
+LHC13d13=2010
+LHC13d12=2010
+LHC13d1=2011
+LHC13d10=2013
+LHC13c9=2013
+LHC13c8=2013
+LHC13c7c=2011
+LHC13c7b=2011
+LHC13c7a=2011
+LHC13c6b=2013
+LHC13c6a=2013
+LHC13c5=2013
+LHC13c4=2013
+LHC13c3=2013
+LHC13c2=2013
+LHC13c17c=2010
+LHC13c17b=2011
+LHC13b4_plus=2013
+LHC13b4_fix=2013
+LHC13b4=2013
+LHC13b3_fix2=2012
+LHC13b3_fix=2013
+LHC13b3=2013
+LHC13b2_plus=2013
+LHC13b2_fix_3=2013
+LHC13b2_fix_2=2013
+LHC13b2_fix_1=2013
+LHC13b2_efix_p4=2013
+LHC13b2_efix_p3=2013
+LHC13b2_efix_p2=2013
+LHC13b2_efix_p1=2013
+LHC13b2=2013
+LHC13b1=2013
+LHC12i6=2011
+LHC12i5b=2011
+LHC12i5a=2011
+LHC12i4b=2011
+LHC12i4a=2011
+LHC12i3=2011
+LHC12i2=2010
+LHC12i1b=2011
+LHC12i1a=2011
+LHC12h6=2012
+LHC12h5=2012
+LHC12h4=2011
+LHC12h3=2011
+LHC12h2=2011
+LHC12h1=2011
+LHC12g6b=2012
+LHC12g6a=2012
+LHC12g5=2012
+LHC12g4c=2012
+LHC12g4b_fix=2012
+LHC12g4b=2012
+LHC12g4a=2012
+LHC12g4=2012
+LHC12g2=2012
+LHC12g1_fix=2012
+LHC12g1=2012
+LHC12f2b=2011
+LHC12f2a=2011
+LHC12f1b=2011
+LHC12f1a=2011
+LHC12e6=2011
+LHC12e5=2012
+LHC12e4=2010
+LHC12e3=2010
+LHC12e2=2010
+LHC12e1=2011
+LHC12d4c=2010
+LHC12d4b=2010
+LHC12d4a=2010
+LHC12d3=2011
+LHC12d2_plus=2011
+LHC12d2=2011
+LHC12d1=2010
+LHC12c4=2010
+LHC12c2=2010
+LHC12c1b=2012
+LHC12c1a=2012
+LHC12b3=2011
+LHC12b2=2010
+LHC12b1c=2011
+LHC12b1b=2011
+LHC12b1a=2011
+LHC12a9_plus=2011
+LHC12a9=2011
+LHC12a8c=2011
+LHC12a8b=2011
+LHC12a8a=2011
+LHC12a7=2010
+LHC12a5c=2010
+LHC12a5b=2010
+LHC12a5a=2010
+LHC12a4=2010
+LHC12a3f=2010
+LHC12a3e=2010
+LHC12a3d=2010
+LHC12a3c=2010
+LHC12a3b=2010
+LHC12a3a=2010
+LHC12a2=2010
+LHC12a19f=2011
+LHC12a19e=2011
+LHC12a19d=2011
+LHC12a19c=2011
+LHC12a19b=2011
+LHC12a19a=2011
+LHC12a18=2010
+LHC12a17i_fix=2011
+LHC12a17i=2011
+LHC12a17h_fix=2011
+LHC12a17h=2011
+LHC12a17g_fix=2011
+LHC12a17g=2011
+LHC12a17f_fix=2011
+LHC12a17f=2011
+LHC12a17e_fix=2011
+LHC12a17e=2011
+LHC12a17d_fix=2011
+LHC12a17d=2011
+LHC12a17c_fix=2011
+LHC12a17c=2011
+LHC12a17b_fix_jemalloc=2011
+LHC12a17b_fix=2011
+LHC12a17b=2011
+LHC12a17a_fix=2011
+LHC12a17a=2011
+LHC12a15h=2011
+LHC12a15g=2011
+LHC12a15f=2011
+LHC12a15e_fix=2011
+LHC12a15e=2011
+LHC12a15d=2011
+LHC12a15c=2011
+LHC12a15b=2011
+LHC12a15a=2011
+LHC12a14=2010
+LHC12a13b=2011
+LHC12a13a=2011
+LHC12a12_bis=2010
+LHC12a12=2010
+LHC12a11i=2010
+LHC12a11h=2010
+LHC12a11g=2010
+LHC12a11f=2010
+LHC12a11e=2010
+LHC12a11d=2010
+LHC12a11c=2010
+LHC12a11b=2010
+LHC12a11a=2010
+LHC12a10_bis=2011
+LHC11h6=2010
+LHC11h5c=2011
+LHC11h5b=2011
+LHC11h5a=2011
+LHC11h4c=2010
+LHC11h4b=2010
+LHC11h4a=2010
+LHC11h3c=2010
+LHC11h3b=2010
+LHC11h3a=2010
+LHC11h2c=2010
+LHC11h2b=2010
+LHC11h2a=2010
+LHC11h1c=2010
+LHC11h1b=2010
+LHC11h1a=2010
+LHC11f5=2010
+LHC11f3=2010
+LHC11f2=2011
+LHC11f1=2010
+LHC11e3b=2011
+LHC11e3a_plus=2011
+LHC11e3a=2011
+LHC11d6g=2010
+LHC11d6f=2010
+LHC11d6e=2010
+LHC11d6d=2010
+LHC11d6c=2010
+LHC11d6b=2010
+LHC11d6a=2010
+LHC11d5_full=2010
+LHC11d5=2010
+LHC11d4a=2010
+LHC11d3=2011
+LHC11d2=2010
+LHC11d1=2010
+LHC11c_raw=2010
+LHC11c4=2010
+LHC11c3b=2010
+LHC11c3a=2010
+LHC11c2b=2010
+LHC11c2a=2010
+LHC11c1=2010
+LHC11b9=2010
+LHC11b9_1=2010
+LHC11b8=2011
+LHC11b7=2010
+LHC11b6=2010
+LHC11b5=2010
+LHC11b4=2010
+LHC11b3=2010
+LHC11b2=2010
+LHC11b1c=2010
+LHC11b1b=2010
+LHC11b1a=2010
+LHC11b12b=2010
+LHC11b12a=2010
+LHC11b11a=2010
+LHC11b10c=2011
+LHC11b10b=2011
+LHC11b10a=2011
+LHC11a9b=2010
+LHC11a9a=2010
+LHC11a6b=2010
+LHC11a6a=2010
+LHC11a5a=2010
+LHC11a4_tris=2010
+LHC11a4=2016
+LHC11a10b_plus=2010
+LHC11a10b_bis=2010
+LHC11a10b=2010
+LHC11a10a_bis=2010
+LHC11a10a=2010
+LHC10h8_spc=2010
+LHC10h7=2010
+LHC10h6=2010
+LHC10h5=2010
+LHC10h4=2010
+LHC10h3=2010
+LHC10h2=2010
+LHC10h1a=2010
+LHC10h16=2010
+LHC10h13=2010
+LHC10h1=2010
+LHC10f7a=2010
+LHC10f7=2010
+LHC10f6=2010
+LHC10f1=2010
+LHC10e9=2010
+LHC10e8=2010
+LHC10e7=2010
+LHC10e6=2010
+LHC10e5=2010
+LHC10e4=2010
+LHC10e3=2010
+LHC10e2=2010
+LHC10e20=2010
+LHC10e13=2010
+LHC10e12=2010
+LHC10e10=2010
+LHC10d4a=2010
+LHC10d4=2010
+LHC10d3=2010
+LHC10d2=2010
+LHC10d15=2010
+LHC10d14=2010
+LHC10d1=2010
+LHC10a5b=2011
+"
index 76762346757d97139ec9fa5d6d08c5c297a19e0e..fac5365af91de79f59e0fa34e8484c72eb3782a1 100755 (executable)
@@ -130,6 +130,7 @@ updateQA()
         echo "could not guess run data from ${qaFile}"
         continue
       fi
+      echo "anchorYear for ${originalPeriod} is: ${anchorYear}"
 
       tmpProductionDir=${tmpPrefix}/${dataType}/${year}/${period}/${pass}
       tmpRunDir=${tmpProductionDir}/000${runNumber}
@@ -495,8 +496,9 @@ guessRunData()
   dataType=""
   originalPass=""
   originalPeriod=""
+  anchorYear=""
 
-  local shortRunNumber=""
+  shortRunNumber=""
   oldIFS=${IFS}
   local IFS="/"
   declare -a path=( $1 )
@@ -519,12 +521,19 @@ guessRunData()
     (( i++ ))
   done
   originalPass=${pass}
+  [[ -n ${shortRunNumber} && "${legoTrainRunNumber}" =~ ${shortRunNumber} ]] && legoTrainRunNumber=""
   [[ -z ${legoTrainRunNumber} ]] && pass=${path[$((dirDepth-1))]}
-  [[ "${dataType}" =~ ^sim$ ]] && pass="passMC" && runNumber=${shortRunNumber} && originalPass=""
+  [[ "${dataType}" =~ ^sim$ ]] && pass="passMC" && runNumber=${shortRunNumber} && originalPass="" #for MC not from lego, the runnumber is identified as lego train number, thus needs to be nulled
   [[ -n ${legoTrainRunNumber} ]] && pass+="_lego${legoTrainRunNumber}"
   
   #modify the OCDB: set the year
-  ocdbStorage=$(setYear ${year} ${ocdbStorage})
+  if [[ ${dataType} =~ sim ]]; then 
+    anchorYear=$(for x in $mcProductionMap ; do [[ "${x}" =~ ${originalPeriod} ]] && echo ${x} && break; done)
+    anchorYear=${anchorYear#*=}
+    ocdbStorage=$(setYear ${anchorYear} ${ocdbStorage})
+  else
+    ocdbStorage=$(setYear ${year} ${ocdbStorage})
+  fi
 
   #if [[ -z ${dataType} || -z ${year} || -z ${period} || -z ${runNumber}} || -z ${pass} ]];
   if [[ -z ${runNumber}} ]]
index f3106d296d53f5671dbd52478ec5758dc4994198..f94890f0c85cf38a7152e90cbd73cd9e3dd802d4 100644 (file)
@@ -12,7 +12,8 @@ Int_t MakeTrendingTOFQA(TString qafilename,       //full path of the QA output;
                        Int_t runNumber,          // run number
                        Bool_t isMC=kFALSE,       //MC flag, to disable meaningless checks
                        Bool_t canvasE = kFALSE,  //enable display plots on canvas and save png
-                       Bool_t IsOnGrid = kFALSE) //set to kTRUE to access files on the grid
+                       Bool_t IsOnGrid = kFALSE, //set to kTRUE to access files on the grid
+      TString ocdbStorage = "raw://") //set the default ocdb storage
 {   
   // macro to generate tree with TOF QA trending variables
   // access qa PWGPP output files  
@@ -163,7 +164,7 @@ Int_t MakeTrendingTOFQA(TString qafilename,       //full path of the QA output;
   ttree->Branch("avT0fillRes",&avT0fillRes,"avT0fillRes/D"); //t0 fill res
 
   //save quantities for trending
-  goodChannelRatio=(Double_t)GetGoodTOFChannelsRatio(runNumber);
+  goodChannelRatio=(Double_t)GetGoodTOFChannelsRatio(runNumber,kFALSE,ocdbStorage);
        
   //--------------------------------- Multiplicity ----------------------------------//
 
@@ -182,12 +183,14 @@ Int_t MakeTrendingTOFQA(TString qafilename,       //full path of the QA output;
     avRawTime=hRawTime->GetMean();
     if (!isMC){
       hRawTime->Fit("landau","RQ0","",200.,250.);
-      peakRawTime=(hRawTime->GetFunction("landau"))->GetParameter(1);
-      spreadRawTime=(hRawTime->GetFunction("landau"))->GetParameter(2);
-      peakRawTimeErr=(hRawTime->GetFunction("landau"))->GetParError(1);
-      spreadRawTimeErr=(hRawTime->GetFunction("landau"))->GetParError(2);
-      printf("Main peak raw time (landau): mean = %f +- %f\n",peakTime,peakTimeErr );
-      printf("Main peak raw time (landau): spread = %f +- %f\n",spreadRawTime,spreadRawTimeErr );
+      if (hRawTime->GetFunction("landau")) {
+       peakRawTime=(hRawTime->GetFunction("landau"))->GetParameter(1);
+       spreadRawTime=(hRawTime->GetFunction("landau"))->GetParameter(2);
+       peakRawTimeErr=(hRawTime->GetFunction("landau"))->GetParError(1);
+       spreadRawTimeErr=(hRawTime->GetFunction("landau"))->GetParError(2);
+      //       printf("Main peak raw time (landau): mean = %f +- %f\n",peakTime,peakTimeErr );
+      // printf("Main peak raw time (landau): spread = %f +- %f\n",spreadRawTime,spreadRawTimeErr );
+      }
     } else {
       printf("Reminder: Raw time not available in MC simulated data.");
     }
@@ -199,14 +202,16 @@ Int_t MakeTrendingTOFQA(TString qafilename,       //full path of the QA output;
   if ((hTime)&&(hTime->GetEntries()>0)) {
     avTime=hTime->GetMean();
     hTime->Fit("landau","RQ0","",0.,50.);
-    peakTime=(hTime->GetFunction("landau"))->GetParameter(1);
-    spreadTime=(hTime->GetFunction("landau"))->GetParameter(2);
-    peakTimeErr=(hTime->GetFunction("landau"))->GetParError(1);
-    spreadTimeErr=(hTime->GetFunction("landau"))->GetParError(2);
-    negTimeRatio=((Double_t)hTime->Integral(1,3)*100.)/((Double_t)hTime->Integral());
-    printf("Main peak time (landau): mean = %f +- %f\n",peakTime,peakTimeErr );
-    printf("Main peak time (landau): spread = %f +- %f\n",spreadTime,spreadTimeErr );
-    printf("Ratio of tracks with time<12.5 ns / total = %f\n",negTimeRatio );
+    if (hTime->GetFunction("landau")) {
+      peakTime=(hTime->GetFunction("landau"))->GetParameter(1);
+      spreadTime=(hTime->GetFunction("landau"))->GetParameter(2);
+      peakTimeErr=(hTime->GetFunction("landau"))->GetParError(1);
+      spreadTimeErr=(hTime->GetFunction("landau"))->GetParError(2);
+      negTimeRatio=((Double_t)hTime->Integral(1,3)*100.)/((Double_t)hTime->Integral());
+    // printf("Main peak time (landau): mean = %f +- %f\n",peakTime,peakTimeErr );
+    // printf("Main peak time (landau): spread = %f +- %f\n",spreadTime,spreadTimeErr );
+    // printf("Ratio of tracks with time<12.5 ns / total = %f\n",negTimeRatio );
+    }
     MakeUpHisto(hTime, "matched tracks", 20, kBlue+2);
     hTime->Rebin(2);
     
@@ -222,12 +227,14 @@ Int_t MakeTrendingTOFQA(TString qafilename,       //full path of the QA output;
   if ((hTot)&&(hTot->GetEntries()>0)){
     avTot=hTot->GetMean();
     hTot->Fit("gaus","","",0.,50.);
-    peakTot=(hTot->GetFunction("gaus"))->GetParameter(1);
-    spreadTot=(hTot->GetFunction("gaus"))->GetParameter(2);
-    peakTotErr=(hTot->GetFunction("gaus"))->GetParError(1);
-    spreadTotErr=(hTot->GetFunction("gaus"))->GetParError(2);
-    printf("Main peak ToT (gaus): mean = %f +- %f\n",peakTot,peakTotErr );
-    printf("Main peak ToT (gaus): spread = %f +- %f\n",spreadTot,spreadTotErr );       
+    if (hTot->GetFunction("gaus")) {
+      peakTot=(hTot->GetFunction("gaus"))->GetParameter(1);
+      spreadTot=(hTot->GetFunction("gaus"))->GetParameter(2);
+      peakTotErr=(hTot->GetFunction("gaus"))->GetParError(1);
+      spreadTotErr=(hTot->GetFunction("gaus"))->GetParError(2);
+    // printf("Main peak ToT (gaus): mean = %f +- %f\n",peakTot,peakTotErr );
+    // printf("Main peak ToT (gaus): spread = %f +- %f\n",spreadTot,spreadTotErr );    
+    }
   }      
   MakeUpHisto(hTot, "matched tracks", 8, kViolet-3);
   
@@ -306,7 +313,7 @@ Int_t MakeTrendingTOFQA(TString qafilename,       //full path of the QA output;
     if (hMatchingVsPt->GetFunction("pol0")){
       matchEffLinFit1Gev=(hMatchingVsPt->GetFunction("pol0"))->GetParameter(0);
       matchEffLinFit1GevErr=(hMatchingVsPt->GetFunction("pol0"))->GetParError(0);      
-      printf("Matching efficiency fit param is %f +- %f\n",matchEffLinFit1Gev,matchEffLinFit1GevErr );
+      //printf("Matching efficiency fit param is %f +- %f\n",matchEffLinFit1Gev,matchEffLinFit1GevErr );
     }
   } else {
     printf("WARNING: matching efficiency plot has 0 entries. Skipped!\n");
@@ -374,8 +381,8 @@ Int_t MakeTrendingTOFQA(TString qafilename,       //full path of the QA output;
       spreadPiDiffTime=(hPionDiff->GetFunction("gaus"))->GetParameter(2);
       peakPiDiffTimeErr=(hPionDiff->GetFunction("gaus"))->GetParError(1);
       spreadPiDiffTimeErr=(hPionDiff->GetFunction("gaus"))->GetParError(2);
-      printf("Main peak t-t_exp (gaus): mean = %f +- %f\n",peakPiDiffTime,peakPiDiffTimeErr );
-      printf("Main peak t-t_exp (gaus): spread = %f +- %f\n",spreadPiDiffTime,spreadPiDiffTimeErr );
+      // printf("Main peak t-t_exp (gaus): mean = %f +- %f\n",peakPiDiffTime,peakPiDiffTimeErr );
+      // printf("Main peak t-t_exp (gaus): spread = %f +- %f\n",spreadPiDiffTime,spreadPiDiffTimeErr );
     }
   }
   
@@ -519,13 +526,15 @@ Int_t MakeTrendingTOFQA(TString qafilename,       //full path of the QA output;
   if ((hT0A)&&(hT0A->GetEntries()>0)) {
     avT0A = hT0A->GetMean();
     hT0A->Fit("gaus","RQ0", "", -1000., 1000.);
-    peakT0A=(hT0A->GetFunction("gaus"))->GetParameter(1);
-    spreadT0A=(hT0A->GetFunction("gaus"))->GetParameter(2);
-    peakT0AErr=(hT0A->GetFunction("gaus"))->GetParError(1);
-    spreadT0AErr=(hT0A->GetFunction("gaus"))->GetParError(2);  
-    printf("Main peak T0A(gaus): mean = %f +- %f\n",peakT0A,peakT0AErr );
-    printf("Main peak T0A (gaus): spread = %f +- %f\n",spreadT0A,spreadT0AErr );        
-    //add integral of main peak over total
+    if (hT0A->GetFunction("gaus")) {
+      peakT0A=(hT0A->GetFunction("gaus"))->GetParameter(1);
+      spreadT0A=(hT0A->GetFunction("gaus"))->GetParameter(2);
+      peakT0AErr=(hT0A->GetFunction("gaus"))->GetParError(1);
+      spreadT0AErr=(hT0A->GetFunction("gaus"))->GetParError(2);        
+      // printf("Main peak T0A(gaus): mean = %f +- %f\n",peakT0A,peakT0AErr );
+      // printf("Main peak T0A (gaus): spread = %f +- %f\n",spreadT0A,spreadT0AErr );
+      //add integral of main peak over total
+    }
   }
   MakeUpHisto(hT0A, "events", 8, kBlue);
   hT0A->Rebin(2);
@@ -534,13 +543,15 @@ Int_t MakeTrendingTOFQA(TString qafilename,       //full path of the QA output;
   if ((hT0C)&&(hT0C->GetEntries()>0)) {
     avT0C=hT0C->GetMean();
     hT0C->Fit("gaus","RQ0","", -1000., 1000.);
-    peakT0C=(hT0C->GetFunction("gaus"))->GetParameter(1);
-    spreadT0C=(hT0C->GetFunction("gaus"))->GetParameter(2);
-    peakT0CErr=(hT0C->GetFunction("gaus"))->GetParError(1);
-    spreadT0CErr=(hT0C->GetFunction("gaus"))->GetParError(2);  
-    printf("Main peak T0C(gaus): mean = %f +- %f\n",peakT0C,peakT0CErr );
-    printf("Main peak T0C (gaus): spread = %f +- %f\n",spreadT0C,spreadT0CErr );        
-    //add integral of main peak over total
+    if (hT0C->GetFunction("gaus")) {
+      peakT0C=(hT0C->GetFunction("gaus"))->GetParameter(1);
+      spreadT0C=(hT0C->GetFunction("gaus"))->GetParameter(2);
+      peakT0CErr=(hT0C->GetFunction("gaus"))->GetParError(1);
+      spreadT0CErr=(hT0C->GetFunction("gaus"))->GetParError(2);        
+      // printf("Main peak T0C(gaus): mean = %f +- %f\n",peakT0C,peakT0CErr );
+      // printf("Main peak T0C (gaus): spread = %f +- %f\n",spreadT0C,spreadT0CErr );
+      //add integral of main peak over total
+    }
   }
   MakeUpHisto(hT0C, "events", 8, kGreen+1);
   hT0C->Rebin(2);
@@ -549,16 +560,18 @@ Int_t MakeTrendingTOFQA(TString qafilename,       //full path of the QA output;
   if ((hT0AC)&&(hT0AC->GetEntries()>0)) {
     avT0AC=hT0AC->GetMean();
     hT0AC->Fit("gaus","RQ0", "",-1000., 1000.);
-    peakT0AC=(hT0AC->GetFunction("gaus"))->GetParameter(1);
-    spreadT0AC=(hT0AC->GetFunction("gaus"))->GetParameter(2);
-    peakT0ACErr=(hT0AC->GetFunction("gaus"))->GetParError(1);
-    spreadT0ACErr=(hT0AC->GetFunction("gaus"))->GetParError(2);        
-    printf("Main peak T0AC(gaus): mean = %f +- %f\n",peakT0AC,peakT0ACErr );
-    printf("Main peak T0AC (gaus): spread = %f +- %f\n",spreadT0AC,spreadT0ACErr );     
+    if (hT0AC->GetFunction("gaus")) {
+      peakT0AC=(hT0AC->GetFunction("gaus"))->GetParameter(1);
+      spreadT0AC=(hT0AC->GetFunction("gaus"))->GetParameter(2);
+      peakT0ACErr=(hT0AC->GetFunction("gaus"))->GetParError(1);
+      spreadT0ACErr=(hT0AC->GetFunction("gaus"))->GetParError(2);      
+      // printf("Main peak T0AC(gaus): mean = %f +- %f\n",peakT0AC,peakT0ACErr );
+      // printf("Main peak T0AC (gaus): spread = %f +- %f\n",spreadT0AC,spreadT0ACErr );        
+    }
   }
   MakeUpHisto(hT0AC, "events", 8, kRed+1);
   hT0AC->Rebin(2);
-
+  
   TLegend *lT0 = new TLegend(0.7125881,0.6052519,0.979435,0.7408306,NULL,"brNDC");
   lT0->SetTextSize(0.041);
   lT0->AddEntry(hT0AC, "T0 A&C","L");
@@ -566,20 +579,21 @@ Int_t MakeTrendingTOFQA(TString qafilename,       //full path of the QA output;
   lT0->AddEntry(hT0C, "T0 C","L");
   lT0->SetFillColor(kWhite);
   lT0->SetShadowColor(0);
-
+  
   TH1F*hT0res=(TH1F*)timeZeroList->FindObject("hT0DetRes");
   if ((hT0res)&&(hT0res->GetEntries()>0)) {
     avT0res=hT0res->GetMean();
     hT0res->Fit("gaus");
-    peakT0res=(hT0res->GetFunction("gaus"))->GetParameter(1);
-    spreadT0res=(hT0res->GetFunction("gaus"))->GetParameter(2);
-    peakT0resErr=(hT0res->GetFunction("gaus"))->GetParError(1);
-    spreadT0resErr=(hT0res->GetFunction("gaus"))->GetParError(2);      
-    printf("Main peak T0res(gaus): mean = %f +- %f\n",peakT0res,peakT0resErr );
-    printf("Main peak T0res (gaus): spread = %f +- %f\n",spreadT0res,spreadT0resErr );  
+    if (hT0res->GetFunction("gaus")) {
+      peakT0res=(hT0res->GetFunction("gaus"))->GetParameter(1);
+      spreadT0res=(hT0res->GetFunction("gaus"))->GetParameter(2);
+      peakT0resErr=(hT0res->GetFunction("gaus"))->GetParError(1);
+      spreadT0resErr=(hT0res->GetFunction("gaus"))->GetParError(2);    
+      // printf("Main peak T0res(gaus): mean = %f +- %f\n",peakT0res,peakT0resErr );
+      // printf("Main peak T0res (gaus): spread = %f +- %f\n",spreadT0res,spreadT0resErr );     
     //add integral of main peak over total
+    }
   }
-  
   TH1F*hT0fillRes=(TH1F*)timeZeroList->FindObject("hT0fillRes");
   if ((hT0fillRes)&&(hT0fillRes->GetEntries()>0)) {
     avT0fillRes=hT0fillRes->GetMean();
index 86c5615c1ea914c576c6e2f2a325d8e2419514d2..cb524bfd31c9110a813e1fcd83d578a5d4d0dfbd 100755 (executable)
@@ -2173,7 +2173,6 @@ done
   goCreateQAplots "${PWD}/qa.list" "${productionID}" "QAplots" "${configFile}" "${extraOpts[@]}" filteringList="${PWD}/filtering.list" &>createQAplots.log
 
   #make a merged summary tree out of the QA trending, dcs trees and log summary trees
-  echo goMakeMergedSummaryTree PWD=$PWD
   goMakeMergedSummaryTree
 
   #if set, email the summary
index c3255953d9271ab1bc52b01df0974a3c112475a5..f4d2561441cdb64537ee7cc65d97c2f27d9d9544 100644 (file)
@@ -1,4 +1,4 @@
-AliAnalysisTaskUpcPsi2s *AddTaskUpcPsi2s(Bool_t runTree = kTRUE,Bool_t runHist = kTRUE){
+AliAnalysisTaskUpcPsi2s *AddTaskUpcPsi2s(Bool_t runTree = kTRUE,Bool_t runHist = kTRUE,Bool_t runSyst = kFALSE){
 
   
   //--- get the current analysis manager ---//
@@ -24,6 +24,7 @@ AliAnalysisTaskUpcPsi2s *AddTaskUpcPsi2s(Bool_t runTree = kTRUE,Bool_t runHist =
   task->SetRunTree(runTree);
   task->SetRunHist(runHist);
   task->SetIsMC(isMC);
+  task->SetRunSyst(runSyst);
   mgr->AddTask(task);
 
 
index 152c09ae9fa93501b036db8a433450ec8a7b648b..360cfdb1345dc24925291840450a20b9c5b1cdcd 100644 (file)
@@ -65,7 +65,7 @@ using std::endl;
 
 //_____________________________________________________________________________
 AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s() 
-  : AliAnalysisTaskSE(),fType(0),isMC(kFALSE),fRunTree(kTRUE),fRunHist(kTRUE),fPIDResponse(0),fJPsiTree(0),fPsi2sTree(0),
+  : AliAnalysisTaskSE(),fType(0),isMC(kFALSE),fRunTree(kTRUE),fRunHist(kTRUE),fRunSystematics(kFALSE),fPIDResponse(0),fJPsiTree(0),fPsi2sTree(0),
     fRunNum(0),fPerNum(0),fOrbNum(0),fL0inputs(0),fL1inputs(0),
     fTOFtrig1(0), fTOFtrig2(0),
     fVtxContrib(0),fVtxChi2(0),fVtxNDF(0),
@@ -75,8 +75,9 @@ AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s()
     fJPsiAODTracks(0),fJPsiESDTracks(0),fPsi2sAODTracks(0),fPsi2sESDTracks(0),fGenPart(0),
     fListTrig(0),fHistCcup4TriggersPerRun(0), fHistCcup7TriggersPerRun(0), fHistCcup2TriggersPerRun(0),
     fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0), fHistMBTriggersPerRun(0),fHistCentralTriggersPerRun(0),fHistSemiCentralTriggersPerRun(0),
-    fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),
-    fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0)
+    fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),fHistDiLeptonMass(0),
+    fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0),
+    fListSystematics(0),fListJPsiLoose(0),fListJPsiTight(0),fListPsi2sLoose(0),fListPsi2sTight(0)
 
 {
 
@@ -87,7 +88,7 @@ AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s()
 
 //_____________________________________________________________________________
 AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s(const char *name) 
-  : AliAnalysisTaskSE(name),fType(0),isMC(kFALSE),fRunTree(kTRUE),fRunHist(kTRUE),fPIDResponse(0),fJPsiTree(0),fPsi2sTree(0),
+  : AliAnalysisTaskSE(name),fType(0),isMC(kFALSE),fRunTree(kTRUE),fRunHist(kTRUE),fRunSystematics(kFALSE),fPIDResponse(0),fJPsiTree(0),fPsi2sTree(0),
     fRunNum(0),fPerNum(0),fOrbNum(0),fL0inputs(0),fL1inputs(0),
     fTOFtrig1(0), fTOFtrig2(0),
     fVtxContrib(0),fVtxChi2(0),fVtxNDF(0),
@@ -97,8 +98,9 @@ AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s(const char *name)
     fJPsiAODTracks(0),fJPsiESDTracks(0),fPsi2sAODTracks(0),fPsi2sESDTracks(0),fGenPart(0),
     fListTrig(0),fHistCcup4TriggersPerRun(0), fHistCcup7TriggersPerRun(0), fHistCcup2TriggersPerRun(0),
     fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0), fHistMBTriggersPerRun(0),fHistCentralTriggersPerRun(0),fHistSemiCentralTriggersPerRun(0),
-    fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),
-    fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0)
+    fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),fHistDiLeptonMass(0),
+    fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0),
+    fListSystematics(0),fListJPsiLoose(0),fListJPsiTight(0),fListPsi2sLoose(0),fListPsi2sTight(0)
 
 {
 
@@ -323,6 +325,10 @@ void AliAnalysisTaskUpcPsi2s::UserCreateOutputObjects()
   fHistDiMuonMass = new TH1D("fHistDiMuonMass","Invariant mass of J/#psi candidates",100,2,5);
   fHistDiMuonMass->GetXaxis()->SetTitle("Invariant mass(#mu^{+}#mu^{-}) (GeV/c)");
   fListHist->Add(fHistDiMuonMass);
+  
+  fHistDiLeptonMass = new TH1D("fHistDiLeptonMass","Invariant mass of J/#psi candidates",130,2.1,6.0);
+  fHistDiLeptonMass->GetXaxis()->SetTitle("Invariant mass(l^{+}l^{-}) (GeV/c)");
+  fListHist->Add(fHistDiLeptonMass);
 
   TString CutNamePsi2s[14] = {"Analyzed","Triggered","Vertex cut","V0 decision","Neutron ZDC cut","Four good tracks",
                                "DiLepton - DiPion","Like sign leptons","Like sign pions","Like sign both","Oposite sign","PID","Dimuom","Dielectron"};
@@ -336,10 +342,17 @@ void AliAnalysisTaskUpcPsi2s::UserCreateOutputObjects()
   fHistPsi2sMassVsPt->GetYaxis()->SetTitle("#it{p}_{T} (GeV/#it{c})");
   fListHist->Add(fHistPsi2sMassVsPt);
   
-  fHistPsi2sMassCoherent = new TH1D("fHistPsi2sMassAllCoherent","Invariant mass of coherent #psi(2s) candidates",100,3,6);
+  fHistPsi2sMassCoherent = new TH1D("fHistPsi2sMassAllCoherent","Invariant mass of coherent #psi(2s) candidates",50,2.5,5.5);
   fHistPsi2sMassCoherent->GetXaxis()->SetTitle("Invariant mass(l^{+}l^{-}#pi^{+}#pi^{-}) (GeV/c)");
   fListHist->Add(fHistPsi2sMassCoherent);
   
+  fListSystematics = new TList();
+  fListSystematics->SetOwner();
+  fListSystematics->SetName("fListSystematics");
+  fListHist->Add(fListSystematics);
+  InitSystematics();
+
+  
   PostData(1, fJPsiTree);
   PostData(2, fPsi2sTree);
   PostData(3, fListTrig);
@@ -347,6 +360,90 @@ void AliAnalysisTaskUpcPsi2s::UserCreateOutputObjects()
 
 }//UserCreateOutputObjects
 
+//_____________________________________________________________________________
+void AliAnalysisTaskUpcPsi2s::InitSystematics()
+{ 
+
+fListJPsiLoose = new TList();
+fListJPsiLoose->SetOwner();
+fListJPsiLoose->SetName("JPsiLoose");
+fListSystematics->Add(fListJPsiLoose);
+
+TH1D *fHistJPsiNClusLoose = new TH1D("JPsiNClusLoose","Invariant mass of J/#psi candidates",130,2.1,6.0);
+fListJPsiLoose->Add(fHistJPsiNClusLoose);
+
+TH1D *fHistJPsiChi2Loose = new TH1D("JPsiChi2Loose","Invariant mass of J/#psi candidates",130,2.1,6.0);
+fListJPsiLoose->Add(fHistJPsiChi2Loose);
+
+TH1D *fHistJPsiDCAzLoose = new TH1D("JPsiDCAzLoose","Invariant mass of J/#psi candidates",130,2.1,6.0);
+fListJPsiLoose->Add(fHistJPsiDCAzLoose);
+
+TH1D *fHistJPsiDCAxyLoose = new TH1D("JPsiDCAxyLoose","Invariant mass of J/#psi candidates",130,2.1,6.0);
+fListJPsiLoose->Add(fHistJPsiDCAxyLoose);
+
+TH1D *fHistJPsiITShitsLoose = new TH1D("JPsiITShitsLoose","Invariant mass of J/#psi candidates",130,2.1,6.0);
+fListJPsiLoose->Add(fHistJPsiITShitsLoose);
+
+
+fListJPsiTight = new TList();
+fListJPsiTight->SetOwner();
+fListJPsiTight->SetName("JPsiTight");
+fListSystematics->Add(fListJPsiTight);
+
+TH1D *fHistJPsiNClusTight = new TH1D("JPsiNClusTight","Invariant mass of J/#psi candidates",130,2.1,6.0);
+fListJPsiTight->Add(fHistJPsiNClusTight);
+
+TH1D *fHistJPsiChi2Tight = new TH1D("JPsiChi2Tight","Invariant mass of J/#psi candidates",130,2.1,6.0);
+fListJPsiTight->Add(fHistJPsiChi2Tight);
+
+TH1D *fHistJPsiDCAzTight = new TH1D("JPsiDCAzTight","Invariant mass of J/#psi candidates",130,2.1,6.0);
+fListJPsiTight->Add(fHistJPsiDCAzTight);
+
+TH1D *fHistJPsiDCAxyTight = new TH1D("JPsiDCAxyTight","Invariant mass of J/#psi candidates",130,2.1,6.0);
+fListJPsiTight->Add(fHistJPsiDCAxyTight);
+
+
+fListPsi2sLoose = new TList();
+fListPsi2sLoose->SetOwner();
+fListPsi2sLoose->SetName("Psi2sLoose");
+fListSystematics->Add(fListPsi2sLoose);
+
+TH1D *fHistPsi2sNClusLoose = new TH1D("Psi2sNClusLoose","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sLoose->Add(fHistPsi2sNClusLoose);
+
+TH1D *fHistPsi2sChi2Loose = new TH1D("Psi2sChi2Loose","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sLoose->Add(fHistPsi2sChi2Loose);
+
+TH1D *fHistPsi2sDCAzLoose = new TH1D("Psi2sDCAzLoose","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sLoose->Add(fHistPsi2sDCAzLoose);
+
+TH1D *fHistPsi2sDCAxyLoose = new TH1D("Psi2sDCAxyLoose","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sLoose->Add(fHistPsi2sDCAxyLoose);
+
+TH1D *fHistPsi2sITShitsLoose = new TH1D("Psi2sITShitsLoose","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sLoose->Add(fHistPsi2sITShitsLoose);
+
+
+fListPsi2sTight = new TList();
+fListPsi2sTight->SetOwner();
+fListPsi2sTight->SetName("Psi2sTight");
+fListSystematics->Add(fListPsi2sTight);
+
+TH1D *fHistPsi2sNClusTight = new TH1D("Psi2sNClusTight","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sTight->Add(fHistPsi2sNClusTight);
+
+TH1D *fHistPsi2sChi2Tight = new TH1D("Psi2sChi2Tight","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sTight->Add(fHistPsi2sChi2Tight);
+
+TH1D *fHistPsi2sDCAzTight = new TH1D("Psi2sDCAzTight","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sTight->Add(fHistPsi2sDCAzTight);
+
+TH1D *fHistPsi2sDCAxyTight = new TH1D("Psi2sDCAxyTight","Invariant mass of #psi(2S) candidates",50,2.5,5.5);
+fListPsi2sTight->Add(fHistPsi2sDCAxyTight);
+
+
+}
+
 //_____________________________________________________________________________
 void AliAnalysisTaskUpcPsi2s::UserExec(Option_t *) 
 {
@@ -422,6 +519,8 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
   //input event
   AliAODEvent *aod = (AliAODEvent*) InputEvent();
   if(!aod) return;
+  
+ // cout<<"Event number: "<<((TTree*) GetInputData(0))->GetTree()->GetReadEntry()<<endl;
 
   fHistNeventsJPsi->Fill(1);
   fHistNeventsPsi2s->Fill(1);
@@ -459,7 +558,10 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
   if( fZDCAenergy > 8200 || fZDCCenergy > 8200) return;
   
   fHistNeventsJPsi->Fill(5);
-  fHistNeventsPsi2s->Fill(5);
+  fHistNeventsPsi2s->Fill(5); 
+  
+  //Systematics - cut variation
+  if(fRunSystematics) RunAODsystematics(aod);
 
   //Two tracks loop
   Int_t nGoodTracks = 0;
@@ -467,9 +569,12 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
   
   TLorentzVector vLepton[4], vPion[4], vCandidate, vDilepton;
   Short_t qLepton[4], qPion[4];
-  UInt_t nLepton=0, nPion=0, nHighPt=0;
-  Double_t fRecTPCsignal[5];
+  UInt_t nLepton=0, nPion=0, nHighPt=0, nSpdHits=0;
+  Double_t fRecTPCsignal[5], fRecTPCsignalDist;
+  Int_t fChannel = 0;
   Int_t mass[3]={-1,-1,-1};
+  Double_t TrackPt[5]={0,0,0,0,0};
+  Double_t MeanPt = -1;
   
    
   //Four track loop
@@ -486,10 +591,13 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
       AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
       if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
       delete trk_clone;
-
       if(TMath::Abs(dca[1]) > 2) continue;
+      Double_t cut_DCAxy = 4*(0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
+      if(TMath::Abs(dca[0]) > cut_DCAxy) continue;
+      if((trk->HasPointOnITSLayer(0))||(trk->HasPointOnITSLayer(1))) nSpdHits++;
      
       TrackIndex[nGoodTracks] = itr;
+      TrackPt[nGoodTracks] = trk->Pt();
       nGoodTracks++;
                                  
       if(nGoodTracks > 4) break;  
@@ -498,12 +606,13 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
   nLepton=0; nPion=0; nHighPt=0;
   mass[0]= -1; mass[1]= -1, mass[2]= -1;
   
-  if(nGoodTracks == 4){
+  if(nGoodTracks == 4 && nSpdHits>1){
+         MeanPt = GetMedian(TrackPt);
          fHistNeventsPsi2s->Fill(6);
          for(Int_t i=0; i<4; i++){
                AliAODTrack *trk = aod->GetTrack(TrackIndex[i]);
                
-               if(trk->Pt() > 1){   
+               if(trk->Pt() > MeanPt){   
                        fRecTPCsignal[nLepton] = trk->GetTPCsignal();      
                        qLepton[nLepton] = trk->Charge();
                        if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
@@ -531,14 +640,26 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
                if((qLepton[0]*qLepton[1] > 0) && (qPion[0]*qPion[1] > 0)) fHistNeventsPsi2s->Fill(10);
                if((qLepton[0]*qLepton[1] < 0) && (qPion[0]*qPion[1] < 0)){
                        fHistNeventsPsi2s->Fill(11);
-                       if(mass[0] == mass[1]) {
+                       if(mass[0] != -1 && mass[1] != -1) {
                                fHistNeventsPsi2s->Fill(12); 
                                vCandidate = vLepton[0]+vLepton[1]+vPion[0]+vPion[1];
                                vDilepton = vLepton[0]+vLepton[1];
                                fHistPsi2sMassVsPt->Fill(vCandidate.M(),vCandidate.Pt());
-                               if(vCandidate.Pt() < 0.15) fHistPsi2sMassCoherent->Fill(vCandidate.M());
-                               if(mass[0] == 0) fHistNeventsPsi2s->Fill(13);   
-                               if(mass[0] == 1) fHistNeventsPsi2s->Fill(14);
+                               fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
+                               if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
+                               else { 
+                                       fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
+                                       if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1; 
+                                       }
+                               
+                               if(fChannel == -1) {
+                                       fHistNeventsPsi2s->Fill(13);
+                                       if(vDilepton.M() > 3.0 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.15) fHistPsi2sMassCoherent->Fill(vCandidate.M());
+                                       }       
+                               if(fChannel == 1){ 
+                                       fHistNeventsPsi2s->Fill(14);
+                                       if(vDilepton.M() > 2.6 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.3) fHistPsi2sMassCoherent->Fill(vCandidate.M());
+                                       }
                                }
                        }
                }
@@ -561,7 +682,8 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
       if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
       delete trk_clone;
       if(TMath::Abs(dca[1]) > 2) continue;
-      if(TMath::Abs(dca[0]) > 0.2) continue;
+      Double_t cut_DCAxy = (0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
+      if(TMath::Abs(dca[0]) > cut_DCAxy) continue;
      
       TrackIndex[nGoodTracks] = itr;
       nGoodTracks++;
@@ -597,16 +719,24 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
                                fHistNeventsJPsi->Fill(9);
                                fHistTPCsignalJPsi->Fill(fRecTPCsignal[0],fRecTPCsignal[1]);
                                if(nHighPt == 2) fHistNeventsJPsi->Fill(10);
-                               if(mass[0] == mass[1] && mass[0] != -1) {
+                               if(mass[0] != -1 && mass[1] != -1) {
                                        fHistNeventsJPsi->Fill(11);
                                        vCandidate = vLepton[0]+vLepton[1];
+                                       fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
+                                       if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
+                                       else { 
+                                               fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
+                                               if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1; 
+                                               }
                                        if( vCandidate.M() > 2.8 && vCandidate.M() < 3.2) fHistDiLeptonPtJPsi->Fill(vLepton[0].Pt(),vLepton[1].Pt());
-                                       if(mass[0] == 0) {
+                                       if(fChannel == -1) {
                                                fHistDiMuonMass->Fill(vCandidate.M());
+                                               if(vCandidate.Pt()<0.15)fHistDiLeptonMass->Fill(vCandidate.M());
                                                fHistNeventsJPsi->Fill(12);
                                                }
-                                       if(mass[0] == 1) {
+                                       if(fChannel == 1) {
                                                fHistDiElectronMass->Fill(vCandidate.M());
+                                               if(vCandidate.Pt()<0.3)fHistDiLeptonMass->Fill(vCandidate.M());
                                                fHistNeventsJPsi->Fill(13);
                                                }
                                        }
@@ -620,6 +750,394 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
 
 }
 
+//_____________________________________________________________________________
+void AliAnalysisTaskUpcPsi2s::RunAODsystematics(AliAODEvent* aod)
+{
+
+  Double_t fJPsiSels[4];
+
+  fJPsiSels[0] =   70; //min number of TPC clusters
+  fJPsiSels[1] =   4; //chi2
+  fJPsiSels[2] =   2; //DCAz
+  fJPsiSels[3] =   1; // DCAxy 1x 
+
+  Double_t fJPsiSelsMid[4];
+
+  fJPsiSelsMid[0] =   70; //min number of TPC clusters
+  fJPsiSelsMid[1] =   4; //chi2
+  fJPsiSelsMid[2] =   2; //DCAz
+  fJPsiSelsMid[3] =   1; // DCAxy 1x 
+  
+  Double_t fJPsiSelsLoose[4];
+
+  fJPsiSelsLoose[0] =   60; //min number of TPC clusters
+  fJPsiSelsLoose[1] =   5; //chi2
+  fJPsiSelsLoose[2] =   3; //DCAz
+  fJPsiSelsLoose[3] =   2; // DCAxy 2x 
+
+  Double_t fJPsiSelsTight[4];
+
+  fJPsiSelsTight[0] =   80; //min number of TPC clusters
+  fJPsiSelsTight[1] =   3.5; //chi2
+  fJPsiSelsTight[2] =   1; //DCAz
+  fJPsiSelsTight[3] =   0.5; // DCAxy 0.5x 
+
+  Int_t nGoodTracks = 0;
+  Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
+  
+  TLorentzVector vLepton[4], vPion[4], vCandidate, vDilepton;
+  Short_t qLepton[4],qPion[4];
+  UInt_t nLepton=0, nPion=0, nHighPt=0;
+  Double_t fRecTPCsignal[5], fRecTPCsignalDist;
+  Int_t fChannel = 0;
+
+  AliAODVertex *fAODVertex = aod->GetPrimaryVertex();
+  
+  TDatabasePDG *pdgdat = TDatabasePDG::Instance();
+  
+  TParticlePDG *partMuon = pdgdat->GetParticle( 13 );
+  Double_t muonMass = partMuon->Mass();
+  
+  TParticlePDG *partElectron = pdgdat->GetParticle( 11 );
+  Double_t electronMass = partElectron->Mass();
+  
+  TParticlePDG *partPion = pdgdat->GetParticle( 211 );
+  Double_t pionMass = partPion->Mass();
+
+  
+for(Int_t i=0; i<5; i++){
+         //cout<<"Loose sytematics, cut"<<i<<endl;
+         for(Int_t j=0; j<4; j++){
+                 if(i==j) fJPsiSels[j] = fJPsiSelsLoose[i];
+                 else fJPsiSels[j] = fJPsiSelsMid[j];
+         }
+  //Two track loop
+  nGoodTracks = 0;
+  for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
+    AliAODTrack *trk = aod->GetTrack(itr);
+    if( !trk ) continue;
+    if(!(trk->TestFilterBit(1<<0))) continue;
+
+      if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
+      if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
+      if(i!=4){ if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;}
+      Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
+      AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
+      if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
+      delete trk_clone;
+      Double_t cut_DCAxy = (0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
+      
+      if(trk->GetTPCNcls() < fJPsiSels[0])continue;
+      if(trk->Chi2perNDF() > fJPsiSels[1])continue;
+      if(TMath::Abs(dca[1]) > fJPsiSels[2]) continue;      
+      if(TMath::Abs(dca[0]) > fJPsiSels[3]*cut_DCAxy) continue;
+     
+      TrackIndex[nGoodTracks] = itr;
+      nGoodTracks++;
+                                 
+      if(nGoodTracks > 2) break;  
+  }//Track loop
+    
+  Int_t mass[3]={-1,-1,-1};
+  fChannel = 0;
+  nLepton=0; nHighPt=0;
+  
+  if(nGoodTracks == 2){
+         for(Int_t k=0; k<2; k++){
+               AliAODTrack *trk = aod->GetTrack(TrackIndex[k]);                
+               if(trk->Pt() > 1) nHighPt++;     
+               fRecTPCsignal[nLepton] = trk->GetTPCsignal();     
+               qLepton[nLepton] = trk->Charge();
+               if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
+                               vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
+                               mass[nLepton] = 0;
+                               }
+               if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
+                               vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
+                               mass[nLepton] = 1;
+                               }
+                       nLepton++;              
+               }               
+       if(nLepton == 2){
+               if(qLepton[0]*qLepton[1] < 0 && nHighPt > 0 && (mass[0]!=-1 || mass[1]!=-1)){
+                       vCandidate = vLepton[0]+vLepton[1];               
+                       fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
+                       if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
+                       else { 
+                               fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
+                               if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1; 
+                               }
+                       if(fChannel == -1 && vCandidate.Pt()<0.15) ((TH1D*)(fListJPsiLoose->At(i)))->Fill(vCandidate.M()); 
+                       if(fChannel == 1 && vCandidate.Pt()<0.3) ((TH1D*)(fListJPsiLoose->At(i)))->Fill(vCandidate.M());        
+                       }
+               }
+  }
+}//loose cuts
+
+for(Int_t i=0; i<4; i++){
+         //cout<<"Tight sytematics, cut"<<i<<endl;
+         for(Int_t j=0; j<4; j++){
+                 if(i==j) fJPsiSels[j] = fJPsiSelsTight[i];
+                 else fJPsiSels[j] = fJPsiSelsMid[j];
+         }
+  //Two track loop
+  nGoodTracks = 0;
+  for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
+    AliAODTrack *trk = aod->GetTrack(itr);
+    if( !trk ) continue;
+    if(!(trk->TestFilterBit(1<<0))) continue;
+
+      if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
+      if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
+      if((!trk->HasPointOnITSLayer(0))&&(!trk->HasPointOnITSLayer(1))) continue;
+      Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
+      AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
+      if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
+      delete trk_clone;
+      Double_t cut_DCAxy = (0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
+      
+      if(trk->GetTPCNcls() < fJPsiSels[0])continue;
+      if(trk->Chi2perNDF() > fJPsiSels[1])continue;
+      if(TMath::Abs(dca[1]) > fJPsiSels[2]) continue;      
+      if(TMath::Abs(dca[0]) > fJPsiSels[3]*cut_DCAxy) continue;
+     
+      TrackIndex[nGoodTracks] = itr;
+      nGoodTracks++;
+                                 
+      if(nGoodTracks > 2) break;  
+  }//Track loop
+    
+  Int_t mass[3]={-1,-1,-1};
+  fChannel = 0;
+  nLepton=0; nHighPt=0;
+  
+  if(nGoodTracks == 2){
+         for(Int_t k=0; k<2; k++){
+               AliAODTrack *trk = aod->GetTrack(TrackIndex[k]);                
+               if(trk->Pt() > 1) nHighPt++;     
+               fRecTPCsignal[nLepton] = trk->GetTPCsignal();     
+               qLepton[nLepton] = trk->Charge();
+               if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
+                               vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
+                               mass[nLepton] = 0;
+                               }
+               if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
+                               vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
+                               mass[nLepton] = 1;
+                               }
+                       nLepton++;              
+               }               
+       if(nLepton == 2){
+               if(qLepton[0]*qLepton[1] < 0 && nHighPt > 0 && (mass[0]!=-1 || mass[1]!=-1)){
+                       vCandidate = vLepton[0]+vLepton[1];               
+                       fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
+                       if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
+                       else { 
+                               fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
+                               if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1; 
+                               }
+                       if(fChannel == -1 && vCandidate.Pt()<0.15) ((TH1D*)(fListJPsiTight->At(i)))->Fill(vCandidate.M()); 
+                       if(fChannel == 1 && vCandidate.Pt()<0.3) ((TH1D*)(fListJPsiTight->At(i)))->Fill(vCandidate.M());        
+                       }
+               }
+  }
+}//tight cuts
+
+//---------------------------------------------Psi2s------------------------------------------------------------------------
+
+  Double_t fPsi2sSels[4];
+
+  fPsi2sSels[0] =   50; //min number of TPC clusters
+  fPsi2sSels[1] =   4; //chi2
+  fPsi2sSels[2] =   2; //DCAz
+  fPsi2sSels[3] =   4; // DCAxy 1x 
+
+  Double_t fPsi2sSelsMid[4];
+
+  fPsi2sSelsMid[0] =   50; //min number of TPC clusters
+  fPsi2sSelsMid[1] =   4; //chi2
+  fPsi2sSelsMid[2] =   2; //DCAz
+  fPsi2sSelsMid[3] =   4; // DCAxy 1x 
+  
+  Double_t fPsi2sSelsLoose[4];
+
+  fPsi2sSelsLoose[0] =   60; //min number of TPC clusters
+  fPsi2sSelsLoose[1] =   5; //chi2
+  fPsi2sSelsLoose[2] =   3; //DCAz
+  fPsi2sSelsLoose[3] =   6; // DCAxy 2x 
+
+  Double_t fPsi2sSelsTight[4];
+
+  fPsi2sSelsTight[0] =   70; //min number of TPC clusters
+  fPsi2sSelsTight[1] =   3.5; //chi2
+  fPsi2sSelsTight[2] =   1; //DCAz
+  fPsi2sSelsTight[3] =   2; // DCAxy 0.5x 
+
+  nGoodTracks = 0; nLepton=0; nHighPt=0; fChannel = 0;
+  Int_t nSpdHits = 0;
+  Double_t TrackPt[5]={0,0,0,0,0};
+  Double_t MeanPt = -1;
+
+for(Int_t i=0; i<5; i++){
+         //cout<<"Loose systematics psi2s, cut"<<i<<endl;
+         for(Int_t j=0; j<4; j++){
+                 if(i==j) fJPsiSels[j] = fJPsiSelsLoose[i];
+                 else fJPsiSels[j] = fJPsiSelsMid[j];
+         }
+  //Four track loop
+  nGoodTracks = 0; nSpdHits = 0;
+  for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
+    AliAODTrack *trk = aod->GetTrack(itr);
+    if( !trk ) continue;
+    if(!(trk->TestFilterBit(1<<0))) continue;
+
+      if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
+      if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
+      if((trk->HasPointOnITSLayer(0))||(trk->HasPointOnITSLayer(1))) nSpdHits++;
+      Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
+      AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
+      if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
+      delete trk_clone;
+      Double_t cut_DCAxy = (0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
+      
+      if(trk->GetTPCNcls() < fJPsiSels[0])continue;
+      if(trk->Chi2perNDF() > fJPsiSels[1])continue;
+      if(TMath::Abs(dca[1]) > fJPsiSels[2]) continue;      
+      if(TMath::Abs(dca[0]) > fJPsiSels[3]*cut_DCAxy) continue;
+      if((trk->HasPointOnITSLayer(0))||(trk->HasPointOnITSLayer(1))) nSpdHits++;
+     
+      TrackIndex[nGoodTracks] = itr;
+      TrackPt[nGoodTracks] = trk->Pt();
+      nGoodTracks++;
+                                 
+      if(nGoodTracks > 4) break;  
+  }//Track loop
+    
+  Int_t mass[3]={-1,-1,-1};
+  fChannel = 0;
+  nLepton=0; nPion=0; nHighPt=0;
+  
+  if(nGoodTracks == 4){
+         if(i!=4){ if(nSpdHits<2) continue;} 
+         MeanPt = GetMedian(TrackPt);
+         for(Int_t k=0; k<4; k++){
+               AliAODTrack *trk = aod->GetTrack(TrackIndex[k]);
+               if(trk->Pt() > MeanPt){   
+                       fRecTPCsignal[nLepton] = trk->GetTPCsignal();      
+                       qLepton[nLepton] = trk->Charge();
+                       if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
+                                       vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
+                                       mass[nLepton] = 0;
+                                       }
+                       if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
+                                       vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
+                                       mass[nLepton] = 1;
+                                       }
+                       nLepton++;
+                       }
+               else{
+                       qPion[nPion] = trk->Charge();
+                       vPion[nPion].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), pionMass);
+                       nPion++;
+                       }             
+               }
+       if((qLepton[0]*qLepton[1] < 0) && (qPion[0]*qPion[1] < 0) && mass[0] != -1 && mass[1] != -1){
+               vCandidate = vLepton[0]+vLepton[1]+vPion[0]+vPion[1];
+               vDilepton = vLepton[0]+vLepton[1];
+               fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
+               if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
+               else { 
+                       fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
+                       if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1; 
+                       }                       
+               if(fChannel == -1) if(vDilepton.M() > 3.0 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.15) ((TH1D*)(fListPsi2sLoose->At(i)))->Fill(vCandidate.M());              
+               if(fChannel == 1) if(vDilepton.M() > 2.6 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.3) ((TH1D*)(fListPsi2sLoose->At(i)))->Fill(vCandidate.M());
+       }
+  }   
+}//loose cuts
+
+for(Int_t i=0; i<4; i++){
+         //cout<<"Tight systematics psi2s, cut"<<i<<endl;
+         for(Int_t j=0; j<4; j++){
+                 if(i==j) fJPsiSels[j] = fJPsiSelsTight[i];
+                 else fJPsiSels[j] = fJPsiSelsMid[j];
+         }
+  //Four track loop
+  nGoodTracks = 0; nSpdHits = 0;
+  for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
+    AliAODTrack *trk = aod->GetTrack(itr);
+    if( !trk ) continue;
+    if(!(trk->TestFilterBit(1<<0))) continue;
+
+      if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
+      if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
+      if((trk->HasPointOnITSLayer(0))||(trk->HasPointOnITSLayer(1))) nSpdHits++;
+      Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
+      AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
+      if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
+      delete trk_clone;
+      Double_t cut_DCAxy = (0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
+      
+      if(trk->GetTPCNcls() < fJPsiSels[0])continue;
+      if(trk->Chi2perNDF() > fJPsiSels[1])continue;
+      if(TMath::Abs(dca[1]) > fJPsiSels[2]) continue;      
+      if(TMath::Abs(dca[0]) > fJPsiSels[3]*cut_DCAxy) continue;
+      if((trk->HasPointOnITSLayer(0))||(trk->HasPointOnITSLayer(1))) nSpdHits++;
+     
+      TrackIndex[nGoodTracks] = itr;
+      TrackPt[nGoodTracks] = trk->Pt();
+      nGoodTracks++;
+                                 
+      if(nGoodTracks > 4) break;  
+  }//Track loop
+    
+  Int_t mass[3]={-1,-1,-1};
+  fChannel = 0;
+    nLepton=0; nPion=0; nHighPt=0;
+  
+  if(nGoodTracks == 4){
+         if(nSpdHits<2) continue; 
+         MeanPt = GetMedian(TrackPt);
+         for(Int_t k=0; k<4; k++){
+               AliAODTrack *trk = aod->GetTrack(TrackIndex[k]);
+               if(trk->Pt() > MeanPt){   
+                       fRecTPCsignal[nLepton] = trk->GetTPCsignal();      
+                       qLepton[nLepton] = trk->Charge();
+                       if(fRecTPCsignal[nLepton] > 40 && fRecTPCsignal[nLepton] < 70){
+                                       vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
+                                       mass[nLepton] = 0;
+                                       }
+                       if(fRecTPCsignal[nLepton] > 70 && fRecTPCsignal[nLepton] < 100){
+                                       vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
+                                       mass[nLepton] = 1;
+                                       }
+                       nLepton++;
+                       }
+               else{
+                       qPion[nPion] = trk->Charge();
+                       vPion[nPion].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), pionMass);
+                       nPion++;
+                       }             
+               }
+       if((qLepton[0]*qLepton[1] < 0) && (qPion[0]*qPion[1] < 0) && mass[0] != -1 && mass[1] != -1){
+               vCandidate = vLepton[0]+vLepton[1]+vPion[0]+vPion[1];
+               vDilepton = vLepton[0]+vLepton[1];
+               fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-56,2)+TMath::Power(fRecTPCsignal[1]-56,2));
+               if (fRecTPCsignalDist < 3.6*4.0) fChannel = -1;
+               else { 
+                       fRecTPCsignalDist = TMath::Sqrt(TMath::Power(fRecTPCsignal[0]-78,2)+TMath::Power(fRecTPCsignal[1]-78,2));
+                       if (fRecTPCsignalDist < 4.1*4.0) fChannel = 1; 
+                       }                       
+               if(fChannel == -1) if(vDilepton.M() > 3.0 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.15) ((TH1D*)(fListPsi2sTight->At(i)))->Fill(vCandidate.M());              
+               if(fChannel == 1) if(vDilepton.M() > 2.6 && vDilepton.M() < 3.2 && vCandidate.Pt()<0.3) ((TH1D*)(fListPsi2sTight->At(i)))->Fill(vCandidate.M());
+       }
+  }   
+}//Tight cuts
+
+
+}
 //_____________________________________________________________________________
 void AliAnalysisTaskUpcPsi2s::RunAODtree()
 {
@@ -812,7 +1330,6 @@ void AliAnalysisTaskUpcPsi2s::RunAODtree()
       AliAODTrack* trk_clone=(AliAODTrack*)trk->Clone("trk_clone");
       if(!trk_clone->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
       delete trk_clone;
-      if(!trk->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
       if(TMath::Abs(dca[1]) > 2) continue;
       Double_t cut_DCAxy = 4*(0.0182 + 0.0350/TMath::Power(trk->Pt(),1.01));
       if(TMath::Abs(dca[0]) > cut_DCAxy) continue;
@@ -1265,7 +1782,7 @@ void AliAnalysisTaskUpcPsi2s::RunESDtree()
       if(!trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam)) continue;
       trk->GetImpactParameters(dca[0],dca[1]);
       if(TMath::Abs(dca[1]) > 2) continue;
-      if(TMath::Abs(dca[1]) > 0.2) continue;
+      if(TMath::Abs(dca[0]) > 0.2) continue;
       
       TrackIndex[nGoodTracks] = itr;
       nGoodTracks++;
@@ -1395,3 +1912,26 @@ void AliAnalysisTaskUpcPsi2s::Terminate(Option_t *)
   cout<<"Analysis complete."<<endl;
 }//Terminate
 
+//_____________________________________________________________________________
+Double_t AliAnalysisTaskUpcPsi2s::GetMedian(Double_t *daArray) {
+    // Allocate an array of the same size and sort it.
+    Double_t dpSorted[4];
+    for (Int_t i = 0; i < 4; ++i) {
+        dpSorted[i] = daArray[i];
+    }
+    for (Int_t i = 3; i > 0; --i) {
+        for (Int_t j = 0; j < i; ++j) {
+            if (dpSorted[j] > dpSorted[j+1]) {
+                Double_t dTemp = dpSorted[j];
+                dpSorted[j] = dpSorted[j+1];
+                dpSorted[j+1] = dTemp;
+            }
+        }
+    }
+
+    // Middle or average of middle values in the sorted array.
+    Double_t dMedian = 0.0;
+    dMedian = (dpSorted[2] + dpSorted[1])/2.0;
+    
+    return dMedian;
+}
index 6de8e911f39823301378a92fb68e8e1217453225..f0b4737bb16be69b1e306fc026e4346a0d934f69 100644 (file)
@@ -30,6 +30,7 @@ class AliAnalysisTaskUpcPsi2s : public AliAnalysisTaskSE {
   virtual void RunAODhist();
   virtual void RunAODtree();
   virtual void RunAODMC(AliAODEvent *aod);
+  virtual void RunAODsystematics(AliAODEvent *aod);
   virtual void RunESDtrig();
   virtual void RunESDhist();
   virtual void RunESDtree();
@@ -37,13 +38,17 @@ class AliAnalysisTaskUpcPsi2s : public AliAnalysisTaskSE {
   virtual void Terminate(Option_t *);
   void SetRunTree(Bool_t runTree){fRunTree = runTree;}
   void SetRunHist(Bool_t runHist){fRunHist = runHist;}
+  void SetRunSyst(Bool_t runSyst){fRunSystematics = runSyst;}
   void SetIsMC(Bool_t MC){isMC = MC;}
+  void InitSystematics();
+  Double_t GetMedian(Double_t *daArray);
 
  private:
   Int_t fType; // 0 - ESD, 1 - AOD
   Bool_t isMC;
   Bool_t fRunTree; 
   Bool_t fRunHist;
+  Bool_t fRunSystematics;
   
   AliPIDResponse *fPIDResponse;
   
@@ -99,11 +104,18 @@ class AliAnalysisTaskUpcPsi2s : public AliAnalysisTaskSE {
   TH2D *fHistDiLeptonPtJPsi;
   TH1D *fHistDiElectronMass;
   TH1D *fHistDiMuonMass;
+  TH1D *fHistDiLeptonMass;
   
   TH1D *fHistNeventsPsi2s;
   TH2D *fHistPsi2sMassVsPt;
   TH1D *fHistPsi2sMassCoherent;
   
+  TList *fListSystematics;
+  TList *fListJPsiLoose;
+  TList *fListJPsiTight;
+  TList *fListPsi2sLoose;
+  TList *fListPsi2sTight;
+  
   AliAnalysisTaskUpcPsi2s(const AliAnalysisTaskUpcPsi2s&); //not implemented
   AliAnalysisTaskUpcPsi2s& operator =(const AliAnalysisTaskUpcPsi2s&); //not implemented
   
index e31996c69c727b6bbf62da1c32cbac12c42caa49..e9e26bd36fb9d5c6ea731865f6124ce824896c88 100644 (file)
@@ -11,8 +11,8 @@ dn: det=ACO,o=shuttle,dc=cern,dc=ch
 objectClass: detectorConfig
 det: ACO
 strictRunOrder: 0
-responsible: pedro.gonzalez@fcfm.buap.mx
-responsible: irais@fcfm.buap.mx
+responsible: mario.rodriguez.cahuantzi@cern.ch
+responsible: Arturo.Fernandez.Tellez@cern.ch
 
 dn: dcsHost=aldcsamanda.cern.ch,det=ACO,o=shuttle,dc=cern,dc=ch
 dcsPort: 1337
index 2a2ca7d1b3841d5f75e82ecd1107c9ade79b5bcf..14f9efb04e8d9b405f96d7f2ee191e31b3156252 100644 (file)
@@ -12,7 +12,6 @@ objectClass: detectorConfig
 det: TRD
 strictRunOrder: 0
 responsible: r.bailhache@gsi.de
-responsible: kramer@pcikf3.ikf.physik.uni-frankfurt.de
 responsible: hbeck@ikf.uni-frankfurt.de
 
 dn: dcsHost=aldcsamanda.cern.ch,det=TRD,o=shuttle,dc=cern,dc=ch
index a7b465426fd97f1a600b1f8da100e0601d3fe3fc..6c8b6062f47d30861b36118ca228982277c5df83 100644 (file)
@@ -11,8 +11,8 @@ dn: det=ACO,o=shuttle_prod,dc=cern,dc=ch
 objectClass: detectorConfig
 det: ACO
 strictRunOrder: 0
-responsible: pedro.gonzalez@fcfm.buap.mx
-responsible: irais@fcfm.buap.mx
+responsible: mario.rodriguez.cahuantzi@cern.ch
+responsible: Arturo.Fernandez.Tellez@cern.ch
 
 dn: dcsHost=alidcsamanda.cern.ch,det=ACO,o=shuttle_prod,dc=cern,dc=ch
 objectClass: dcsConfig
index 610d17c79dcde88bfbe222b83009217f226f0e15..a693bfec3480e7970bde48b5e9ffa8453ca01816 100644 (file)
@@ -12,7 +12,6 @@ objectClass: detectorConfig
 det: TRD
 strictRunOrder: 0
 responsible: r.bailhache@gsi.de
-responsible: kramer@pcikf3.ikf.physik.uni-frankfurt.de
 responsible: o.busch@gsi.de
 responsible: watanabe@sakura.cc.tsukuba.ac.jp
 responsible: hbeck@ikf.uni-frankfurt.de
index f21e08d1e625646cebf8461cafccf1d465f9b649..3654bea49edd4c1fcd3171a23ae298e93fd91ac6 100644 (file)
@@ -19,7 +19,7 @@
 ///////////////////////////////////////////////////////////////
 
 template <typename Value> class TVectorT;
-typedef struct TVectorT<Double_t> TVectorD;
+typedef class TVectorT<Double_t> TVectorD;
 template <typename Value> class TMatrixT;
 typedef class TMatrixT<Double_t> TMatrixD;
 template <typename Index, typename Value> class TKDTree;
index 7868dcd98b772b2b0472362efaa005aa3a5a1da7..aafbff04783cb57740b06477272717a86e1d27b5 100644 (file)
@@ -37,6 +37,7 @@ AliAODCaloCluster::AliAODCaloCluster() :
   fTrackDz(-999),
   fNExMax(0), 
   fTOF(0.),
+  fCoreEnergy(0.),
   fTracksMatched(),
   fNCells(0),
   fCellsAbsId(0x0),
@@ -65,6 +66,7 @@ AliAODCaloCluster::AliAODCaloCluster(Int_t id,
   fTrackDz(-999),
   fNExMax(0),
   fTOF(0.),
+  fCoreEnergy(0.),
   fTracksMatched(),
   fNCells(0),
   fCellsAbsId(0x0),
@@ -93,6 +95,7 @@ AliAODCaloCluster::AliAODCaloCluster(Int_t id,
   fTrackDz(-999),
   fNExMax(0),
   fTOF(0.),
+  fCoreEnergy(0.),
   fTracksMatched(),
   fNCells(0),
   fCellsAbsId(0x0),
@@ -131,6 +134,7 @@ AliAODCaloCluster::AliAODCaloCluster(const AliAODCaloCluster& clus) :
   fTrackDz(clus.fTrackDz),
   fNExMax(clus.fNExMax),
   fTOF(clus.fTOF),
+  fCoreEnergy(clus.fCoreEnergy),
   fTracksMatched(clus.fTracksMatched),
   fNCells(clus.fNCells),
   fCellsAbsId(0x0),
@@ -173,6 +177,7 @@ AliAODCaloCluster& AliAODCaloCluster::operator=(const AliAODCaloCluster& clus)
     fTrackDz=clus.fTrackDz;
     fNExMax = clus.fNExMax;
     fTOF = clus.fTOF;
+    fCoreEnergy = clus.fCoreEnergy;
     fTracksMatched = clus.fTracksMatched;
 
     fNCells= clus. fNCells;
index 4901334ab5b79deb1a06d6ffb29b80021d9408ca..4dfaef8210b08c98647b5815cb668ccd043c753a 100644 (file)
@@ -56,6 +56,9 @@ class AliAODCaloCluster : public AliAODCluster {
   Double_t GetTrackDz(void)const {return fTrackDz;}
   UChar_t  GetNExMax() const { return fNExMax; }
   Double_t GetTOF() const { return fTOF; }
+  Double_t GetCoreEnergy() const           {return fCoreEnergy ; }
 
   Int_t    GetNTracksMatched() const { return fTracksMatched.GetEntriesFast(); }
   TObject *GetTrackMatched(Int_t i) const { return fTracksMatched.At(i); }
@@ -87,6 +90,7 @@ class AliAODCaloCluster : public AliAODCluster {
   void SetNExMax(UChar_t nExMax) { fNExMax = nExMax; }
   void SetTOF(Double_t tof) { fTOF = tof; }
   void SetTrackDistance(Double_t dx, Double_t dz){fTrackDx=dx; fTrackDz=dz;}
+  void SetCoreEnergy(Double_t e)         { fCoreEnergy=e; }
 
   void SetCaloCluster(Double_t dist = -999., 
                      Double_t disp = -1., 
@@ -126,6 +130,7 @@ class AliAODCaloCluster : public AliAODCluster {
   Double32_t   fTrackDz ;         // Distance to closest track in z (eta)
   UShort_t     fNExMax;           // number of (Ex-)maxima before unfolding
   Double32_t   fTOF;              ////[0,0,12] time-of-flight
+  Double32_t   fCoreEnergy;       // energy of the core of cluster
 
   TRefArray    fTracksMatched;    // references to tracks close to cluster. First entry is the most likely match.
 
@@ -133,7 +138,7 @@ class AliAODCaloCluster : public AliAODCluster {
   UShort_t   *fCellsAbsId;        //[fNCells] array of cell absId numbers
   Double32_t *fCellsAmpFraction;  //[fNCells][0.,1.,16] array with cell amplitudes fraction.
 
-  ClassDef(AliAODCaloCluster,7);
+  ClassDef(AliAODCaloCluster,8);
 };
 
 #endif
index 81771a17899f4bb917422ea7a0e3e81a509325de..1d4985d683974d766aad01ae61037d453260c484 100644 (file)
@@ -218,7 +218,7 @@ AliAODTrack::~AliAODTrack()
   delete fCovMatrix;
   delete fDetPid;
   delete fDetectorPID;
-  delete[] fPID;
+  if (fPID) {delete[] fPID; fPID = 0;}
 }
 
 
index 30842944fb15a5b82307fa9956060e7bebc79ebd..e33625991592786fa3e50791a10c2fc78622aac2 100644 (file)
@@ -31,7 +31,7 @@
 
 #pragma read sourceClass="AliAODTrack" targetClass="AliAODTrack" source="Double32_t fPID[10]"  version="[-22]" \
  target="fPID" targetType="Double32_t*" \
-   code="{fPID = new Double32_t[10];for(Int_t isp=10;isp--;) fPID[isp]=onfile.fPID[isp];}"
+  code="{if (!fPID) fPID = new Double32_t[10];for(Int_t isp=10;isp--;) fPID[isp]=onfile.fPID[isp];}"
 
 #pragma link C++ class AliAODTrack+;
 
index 5649de382497c1be34d4e0109c4c8b3764ad7cbd..5bc487879401d2d0a777096ce48e83f4fd824da3 100644 (file)
@@ -49,7 +49,8 @@ AliESDCaloCluster::AliESDCaloCluster() :
   fNExMax(0),
   fClusterType(kUndef), 
   fTOF(0.),
-  fMCEnergyFraction(0.)
+  fMCEnergyFraction(0.),
+  fCoreEnergy(0.)
 {
   //
   // The default ESD constructor 
@@ -79,7 +80,8 @@ AliESDCaloCluster::AliESDCaloCluster(const AliESDCaloCluster& clus) :
   fNExMax(clus.fNExMax),
   fClusterType(clus.fClusterType),
   fTOF(clus.fTOF),
-  fMCEnergyFraction(clus.fMCEnergyFraction)
+  fMCEnergyFraction(clus.fMCEnergyFraction),
+  fCoreEnergy(clus.fCoreEnergy)
 {
   //
   // The copy constructor 
@@ -184,6 +186,8 @@ AliESDCaloCluster &AliESDCaloCluster::operator=(const AliESDCaloCluster& source)
   }
 
   fMCEnergyFraction = source.fMCEnergyFraction;
+
+  fCoreEnergy = source.fCoreEnergy;
   
   return *this;
 
index 396650a29b04ca360b0195f95f58f8d30a2e91ce..ace4aa401b89ccceef49940ca25e64889a677e91 100644 (file)
@@ -143,6 +143,9 @@ class AliESDCaloCluster : public AliVCluster
 
   Double_t    GetMCEnergyFraction() const           { return fMCEnergyFraction ; }
   void        SetMCEnergyFraction(Double_t e)       { fMCEnergyFraction = e    ; }
+
+  virtual Double_t    GetCoreEnergy() const           {return fCoreEnergy ; }
+  virtual void        SetCoreEnergy(Double_t e)         { fCoreEnergy=e; }
   
  protected:
   
@@ -172,8 +175,9 @@ class AliESDCaloCluster : public AliVCluster
   Double_t     fTOF;               //[0,0,12] time-of-flight
   
   Double_t     fMCEnergyFraction;          //!MC energy (embedding)
+  Double32_t   fCoreEnergy;          // energy of the core of cluster
   
-  ClassDef(AliESDCaloCluster,11)  //ESDCaloCluster 
+  ClassDef(AliESDCaloCluster,12)  //ESDCaloCluster 
 
     };
 
index 9ab809238d8dde36ed57143a75a0faa13985a92c..932a6a75e8fd54ff4bbaacae96b722334b609b4c 100644 (file)
@@ -2968,7 +2968,8 @@ Double_t AliESDtrack::GetMassForTracking() const
   return (fPIDForTracking==AliPID::kHe3 || fPIDForTracking==AliPID::kAlpha) ? -m : m;
 }
 
-void    AliESDtrack::SetTOFclusterArray(Int_t ncluster,Int_t *TOFcluster){
+
+void    AliESDtrack::SetTOFclusterArray(Int_t /*ncluster*/,Int_t */*TOFcluster*/){
   AliInfo("Method has to be implemented!");
 //   fNtofClusters=ncluster;
 //   if(TOFcluster == fTOFcluster) return;
index 99798693bb5fbd89cca87d6b46a1b0abb2c02d95..c1b8bbb6c27aac4b88a7b1a04a2cf035fa46a9b0 100644 (file)
@@ -1975,9 +1975,9 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
   static Long_t oldMres=0;
   static Long_t oldMvir=0;
   static Float_t oldCPU=0;
-  static Long_t aveDMres=0;
-  static Long_t aveDMvir=0;
-  static Float_t aveDCPU=0;
+  // static Long_t aveDMres=0;
+  // static Long_t aveDMvir=0;
+  // static Float_t aveDCPU=0;
 
   AliCodeTimerAuto("",0);
 
index 87fb42de77dc239ded1a27c660825b10557b34f5..d197d3d137386c53f5748c11d1e9b2c444c1731b 100644 (file)
@@ -916,6 +916,45 @@ Bool_t AliExternalTrackParam::Rotate(Double_t alpha) {
   return kTRUE;
 }
 
+//______________________________________________________
+Bool_t AliExternalTrackParam::RotateParamOnly(Double_t alpha)
+{
+  // rotate to new frame, ignore covariance
+  if (TMath::Abs(fP[2]) >= kAlmost1) {
+    AliError(Form("Precondition is not satisfied: |sin(phi)|>1 ! %f",fP[2])); 
+    return kFALSE;
+  }
+  //
+  if      (alpha < -TMath::Pi()) alpha += 2*TMath::Pi();
+  else if (alpha >= TMath::Pi()) alpha -= 2*TMath::Pi();
+  //
+  Double_t &fP0=fP[0];
+  Double_t &fP2=fP[2];
+  //
+  Double_t x=fX;
+  Double_t ca=TMath::Cos(alpha-fAlpha), sa=TMath::Sin(alpha-fAlpha);
+  Double_t sf=fP2, cf=TMath::Sqrt((1.- fP2)*(1.+fP2)); // Improve precision
+  // RS: check if rotation does no invalidate track model (cos(local_phi)>=0, i.e. particle
+  // direction in local frame is along the X axis
+  if ((cf*ca+sf*sa)<0) {
+    AliDebug(1,Form("Rotation failed: local cos(phi) would become %.2f",cf*ca+sf*sa));
+    return kFALSE;
+  }
+  //
+  Double_t tmp=sf*ca - cf*sa;
+
+  if (TMath::Abs(tmp) >= kAlmost1) {
+     if (TMath::Abs(tmp) > 1.+ Double_t(FLT_EPSILON))  
+        AliWarning(Form("Rotation failed ! %.10e",tmp));
+     return kFALSE;
+  }
+  fAlpha = alpha;
+  fX =  x*ca + fP0*sa;
+  fP0= -x*sa + fP0*ca;
+  fP2=  tmp;
+  return kTRUE;
+}
+
 Bool_t AliExternalTrackParam::Invert() {
   //------------------------------------------------------------------
   // Transform this track to the local coord. system rotated by 180 deg. 
index 5144c0e4115b9528c5129b96f873cc9af54f1786..208b931d12866d9b05fa7bb41a9e3a6723f90cfd 100644 (file)
@@ -59,6 +59,14 @@ class AliExternalTrackParam: public AliVTrack {
 
   }
 
+  void SetParamOnly(double x, double alpha, const double param[5]) {
+    //  Sets the parameters, neglect cov matrix
+    if      (alpha < -TMath::Pi()) alpha += 2*TMath::Pi();
+    else if (alpha >= TMath::Pi()) alpha -= 2*TMath::Pi();
+    fX=x; fAlpha=alpha;
+    for (Int_t i = 0; i < 5; i++)  fP[i] = param[i];
+  }
+
   void Set(Double_t xyz[3],Double_t pxpypz[3],Double_t cv[21],Short_t sign);
 
   static void SetMostProbablePt(Double_t pt) { fgMostProbablePt=pt; }
@@ -186,6 +194,7 @@ class AliExternalTrackParam: public AliVTrack {
   Double_t *GetResiduals(Double_t *p,Double_t *cov,Bool_t updated=kTRUE) const;
   Bool_t Update(Double_t p[2],Double_t cov[3]);
   Bool_t Rotate(Double_t alpha);
+  Bool_t RotateParamOnly(Double_t alpha);
   Bool_t Invert();
   Bool_t PropagateTo(Double_t x, Double_t b);
   Bool_t PropagateParamOnlyTo(Double_t xk, Double_t b);
index ad3f1a71995e7118c4508e311beed62dbda49856..b61dd88cca9b7ef3a47bad2427e04e972b10571b 100644 (file)
@@ -122,6 +122,9 @@ class AliVCluster : public TObject
   virtual Double_t    GetMCEnergyFraction() const           {return 0 ; }
   virtual void        SetMCEnergyFraction(Double_t)         { ; }
   
+  virtual Double_t    GetCoreEnergy() const           {return 0 ; }
+  virtual void        SetCoreEnergy(Double_t)         { ; }
+
   virtual void GetMomentum(TLorentzVector &/*tl*/, Double_t * /*v*/) { ; }
   
   ClassDef(AliVCluster,0)  //VCluster 
index 7546ced9ae8d2b3ad7d74b7f336ed11c862986f8..a9d1ff32dc8f4f14d4e00fede49f12ba5f1af4c4 100644 (file)
@@ -1,6 +1,6 @@
 #define NPMTs 24
 
-int MakeTrendT0( char *infile, int run) {
+int MakeTrendT0( char *infile, int run, char* ocdbStorage="raw://") {
 
   gSystem->Load("libANALYSIS");
   gSystem->Load("libANALYSISalice");
@@ -102,7 +102,7 @@ int MakeTrendT0( char *infile, int run) {
   //-------------------- READ OCDB TIME DELAYS ---------------------------
   // Arguments:
   AliCDBManager* man = AliCDBManager::Instance();
-  man->SetDefaultStorage("raw://");
+  man->SetDefaultStorage(ocdbStorage);
   man->SetRun(run);
   AliCDBEntry *entry = AliCDBManager::Instance()->Get("T0/Calib/TimeDelay");
   AliT0CalibTimeEq *clb = (AliT0CalibTimeEq*)entry->GetObject(); 
index ee65f2451169aa9da7766e810e5b91b8d223c518..aaadefe332f2b4acda6ed8a185d0d56b83b218dd 100644 (file)
@@ -46,6 +46,8 @@ Bool_t AliTRDtrackOnline::Fit(ROOT::Math::Minimizer *minim)
   Bool_t minSuccess = kFALSE;
 
   if (minim) {
+    minSuccess = kTRUE;
+
     TIter param(&fTrackParametrizations);
 
     while (AliTRDtrackParametrization *par = (AliTRDtrackParametrization*) param()) {
@@ -54,7 +56,7 @@ Bool_t AliTRDtrackOnline::Fit(ROOT::Math::Minimizer *minim)
       minim->Clear();
       minim->SetFunction(res);
       par->SetParams(minim);
-      minSuccess = minim->Minimize();
+      minSuccess &= minim->Minimize();
       par->GetParams(minim);
     }
   }
@@ -338,8 +340,7 @@ Double_t AliTRDtrackResiduals::DoEval(const Double_t *par) const
 
     AliTRDpadPlane *pp = fgGeometry->GetPadPlane(trkl->GetDetector());
     Float_t zlen = 0.5 * pp->GetRowSize(trkl->GetBinZ());
-    Float_t zpad = pp->GetRowPos(trkl->GetBinZ()) - zlen;
-    zpad = AliTRDtrackOnline::GetZ(trkl);
+    Float_t zpad = AliTRDtrackOnline::GetZ(trkl);
     Float_t zrel = zext - zpad;
     if (zrel > zlen)
       zrel = zlen;
@@ -348,11 +349,11 @@ Double_t AliTRDtrackResiduals::DoEval(const Double_t *par) const
 
     Float_t ycorr = trkl->GetLocalY() + TMath::Tan(TMath::Pi()/180.*pp->GetTiltingAngle()) * zrel;
 
-    deltaY = ycorr        - yext;
-    deltaZ = AliTRDtrackOnline::GetZ(trkl) - zext;
-    deltaY /= 0.3;
-    deltaZ /= 3.;
-//     printf("in layer %i: deltaY = %f, deltaZ = %f\n", layer, deltaY, deltaZ);
+    deltaY = ycorr - yext;
+    deltaZ = zpad  - zext;
+    deltaY /= 0.05;
+    deltaZ /= pp->GetRowSize(trkl->GetBinZ()) / TMath::Sqrt(12.);
+    // printf("for tracklet %i: deltaY = %f, deltaZ = %f\n", iTracklet, deltaY, deltaZ);
 
     chi2 += deltaY*deltaY + deltaZ*deltaZ;
   }
index 87135a7694bb267ed9a3e5fc6490e6ebf13ebdff..707a1db4c36c13f55e9a2cce412d90ed1b664e8a 100644 (file)
@@ -124,8 +124,9 @@ class AliTRDtrackOnline : public TObject
   void Print(Option_t *option = "") const;
 
   static Float_t GetX(AliVTrdTracklet *trkl) { return fgGeometry->GetTime0(trkl->GetDetector() % 6); }
-  static Float_t GetZ(AliVTrdTracklet *trkl) { return fgGeometry->GetPadPlane((trkl->GetDetector() % 6), (trkl->GetDetector()/6) % 5)->GetRowPos(trkl->GetBinZ()) -
-      fgGeometry->GetPadPlane((trkl->GetDetector() % 6), (trkl->GetDetector()/6) % 5)->GetRowSize(trkl->GetBinZ()); }
+  static Float_t GetZ(AliVTrdTracklet *trkl) { return
+      fgGeometry->GetPadPlane(trkl->GetDetector())->GetRowPos(trkl->GetBinZ()) -
+      .5 * fgGeometry->GetPadPlane(trkl->GetDetector())->GetRowSize(trkl->GetBinZ()); }
   static AliTRDgeometry *fgGeometry;
 
  protected:
index dda803c095c56aadefbb9f0fc4acac609caac2e7..7e9ea00f39a521e1131614c04627e3477335cddb 100644 (file)
@@ -9,11 +9,12 @@ void CheckCalibOCDB(Int_t run)
   AliVZEROCalibData *calData = (AliVZEROCalibData*)ent->GetObject();
 
   for(Int_t pmNumber = 0; pmNumber < 64; ++pmNumber) {
-    printf("Ch=%d HV=%.1f MIP=%.3f Ped0=%.1f Ped1=%.1f Thr=%1.f\n",
+    printf("Ch=%d HV=%.1f MIP=%.3f Ped0=%.1f Ped1=%.1f Thr=%1.f Dead=%s\n",
           pmNumber,
           calData->GetMeanHV(pmNumber),
           1./calData->GetMIPperADC(pmNumber),
           calData->GetPedestal(pmNumber),calData->GetPedestal(pmNumber+64),
-          calData->GetDiscriThr(pmNumber));
+          calData->GetDiscriThr(pmNumber),
+          calData->IsChannelDead(pmNumber)?"yes":"no");
   }
 }
index 2e3ec7dd5cc8380114a338cbf07cd14b47622257..16d2bb5eceff537dc7732e1a83414c349e6cce98 100644 (file)
@@ -135,6 +135,10 @@ macro(ALICE_ConfigureCompiler)
   endif(ALIPROFILE STREQUAL "YES")
 
   ALICE_RootConfig(RCFLAGS --auxcflags)
+  if ( CMAKE_CXX_COMPILER MATCHES "clang") 
+  string(REPLACE "-pthread" " " RCFLAGS "${RCFLAGS}")
+  endif ( CMAKE_CXX_COMPILER MATCHES "clang") 
+
   ALICE_RootConfig(RLFLAGS --ldflags)
 
   set(CXXFLAGS "${CXXFLAGS} ${RCFLAGS}")
index eb7f26d646eb1efb0e0dc33dbf5d1ad14349480d..f6c24a416dac87325adaeee6e727d0fc7e89bd0a 100644 (file)
@@ -67,7 +67,7 @@ set ( CLIBCXXOPTS )
 set ( CLIBCOPT )
 set ( CLIBFOPT  ${CLIBDEFS})
 
-set ( CXXWARN  "-Wall -Wno-long-long -W -Weffc++ -Wshadow -Woverloaded-virtual -ansi")
+set ( CXXWARN  "-Wall -Wno-long-long -W -Weffc++ -Wshadow -Woverloaded-virtual")
 
 if ( CMAKE_CXX_COMPILER MATCHES "clang") 
      
@@ -76,10 +76,10 @@ if ( CMAKE_CXX_COMPILER MATCHES "clang")
 else( CMAKE_CXX_COMPILER MATCHES "clang")
 
      set ( CXXSTF  "-pipe -fbounds-check -fsigned-char -fno-common -fmessage-length=0 -fno-default-inline -fno-inline -I/usr/X11R6/include -I${FINK_ROOT}/include")
+     set (CXXWARN "${CXXWARN} -ansi")
 
 endif( CMAKE_CXX_COMPILER MATCHES "clang")
 
-
 set ( CXXFLAGS  "${CXXOPT} ${CXXSTF}")
 
 set ( CXXFLAGSNO  "${CXXNOOPT} ${CXXSTF}")
index 29e3d2f884696afa66b5d0e71165342c4f1bd6ca..a42adc690ade05d32c85b21b85c03b39c594c49b 100644 (file)
@@ -32,7 +32,8 @@ if(ROOT_CONFIG AND ROOTCINT)
   ALICE_RootConfig(ROOTHASALIEN --has-alien)
   ALICE_RootConfig(ROOTHASXML --has-xml)
   # ALICE_RootConfig(ROOTHASVC  --has-vc)
-  set(ROOTCLIBS "${ROOTCLIBS} -lThread -lMinuit -lVMC -lEG -lGeom -lTreePlayer -lXMLIO -lXMLParser -lProof -lProofPlayer -lMLP -lSpectrum -L${ROOTPLUGDIR}" )
+#  set(ROOTCLIBS "${ROOTCLIBS} -lThread -lMinuit -lVMC -lEG -lGeom -lTreePlayer -lXMLIO -lXMLParser -lProof -lProofPlayer -lMLP -lSpectrum -L${ROOTPLUGDIR}" )
+  set(ROOTCLIBS "${ROOTCLIBS} -lThread -lMinuit -lVMC -lEG -lGeom -lTreePlayer -lXMLIO -lXMLParser -lProof -lProofPlayer -lMLP -lSpectrum" )
   # if(${ROOTHASVC} STREQUAL "yes")    
   #   set(ROOTCLIBS "${ROOTCLIBS} -lVc")
   # endif(${ROOTHASVC} STREQUAL "yes")