18 #include <TClonesArray.h>
29 #include "AliAnalysisUtils.h"
30 #include "AliAODEvent.h"
31 #include "AliAODMCHeader.h"
32 #include "AliAODTrack.h"
33 #include "AliAnalysisManager.h"
34 #include "AliCentrality.h"
36 #include "AliEMCALGeometry.h"
38 #include "AliEMCALTriggerPatchInfo.h"
39 #include "AliESDEvent.h"
40 #include "AliAODInputHandler.h"
41 #include "AliESDInputHandler.h"
42 #include "AliEventplane.h"
43 #include "AliGenPythiaEventHeader.h"
44 #include "AliInputEventHandler.h"
46 #include "AliMCEvent.h"
47 #include "AliMCParticle.h"
48 #include "AliMultiInputEventHandler.h"
49 #include "AliMultSelection.h"
51 #include "AliVCaloTrigger.h"
52 #include "AliVCluster.h"
53 #include "AliVEventHandler.h"
54 #include "AliVParticle.h"
69 fGeneralHistograms(kFALSE),
70 fLocalInitialized(kFALSE),
74 fCaloTriggerPatchInfoName(),
82 fUseAliAnaUtils(kFALSE),
83 fRejectPileup(kFALSE),
84 fTklVsClusSPDCut(kFALSE),
85 fOffTrigger(AliVEvent::kAny),
87 fMinBiasRefTrigger(
"CINT7-B-NOPF-ALLNOTRD"),
92 fMinPtTrackInEmcal(0),
93 fEventPlaneVsEmcal(-1),
99 fSelectPtHardBin(-999),
103 fNeedEmcalGeom(kTRUE),
104 fParticleCollArray(),
107 fEMCalTriggerMode(kOverlapWithLowThreshold),
108 fUseNewCentralityEstimation(kFALSE),
109 fGeneratePythiaInfoObject(kFALSE),
110 fUsePtHardBinScaling(kFALSE),
111 fMCRejectFilter(kFALSE),
112 fCountDownscaleCorrectedEvents(kFALSE),
113 fPtHardAndJetPtFactor(0.),
114 fPtHardAndClusterPtFactor(0.),
115 fPtHardAndTrackPtFactor(0.),
143 fHistXsectionAfterSel(
nullptr),
153 fHistTriggerClassesCorr(
nullptr)
180 fGeneralHistograms(kFALSE),
181 fLocalInitialized(kFALSE),
185 fCaloTriggerPatchInfoName(),
193 fUseAliAnaUtils(kFALSE),
194 fRejectPileup(kFALSE),
195 fTklVsClusSPDCut(kFALSE),
196 fOffTrigger(AliVEvent::kAny),
198 fMinBiasRefTrigger(
"CINT7-B-NOPF-ALLNOTRD"),
199 fTriggerTypeSel(kND),
203 fMinPtTrackInEmcal(0),
204 fEventPlaneVsEmcal(-1),
205 fMinEventPlane(-1e6),
210 fSelectPtHardBin(-999),
214 fNeedEmcalGeom(kTRUE),
215 fParticleCollArray(),
218 fEMCalTriggerMode(kOverlapWithLowThreshold),
219 fUseNewCentralityEstimation(kFALSE),
220 fGeneratePythiaInfoObject(kFALSE),
221 fUsePtHardBinScaling(kFALSE),
222 fMCRejectFilter(kFALSE),
223 fCountDownscaleCorrectedEvents(kFALSE),
224 fPtHardAndJetPtFactor(0.),
225 fPtHardAndClusterPtFactor(0.),
226 fPtHardAndTrackPtFactor(0.),
254 fHistXsectionAfterSel(
nullptr),
264 fHistTriggerClassesCorr(
nullptr)
276 DefineOutput(1, AliEmcalList::Class());
297 else AliError(Form(
"%s in SetClusPtCut(...): container %d not found",GetName(),c));
311 else AliError(Form(
"%s in SetClusTimeCut(...): container %d not found",GetName(),c));
324 else AliError(Form(
"%s in SetTrackPtCut(...): container %d not found",GetName(),c));
340 else AliError(Form(
"%s in SetTrackPtCut(...): container %d not found",GetName(),c));
354 else AliError(Form(
"%s in SetTrackPhiLimits(...): container %d not found",GetName(),c));
380 AliVEventHandler *evhand = mgr->GetInputEventHandler();
382 if (evhand->InheritsFrom(
"AliESDInputHandler")) {
390 AliError(
"Event handler not found!");
394 AliError(
"Analysis manager not found!");
427 fHistTrials =
new TH1F(
"fHistTrials",
"fHistTrials", 11, 0, 11);
428 fHistTrials->GetXaxis()->SetTitle(
"p_{T} hard bin");
432 fHistEvents =
new TH1F(
"fHistEvents",
"fHistEvents", 11, 0, 11);
433 fHistEvents->GetXaxis()->SetTitle(
"p_{T} hard bin");
437 fHistXsection =
new TProfile(
"fHistXsection",
"fHistXsection", 11, 0, 11);
442 const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
443 const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
445 for (
Int_t i = 1; i < 12; i++) {
446 fHistTrialsAfterSel->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
447 fHistEventsAfterSel->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
449 fHistTrials->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
450 fHistXsection->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
451 fHistEvents->GetXaxis()->SetBinLabel(i, Form(
"%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
455 fHistPtHard->GetXaxis()->SetTitle(
"p_{T,hard} (GeV/c)");
460 fHistZVertex =
new TH1F(
"fHistZVertex",
"Z vertex position", 60, -30, 30);
466 fHistCentrality =
new TH1F(
"fHistCentrality",
"Event centrality distribution", 200, 0, 100);
471 fHistEventPlane =
new TH1F(
"fHistEventPlane",
"Event plane", 120, -TMath::Pi(), TMath::Pi());
478 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
501 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
510 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
556 std::unique_ptr<TObjArray> triggerClasses(InputEvent()->GetFiredTriggerClasses().Tokenize(
" "));
557 TObjString* triggerClass(
nullptr);
558 for(
auto trg : *triggerClasses){
559 triggerClass =
static_cast<TObjString*
>(trg);
654 AliWarning(
"AliAnalysisTaskEmcal::AcceptCluster method is deprecated. Please use GetCusterContainer(c)->AcceptCluster(clus).");
656 if (!clus)
return kFALSE;
660 AliError(Form(
"%s:Container %d not found",GetName(),c));
663 UInt_t rejectionReason = 0;
677 AliWarning(
"AliAnalysisTaskEmcal::AcceptTrack method is deprecated. Please use GetParticleContainer(c)->AcceptParticle(clus).");
679 if (!track)
return kFALSE;
683 AliError(Form(
"%s:Container %d not found",GetName(),c));
687 UInt_t rejectionReason = 0;
709 if (file.Contains(
".zip#")) {
710 Ssiz_t pos1 = file.Index(
"root_archive",12,0,TString::kExact);
711 Ssiz_t pos = file.Index(
"#",1,pos1,TString::kExact);
712 Ssiz_t pos2 = file.Index(
".root",5,TString::kExact);
713 file.Replace(pos+1,pos2-pos1,
"");
716 file.ReplaceAll(
gSystem->BaseName(file.Data()),
"");
718 AliDebug(1,Form(
"File name: %s",file.Data()));
723 strPthard.Remove(strPthard.Last(
'/'));
724 strPthard.Remove(strPthard.Last(
'/'));
725 if (strPthard.Contains(
"AOD")) strPthard.Remove(strPthard.Last(
'/'));
726 strPthard.Remove(0,strPthard.Last(
'/')+1);
727 if (strPthard.IsDec()) pthard = strPthard.Atoi();
729 AliWarning(Form(
"Could not extract file number from path %s", strPthard.Data()));
732 std::unique_ptr<TFile> fxsec(TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec.root")));
736 fxsec = std::unique_ptr<TFile>(TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec_hists.root")));
737 if (!fxsec)
return kFALSE;
740 TKey* key = (TKey*)fxsec->GetListOfKeys()->At(0);
741 if (!key)
return kFALSE;
743 if (!list)
return kFALSE;
744 fXsec = ((TProfile*)list->FindObject(
"h1Xsec"))->GetBinContent(1);
745 fTrials = ((TH1F*)list->FindObject(
"h1Trials"))->GetBinContent(1);
748 TTree *xtree = (
TTree*)fxsec->Get(
"Xsection");
749 if (!xtree)
return kFALSE;
752 xtree->SetBranchAddress(
"xsection",&xsection);
753 xtree->SetBranchAddress(
"ntrials",&ntrials);
779 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
781 AliError(Form(
"%s - UserNotify: No current tree!",GetName()));
789 TFile *curfile = tree->GetCurrentFile();
791 AliError(Form(
"%s - UserNotify: No current file!",GetName()));
796 if (chain) tree = chain->GetTree();
803 if ((pthardbin < 0) || (pthardbin > 10)) pthardbin = 0;
821 AliError(Form(
"%s: Could not retrieve parton infos! %s!", GetName(),
fPythiaInfoName.Data()));
840 AliError(Form(
"%s: Could not retrieve event! Returning!", GetName()));
847 fGeom = AliEMCALGeometry::GetInstanceFromRunNumber(InputEvent()->
GetRunNumber());
849 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()));
861 AliWarning(
"Could not set event plane limits because EMCal geometry was not loaded!");
868 cont->SetArray(InputEvent());
874 AliError(Form(
"%s: Could not retrieve first track branch!", GetName()));
882 cont->SetArray(InputEvent());
888 AliError(Form(
"%s: Could not retrieve first cluster branch!", GetName()));
896 AliError(Form(
"%s: Could not retrieve cells %s!", GetName(),
fCaloCellsName.Data()));
904 AliError(Form(
"%s: Could not retrieve calo triggers %s!", GetName(),
fCaloTriggersName.Data()));
933 const AliESDRun *run = esd->GetESDRun();
934 TString beamType = run->GetBeamType();
935 if (beamType ==
"p-p")
937 else if (beamType ==
"A-A")
939 else if (beamType ==
"p-A")
944 Int_t runNumber = InputEvent()->GetRunNumber();
945 if ((runNumber >= 136851 && runNumber <= 139517) ||
946 (runNumber >= 166529 && runNumber <= 170593)) {
948 }
else if ((runNumber>=188365 && runNumber <= 188366) ||
949 (runNumber >= 195344 && runNumber <= 196608)) {
977 AliEMCALTriggerPatchInfo *patch;
978 for (
Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
980 if (patch->IsGammaHigh()) nG1++;
981 if (patch->IsGammaLow()) nG2++;
982 if (patch->IsJetHigh()) nJ1++;
983 if (patch->IsJetLow()) nJ2++;
984 if (patch->IsLevel0()) nL0++;
987 AliDebug(2,
"Patch summary: ");
988 AliDebug(2, Form(
"Number of patches: %d", nPatch));
989 AliDebug(2, Form(
"Jet: low[%d], high[%d]" ,nJ2, nJ1));
990 AliDebug(2, Form(
"Gamma: low[%d], high[%d]" ,nG2, nG1));
993 if (nL0>0) SETBIT(triggers,
kL0);
994 if (nG1>0) SETBIT(triggers,
kG1);
995 if (nG2>0) SETBIT(triggers,
kG2);
996 if (nJ1>0) SETBIT(triggers,
kJ1);
997 if (nJ2>0) SETBIT(triggers,
kJ2);
1011 AliWarning(Form(
"%s: Requesting undefined trigger type!", GetName()));
1048 res = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1052 res = ((AliVAODHeader*)aev->GetHeader())->GetOfflineTrigger();
1065 fired = eev->GetFiredTriggerClasses();
1069 fired = aev->GetFiredTriggerClasses();
1072 if (!fired.Contains(
"-B-")) {
1077 std::unique_ptr<TObjArray> arr(
fTrigClass.Tokenize(
"|"));
1083 for (
Int_t i=0;i<arr->GetEntriesFast();++i) {
1089 TString objStr = obj->GetName();
1091 (objStr.Contains(
"J1") || objStr.Contains(
"J2") || objStr.Contains(
"G1") || objStr.Contains(
"G2"))) {
1096 if(objStr.Contains(
"G")) {
1100 if(objStr.Contains(trigType2) && fired.Contains(trigType2.Data())) {
1104 else if(objStr.Contains(trigType1) && fired.Contains(trigType1.Data()) && !fired.Contains(trigType2.Data())) {
1112 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));
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;
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()));
1462 fPythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
1465 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
1468 for (
UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++) {
1469 fPythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
1480 const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
1481 const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
1493 AliEmcalContainer* cont = 0;
1496 while ((cont = static_cast<AliEmcalContainer*>(nextPartColl()))) cont->NextEvent();
1499 while ((cont = static_cast<AliParticleContainer*>(nextClusColl()))) cont->NextEvent();
1513 if (
TString(n).IsNull())
return 0;
1531 if (
TString(n).IsNull())
return 0;
1549 if (
TString(n).IsNull())
return 0;
1567 if (
TString(n).IsNull())
return 0;
1631 AliError(Form(
"%s: Particle container %d not found",GetName(),i));
1634 TString contName = cont->GetArrayName();
1635 return cont->GetArray();
1647 AliError(Form(
"%s:Cluster container %d not found",GetName(),i));
1650 return cont->GetArray();
1665 AliError(Form(
"%s: Particle container %d not found",GetName(),c));
1684 AliError(Form(
"%s: Cluster container %d not found",GetName(),c));
1701 AliError(Form(
"%s: Particle container %d not found",GetName(),i));
1704 return cont->GetNEntries();
1717 AliError(Form(
"%s: Cluster container %d not found",GetName(),i));
1720 return cont->GetNEntries();
1738 AliError(Form(
"%s: fTriggerPatchInfo not available",GetName()));
1746 AliEMCALTriggerPatchInfo *patch(NULL), *selected(NULL);
1747 for (
Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
1750 if (patch->IsMainTrigger()) {
1751 if(doSimpleOffline){
1752 if(patch->IsOfflineSimple()){
1756 if(patch->IsLevel0()) selected = patch;
1759 if(patch->IsJetHighSimple() || patch->IsJetLowSimple()){
1760 if(!selected) selected = patch;
1761 else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
1765 if(patch->IsGammaHighSimple() || patch->IsGammaLowSimple()){
1766 if(!selected) selected = patch;
1767 else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
1771 AliError(
"Untreated case: Main Patch is recalculated; should be in 'else' branch");
1777 if(patch->IsLevel0()) selected = patch;
1780 if(patch->IsJetHigh() || patch->IsJetLow()){
1781 if(!selected) selected = patch;
1782 else if (patch->GetADCAmp() > selected->GetADCAmp())
1787 if(patch->IsGammaHigh() || patch->IsGammaLow()){
1788 if(!selected) selected = patch;
1789 else if (patch->GetADCAmp() > selected->GetADCAmp())
1794 AliError(
"Untreated case: Main Patch is recalculated; should be in 'else' branch");
1800 if (doSimpleOffline && patch->IsOfflineSimple()) {
1801 if(!selected) selected = patch;
1802 else if (patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp())
1805 else if (!doSimpleOffline && !patch->IsOfflineSimple()) {
1806 if(!selected) selected = patch;
1807 else if (patch->GetADCAmp() > selected->GetADCAmp())
1822 if (!(InputEvent()->FindListObject(obj->GetName()))) {
1823 InputEvent()->AddObject(obj);
1827 AliFatal(Form(
"%s: Container with name %s already present. Aborting", GetName(), obj->GetName()));
1843 AliWarning(Form(
"%s - AliAnalysisTaskEmcal::IsTrackInEmcalAcceptance - Geometry is not available!", GetName()));
1850 if (part->Phi() > minPhi && part->Phi() < maxPhi) {
1860 axis->SetBinLabel(1,
"NullObject");
1861 axis->SetBinLabel(2,
"Pt");
1862 axis->SetBinLabel(3,
"Acceptance");
1863 axis->SetBinLabel(4,
"MCLabel");
1864 axis->SetBinLabel(5,
"BitMap");
1865 axis->SetBinLabel(6,
"HF cut");
1866 axis->SetBinLabel(7,
"Bit6");
1867 axis->SetBinLabel(8,
"NotHybridTrack");
1868 axis->SetBinLabel(9,
"MCFlag");
1869 axis->SetBinLabel(10,
"MCGenerator");
1870 axis->SetBinLabel(11,
"ChargeCut");
1871 axis->SetBinLabel(12,
"MinDistanceTPCSectorEdge");
1872 axis->SetBinLabel(13,
"Bit12");
1873 axis->SetBinLabel(14,
"IsEMCal");
1874 axis->SetBinLabel(15,
"Time");
1875 axis->SetBinLabel(16,
"Energy");
1876 axis->SetBinLabel(17,
"ExoticCut");
1877 axis->SetBinLabel(18,
"Bit17");
1878 axis->SetBinLabel(19,
"Area");
1879 axis->SetBinLabel(20,
"AreaEmc");
1880 axis->SetBinLabel(21,
"ZLeadingCh");
1881 axis->SetBinLabel(22,
"ZLeadingEmc");
1882 axis->SetBinLabel(23,
"NEF");
1883 axis->SetBinLabel(24,
"MinLeadPt");
1884 axis->SetBinLabel(25,
"MaxTrackPt");
1885 axis->SetBinLabel(26,
"MaxClusterPt");
1886 axis->SetBinLabel(27,
"Flavour");
1887 axis->SetBinLabel(28,
"TagStatus");
1888 axis->SetBinLabel(29,
"MinNConstituents");
1889 axis->SetBinLabel(30,
"Bit29");
1890 axis->SetBinLabel(31,
"Bit30");
1891 axis->SetBinLabel(32,
"Bit31");
1902 TVector3 vect1(part1->Px(), part1->Py(), part1->Pz());
1903 TVector3 vect2(part2->Px(), part2->Py(), part2->Pz());
1904 Double_t z = (vect1 * vect2) / (vect2 * vect2);
1916 TVector3 vect2(part2->Px(), part2->Py(), part2->Pz());
1917 Double_t z = (vect1 * vect2) / (vect2 * vect2);
1936 Double_t veta = t->GetTrackEtaOnEMCal();
1937 Double_t vphi = t->GetTrackPhiOnEMCal();
1940 v->GetPosition(pos);
1945 phidiff=TVector2::Phi_mpi_pi(vphi-cphi);
1956 if (t->TestBit(BIT(22)) && !t->TestBit(BIT(23)))
1958 else if (!t->TestBit(BIT(22)) && t->TestBit(BIT(23)))
1960 else if (t->TestBit(BIT(22)) && t->TestBit(BIT(23)))
1979 if (aodTrack->TestFilterBit(filterBit1)) {
1982 else if (aodTrack->TestFilterBit(filterBit2)) {
1983 if ((aodTrack->GetStatus()&AliVTrack::kITSrefit)!=0) {
2007 AliStack* stack = mcEvent->Stack();
2009 const Int_t nprim = stack->GetNprimary();
2011 if (nprim < 8)
return;
2013 TParticle *part6 = stack->Particle(6);
2014 TParticle *part7 = stack->Particle(7);
2022 AliGenPythiaEventHeader *pythiaGenHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(mcEvent->GenEventHeader());
2023 if(pythiaGenHeader){
2036 ::Error(
"AddAODHandler",
"No analysis manager to connect to.");
2040 AliAODInputHandler* aodHandler =
new AliAODInputHandler();
2042 AliVEventHandler *inputHandler=mgr->GetInputEventHandler();
2043 if (inputHandler && (inputHandler->IsA() == AliMultiInputEventHandler::Class())) {
2044 AliMultiInputEventHandler *multiInputHandler=(AliMultiInputEventHandler*)inputHandler;
2045 multiInputHandler->AddInputEventHandler(aodHandler);
2048 if (!inputHandler) {
2049 mgr->SetInputEventHandler(aodHandler);
2052 ::Error(
"AddAODHandler",
"inputHandler is NOT null. AOD handler was NOT added !!!");
2068 ::Error(
"AddESDHandler",
"No analysis manager to connect to.");
2072 AliESDInputHandler *esdHandler =
new AliESDInputHandler();
2074 AliVEventHandler *inputHandler=mgr->GetInputEventHandler();
2075 if (inputHandler && (inputHandler->IsA() == AliMultiInputEventHandler::Class())) {
2076 AliMultiInputEventHandler *multiInputHandler=(AliMultiInputEventHandler*)inputHandler;
2077 multiInputHandler->AddInputEventHandler(esdHandler);
2080 if (!inputHandler) {
2081 mgr->SetInputEventHandler(esdHandler);
2084 ::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
static AliEmcalDownscaleFactorsOCDB * Instance()
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 SetRun(int runnumber)
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
Double_t GetDownscaleFactorForTriggerClass(const TString &trigger) const
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
Bool_t fCountDownscaleCorrectedEvents
Count event number corrected for downscaling.
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
TH1 * fHistTriggerClassesCorr
!corrected number of events in each trigger class
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
BeamType GetBeamType() const
Double_t fMinVz
min vertex for event selection
virtual AliVParticle * GetAcceptParticle(Int_t i=-1) const
BeamType fBeamType
!event beam type
std::vector< TString > GetTriggerClasses() const
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
static AliAODInputHandler * AddAODHandler()
Double_t fVertex[3]
!event vertex
AliTrackContainer * AddTrackContainer(const char *n)
Handler for downscale factors for various triggers obtained from the OCDB.
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.
TString fMinBiasRefTrigger
Name of the minmum bias reference trigger, used in the calculation of downscale-corrected event numbe...
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