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"
38 #include "AliEMCALRecoUtils.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"
55 namespace EMCalTriggerPtAnalysis {
60 AliAnalysisTaskChargedParticlesMCTriggerMimic::AliAnalysisTaskChargedParticlesMCTriggerMimic():
67 fEtaLabCut(-0.6, 0.6),
68 fEtaCmsCut(-0.13, 0.13),
89 fEtaLabCut(-0.6, 0.6),
90 fEtaCmsCut(-0.13, 0.13),
113 AliDebugStream(1) << GetName() <<
": Running on PYTHIA Hard production" << std::endl;
115 AliDebugStream(1) << GetName() <<
": Not running on PYTHIA Hard production" << std::endl;
122 TLinearBinning smbinning(21, -0.5, 20.5), etabinning(100, -0.7, 0.7);
128 fHistos->
CreateTH1(
"hUserVertexZ",
"User vertex distribution after z-cut", 100, -10, 10);
129 fHistos->
CreateTH1(
"hUserPtHard",
"User pt-hard distribution", 1000, 0., 300.);
133 const std::array<std::string, 2> kInputs = {
"True",
"Accept"};
134 const std::array<std::string, 6> kSpecies = {
"El",
"Mu",
"Pi",
"Ka",
"Pr",
"Ot"};
135 const std::array<double, 5> kPtCuts = {1., 2., 5., 10., 20.};
136 for(
const auto &input : kInputs){
137 AliDebugStream(1) << GetName() <<
": Creating histograms for case " << input << std::endl;
138 fHistos->
CreateTH1(Form(
"hTrackPtEtaAll%s", input.c_str()), Form(
"Charged particle p_{t} distribution all #eta %s", input.c_str()), newbinning,
"s");
139 fHistos->
CreateTH1(Form(
"hTrackPtEtaCent%s", input.c_str()), Form(
"Charged particle p_{t} distribution central #eta %s", input.c_str()), newbinning,
"s");
140 fHistos->
CreateTH1(Form(
"hTrackPtEMCALEtaAll%s", input.c_str()), Form(
"Charged particle in EMCAL p_{t} distribution all #eta trigger %s", input.c_str()), newbinning);
141 fHistos->
CreateTH1(Form(
"hTrackPtEMCALEtaCent%s", input.c_str()), Form(
"Charged particle in EMCAL p_{t} distribution central eta trigger %s", input.c_str()), newbinning);
142 for(
const auto &piditer : kSpecies){
143 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);
144 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);
145 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);
146 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);
148 for(
const auto &ptcut : kPtCuts){
150 Form(
"hTrackEtaLabDistAllPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
151 Form(
"#eta_{lab} distribution without #eta-cut for tracks with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
157 Form(
"hTrackEtaLabDistCutPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
158 Form(
"#eta_{lab} distribution with #eta-cut for tracks with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
164 Form(
"hTrackEtaCentDistAllPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
165 Form(
"#eta_{cent} distribution without #eta-cut for tracks with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
171 Form(
"hTrackEtaCentDistCutPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
172 Form(
"#eta_{cent} distribution with #eta-cut for tracks with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
178 Form(
"hTrackEtaLabDistAllEMCALPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
179 Form(
"#eta_{lab} distribution without #eta-cut for tracks in EMCAL with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
185 Form(
"hTrackEtaLabDistCutEMCALPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
186 Form(
"#eta_{lab} distribution with #eta-cut for tracks in EMCAL with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
192 Form(
"hTrackEtaCentDistAllEMCALPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
193 Form(
"#eta_{cent} distribution without #eta-cut for tracks in EMCAL with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
199 Form(
"hTrackEtaCentDistCutEMCALPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
200 Form(
"Eta (cent) distribution with #eta-cut for tracks in EMCAL with p_{t} above %.1f GeV/c %s", ptcut, input.c_str()),
206 Form(
"hTrackPhiDistAllPt%d%s", static_cast<Int_t>(ptcut), input.c_str()),
207 Form(
"#phi distribution of particles with p_{t} above %.1f GeV/c trigger %s", ptcut, input.c_str()),
217 std::array<Double_t, 5> kEnCuts = {1., 2., 5., 10., 20.};
219 Int_t sectorsWithEMCAL[10] = {4, 5, 6, 7, 8, 9, 13, 14, 15, 16};
222 fHistos->
CreateTH2(
"hClusterEnergySM",
"Cluster energy versus supermodule", smbinning, newbinning);
223 fHistos->
CreateTH2(
"hClusterETSM",
"Cluster transverse energy versus supermodule", smbinning, newbinning);
224 fHistos->
CreateTH2(
"hClusterEtaEnergy",
"Cluster energy vs. eta", etabinning, newbinning);
225 fHistos->
CreateTH2(
"hClusterEtaET",
"Cluster transverse energy vs. eta", etabinning, newbinning);
226 for(
int ism = 0; ism < 20; ism++){
227 fHistos->
CreateTH2(Form(
"hClusterEtaEnergySM%d", ism), Form(
"Cluster energy vs. eta in Supermodule %d", ism), etabinning, newbinning);
228 fHistos->
CreateTH2(Form(
"hClusterEtaETSM%d", ism), Form(
"Cluster transverse energy vs. eta in Supermodule %d", ism), etabinning, newbinning);
230 for(
int isec = 0; isec < 10; isec++){
231 fHistos->
CreateTH2(Form(
"hClusterEtaEnergySec%d", sectorsWithEMCAL[isec]), Form(
"Cluster energy vs.eta in tracking sector %d", sectorsWithEMCAL[isec]), etabinning, newbinning);
232 fHistos->
CreateTH2(Form(
"hClusterEtaETSec%d", sectorsWithEMCAL[isec]), Form(
"Cluster transverse energy vs.eta in tracking sector %d", sectorsWithEMCAL[isec]), etabinning, newbinning);
234 for(
auto ien : kEnCuts){
235 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());
241 const int kNPatchTypes = 2;
243 const std::array<TString, kNPatchTypes> kPatchTypes = {
"EGA",
"EJE"};
244 for(
int ipatch = 0; ipatch < kNPatchTypes; ipatch++){
246 fHistos->
CreateTH1(Form(
"h%sPatchEnergy", kPatchTypes[ipatch].
Data()), Form(
"%s-patch energy", kPatchTypes[ipatch].
Data()), newbinning);
247 fHistos->
CreateTH1(Form(
"h%sPatchET", kPatchTypes[ipatch].
Data()), Form(
"%s-patch transverse energy", kPatchTypes[ipatch].
Data()), newbinning);
248 fHistos->
CreateTH2(Form(
"h%sPatchEnergyEta", kPatchTypes[ipatch].
Data()), Form(
"%s-patch energy", kPatchTypes[ipatch].
Data()), newbinning, etabinning);
249 fHistos->
CreateTH2(Form(
"h%sPatchETEta", kPatchTypes[ipatch].
Data()), Form(
"%s-patch transverse energy", kPatchTypes[ipatch].
Data()), newbinning, etabinning);
250 for(
auto enc : kEnCuts){
251 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());
252 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);
260 AliDebugStream(1) << GetName() <<
": Output objects initialized" << std::endl;
269 AliDebugStream(2) << GetName() <<
": Using custom event selection method" << std::endl;
271 AliErrorStream() << GetName() <<
": Trigger patch container not found but required" << std::endl;
274 if(!(fInputHandler->IsEventSelected() & AliVEvent::kINT7))
return false;
275 AliDebugStream(3) << GetName() <<
"Event is an INT7 event" << std::endl;
280 AliDebugStream(3) << GetName() <<
": Event identified as outlier" << std::endl;
283 AliDebugStream(3) << GetName() <<
": Not an outlier event" << std::endl;
290 AliDebugStream(3) << GetName() <<
": Applying vertex selection" << std::endl;
294 AliDebugStream(3) << GetName() <<
": Vertex selection passed" << std::endl;
297 AliDebugStream(3) << GetName() <<
": Applying EMCAL trigger selection" << std::endl;
300 AliDebugStream(3) << GetName() <<
": Failed trigger selection" << std::endl;
305 AliDebugStream(2) << GetName() <<
"Event selected" << std::endl;
314 AliDebugStream(1) << GetName() <<
": Inspecting event" << std::endl;
318 AliErrorStream() << GetName() <<
": PYTHIA event header not found" << std::endl;
325 const AliVVertex *vtx = InputEvent()->GetPrimaryVertex();
330 AliDebugStream(3) << GetName() <<
": eta-lab cut: " <<
fEtaLabCut <<
", eta-cms cut: " <<
fEtaCmsCut << std::endl;
332 AliVParticle *truepart(
nullptr);
335 for(
int ipart = 0; ipart < fMCEvent->GetNumberOfTracks(); ipart++){
336 truepart = MCEvent()->GetTrack(ipart);
340 if(TMath::Abs(truepart->Pt()) < 0.1)
continue;
341 if(!truepart->Charge())
continue;
344 AliAODMCParticle *aodmc =
static_cast<AliAODMCParticle *
>(truepart);
345 isEMCAL = (truepart->Phi() > 1.5 && truepart->Phi() < 3.1) ? kTRUE : kFALSE;
357 switch(TMath::Abs(truepart->PdgCode())){
358 case kPiPlus: pid =
"Pi";
break;
359 case kMuonMinus: pid =
"Mu";
break;
360 case kElectron: pid =
"El";
break;
361 case kKPlus: pid =
"Ka";
break;
362 case kProton: pid =
"Pr";
break;
363 default: pid =
"Ot";
break;
367 FillTrackHistos(
"True", weight, TMath::Abs(truepart->Pt()), truepart->Eta() *
fEtaSign, etacent, truepart->Phi(), etacentcut, isEMCAL, pid);
378 AliVTrack *checktrack(NULL);
379 AliVParticle *assocMC(NULL);
380 double ptparticle(-1.), etaparticle(-100.), etaEMCAL(0.), phiEMCAL(0.);
381 for(
int itrk = 0; itrk < fInputEvent->GetNumberOfTracks(); ++itrk){
382 checktrack =
dynamic_cast<AliVTrack *
>(fInputEvent->GetTrack(itrk));
383 if(!checktrack)
continue;
385 assocMC = MCEvent()->GetTrack(TMath::Abs(checktrack->GetLabel()));
386 if(!assocMC)
continue;
391 if(TMath::Abs(checktrack->Pt()) < 0.1)
continue;
392 if(checktrack->IsA() == AliESDtrack::Class()){
393 AliESDtrack copytrack(*(static_cast<AliESDtrack *>(checktrack)));
394 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(©track);
395 etaEMCAL = copytrack.GetTrackEtaOnEMCal();
396 phiEMCAL = copytrack.GetTrackPhiOnEMCal();
398 AliAODTrack copytrack(*(static_cast<AliAODTrack *>(checktrack)));
399 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(©track);
400 etaEMCAL = copytrack.GetTrackEtaOnEMCal();
401 phiEMCAL = copytrack.GetTrackPhiOnEMCal();
403 Int_t supermoduleID = -1;
404 isEMCAL =
fGeom->SuperModuleNumberFromEtaPhi(etaEMCAL, phiEMCAL, supermoduleID);
406 isEMCAL = isEMCAL && supermoduleID < 10;
410 ptparticle = TMath::Abs(assocMC->Pt());
411 etaparticle = assocMC->Eta();
423 switch(TMath::Abs(assocMC->PdgCode())){
424 case kPiPlus: assocpid =
"Pi";
break;
425 case kMuonMinus: assocpid =
"Mu";
break;
426 case kElectron: assocpid =
"El";
break;
427 case kKPlus: assocpid =
"Ka";
break;
428 case kProton: assocpid =
"Pr";
break;
429 default: assocpid =
"Ot";
break;
432 FillTrackHistos(
"Accept", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, assocpid);
438 fInputEvent->GetPrimaryVertex()->GetXYZ(vertexpos);
443 for(
const auto &clust : clustercont->
all()){
444 if(!clust->IsEMCAL())
continue;
445 if(clust->GetIsExotic())
continue;
447 TLorentzVector posvec;
448 energy = clust->GetNonLinCorrEnergy();
459 AliEMCALTriggerPatchInfo *recpatch(
nullptr);
461 for(TIter patchiter = TIter(
fTriggerPatchInfo).Begin(); patchiter != TIter::End(); ++patchiter){
462 recpatch =
static_cast<AliEMCALTriggerPatchInfo *
>(*patchiter);
463 if(!recpatch->IsOfflineSimple())
continue;
470 FillPatchHistos(patchname.Data(), weight, recpatch->GetPatchE(), recpatch->GetPatchET(), recpatch->GetEtaGeo(), recpatch->GetPhiGeo(), recpatch->GetColStart(), recpatch->GetRowStart());
489 const char *eventclass,
500 fHistos->
FillTH1(Form(
"hTrackPtEtaAll%s", eventclass), TMath::Abs(pt), weight);
501 fHistos->
FillTH1(Form(
"hTrackPtEtaAll%s%s", pid, eventclass), TMath::Abs(pt), weight);
503 fHistos->
FillTH1(Form(
"hTrackPtEMCALEtaAll%s", eventclass), TMath::Abs(pt), weight);
504 fHistos->
FillTH1(Form(
"hTrackPtEMCALEtaAll%s%s", pid, eventclass), TMath::Abs(pt), weight);
507 const std::array<int, 5> kPtMin = {1,2,5,10,20};
508 for(
const auto &
ptmin : kPtMin){
509 if(TMath::Abs(pt) > static_cast<double>(
ptmin)){
514 fHistos->
FillTH1(Form(
"hTrackEtaLabDistAllEMCALPt%d%s",
ptmin, eventclass), etalab, weight);
515 fHistos->
FillTH1(Form(
"hTrackEtaCentDistAllEMCALPt%d%s",
ptmin, eventclass), etacent, weight);
521 fHistos->
FillTH1(Form(
"hTrackPtEtaCent%s", eventclass), TMath::Abs(pt), weight);
522 fHistos->
FillTH1(Form(
"hTrackPtEtaCent%s%s", pid, eventclass), TMath::Abs(pt), weight);
524 fHistos->
FillTH1(Form(
"hTrackPtEMCALEtaCent%s", eventclass), TMath::Abs(pt), weight);
525 fHistos->
FillTH1(Form(
"hTrackPtEMCALEtaCent%s%s", pid, eventclass), TMath::Abs(pt), weight);
527 for(
const auto &
ptmin : kPtMin){
528 if(TMath::Abs(pt) > static_cast<double>(
ptmin)){
532 fHistos->
FillTH1(Form(
"hTrackEtaLabDistCutEMCALPt%d%s",
ptmin, eventclass), etalab, weight);
533 fHistos->
FillTH1(Form(
"hTrackEtaCentDistCutEMCALPt%d%s",
ptmin, eventclass), etacent, weight);
551 double transverseenergy,
556 Int_t supermoduleID = -1, sector = -1;
557 fGeom->SuperModuleNumberFromEtaPhi(eta, phi, supermoduleID);
563 if(supermoduleID >= 0){
564 fHistos->
FillTH2(
"hClusterEnergySM", supermoduleID, energy, weight);
565 fHistos->
FillTH2(
"hClusterETSM", supermoduleID, transverseenergy, weight);
566 fHistos->
FillTH2(Form(
"hClusterEtaEnergySM%d", supermoduleID), eta, energy, weight);
567 fHistos->
FillTH2(Form(
"hClusterEtaETSM%d", supermoduleID), eta, transverseenergy, weight);
568 if(supermoduleID < 12)
569 sector = 4 + int(supermoduleID/2);
571 sector = 13 + int((supermoduleID-12)/2);
572 fHistos->
FillTH2(Form(
"hClusterEtaEnergySec%d", sector), eta, energy, weight);
573 fHistos->
FillTH2(Form(
"hClusterEtaETSec%d", sector), eta, transverseenergy, weight);
575 std::array<Double_t, 5> encuts = {1., 2., 5., 10., 20.};
576 for(
auto e : encuts){
578 fHistos->
FillTH2(Form(
"hClusterEtaPhi%dG", static_cast<int>(e)), eta, phi, weight);
591 fHistos->
FillTH1(Form(
"h%sPatchEnergy", patchname), energy, weight);
592 fHistos->
FillTH1(Form(
"h%sPatchET", patchname), transverseenergy, weight);
593 fHistos->
FillTH2(Form(
"h%sPatchEnergyEta", patchname), energy, eta, weight);
594 fHistos->
FillTH2(Form(
"h%sPatchETEta", patchname), transverseenergy, eta, weight);
595 const std::array<Double_t, 5> kEnCuts = {1., 2., 5., 10., 20.};
596 for(
auto e : kEnCuts){
598 fHistos->
FillTH2(Form(
"h%sPatchEtaPhi%dG", patchname, static_cast<int>(e)), eta, phi, weight);
599 fHistos->
FillTH2(Form(
"h%sPatchColRow%dG", patchname, static_cast<int>(e)), col, row, weight);
615 const AliAODMCParticle *aodmc =
dynamic_cast<const AliAODMCParticle *
>(part);
617 physprim = aodmc->IsPhysicalPrimary();
619 physprim = mcevent->IsPhysicalPrimary(part->GetLabel());
641 bool selected =
false;
642 AliEMCALTriggerPatchInfo *patch(
nullptr);
643 AliDebugStream(2) << GetName() <<
": Selecting EMCAL triggered event type (" << (
fPatchType ==
kEMCEGA ?
"EGA" :
"EJE") <<
") using patch energy above threshold" << std::endl;
644 AliDebugStream(2) << GetName() <<
": Energy threshold " <<
fEnergyThreshold <<
" GeV" << std::endl;
645 AliDebugStream(2) << GetName() <<
": Number of reconstructed patches " << triggerpatches->GetEntries() << std::endl;
646 for(TIter patchiter = TIter(triggerpatches).Begin(); patchiter != TIter::End(); ++patchiter){
647 patch =
static_cast<AliEMCALTriggerPatchInfo *
>(*patchiter);
648 AliDebugStream(4) << GetName() <<
": Next patch" << std::endl;
649 if(!patch->IsOfflineSimple())
continue;
650 AliDebugStream(4) << GetName() <<
"Patch is an offline simple patch" << std::endl;
651 AliDebugStream(4) << GetName() <<
": Trigger bits: " << std::bitset<32>(patch->GetTriggerBits()) << std::endl;
652 AliDebugStream(4) << GetName() <<
": J1(" << patch->IsJetHighSimple() <<
"), J2(" << patch->IsJetLowSimple()
653 <<
"), G1(" << patch->IsGammaHighSimple() <<
") G2(" << patch->IsGammaLowSimple() <<
")" << std::endl;
655 if(!patch->IsJetHighSimple())
continue;
656 AliDebugStream(3) << GetName() <<
": Patch is jet high simple" << std::endl;
658 if(!patch->IsGammaHighSimple())
continue;
659 AliDebugStream(4) << GetName() <<
": Patch is gamma high simple" << std::endl;
661 AliDebugStream(3) << GetName() <<
": Found trigger patch of matching type, now cutting on energy ...." << std::endl;
664 AliDebugStream(2) << GetName() <<
": Firing trigger patch found at energy " << std::setprecision(1) << patch->GetPatchE() << std::endl;
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.
static AliEmcalTrackSelection * TrackCutsFactory(TString name, Bool_t isAOD)
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 Eta centre-of-mass frame.
THistManager * fHistos
Histogram manager.
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Double_t fPtHard
!event pt hard
AliCutValueRange< double > fEtaLabCut
Cut applied in Eta Lab frame.
TString fNameClusters
Cluster container name.
virtual ~AliAnalysisTaskChargedParticlesMCTriggerMimic()
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 SetTrackSelection(AliEmcalTrackSelection *sel)
void SetCaloTriggerPatchInfoName(const char *n)
const AliClusterIterableContainer all() const
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
THashList * GetListOfHistograms() const
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="")
AliAnalysisUtils * fAliAnalysisUtils
!vertex selection (optional)
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Helper class creating user defined custom binning.
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
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)
double GetEventWeight(const AliMCEvent *const event) const
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)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
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 for the high- charged particle analysis.
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()
Container structure for EMCAL clusters.
virtual bool IsTrackAccepted(AliVTrack *const trk)=0
bool IsInRange(t value) const
void SetMinimum(Double_t min)
Double_t fEnergyThreshold
Energy threshold in patch.