//_____________________________________________________________________________
-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)
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");
TH1F *fHOutVertex ; //control histogram for vertex SPD
TH1F *fHOutVertexT0 ; //control histogram for vertex T0
- ClassDef(AliCentralitySelectionTask, 29);
+ ClassDef(AliCentralitySelectionTask, 30);
};
#endif
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() ;
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
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) ;
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]);
// 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
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) ;
}
}
+//____________________________________________________________________________
+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
eMax=elist[iDigit] ;
}
}
-
//Try to improve accuracy
//Do not account time of soft cells:
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) ;
--- /dev/null
+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;
+}
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})
--- /dev/null
+// $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");
+}
fCentrality(0),
fV2Systematic(0),
fForceConv(kFALSE),
- fHeaviestParticle(kGenJpsi)
+ fSelectedParticles(kGenHadrons)
{
// Constructor
// 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");
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");
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");
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");
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");
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");
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");
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
}
-
}
//-------------------------------------------------------------------
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);
}
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();
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);
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
};
}
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
{ 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
};
//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
};
//==========================================================================
// 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);
}
//--------------------------------------------------------------------------
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
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
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
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]);
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]);
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]);
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*/ )
// 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);
}
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*/)
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;
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;
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;
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;
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};
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);
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);
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;
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
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)
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();
new((*particles)[nPartNew]) TParticle(-11, gamma->GetStatusCode(), iPart+1, -1, 0, 0, TLorentzVector(e2V3,Ee2), vtx);
nPartNew++;
}
- // particles->Compress();
- return particles->GetEntriesFast();
+ return nPartNew;
}
//____________________________________________________________
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);
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)
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);
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) {
}
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) {
class AliJetHeader;
class AliESDEvent;
class AliAODEvent;
+class AliAODTrack;
class AliAODExtension;
class AliAODJet;
class AliGenPythiaEventHeader;
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
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
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++) {
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]);
}
- // 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) {
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
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;
}
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());
set ( EINCLUDE MICROCERN MICROCERN/kerngen)
-set ( PACKFFLAGS "${FFLAGS} -IMICROCERN/kerngen")
+set ( PACKFFLAGS "${FFLAGS} -I${CMAKE_SOURCE_DIR}/MICROCERN/kerngen")
fPlotCluster(0), fOADBSet(kFALSE),
fOADBForEMCAL(kFALSE), fOADBForPHOS(kFALSE),
fOADBFilePathEMCAL(""), fOADBFilePathPHOS(""),
- fImportGeometryFromFile(0), fImportGeometryFilePath("")
+ fImportGeometryFromFile(0), fImportGeometryFilePath(""),
+ fNSuperModulesUsed(0)
{
//Ctor
fImportGeometryFromFile = kTRUE;
fImportGeometryFilePath = "";
+
+ fNSuperModulesUsed = 22;
}
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:
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)
} ;
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;
}
}
//_____________________________________________________________________________
-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());
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);
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
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
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
//_____________________________________________________________________________
AliJetFlowTools::AliJetFlowTools() :
fResponseMaker (new AliAnaChargedJetResponseMaker()),
+ fRMS (kTRUE),
+ fSymmRMS (kTRUE),
fPower (new TF1("fPower","[0]*TMath::Power(x,-([1]))",0.,300.)),
fSaveFull (kTRUE),
fActiveString (""),
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);
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);
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
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");
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");
rangeLow,
rangeUp,
readMe,
- "regularization");
+ "regularization",
+ fRMS);
if(relativeErrorRegularizationInUp) {
// canvas with the error from regularization strength
TCanvas* relativeErrorRegularization(new TCanvas("relativeErrorRegularization", "relativeErrorRegularization"));
rangeLow,
rangeUp,
readMe,
- "method");
+ "method"
+ );
if(relativeErrorMethodInUp) {
TCanvas* relativeErrorMethod(new TCanvas("relativeErrorMethod", "relativeErrorMethod"));
relativeErrorMethod->Divide(2);
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;
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");
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");
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");
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());
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));
}
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");
// 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");
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() {
}
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);}
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.
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
fRequireMatch(kFALSE),
fRequireMatchElectron(kFALSE),
fRequireInTime(kTRUE),
+ fJetTriggerMode(kHJTDefault),
fTRDlayerMaskEl(0x1),
fTRDnTrackletsEl(5),
fTRDptHSE(3.),
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();
// 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
}
// 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;
enum TRDTrigger_t { kHCO = 0, kHJT, kHSE, kHQU, kHEE, kHlast };
+ enum JetTriggerMode_t { kHJTDefault = 0, kHJTWindowZPhi };
+
void ResetTriggers();
Bool_t CalcTriggers(const AliVEvent* event);
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; }
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
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
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
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
# 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}" )
fParticleSpeciesTrigger(-1),
fParticleSpeciesAssociated(-1),
fCheckMotherPDG(kTRUE),
-fTrackletDphiCut(999.),
+fTrackletDphiCut(9999999.),
fSelectCharge(0),
fTriggerSelectCharge(0),
fAssociatedSelectCharge(0),
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);
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);
{
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);
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);
#include "AliLeadingV0Correlation.h"
-#define CorrBinsX 24
-#define CorrBinsY 26
+#define CorrBinsX 240
+#define CorrBinsY 260
Double_t PI =TMath::Pi();
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),
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),
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();
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();
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);
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();
// 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};
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));
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]);
}
}
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;
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));
// 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;}
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.;
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;
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;
}
//---------------------------------------------------------------------------------------
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);
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++)
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++){
Double_t poolmin,
TObjArray*triggerArray,
TObjArray*selectedV0Array,
- TH2F*triggerHist,
+ TH1F*triggerHist,
THnSparse*associateHist)
{
if(TMath::Abs(pvxMix)>=fpvzcut || MultipOrCentMix>poolmax || MultipOrCentMix < poolmin)
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++){
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
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;
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);
};
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(){}
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:
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);
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;}
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);
float nsigmaTPCK=-1000.;
float nsigmaTPCPi=-1000.;
float nsigmaTPCP=-1000.;
+ float nsigmaTPCE=-1000.;
// cout<<"in reader fESDpid"<<fESDpid<<endl;
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());
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
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();
tFemtoTrack->SetNSigmaTOFPi(nsigmaTOFPi);
tFemtoTrack->SetNSigmaTOFK(nsigmaTOFK);
tFemtoTrack->SetNSigmaTOFP(nsigmaTOFP);
+ tFemtoTrack->SetNSigmaTOFE(nsigmaTOFE);
//////////////////////////////////////
fNSigmaTPCPi(0),
fNSigmaTPCK(0),
fNSigmaTPCP(0),
+ fNSigmaTPCE(0),
fNSigmaTOFPi(0),
fNSigmaTOFK(0),
fNSigmaTOFP(0),
+ fNSigmaTOFE(0),
fSigmaToVertex(0),
fClusters(159),
fShared(159),
fNSigmaTPCPi(0),
fNSigmaTPCK(0),
fNSigmaTPCP(0),
+ fNSigmaTPCE(0),
fNSigmaTOFPi(0),
fNSigmaTOFK(0),
fNSigmaTOFP(0),
+ fNSigmaTOFE(0),
fSigmaToVertex(0),
fClusters(159),
fShared(159),
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;
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;
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;}
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;}
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;
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);
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
--- /dev/null
+////////////////////////////////////////////////////////////////////////////////
+// //
+// 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;
+}
--- /dev/null
+////////////////////////////////////////////////////////////////////////////////
+// //
+// 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
+
fMinPforTPCpid(0.0),
fMaxPforTPCpid(10000.0),
fMinPforITSpid(0.0),
- fMaxPforITSpid(10000.0)
+ fMaxPforITSpid(10000.0),
+ fElectronRejection(0)
{
// Default constructor
fNTracksPassed = fNTracksFailed = 0;
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){
fNsigma = nsigma;
}
+
void AliFemtoESDTrackCut::SetClusterRequirementITS(AliESDtrackCuts::Detector det, AliESDtrackCuts::ITSClusterRequirement req)
{
fCutClusterRequirementITS[det] = req;
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;
+}
///////////////////////////////////////////////////////////////////////////
// //
// 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
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...
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;
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
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;}
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
#include "AliFemtoAnalysisReactionPlane.h"
#include <cstdio>
-#ifdef __ROOT__
+#ifdef __ROOT__
ClassImp(AliFemtoModelBPLCMSCorrFctn)
#endif
// 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);
}
//____________________________
stemp += ctemp;
*/
- //
+ //
AliFemtoString returnThis = stemp;
return returnThis;
}
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;
}
// if (fPairCut){
// if (!(fPairCut->Pass(pair))) return;
// }
-
+
Double_t weight = fManager->GetWeight(pair);
double qOut = (pair->QOutCMS());
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
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;
}
fDPhiStarMin(0),
fEtaMin(0),
fMinRad(0.8),
+ fMaxRad(2.5),
fMagSign(1),
fPhistarmin(kTRUE)
{
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;
}
fDPhiStarMin = c.fDPhiStarMin;
fEtaMin = c.fEtaMin;
fMinRad = c.fMinRad;
+ fMaxRad = c.fMaxRad;
fMagSign = c.fMagSign;
fPhistarmin = c.fPhistarmin;
else {
AliAODEvent *fAOD;
fAOD = aodH->GetEvent();
+ //cout<<fAOD<<endl;
magsign = fAOD->GetMagneticField();
}
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;
fMinRad = minrad;
}
+void AliFemtoPairCutRadialDistance::SetMaximumRadius(double maxrad)
+{
+ fMaxRad = maxrad;
+}
+
void AliFemtoPairCutRadialDistance::SetMagneticFieldSign(int magsign)
{
if(magsign>1) fMagSign = 1;
void SetPhiStarDifferenceMinimum(double dtpc);
void SetEtaDifferenceMinimum(double etpc);
void SetMinimumRadius(double minrad);
+ void SetMaximumRadius(double maxrad);
void SetMagneticFieldSign(int magsign);
void SetPhiStarMin(Bool_t);
//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;
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// //
+// 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;
+}
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// //
+// 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
fEvt = obj.fEvt;
fTempStruct = obj.fTempStruct;
fRandomNumber = obj.fRandomNumber;
- fLEGO = fLEGO;
+ fLEGO = obj.fLEGO;
fMCcase = obj.fMCcase;
fAODcase = obj.fAODcase;
fPbPbcase = obj.fPbPbcase;
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
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;
}
}
//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;
--- /dev/null
+//=============================================================================
+//
+// *** 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;
+}
--- /dev/null
+
+/*********************************************************************
+ * *
+ * 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;
+}
+
--- /dev/null
+//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;
+}
+
+
+
+
+
--- /dev/null
+//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;
+}
+
+
+
+
#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;
#include "AliDielectronPairLegCuts.h"
#include "AliDielectronV0Cuts.h"
#include "AliDielectronPID.h"
+#include "AliDielectronHistos.h"
#include "AliDielectron.h"
//______________________________________________
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);
+ }
}
//______________________________________________
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");
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"));
}
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() );
}
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;
{"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)"},
// 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
// 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);
PHOSTasks/UserTasks/AliCaloClusterInfo.cxx
PHOSTasks/UserTasks/AliPHOSpPbPi0Header.cxx
PHOSTasks/UserTasks/AliAnalysisTaskSEPHOSpPbPi0.cxx
+ PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx
)
string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" )
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();
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;
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 ; }
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
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());
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);
//.......................................
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);
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");
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
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)
} ;
* 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. *
**************************************************************************/
//_________________________________________________________________________
//______________________________________________________
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),
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),
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),
SetInputAODName("PWG4Particle");
AddToHistogramsName("AnaPi0_");
- fNModules = 12; // set maximum to maximum number of EMCAL modules
fCalorimeter = "PHOS";
fUseAngleCut = kFALSE;
// 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()] ;
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) ;
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) ;
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)");
{
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)
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)
{
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
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);
}
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 ) ;
}
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 ) ;
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)
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)
{
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
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
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 ) ;
}
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 ) ;
//Calorimeter options
TString GetCalorimeter() const { return fCalorimeter ; }
void SetCalorimeter(TString & det) { fCalorimeter = det ; }
- void SetNumberOfModules(Int_t nmod) { fNModules = nmod ; }
//-------------------------------
// EVENT Bin Methods
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,
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
//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
//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
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)
} ;
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),
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);
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);
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);
fNLMECutMin[0] = 10.;
fNLMECutMin[1] = 6. ;
fNLMECutMin[2] = 6. ;
-
- fNSuperModules = 10;
-
}
//__________________________________________________________________
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());
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,
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
AliAnaPi0EbE( const AliAnaPi0EbE & pi0ebe) ; // cpy ctor
AliAnaPi0EbE & operator = (const AliAnaPi0EbE & pi0ebe) ; // cpy assignment
- ClassDef(AliAnaPi0EbE,36)
+ ClassDef(AliAnaPi0EbE,37)
} ;
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();
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
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) ;
kFALSE); // time calib
if(timecut) recou->SetExoticCellDiffTimeCut(50.);
-
if( nonlin)
{
printf("ConfigureCaloUtils() - Apply non linearity to EMCAL\n");
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;
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
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();
// 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
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
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;
// 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
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();
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
// 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
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
}
cu->SwitchOnCorrectClusterLinearity();
+ if(kCalorimeter=="PHOS")
+ cu->SetNumberOfSuperModulesUsed(3);
+ else
+ cu->SetNumberOfSuperModulesUsed(10);
+
// PHOS
cu->SwitchOffLoadOwnPHOSGeometryMatrices();
// 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
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
fMaxEClus(0),
fNCells50(0),
fFilterBit(0),
+ fSelHybrid(kFALSE),
+ fFillQA(kFALSE),
fESD(0),
fAOD(0),
+ fVEvent(0),
fMCEvent(0),
fStack(0),
fOutputList(0),
fMaxEClus(0),
fNCells50(0),
fFilterBit(0),
+ fSelHybrid(kFALSE),
+ fFillQA(kFALSE),
fESD(0),
fAOD(0),
+ fVEvent(0),
fMCEvent(0),
fStack(0),
fOutputList(0),
if(!filename.Contains(fPathStrOpt.Data()))
return;
}
- AliVEvent *event = (AliVEvent*)InputEvent();
- if (!event) {
+ fVEvent = (AliVEvent*)InputEvent();
+ if (!fVEvent) {
printf("ERROR: event not available\n");
return;
}
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;
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();
//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())
/*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);
}
FillMcHists();
if(fDebug)
printf("passed calling of FillMcHists\n");
- if(fESD)
+ if(fFillQA)
FillQA();
if(fDebug)
printf("passed calling of FillQA\n");
//________________________________________________________________________
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);
}
}
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())
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
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
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.
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());
hESDTruePi0DalitzSecElectronPt(NULL),
hNEvents(NULL),
hNGoodESDTracks(NULL),
+ hNGoodESDTracksVsNGoodGammas(NULL),
+ hNGoodESDTracksVsNGoodVGammas(NULL),
hEtaShift(NULL),
fRandom(0),
fUnsmearedPx(NULL),
fnCuts(0),
fiCut(0),
fNumberOfESDTracks(0),
+ fNumberOfESDTrackskBoth(0),
fMoveParticleAccordingToVertex(kFALSE),
fIsHeavyIon(kFALSE),
fDoMesonAnalysis(kTRUE),
hESDTruePi0DalitzSecElectronPt(NULL),
hNEvents(NULL),
hNGoodESDTracks(NULL),
+ hNGoodESDTracksVsNGoodGammas(NULL),
+ hNGoodESDTracksVsNGoodVGammas(NULL),
hEtaShift(NULL),
fRandom(0),
fUnsmearedPx(NULL),
fnCuts(0),
fiCut(0),
fNumberOfESDTracks(0),
+ fNumberOfESDTrackskBoth(0),
fMoveParticleAccordingToVertex(kFALSE),
fIsHeavyIon(kFALSE),
fDoMesonAnalysis(kTRUE),
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];
}
-
-
+ 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]);
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
CalculateBackground();
UpdateEventByEventData();
+ if ( fDoMesonQA ) {
+
+ hNGoodESDTracksVsNGoodGammas[iCut]->Fill(fNumberOfESDTrackskBoth,fGoodGammas->GetEntries());
+ hNGoodESDTracksVsNGoodVGammas[iCut]->Fill(fNumberOfESDTrackskBoth,fGoodVirtualGammas->GetEntries());
+
+
+ }
+
if(((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->UseMCPSmearing() && fMCEvent){
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;
TH1I **hNEvents;
TH1I **hNGoodESDTracks;
+ TH2F **hNGoodESDTracksVsNGoodGammas;
+ TH2F **hNGoodESDTracksVsNGoodVGammas;
TProfile **hEtaShift;
TRandom3 fRandom;
Int_t fnCuts;
Int_t fiCut;
Int_t fNumberOfESDTracks;
+ Int_t fNumberOfESDTrackskBoth;
Bool_t fMoveParticleAccordingToVertex;
Bool_t fIsHeavyIon;
Bool_t fDoMesonAnalysis;
hNEvents(NULL),
hNGoodESDTracks(NULL),
hNGammaCandidates(NULL),
+ hNGoodESDTracksVsNGammaCanditates(NULL),
hNV0Tracks(NULL),
hEtaShift(NULL),
tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
hNEvents(NULL),
hNGoodESDTracks(NULL),
hNGammaCandidates(NULL),
+ hNGoodESDTracksVsNGammaCanditates(NULL),
hNV0Tracks(NULL),
hEtaShift(NULL),
tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
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];
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);
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
TH1I **hNEvents;
TH1I **hNGoodESDTracks;
TH1I **hNGammaCandidates;
+ TH2F **hNGoodESDTracksVsNGammaCanditates;
TH1I **hNV0Tracks;
TProfile **hEtaShift;
TTree **tESDMesonsInvMassPtDcazMinDcazMaxFlag;
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;
}
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);
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() ));
}
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);
}
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() ));
}
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);
}
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() ));
fMaxR = 70.;
fMinR = 5.;
break;
- // High purity cuts for PbPb (remove first layers of material)
case 5:
fMaxR = 180.;
fMinR = 10.;
break;
case 7:
fMaxR = 180.;
- fMinR = 26.;
+ fMinR = 35.; //old 26.
break;
case 8:
fMaxR = 180.;
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;
}
}
}
+///________________________________________________________________________
+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;
+
+}
}
void LoadReweightingHistosMCFromFile ();
+ UChar_t DeterminePhotonQualityAOD(AliAODConversionPhoton*, AliVEvent*);
// Event Cuts
Bool_t IsCentralitySelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent = NULL);
Double_t GetCentrality(AliVEvent *event);
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;
gSystem->Load("libTENDER.so");
gSystem->Load("libTENDERSupplies.so");
-
+
+
+
+
+
} 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();
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){
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
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
+
+
}
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){
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%
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%
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%
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();
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");
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");
}
}
} 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;
}
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;
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");
}
}
}
- 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");
}
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();
--- /dev/null
+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
--- /dev/null
+/**************************************************************************
+ * 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
--- /dev/null
+#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
#pragma link C++ class AliPHOSpPbPi0Header+;
#pragma link C++ class AliAnalysisTaskSEPHOSpPbPi0+;
+//PHOS_Correlations
+#pragma link C++ class AliPHOSCorrelations+;
+
#endif
AliAnalysisTaskSED0Correlations.h
AliAnalysisTaskSEDplusCorrelations.h
AliAnalysisTaskSEmcCorr.h
- AliAnalysisTaskSEHFCJqa.h
+ AliAnalysisTaskSEHFCJqa.h
+ AliHFDhadronCorrSystUnc.h
)
string ( REPLACE ".h" ".cxx" MODULE_SRCS "${CLASS_HDRS}" )
--- /dev/null
+/**************************************************************************
+ * 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);
+// }
+
+ }
+
+}
+
+
+
--- /dev/null
+#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
,fSparseMassLS(0)
,fAssoTPCCluster(0)
,fAssoITSRefit(0)
+,fPhiCut(0)
{
//Named constructor
,fSparseMassLS(0)
,fAssoTPCCluster(0)
,fAssoITSRefit(0)
+,fPhiCut(0)
{
//Default constructor
fPID = new AliHFEpid("hfePid");
//==========================================================================================================
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;
//==========================================================================================================
}//...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;
////////////////////////////////////////////////////////////////////////
// //
-// Task for Heavy Flavour Electron Flow TPC plus TOF //
+// Task for Heavy Flavour Electron Flow ITS TPC TOF //
// //
// Author: Andrea Dubla (Utrecht University) //
// //
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; };
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
}//...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;
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",
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) {
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();
}
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;
}
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());
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;
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;
fCutKFDeviationFromVtx(999999.),
fCutKFDeviationFromVtxV0(0.),
fCurrentEvent(-1),
- fBField(0)
+ fBField(0),
+ fKeepingOnlyPYTHIABkg(kFALSE)
{
//
// Default ctor
fCutKFDeviationFromVtx(999999.),
fCutKFDeviationFromVtxV0(0.),
fCurrentEvent(-1),
- fBField(0)
+ fBField(0),
+ fKeepingOnlyPYTHIABkg(kFALSE)
{
//
fListCuts->Add(new AliRDHFCutsLctoV0(*fAnalCuts));
PostData(3,fListCuts);
- if (fUseMCInfo && fKeepingOnlyHIJINGBkg) fUtils = new AliVertexingHFUtils();
+ if (fUseMCInfo && (fKeepingOnlyHIJINGBkg || fKeepingOnlyPYTHIABkg)) fUtils = new AliVertexingHFUtils();
return;
}
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";
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());
}
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;
+ }
+ }
+ }
+ }
}
}
}
//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;
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();
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;
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);
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
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;
}
AliDebug(3,"Event rejected because of null trigger mask");
delete[] containerInput;
delete[] containerInputMC;
+ delete cfVtxHF;
return;
}
delete[] containerInput;
delete[] containerInputMC;
delete [] trackCuts;
+ delete cfVtxHF;
return;
}
} else { // keep all centralities
}
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;
}
vectorMC[7] = fMultiplicity; // dummy value for d0pi, meaningless in MC, in micron
break;
}
-
+ delete decay;
bGenValues = kTRUE;
return bGenValues;
}
}
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;
}
// evaluate the correct cascade
if (!EvaluateIfD0toKpi(mcPartDaughterD0,vectorD0)) {
AliDebug(2, "Error! the D0 MC doesn't have correct daughters!!");
+ delete decay;
return bGenValues;
}
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
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
,fEvtSelectionMask(0)
,fEventClass(0)
,fMaxVertexZ(10)
+ ,fRejectPileup(kFALSE)
,fTrackPtCut(0)
,fTrackEtaMin(0)
,fTrackEtaMax(0)
,fEvtSelectionMask(0)
,fEventClass(0)
,fMaxVertexZ(10)
+ ,fRejectPileup(kFALSE)
,fTrackPtCut(0)
,fTrackEtaMin(0)
,fTrackEtaMax(0)
,fEvtSelectionMask(copy.fEvtSelectionMask)
,fEventClass(copy.fEventClass)
,fMaxVertexZ(copy.fMaxVertexZ)
+ ,fRejectPileup(copy.fRejectPileup)
,fTrackPtCut(copy.fTrackPtCut)
,fTrackEtaMin(copy.fTrackEtaMin)
,fTrackEtaMax(copy.fTrackEtaMax)
fEvtSelectionMask = o.fEvtSelectionMask;
fEventClass = o.fEventClass;
fMaxVertexZ = o.fMaxVertexZ;
+ fRejectPileup = o.fRejectPileup;
fTrackPtCut = o.fTrackPtCut;
fTrackEtaMin = o.fTrackEtaMin;
fTrackEtaMax = o.fTrackEtaMax;
// 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.);
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);
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);
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()){
// ________________________________________________________________________________________________________________________________________________________
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
}
// _________________________________________________________________________________________________________________________________________________________________
-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
// get median cluster
AliAODJet* medianCluster = 0;
- //Double_t medianDensity = 0;
+ Double_t medianDensity = 0;
if(TMath::Odd(nBckgClusters)){
Double_t clusterPt = medianCluster->Pt();
Double_t area = medianCluster->EffectiveAreaCharged();
- //if(area>0) medianDensity = clusterPt/area;
+ if(area>0) medianDensity = clusterPt/area;
}
else{
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
}
}
//_____________________________________________________________________________________
-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)
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;
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);
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);
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
#include "AliAODJet.h"
#include "AliVVertex.h"
#include "AliAnalysisTaskJetCorePP.h"
+#include "AliHeader.h" //KF//
using std::cout;
using std::endl;
TString dummy(name);
if(dummy.Contains("KINE")){
DefineInput(1, TClonesArray::Class());
- //XXXX//DefineInput(2, TClonesArray::Class());
+ DefineInput(2, TClonesArray::Class());
}
}
//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;
}
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
void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
{
+ //User Exec
+
+
//Event loop
Double_t eventW = 1.0;
Double_t ptHard = 0.0;
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");
//================= 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);
EstimateBgCone(fListJetsGen, &particleListGen, rhoConeGen);
//Estimate rho from cell median minus jets
- if(!fIsKine) //XXXX//
EstimateBgRhoMedian(fListJetsBgGen, &particleListGen, rhoFromCellMedianGen,1);//mc data
//============ Generator trigger+jet ==================
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()));
,fBranchJets("jets")
,fTrackType(kTrackAOD)
,fJetRejectType(0)
+ ,fRejectPileup(1)
,fUseAODInputJets(kTRUE)
,fFilterMask(0)
,fUsePhysicsSelection(kTRUE)
,fBranchJets("jets")
,fTrackType(kTrackAOD)
,fJetRejectType(0)
+ ,fRejectPileup(1)
,fUseAODInputJets(kTRUE)
,fFilterMask(0)
,fUsePhysicsSelection(kTRUE)
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);
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){
{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;}
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);
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
* 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>
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){
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){
// 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++){
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);
}
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;
}
}
}
+ 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
class TProfile2D;
class TSTring;
-
class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
{
public:
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
//
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
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
UserTasks/AliAnalysisTaskIDFragmentationFunction.cxx
UserTasks/AliAnalysisTaskIDFFTCF.cxx
UserTasks/AliIDFFUtils.cxx
+ UserTasks/AliAnalysisTaskPPJetSpectra.cxx
)
# Add code that needs fastjet or FJWrapper here
fHistScalevsCent(0),
fHistDeltaScalevsCent(0),
fHistScaleEmcalvsCent(0),
- fHistScale2EmcalvsCent(0),
+ fHistScale2EmcalvsCent(0),
+ fHistDeltaScale2EmcalvsCent(0),
fHistChScalevsCent(0),
fHistChScale2EmcalvsCent(0),
fHistPtTPCvsNtrack(0),
fHistScalevsCent(0),
fHistDeltaScalevsCent(0),
fHistScaleEmcalvsCent(0),
- fHistScale2EmcalvsCent(0),
+ fHistScale2EmcalvsCent(0),
+ fHistDeltaScale2EmcalvsCent(0),
fHistChScalevsCent(0),
fHistChScale2EmcalvsCent(0),
fHistPtTPCvsNtrack(0),
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);
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);
// $Id$
-class TH2F;
+class TH2;
class TF1;
#include "AliAnalysisTaskEmcal.h"
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
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),
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),
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);
// 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);
// 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
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;
// 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
// 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
}
// 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
// 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) {
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);
}
//________________________________________________________________________
-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;
//_________________________________________________________________________
-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);
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:
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
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
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
// 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);
// 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();
// 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
fHistCorJetPtEPcentGL[i] = 0;
}
-
+
SetMakeGeneralHistograms(kTRUE);
}
fHistCorJetPtEPcentGL[i] = 0;
}
-
+
SetMakeGeneralHistograms(kTRUE);
}
fOutput->Add(fHistCorJetPtEPcentGL[i]);
}
-
-
+
fOutput->Add(fHistRhovsCent);
fOutput->Add(fHistNjetvsCent);
fLocalRho = GetLocalRhoFromEvent(fLocalRhoName);
}
-
fHistEP0[centbin]->Fill(fEPV0);
fHistEP0A[centbin]->Fill(fEPV0A);
fHistEP0C[centbin]->Fill(fEPV0C);
// 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);
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)
fHistJetPt[i] = 0;
fHistJetEtaPhi[i] = 0;
fHistJetPtArea[i] = 0;
+ fHistJetPtEta[i] = 0;
fHistJetPtConstituents[i] = 0;
fHistJetEtaRho[i] = 0;
fHistJetPsi2Pt[i] = 0;
fHistJetPt[i] = 0;
fHistJetEtaPhi[i] = 0;
fHistJetPtArea[i] = 0;
+ fHistJetPtEta[i] = 0;
fHistJetPtConstituents[i] = 0;
fHistJetEtaRho[i] = 0;
fHistJetPsi2Pt[i] = 0;
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
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
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);
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());
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
AliAnalysisTaskRhoVnModulation(const AliAnalysisTaskRhoVnModulation&); // not implemented
AliAnalysisTaskRhoVnModulation& operator=(const AliAnalysisTaskRhoVnModulation&); // not implemented
- ClassDef(AliAnalysisTaskRhoVnModulation, 25);
+ ClassDef(AliAnalysisTaskRhoVnModulation, 26);
};
#endif
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
)
{
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
//-------------------------------------------------------
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
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");
etaJet = jet->Eta();
fPtJet = jet->Pt();
Double_t origPtJet=fPtJet;
+
pointJ[0] = phiJet;
pointJ[1] = etaJet;
pointJ[2] = ptjet;
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);
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;
//_______________________________________________________________________________
-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;
}
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 {
}
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)
{
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);
//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;
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
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();
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;
}
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);
#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+;
,fAnalysisMC(0)
,fDeltaVertexZ(0)
+ ,fCutjetEta(0)
,fCuttrackNegNcls(0)
,fCuttrackPosNcls(0)
,fCutPostrackRap(0)
,fh1DcaNegToPrimVertex(0)
,fh2ArmenterosBeforeCuts(0)
,fh2ArmenterosAfterCuts(0)
- ,fh2BB3SigProton(0)
,fh2BBLaPos(0)
,fh2BBLaNeg(0)
- ,fh1CrossedRowsOverFindableNeg(0)
- ,fh1CrossedRowsOverFindablePos(0)
,fh1PosDaughterCharge(0)
,fh1NegDaughterCharge(0)
,fh1PtMCK0s(0)
,fh3InvMassEtaTrackPtK0s(0)
,fh3InvMassEtaTrackPtLa(0)
,fh3InvMassEtaTrackPtALa(0)
- ,fh1noAssociatedK0s(0)
+
,fh1TrackMultCone(0)
,fh2TrackMultCone(0)
,fh2MCgenK0Cone(0)
,fh3IMK0MedianCone(0)
,fh3IMLaMedianCone(0)
,fh3IMALaMedianCone(0)
+ ,fh1MedianEta(0)
+ ,fh1JetPtMedian(0)
,fh1MCMultiplicityPrimary(0)
,fh1MCMultiplicityTracks(0)
,fh1MCmotherLa(0)
,fAnalysisMC(0)
,fDeltaVertexZ(0)
+ ,fCutjetEta(0)
,fCuttrackNegNcls(0)
,fCuttrackPosNcls(0)
,fCutPostrackRap(0)
,fh1DcaNegToPrimVertex(0)
,fh2ArmenterosBeforeCuts(0)
,fh2ArmenterosAfterCuts(0)
- ,fh2BB3SigProton(0)
,fh2BBLaPos(0)
,fh2BBLaNeg(0)
- ,fh1CrossedRowsOverFindableNeg(0)
- ,fh1CrossedRowsOverFindablePos(0)
,fh1PosDaughterCharge(0)
,fh1NegDaughterCharge(0)
,fh1PtMCK0s(0)
,fh3InvMassEtaTrackPtK0s(0)
,fh3InvMassEtaTrackPtLa(0)
,fh3InvMassEtaTrackPtALa(0)
- ,fh1noAssociatedK0s(0)
,fh1TrackMultCone(0)
,fh2TrackMultCone(0)
,fh2MCgenK0Cone(0)
,fh3IMK0MedianCone(0)
,fh3IMLaMedianCone(0)
,fh3IMALaMedianCone(0)
+ ,fh1MedianEta(0)
+ ,fh1JetPtMedian(0)
,fh1MCMultiplicityPrimary(0)
,fh1MCMultiplicityTracks(0)
,fh1MCmotherLa(0)
,fAnalysisMC(copy.fAnalysisMC)
,fDeltaVertexZ(copy.fDeltaVertexZ)
+ ,fCutjetEta(copy.fCutjetEta)
,fCuttrackNegNcls(copy.fCuttrackNegNcls)
,fCuttrackPosNcls(copy.fCuttrackPosNcls)
,fCutPostrackRap(copy.fCutPostrackRap)
,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)
,fh3InvMassEtaTrackPtK0s(copy.fh3InvMassEtaTrackPtK0s)
,fh3InvMassEtaTrackPtLa(copy.fh3InvMassEtaTrackPtLa)
,fh3InvMassEtaTrackPtALa(copy.fh3InvMassEtaTrackPtALa)
- ,fh1noAssociatedK0s(copy.fh1noAssociatedK0s)
+
,fh1TrackMultCone(copy.fh1TrackMultCone)
,fh2TrackMultCone(copy.fh2TrackMultCone)
,fh2MCgenK0Cone(copy.fh2MCgenK0Cone)
,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)
fAnalysisMC = o.fAnalysisMC;
fDeltaVertexZ = o.fDeltaVertexZ;
+ fCutjetEta = o.fCutjetEta;
fCuttrackNegNcls = o.fCuttrackNegNcls;
fCuttrackPosNcls = o.fCuttrackPosNcls;
fCutPostrackRap = o.fCutPostrackRap;
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;
fh3InvMassEtaTrackPtK0s = o.fh3InvMassEtaTrackPtK0s;
fh3InvMassEtaTrackPtLa = o.fh3InvMassEtaTrackPtLa;
fh3InvMassEtaTrackPtALa = o.fh3InvMassEtaTrackPtALa;
- fh1noAssociatedK0s = o.fh1noAssociatedK0s;
fh1TrackMultCone = o.fh1TrackMultCone;
fh2TrackMultCone = o.fh2TrackMultCone;
fh2MCgenK0Cone = o.fh2MCgenK0Cone;
fh3IMK0MedianCone = o.fh3IMK0MedianCone;
fh3IMLaMedianCone = o.fh3IMLaMedianCone;
fh3IMALaMedianCone = o.fh3IMALaMedianCone;
+ fh1MedianEta = o.fh1MedianEta;
+ fh1JetPtMedian = o.fh1JetPtMedian;
fh1MCMultiplicityPrimary = o.fh1MCMultiplicityPrimary;
fh1MCMultiplicityTracks = o.fh1MCMultiplicityTracks;
fh1MCmotherLa = o.fh1MCmotherLa;
// 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
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);
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.);
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,
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
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);
fCommonHistList->Add(fh3InvMassEtaTrackPtK0s);
fCommonHistList->Add(fh3InvMassEtaTrackPtLa);
fCommonHistList->Add(fh3InvMassEtaTrackPtALa);
- fCommonHistList->Add(fh1noAssociatedK0s);
fCommonHistList->Add(fh1TrackMultCone);
fCommonHistList->Add(fh2TrackMultCone);
fCommonHistList->Add(fh2MCgenK0Cone);
fCommonHistList->Add(fh3IMK0MedianCone);
fCommonHistList->Add(fh3IMLaMedianCone);
fCommonHistList->Add(fh3IMALaMedianCone);
+ fCommonHistList->Add(fh1MedianEta);
+ fCommonHistList->Add(fh1JetPtMedian);
fCommonHistList->Add(fh1MCMultiplicityPrimary);
fCommonHistList->Add(fh1MCMultiplicityTracks);
fCommonHistList->Add(fh1MCmotherLa);
fCommonHistList->Add(fh1MCEtaLambda);
fCommonHistList->Add(fh1MCEtaAntiLambda);
+
+
fV0QAK0->AddToOutput(fCommonHistList);
fFFHistosRecCuts->AddToOutput(fCommonHistList);
fFFHistosRecCutsK0Evt->AddToOutput(fCommonHistList);
}
TH1::AddDirectory(oldStatus);
-
+ PostData(1, fCommonHistList);
}
//_______________________________________________
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;
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());
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);
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){
if (mfl == 3 && codeM != 3) isFromStrange = kTRUE;
}
- //cut on primary particles:
-
-
-
-
if(isFromStrange == kTRUE){
Double_t trackPt = part->Pt();
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:__________________________________________________________________________
}
- //__________________________________________________________________________________________________________________________________________
- // ____ 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:___________________________________________________________________
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
//__________________________________________________________________________________________________________________________________________
//________________________________________________________________________________________________________________________________________________________
-
-
delete fListMCgenK0sCone;
delete jetPerpConeK0list;
delete jetPerpConeLalist;
delete jetPerpConeALalist;
- delete jetMedianConeK0list;
- delete jetMedianConeLalist;
- delete jetMedianConeALalist;
+
//---------------La--------------------------------------------------------------------------------------------------------------------------------------------
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;
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
/////////////////////////////////////////////////////////////
//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!!!
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));
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){
//-- 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)
//--
Bool_t fAnalysisMC;
Double_t fDeltaVertexZ;
+ Double_t fCutjetEta;
Double_t fCuttrackNegNcls;
Double_t fCuttrackPosNcls;
Double_t fCutPostrackRap;
Double_t fCutPostrackEta;
Double_t fCutNegtrackEta;
Double_t fCutEta;
+
Double_t fCutV0cosPointAngle;
Double_t fCutChi2PosDaughter;
Double_t fCutChi2NegDaughter;
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);}
private:
- Int_t fK0Type; //! K0 cuts
+ Int_t fK0Type; // K0 cuts
UInt_t fFilterMaskK0; //! K0 legs cuts
TList* fListK0s; //! K0 list
AliPIDResponse *fPIDResponse; // PID
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
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
TH1F* fh1DcaNegToPrimVertex;
TH2F* fh2ArmenterosBeforeCuts;
TH2F* fh2ArmenterosAfterCuts;
- TH2F* fh2BB3SigProton;
TH2F* fh2BBLaPos;
TH2F* fh2BBLaNeg;
- TH1F* fh1CrossedRowsOverFindableNeg;
- TH1F* fh1CrossedRowsOverFindablePos;
TH1F* fh1PosDaughterCharge;
TH1F* fh1NegDaughterCharge;
TH1F* fh1PtMCK0s;
TH3F* fh3InvMassEtaTrackPtK0s;
TH3F* fh3InvMassEtaTrackPtLa;
TH3F* fh3InvMassEtaTrackPtALa;
- TH1F* fh1noAssociatedK0s;
TH1F* fh1TrackMultCone;
TH2F* fh2TrackMultCone;
TH2F* fh2MCgenK0Cone;
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;
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
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;
fdCutNTauMax(5),
fsJetBranchName(0),
+ fsJetBgBranchName(0),
fdCutPtJetMin(0),
fdCutPtTrackMin(5),
fdRadiusJet(0.4),
fh2EventCentTracks(0),
fh1V0CandPerEvent(0),
fh1NRndConeCent(0),
+ fh1NMedConeCent(0),
fh1AreaExcluded(0),
fh2CCK0s(0),
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;
fh1PhiJet[i] = 0;
fh1NJetPerEvent[i] = 0;
fh2EtaPhiRndCone[i] = 0;
+ fh2EtaPhiMedCone[i] = 0;
fh1VtxZ[i] = 0;
fh2VtxXY[i] = 0;
fdCutNTauMax(5),
fsJetBranchName(0),
+ fsJetBgBranchName(0),
fdCutPtJetMin(0),
fdCutPtTrackMin(5),
fdRadiusJet(0.4),
fh2EventCentTracks(0),
fh1V0CandPerEvent(0),
fh1NRndConeCent(0),
+ fh1NMedConeCent(0),
fh1AreaExcluded(0),
fh2CCK0s(0),
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;
fh1PhiJet[i] = 0;
fh1NJetPerEvent[i] = 0;
fh2EtaPhiRndCone[i] = 0;
+ fh2EtaPhiMedCone[i] = 0;
fh1VtxZ[i] = 0;
fh2VtxXY[i] = 0;
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;
}
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();
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());
fOutputListStd->Add(fh1EventCent);
fOutputListStd->Add(fh1EventCent2);
fOutputListStd->Add(fh1NRndConeCent);
+ fOutputListStd->Add(fh1NMedConeCent);
fOutputListStd->Add(fh1AreaExcluded);
fOutputListStd->Add(fh2EventCentTracks);
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);
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);
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);
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.);
{
// 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;
// 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);
// 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
// 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
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;
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()));
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
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
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))
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
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};
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};
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};
// 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
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");
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);
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
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;}
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;}
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)
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
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
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
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
-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.
//===========================================================================
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 !!
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);
,fQATrackHistosRecEffGen(0)
,fQATrackHistosRecEffRec(0)
,fQATrackHistosSecRec(0)
+ ,fQATrackHistosSecRecSSc(0)
,fQATrackHistosRecEffGenPi(0)
,fQATrackHistosRecEffGenPro(0)
,fQATrackHistosRecEffGenK(0)
,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)
,fFFHistosSecRecMu(0)
,fFFHistosSecRecProGFL(0)
,fFFHistosSecRecKGFL(0)
+ ,fFFHistosSecRecPiSSc(0)
+ ,fFFHistosSecRecProSSc(0)
+ ,fFFHistosSecRecKSSc(0)
+ ,fFFHistosSecRecElSSc(0)
+ ,fFFHistosSecRecMuSSc(0)
+ ,fFFHistosSecRecProGFLSSc(0)
+ ,fFFHistosSecRecKGFLSSc(0)
,fRandom(0)
{
// default constructor
,fh2PtRecVsGenSec(0)
,fQATrackHistosRecEffGen(0)
,fQATrackHistosRecEffRec(0)
- ,fQATrackHistosSecRec(0)
+ ,fQATrackHistosSecRec(0)
+ ,fQATrackHistosSecRecSSc(0)
,fQATrackHistosRecEffGenPi(0)
,fQATrackHistosRecEffGenPro(0)
,fQATrackHistosRecEffGenK(0)
,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)
,fFFHistosSecRecMu(0)
,fFFHistosSecRecProGFL(0)
,fFFHistosSecRecKGFL(0)
+ ,fFFHistosSecRecPiSSc(0)
+ ,fFFHistosSecRecProSSc(0)
+ ,fFFHistosSecRecKSSc(0)
+ ,fFFHistosSecRecElSSc(0)
+ ,fFFHistosSecRecMuSSc(0)
+ ,fFFHistosSecRecProGFLSSc(0)
+ ,fFFHistosSecRecKGFLSSc(0)
,fRandom(0)
{
// constructor
,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)
,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)
,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
fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
fQATrackHistosSecRec = o.fQATrackHistosSecRec;
+ fQATrackHistosSecRecSSc = o.fQATrackHistosSecRecSSc;
fQATrackHistosRecEffGenPi = o.fQATrackHistosRecEffGenPi;
fQATrackHistosRecEffGenPro = o.fQATrackHistosRecEffGenPro;
fQATrackHistosRecEffGenK = o.fQATrackHistosRecEffGenK;
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;
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;
}
,fh2Xi(0)
,fh2Z(0)
,fh1JetPt(0)
+ ,fh3TrackPtVsEta(0)
+ ,fh3TrackPVsEta(0)
,fNameFF(name)
{
// default constructor
,fh2Xi(copy.fh2Xi)
,fh2Z(copy.fh2Z)
,fh1JetPt(copy.fh1JetPt)
+ ,fh3TrackPtVsEta(copy.fh3TrackPtVsEta)
+ ,fh3TrackPVsEta(copy.fh3TrackPVsEta)
,fNameFF(copy.fNameFF)
{
// copy constructor
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;
{
// 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;
}
//_________________________________________________________________
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
// 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;
xi = 1e-06;
}
-
if(norm){
fh2Xi->Fill(jetPt,xi,1/norm);
fh2Z->Fill(jetPt,z,1/norm);
list->Add(fh2TrackPt);
list->Add(fh2Xi);
list->Add(fh2Z);
+
+ list->Add(fh3TrackPtVsEta);
+ list->Add(fh3TrackPVsEta);
}
//_________________________________________________________________________________________________________
fTHnIDFF = AliIDFFUtils::GetTHn("THnIDFF");
- fTHnIncl = AliIDFFUtils::GetTHn("THnIncl");
+ fTHnIncl = 0x0;//AliIDFFUtils::GetTHn("THnIncl");
} // end: FF
// efficiency
if(fFFMode){
fCommonHistList->Add(fTHnIDFF);
- fCommonHistList->Add(fTHnIncl);
+ //fCommonHistList->Add(fTHnIncl);
}
Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
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");
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");
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);
// 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);
}
}
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);
}
}
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));
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;
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;
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);
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
// 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);
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;
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);
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;
}
// _________________________________________________________________________________________________________
-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
// ________________________________________________________________________________________________________________________________________________________
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
}
// _________________________________________________________________________________________________________________________________________________________________
-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
// _____________________________________________________________________________________________________________________________________________
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;
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);
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*, ...
// 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;
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;
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
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);
}
}
//____________________________________________________________________________________
-Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
+Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionPrMinus(const Double_t pTmc)
{
// GEANT-FLUKA correction for pbar from Roberto via Benjamin
}
//____________________________________________________________________________________
-Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
+Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionKaMinus(const Double_t pTmc)
{
// GEANT-FLUKA correction for K- from Roberto via Benjamin
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;
+}
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;
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);
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;
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,
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
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
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
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
#include "TH1.h"
#include "TH2.h"
#include "TH3.h"
+#include "TF1.h"
#include "TFormula.h"
#include "TRandom.h"
fPoolMgr(),
fPool(),
fHistCorr(0x0),
+ fErrorMsg(10),
fOutputList(),
fHist(),
fShortTaskId("jet_prot_corr"),
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())),
}
- 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);
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",
// 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.);
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) =
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
}
}
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);
}
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())
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) &&
return (acceptPt && acceptOrientation);
}
-AliVTrack* AliAnalysisTaskJetProtonCorr::GetLeadingTrack(AliAODJet *jet) const
+AliVTrack* AliAnalysisTaskJetProtonCorr::GetLeadingTrack(const AliAODJet *jet) const
{
// return leading track within a jet
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
Bool_t acceptOrientation = IsSemiCentral() ?
AcceptAngleToEvPlane(trg->Phi(), GetEventPlaneAngle()) :
kTRUE;
+
// check for jet pt
Bool_t acceptPt =
(trg->Pt() >= fTrgJetPtMin) &&
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);
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.)
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
}
-Bool_t AliAnalysisTaskJetProtonCorr::AcceptTwoTracks(AliVParticle *trgPart, AliVParticle *assPart)
+Bool_t AliAnalysisTaskJetProtonCorr::AcceptTwoTracks(const AliVParticle *trgPart, const AliVParticle *assPart) const
{
// apply two track pair cut
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);
{
// 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();
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);
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);
}
// 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();
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);
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);
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;
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()
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)
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)
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 -----
#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;
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; }
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)
kHistEtaPhiAssProt,
kHistPhiTrgJetEvPlane,
kHistPhiTrgHadEvPlane,
+ kHistPhiRndTrgJetEvPlane,
+ kHistPhiRndTrgHadEvPlane,
kHistPhiAssHadEvPlane,
kHistPhiAssHadVsEvPlane,
kHistPhiAssProtEvPlane,
kCorrJetHad,
kCorrJetProt,
- kCorrRndJetHad,
- kCorrRndJetProt,
kCorrRndHadHad,
kCorrRndHadProt,
+ kCorrRndJetHad,
+ kCorrRndJetProt,
- kCorrRndJetExcHad,
- kCorrRndJetExcProt,
kCorrRndHadExcHad,
kCorrRndHadExcProt,
+ kCorrRndJetExcHad,
+ kCorrRndJetExcProt,
kCorrLast
};
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.);
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);
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)); }
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;
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)
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;
//________________________________________________________________________
AliAnalysisTaskPID::AliAnalysisTaskPID()
: AliAnalysisTaskPIDV0base()
+ , fRun(-1)
, fPIDcombined(new AliPIDCombined())
, fInputFromOtherTask(kFALSE)
, fDoPID(kTRUE)
, fGenRespPrDeltaPi(new Double_t[fgkMaxNumGenEntries])
, fGenRespPrDeltaPr(new Double_t[fgkMaxNumGenEntries])
*/
+ , fhMaxEtaVariation(0x0)
, fhEventsProcessed(0x0)
, fhEventsTriggerSel(0x0)
, fhEventsTriggerSelVtxCut(0x0)
//________________________________________________________________________
AliAnalysisTaskPID::AliAnalysisTaskPID(const char *name)
: AliAnalysisTaskPIDV0base(name)
+ , fRun(-1)
, fPIDcombined(new AliPIDCombined())
, fInputFromOtherTask(kFALSE)
, fDoPID(kTRUE)
, fGenRespPrDeltaPi(new Double_t[fgkMaxNumGenEntries])
, fGenRespPrDeltaPr(new Double_t[fgkMaxNumGenEntries])
*/
+ , fhMaxEtaVariation(0x0)
, fhEventsProcessed(0x0)
, fhEventsTriggerSel(0x0)
, fhEventsTriggerSelVtxCut(0x0)
fGenRespPrDeltaPrimePi = 0x0;
fGenRespPrDeltaPrimePr = 0x0;
+ delete fhMaxEtaVariation;
+ fhMaxEtaVariation = 0x0;
+
/*OLD with deltaSpecies
delete [] fGenRespElDeltaEl;
delete [] fGenRespElDeltaKa;
}
+//________________________________________________________________________
+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()
{
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;
}
+//_____________________________________________________________________________
+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,
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.;
+ 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
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,
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
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
AliAnalysisTaskPID(const AliAnalysisTaskPID&); // not implemented
AliAnalysisTaskPID& operator=(const AliAnalysisTaskPID&); // not implemented
- ClassDef(AliAnalysisTaskPID, 17);
+ ClassDef(AliAnalysisTaskPID, 18);
};
--- /dev/null
+#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);
+}
--- /dev/null
+#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
//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++){
return hh;
}
+/*
Bool_t AliIDFFUtils::HMPIDAcceptance(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)
{
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)
{
//===========================================================================================================
+ //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);
//===========================================================================================================
//===========================================================================================================
- 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);
}
};
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);
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);
};
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);
}
}
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="";
--- /dev/null
+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;
+}
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
*/
};
/******************************************************************/
+ /**
+ * 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
*
if (!oRun) return false;
fGlobal->runNo = oRun->GetUniqueID();
+ if (fRunNo <= 0) fRunNo = fGlobal->runNo;
+
TH1* oAcc = GetHistogram(fEventInspector,"nEventsAccepted");
if (!oAcc) return false;
* @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",
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
// 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
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);
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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
fCorrelEventplaneMCDATA(0),
//global
fIsMonteCarlo(0),
+fEPselector("Q"),
// event cut variables
fCutMaxZVertex(10.),
// track kinematic cut variables
dMCEventZv = mcHdr->GetVtxZ();
dMCTrackZvPtEtaCent[0] = dMCEventZv;
- dMCEventplaneAngle = MoveMCEventplane(genHijingHeader->ReactionPlaneAngle());
+ dMCEventplaneAngle = MoveEventplane(genHijingHeader->ReactionPlaneAngle());
fEventStatistics->Fill("MC all events",1);
fMCEventplaneDist->Fill(dMCEventplaneAngle);
}
// 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;
}
-Double_t AlidNdPtAnalysisPbPbAOD::MoveMCEventplane(Double_t dMCEP)
+Double_t AlidNdPtAnalysisPbPbAOD::MoveEventplane(Double_t dMCEP)
{
Double_t retval = 0;
retval = dMCEP;
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])
#include "THnSparse.h"
#include "THn.h"
#include "TClonesArray.h"
+#include "TString.h"
#include "TParticlePDG.h"
#include "TDatabasePDG.h"
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);
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 :
TH2F *fCorrelEventplaneMCDATA; // correlation between data and MC eventplane
// global variables
Bool_t fIsMonteCarlo;
+
+ TString fEPselector;
// event cut variables
Double_t fCutMaxZVertex;
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
task->SelectCollisionCandidates(uTriggerMask);
+ task->SetEventplaneSelector("Q");
+
task->SetCutMinNCrossedRowsTPC(dNCrossedRowsTPC);
task->SetCutMinNClustersTPC(dNClustersTPC);
task->SetCutLengthInTPCPtDependent(bDoCutTPCLength);
}
}
- 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};
//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];
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;
// //
///////////////////////////////////////////////////////////
-using std::cout;
-using std::endl;
ClassImp(AliAnalysisTaskAntiHe4)
fHistHelium4PtAsoSec(0),
fHistAntiHelium4PtAso(0),
fTree(0),
- fOutputContainer(0)
+ fOutputContainer(0),
+ fEvnt(0),
+ fItrk(0)
{
// default Constructor
fHistHelium4PtAsoSec(0),
fHistAntiHelium4PtAso(0),
fTree(0),
- fOutputContainer(0)
+ fOutputContainer(0),
+ fEvnt(0),
+ fItrk(0)
{
// Constructor
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
//
//------------ 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");
}
//centrality selection in PbPb
//
Int_t centralityClass10 = -1;
- Int_t centralityPercentile = -1;
+ Float_t centralityPercentile = -1;
//
if (fESD->GetEventSpecie() == 4) { //species == 4 == PbPb
// PbPb
}
}
//
- if (!fTriggerFired[0] && !fTriggerFired[1] && !fTriggerFired[2]) return; // select only events which pass kMB, kCentral, kSemiCentral
- //
fHistCentralityClass10->Fill(centralityClass10);
fHistCentralityPercentile->Fill(centralityPercentile);
//
}
//
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();
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;
//
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() << " "
//
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
}
- fAssociated[itrk] = isAssociated;
- fTrackPt[itrk] = track->Pt();
-
- itrk++;
+ fAssociated[fItrk] = isAssociated;
+
+ fItrk++;
}
//
// do pid fill histogram for raw ratios
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 &&
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
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);
}
//
// 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
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);
//--- 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);
#include "TTree.h"
#include "TDirectory.h"
#include "TEventList.h"
+#include "TCut.h"
using std::endl;
using std::left;
{
// 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):
{
// 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();
}
}
-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);
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");
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, ' ');
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();
}
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();
}
} 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);
+ }
}
}
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;
+
+}
#include "TObject.h"
#include "TString.h"
+#include "TCut.h"
class TClonesArray;
class TTree;
-
class AliParticleYield : public TObject
{
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;
};
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;
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 ;}
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; }
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
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)
};
--- /dev/null
+#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();
+
+
+}
+
+
--- /dev/null
+#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");
+}
--- /dev/null
+#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;
+}
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)
{
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; }
# $period e.g. LHC13g
# $runNumber e.g. 169123
# $pass e.g. cpass1,pass1,passMC
+# #ocdbStorage e.g. "raw://", "local://./OCDB"
runLevelQA()
{
# $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()
# $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()
# $period e.g. LHC13g
# $runNumer e.g. 169123
# $pass e.g. cpass1,pass1,passMC
+# #ocdbStorage e.g. "raw://", "local://./OCDB"
runLevelQA()
{
<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>
# $period e.g. LHC13g
# $runNumer e.g. 169123
# $pass e.g. cpass1,pass1,passMC
+# #ocdbStorage e.g. "raw://", "local://./OCDB"
runLevelHighPtTreeQA()
{
#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
+"
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}
dataType=""
originalPass=""
originalPeriod=""
+ anchorYear=""
- local shortRunNumber=""
+ shortRunNumber=""
oldIFS=${IFS}
local IFS="/"
declare -a path=( $1 )
(( 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}} ]]
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
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 ----------------------------------//
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.");
}
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);
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);
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");
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 );
}
}
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);
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);
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");
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();
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
-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 ---//
task->SetRunTree(runTree);
task->SetRunHist(runHist);
task->SetIsMC(isMC);
+ task->SetRunSyst(runSyst);
mgr->AddTask(task);
//_____________________________________________________________________________
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),
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)
{
//_____________________________________________________________________________
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),
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)
{
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"};
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);
}//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 *)
{
//input event
AliAODEvent *aod = (AliAODEvent*) InputEvent();
if(!aod) return;
+
+ // cout<<"Event number: "<<((TTree*) GetInputData(0))->GetTree()->GetReadEntry()<<endl;
fHistNeventsJPsi->Fill(1);
fHistNeventsPsi2s->Fill(1);
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;
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
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;
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){
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());
+ }
}
}
}
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++;
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);
}
}
}
+//_____________________________________________________________________________
+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()
{
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;
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++;
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;
+}
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();
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;
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
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
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
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
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
///////////////////////////////////////////////////////////////
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;
fTrackDz(-999),
fNExMax(0),
fTOF(0.),
+ fCoreEnergy(0.),
fTracksMatched(),
fNCells(0),
fCellsAbsId(0x0),
fTrackDz(-999),
fNExMax(0),
fTOF(0.),
+ fCoreEnergy(0.),
fTracksMatched(),
fNCells(0),
fCellsAbsId(0x0),
fTrackDz(-999),
fNExMax(0),
fTOF(0.),
+ fCoreEnergy(0.),
fTracksMatched(),
fNCells(0),
fCellsAbsId(0x0),
fTrackDz(clus.fTrackDz),
fNExMax(clus.fNExMax),
fTOF(clus.fTOF),
+ fCoreEnergy(clus.fCoreEnergy),
fTracksMatched(clus.fTracksMatched),
fNCells(clus.fNCells),
fCellsAbsId(0x0),
fTrackDz=clus.fTrackDz;
fNExMax = clus.fNExMax;
fTOF = clus.fTOF;
+ fCoreEnergy = clus.fCoreEnergy;
fTracksMatched = clus.fTracksMatched;
fNCells= clus. fNCells;
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); }
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.,
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.
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
delete fCovMatrix;
delete fDetPid;
delete fDetectorPID;
- delete[] fPID;
+ if (fPID) {delete[] fPID; fPID = 0;}
}
#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+;
fNExMax(0),
fClusterType(kUndef),
fTOF(0.),
- fMCEnergyFraction(0.)
+ fMCEnergyFraction(0.),
+ fCoreEnergy(0.)
{
//
// The default ESD constructor
fNExMax(clus.fNExMax),
fClusterType(clus.fClusterType),
fTOF(clus.fTOF),
- fMCEnergyFraction(clus.fMCEnergyFraction)
+ fMCEnergyFraction(clus.fMCEnergyFraction),
+ fCoreEnergy(clus.fCoreEnergy)
{
//
// The copy constructor
}
fMCEnergyFraction = source.fMCEnergyFraction;
+
+ fCoreEnergy = source.fCoreEnergy;
return *this;
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:
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
};
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;
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);
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.
}
+ 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; }
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);
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
#define NPMTs 24
-int MakeTrendT0( char *infile, int run) {
+int MakeTrendT0( char *infile, int run, char* ocdbStorage="raw://") {
gSystem->Load("libANALYSIS");
gSystem->Load("libANALYSISalice");
//-------------------- 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();
Bool_t minSuccess = kFALSE;
if (minim) {
+ minSuccess = kTRUE;
+
TIter param(&fTrackParametrizations);
while (AliTRDtrackParametrization *par = (AliTRDtrackParametrization*) param()) {
minim->Clear();
minim->SetFunction(res);
par->SetParams(minim);
- minSuccess = minim->Minimize();
+ minSuccess &= minim->Minimize();
par->GetParams(minim);
}
}
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;
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;
}
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:
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");
}
}
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}")
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")
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}")
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")