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 fUsePtHardBinScaling(kFALSE),
107 fMCRejectFilter(kFALSE),
108 fPtHardAndJetPtFactor(0.),
109 fPtHardAndClusterPtFactor(0.),
110 fPtHardAndTrackPtFactor(0.),
112 fAliAnalysisUtils(0x0),
119 fTriggerPatchInfo(0),
136 fHistTrialsAfterSel(0),
137 fHistEventsAfterSel(0),
138 fHistXsectionAfterSel(0),
146 fHistEventRejection(0),
147 fHistTriggerClasses(0)
171 AliAnalysisTaskSE(name),
174 fGeneralHistograms(kFALSE),
175 fInitialized(kFALSE),
179 fCaloTriggerPatchInfoName(),
187 fUseAliAnaUtils(kFALSE),
188 fRejectPileup(kFALSE),
189 fTklVsClusSPDCut(kFALSE),
190 fOffTrigger(AliVEvent::kAny),
192 fTriggerTypeSel(kND),
196 fMinPtTrackInEmcal(0),
197 fEventPlaneVsEmcal(-1),
198 fMinEventPlane(-1e6),
203 fSelectPtHardBin(-999),
207 fNeedEmcalGeom(kTRUE),
208 fParticleCollArray(),
211 fEMCalTriggerMode(kOverlapWithLowThreshold),
212 fUseNewCentralityEstimation(kFALSE),
213 fGeneratePythiaInfoObject(kFALSE),
214 fUsePtHardBinScaling(kFALSE),
215 fMCRejectFilter(kFALSE),
216 fPtHardAndJetPtFactor(0.),
217 fPtHardAndClusterPtFactor(0.),
218 fPtHardAndTrackPtFactor(0.),
220 fAliAnalysisUtils(0x0),
227 fTriggerPatchInfo(0),
244 fHistTrialsAfterSel(0),
245 fHistEventsAfterSel(0),
246 fHistXsectionAfterSel(0),
254 fHistEventRejection(0),
255 fHistTriggerClasses(0)
267 DefineOutput(1, AliEmcalList::Class());
288 else AliError(Form(
"%s in SetClusPtCut(...): container %d not found",GetName(),c));
302 else AliError(Form(
"%s in SetClusTimeCut(...): container %d not found",GetName(),c));
315 else AliError(Form(
"%s in SetTrackPtCut(...): container %d not found",GetName(),c));
331 else AliError(Form(
"%s in SetTrackPtCut(...): container %d not found",GetName(),c));
345 else AliError(Form(
"%s in SetTrackPhiLimits(...): container %d not found",GetName(),c));
369 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
371 AliVEventHandler *evhand = mgr->GetInputEventHandler();
373 if (evhand->InheritsFrom(
"AliESDInputHandler")) {
381 AliError(
"Event handler not found!");
385 AliError(
"Analysis manager not found!");
418 fHistTrials =
new TH1F(
"fHistTrials",
"fHistTrials", 11, 0, 11);
419 fHistTrials->GetXaxis()->SetTitle(
"p_{T} hard bin");
423 fHistEvents =
new TH1F(
"fHistEvents",
"fHistEvents", 11, 0, 11);
424 fHistEvents->GetXaxis()->SetTitle(
"p_{T} hard bin");
428 fHistXsection =
new TProfile(
"fHistXsection",
"fHistXsection", 11, 0, 11);
433 const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
434 const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
436 for (Int_t i = 1; i < 12; i++) {
437 fHistTrialsAfterSel->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
438 fHistEventsAfterSel->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
440 fHistTrials->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
441 fHistXsection->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
442 fHistEvents->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
446 fHistPtHard->GetXaxis()->SetTitle(
"p_{T,hard} (GeV/c)");
451 fHistZVertex =
new TH1F(
"fHistZVertex",
"Z vertex position", 60, -30, 30);
457 fHistCentrality =
new TH1F(
"fHistCentrality",
"Event centrality distribution", 200, 0, 100);
462 fHistEventPlane =
new TH1F(
"fHistEventPlane",
"Event plane", 120, -TMath::Pi(), TMath::Pi());
469 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
492 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
537 TObjArray* triggerClasses = InputEvent()->GetFiredTriggerClasses().Tokenize(
" ");
538 TIter next(triggerClasses);
539 TObjString* triggerClass = 0;
540 while ((triggerClass = static_cast<TObjString*>(next()))) {
543 delete triggerClasses;
621 AliWarning(
"AliAnalysisTaskEmcal::AcceptCluster method is deprecated. Please use GetCusterContainer(c)->AcceptCluster(clus).");
623 if (!clus)
return kFALSE;
627 AliError(Form(
"%s:Container %d not found",GetName(),c));
630 UInt_t rejectionReason = 0;
644 AliWarning(
"AliAnalysisTaskEmcal::AcceptTrack method is deprecated. Please use GetParticleContainer(c)->AcceptParticle(clus).");
646 if (!track)
return kFALSE;
650 AliError(Form(
"%s:Container %d not found",GetName(),c));
654 UInt_t rejectionReason = 0;
672 TString
file(currFile);
676 if (file.Contains(
".zip#")) {
677 Ssiz_t pos1 = file.Index(
"root_archive",12,0,TString::kExact);
678 Ssiz_t pos = file.Index(
"#",1,pos1,TString::kExact);
679 Ssiz_t pos2 = file.Index(
".root",5,TString::kExact);
680 file.Replace(pos+1,pos2-pos1,
"");
683 file.ReplaceAll(
gSystem->BaseName(file.Data()),
"");
685 AliDebug(1,Form(
"File name: %s",file.Data()));
688 TString strPthard(file);
690 strPthard.Remove(strPthard.Last(
'/'));
691 strPthard.Remove(strPthard.Last(
'/'));
692 if (strPthard.Contains(
"AOD")) strPthard.Remove(strPthard.Last(
'/'));
693 strPthard.Remove(0,strPthard.Last(
'/')+1);
694 if (strPthard.IsDec())
695 pthard = strPthard.Atoi();
697 AliWarning(Form(
"Could not extract file number from path %s", strPthard.Data()));
700 TFile *fxsec = TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec.root"));
704 fxsec = TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec_hists.root"));
710 TKey* key = (TKey*)fxsec->GetListOfKeys()->At(0);
715 TList *
list =
dynamic_cast<TList*
>(key->ReadObj());
720 fXsec = ((TProfile*)list->FindObject(
"h1Xsec"))->GetBinContent(1);
721 fTrials = ((TH1F*)list->FindObject(
"h1Trials"))->GetBinContent(1);
725 TTree *xtree = (TTree*)fxsec->Get(
"Xsection");
731 Double_t xsection = 0;
732 xtree->SetBranchAddress(
"xsection",&xsection);
733 xtree->SetBranchAddress(
"ntrials",&ntrials);
760 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
762 AliError(Form(
"%s - UserNotify: No current tree!",GetName()));
766 Float_t xsection = 0;
770 TFile *curfile = tree->GetCurrentFile();
772 AliError(Form(
"%s - UserNotify: No current file!",GetName()));
776 TChain *chain =
dynamic_cast<TChain*
>(tree);
777 if (chain) tree = chain->GetTree();
779 Int_t
nevents = tree->GetEntriesFast();
784 if ((pthardbin < 0) || (pthardbin > 10)) pthardbin = 0;
802 AliError(Form(
"%s: Could not retrieve parton infos! %s!", GetName(),
fPythiaInfoName.Data()));
821 AliError(Form(
"%s: Could not retrieve event! Returning!", GetName()));
829 fPythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
832 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
835 for (UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++) {
836 fPythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
845 fGeom = AliEMCALGeometry::GetInstanceFromRunNumber(InputEvent()->
GetRunNumber());
847 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()));
859 AliWarning(
"Could not set event plane limits because EMCal geometry was not loaded!");
866 cont->SetArray(InputEvent());
872 AliError(Form(
"%s: Could not retrieve first track branch!", GetName()));
880 cont->SetArray(InputEvent());
886 AliError(Form(
"%s: Could not retrieve first cluster branch!", GetName()));
894 AliError(Form(
"%s: Could not retrieve cells %s!", GetName(),
fCaloCellsName.Data()));
902 AliError(Form(
"%s: Could not retrieve calo triggers %s!", GetName(),
fCaloTriggersName.Data()));
930 AliESDEvent *esd =
dynamic_cast<AliESDEvent*
>(InputEvent());
932 const AliESDRun *run = esd->GetESDRun();
933 TString beamType = run->GetBeamType();
934 if (beamType ==
"p-p")
936 else if (beamType ==
"A-A")
938 else if (beamType ==
"p-A")
943 Int_t runNumber = InputEvent()->GetRunNumber();
944 if ((runNumber >= 136851 && runNumber <= 139517) ||
945 (runNumber >= 166529 && runNumber <= 170593)) {
947 }
else if ((runNumber>=188365 && runNumber <= 188366) ||
948 (runNumber >= 195344 && runNumber <= 196608)) {
976 AliEMCALTriggerPatchInfo *patch;
977 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
979 if (patch->IsGammaHigh()) nG1++;
980 if (patch->IsGammaLow()) nG2++;
981 if (patch->IsJetHigh()) nJ1++;
982 if (patch->IsJetLow()) nJ2++;
983 if (patch->IsLevel0()) nL0++;
986 AliDebug(2,
"Patch summary: ");
987 AliDebug(2, Form(
"Number of patches: %d", nPatch));
988 AliDebug(2, Form(
"Jet: low[%d], high[%d]" ,nJ2, nJ1));
989 AliDebug(2, Form(
"Gamma: low[%d], high[%d]" ,nG2, nG1));
992 if (nL0>0) SETBIT(triggers,
kL0);
993 if (nG1>0) SETBIT(triggers,
kG1);
994 if (nG2>0) SETBIT(triggers,
kG2);
995 if (nJ1>0) SETBIT(triggers,
kJ1);
996 if (nJ2>0) SETBIT(triggers,
kJ2);
1010 AliWarning(Form(
"%s: Requesting undefined trigger type!", GetName()));
1045 const AliESDEvent *eev =
dynamic_cast<const AliESDEvent*
>(InputEvent());
1047 res = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1049 const AliAODEvent *aev =
dynamic_cast<const AliAODEvent*
>(InputEvent());
1051 res = ((AliVAODHeader*)aev->GetHeader())->GetOfflineTrigger();
1062 const AliESDEvent *eev =
dynamic_cast<const AliESDEvent*
>(InputEvent());
1064 fired = eev->GetFiredTriggerClasses();
1066 const AliAODEvent *aev =
dynamic_cast<const AliAODEvent*
>(InputEvent());
1068 fired = aev->GetFiredTriggerClasses();
1071 if (!fired.Contains(
"-B-")) {
1082 for (Int_t i=0;i<arr->GetEntriesFast();++i) {
1083 TObject *obj = arr->At(i);
1088 TString objStr = obj->GetName();
1090 (objStr.Contains(
"J1") || objStr.Contains(
"J2") || objStr.Contains(
"G1") || objStr.Contains(
"G2"))) {
1093 TString trigType1 =
"J1";
1094 TString trigType2 =
"J2";
1095 if(objStr.Contains(
"G")) {
1099 if(objStr.Contains(trigType2) && fired.Contains(trigType2.Data())) {
1103 else if(objStr.Contains(trigType1) && fired.Contains(trigType1.Data()) && !fired.Contains(trigType2.Data())) {
1111 if (fired.Contains(obj->GetName())) {
1132 if (fCent<fMinCent || fCent>
fMaxCent) {
1168 if (vz < fMinVz || vz >
fMaxVz) {
1175 Double_t dvertex = TMath::Abs(vz-vzSPD);
1185 Bool_t trackInEmcalOk = kFALSE;
1187 for (Int_t i = 0; i < ntracks; i++) {
1192 Double_t phiMin =
fGeom->GetArm1PhiMin() * TMath::DegToRad();
1193 Double_t phiMax =
fGeom->GetArm1PhiMax() * TMath::DegToRad();
1194 Int_t runNumber = InputEvent()->GetRunNumber();
1195 if (runNumber>=177295 && runNumber<=197470) {
1197 phiMax = TMath::Pi();
1200 if (track->Eta() <
fGeom->GetArm1EtaMin() || track->Eta() >
fGeom->GetArm1EtaMax() || track->Phi() < phiMin || track->Phi() > phiMax)
1203 trackInEmcalOk = kTRUE;
1207 if (!trackInEmcalOk) {
1214 Int_t nTracksAcc = 0;
1216 for (Int_t i = 0; i < ntracks; i++) {
1266 AliDebug(1,Form(
"Njets: %d, pT Hard %f",nTriggerJets,
fPtHard));
1268 Float_t tmpjet[]={0,0,0,0};
1269 for (Int_t ijet = 0; ijet< nTriggerJets; ijet++) {
1272 jet.SetPxPyPzE(tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3]);
1274 AliDebug(1,Form(
"jet %d; pycell jet pT %f",ijet, jet.Pt()));
1278 AliInfo(Form(
"Reject jet event with : pT Hard %2.2f, pycell jet pT %2.2f, rejection factor %1.1f\n",
fPtHard, jet.Pt(),
fPtHardAndJetPtFactor));
1288 if ((Bool_t)mccluscont) {
1289 for (
auto cluster : mccluscont->all()) {
1290 Float_t ecluster = cluster->E();
1304 if ((Bool_t)mcpartcont) {
1305 for (
auto mctrack : mcpartcont->
all()) {
1306 Float_t trackpt = mctrack->Pt();
1329 TClonesArray *arr = 0;
1330 TString sname(name);
1331 if (!sname.IsNull()) {
1332 arr =
dynamic_cast<TClonesArray*
>(InputEvent()->FindListObject(sname));
1334 AliWarning(Form(
"%s: Could not retrieve array with name %s!", GetName(), name));
1344 TString objname(arr->GetClass()->GetName());
1345 TClass cls(objname);
1346 if (!cls.InheritsFrom(clname)) {
1347 AliWarning(Form(
"%s: Objects of type %s in %s are not inherited from %s!",
1348 GetName(), cls.GetName(), name, clname));
1374 const AliVVertex *vert = InputEvent()->GetPrimaryVertex();
1380 const AliVVertex *vertSPD = InputEvent()->GetPrimaryVertexSPD();
1390 AliMultSelection *MultSelection =
static_cast<AliMultSelection*
>(InputEvent()->FindListObject(
"MultSelection"));
1391 if (MultSelection) {
1392 fCent = MultSelection->GetMultiplicityPercentile(
fCentEst.Data());
1395 AliWarning(Form(
"%s: Could not retrieve centrality information! Assuming 99", GetName()));
1399 AliCentrality *aliCent = InputEvent()->GetCentrality();
1404 AliWarning(Form(
"%s: Could not retrieve centrality information! Assuming 99", GetName()));
1414 AliWarning(Form(
"%s: Negative centrality: %f. Assuming 99", GetName(),
fCent));
1423 else if (
fCent > 90) {
1428 AliWarning(Form(
"%s: Negative centrality: %f. Assuming 99", GetName(),
fCent));
1441 AliWarning(Form(
"%s: fCentBin too large: cent = %f fCentBin = %d. Assuming 99", GetName(),
fCent,
fCentBin));
1446 AliEventplane *aliEP = InputEvent()->GetEventplane();
1448 fEPV0 = aliEP->GetEventplane(
"V0" ,InputEvent());
1449 fEPV0A = aliEP->GetEventplane(
"V0A",InputEvent());
1450 fEPV0C = aliEP->GetEventplane(
"V0C",InputEvent());
1452 AliWarning(Form(
"%s: Could not retrieve event plane information!", GetName()));
1463 const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
1464 const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
1476 AliEmcalContainer* cont = 0;
1479 while ((cont = static_cast<AliEmcalContainer*>(nextPartColl()))) cont->NextEvent();
1482 while ((cont = static_cast<AliParticleContainer*>(nextClusColl()))) cont->NextEvent();
1496 if (TString(n).IsNull())
return 0;
1514 if (TString(n).IsNull())
return 0;
1532 if (TString(n).IsNull())
return 0;
1550 if (TString(n).IsNull())
return 0;
1614 AliError(Form(
"%s: Particle container %d not found",GetName(),i));
1617 TString contName = cont->GetArrayName();
1618 return cont->GetArray();
1630 AliError(Form(
"%s:Cluster container %d not found",GetName(),i));
1633 return cont->GetArray();
1648 AliError(Form(
"%s: Particle container %d not found",GetName(),c));
1667 AliError(Form(
"%s: Cluster container %d not found",GetName(),c));
1684 AliError(Form(
"%s: Particle container %d not found",GetName(),i));
1687 return cont->GetNEntries();
1700 AliError(Form(
"%s: Cluster container %d not found",GetName(),i));
1703 return cont->GetNEntries();
1721 AliError(Form(
"%s: fTriggerPatchInfo not available",GetName()));
1729 AliEMCALTriggerPatchInfo *patch(NULL), *selected(NULL);
1730 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
1733 if (patch->IsMainTrigger()) {
1734 if(doSimpleOffline){
1735 if(patch->IsOfflineSimple()){
1739 if(patch->IsLevel0()) selected = patch;
1742 if(patch->IsJetHighSimple() || patch->IsJetLowSimple()){
1743 if(!selected) selected = patch;
1744 else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
1748 if(patch->IsGammaHighSimple() || patch->IsGammaLowSimple()){
1749 if(!selected) selected = patch;
1750 else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
1754 AliError(
"Untreated case: Main Patch is recalculated; should be in 'else' branch");
1760 if(patch->IsLevel0()) selected = patch;
1763 if(patch->IsJetHigh() || patch->IsJetLow()){
1764 if(!selected) selected = patch;
1765 else if (patch->GetADCAmp() > selected->GetADCAmp())
1770 if(patch->IsGammaHigh() || patch->IsGammaLow()){
1771 if(!selected) selected = patch;
1772 else if (patch->GetADCAmp() > selected->GetADCAmp())
1777 AliError(
"Untreated case: Main Patch is recalculated; should be in 'else' branch");
1783 if (doSimpleOffline && patch->IsOfflineSimple()) {
1784 if(!selected) selected = patch;
1785 else if (patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp())
1788 else if (!doSimpleOffline && !patch->IsOfflineSimple()) {
1789 if(!selected) selected = patch;
1790 else if (patch->GetADCAmp() > selected->GetADCAmp())
1805 if (!(InputEvent()->FindListObject(obj->GetName()))) {
1806 InputEvent()->AddObject(obj);
1810 AliFatal(Form(
"%s: Container with name %s already present. Aborting", GetName(), obj->GetName()));
1826 AliWarning(Form(
"%s - AliAnalysisTaskEmcal::IsTrackInEmcalAcceptance - Geometry is not available!", GetName()));
1830 Double_t minPhi =
fGeom->GetArm1PhiMin() - edges;
1831 Double_t maxPhi =
fGeom->GetArm1PhiMax() + edges;
1833 if (part->Phi() > minPhi && part->Phi() < maxPhi) {
1843 axis->SetBinLabel(1,
"NullObject");
1844 axis->SetBinLabel(2,
"Pt");
1845 axis->SetBinLabel(3,
"Acceptance");
1846 axis->SetBinLabel(4,
"MCLabel");
1847 axis->SetBinLabel(5,
"BitMap");
1848 axis->SetBinLabel(6,
"HF cut");
1849 axis->SetBinLabel(7,
"Bit6");
1850 axis->SetBinLabel(8,
"NotHybridTrack");
1851 axis->SetBinLabel(9,
"MCFlag");
1852 axis->SetBinLabel(10,
"MCGenerator");
1853 axis->SetBinLabel(11,
"ChargeCut");
1854 axis->SetBinLabel(12,
"MinDistanceTPCSectorEdge");
1855 axis->SetBinLabel(13,
"Bit12");
1856 axis->SetBinLabel(14,
"IsEMCal");
1857 axis->SetBinLabel(15,
"Time");
1858 axis->SetBinLabel(16,
"Energy");
1859 axis->SetBinLabel(17,
"ExoticCut");
1860 axis->SetBinLabel(18,
"Bit17");
1861 axis->SetBinLabel(19,
"Area");
1862 axis->SetBinLabel(20,
"AreaEmc");
1863 axis->SetBinLabel(21,
"ZLeadingCh");
1864 axis->SetBinLabel(22,
"ZLeadingEmc");
1865 axis->SetBinLabel(23,
"NEF");
1866 axis->SetBinLabel(24,
"MinLeadPt");
1867 axis->SetBinLabel(25,
"MaxTrackPt");
1868 axis->SetBinLabel(26,
"MaxClusterPt");
1869 axis->SetBinLabel(27,
"Flavour");
1870 axis->SetBinLabel(28,
"TagStatus");
1871 axis->SetBinLabel(29,
"MinNConstituents");
1872 axis->SetBinLabel(30,
"Bit29");
1873 axis->SetBinLabel(31,
"Bit30");
1874 axis->SetBinLabel(32,
"Bit31");
1885 TVector3 vect1(part1->Px(), part1->Py(), part1->Pz());
1886 TVector3 vect2(part2->Px(), part2->Py(), part2->Pz());
1887 Double_t z = (vect1 * vect2) / (vect2 * vect2);
1899 TVector3 vect2(part2->Px(), part2->Py(), part2->Pz());
1900 Double_t z = (vect1 * vect2) / (vect2 * vect2);
1919 Double_t veta = t->GetTrackEtaOnEMCal();
1920 Double_t vphi = t->GetTrackPhiOnEMCal();
1922 Float_t pos[3] = {0};
1923 v->GetPosition(pos);
1925 Double_t ceta = cpos.Eta();
1926 Double_t cphi = cpos.Phi();
1928 phidiff=TVector2::Phi_mpi_pi(vphi-cphi);
1939 if (t->TestBit(BIT(22)) && !t->TestBit(BIT(23)))
1941 else if (!t->TestBit(BIT(22)) && t->TestBit(BIT(23)))
1943 else if (t->TestBit(BIT(22)) && t->TestBit(BIT(23)))
1962 if (aodTrack->TestFilterBit(filterBit1)) {
1965 else if (aodTrack->TestFilterBit(filterBit2)) {
1966 if ((aodTrack->GetStatus()&AliVTrack::kITSrefit)!=0) {
1990 AliStack* stack = mcEvent->Stack();
1992 const Int_t nprim = stack->GetNprimary();
1994 if (nprim < 8)
return;
1996 TParticle *part6 = stack->Particle(6);
1997 TParticle *part7 = stack->Particle(7);
2005 AliGenPythiaEventHeader *pythiaGenHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(mcEvent->GenEventHeader());
2006 if(pythiaGenHeader){
2007 Float_t
ptWeight=pythiaGenHeader->EventWeight();
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
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.
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