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"
52 #include "AliMultSelection.h"
67 fGeneralHistograms(kFALSE),
72 fCaloTriggerPatchInfoName(),
80 fUseAliAnaUtils(kFALSE),
81 fRejectPileup(kFALSE),
82 fTklVsClusSPDCut(kFALSE),
83 fOffTrigger(AliVEvent::kAny),
89 fMinPtTrackInEmcal(0),
90 fEventPlaneVsEmcal(-1),
96 fSelectPtHardBin(-999),
100 fNeedEmcalGeom(kTRUE),
101 fParticleCollArray(),
104 fEMCalTriggerMode(kOverlapWithLowThreshold),
105 fUseNewCentralityEstimation(kFALSE),
106 fGeneratePythiaInfoObject(kFALSE),
107 fUsePtHardBinScaling(kFALSE),
108 fMCRejectFilter(kFALSE),
109 fPtHardAndJetPtFactor(0.),
110 fPtHardAndClusterPtFactor(0.),
111 fPtHardAndTrackPtFactor(0.),
113 fAliAnalysisUtils(0x0),
120 fTriggerPatchInfo(0),
137 fHistTrialsAfterSel(0),
138 fHistEventsAfterSel(0),
139 fHistXsectionAfterSel(0),
147 fHistEventRejection(0),
148 fHistTriggerClasses(0)
175 fGeneralHistograms(kFALSE),
176 fInitialized(kFALSE),
180 fCaloTriggerPatchInfoName(),
188 fUseAliAnaUtils(kFALSE),
189 fRejectPileup(kFALSE),
190 fTklVsClusSPDCut(kFALSE),
191 fOffTrigger(AliVEvent::kAny),
193 fTriggerTypeSel(kND),
197 fMinPtTrackInEmcal(0),
198 fEventPlaneVsEmcal(-1),
199 fMinEventPlane(-1e6),
204 fSelectPtHardBin(-999),
208 fNeedEmcalGeom(kTRUE),
209 fParticleCollArray(),
212 fEMCalTriggerMode(kOverlapWithLowThreshold),
213 fUseNewCentralityEstimation(kFALSE),
214 fGeneratePythiaInfoObject(kFALSE),
215 fUsePtHardBinScaling(kFALSE),
216 fMCRejectFilter(kFALSE),
217 fPtHardAndJetPtFactor(0.),
218 fPtHardAndClusterPtFactor(0.),
219 fPtHardAndTrackPtFactor(0.),
221 fAliAnalysisUtils(0x0),
228 fTriggerPatchInfo(0),
245 fHistTrialsAfterSel(0),
246 fHistEventsAfterSel(0),
247 fHistXsectionAfterSel(0),
255 fHistEventRejection(0),
256 fHistTriggerClasses(0)
268 DefineOutput(1, AliEmcalList::Class());
289 else AliError(Form(
"%s in SetClusPtCut(...): container %d not found",GetName(),c));
303 else AliError(Form(
"%s in SetClusTimeCut(...): container %d not found",GetName(),c));
316 else AliError(Form(
"%s in SetTrackPtCut(...): container %d not found",GetName(),c));
332 else AliError(Form(
"%s in SetTrackPtCut(...): container %d not found",GetName(),c));
346 else AliError(Form(
"%s in SetTrackPhiLimits(...): container %d not found",GetName(),c));
372 AliVEventHandler *evhand = mgr->GetInputEventHandler();
374 if (evhand->InheritsFrom(
"AliESDInputHandler")) {
382 AliError(
"Event handler not found!");
386 AliError(
"Analysis manager not found!");
419 fHistTrials =
new TH1F(
"fHistTrials",
"fHistTrials", 11, 0, 11);
420 fHistTrials->GetXaxis()->SetTitle(
"p_{T} hard bin");
424 fHistEvents =
new TH1F(
"fHistEvents",
"fHistEvents", 11, 0, 11);
425 fHistEvents->GetXaxis()->SetTitle(
"p_{T} hard bin");
429 fHistXsection =
new TProfile(
"fHistXsection",
"fHistXsection", 11, 0, 11);
434 const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
435 const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
437 for (
Int_t i = 1; i < 12; i++) {
438 fHistTrialsAfterSel->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
439 fHistEventsAfterSel->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
441 fHistTrials->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
442 fHistXsection->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
443 fHistEvents->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
447 fHistPtHard->GetXaxis()->SetTitle(
"p_{T,hard} (GeV/c)");
452 fHistZVertex =
new TH1F(
"fHistZVertex",
"Z vertex position", 60, -30, 30);
458 fHistCentrality =
new TH1F(
"fHistCentrality",
"Event centrality distribution", 200, 0, 100);
463 fHistEventPlane =
new TH1F(
"fHistEventPlane",
"Event plane", 120, -TMath::Pi(), TMath::Pi());
470 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
493 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
538 TObjArray* triggerClasses = InputEvent()->GetFiredTriggerClasses().Tokenize(
" ");
539 TIter next(triggerClasses);
540 TObjString* triggerClass = 0;
541 while ((triggerClass = static_cast<TObjString*>(next()))) {
544 delete triggerClasses;
624 AliWarning(
"AliAnalysisTaskEmcal::AcceptCluster method is deprecated. Please use GetCusterContainer(c)->AcceptCluster(clus).");
626 if (!clus)
return kFALSE;
630 AliError(Form(
"%s:Container %d not found",GetName(),c));
633 UInt_t rejectionReason = 0;
647 AliWarning(
"AliAnalysisTaskEmcal::AcceptTrack method is deprecated. Please use GetParticleContainer(c)->AcceptParticle(clus).");
649 if (!track)
return kFALSE;
653 AliError(Form(
"%s:Container %d not found",GetName(),c));
657 UInt_t rejectionReason = 0;
679 if (file.Contains(
".zip#")) {
680 Ssiz_t pos1 = file.Index(
"root_archive",12,0,TString::kExact);
681 Ssiz_t pos = file.Index(
"#",1,pos1,TString::kExact);
682 Ssiz_t pos2 = file.Index(
".root",5,TString::kExact);
683 file.Replace(pos+1,pos2-pos1,
"");
686 file.ReplaceAll(
gSystem->BaseName(file.Data()),
"");
688 AliDebug(1,Form(
"File name: %s",file.Data()));
693 strPthard.Remove(strPthard.Last(
'/'));
694 strPthard.Remove(strPthard.Last(
'/'));
695 if (strPthard.Contains(
"AOD")) strPthard.Remove(strPthard.Last(
'/'));
696 strPthard.Remove(0,strPthard.Last(
'/')+1);
697 if (strPthard.IsDec()) pthard = strPthard.Atoi();
699 AliWarning(Form(
"Could not extract file number from path %s", strPthard.Data()));
702 std::unique_ptr<TFile> fxsec(TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec.root")));
706 fxsec = std::unique_ptr<TFile>(TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec_hists.root")));
707 if (!fxsec)
return kFALSE;
710 TKey* key = (TKey*)fxsec->GetListOfKeys()->At(0);
711 if (!key)
return kFALSE;
713 if (!list)
return kFALSE;
714 fXsec = ((TProfile*)list->FindObject(
"h1Xsec"))->GetBinContent(1);
715 fTrials = ((TH1F*)list->FindObject(
"h1Trials"))->GetBinContent(1);
718 TTree *xtree = (
TTree*)fxsec->Get(
"Xsection");
719 if (!xtree)
return kFALSE;
722 xtree->SetBranchAddress(
"xsection",&xsection);
723 xtree->SetBranchAddress(
"ntrials",&ntrials);
749 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
751 AliError(Form(
"%s - UserNotify: No current tree!",GetName()));
759 TFile *curfile = tree->GetCurrentFile();
761 AliError(Form(
"%s - UserNotify: No current file!",GetName()));
766 if (chain) tree = chain->GetTree();
773 if ((pthardbin < 0) || (pthardbin > 10)) pthardbin = 0;
791 AliError(Form(
"%s: Could not retrieve parton infos! %s!", GetName(),
fPythiaInfoName.Data()));
810 AliError(Form(
"%s: Could not retrieve event! Returning!", GetName()));
817 fGeom = AliEMCALGeometry::GetInstanceFromRunNumber(InputEvent()->
GetRunNumber());
819 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()));
831 AliWarning(
"Could not set event plane limits because EMCal geometry was not loaded!");
838 cont->SetArray(InputEvent());
844 AliError(Form(
"%s: Could not retrieve first track branch!", GetName()));
852 cont->SetArray(InputEvent());
858 AliError(Form(
"%s: Could not retrieve first cluster branch!", GetName()));
866 AliError(Form(
"%s: Could not retrieve cells %s!", GetName(),
fCaloCellsName.Data()));
874 AliError(Form(
"%s: Could not retrieve calo triggers %s!", GetName(),
fCaloTriggersName.Data()));
904 const AliESDRun *run = esd->GetESDRun();
905 TString beamType = run->GetBeamType();
906 if (beamType ==
"p-p")
908 else if (beamType ==
"A-A")
910 else if (beamType ==
"p-A")
915 Int_t runNumber = InputEvent()->GetRunNumber();
916 if ((runNumber >= 136851 && runNumber <= 139517) ||
917 (runNumber >= 166529 && runNumber <= 170593)) {
919 }
else if ((runNumber>=188365 && runNumber <= 188366) ||
920 (runNumber >= 195344 && runNumber <= 196608)) {
948 AliEMCALTriggerPatchInfo *patch;
949 for (
Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
951 if (patch->IsGammaHigh()) nG1++;
952 if (patch->IsGammaLow()) nG2++;
953 if (patch->IsJetHigh()) nJ1++;
954 if (patch->IsJetLow()) nJ2++;
955 if (patch->IsLevel0()) nL0++;
958 AliDebug(2,
"Patch summary: ");
959 AliDebug(2, Form(
"Number of patches: %d", nPatch));
960 AliDebug(2, Form(
"Jet: low[%d], high[%d]" ,nJ2, nJ1));
961 AliDebug(2, Form(
"Gamma: low[%d], high[%d]" ,nG2, nG1));
964 if (nL0>0) SETBIT(triggers,
kL0);
965 if (nG1>0) SETBIT(triggers,
kG1);
966 if (nG2>0) SETBIT(triggers,
kG2);
967 if (nJ1>0) SETBIT(triggers,
kJ1);
968 if (nJ2>0) SETBIT(triggers,
kJ2);
982 AliWarning(Form(
"%s: Requesting undefined trigger type!", GetName()));
1019 res = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1023 res = ((AliVAODHeader*)aev->GetHeader())->GetOfflineTrigger();
1036 fired = eev->GetFiredTriggerClasses();
1040 fired = aev->GetFiredTriggerClasses();
1043 if (!fired.Contains(
"-B-")) {
1048 std::unique_ptr<TObjArray> arr(
fTrigClass.Tokenize(
"|"));
1054 for (
Int_t i=0;i<arr->GetEntriesFast();++i) {
1060 TString objStr = obj->GetName();
1062 (objStr.Contains(
"J1") || objStr.Contains(
"J2") || objStr.Contains(
"G1") || objStr.Contains(
"G2"))) {
1067 if(objStr.Contains(
"G")) {
1071 if(objStr.Contains(trigType2) && fired.Contains(trigType2.Data())) {
1075 else if(objStr.Contains(trigType1) && fired.Contains(trigType1.Data()) && !fired.Contains(trigType2.Data())) {
1083 if (fired.Contains(obj->GetName())) {
1103 if (fCent<fMinCent || fCent>
fMaxCent) {
1139 if (vz < fMinVz || vz >
fMaxVz) {
1146 Double_t dvertex = TMath::Abs(vz-vzSPD);
1156 Bool_t trackInEmcalOk = kFALSE;
1158 for (
Int_t i = 0; i < ntracks; i++) {
1163 Double_t phiMin =
fGeom->GetArm1PhiMin() * TMath::DegToRad();
1164 Double_t phiMax =
fGeom->GetArm1PhiMax() * TMath::DegToRad();
1165 Int_t runNumber = InputEvent()->GetRunNumber();
1166 if (runNumber>=177295 && runNumber<=197470) {
1168 phiMax = TMath::Pi();
1171 if (track->Eta() <
fGeom->GetArm1EtaMin() || track->Eta() >
fGeom->GetArm1EtaMax() || track->Phi() < phiMin || track->Phi() > phiMax)
1174 trackInEmcalOk = kTRUE;
1178 if (!trackInEmcalOk) {
1185 Int_t nTracksAcc = 0;
1187 for (
Int_t i = 0; i < ntracks; i++) {
1237 AliDebug(1,Form(
"Njets: %d, pT Hard %f",nTriggerJets,
fPtHard));
1240 for (
Int_t ijet = 0; ijet< nTriggerJets; ijet++) {
1243 jet.SetPxPyPzE(tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3]);
1245 AliDebug(1,Form(
"jet %d; pycell jet pT %f",ijet, jet.Pt()));
1249 AliInfo(Form(
"Reject jet event with : pT Hard %2.2f, pycell jet pT %2.2f, rejection factor %1.1f\n",
fPtHard, jet.Pt(),
fPtHardAndJetPtFactor));
1259 if ((
Bool_t)mccluscont) {
1260 for (
auto cluster : mccluscont->all()) {
1261 Float_t ecluster = cluster->E();
1275 if ((
Bool_t)mcpartcont) {
1276 for (
auto mctrack : mcpartcont->
all()) {
1277 Float_t trackpt = mctrack->Pt();
1300 TClonesArray *arr = 0;
1302 if (!sname.IsNull()) {
1303 arr =
dynamic_cast<TClonesArray*
>(InputEvent()->FindListObject(sname));
1305 AliWarning(Form(
"%s: Could not retrieve array with name %s!", GetName(), name));
1315 TString objname(arr->GetClass()->GetName());
1316 TClass cls(objname);
1317 if (!cls.InheritsFrom(clname)) {
1318 AliWarning(Form(
"%s: Objects of type %s in %s are not inherited from %s!",
1319 GetName(), cls.GetName(), name, clname));
1345 const AliVVertex *vert = InputEvent()->GetPrimaryVertex();
1351 const AliVVertex *vertSPD = InputEvent()->GetPrimaryVertexSPD();
1361 AliMultSelection *MultSelection =
static_cast<AliMultSelection*
>(InputEvent()->FindListObject(
"MultSelection"));
1362 if (MultSelection) {
1363 fCent = MultSelection->GetMultiplicityPercentile(
fCentEst.Data());
1366 AliWarning(Form(
"%s: Could not retrieve centrality information! Assuming 99", GetName()));
1370 AliCentrality *aliCent = InputEvent()->GetCentrality();
1375 AliWarning(Form(
"%s: Could not retrieve centrality information! Assuming 99", GetName()));
1385 AliWarning(Form(
"%s: Negative centrality: %f. Assuming 99", GetName(),
fCent));
1394 else if (
fCent > 90) {
1399 AliWarning(Form(
"%s: Negative centrality: %f. Assuming 99", GetName(),
fCent));
1412 AliWarning(Form(
"%s: fCentBin too large: cent = %f fCentBin = %d. Assuming 99", GetName(),
fCent,
fCentBin));
1417 AliEventplane *aliEP = InputEvent()->GetEventplane();
1419 fEPV0 = aliEP->GetEventplane(
"V0" ,InputEvent());
1420 fEPV0A = aliEP->GetEventplane(
"V0A",InputEvent());
1421 fEPV0C = aliEP->GetEventplane(
"V0C",InputEvent());
1423 AliWarning(Form(
"%s: Could not retrieve event plane information!", GetName()));
1433 fPythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
1436 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
1439 for (
UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++) {
1440 fPythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
1451 const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
1452 const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
1464 AliEmcalContainer* cont = 0;
1467 while ((cont = static_cast<AliEmcalContainer*>(nextPartColl()))) cont->NextEvent();
1470 while ((cont = static_cast<AliParticleContainer*>(nextClusColl()))) cont->NextEvent();
1484 if (
TString(n).IsNull())
return 0;
1502 if (
TString(n).IsNull())
return 0;
1520 if (
TString(n).IsNull())
return 0;
1538 if (
TString(n).IsNull())
return 0;
1602 AliError(Form(
"%s: Particle container %d not found",GetName(),i));
1605 TString contName = cont->GetArrayName();
1606 return cont->GetArray();
1618 AliError(Form(
"%s:Cluster container %d not found",GetName(),i));
1621 return cont->GetArray();
1636 AliError(Form(
"%s: Particle container %d not found",GetName(),c));
1655 AliError(Form(
"%s: Cluster container %d not found",GetName(),c));
1672 AliError(Form(
"%s: Particle container %d not found",GetName(),i));
1675 return cont->GetNEntries();
1688 AliError(Form(
"%s: Cluster container %d not found",GetName(),i));
1691 return cont->GetNEntries();
1709 AliError(Form(
"%s: fTriggerPatchInfo not available",GetName()));
1717 AliEMCALTriggerPatchInfo *patch(NULL), *selected(NULL);
1718 for (
Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
1721 if (patch->IsMainTrigger()) {
1722 if(doSimpleOffline){
1723 if(patch->IsOfflineSimple()){
1727 if(patch->IsLevel0()) selected = patch;
1730 if(patch->IsJetHighSimple() || patch->IsJetLowSimple()){
1731 if(!selected) selected = patch;
1732 else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
1736 if(patch->IsGammaHighSimple() || patch->IsGammaLowSimple()){
1737 if(!selected) selected = patch;
1738 else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
1742 AliError(
"Untreated case: Main Patch is recalculated; should be in 'else' branch");
1748 if(patch->IsLevel0()) selected = patch;
1751 if(patch->IsJetHigh() || patch->IsJetLow()){
1752 if(!selected) selected = patch;
1753 else if (patch->GetADCAmp() > selected->GetADCAmp())
1758 if(patch->IsGammaHigh() || patch->IsGammaLow()){
1759 if(!selected) selected = patch;
1760 else if (patch->GetADCAmp() > selected->GetADCAmp())
1765 AliError(
"Untreated case: Main Patch is recalculated; should be in 'else' branch");
1771 if (doSimpleOffline && patch->IsOfflineSimple()) {
1772 if(!selected) selected = patch;
1773 else if (patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp())
1776 else if (!doSimpleOffline && !patch->IsOfflineSimple()) {
1777 if(!selected) selected = patch;
1778 else if (patch->GetADCAmp() > selected->GetADCAmp())
1793 if (!(InputEvent()->FindListObject(obj->GetName()))) {
1794 InputEvent()->AddObject(obj);
1798 AliFatal(Form(
"%s: Container with name %s already present. Aborting", GetName(), obj->GetName()));
1814 AliWarning(Form(
"%s - AliAnalysisTaskEmcal::IsTrackInEmcalAcceptance - Geometry is not available!", GetName()));
1821 if (part->Phi() > minPhi && part->Phi() < maxPhi) {
1831 axis->SetBinLabel(1,
"NullObject");
1832 axis->SetBinLabel(2,
"Pt");
1833 axis->SetBinLabel(3,
"Acceptance");
1834 axis->SetBinLabel(4,
"MCLabel");
1835 axis->SetBinLabel(5,
"BitMap");
1836 axis->SetBinLabel(6,
"HF cut");
1837 axis->SetBinLabel(7,
"Bit6");
1838 axis->SetBinLabel(8,
"NotHybridTrack");
1839 axis->SetBinLabel(9,
"MCFlag");
1840 axis->SetBinLabel(10,
"MCGenerator");
1841 axis->SetBinLabel(11,
"ChargeCut");
1842 axis->SetBinLabel(12,
"MinDistanceTPCSectorEdge");
1843 axis->SetBinLabel(13,
"Bit12");
1844 axis->SetBinLabel(14,
"IsEMCal");
1845 axis->SetBinLabel(15,
"Time");
1846 axis->SetBinLabel(16,
"Energy");
1847 axis->SetBinLabel(17,
"ExoticCut");
1848 axis->SetBinLabel(18,
"Bit17");
1849 axis->SetBinLabel(19,
"Area");
1850 axis->SetBinLabel(20,
"AreaEmc");
1851 axis->SetBinLabel(21,
"ZLeadingCh");
1852 axis->SetBinLabel(22,
"ZLeadingEmc");
1853 axis->SetBinLabel(23,
"NEF");
1854 axis->SetBinLabel(24,
"MinLeadPt");
1855 axis->SetBinLabel(25,
"MaxTrackPt");
1856 axis->SetBinLabel(26,
"MaxClusterPt");
1857 axis->SetBinLabel(27,
"Flavour");
1858 axis->SetBinLabel(28,
"TagStatus");
1859 axis->SetBinLabel(29,
"MinNConstituents");
1860 axis->SetBinLabel(30,
"Bit29");
1861 axis->SetBinLabel(31,
"Bit30");
1862 axis->SetBinLabel(32,
"Bit31");
1873 TVector3 vect1(part1->Px(), part1->Py(), part1->Pz());
1874 TVector3 vect2(part2->Px(), part2->Py(), part2->Pz());
1875 Double_t z = (vect1 * vect2) / (vect2 * vect2);
1887 TVector3 vect2(part2->Px(), part2->Py(), part2->Pz());
1888 Double_t z = (vect1 * vect2) / (vect2 * vect2);
1907 Double_t veta = t->GetTrackEtaOnEMCal();
1908 Double_t vphi = t->GetTrackPhiOnEMCal();
1911 v->GetPosition(pos);
1916 phidiff=TVector2::Phi_mpi_pi(vphi-cphi);
1927 if (t->TestBit(BIT(22)) && !t->TestBit(BIT(23)))
1929 else if (!t->TestBit(BIT(22)) && t->TestBit(BIT(23)))
1931 else if (t->TestBit(BIT(22)) && t->TestBit(BIT(23)))
1950 if (aodTrack->TestFilterBit(filterBit1)) {
1953 else if (aodTrack->TestFilterBit(filterBit2)) {
1954 if ((aodTrack->GetStatus()&AliVTrack::kITSrefit)!=0) {
1978 AliStack* stack = mcEvent->Stack();
1980 const Int_t nprim = stack->GetNprimary();
1982 if (nprim < 8)
return;
1984 TParticle *part6 = stack->Particle(6);
1985 TParticle *part7 = stack->Particle(7);
1993 AliGenPythiaEventHeader *pythiaGenHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(mcEvent->GenEventHeader());
1994 if(pythiaGenHeader){
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 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
virtual void RunChanged()
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
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
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.
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