12 #include "AliAODMCParticle.h"
16 #include "AliVEvent.h"
22 namespace EMCalTriggerPtAnalysis {
24 AliAnalysisTaskTrackDensity::AliAnalysisTaskTrackDensity() :
27 fTrackSelection(NULL),
28 fMCJetContainerName(
""),
29 fMCParticleContainerName(
""),
40 fTrackSelection(NULL),
41 fMCJetContainerName(
""),
42 fMCParticleContainerName(
""),
49 double defaultJetRadii[] = {0, 0.01, 0.02, 0.05, 0.1, 0.2, 0.4},
50 defaultPtMinSteps[] = {0.5, 1, 2, 5, 10, 20},
51 defaultJetPtBins[] = {20, 40, 60, 80, 100, 150, 200, 1000},
52 defaultParticlePtBinning[] = {0., 0.5, 1., 1.5, 2., 3., 4., 5., 7.5, 10., 15., 20., 30., 40., 60., 80., 100.};
53 fJetRadii.Set(
sizeof(defaultJetRadii)/
sizeof(
double), defaultJetRadii);
54 fJetPtBins.Set(
sizeof(defaultJetPtBins)/
sizeof(
double), defaultJetPtBins);
55 fPtMinSteps.Set(
sizeof(defaultPtMinSteps)/
sizeof(
double), defaultPtMinSteps);
56 fParticlePtBinning.Set(
sizeof(defaultParticlePtBinning)/
sizeof(
double), defaultParticlePtBinning);
70 for(
double val = -0.5; val <= 100.5; val += 1.){
71 linearBinning[counter++] = val;
74 fHistos->
CreateTH1(
"ParticlePt",
"p_{t} of particles; p_{t} (GeV/c); Yield", 100, 0., 100);
75 fHistos->
CreateTH1(
"ParticlePtAcc",
"p_{t} of particles; p_{t} (GeV/c); Yield", 100, 0., 100);
76 fHistos->
CreateTH2(
"ParticlePtJet",
"p_{t} of particles; p_{t, jet} (GeV/c); p_{t, particle} (GeV/c)", 200, 0., 400., 100, 0., 100);
77 fHistos->
CreateTH2(
"ParticlePtAccJet",
"p_{t} of particles; p_{t, jet} (GeV/c); p_{t, particle} (GeV/c)", 200, 0., 400., 100, 0., 100);
78 fHistos->
CreateTH2(
"JetMulitplicity",
"Number of contributors in jet; p_{t, jet} (GeV/c); Number of contributors", 200, 0., 400, 102, -0.5, 100.5);
79 for(
int irad = 0; irad <
fJetRadii.GetSize()-1; irad++){
80 for(
int ptstep = 0; ptstep <
fPtMinSteps.GetSize(); ptstep++){
83 static_cast<int>(
fJetRadii[irad+1] * 100.),
85 Form(
"Density of tracks with p_{t} > %f GeV/c in r [%.2f, %.2f]; p_{t, jet} (GeV/c); Number of tracks",
93 static_cast<int>(
fJetRadii[irad+1] * 100.),
95 Form(
"Density of reconstructed tracks with p_{t} > %f GeV/c in r [%.2f, %.2f]; p_{t, jet} (GeV/c); Number of tracks",
102 for(
int jetptbin = 0 ; jetptbin <
fJetPtBins.GetSize()-1; jetptbin++){
104 static_cast<int>(
fJetRadii[irad] * 100.),
105 static_cast<int>(
fJetRadii[irad+1] * 100.),
108 Form(
"Density of tracks in jet with p_{t} [%.1f, %.1f] in r[%.2f,%2f]",
115 static_cast<int>(
fJetRadii[irad] * 100.),
116 static_cast<int>(
fJetRadii[irad+1] * 100.),
119 Form(
"Density of reconstructed tracks in jet with p_{t} [%.1f, %.1f] in r[%.2f,%2f]",
135 std::vector<int> recoAcceptLabels;
138 AliAODMCParticle *jetparticle = NULL;
141 if(!mcparticleContainer) printf(
"Error getting particle container with name %s\n",
fMCParticleContainerName.Data());
142 mcparticleContainer->ResetCurrentID(-1);
143 while((jetparticle = static_cast<AliAODMCParticle *>(mcparticleContainer->GetNextAcceptParticle()))){
144 if(TMath::Abs(jetparticle->Eta()) > 0.8)
continue;
145 if(!jetparticle->Charge())
continue;
146 if(!jetparticle->IsPhysicalPrimary())
continue;
148 if(std::binary_search(recoAcceptLabels.begin(), recoAcceptLabels.end(), TMath::Abs(jetparticle->GetLabel())))
151 double jetptmin, jetptmax;
152 mcjetcontainer->ResetCurrentID(-1);
156 jetparticle =
static_cast<AliAODMCParticle *
>(myjet->
TrackAt(iconst, mcparticleContainer->GetArray()));
157 if(TMath::Abs(jetparticle->Eta()) > 0.8)
continue;
158 if(!jetparticle->Charge())
continue;
159 if(!jetparticle->IsPhysicalPrimary())
continue;
161 if(std::binary_search(recoAcceptLabels.begin(), recoAcceptLabels.end(), TMath::Abs(jetparticle->GetLabel())))
164 for(
int irad = 0 ; irad <
fJetRadii.GetSize()-1; irad++){
165 for(
int ptstep = 0; ptstep <
fPtMinSteps.GetSize(); ptstep++){
172 if(jetptmin > 0 && jetptmax > 0){
188 AliDebug(1, Form(
"Next jet: %s\n", jet.
toString().Data()));
189 TLorentzVector jetaxis(jet.
Px(), jet.
Py(), jet.
Pz(), jet.
E());
191 const AliAODMCParticle *jetparticle(NULL);
193 jetparticle =
static_cast<AliAODMCParticle *
>(jet.
TrackAt(ipart, partcont.GetArray()));
194 if(TMath::Abs(jetparticle->Eta()) > 0.8)
continue;
195 if(!TMath::Abs(jetparticle->Charge()))
continue;
197 if(!std::binary_search(labels->begin(), labels->end(), TMath::Abs(jetparticle->GetLabel())))
continue;
199 double partpt = TMath::Abs(jetparticle->Pt());
200 if(partpt >= ptmin && partpt < ptmax){
201 TLorentzVector partvector(jetparticle->Px(), jetparticle->Py(), jetparticle->Pz(), jetparticle->E());
202 double r = TMath::Abs(jetaxis.DeltaR(partvector));
203 if(r >= rmin && r < rmax) nselected++;
211 double jetpt = TMath::Abs(jet->
Pt());
212 for(
int ptstep = 0; ptstep <
fJetPtBins.GetSize() - 1; ptstep++){
222 AliVTrack * track = NULL;
223 for(
int itrk = 0; itrk <
event.GetNumberOfTracks(); ++itrk){
226 std::sort(labels.begin(), labels.end());
AliJetContainer * GetJetContainer(Int_t i=0) const
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
AliEmcalTrackSelection * fTrackSelection
TString fMCParticleContainerName
Name of the MC jet container.
TString fMCJetContainerName
EMCAL track selection.
void FindJetPtBin(const AliEmcalJet *const jet, double &ptmin, double &ptmax) const
THistManager * fHistos
! Histogram manager
UShort_t GetNumberOfConstituents() const
Container for particles within the EMCAL framework.
TArrayD fParticlePtBinning
Int_t TrackAt(Int_t idx) const
UShort_t GetNumberOfTracks() const
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
int GetParticleMultiplicity(const AliEmcalJet &jet, const AliParticleContainer &partcont, double ptmin, double ptmax, double rmin, double rmax, const std::vector< int > *labels=NULL) const
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.
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
virtual ~AliAnalysisTaskTrackDensity()
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
AliEmcalJet * GetNextAcceptJet()
AliAnalysisTaskTrackDensity()
virtual PWG::EMCAL::AliEmcalTrackSelResultPtr IsTrackAccepted(AliVTrack *const trk)=0
Interface for track selection code.
void GetAcceptLabels(const AliVEvent &event, std::vector< int > &ref) const
AliEmcalList * fOutput
!output list
void SetMakeGeneralHistograms(Bool_t g)
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
Container class for histograms.
TArrayD fJetRadii
Name of the MC particle container.
virtual bool Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
void UserCreateOutputObjects()
Main initialization function on the worker.
Container for jet within the EMCAL jet framework.
virtual void UserCreateOutputObjects()