18 #include <TClonesArray.h>
29 #include "AliAODEvent.h"
30 #include "AliAnalysisManager.h"
31 #include "AliCentrality.h"
32 #include "AliEMCALGeometry.h"
33 #include "AliESDEvent.h"
35 #include "AliEventplane.h"
36 #include "AliInputEventHandler.h"
38 #include "AliMCParticle.h"
39 #include "AliVCluster.h"
40 #include "AliVEventHandler.h"
41 #include "AliVParticle.h"
42 #include "AliAODTrack.h"
43 #include "AliVCaloTrigger.h"
44 #include "AliGenPythiaEventHeader.h"
45 #include "AliAODMCHeader.h"
46 #include "AliMCEvent.h"
47 #include "AliAnalysisUtils.h"
48 #include "AliEMCALTriggerPatchInfo.h"
51 #include "AliMultSelection.h"
63 AliAnalysisTaskSE(
"AliAnalysisTaskEmcal"),
66 fGeneralHistograms(kFALSE),
71 fCaloTriggerPatchInfoName(),
79 fUseAliAnaUtils(kFALSE),
80 fRejectPileup(kFALSE),
81 fTklVsClusSPDCut(kFALSE),
82 fOffTrigger(AliVEvent::kAny),
88 fMinPtTrackInEmcal(0),
89 fEventPlaneVsEmcal(-1),
95 fSelectPtHardBin(-999),
99 fNeedEmcalGeom(kTRUE),
100 fParticleCollArray(),
103 fEMCalTriggerMode(kOverlapWithLowThreshold),
104 fUseNewCentralityEstimation(kFALSE),
105 fGeneratePythiaInfoObject(kFALSE),
106 fMCRejectFilter(kFALSE),
107 fPtHardAndJetPtFactor(0.),
108 fPtHardAndClusterPtFactor(0.),
109 fPtHardAndTrackPtFactor(0.),
110 fAliAnalysisUtils(0x0),
117 fTriggerPatchInfo(0),
134 fHistTrialsAfterSel(0),
135 fHistEventsAfterSel(0),
136 fHistXsectionAfterSel(0),
144 fHistEventRejection(0),
145 fHistTriggerClasses(0)
169 AliAnalysisTaskSE(name),
172 fGeneralHistograms(kFALSE),
173 fInitialized(kFALSE),
177 fCaloTriggerPatchInfoName(),
185 fUseAliAnaUtils(kFALSE),
186 fRejectPileup(kFALSE),
187 fTklVsClusSPDCut(kFALSE),
188 fOffTrigger(AliVEvent::kAny),
190 fTriggerTypeSel(kND),
194 fMinPtTrackInEmcal(0),
195 fEventPlaneVsEmcal(-1),
196 fMinEventPlane(-1e6),
201 fSelectPtHardBin(-999),
205 fNeedEmcalGeom(kTRUE),
206 fParticleCollArray(),
209 fEMCalTriggerMode(kOverlapWithLowThreshold),
210 fUseNewCentralityEstimation(kFALSE),
211 fGeneratePythiaInfoObject(kFALSE),
212 fMCRejectFilter(kFALSE),
213 fPtHardAndJetPtFactor(0.),
214 fPtHardAndClusterPtFactor(0.),
215 fPtHardAndTrackPtFactor(0.),
216 fAliAnalysisUtils(0x0),
223 fTriggerPatchInfo(0),
240 fHistTrialsAfterSel(0),
241 fHistEventsAfterSel(0),
242 fHistXsectionAfterSel(0),
250 fHistEventRejection(0),
251 fHistTriggerClasses(0)
263 DefineOutput(1, TList::Class());
284 else AliError(Form(
"%s in SetClusPtCut(...): container %d not found",GetName(),c));
298 else AliError(Form(
"%s in SetClusTimeCut(...): container %d not found",GetName(),c));
311 else AliError(Form(
"%s in SetTrackPtCut(...): container %d not found",GetName(),c));
327 else AliError(Form(
"%s in SetTrackPtCut(...): container %d not found",GetName(),c));
341 else AliError(Form(
"%s in SetTrackPhiLimits(...): container %d not found",GetName(),c));
365 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
367 AliVEventHandler *evhand = mgr->GetInputEventHandler();
369 if (evhand->InheritsFrom(
"AliESDInputHandler")) {
377 AliError(
"Event handler not found!");
381 AliError(
"Analysis manager not found!");
413 fHistTrials =
new TH1F(
"fHistTrials",
"fHistTrials", 11, 0, 11);
414 fHistTrials->GetXaxis()->SetTitle(
"p_{T} hard bin");
418 fHistEvents =
new TH1F(
"fHistEvents",
"fHistEvents", 11, 0, 11);
419 fHistEvents->GetXaxis()->SetTitle(
"p_{T} hard bin");
423 fHistXsection =
new TProfile(
"fHistXsection",
"fHistXsection", 11, 0, 11);
428 const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
429 const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
431 for (Int_t i = 1; i < 12; i++) {
432 fHistTrialsAfterSel->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
433 fHistEventsAfterSel->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
435 fHistTrials->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
436 fHistXsection->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
437 fHistEvents->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
441 fHistPtHard->GetXaxis()->SetTitle(
"p_{T,hard} (GeV/c)");
446 fHistZVertex =
new TH1F(
"fHistZVertex",
"Z vertex position", 60, -30, 30);
452 fHistCentrality =
new TH1F(
"fHistCentrality",
"Event centrality distribution", 200, 0, 100);
457 fHistEventPlane =
new TH1F(
"fHistEventPlane",
"Event plane", 120, -TMath::Pi(), TMath::Pi());
464 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
487 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
532 TObjArray* triggerClasses = InputEvent()->GetFiredTriggerClasses().Tokenize(
" ");
533 TIter next(triggerClasses);
534 TObjString* triggerClass = 0;
535 while ((triggerClass = static_cast<TObjString*>(next()))) {
538 delete triggerClasses;
611 AliWarning(
"AliAnalysisTaskEmcal::AcceptCluster method is deprecated. Please use GetCusterContainer(c)->AcceptCluster(clus).");
613 if (!clus)
return kFALSE;
617 AliError(Form(
"%s:Container %d not found",GetName(),c));
620 UInt_t rejectionReason = 0;
634 AliWarning(
"AliAnalysisTaskEmcal::AcceptTrack method is deprecated. Please use GetParticleContainer(c)->AcceptParticle(clus).");
636 if (!track)
return kFALSE;
640 AliError(Form(
"%s:Container %d not found",GetName(),c));
644 UInt_t rejectionReason = 0;
662 TString
file(currFile);
666 if (file.Contains(
".zip#")) {
667 Ssiz_t pos1 = file.Index(
"root_archive",12,0,TString::kExact);
668 Ssiz_t pos = file.Index(
"#",1,pos1,TString::kExact);
669 Ssiz_t pos2 = file.Index(
".root",5,TString::kExact);
670 file.Replace(pos+1,pos2-pos1,
"");
673 file.ReplaceAll(
gSystem->BaseName(file.Data()),
"");
675 AliDebug(1,Form(
"File name: %s",file.Data()));
678 TString strPthard(file);
680 strPthard.Remove(strPthard.Last(
'/'));
681 strPthard.Remove(strPthard.Last(
'/'));
682 if (strPthard.Contains(
"AOD")) strPthard.Remove(strPthard.Last(
'/'));
683 strPthard.Remove(0,strPthard.Last(
'/')+1);
684 if (strPthard.IsDec())
685 pthard = strPthard.Atoi();
687 AliWarning(Form(
"Could not extract file number from path %s", strPthard.Data()));
690 TFile *fxsec = TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec.root"));
694 fxsec = TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec_hists.root"));
700 TKey* key = (TKey*)fxsec->GetListOfKeys()->At(0);
705 TList *
list =
dynamic_cast<TList*
>(key->ReadObj());
710 fXsec = ((TProfile*)list->FindObject(
"h1Xsec"))->GetBinContent(1);
711 fTrials = ((TH1F*)list->FindObject(
"h1Trials"))->GetBinContent(1);
715 TTree *xtree = (TTree*)fxsec->Get(
"Xsection");
721 Double_t xsection = 0;
722 xtree->SetBranchAddress(
"xsection",&xsection);
723 xtree->SetBranchAddress(
"ntrials",&ntrials);
750 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
752 AliError(Form(
"%s - UserNotify: No current tree!",GetName()));
756 Float_t xsection = 0;
760 TFile *curfile = tree->GetCurrentFile();
762 AliError(Form(
"%s - UserNotify: No current file!",GetName()));
766 TChain *chain =
dynamic_cast<TChain*
>(tree);
767 if (chain) tree = chain->GetTree();
769 Int_t
nevents = tree->GetEntriesFast();
774 if ((pthardbin < 0) || (pthardbin > 10)) pthardbin = 0;
792 AliError(Form(
"%s: Could not retrieve parton infos! %s!", GetName(),
fPythiaInfoName.Data()));
811 AliError(Form(
"%s: Could not retrieve event! Returning!", GetName()));
819 fPythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
822 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
825 for (UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++) {
826 fPythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
835 fGeom = AliEMCALGeometry::GetInstanceFromRunNumber(InputEvent()->
GetRunNumber());
837 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()));
849 AliWarning(
"Could not set event plane limits because EMCal geometry was not loaded!");
856 cont->SetArray(InputEvent());
862 AliError(Form(
"%s: Could not retrieve first track branch!", GetName()));
870 cont->SetArray(InputEvent());
876 AliError(Form(
"%s: Could not retrieve first cluster branch!", GetName()));
884 AliError(Form(
"%s: Could not retrieve cells %s!", GetName(),
fCaloCellsName.Data()));
892 AliError(Form(
"%s: Could not retrieve calo triggers %s!", GetName(),
fCaloTriggersName.Data()));
920 AliESDEvent *esd =
dynamic_cast<AliESDEvent*
>(InputEvent());
922 const AliESDRun *run = esd->GetESDRun();
923 TString beamType = run->GetBeamType();
924 if (beamType ==
"p-p")
926 else if (beamType ==
"A-A")
928 else if (beamType ==
"p-A")
933 Int_t runNumber = InputEvent()->GetRunNumber();
934 if ((runNumber >= 136851 && runNumber <= 139517) ||
935 (runNumber >= 166529 && runNumber <= 170593)) {
937 }
else if ((runNumber>=188365 && runNumber <= 188366) ||
938 (runNumber >= 195344 && runNumber <= 196608)) {
966 AliEMCALTriggerPatchInfo *patch;
967 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
969 if (patch->IsGammaHigh()) nG1++;
970 if (patch->IsGammaLow()) nG2++;
971 if (patch->IsJetHigh()) nJ1++;
972 if (patch->IsJetLow()) nJ2++;
973 if (patch->IsLevel0()) nL0++;
976 AliDebug(2,
"Patch summary: ");
977 AliDebug(2, Form(
"Number of patches: %d", nPatch));
978 AliDebug(2, Form(
"Jet: low[%d], high[%d]" ,nJ2, nJ1));
979 AliDebug(2, Form(
"Gamma: low[%d], high[%d]" ,nG2, nG1));
982 if (nL0>0) SETBIT(triggers,
kL0);
983 if (nG1>0) SETBIT(triggers,
kG1);
984 if (nG2>0) SETBIT(triggers,
kG2);
985 if (nJ1>0) SETBIT(triggers,
kJ1);
986 if (nJ2>0) SETBIT(triggers,
kJ2);
1000 AliWarning(Form(
"%s: Requesting undefined trigger type!", GetName()));
1035 const AliESDEvent *eev =
dynamic_cast<const AliESDEvent*
>(InputEvent());
1037 res = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1039 const AliAODEvent *aev =
dynamic_cast<const AliAODEvent*
>(InputEvent());
1041 res = ((AliVAODHeader*)aev->GetHeader())->GetOfflineTrigger();
1052 const AliESDEvent *eev =
dynamic_cast<const AliESDEvent*
>(InputEvent());
1054 fired = eev->GetFiredTriggerClasses();
1056 const AliAODEvent *aev =
dynamic_cast<const AliAODEvent*
>(InputEvent());
1058 fired = aev->GetFiredTriggerClasses();
1061 if (!fired.Contains(
"-B-")) {
1072 for (Int_t i=0;i<arr->GetEntriesFast();++i) {
1073 TObject *obj = arr->At(i);
1078 TString objStr = obj->GetName();
1080 (objStr.Contains(
"J1") || objStr.Contains(
"J2") || objStr.Contains(
"G1") || objStr.Contains(
"G2"))) {
1083 TString trigType1 =
"J1";
1084 TString trigType2 =
"J2";
1085 if(objStr.Contains(
"G")) {
1089 if(objStr.Contains(trigType2) && fired.Contains(trigType2.Data())) {
1093 else if(objStr.Contains(trigType1) && fired.Contains(trigType1.Data()) && !fired.Contains(trigType2.Data())) {
1101 if (fired.Contains(obj->GetName())) {
1122 if (fCent<fMinCent || fCent>
fMaxCent) {
1158 if (vz < fMinVz || vz >
fMaxVz) {
1165 Double_t dvertex = TMath::Abs(vz-vzSPD);
1175 Bool_t trackInEmcalOk = kFALSE;
1177 for (Int_t i = 0; i < ntracks; i++) {
1182 Double_t phiMin =
fGeom->GetArm1PhiMin() * TMath::DegToRad();
1183 Double_t phiMax =
fGeom->GetArm1PhiMax() * TMath::DegToRad();
1184 Int_t runNumber = InputEvent()->GetRunNumber();
1185 if (runNumber>=177295 && runNumber<=197470) {
1187 phiMax = TMath::Pi();
1190 if (track->Eta() <
fGeom->GetArm1EtaMin() || track->Eta() >
fGeom->GetArm1EtaMax() || track->Phi() < phiMin || track->Phi() > phiMax)
1193 trackInEmcalOk = kTRUE;
1197 if (!trackInEmcalOk) {
1204 Int_t nTracksAcc = 0;
1206 for (Int_t i = 0; i < ntracks; i++) {
1252 AliTLorentzVector jet;
1256 AliDebug(1,Form(
"Njets: %d, pT Hard %f",nTriggerJets,
fPtHard));
1258 Float_t tmpjet[]={0,0,0,0};
1259 for (Int_t ijet = 0; ijet< nTriggerJets; ijet++) {
1262 jet.SetPxPyPzE(tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3]);
1264 AliDebug(1,Form(
"jet %d; pycell jet pT %f",ijet, jet.Pt()));
1268 AliInfo(Form(
"Reject jet event with : pT Hard %2.2f, pycell jet pT %2.2f, rejection factor %1.1f\n",
fPtHard, jet.Pt(),
fPtHardAndJetPtFactor));
1278 if ((Bool_t)mccluscont) {
1279 for (
auto obj : mccluscont->all()) {
1280 AliVCluster* cluster =
static_cast<AliVCluster*
>(obj);
1281 Float_t ecluster = cluster->E();
1295 if ((Bool_t)mcpartcont) {
1296 for (
auto obj : mcpartcont->all()) {
1297 AliAODMCParticle* mctrack =
static_cast<AliAODMCParticle*
>(obj);
1298 Float_t trackpt = mctrack->Pt();
1321 TClonesArray *arr = 0;
1322 TString sname(name);
1323 if (!sname.IsNull()) {
1324 arr =
dynamic_cast<TClonesArray*
>(InputEvent()->FindListObject(sname));
1326 AliWarning(Form(
"%s: Could not retrieve array with name %s!", GetName(), name));
1336 TString objname(arr->GetClass()->GetName());
1337 TClass cls(objname);
1338 if (!cls.InheritsFrom(clname)) {
1339 AliWarning(Form(
"%s: Objects of type %s in %s are not inherited from %s!",
1340 GetName(), cls.GetName(), name, clname));
1366 const AliVVertex *vert = InputEvent()->GetPrimaryVertex();
1372 const AliVVertex *vertSPD = InputEvent()->GetPrimaryVertexSPD();
1382 AliMultSelection *MultSelection =
static_cast<AliMultSelection*
>(InputEvent()->FindListObject(
"MultSelection"));
1383 if (MultSelection) {
1384 fCent = MultSelection->GetMultiplicityPercentile(
fCentEst.Data());
1387 AliWarning(Form(
"%s: Could not retrieve centrality information! Assuming 99", GetName()));
1391 AliCentrality *aliCent = InputEvent()->GetCentrality();
1396 AliWarning(Form(
"%s: Could not retrieve centrality information! Assuming 99", GetName()));
1406 AliWarning(Form(
"%s: Negative centrality: %f. Assuming 99", GetName(),
fCent));
1415 else if (
fCent > 90) {
1420 AliWarning(Form(
"%s: Negative centrality: %f. Assuming 99", GetName(),
fCent));
1433 AliWarning(Form(
"%s: fCentBin too large: cent = %f fCentBin = %d. Assuming 99", GetName(),
fCent,
fCentBin));
1438 AliEventplane *aliEP = InputEvent()->GetEventplane();
1440 fEPV0 = aliEP->GetEventplane(
"V0" ,InputEvent());
1441 fEPV0A = aliEP->GetEventplane(
"V0A",InputEvent());
1442 fEPV0C = aliEP->GetEventplane(
"V0C",InputEvent());
1444 AliWarning(Form(
"%s: Could not retrieve event plane information!", GetName()));
1455 const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
1456 const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
1468 AliEmcalContainer* cont = 0;
1471 while ((cont = static_cast<AliEmcalContainer*>(nextPartColl()))) cont->NextEvent();
1474 while ((cont = static_cast<AliParticleContainer*>(nextClusColl()))) cont->NextEvent();
1488 if (TString(n).IsNull())
return 0;
1506 if (TString(n).IsNull())
return 0;
1524 if (TString(n).IsNull())
return 0;
1542 if (TString(n).IsNull())
return 0;
1606 AliError(Form(
"%s: Particle container %d not found",GetName(),i));
1609 TString contName = cont->GetArrayName();
1610 return cont->GetArray();
1622 AliError(Form(
"%s:Cluster container %d not found",GetName(),i));
1625 return cont->GetArray();
1640 AliError(Form(
"%s: Particle container %d not found",GetName(),c));
1659 AliError(Form(
"%s: Cluster container %d not found",GetName(),c));
1676 AliError(Form(
"%s: Particle container %d not found",GetName(),i));
1679 return cont->GetNEntries();
1692 AliError(Form(
"%s: Cluster container %d not found",GetName(),i));
1695 return cont->GetNEntries();
1713 AliError(Form(
"%s: fTriggerPatchInfo not available",GetName()));
1721 AliEMCALTriggerPatchInfo *patch(NULL), *selected(NULL);
1722 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
1725 if (patch->IsMainTrigger()) {
1726 if(doSimpleOffline){
1727 if(patch->IsOfflineSimple()){
1731 if(patch->IsLevel0()) selected = patch;
1734 if(patch->IsJetHighSimple() || patch->IsJetLowSimple()){
1735 if(!selected) selected = patch;
1736 else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
1740 if(patch->IsGammaHighSimple() || patch->IsGammaLowSimple()){
1741 if(!selected) selected = patch;
1742 else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
1746 AliError(
"Untreated case: Main Patch is recalculated; should be in 'else' branch");
1752 if(patch->IsLevel0()) selected = patch;
1755 if(patch->IsJetHigh() || patch->IsJetLow()){
1756 if(!selected) selected = patch;
1757 else if (patch->GetADCAmp() > selected->GetADCAmp())
1762 if(patch->IsGammaHigh() || patch->IsGammaLow()){
1763 if(!selected) selected = patch;
1764 else if (patch->GetADCAmp() > selected->GetADCAmp())
1769 AliError(
"Untreated case: Main Patch is recalculated; should be in 'else' branch");
1775 if (doSimpleOffline && patch->IsOfflineSimple()) {
1776 if(!selected) selected = patch;
1777 else if (patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp())
1780 else if (!doSimpleOffline && !patch->IsOfflineSimple()) {
1781 if(!selected) selected = patch;
1782 else if (patch->GetADCAmp() > selected->GetADCAmp())
1797 if (!(InputEvent()->FindListObject(obj->GetName()))) {
1798 InputEvent()->AddObject(obj);
1802 AliFatal(Form(
"%s: Container with name %s already present. Aborting", GetName(), obj->GetName()));
1818 AliWarning(Form(
"%s - AliAnalysisTaskEmcal::IsTrackInEmcalAcceptance - Geometry is not available!", GetName()));
1822 Double_t minPhi =
fGeom->GetArm1PhiMin() - edges;
1823 Double_t maxPhi =
fGeom->GetArm1PhiMax() + edges;
1825 if (part->Phi() > minPhi && part->Phi() < maxPhi) {
1835 axis->SetBinLabel(1,
"NullObject");
1836 axis->SetBinLabel(2,
"Pt");
1837 axis->SetBinLabel(3,
"Acceptance");
1838 axis->SetBinLabel(4,
"MCLabel");
1839 axis->SetBinLabel(5,
"BitMap");
1840 axis->SetBinLabel(6,
"HF cut");
1841 axis->SetBinLabel(7,
"Bit6");
1842 axis->SetBinLabel(8,
"NotHybridTrack");
1843 axis->SetBinLabel(9,
"MCFlag");
1844 axis->SetBinLabel(10,
"MCGenerator");
1845 axis->SetBinLabel(11,
"ChargeCut");
1846 axis->SetBinLabel(12,
"MinDistanceTPCSectorEdge");
1847 axis->SetBinLabel(13,
"Bit12");
1848 axis->SetBinLabel(14,
"IsEMCal");
1849 axis->SetBinLabel(15,
"Time");
1850 axis->SetBinLabel(16,
"Energy");
1851 axis->SetBinLabel(17,
"ExoticCut");
1852 axis->SetBinLabel(18,
"Bit17");
1853 axis->SetBinLabel(19,
"Area");
1854 axis->SetBinLabel(20,
"AreaEmc");
1855 axis->SetBinLabel(21,
"ZLeadingCh");
1856 axis->SetBinLabel(22,
"ZLeadingEmc");
1857 axis->SetBinLabel(23,
"NEF");
1858 axis->SetBinLabel(24,
"MinLeadPt");
1859 axis->SetBinLabel(25,
"MaxTrackPt");
1860 axis->SetBinLabel(26,
"MaxClusterPt");
1861 axis->SetBinLabel(27,
"Flavour");
1862 axis->SetBinLabel(28,
"TagStatus");
1863 axis->SetBinLabel(29,
"MinNConstituents");
1864 axis->SetBinLabel(30,
"Bit29");
1865 axis->SetBinLabel(31,
"Bit30");
1866 axis->SetBinLabel(32,
"Bit31");
1877 TVector3 vect1(part1->Px(), part1->Py(), part1->Pz());
1878 TVector3 vect2(part2->Px(), part2->Py(), part2->Pz());
1879 Double_t z = (vect1 * vect2) / (vect2 * vect2);
1891 TVector3 vect2(part2->Px(), part2->Py(), part2->Pz());
1892 Double_t z = (vect1 * vect2) / (vect2 * vect2);
1911 Double_t veta = t->GetTrackEtaOnEMCal();
1912 Double_t vphi = t->GetTrackPhiOnEMCal();
1914 Float_t pos[3] = {0};
1915 v->GetPosition(pos);
1917 Double_t ceta = cpos.Eta();
1918 Double_t cphi = cpos.Phi();
1920 phidiff=TVector2::Phi_mpi_pi(vphi-cphi);
1931 if (t->TestBit(BIT(22)) && !t->TestBit(BIT(23)))
1933 else if (!t->TestBit(BIT(22)) && t->TestBit(BIT(23)))
1935 else if (t->TestBit(BIT(22)) && t->TestBit(BIT(23)))
1954 if (aodTrack->TestFilterBit(filterBit1)) {
1957 else if (aodTrack->TestFilterBit(filterBit2)) {
1958 if ((aodTrack->GetStatus()&AliVTrack::kITSrefit)!=0) {
1982 AliStack* stack = mcEvent->Stack();
1984 const Int_t nprim = stack->GetNprimary();
1986 if (nprim < 8)
return;
1988 TParticle *part6 = stack->Particle(6);
1989 TParticle *part7 = stack->Particle(7);
1997 AliGenPythiaEventHeader *pythiaGenHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(mcEvent->GenEventHeader());
1998 if(pythiaGenHeader){
1999 Float_t
ptWeight=pythiaGenHeader->EventWeight();
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
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.
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
Int_t fCentBin
!event centrality bin
TH1 * fHistEventsAfterSel
!total number of events per pt hard bin after selection
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
TList * fOutput
!output list
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
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)
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)
Double_t fMaxBinPt
max pt in histograms
Int_t fPtHardBin
!event pt hard bin
AliMCParticleContainer * GetMCParticleContainer(Int_t i=0) const
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
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)
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
Double_t fMaxEventPlane
maximum event plane value
void SetPythiaEventWeight(Float_t ptWeight)
Float_t fXsection
!x-section from pythia header
Bool_t fInitialized
whether or not the task has been already initialized
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.
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