22 #include <TClonesArray.h> 30 #include "AliAnalysisUtils.h" 31 #include "AliAODInputHandler.h" 32 #include "AliAODMCHeader.h" 33 #include "AliAODMCParticle.h" 34 #include "AliAODTrack.h" 37 #include "AliEMCALGeometry.h" 39 #include "AliEMCALTriggerPatchInfo.h" 41 #include "AliESDtrack.h" 42 #include "AliGenPythiaEventHeader.h" 43 #include "AliInputEventHandler.h" 45 #include "AliVCluster.h" 46 #include "AliVEvent.h" 47 #include "AliVParticle.h" 60 AliAnalysisTaskChargedParticlesMCTriggerMimic::AliAnalysisTaskChargedParticlesMCTriggerMimic():
67 fEtaLabCut(-0.5, 0.5),
68 fEtaCmsCut(-0.13, 0.13),
69 fPhiCut(0, TMath::TwoPi()),
114 AliDebugStream(1) << GetName() <<
": Running on PYTHIA Hard production" << std::endl;
116 AliDebugStream(1) << GetName() <<
": Not running on PYTHIA Hard production" << std::endl;
123 TLinearBinning smbinning(21, -0.5, 20.5), etabinning(100, -0.7, 0.7);
129 fHistos->
CreateTH1(
"hUserVertexZ",
"User vertex distribution after z-cut", 100, -10, 10);
130 fHistos->
CreateTH1(
"hUserPtHard",
"User pt-hard distribution", 1000, 0., 300.);
134 const std::array<std::string, 2> kInputs = {
"True",
"Accept"};
135 const std::array<std::string, 6> kSpecies = {
"El",
"Mu",
"Pi",
"Ka",
"Pr",
"Ot"};
136 const std::array<double, 5> kPtCuts = {1., 2., 5., 10., 20.};
137 for(
const auto &input : kInputs){
138 AliDebugStream(1) << GetName() <<
": Creating histograms for case " << input << std::endl;
139 fHistos->
CreateTH1(Form(
"hTrackPtEtaAll%s", input.c_str()), Form(
"Charged particle p_{t} distribution all #eta %s", input.c_str()), newbinning,
"s");
140 fHistos->
CreateTH1(Form(
"hTrackPtEtaCent%s", input.c_str()), Form(
"Charged particle p_{t} distribution central #eta %s", input.c_str()), newbinning,
"s");
141 fHistos->
CreateTH1(Form(
"hTrackPtEMCALEtaAll%s", input.c_str()), Form(
"Charged particle in EMCAL p_{t} distribution all #eta trigger %s", input.c_str()), newbinning);
142 fHistos->
CreateTH1(Form(
"hTrackPtEMCALEtaCent%s", input.c_str()), Form(
"Charged particle in EMCAL p_{t} distribution central eta trigger %s", input.c_str()), newbinning);
143 for(
const auto &piditer : kSpecies){
144 fHistos->
CreateTH1(Form(
"hTrackPtEtaAll%s%s", piditer.c_str(), input.c_str()), Form(
"Charged %s p_{t} distribution all #eta %s", piditer.c_str(), input.c_str()), newbinning);
145 fHistos->
CreateTH1(Form(
"hTrackPtEtaCent%s%s", piditer.c_str(), input.c_str()), Form(
"Charged %s p_{t} distribution central #eta %s", piditer.c_str(), input.c_str()), newbinning);
146 fHistos->
CreateTH1(Form(
"hTrackPtEMCALEtaAll%s%s", piditer.c_str(), input.c_str()), Form(
"Charged %s in EMCAL p_{t} distribution all #eta %s", piditer.c_str(), input.c_str()), newbinning);
147 fHistos->
CreateTH1(Form(
"hTrackPtEMCALEtaCent%s%s", piditer.c_str(), input.c_str()), Form(
"Charged %s in EMCAL p_{t} distribution central #eta %s", piditer.c_str(), input.c_str()), newbinning);
149 for(
const auto &ptcut : kPtCuts){
151 Form(
"hTrackEtaLabDistAllPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
152 Form(
"#eta_{lab} distribution without #eta-cut for tracks with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
158 Form(
"hTrackEtaLabDistCutPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
159 Form(
"#eta_{lab} distribution with #eta-cut for tracks with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
165 Form(
"hTrackEtaCentDistAllPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
166 Form(
"#eta_{cent} distribution without #eta-cut for tracks with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
172 Form(
"hTrackEtaCentDistCutPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
173 Form(
"#eta_{cent} distribution with #eta-cut for tracks with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
179 Form(
"hTrackEtaLabDistAllEMCALPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
180 Form(
"#eta_{lab} distribution without #eta-cut for tracks in EMCAL with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
186 Form(
"hTrackEtaLabDistCutEMCALPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
187 Form(
"#eta_{lab} distribution with #eta-cut for tracks in EMCAL with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
193 Form(
"hTrackEtaCentDistAllEMCALPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
194 Form(
"#eta_{cent} distribution without #eta-cut for tracks in EMCAL with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
200 Form(
"hTrackEtaCentDistCutEMCALPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
201 Form(
"Eta (cent) distribution with #eta-cut for tracks in EMCAL with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
207 Form(
"hTrackPhiDistAllPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
208 Form(
"#phi distribution of particles with p_{t} above %.1f GeV/c trigger %s", ptcut, input.c_str()),
218 std::array<Double_t, 5> kEnCuts = {1., 2., 5., 10., 20.};
220 Int_t sectorsWithEMCAL[10] = {4, 5, 6, 7, 8, 9, 13, 14, 15, 16};
223 fHistos->
CreateTH2(
"hClusterEnergySM",
"Cluster energy versus supermodule", smbinning, newbinning);
224 fHistos->
CreateTH2(
"hClusterETSM",
"Cluster transverse energy versus supermodule", smbinning, newbinning);
225 fHistos->
CreateTH2(
"hClusterEtaEnergy",
"Cluster energy vs. eta", etabinning, newbinning);
226 fHistos->
CreateTH2(
"hClusterEtaET",
"Cluster transverse energy vs. eta", etabinning, newbinning);
227 for(
int ism = 0; ism < 20; ism++){
228 fHistos->
CreateTH2(Form(
"hClusterEtaEnergySM%d", ism), Form(
"Cluster energy vs. eta in Supermodule %d", ism), etabinning, newbinning);
229 fHistos->
CreateTH2(Form(
"hClusterEtaETSM%d", ism), Form(
"Cluster transverse energy vs. eta in Supermodule %d", ism), etabinning, newbinning);
231 for(
int isec = 0; isec < 10; isec++){
232 fHistos->
CreateTH2(Form(
"hClusterEtaEnergySec%d", sectorsWithEMCAL[isec]), Form(
"Cluster energy vs.eta in tracking sector %d", sectorsWithEMCAL[isec]), etabinning, newbinning);
233 fHistos->
CreateTH2(Form(
"hClusterEtaETSec%d", sectorsWithEMCAL[isec]), Form(
"Cluster transverse energy vs.eta in tracking sector %d", sectorsWithEMCAL[isec]), etabinning, newbinning);
235 for(
auto ien : kEnCuts){
236 fHistos->
CreateTH2(Form(
"hClusterEtaPhi%dG", static_cast<int>(ien)), Form(
"cluster #eta-#phi map for clusters with energy larger than %f GeV/c", ien), 100, -0.7, 0.7, 200, 0, 2*TMath::Pi());
242 const int kNPatchTypes = 2;
244 const std::array<TString, kNPatchTypes> kPatchTypes = {
"EGA",
"EJE"};
245 for(
int ipatch = 0; ipatch < kNPatchTypes; ipatch++){
247 fHistos->
CreateTH1(Form(
"h%sPatchEnergy", kPatchTypes[ipatch].
Data()), Form(
"%s-patch energy", kPatchTypes[ipatch].
Data()), newbinning);
248 fHistos->
CreateTH1(Form(
"h%sPatchET", kPatchTypes[ipatch].
Data()), Form(
"%s-patch transverse energy", kPatchTypes[ipatch].
Data()), newbinning);
249 fHistos->
CreateTH2(Form(
"h%sPatchEnergyEta", kPatchTypes[ipatch].
Data()), Form(
"%s-patch energy", kPatchTypes[ipatch].
Data()), newbinning, etabinning);
250 fHistos->
CreateTH2(Form(
"h%sPatchETEta", kPatchTypes[ipatch].
Data()), Form(
"%s-patch transverse energy", kPatchTypes[ipatch].
Data()), newbinning, etabinning);
251 for(
auto enc : kEnCuts){
252 fHistos->
CreateTH2(Form(
"h%sPatchEtaPhi%dG", kPatchTypes[ipatch].
Data(), static_cast<int>(enc)), Form(
"%s-patch #eta-#phi map for patches with energy larger than %f GeV/c", kPatchTypes[ipatch].
Data(), enc), 100, -0.7, 0.7, 200, 0, TMath::TwoPi());
253 fHistos->
CreateTH2(Form(
"h%sPatchColRow%dG", kPatchTypes[ipatch].
Data(), static_cast<int>(enc)), Form(
"%s-patch col-row map for patches with energy larger than %f GeV/c", kPatchTypes[ipatch].
Data(), enc), 48, -0.5, 47.5, 104, -0.5, 103.5);
261 AliDebugStream(1) << GetName() <<
": Output objects initialized" << std::endl;
270 AliDebugStream(2) << GetName() <<
": Using custom event selection method" << std::endl;
272 AliErrorStream() << GetName() <<
": Trigger patch container not found but required" << std::endl;
275 if(!(fInputHandler->IsEventSelected() & AliVEvent::kINT7))
return false;
276 AliDebugStream(3) << GetName() <<
"Event is an INT7 event" << std::endl;
281 AliDebugStream(3) << GetName() <<
": Event identified as outlier" << std::endl;
284 AliDebugStream(3) << GetName() <<
": Not an outlier event" << std::endl;
291 AliDebugStream(3) << GetName() <<
": Applying vertex selection" << std::endl;
295 AliDebugStream(3) << GetName() <<
": Vertex selection passed" << std::endl;
298 AliDebugStream(3) << GetName() <<
": Applying EMCAL trigger selection" << std::endl;
301 AliDebugStream(3) << GetName() <<
": Failed trigger selection" << std::endl;
306 AliDebugStream(2) << GetName() <<
"Event selected" << std::endl;
315 AliDebugStream(1) << GetName() <<
": Inspecting event" << std::endl;
319 AliErrorStream() << GetName() <<
": PYTHIA event header not found" << std::endl;
326 const AliVVertex *vtx = InputEvent()->GetPrimaryVertex();
331 AliDebugStream(3) << GetName() <<
": eta-lab cut: " <<
fEtaLabCut <<
", eta-cms cut: " <<
fEtaCmsCut << std::endl;
333 AliVParticle *truepart(
nullptr);
336 for(
int ipart = 0; ipart < fMCEvent->GetNumberOfTracks(); ipart++){
337 truepart = MCEvent()->GetTrack(ipart);
342 if(TMath::Abs(truepart->Pt()) < 0.1)
continue;
343 if(!truepart->Charge())
continue;
346 AliAODMCParticle *aodmc =
static_cast<AliAODMCParticle *
>(truepart);
347 isEMCAL = (truepart->Phi() > 1.5 && truepart->Phi() < 3.1) ? kTRUE : kFALSE;
359 switch(TMath::Abs(truepart->PdgCode())){
360 case kPiPlus: pid =
"Pi";
break;
361 case kMuonMinus: pid =
"Mu";
break;
362 case kElectron: pid =
"El";
break;
363 case kKPlus: pid =
"Ka";
break;
364 case kProton: pid =
"Pr";
break;
365 default: pid =
"Ot";
break;
369 FillTrackHistos(
"True", weight, TMath::Abs(truepart->Pt()), truepart->Eta() *
fEtaSign, etacent, truepart->Phi(), etacentcut, isEMCAL, pid);
380 AliVTrack *checktrack(NULL);
381 AliVParticle *assocMC(NULL);
382 double ptparticle(-1.), etaparticle(-100.), etaEMCAL(0.), phiEMCAL(0.);
383 for(
int itrk = 0; itrk < fInputEvent->GetNumberOfTracks(); ++itrk){
384 checktrack =
dynamic_cast<AliVTrack *
>(fInputEvent->GetTrack(itrk));
385 if(!checktrack)
continue;
389 assocMC = MCEvent()->GetTrack(TMath::Abs(checktrack->GetLabel()));
390 if(!assocMC)
continue;
393 switch(TMath::Abs(assocMC->PdgCode())){
394 case kPiPlus: assocpid =
"Pi";
break;
395 case kMuonMinus: assocpid =
"Mu";
break;
396 case kElectron: assocpid =
"El";
break;
397 case kKPlus: assocpid =
"Ka";
break;
398 case kProton: assocpid =
"Pr";
break;
399 default: assocpid =
"Ot";
break;
406 if(TMath::Abs(checktrack->Pt()) < 0.1)
continue;
407 if(checktrack->IsA() == AliESDtrack::Class()){
408 AliESDtrack copytrack(*(static_cast<AliESDtrack *>(checktrack)));
409 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(©track);
410 etaEMCAL = copytrack.GetTrackEtaOnEMCal();
411 phiEMCAL = copytrack.GetTrackPhiOnEMCal();
413 AliAODTrack copytrack(*(static_cast<AliAODTrack *>(checktrack)));
414 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(©track);
415 etaEMCAL = copytrack.GetTrackEtaOnEMCal();
416 phiEMCAL = copytrack.GetTrackPhiOnEMCal();
418 Int_t supermoduleID = -1;
419 isEMCAL =
fGeom->SuperModuleNumberFromEtaPhi(etaEMCAL, phiEMCAL, supermoduleID);
421 isEMCAL = isEMCAL && supermoduleID < 10;
426 ptparticle = assocMC ? TMath::Abs(assocMC->Pt()) : TMath::Abs(checktrack->Pt());
427 etaparticle = assocMC ? assocMC->Eta() : checktrack->Eta();
437 FillTrackHistos(
"Accept", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, assocpid);
443 fInputEvent->GetPrimaryVertex()->GetXYZ(vertexpos);
448 for(
const auto &clust : clustercont->
all()){
449 if(!clust->IsEMCAL())
continue;
450 if(clust->GetIsExotic())
continue;
452 TLorentzVector posvec;
453 energy = clust->GetNonLinCorrEnergy();
464 AliEMCALTriggerPatchInfo *recpatch(
nullptr);
466 for(TIter patchiter = TIter(
fTriggerPatchInfo).Begin(); patchiter != TIter::End(); ++patchiter){
467 recpatch =
static_cast<AliEMCALTriggerPatchInfo *
>(*patchiter);
468 if(!recpatch->IsOfflineSimple())
continue;
475 FillPatchHistos(patchname.Data(), weight, recpatch->GetPatchE(), recpatch->GetPatchET(), recpatch->GetEtaGeo(), recpatch->GetPhiGeo(), recpatch->GetColStart(), recpatch->GetRowStart());
494 const char *eventclass,
505 fHistos->
FillTH1(Form(
"hTrackPtEtaAll%s", eventclass), TMath::Abs(pt), weight);
506 fHistos->
FillTH1(Form(
"hTrackPtEtaAll%s%s", pid, eventclass), TMath::Abs(pt), weight);
508 fHistos->
FillTH1(Form(
"hTrackPtEMCALEtaAll%s", eventclass), TMath::Abs(pt), weight);
509 fHistos->
FillTH1(Form(
"hTrackPtEMCALEtaAll%s%s", pid, eventclass), TMath::Abs(pt), weight);
512 const std::array<int, 5> kPtMin = {1,2,5,10,20};
513 for(
const auto &
ptmin : kPtMin){
514 if(TMath::Abs(pt) > static_cast<double>(
ptmin)){
519 fHistos->
FillTH1(Form(
"hTrackEtaLabDistAllEMCALPt%d%s",
ptmin, eventclass), etalab, weight);
520 fHistos->
FillTH1(Form(
"hTrackEtaCentDistAllEMCALPt%d%s",
ptmin, eventclass), etacent, weight);
526 fHistos->
FillTH1(Form(
"hTrackPtEtaCent%s", eventclass), TMath::Abs(pt), weight);
527 fHistos->
FillTH1(Form(
"hTrackPtEtaCent%s%s", pid, eventclass), TMath::Abs(pt), weight);
529 fHistos->
FillTH1(Form(
"hTrackPtEMCALEtaCent%s", eventclass), TMath::Abs(pt), weight);
530 fHistos->
FillTH1(Form(
"hTrackPtEMCALEtaCent%s%s", pid, eventclass), TMath::Abs(pt), weight);
532 for(
const auto &
ptmin : kPtMin){
533 if(TMath::Abs(pt) > static_cast<double>(
ptmin)){
537 fHistos->
FillTH1(Form(
"hTrackEtaLabDistCutEMCALPt%d%s",
ptmin, eventclass), etalab, weight);
538 fHistos->
FillTH1(Form(
"hTrackEtaCentDistCutEMCALPt%d%s",
ptmin, eventclass), etacent, weight);
556 double transverseenergy,
561 Int_t supermoduleID = -1, sector = -1;
562 fGeom->SuperModuleNumberFromEtaPhi(eta, phi, supermoduleID);
568 if(supermoduleID >= 0){
569 fHistos->
FillTH2(
"hClusterEnergySM", supermoduleID, energy, weight);
570 fHistos->
FillTH2(
"hClusterETSM", supermoduleID, transverseenergy, weight);
571 fHistos->
FillTH2(Form(
"hClusterEtaEnergySM%d", supermoduleID), eta, energy, weight);
572 fHistos->
FillTH2(Form(
"hClusterEtaETSM%d", supermoduleID), eta, transverseenergy, weight);
573 if(supermoduleID < 12)
574 sector = 4 + int(supermoduleID/2);
576 sector = 13 + int((supermoduleID-12)/2);
577 fHistos->
FillTH2(Form(
"hClusterEtaEnergySec%d", sector), eta, energy, weight);
578 fHistos->
FillTH2(Form(
"hClusterEtaETSec%d", sector), eta, transverseenergy, weight);
580 std::array<Double_t, 5> encuts = {1., 2., 5., 10., 20.};
581 for(
auto e : encuts){
583 fHistos->
FillTH2(Form(
"hClusterEtaPhi%dG", static_cast<int>(e)), eta, phi, weight);
596 fHistos->
FillTH1(Form(
"h%sPatchEnergy", patchname), energy, weight);
597 fHistos->
FillTH1(Form(
"h%sPatchET", patchname), transverseenergy, weight);
598 fHistos->
FillTH2(Form(
"h%sPatchEnergyEta", patchname), energy, eta, weight);
599 fHistos->
FillTH2(Form(
"h%sPatchETEta", patchname), transverseenergy, eta, weight);
600 const std::array<Double_t, 5> kEnCuts = {1., 2., 5., 10., 20.};
601 for(
auto e : kEnCuts){
603 fHistos->
FillTH2(Form(
"h%sPatchEtaPhi%dG", patchname, static_cast<int>(e)), eta, phi, weight);
604 fHistos->
FillTH2(Form(
"h%sPatchColRow%dG", patchname, static_cast<int>(e)), col, row, weight);
620 const AliAODMCParticle *aodmc =
dynamic_cast<const AliAODMCParticle *
>(part);
622 physprim = aodmc->IsPhysicalPrimary();
624 physprim = mcevent->IsPhysicalPrimary(part->GetLabel());
646 bool selected =
false;
647 AliEMCALTriggerPatchInfo *patch(
nullptr);
648 AliDebugStream(2) << GetName() <<
": Selecting EMCAL triggered event type (" << (
fPatchType ==
kEMCEGA ?
"EGA" :
"EJE") <<
") using patch energy above threshold" << std::endl;
649 AliDebugStream(2) << GetName() <<
": Energy threshold " <<
fEnergyThreshold <<
" GeV" << std::endl;
650 AliDebugStream(2) << GetName() <<
": Number of reconstructed patches " << triggerpatches->GetEntries() << std::endl;
651 for(TIter patchiter = TIter(triggerpatches).Begin(); patchiter != TIter::End(); ++patchiter){
652 patch =
static_cast<AliEMCALTriggerPatchInfo *
>(*patchiter);
653 AliDebugStream(4) << GetName() <<
": Next patch" << std::endl;
654 if(!patch->IsOfflineSimple())
continue;
655 AliDebugStream(4) << GetName() <<
"Patch is an offline simple patch" << std::endl;
656 AliDebugStream(4) << GetName() <<
": Trigger bits: " << std::bitset<32>(patch->GetTriggerBits()) << std::endl;
657 AliDebugStream(4) << GetName() <<
": J1(" << patch->IsJetHighSimple() <<
"), J2(" << patch->IsJetLowSimple()
658 <<
"), G1(" << patch->IsGammaHighSimple() <<
") G2(" << patch->IsGammaLowSimple() <<
")" << std::endl;
660 if(!patch->IsJetHighSimple())
continue;
661 AliDebugStream(3) << GetName() <<
": Patch is jet high simple" << std::endl;
663 if(!patch->IsGammaHighSimple())
continue;
664 AliDebugStream(4) << GetName() <<
": Patch is gamma high simple" << std::endl;
666 AliDebugStream(3) << GetName() <<
": Found trigger patch of matching type, now cutting on energy ...." << std::endl;
669 AliDebugStream(2) << GetName() <<
": Firing trigger patch found at energy " << std::setprecision(1) << patch->GetPatchE() << std::endl;
void SetEmcalTrackSelection(AliEmcalTrackSelection *sel)
Double_t fYshift
Rapidity shift.
Bool_t fIsPythia
trigger, if it is a PYTHIA production
AliEmcalTrackSelection * fTrackCuts
Standard track selection.
PatchType_t fPatchType
Type of the trigger patch (default: kUndef)
Class creating a linear binning, used in the histogram manager.
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, const char *pid)
void InitializeTrackCuts(TString cutname, bool isAOD)
Base task in the EMCAL framework.
Lightweight task, mimicing EMCAL triggers in MC.
AliCutValueRange< double > fEtaCmsCut
Cut applied in -frame.
THistManager * fHistos
Histogram manager.
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
AliCutValueRange< double > fEtaLabCut
Cut applied in Eta Lab frame.
TString fNameClusters
Cluster container name.
virtual ~AliAnalysisTaskChargedParticlesMCTriggerMimic()
AliCutValueRange< double > fPhiCut
Cut applied in .
Tracks (true particles and reconstructed tracks)
void AddStep(Double_t max, Double_t binwidth)
void FillPatchHistos(const char *patchname, double weight, double energy, double transverseenergy, double eta, double phi, int col, int row)
void SetCaloTriggerPatchInfoName(const char *n)
static AliEmcalTrackSelection * TrackCutsFactory(TString name, Bool_t isAOD)
Fully-configure EMCAL track selection independent of the data type.
const AliClusterIterableContainer all() const
Bool_t CheckMCOutliers()
Filter the mc tails in pt-hard distributions.
TBits fObservables
Switch for observables.
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
Create a new TH2 within the container.
THashList * GetListOfHistograms() const
Get the list of histograms.
AliEMCALGeometry * fGeom
!emcal geometry
AliGenPythiaEventHeader * fPythiaHeader
!event Pythia header
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
AliAnalysisUtils * fAliAnalysisUtils
!vertex selection (optional)
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
Helper class creating user defined custom binning.
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Bool_t SelectEmcalTrigger(const TClonesArray *triggerpatches)
Float_t fPtHard
!event -hard
double GetEventWeight(const AliMCEvent *const event) const
virtual PWG::EMCAL::AliEmcalTrackSelResultPtr IsTrackAccepted(AliVTrack *const trk)=0
Interface for track selection code.
Bool_t HasObservable(Observable_t observable)
AliEmcalList * fOutput
!output list
void FillClusterHistos(double weight, double energy, double transversenergy, double eta, double phi)
Bool_t IsPhysicalPrimary(const AliVParticle *const part, AliMCEvent *const mcevent)
Analysis of high- tracks in triggered events.
virtual void UserCreateOutputObjects()
void SetMakeGeneralHistograms(Bool_t g)
TClonesArray * fTriggerPatchInfo
!trigger patch info array
void SetNeedEmcalGeom(Bool_t n)
Bool_t GetMomentum(TLorentzVector &mom, const AliVCluster *vc, Double_t mass) const
virtual Bool_t IsEventSelected()
Container class for histograms.
AliAnalysisTaskChargedParticlesMCTriggerMimic()
const AliEMCalTriggerWeightHandler * fWeightHandler
Weight handler (optional)
Double_t fEtaSign
Sign of the eta distribution (swaps when beam directions swap): p-Pb: +1, Pb-p: -1.
void UserCreateOutputObjects()
Main initialization function on the worker.
Container structure for EMCAL clusters.
bool IsInRange(t value) const
void SetMinimum(Double_t min)
Double_t fEnergyThreshold
Energy threshold in patch.