24 #include "AliAnalysisDataContainer.h"
25 #include "AliAnalysisManager.h"
32 #include "AliVCluster.h"
33 #include "AliVEvent.h"
34 #include "AliVEventHandler.h"
35 #include "AliVMultiplicity.h"
36 #include "AliVVZERO.h"
42 namespace EMCalTriggerPtAnalysis {
44 AliAnalysisTaskEmcalTriggerMultiplicity::AliAnalysisTaskEmcalTriggerMultiplicity():
64 std::vector<float> ptthresh = {0.1, 0.5, 1., 2., 5., 10.};
68 fHistos->
CreateTH1(Form(
"hEventCount%s", t.Data()), Form(
"Event count trigger class %s", t.Data()), 1, 0.5, 1.5, optionstring);
69 fHistos->
CreateTH1(Form(
"hVertexZ%s", t.Data()), Form(
"z-distribution of the primary vertex for trigger class %s", t.Data()), 200, -40., 40., optionstring);
72 fHistos->
CreateTH1(Form(
"VZEROAmult%s", t.Data()), Form(
"VZERO-A multiplicity distribution for trigger class %s", t.Data()), 1000, 0., 1000., optionstring);
73 fHistos->
CreateTH1(Form(
"VZEROCmult%s", t.Data()), Form(
"VZERO-C multiplicity distribution for trigger class %s", t.Data()), 1000, 0., 1000., optionstring);
74 fHistos->
CreateTH1(Form(
"TrackletMult%s", t.Data()), Form(
"SPD tracklet multiplcity for trigger class %s", t.Data()), 1000, 0., 1000., optionstring);
75 fHistos->
CreateTH1(Form(
"EMCALClusterMult%s", t.Data()), Form(
"EMCAL cluster multiplcity for trigger class %s", t.Data()), 1000, 0., 1000., optionstring);
76 fHistos->
CreateTH1(Form(
"EMCALEnergyMult%s", t.Data()), Form(
"EMCAL total energy for trigger class %s", t.Data()), 1000, 0., 1000., optionstring);
77 fHistos->
CreateTH1(Form(
"EMCALMeanMult%s", t.Data()), Form(
"EMCAL total energy for trigger class %s", t.Data()), 1000, 0., 100., optionstring);
78 fHistos->
CreateTH1(Form(
"EMCALMedianMult%s", t.Data()), Form(
"EMCAL total energy for trigger class %s", t.Data()), 1000, 0., 100., optionstring);
79 for(
auto pt : ptthresh){
80 fHistos->
CreateTH1(Form(
"TrackMult%d%s", static_cast<int>(pt * 10.), t.Data()), Form(
"Global track multiplicity for tracks with pt > %1.f GeV/c for trigger class %s", pt, t.Data()), 1000, 0., 1000., optionstring);
103 AliVVZERO *vzerodata = fInputEvent->GetVZEROData();
106 std::vector<float> ptthresh = {0.1, 0.5, 1., 2., 5., 10.};
107 std::map<float, int> trackmult;
108 for(
auto t : ptthresh) trackmult[t] = 0;
109 for(
int itrk = 0; itrk < fInputEvent->GetNumberOfTracks(); itrk++){
110 AliVTrack *trk =
static_cast<AliVTrack *
>(fInputEvent->GetTrack(itrk));
111 if(TMath::Abs(trk->Eta()) > 0.8)
continue;
113 for(
auto t : ptthresh){
114 if(TMath::Abs(trk->Pt()) > t) trackmult[t]++;
121 AliVMultiplicity *mult = fInputEvent->GetMultiplicity();
122 for(
int itl = 0; itl < mult->GetNumberOfTracklets(); itl++){
123 if(TMath::Abs(mult->GetEta(itl))) ntracklets++;
130 std::vector<double> allClusterEnergies;
132 for(
auto clust : clustercont->
all()){
133 if(clust->GetIsExotic())
continue;
134 if(clust->GetNonLinCorrEnergy() > 0.5){
136 allClusterEnergies.push_back(clust->GetNonLinCorrEnergy());
137 eTotalEMCAL += clust->GetNonLinCorrEnergy();
140 std::sort(allClusterEnergies.begin(), allClusterEnergies.end(), std::less<double>());
141 TArrayD sortedenergies(allClusterEnergies.size());
143 for(
auto e : allClusterEnergies) sortedenergies[entrycnt++] = e;
144 Double_t emcalmean = TMath::Mean(allClusterEnergies.begin(), allClusterEnergies.end()),
145 emcalmedian = TMath::Median(sortedenergies.GetSize(), sortedenergies.GetArray());
151 fHistos->
FillTH1(Form(
"VZEROAmult%s", t.Data()), vzerodata->GetMTotV0A(), weight);
152 fHistos->
FillTH1(Form(
"VZEROCmult%s", t.Data()), vzerodata->GetMTotV0C(), weight);
153 fHistos->
FillTH1(Form(
"TrackletMult%s", t.Data()), ntracklets, weight);
154 fHistos->
FillTH1(Form(
"EMCALClusterMult%s", t.Data()), nclusters, weight);
155 fHistos->
FillTH1(Form(
"EMCALEnergyMult%s", t.Data()), eTotalEMCAL, weight);
156 fHistos->
FillTH1(Form(
"EMCALMeanMult%s", t.Data()), emcalmean, weight);
157 fHistos->
FillTH1(Form(
"EMCALMedianMult%s", t.Data()), emcalmedian, weight);
158 for(
auto tmult : trackmult)
fHistos->
FillTH1(Form(
"TrackMult%d%s", static_cast<int>(tmult.first *10.), t.Data()), tmult.second, weight);
171 std::cout <<
"Analysis manager not provided - cannot initialize task" << std::endl;
175 TString taskname =
"EmcalTriggerMultTask_";
188 TString outputcont(
"TriggerMultiplicityHistos_"), outputfile(mgr->GetCommonFileName());
190 outputfile += TString::Format(
":TriggerMultiplicity_") +
suffix;
191 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
192 mgr->ConnectOutput(task, 1, mgr->CreateContainer(outputcont.Data(), AliEmcalList::Class(), AliAnalysisManager::kOutputContainer, outputfile.Data()));
std::vector< TString > fSelectedTriggers
! Triggers selected for given event
virtual void CreateUserObjects()
std::vector< TString > GetSupportedTriggers()
Study of multiplicity distrubtions in EMCAL triggered events.
THistManager * fHistos
Task Histogram container.
Double_t GetTriggerWeight(const TString &triggerclass) const
AliAnalysisTaskEmcalTriggerMultiplicity()
void InitializeTrackCuts(const TString &cutname, bool isAOD)
virtual ~AliAnalysisTaskEmcalTriggerMultiplicity()
AliClusterContainer * AddClusterContainer(const char *n)
Create new cluster container and attach it to the task.
static AliAnalysisTaskEmcalTriggerMultiplicity * AddTaskEmcalTriggerMultiplicity(const TString &nclusters="usedefault", const TString &suffix="")
static AliEmcalTrackSelection * TrackCutsFactory(TString name, Bool_t isAOD)
Fully-configure EMCAL track selection independent of the data type.
const AliClusterIterableContainer all() const
Base class for analyses using EMCAL triggers.
virtual void CreateUserHistos()
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
virtual void UserFillHistosAfterEventSelection()
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
ClassImp(AliAnalysisTaskDeltaPt) AliAnalysisTaskDeltaPt
Double_t fVertex[3]
!event vertex
void SetClusECut(Double_t cut)
Container structure for EMCAL clusters.
AliEmcalTrackSelection * fTrackSel
EMCAL virtual track selection.
void SetExoticCut(Bool_t e)
Bool_t fEnableSumw2
Setter for enabling Sumw2.
virtual bool IsTrackAccepted(AliVTrack *const trk)=0
Interface for track selection code.
static TString ClusterContainerNameFactory(Bool_t isAOD)
Get name of the default cluster container.