20 #include <TClonesArray.h>
22 #include <THashList.h>
24 #include <THistManager.h>
34 #include "AliAnalysisManager.h"
35 #include "AliAnalysisUtils.h"
36 #include "AliAODMCHeader.h"
37 #include "AliAODInputHandler.h"
38 #include "AliAODMCParticle.h"
39 #include "AliAODTrack.h"
43 #include "AliEMCALTriggerPatchInfo.h"
44 #include "AliEMCALGeometry.h"
45 #include "AliEMCALRecoUtils.h"
46 #include "AliESDEvent.h"
47 #include "AliESDtrack.h"
48 #include "AliGenPythiaEventHeader.h"
49 #include "AliInputEventHandler.h"
50 #include "AliMCEvent.h"
51 #include "AliVVertex.h"
60 namespace EMCalTriggerPtAnalysis {
65 AliAnalysisTaskChargedParticlesRefMC::AliAnalysisTaskChargedParticlesRefMC():
69 fTriggerSelection(NULL),
73 fUsePythiaHard(kFALSE),
94 AliAnalysisTaskSE(name),
97 fTriggerSelection(NULL),
100 fWeightHandler(NULL),
101 fUsePythiaHard(kFALSE),
115 DefineOutput(1, TList::Class());
132 fHistos =
new THistManager(
"Ref");
136 TArrayD oldbinning, newbinning;
140 fHistos->CreateTH1(
"hNtrials",
"Number of trials", 1, 0.5, 1.5);
141 fHistos->CreateTProfile(
"hCrossSection",
"PYTHIA cross section", 1, 0.5, 1.5);
142 fHistos->CreateTH1(
"hNtrialsNoSelect",
"Number of trials (without event selection)", 1, 0.5, 1.5);
143 fHistos->CreateTH1(
"hNtrialsEvent",
"Number of trials (from header, after event selection)", 1, 0.5, 1.5);
144 fHistos->CreateTProfile(
"hCrossSectionEvent",
"PYTHIA cross section (from header, after event selection)", 1, 0.5, 1.5);
145 fHistos->CreateTH1(
"hPtHard",
"Pt of the hard interaction", 1000, 0., 500);
146 fHistos->CreateTH1(
"hTriggerJetPtNoCut",
"pt of trigger jets wihtout cuts", 1000, 0., 500);
147 fHistos->CreateTH1(
"hRatioPtJetPtHardNoCut",
"Ratio of pt jet / pt hard without cut", 1000, 0., 20.);
148 fHistos->CreateTH1(
"hTriggerJetPtWithCut",
"pt of trigger jets after cuts", 1000, 0., 500);
149 fHistos->CreateTH1(
"hRatioPtJetPtHardWithCut",
"Ratio of pt jet / pt hard with cut on this ratio", 1000, 0., 20.);
150 TString triggers[16] = {
"True",
"MB",
"EMC7",
"EJ1",
"EJ2",
"EG1",
"EG2",
"MBexcl",
"EJ2excl",
"EG2excl",
"E1combined",
"E1Jonly",
"E1Gonly",
"E2combined",
"E2Jonly",
"E2Gonly"};
151 Double_t ptcuts[5] = {1., 2., 5., 10., 20.};
152 TString species[6] = {
"El",
"Mu",
"Pi",
"Ka",
"Pr",
"Ot"};
153 for(TString *trg = triggers; trg < triggers +
sizeof(triggers)/
sizeof(TString); trg++){
154 fHistos->CreateTH1(Form(
"hEventCount%s", trg->Data()), Form(
"Event Counter for trigger class %s", trg->Data()), 1, 0.5, 1.5);
155 fHistos->CreateTH1(Form(
"hVertexBefore%s", trg->Data()), Form(
"Vertex distribution before z-cut for trigger class %s", trg->Data()), 500, -50, 50);
156 fHistos->CreateTH1(Form(
"hVertexAfter%s", trg->Data()), Form(
"Vertex distribution after z-cut for trigger class %s", trg->Data()), 100, -10, 10);
157 fHistos->CreateTH1(Form(
"hPtEtaAllOldBinning%s", trg->Data()), Form(
"Charged particle pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
158 fHistos->CreateTH1(Form(
"hPtEtaCentOldBinning%s", trg->Data()), Form(
"Charged particle pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
159 fHistos->CreateTH1(Form(
"hPtEtaAllNewBinning%s", trg->Data()), Form(
"Charged particle pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
160 fHistos->CreateTH1(Form(
"hPtEtaCentNewBinning%s", trg->Data()), Form(
"Charged particle pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
161 fHistos->CreateTH1(Form(
"hPtEMCALEtaAllOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
162 fHistos->CreateTH1(Form(
"hPtEMCALEtaCentOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
163 fHistos->CreateTH1(Form(
"hPtEMCALEtaAllNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
164 fHistos->CreateTH1(Form(
"hPtEMCALEtaCentNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
165 fHistos->CreateTH1(Form(
"hPtEMCALNoTRDEtaAllOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (no TRD in front) pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
166 fHistos->CreateTH1(Form(
"hPtEMCALNoTRDEtaCentOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (no TRD in front) pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
167 fHistos->CreateTH1(Form(
"hPtEMCALNoTRDEtaAllNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (no TRD in front) pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
168 fHistos->CreateTH1(Form(
"hPtEMCALNoTRDEtaCentNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (no TRD in front) pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
169 fHistos->CreateTH1(Form(
"hPtEMCALWithTRDEtaAllOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (with TRD in front) pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
170 fHistos->CreateTH1(Form(
"hPtEMCALWithTRDEtaCentOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (with TRD in front) pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
171 fHistos->CreateTH1(Form(
"hPtEMCALWithTRDEtaAllNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (with TRD in front) pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
172 fHistos->CreateTH1(Form(
"hPtEMCALWithTRDEtaCentNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (with TRD in front) pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
173 for(TString *piditer = species; piditer < species +
sizeof(species)/
sizeof(TString); ++piditer){
174 fHistos->CreateTH1(Form(
"hPtEtaAllOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s pt distribution all eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
175 fHistos->CreateTH1(Form(
"hPtEtaCentOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s pt distribution central eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
176 fHistos->CreateTH1(Form(
"hPtEtaAllNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s pt distribution all eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
177 fHistos->CreateTH1(Form(
"hPtEtaCentNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s pt distribution central eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
178 fHistos->CreateTH1(Form(
"hPtEMCALEtaAllOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL pt distribution all eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
179 fHistos->CreateTH1(Form(
"hPtEMCALEtaCentOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL pt distribution central eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
180 fHistos->CreateTH1(Form(
"hPtEMCALEtaAllNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL pt distribution all eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
181 fHistos->CreateTH1(Form(
"hPtEMCALEtaCentNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL pt distribution central eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
182 fHistos->CreateTH1(Form(
"hPtEMCALNoTRDEtaAllOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (no TRD in front) pt distribution all eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
183 fHistos->CreateTH1(Form(
"hPtEMCALNoTRDEtaCentOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (no TRD in front) pt distribution central eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
184 fHistos->CreateTH1(Form(
"hPtEMCALNoTRDEtaAllNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (no TRD in front) pt distribution all eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
185 fHistos->CreateTH1(Form(
"hPtEMCALNoTRDEtaCentNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (no TRD in front) pt distribution central eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
186 fHistos->CreateTH1(Form(
"hPtEMCALWithTRDEtaAllOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (with TRD in front) pt distribution all eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
187 fHistos->CreateTH1(Form(
"hPtEMCALWithTRDEtaCentOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (with TRD in front) pt distribution central eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
188 fHistos->CreateTH1(Form(
"hPtEMCALWithTRDEtaAllNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (with TRD in front) pt distribution all eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
189 fHistos->CreateTH1(Form(
"hPtEMCALWithTRDEtaCentNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (with TRD in front) pt distribution central eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
191 for(
int ipt = 0; ipt < 5; ipt++){
193 Form(
"hEtaLabDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
194 Form(
"Eta (lab) distribution without etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
200 Form(
"hEtaLabDistCutPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
201 Form(
"Eta (lab) distribution with etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
207 Form(
"hEtaCentDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
208 Form(
"Eta (cent) distribution without etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
214 Form(
"hEtaCentDistCutPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
215 Form(
"Eta (cent) distribution with etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
221 Form(
"hEtaLabDistAllEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
222 Form(
"Eta (lab) distribution without etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
228 Form(
"hEtaLabDistCutEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
229 Form(
"Eta (lab) distribution with etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
235 Form(
"hEtaCentDistAllEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
236 Form(
"Eta (cent) distribution without etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
242 Form(
"hEtaCentDistCutEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
243 Form(
"Eta (cent) distribution with etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
249 Form(
"hPhiDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
250 Form(
"#phi distribution of particles with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
258 PostData(1,
fHistos->GetListOfHistograms());
262 if(!fMCEvent)
return;
269 fHistos->FillTH1(
"hNtrialsNoSelect",1,pyheader->Trials());
281 Bool_t isMinBias = fInputHandler->IsEventSelected() & AliVEvent::kINT7,
282 isEMC7 = kFALSE, isEJ1 = kFALSE, isEJ2 = kFALSE, isEG1 = kFALSE, isEG2 = kFALSE;
283 TClonesArray *fTriggerPatches =
dynamic_cast<TClonesArray *
>(fInputEvent->FindListObject(
"EmcalTriggers"));
292 if(!(isMinBias || isEG1 || isEG2 || isEJ1 || isEJ2))
return;
293 const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
295 if(vtx->GetNContributors() < 1)
return;
297 fHistos->FillTH1(
"hVertexBeforeTrue", vtx->GetZ(), weight);
298 if(isMinBias)
fHistos->FillTH1(
"hVertexBeforeMB", vtx->GetZ(), weight);
299 if(isEMC7)
fHistos->FillTH1(
"hVertexBeforeEMC7", vtx->GetZ(), weight);
300 if(isEJ1)
fHistos->FillTH1(
"hVertexBeforeEJ1", vtx->GetZ(), weight);
301 if(isEJ2)
fHistos->FillTH1(
"hVertexBeforeEJ2", vtx->GetZ(), weight);
302 if(isEG1)
fHistos->FillTH1(
"hVertexBeforeEG1", vtx->GetZ(), weight);
303 if(isEG2)
fHistos->FillTH1(
"hVertexBeforeEG2", vtx->GetZ(), weight);
304 if(!
fAnalysisUtil->IsVertexSelected2013pA(fInputEvent))
return;
307 if(vtx->GetZ() < -10. || vtx->GetZ() > 10.)
return;
310 fHistos->FillTH1(
"hEventCountTrue", 1, weight);
311 fHistos->FillTH1(
"hVertexAfterTrue", vtx->GetZ(), weight);
313 fHistos->FillTH1(
"hEventCountMB", 1, weight);
314 fHistos->FillTH1(
"hVertexAfterMB", vtx->GetZ(), weight);
316 if(!(isEG1 || isEG2 || isEJ1 || isEJ2)){
317 fHistos->FillTH1(
"hEventCountMBexcl", 1, weight);
318 fHistos->FillTH1(
"hVertexAfterMBexcl", vtx->GetZ(), weight);
322 fHistos->FillTH1(
"hEventCountEMC7", 1, weight);
323 fHistos->FillTH1(
"hVertexAfterEMC7", vtx->GetZ(), weight);
326 fHistos->FillTH1(
"hEventCountEJ1", 1, weight);
327 fHistos->FillTH1(
"hVertexAfterEJ1", vtx->GetZ(), weight);
329 fHistos->FillTH1(
"hEventCountE1combined", 1, weight);
330 fHistos->FillTH1(
"hVertexAfterE1combined", vtx->GetZ(), weight);
332 fHistos->FillTH1(
"hEventCountE1Jonly", 1, weight);
333 fHistos->FillTH1(
"hVertexAfterE1Jonly", vtx->GetZ(), weight);
337 fHistos->FillTH1(
"hEventCountEJ2", 1, weight);
338 fHistos->FillTH1(
"hVertexAfterEJ2", vtx->GetZ(), weight);
341 fHistos->FillTH1(
"hEventCountEJ2excl", 1, weight);
342 fHistos->FillTH1(
"hVertexAfterEJ2excl", vtx->GetZ(), weight);
345 fHistos->FillTH1(
"hEventCountE2combined", 1, weight);
346 fHistos->FillTH1(
"hVertexAfterE2combined", vtx->GetZ(), weight);
348 fHistos->FillTH1(
"hEventCountE2Jonly", 1, weight);
349 fHistos->FillTH1(
"hVertexAfterE2Jonly", vtx->GetZ(), weight);
353 fHistos->FillTH1(
"hEventCountEG1", 1, weight);
354 fHistos->FillTH1(
"hVertexAfterEG1", vtx->GetZ(), weight);
355 if(!(isEJ1 || isEJ2)){
356 fHistos->FillTH1(
"hEventCountE1Gonly", 1, weight);
357 fHistos->FillTH1(
"hVertexAfterE1Gonly", vtx->GetZ(), weight);
361 fHistos->FillTH1(
"hEventCountEG2", 1, weight);
362 fHistos->FillTH1(
"hVertexAfterEG2", vtx->GetZ(), weight);
365 fHistos->FillTH1(
"hEventCountEG2excl", 1, weight);
366 fHistos->FillTH1(
"hVertexAfterEG2excl", vtx->GetZ(), weight);
368 if(!(isEJ1 || isEJ2)){
369 fHistos->FillTH1(
"hEventCountE2Gonly", 1, weight);
370 fHistos->FillTH1(
"hVertexAfterE2Gonly", vtx->GetZ(), weight);
376 fHistos->FillTH1(
"hNtrialsEvent", 1., pyheader->Trials());
377 fHistos->FillProfile(
"hCrossSectionEvent", 1., pyheader->GetXsection());
378 fHistos->FillTH1(
"hPtHard", pyheader->GetPtHard());
390 AliVParticle *truepart = NULL;
391 Bool_t isEMCAL(kFALSE);
392 for(
int ipart = 0; ipart < fMCEvent->GetNumberOfTracks(); ipart++){
393 truepart = fMCEvent->GetTrack(ipart);
397 if(TMath::Abs(truepart->Pt()) < 0.1)
continue;
398 if(!truepart->Charge())
continue;
401 isEMCAL = (truepart->Phi() > 1.5 && truepart->Phi() < 3.1) ? kTRUE : kFALSE;
406 Double_t etacent = -1. * truepart->Eta() - TMath::Abs(
fYshift);
413 switch(TMath::Abs(truepart->PdgCode())){
414 case kPiPlus: pid =
"Pi";
break;
415 case kMuonMinus: pid =
"Mu";
break;
416 case kElectron: pid =
"El";
break;
417 case kKPlus: pid =
"Ka";
break;
418 case kProton: pid =
"Pr";
break;
419 default: pid =
"Ot";
break;
423 FillTrackHistos(
"True", weight, truepart->Pt(), truepart->Eta() *
fEtaSign, etacent, truepart->Phi(), etacentcut, isEMCAL, kFALSE, pid);
435 AliVTrack *checktrack(NULL);
436 AliVParticle *assocMC(NULL);
437 double ptparticle(-1.), etaparticle(-100.), etaEMCAL(0.), phiEMCAL(0.);
438 Bool_t hasTRD = kFALSE;
439 for(
int itrk = 0; itrk < fInputEvent->GetNumberOfTracks(); ++itrk){
440 checktrack =
dynamic_cast<AliVTrack *
>(fInputEvent->GetTrack(itrk));
441 if(!checktrack)
continue;
443 assocMC = fMCEvent->GetTrack(TMath::Abs(checktrack->GetLabel()));
444 if(!assocMC)
continue;
449 if(TMath::Abs(checktrack->Pt()) < 0.1)
continue;
450 if(checktrack->IsA() == AliESDtrack::Class()){
451 AliESDtrack copytrack(*(static_cast<AliESDtrack *>(checktrack)));
452 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(©track);
453 etaEMCAL = copytrack.GetTrackEtaOnEMCal();
454 phiEMCAL = copytrack.GetTrackPhiOnEMCal();
456 AliAODTrack copytrack(*(static_cast<AliAODTrack *>(checktrack)));
457 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(©track);
458 etaEMCAL = copytrack.GetTrackEtaOnEMCal();
459 phiEMCAL = copytrack.GetTrackPhiOnEMCal();
461 Int_t supermoduleID = -1;
462 isEMCAL =
fGeometry->SuperModuleNumberFromEtaPhi(etaEMCAL, phiEMCAL, supermoduleID);
464 isEMCAL = isEMCAL && supermoduleID < 10;
465 hasTRD = isEMCAL && supermoduleID >= 4;
469 ptparticle = TMath::Abs(assocMC->Pt());
470 etaparticle = assocMC->Eta();
475 Double_t etacent = -1. * checktrack->Eta() - TMath::Abs(
fYshift);
481 TString assocpid =
"";
482 switch(TMath::Abs(assocMC->PdgCode())){
483 case kPiPlus: assocpid =
"Pi";
break;
484 case kMuonMinus: assocpid =
"Mu";
break;
485 case kElectron: assocpid =
"El";
break;
486 case kKPlus: assocpid =
"Ka";
break;
487 case kProton: assocpid =
"Pr";
break;
488 default: assocpid =
"Ot";
break;
493 FillTrackHistos(
"MB", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
495 if(!(isEG1 || isEG2 || isEJ1 || isEJ2)){
496 FillTrackHistos(
"MBexcl", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
500 FillTrackHistos(
"EMC7", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
503 FillTrackHistos(
"EJ1", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
505 FillTrackHistos(
"E1combined", weight, checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
507 FillTrackHistos(
"E1Jonly", weight, checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
511 FillTrackHistos(
"EJ2", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
514 FillTrackHistos(
"EJ2excl", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
517 FillTrackHistos(
"E2combined", weight, checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
519 FillTrackHistos(
"E2Jonly", weight, checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
523 FillTrackHistos(
"EG1", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
524 if(!(isEJ1 || isEJ2)){
525 FillTrackHistos(
"E1Gonly", weight, checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
529 FillTrackHistos(
"EG2", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
532 FillTrackHistos(
"EG2excl", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
534 if(!(isEJ1 || isEJ2)){
535 FillTrackHistos(
"E2Gonly", weight, checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
539 PostData(1,
fHistos->GetListOfHistograms());
555 const char *eventclass,
567 fHistos->FillTH1(Form(
"hPtEtaAllNewBinning%s", eventclass), TMath::Abs(pt), weight);
568 fHistos->FillTH1(Form(
"hPtEtaAllOldBinning%s", eventclass), TMath::Abs(pt), weight);
569 fHistos->FillTH1(Form(
"hPtEtaAllNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
570 fHistos->FillTH1(Form(
"hPtEtaAllOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
572 fHistos->FillTH1(Form(
"hPtEMCALEtaAllNewBinning%s", eventclass), TMath::Abs(pt), weight);
573 fHistos->FillTH1(Form(
"hPtEMCALEtaAllOldBinning%s", eventclass), TMath::Abs(pt), weight);
574 fHistos->FillTH1(Form(
"hPtEMCALEtaAllNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
575 fHistos->FillTH1(Form(
"hPtEMCALEtaAllOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
577 fHistos->FillTH1(Form(
"hPtEMCALWithTRDEtaAllNewBinning%s", eventclass), TMath::Abs(pt), weight);
578 fHistos->FillTH1(Form(
"hPtEMCALWithTRDEtaAllOldBinning%s", eventclass), TMath::Abs(pt), weight);
579 fHistos->FillTH1(Form(
"hPtEMCALWithTRDEtaAllNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
580 fHistos->FillTH1(Form(
"hPtEMCALWithTRDEtaAllOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
582 fHistos->FillTH1(Form(
"hPtEMCALNoTRDEtaAllNewBinning%s", eventclass), TMath::Abs(pt), weight);
583 fHistos->FillTH1(Form(
"hPtEMCALNoTRDEtaAllOldBinning%s", eventclass), TMath::Abs(pt), weight);
584 fHistos->FillTH1(Form(
"hPtEMCALNoTRDEtaAllNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
585 fHistos->FillTH1(Form(
"hPtEMCALNoTRDEtaAllOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
589 int ptmin[5] = {1,2,5,10,20};
590 for(
int icut = 0; icut < 5; icut++){
591 if(TMath::Abs(pt) > static_cast<double>(ptmin[icut])){
592 fHistos->FillTH1(Form(
"hPhiDistAllPt%d%s", ptmin[icut], eventclass), phi, weight);
593 fHistos->FillTH1(Form(
"hEtaLabDistAllPt%d%s", ptmin[icut], eventclass), etalab, weight);
594 fHistos->FillTH1(Form(
"hEtaCentDistAllPt%d%s", ptmin[icut], eventclass), etacent, weight);
596 fHistos->FillTH1(Form(
"hEtaLabDistAllEMCALPt%d%s", ptmin[icut], eventclass), etalab, weight);
597 fHistos->FillTH1(Form(
"hEtaCentDistAllEMCALPt%d%s", ptmin[icut], eventclass), etacent, weight);
603 fHistos->FillTH1(Form(
"hPtEtaCentNewBinning%s", eventclass), TMath::Abs(pt), weight);
604 fHistos->FillTH1(Form(
"hPtEtaCentOldBinning%s", eventclass), TMath::Abs(pt), weight);
605 fHistos->FillTH1(Form(
"hPtEtaCentNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
606 fHistos->FillTH1(Form(
"hPtEtaCentOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
608 fHistos->FillTH1(Form(
"hPtEMCALEtaCentNewBinning%s", eventclass), TMath::Abs(pt), weight);
609 fHistos->FillTH1(Form(
"hPtEMCALEtaCentOldBinning%s", eventclass), TMath::Abs(pt), weight);
610 fHistos->FillTH1(Form(
"hPtEMCALEtaCentNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
611 fHistos->FillTH1(Form(
"hPtEMCALEtaCentOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
613 fHistos->FillTH1(Form(
"hPtEMCALWithTRDEtaCentNewBinning%s", eventclass), TMath::Abs(pt), weight);
614 fHistos->FillTH1(Form(
"hPtEMCALWithTRDEtaCentOldBinning%s", eventclass), TMath::Abs(pt), weight);
615 fHistos->FillTH1(Form(
"hPtEMCALWithTRDEtaCentNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
616 fHistos->FillTH1(Form(
"hPtEMCALWithTRDEtaCentOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
618 fHistos->FillTH1(Form(
"hPtEMCALNoTRDEtaCentNewBinning%s", eventclass), TMath::Abs(pt), weight);
619 fHistos->FillTH1(Form(
"hPtEMCALNoTRDEtaCentOldBinning%s", eventclass), TMath::Abs(pt), weight);
620 fHistos->FillTH1(Form(
"hPtEMCALNoTRDEtaCentNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
621 fHistos->FillTH1(Form(
"hPtEMCALNoTRDEtaCentOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
624 for(
int icut = 0; icut < 5; icut++){
625 if(TMath::Abs(pt) > static_cast<double>(ptmin[icut])){
626 fHistos->FillTH1(Form(
"hEtaLabDistCutPt%d%s", ptmin[icut], eventclass), etalab, weight);
627 fHistos->FillTH1(Form(
"hEtaCentDistCutPt%d%s", ptmin[icut], eventclass), etacent, weight);
629 fHistos->FillTH1(Form(
"hEtaLabDistCutEMCALPt%d%s", ptmin[icut], eventclass), etalab, weight);
630 fHistos->FillTH1(Form(
"hEtaCentDistCutEMCALPt%d%s", ptmin[icut], eventclass), etacent, weight);
643 TString ending = aftercut ?
"WithCut" :
"NoCut";
645 TLorentzVector jetvec;
646 TString hnameSpec =
"hTriggerJetPt" + ending,
647 hnameptratio =
"hRatioPtJetPtHard" + ending;
648 for(
int ijet = 0; ijet < header->NTriggerJets(); ijet++){
649 memset(pbuf, 0,
sizeof(Float_t) * 4);
650 header->TriggerJet(ijet, pbuf);
651 jetvec.SetPxPyPzE(pbuf[0], pbuf[1], pbuf[2], pbuf[3]);
652 fHistos->FillTH1(hnameSpec.Data(), TMath::Abs(jetvec.Pt()));
653 fHistos->FillTH1(hnameptratio.Data(), TMath::Abs(jetvec.Pt()/header->GetPtHard()));
666 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
668 AliError(Form(
"%s - UserNotify: No current tree!",GetName()));
672 Float_t xsection = 0;
676 TFile *curfile = tree->GetCurrentFile();
678 AliError(Form(
"%s - UserNotify: No current file!",GetName()));
682 TChain *chain =
dynamic_cast<TChain*
>(tree);
683 if (chain) tree = chain->GetTree();
685 Int_t
nevents = tree->GetEntriesFast();
689 fHistos->FillTH1(
"hNtrials", 1., trials);
690 fHistos->FillProfile(
"hCrossSection", 1., xsection);
710 TString
file(currFile);
714 if (file.Contains(
".zip#")) {
715 Ssiz_t pos1 = file.Index(
"root_archive",12,0,TString::kExact);
716 Ssiz_t pos = file.Index(
"#",1,pos1,TString::kExact);
717 Ssiz_t pos2 = file.Index(
".root",5,TString::kExact);
718 file.Replace(pos+1,pos2-pos1,
"");
721 file.ReplaceAll(
gSystem->BaseName(file.Data()),
"");
723 AliDebug(1,Form(
"File name: %s",file.Data()));
726 TString strPthard(file);
728 strPthard.Remove(strPthard.Last(
'/'));
729 strPthard.Remove(strPthard.Last(
'/'));
730 if (strPthard.Contains(
"AOD")) strPthard.Remove(strPthard.Last(
'/'));
731 strPthard.Remove(0,strPthard.Last(
'/')+1);
732 if (strPthard.IsDec())
733 pthard = strPthard.Atoi();
735 AliWarning(Form(
"Could not extract file number from path %s", strPthard.Data()));
738 TFile *fxsec = TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec.root"));
742 fxsec = TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec_hists.root"));
748 TKey* key = (TKey*)fxsec->GetListOfKeys()->At(0);
753 TList *
list =
dynamic_cast<TList*
>(key->ReadObj());
758 fXsec = ((TProfile*)list->FindObject(
"h1Xsec"))->GetBinContent(1);
759 fTrials = ((TH1F*)list->FindObject(
"h1Trials"))->GetBinContent(1);
763 TTree *xtree = (TTree*)fxsec->Get(
"Xsection");
769 Double_t xsection = 0;
770 xtree->SetBranchAddress(
"xsection",&xsection);
771 xtree->SetBranchAddress(
"ntrials",&ntrials);
785 AliGenPythiaEventHeader *pythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
788 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
790 for (UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++) {
791 pythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
792 if (pythiaHeader)
break;
813 std::vector<double> mybinning;
814 std::map<double,double> definitions;
815 definitions.insert(std::pair<double,double>(2.5, 0.1));
816 definitions.insert(std::pair<double,double>(7., 0.25));
817 definitions.insert(std::pair<double,double>(15., 0.5));
818 definitions.insert(std::pair<double,double>(25., 1.));
819 definitions.insert(std::pair<double,double>(40., 2.5));
820 definitions.insert(std::pair<double,double>(50., 5.));
821 definitions.insert(std::pair<double,double>(100., 10.));
822 double currentval = 0;
823 for(std::map<double,double>::iterator
id = definitions.begin();
id != definitions.end(); ++id){
824 double limit =
id->first, binwidth =
id->second;
825 while(currentval < limit){
826 currentval += binwidth;
827 mybinning.push_back(currentval);
830 binning.Set(mybinning.size());
832 for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
841 std::vector<double> mybinning;
842 std::map<double,double> definitions;
843 definitions.insert(std::pair<double, double>(1, 0.05));
844 definitions.insert(std::pair<double, double>(2, 0.1));
845 definitions.insert(std::pair<double, double>(4, 0.2));
846 definitions.insert(std::pair<double, double>(7, 0.5));
847 definitions.insert(std::pair<double, double>(16, 1));
848 definitions.insert(std::pair<double, double>(36, 2));
849 definitions.insert(std::pair<double, double>(40, 4));
850 definitions.insert(std::pair<double, double>(50, 5));
851 definitions.insert(std::pair<double, double>(100, 10));
852 definitions.insert(std::pair<double, double>(200, 20));
853 double currentval = 0.;
854 mybinning.push_back(currentval);
855 for(std::map<double,double>::iterator
id = definitions.begin();
id != definitions.end(); ++id){
856 double limit =
id->first, binwidth =
id->second;
857 while(currentval < limit){
858 currentval += binwidth;
859 mybinning.push_back(currentval);
862 binning.Set(mybinning.size());
864 for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
874 TString triggerstring =
"";
875 Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0;
876 double minADC_EJ1 = 260.,
880 for(TIter patchIter = TIter(triggerpatches).Begin(); patchIter != TIter::End(); ++patchIter){
881 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(*patchIter);
882 if(!patch->IsOfflineSimple())
continue;
883 if(patch->IsJetHighSimple() && patch->GetADCOfflineAmp() > minADC_EJ1) nEJ1++;
884 if(patch->IsJetLowSimple() && patch->GetADCOfflineAmp() > minADC_EJ2) nEJ2++;
885 if(patch->IsGammaHighSimple() && patch->GetADCOfflineAmp() > minADC_EG1) nEG1++;
886 if(patch->IsGammaLowSimple() && patch->GetADCOfflineAmp() > minADC_EG2) nEG2++;
888 if(nEJ1) triggerstring +=
"EJ1";
890 if(triggerstring.Length()) triggerstring +=
",";
891 triggerstring +=
"EJ2";
894 if(triggerstring.Length()) triggerstring +=
",";
895 triggerstring +=
"EG1";
898 if(triggerstring.Length()) triggerstring +=
",";
899 triggerstring +=
"EG2";
901 return triggerstring;
913 Bool_t physprim =
false;
914 const AliAODMCParticle *aodmc =
dynamic_cast<const AliAODMCParticle *
>(part);
916 physprim = aodmc->IsPhysicalPrimary();
918 physprim = mcevent->IsPhysicalPrimary(part->GetLabel());
929 Bool_t hasOutlier = kFALSE;
931 TLorentzVector jetvec;
932 for(
int ijet = 0; ijet < header->NTriggerJets(); ijet++){
933 memset(pbuf, 0,
sizeof(Float_t) * 4);
934 header->TriggerJet(ijet, pbuf);
935 jetvec.SetPxPyPzE(pbuf[0], pbuf[1], pbuf[2], pbuf[3]);
936 if(TMath::Abs(jetvec.Pt()) >= this->
fFracPtHard * header->GetPtHard()){
const AliEMCalTriggerWeightHandler * fWeightHandler
Weight handler (optional)
AliAnalysisTaskChargedParticlesRefMC()
Double_t fEtaLabCut[2]
Cut applied in Eta Lab frame.
void FillTriggerJetHistograms(Bool_t aftercut, AliGenPythiaEventHeader *const header)
static AliEmcalTrackSelection * TrackCutsFactory(TString name, Bool_t isAOD)
Double_t fEtaCmsCut[2]
Cut applied in Eta centre-of-mass frame.
AliGenPythiaEventHeader * GetPythiaHeader() const
Double_t fYshift
Rapidity shift.
Double_t fFracPtHard
Cut on the maximum fraction of pt hard of any trigger jet.
AliEmcalTriggerOfflineSelection * fTriggerSelection
Offline trigger selection.
Bool_t IsOutlier(AliGenPythiaEventHeader *const header) const
Bool_t fUsePythiaHard
flag whether using PYTHIA Hard
void CreateOldPtBinning(TArrayD &binning) const
THistManager * fHistos
Histogram manager.
Bool_t IsPhysicalPrimary(const AliVParticle *const part, AliMCEvent *const mcevent)
Bool_t PythiaInfoFromFile(const char *currFile, Float_t &fXsec, Float_t &fTrials, Int_t &pthard) const
virtual ~AliAnalysisTaskChargedParticlesRefMC()
Bool_t IsOfflineSelected(EmcalTriggerClass trgcls, const TClonesArray *const triggerpatches) const
Unit test class for charged particle distributions (MC case)
AliEMCALGeometry * fGeometry
EMCAL geometry methods.
double GetEventWeight(const AliMCEvent *const event) const
void FillTrackHistos(const char *eventclass, Double_t weight, Double_t pt, Double_t eta, Double_t etacent, Double_t phi, Bool_t etacut, Bool_t inEmcal, Bool_t hasTRD, const char *pid)
AliEmcalTrackSelection * fTrackCuts
Standard track selection.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
TString GetFiredTriggerClasses(const TClonesArray *triggerpatches)
Double_t fEtaSign
Sign of the eta distribution (swaps when beam directions swap): p-Pb: +1, Pb-p: -1.
void CreateNewPtBinning(TArrayD &binning) const
Int_t GetRunNumber(TString)
AliAnalysisUtils * fAnalysisUtil
Event selection.
void UserExec(Option_t *)
void UserCreateOutputObjects()
void InitializeTrackCuts(TString cutname, bool isAOD)
void SetTrackSelection(AliEmcalTrackSelection *sel)
virtual bool IsTrackAccepted(AliVTrack *const trk)=0