19 #include <TClonesArray.h>
30 #include "AliAODEvent.h"
31 #include "AliAnalysisManager.h"
32 #include "AliCentrality.h"
33 #include "AliEMCALGeometry.h"
34 #include "AliESDEvent.h"
36 #include "AliEventplane.h"
37 #include "AliInputEventHandler.h"
39 #include "AliMCParticle.h"
40 #include "AliVCluster.h"
41 #include "AliVEventHandler.h"
42 #include "AliVParticle.h"
43 #include "AliAODTrack.h"
44 #include "AliVCaloTrigger.h"
45 #include "AliGenPythiaEventHeader.h"
46 #include "AliAODMCHeader.h"
47 #include "AliMCEvent.h"
48 #include "AliAnalysisUtils.h"
49 #include "AliEMCALTriggerPatchInfo.h"
51 #include "AliESDInputHandler.h"
52 #include "AliMultiInputEventHandler.h"
54 #include "AliMultSelection.h"
69 fGeneralHistograms(kFALSE),
70 fLocalInitialized(kFALSE),
74 fCaloTriggerPatchInfoName(),
82 fUseAliAnaUtils(kFALSE),
83 fRejectPileup(kFALSE),
84 fTklVsClusSPDCut(kFALSE),
85 fOffTrigger(AliVEvent::kAny),
91 fMinPtTrackInEmcal(0),
92 fEventPlaneVsEmcal(-1),
98 fSelectPtHardBin(-999),
102 fNeedEmcalGeom(kTRUE),
103 fParticleCollArray(),
106 fEMCalTriggerMode(kOverlapWithLowThreshold),
107 fUseNewCentralityEstimation(kFALSE),
108 fGeneratePythiaInfoObject(kFALSE),
109 fUsePtHardBinScaling(kFALSE),
110 fMCRejectFilter(kFALSE),
111 fPtHardAndJetPtFactor(0.),
112 fPtHardAndClusterPtFactor(0.),
113 fPtHardAndTrackPtFactor(0.),
115 fAliAnalysisUtils(0x0),
122 fTriggerPatchInfo(0),
139 fHistTrialsAfterSel(0),
140 fHistEventsAfterSel(0),
141 fHistXsectionAfterSel(0),
149 fHistEventRejection(0),
150 fHistTriggerClasses(0)
177 fGeneralHistograms(kFALSE),
178 fLocalInitialized(kFALSE),
182 fCaloTriggerPatchInfoName(),
190 fUseAliAnaUtils(kFALSE),
191 fRejectPileup(kFALSE),
192 fTklVsClusSPDCut(kFALSE),
193 fOffTrigger(AliVEvent::kAny),
195 fTriggerTypeSel(kND),
199 fMinPtTrackInEmcal(0),
200 fEventPlaneVsEmcal(-1),
201 fMinEventPlane(-1e6),
206 fSelectPtHardBin(-999),
210 fNeedEmcalGeom(kTRUE),
211 fParticleCollArray(),
214 fEMCalTriggerMode(kOverlapWithLowThreshold),
215 fUseNewCentralityEstimation(kFALSE),
216 fGeneratePythiaInfoObject(kFALSE),
217 fUsePtHardBinScaling(kFALSE),
218 fMCRejectFilter(kFALSE),
219 fPtHardAndJetPtFactor(0.),
220 fPtHardAndClusterPtFactor(0.),
221 fPtHardAndTrackPtFactor(0.),
223 fAliAnalysisUtils(0x0),
230 fTriggerPatchInfo(0),
247 fHistTrialsAfterSel(0),
248 fHistEventsAfterSel(0),
249 fHistXsectionAfterSel(0),
257 fHistEventRejection(0),
258 fHistTriggerClasses(0)
270 DefineOutput(1, AliEmcalList::Class());
291 else AliError(Form(
"%s in SetClusPtCut(...): container %d not found",GetName(),c));
305 else AliError(Form(
"%s in SetClusTimeCut(...): container %d not found",GetName(),c));
318 else AliError(Form(
"%s in SetTrackPtCut(...): container %d not found",GetName(),c));
334 else AliError(Form(
"%s in SetTrackPtCut(...): container %d not found",GetName(),c));
348 else AliError(Form(
"%s in SetTrackPhiLimits(...): container %d not found",GetName(),c));
374 AliVEventHandler *evhand = mgr->GetInputEventHandler();
376 if (evhand->InheritsFrom(
"AliESDInputHandler")) {
384 AliError(
"Event handler not found!");
388 AliError(
"Analysis manager not found!");
421 fHistTrials =
new TH1F(
"fHistTrials",
"fHistTrials", 11, 0, 11);
422 fHistTrials->GetXaxis()->SetTitle(
"p_{T} hard bin");
426 fHistEvents =
new TH1F(
"fHistEvents",
"fHistEvents", 11, 0, 11);
427 fHistEvents->GetXaxis()->SetTitle(
"p_{T} hard bin");
431 fHistXsection =
new TProfile(
"fHistXsection",
"fHistXsection", 11, 0, 11);
436 const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
437 const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
439 for (
Int_t i = 1; i < 12; i++) {
440 fHistTrialsAfterSel->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
441 fHistEventsAfterSel->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
443 fHistTrials->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
444 fHistXsection->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
445 fHistEvents->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
449 fHistPtHard->GetXaxis()->SetTitle(
"p_{T,hard} (GeV/c)");
454 fHistZVertex =
new TH1F(
"fHistZVertex",
"Z vertex position", 60, -30, 30);
460 fHistCentrality =
new TH1F(
"fHistCentrality",
"Event centrality distribution", 200, 0, 100);
465 fHistEventPlane =
new TH1F(
"fHistEventPlane",
"Event plane", 120, -TMath::Pi(), TMath::Pi());
472 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
495 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
540 TObjArray* triggerClasses = InputEvent()->GetFiredTriggerClasses().Tokenize(
" ");
541 TIter next(triggerClasses);
542 TObjString* triggerClass = 0;
543 while ((triggerClass = static_cast<TObjString*>(next()))) {
546 delete triggerClasses;
626 AliWarning(
"AliAnalysisTaskEmcal::AcceptCluster method is deprecated. Please use GetCusterContainer(c)->AcceptCluster(clus).");
628 if (!clus)
return kFALSE;
632 AliError(Form(
"%s:Container %d not found",GetName(),c));
635 UInt_t rejectionReason = 0;
649 AliWarning(
"AliAnalysisTaskEmcal::AcceptTrack method is deprecated. Please use GetParticleContainer(c)->AcceptParticle(clus).");
651 if (!track)
return kFALSE;
655 AliError(Form(
"%s:Container %d not found",GetName(),c));
659 UInt_t rejectionReason = 0;
681 if (file.Contains(
".zip#")) {
682 Ssiz_t pos1 = file.Index(
"root_archive",12,0,TString::kExact);
683 Ssiz_t pos = file.Index(
"#",1,pos1,TString::kExact);
684 Ssiz_t pos2 = file.Index(
".root",5,TString::kExact);
685 file.Replace(pos+1,pos2-pos1,
"");
688 file.ReplaceAll(
gSystem->BaseName(file.Data()),
"");
690 AliDebug(1,Form(
"File name: %s",file.Data()));
695 strPthard.Remove(strPthard.Last(
'/'));
696 strPthard.Remove(strPthard.Last(
'/'));
697 if (strPthard.Contains(
"AOD")) strPthard.Remove(strPthard.Last(
'/'));
698 strPthard.Remove(0,strPthard.Last(
'/')+1);
699 if (strPthard.IsDec()) pthard = strPthard.Atoi();
701 AliWarning(Form(
"Could not extract file number from path %s", strPthard.Data()));
704 std::unique_ptr<TFile> fxsec(TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec.root")));
708 fxsec = std::unique_ptr<TFile>(TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec_hists.root")));
709 if (!fxsec)
return kFALSE;
712 TKey* key = (TKey*)fxsec->GetListOfKeys()->At(0);
713 if (!key)
return kFALSE;
715 if (!list)
return kFALSE;
716 fXsec = ((TProfile*)list->FindObject(
"h1Xsec"))->GetBinContent(1);
717 fTrials = ((TH1F*)list->FindObject(
"h1Trials"))->GetBinContent(1);
720 TTree *xtree = (
TTree*)fxsec->Get(
"Xsection");
721 if (!xtree)
return kFALSE;
724 xtree->SetBranchAddress(
"xsection",&xsection);
725 xtree->SetBranchAddress(
"ntrials",&ntrials);
751 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
753 AliError(Form(
"%s - UserNotify: No current tree!",GetName()));
761 TFile *curfile = tree->GetCurrentFile();
763 AliError(Form(
"%s - UserNotify: No current file!",GetName()));
768 if (chain) tree = chain->GetTree();
775 if ((pthardbin < 0) || (pthardbin > 10)) pthardbin = 0;
793 AliError(Form(
"%s: Could not retrieve parton infos! %s!", GetName(),
fPythiaInfoName.Data()));
812 AliError(Form(
"%s: Could not retrieve event! Returning!", GetName()));
819 fGeom = AliEMCALGeometry::GetInstanceFromRunNumber(InputEvent()->
GetRunNumber());
821 AliFatal(Form(
"%s: Can not get EMCal geometry instance. If you do not need the EMCal geometry, disable it by setting task->SetNeedEmcalGeometry(kFALSE).", GetName()));
833 AliWarning(
"Could not set event plane limits because EMCal geometry was not loaded!");
840 cont->SetArray(InputEvent());
846 AliError(Form(
"%s: Could not retrieve first track branch!", GetName()));
854 cont->SetArray(InputEvent());
860 AliError(Form(
"%s: Could not retrieve first cluster branch!", GetName()));
868 AliError(Form(
"%s: Could not retrieve cells %s!", GetName(),
fCaloCellsName.Data()));
876 AliError(Form(
"%s: Could not retrieve calo triggers %s!", GetName(),
fCaloTriggersName.Data()));
906 const AliESDRun *run = esd->GetESDRun();
907 TString beamType = run->GetBeamType();
908 if (beamType ==
"p-p")
910 else if (beamType ==
"A-A")
912 else if (beamType ==
"p-A")
917 Int_t runNumber = InputEvent()->GetRunNumber();
918 if ((runNumber >= 136851 && runNumber <= 139517) ||
919 (runNumber >= 166529 && runNumber <= 170593)) {
921 }
else if ((runNumber>=188365 && runNumber <= 188366) ||
922 (runNumber >= 195344 && runNumber <= 196608)) {
950 AliEMCALTriggerPatchInfo *patch;
951 for (
Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
953 if (patch->IsGammaHigh()) nG1++;
954 if (patch->IsGammaLow()) nG2++;
955 if (patch->IsJetHigh()) nJ1++;
956 if (patch->IsJetLow()) nJ2++;
957 if (patch->IsLevel0()) nL0++;
960 AliDebug(2,
"Patch summary: ");
961 AliDebug(2, Form(
"Number of patches: %d", nPatch));
962 AliDebug(2, Form(
"Jet: low[%d], high[%d]" ,nJ2, nJ1));
963 AliDebug(2, Form(
"Gamma: low[%d], high[%d]" ,nG2, nG1));
966 if (nL0>0) SETBIT(triggers,
kL0);
967 if (nG1>0) SETBIT(triggers,
kG1);
968 if (nG2>0) SETBIT(triggers,
kG2);
969 if (nJ1>0) SETBIT(triggers,
kJ1);
970 if (nJ2>0) SETBIT(triggers,
kJ2);
984 AliWarning(Form(
"%s: Requesting undefined trigger type!", GetName()));
1021 res = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1025 res = ((AliVAODHeader*)aev->GetHeader())->GetOfflineTrigger();
1038 fired = eev->GetFiredTriggerClasses();
1042 fired = aev->GetFiredTriggerClasses();
1045 if (!fired.Contains(
"-B-")) {
1050 std::unique_ptr<TObjArray> arr(
fTrigClass.Tokenize(
"|"));
1056 for (
Int_t i=0;i<arr->GetEntriesFast();++i) {
1062 TString objStr = obj->GetName();
1064 (objStr.Contains(
"J1") || objStr.Contains(
"J2") || objStr.Contains(
"G1") || objStr.Contains(
"G2"))) {
1069 if(objStr.Contains(
"G")) {
1073 if(objStr.Contains(trigType2) && fired.Contains(trigType2.Data())) {
1077 else if(objStr.Contains(trigType1) && fired.Contains(trigType1.Data()) && !fired.Contains(trigType2.Data())) {
1085 if (fired.Contains(obj->GetName())) {
1105 if (fCent<fMinCent || fCent>
fMaxCent) {
1141 if (vz < fMinVz || vz >
fMaxVz) {
1148 Double_t dvertex = TMath::Abs(vz-vzSPD);
1158 Bool_t trackInEmcalOk = kFALSE;
1160 for (
Int_t i = 0; i < ntracks; i++) {
1165 Double_t phiMin =
fGeom->GetArm1PhiMin() * TMath::DegToRad();
1166 Double_t phiMax =
fGeom->GetArm1PhiMax() * TMath::DegToRad();
1167 Int_t runNumber = InputEvent()->GetRunNumber();
1168 if (runNumber>=177295 && runNumber<=197470) {
1170 phiMax = TMath::Pi();
1173 if (track->Eta() <
fGeom->GetArm1EtaMin() || track->Eta() >
fGeom->GetArm1EtaMax() || track->Phi() < phiMin || track->Phi() > phiMax)
1176 trackInEmcalOk = kTRUE;
1180 if (!trackInEmcalOk) {
1187 Int_t nTracksAcc = 0;
1189 for (
Int_t i = 0; i < ntracks; i++) {
1239 AliDebug(1,Form(
"Njets: %d, pT Hard %f",nTriggerJets,
fPtHard));
1242 for (
Int_t ijet = 0; ijet< nTriggerJets; ijet++) {
1245 jet.SetPxPyPzE(tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3]);
1247 AliDebug(1,Form(
"jet %d; pycell jet pT %f",ijet, jet.Pt()));
1251 AliInfo(Form(
"Reject jet event with : pT Hard %2.2f, pycell jet pT %2.2f, rejection factor %1.1f\n",
fPtHard, jet.Pt(),
fPtHardAndJetPtFactor));
1261 if ((
Bool_t)mccluscont) {
1262 for (
auto cluster : mccluscont->all()) {
1263 Float_t ecluster = cluster->E();
1277 if ((
Bool_t)mcpartcont) {
1278 for (
auto mctrack : mcpartcont->
all()) {
1279 Float_t trackpt = mctrack->Pt();
1302 TClonesArray *arr = 0;
1304 if (!sname.IsNull()) {
1305 arr =
dynamic_cast<TClonesArray*
>(InputEvent()->FindListObject(sname));
1307 AliWarning(Form(
"%s: Could not retrieve array with name %s!", GetName(), name));
1317 TString objname(arr->GetClass()->GetName());
1318 TClass cls(objname);
1319 if (!cls.InheritsFrom(clname)) {
1320 AliWarning(Form(
"%s: Objects of type %s in %s are not inherited from %s!",
1321 GetName(), cls.GetName(), name, clname));
1347 const AliVVertex *vert = InputEvent()->GetPrimaryVertex();
1353 const AliVVertex *vertSPD = InputEvent()->GetPrimaryVertexSPD();
1363 AliMultSelection *MultSelection =
static_cast<AliMultSelection*
>(InputEvent()->FindListObject(
"MultSelection"));
1364 if (MultSelection) {
1365 fCent = MultSelection->GetMultiplicityPercentile(
fCentEst.Data());
1368 AliWarning(Form(
"%s: Could not retrieve centrality information! Assuming 99", GetName()));
1372 AliCentrality *aliCent = InputEvent()->GetCentrality();
1377 AliWarning(Form(
"%s: Could not retrieve centrality information! Assuming 99", GetName()));
1387 AliWarning(Form(
"%s: Negative centrality: %f. Assuming 99", GetName(),
fCent));
1396 else if (
fCent > 90) {
1401 AliWarning(Form(
"%s: Negative centrality: %f. Assuming 99", GetName(),
fCent));
1414 AliWarning(Form(
"%s: fCentBin too large: cent = %f fCentBin = %d. Assuming 99", GetName(),
fCent,
fCentBin));
1419 AliEventplane *aliEP = InputEvent()->GetEventplane();
1421 fEPV0 = aliEP->GetEventplane(
"V0" ,InputEvent());
1422 fEPV0A = aliEP->GetEventplane(
"V0A",InputEvent());
1423 fEPV0C = aliEP->GetEventplane(
"V0C",InputEvent());
1425 AliWarning(Form(
"%s: Could not retrieve event plane information!", GetName()));
1435 fPythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
1438 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
1441 for (
UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++) {
1442 fPythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
1453 const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
1454 const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
1466 AliEmcalContainer* cont = 0;
1469 while ((cont = static_cast<AliEmcalContainer*>(nextPartColl()))) cont->NextEvent();
1472 while ((cont = static_cast<AliParticleContainer*>(nextClusColl()))) cont->NextEvent();
1486 if (
TString(n).IsNull())
return 0;
1504 if (
TString(n).IsNull())
return 0;
1522 if (
TString(n).IsNull())
return 0;
1540 if (
TString(n).IsNull())
return 0;
1604 AliError(Form(
"%s: Particle container %d not found",GetName(),i));
1607 TString contName = cont->GetArrayName();
1608 return cont->GetArray();
1620 AliError(Form(
"%s:Cluster container %d not found",GetName(),i));
1623 return cont->GetArray();
1638 AliError(Form(
"%s: Particle container %d not found",GetName(),c));
1657 AliError(Form(
"%s: Cluster container %d not found",GetName(),c));
1674 AliError(Form(
"%s: Particle container %d not found",GetName(),i));
1677 return cont->GetNEntries();
1690 AliError(Form(
"%s: Cluster container %d not found",GetName(),i));
1693 return cont->GetNEntries();
1711 AliError(Form(
"%s: fTriggerPatchInfo not available",GetName()));
1719 AliEMCALTriggerPatchInfo *patch(NULL), *selected(NULL);
1720 for (
Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
1723 if (patch->IsMainTrigger()) {
1724 if(doSimpleOffline){
1725 if(patch->IsOfflineSimple()){
1729 if(patch->IsLevel0()) selected = patch;
1732 if(patch->IsJetHighSimple() || patch->IsJetLowSimple()){
1733 if(!selected) selected = patch;
1734 else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
1738 if(patch->IsGammaHighSimple() || patch->IsGammaLowSimple()){
1739 if(!selected) selected = patch;
1740 else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
1744 AliError(
"Untreated case: Main Patch is recalculated; should be in 'else' branch");
1750 if(patch->IsLevel0()) selected = patch;
1753 if(patch->IsJetHigh() || patch->IsJetLow()){
1754 if(!selected) selected = patch;
1755 else if (patch->GetADCAmp() > selected->GetADCAmp())
1760 if(patch->IsGammaHigh() || patch->IsGammaLow()){
1761 if(!selected) selected = patch;
1762 else if (patch->GetADCAmp() > selected->GetADCAmp())
1767 AliError(
"Untreated case: Main Patch is recalculated; should be in 'else' branch");
1773 if (doSimpleOffline && patch->IsOfflineSimple()) {
1774 if(!selected) selected = patch;
1775 else if (patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp())
1778 else if (!doSimpleOffline && !patch->IsOfflineSimple()) {
1779 if(!selected) selected = patch;
1780 else if (patch->GetADCAmp() > selected->GetADCAmp())
1795 if (!(InputEvent()->FindListObject(obj->GetName()))) {
1796 InputEvent()->AddObject(obj);
1800 AliFatal(Form(
"%s: Container with name %s already present. Aborting", GetName(), obj->GetName()));
1816 AliWarning(Form(
"%s - AliAnalysisTaskEmcal::IsTrackInEmcalAcceptance - Geometry is not available!", GetName()));
1823 if (part->Phi() > minPhi && part->Phi() < maxPhi) {
1833 axis->SetBinLabel(1,
"NullObject");
1834 axis->SetBinLabel(2,
"Pt");
1835 axis->SetBinLabel(3,
"Acceptance");
1836 axis->SetBinLabel(4,
"MCLabel");
1837 axis->SetBinLabel(5,
"BitMap");
1838 axis->SetBinLabel(6,
"HF cut");
1839 axis->SetBinLabel(7,
"Bit6");
1840 axis->SetBinLabel(8,
"NotHybridTrack");
1841 axis->SetBinLabel(9,
"MCFlag");
1842 axis->SetBinLabel(10,
"MCGenerator");
1843 axis->SetBinLabel(11,
"ChargeCut");
1844 axis->SetBinLabel(12,
"MinDistanceTPCSectorEdge");
1845 axis->SetBinLabel(13,
"Bit12");
1846 axis->SetBinLabel(14,
"IsEMCal");
1847 axis->SetBinLabel(15,
"Time");
1848 axis->SetBinLabel(16,
"Energy");
1849 axis->SetBinLabel(17,
"ExoticCut");
1850 axis->SetBinLabel(18,
"Bit17");
1851 axis->SetBinLabel(19,
"Area");
1852 axis->SetBinLabel(20,
"AreaEmc");
1853 axis->SetBinLabel(21,
"ZLeadingCh");
1854 axis->SetBinLabel(22,
"ZLeadingEmc");
1855 axis->SetBinLabel(23,
"NEF");
1856 axis->SetBinLabel(24,
"MinLeadPt");
1857 axis->SetBinLabel(25,
"MaxTrackPt");
1858 axis->SetBinLabel(26,
"MaxClusterPt");
1859 axis->SetBinLabel(27,
"Flavour");
1860 axis->SetBinLabel(28,
"TagStatus");
1861 axis->SetBinLabel(29,
"MinNConstituents");
1862 axis->SetBinLabel(30,
"Bit29");
1863 axis->SetBinLabel(31,
"Bit30");
1864 axis->SetBinLabel(32,
"Bit31");
1875 TVector3 vect1(part1->Px(), part1->Py(), part1->Pz());
1876 TVector3 vect2(part2->Px(), part2->Py(), part2->Pz());
1877 Double_t z = (vect1 * vect2) / (vect2 * vect2);
1889 TVector3 vect2(part2->Px(), part2->Py(), part2->Pz());
1890 Double_t z = (vect1 * vect2) / (vect2 * vect2);
1909 Double_t veta = t->GetTrackEtaOnEMCal();
1910 Double_t vphi = t->GetTrackPhiOnEMCal();
1913 v->GetPosition(pos);
1918 phidiff=TVector2::Phi_mpi_pi(vphi-cphi);
1929 if (t->TestBit(BIT(22)) && !t->TestBit(BIT(23)))
1931 else if (!t->TestBit(BIT(22)) && t->TestBit(BIT(23)))
1933 else if (t->TestBit(BIT(22)) && t->TestBit(BIT(23)))
1952 if (aodTrack->TestFilterBit(filterBit1)) {
1955 else if (aodTrack->TestFilterBit(filterBit2)) {
1956 if ((aodTrack->GetStatus()&AliVTrack::kITSrefit)!=0) {
1980 AliStack* stack = mcEvent->Stack();
1982 const Int_t nprim = stack->GetNprimary();
1984 if (nprim < 8)
return;
1986 TParticle *part6 = stack->Particle(6);
1987 TParticle *part7 = stack->Particle(7);
1995 AliGenPythiaEventHeader *pythiaGenHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(mcEvent->GenEventHeader());
1996 if(pythiaGenHeader){
2009 ::Error(
"AddESDHandler",
"No analysis manager to connect to.");
2013 AliESDInputHandler *esdHandler =
new AliESDInputHandler();
2015 AliVEventHandler *inputHandler=mgr->GetInputEventHandler();
2016 if (inputHandler && (inputHandler->IsA() == AliMultiInputEventHandler::Class())) {
2017 AliMultiInputEventHandler *multiInputHandler=(AliMultiInputEventHandler*)inputHandler;
2018 multiInputHandler->AddInputEventHandler(esdHandler);
2021 if (!inputHandler) {
2022 mgr->SetInputEventHandler(esdHandler);
2025 ::Error(
"AddESDHandler",
"inputHandler is NOT null. ESD handler was NOT added !!!");
Bool_t fGeneratePythiaInfoObject
Generate Pythia info object.
TObjArray fClusterCollArray
cluster collection array
Int_t fNVertSPDCont
!event SPD vertex number of contributors
void SetParticlePtCut(Double_t cut)
Bool_t fIsPythia
trigger, if it is a PYTHIA production
void SetParton7(Float_t pt, Float_t eta, Float_t phi, Float_t mass=0)
TH1 * fHistTrials
!trials from pyxsec.root
EMCAL Level1 gamma trigger, low threshold.
AliEmcalPythiaInfo * fPythiaInfo
!event parton info
Bool_t AcceptTrack(AliVParticle *track, Int_t c=0) const
EMCAL Level1 jet trigger, low threshold.
Bool_t HasTriggerType(TriggerType triggersel)
Int_t fNTrials
!event trials
UInt_t fOffTrigger
offline trigger for event selection
Double_t fVertexSPD[3]
!event Svertex
Double_t fMinCent
min centrality for event selection
Double_t fTrackPtCut
cut on track pt in event selection
Recalculated jet trigger patch; does not need to be above trigger threshold.
Base task in the EMCAL framework.
Bool_t fLocalInitialized
whether or not the task has been already initialized
Bool_t fUsePtHardBinScaling
Use pt hard bin scaling in merging.
void SetPartonFlag7(Int_t flag7)
Container with name, TClonesArray and cuts for particles.
Double_t fPtHard
!event pt hard
void SetTrackPtCut(Double_t cut, Int_t c=0)
static void GetEtaPhiDiff(const AliVTrack *t, const AliVCluster *v, Double_t &phidiff, Double_t &etadiff)
Double_t fMinBinPt
min pt in histograms
Double_t fEPV0
!event plane V0
Bool_t fGeneralHistograms
whether or not it should fill some general histograms
Bool_t AcceptCluster(AliVCluster *clus, Int_t c=0) const
virtual void UserExecOnce()
Int_t fCentBin
!event centrality bin
TH1 * fHistEventsAfterSel
!total number of events per pt hard bin after selection
const AliMCParticleIterableContainer all() const
Float_t fPtHardAndClusterPtFactor
Factor between ptHard and cluster pT to reject/accept event.
Double_t fMinPtTrackInEmcal
min pt track in emcal
TH1 * fHistEventPlane
!event plane distribution
TH1 * fHistEvents
!total number of events per pt hard bin
void SetClusPtCut(Double_t cut, Int_t c=0)
AliClusterContainer * AddClusterContainer(const char *n)
Double_t fEPV0C
!event plane V0C
void SetParton6(Float_t pt, Float_t eta, Float_t phi, Float_t mass=0)
TH1 * fHistCentrality
!event centrality distribution
Container for particles within the EMCAL framework.
TObjArray fParticleCollArray
particle/track collection array
BeamType
Switch for the beam type.
void SetTrackEtaLimits(Double_t min, Double_t max, Int_t c=0)
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Level1 jet trigger patch.
TProfile * fHistXsectionAfterSel
!x section from pythia header
TriggerType
Switch for EMCAL trigger types.
EMCalTriggerMode_t fEMCalTriggerMode
EMCal trigger selection mode.
virtual Bool_t FillHistograms()
Int_t GetNParticles(Int_t i=0) const
TClonesArray * fCaloClusters
!clusters
Bool_t fUseNewCentralityEstimation
Use new centrality estimation (for 2015 data)
Bool_t IsTrackInEmcalAcceptance(AliVParticle *part, Double_t edges=0.9) const
TH1 * fHistTriggerClasses
!number of events in each trigger class
Double_t fMaxVz
max vertex for event selection
void GeneratePythiaInfoObject(AliMCEvent *mcEvent)
AliEMCALGeometry * fGeom
!emcal geometry
The overlap between low and high threshold trigger is assigned to the lower threshold only...
kRecalculated gamma trigger patch; does not need to be above trigger threshold
TString fCaloTriggerPatchInfoName
trigger patch info array name
TString fCaloTriggersName
name of calo triggers collection
AliGenPythiaEventHeader * fPythiaHeader
!event Pythia header
void SetTrackPhiLimits(Double_t min, Double_t max, Int_t c=0)
AliParticleContainer * AddParticleContainer(const char *n)
AliAnalysisUtils * fAliAnalysisUtils
!vertex selection (optional)
BeamType fForceBeamType
forced beam type
void SetUseScaling(Bool_t val)
Int_t fNcentBins
how many centrality bins
AliClusterContainer * GetClusterContainer(Int_t i=0) const
TriggerType fTriggerTypeSel
trigger type to select based on trigger patches
virtual Bool_t AcceptCluster(Int_t i, UInt_t &rejectionReason) const
virtual Bool_t FillGeneralHistograms()
TString fTrigClass
trigger class name for event selection
Float_t fPtHardAndJetPtFactor
Factor between ptHard and jet pT to reject/accept event.
AliVCluster * GetAcceptCluster(Int_t i) const
TClonesArray * GetParticleArray(Int_t i=0) const
Double_t fMinVz
min vertex for event selection
virtual AliVParticle * GetAcceptParticle(Int_t i=-1) const
BeamType fBeamType
!event beam type
Float_t fPtHardAndTrackPtFactor
Factor between ptHard and track pT to reject/accept event.
Double_t fCent
!event centrality
Double_t fMinEventPlane
minimum event plane value
TString fCaloCellsName
name of calo cell collection
Int_t GetNClusters(Int_t i=0) const
Int_t fNVertCont
!event vertex number of contributors
Bool_t fMCRejectFilter
enable the filtering of events by tail rejection
Double_t fZvertexDiff
upper limit for distance between primary and SPD vertex
virtual Bool_t AcceptParticle(const AliVParticle *vp, UInt_t &rejectionReason) const
EMCAL Level1 jet trigger, high threshold.
Int_t fSelectPtHardBin
select one pt hard bin for analysis
AliMCParticleContainer * AddMCParticleContainer(const char *n)
static Double_t GetParallelFraction(AliVParticle *part1, AliVParticle *part2)
virtual Bool_t RetrieveEventObjects()
Bool_t fRejectPileup
Reject pilup using function AliAnalysisUtils::IsPileUpEvent()
TProfile * fHistXsection
!x section from pyxsec.root
Bool_t PythiaInfoFromFile(const char *currFile, Float_t &fXsec, Float_t &fTrials, Int_t &pthard)
void UserExec(Option_t *option)
void SetPartonFlag6(Int_t flag6)
AliVCaloCells * fCaloCells
!cells
TClonesArray * GetArrayFromEvent(const char *name, const char *clname=0)
Enhanced TList-derived class that implements correct merging for pt_hard binned production.
Double_t fEventPlaneVsEmcal
select events which have a certain event plane wrt the emcal
virtual Bool_t IsEventSelected()
TH1 * fHistPtHard
!pt hard distribution
void SetParticleEtaLimits(Double_t min, Double_t max)
AliEmcalList * fOutput
!output list
Double_t fMaxBinPt
max pt in histograms
Int_t fPtHardBin
!event pt hard bin
virtual void RunChanged(Int_t)
TClonesArray * fTracks
!tracks
TH1 * fHistTrialsAfterSel
!total number of trials per pt hard bin after selection
void LoadPythiaInfo(AliVEvent *event)
Bool_t fIsEsd
!whether it's an ESD analysis
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Double_t fVertex[3]
!event vertex
AliTrackContainer * AddTrackContainer(const char *n)
Bool_t fCreateHisto
whether or not create histograms
Store some informaion about a Pythia eventThis class is used to store some information about a Pythia...
TH1 * fHistEventRejection
!book keep reasons for rejecting event
TClonesArray * fTriggerPatchInfo
!trigger patch info array
TClonesArray * GetClusterArray(Int_t i=0) const
Double_t fEPV0A
!event plane V0A
TString fCentEst
name of V0 centrality estimator
TString fPythiaInfoName
name of pythia info object
Int_t GetRunNumber(TString)
Declaration of class AliEmcalPythiaInfo.
void SetClusPtCut(Double_t cut)
Int_t fRunNumber
!run number (triggering RunChanged()
EMCAL Level1 gamma trigger, high threshold.
void AddObjectToEvent(TObject *obj, Bool_t attempt=kFALSE)
AliVCaloTrigger * fCaloTriggers
!calo triggers
void SetRejectionReasonLabels(TAxis *axis)
void UserCreateOutputObjects()
TH1 * fHistZVertex
!z vertex position
Int_t fMinNTrack
minimum nr of tracks in event with pT>fTrackPtCut
static Byte_t GetTrackType(const AliVTrack *t)
Bool_t fUseAliAnaUtils
used for LHC13* data: z-vtx, Ncontributors, z-vtx resolution cuts
void SetClusTimeCut(Double_t min, Double_t max, Int_t c=0)
ULong_t fTriggers
list of fired triggers
static AliESDInputHandler * AddESDHandler()
Double_t fMaxEventPlane
maximum event plane value
void SetPythiaEventWeight(Float_t ptWeight)
Float_t fXsection
!x-section from pythia header
TH1 * fHistEventCount
!incoming and selected events
Double_t fMaxCent
max centrality for event selection
void SetClusTimeCut(Double_t min, Double_t max)
TriggerCategory
Online trigger categories.
void SetParticlePhiLimits(Double_t min, Double_t max)
AliVParticle * GetAcceptParticleFromArray(Int_t p, Int_t c=0) const
Container structure for EMCAL clusters.
Container for MC-true particles within the EMCAL framework.
Bool_t fNeedEmcalGeom
whether or not the task needs the emcal geometry
AliVCluster * GetAcceptClusterFromArray(Int_t cl, Int_t c=0) const
Int_t fNbins
no. of pt bins
Bool_t fTklVsClusSPDCut
Apply tracklet-vs-cluster SPD cut to reject background events in pp.
TList * OpenFile(const char *fname)
virtual ~AliAnalysisTaskEmcal()
AliEMCALTriggerPatchInfo * GetMainTriggerPatch(TriggerCategory triggersel=kTriggerLevel1Jet, Bool_t doOfflinSimple=kFALSE)
Level1 gamma trigger patch.
static Double_t fgkEMCalDCalPhiDivide
phi value used to distinguish between DCal and EMCal