11 #include <THashList.h>
12 #include <THistManager.h>
16 #include "AliAODMCParticle.h"
17 #include "AliEmcalJet.h"
19 #include "AliInputEventHandler.h"
20 #include "AliJetContainer.h"
21 #include "AliMCEvent.h"
22 #include "AliMCParticle.h"
24 #include "AliVEvent.h"
25 #include "AliVParticle.h"
26 #include "AliVTrack.h"
33 AliAnalysisTaskEmcalJet(),
35 fTrackSelection(NULL),
36 fParticleContainerNameRec(""),
37 fParticleContainerNameMC(""),
38 fJetContainerNameRec(""),
39 fJetContainerNameMC("")
44 AliAnalysisTaskEmcalJet(),
46 fTrackSelection(NULL),
47 fParticleContainerNameRec(
""),
48 fParticleContainerNameMC(
""),
49 fJetContainerNameRec(
""),
50 fJetContainerNameMC(
"")
59 fHistMgr =
new THistManager(
"histos");
61 TArrayD ptbinning, jetptbinning;
65 std::map<std::string, std::string> histmap1D, histmap2D;
66 histmap1D.insert(std::pair<std::string, std::string>(
"hMCall",
"MC true particles in full acceptance"));
67 histmap1D.insert(std::pair<std::string, std::string>(
"hMCcont",
"Accepted true particles in particle containers"));
68 histmap1D.insert(std::pair<std::string, std::string>(
"hTracksMB",
"All accepted tracks in the EMCAL acceptance in MB events"));
69 histmap1D.insert(std::pair<std::string, std::string>(
"hTracksEG1",
"All accepted tracks in the EMCAL acceptance in EG1 events"));
70 histmap1D.insert(std::pair<std::string, std::string>(
"hTracksEG2",
"All accepted tracks in the EMCAL acceptance in EG2 events"));
71 histmap1D.insert(std::pair<std::string, std::string>(
"hTracksEJ1",
"All accepted tracks in the EMCAL acceptance in EJ1 events"));
72 histmap1D.insert(std::pair<std::string, std::string>(
"hTracksEJ2",
"All accepted tracks in the EMCAL acceptance in EJ2 events"));
73 histmap2D.insert(std::pair<std::string, std::string>(
"hMCjetTrack",
"Particles in jets with jet pt"));
74 histmap2D.insert(std::pair<std::string, std::string>(
"hRecjetTrackMB",
"Particles in jets with jet pt in MB events"));
75 histmap2D.insert(std::pair<std::string, std::string>(
"hRecjetTrackEG1",
"Particles in jets with jet pt in EG1 events"));
76 histmap2D.insert(std::pair<std::string, std::string>(
"hRecjetTrackEG2",
"Particles in jets with jet pt in EG2 events"));
77 histmap2D.insert(std::pair<std::string, std::string>(
"hRecjetTrackEJ1",
"Particles in jets with jet pt in EJ1 events"));
78 histmap2D.insert(std::pair<std::string, std::string>(
"hRecjetTrackEJ2",
"Particles in jets with jet pt in EJ2 events"));
80 for(std::map<std::string, std::string>::iterator it = histmap1D.begin(); it != histmap1D.end(); ++it){
81 fHistMgr->CreateTH1(it->first.c_str(), it->second.c_str(), ptbinning);
83 for(std::map<std::string, std::string>::iterator it = histmap2D.begin(); it != histmap2D.end(); ++it){
84 fHistMgr->CreateTH2(it->first.c_str(), it->second.c_str(), jetptbinning, ptbinning);
87 fHistMgr->GetListOfHistograms()->SetOwner(kFALSE);
88 for(TIter histiter = TIter(
fHistMgr->GetListOfHistograms()).Begin(); histiter != TIter::End(); ++histiter)
89 fHistosQA->Add(*histiter);
93 TString triggerstring = fInputEvent->GetFiredTriggerClasses();
94 Bool_t isMinBias = fInputHandler->IsEventSelected() & AliVEvent::kINT7,
95 isEG1 = triggerstring.Contains(
"EG1"),
96 isEG2 = triggerstring.Contains(
"EG2"),
97 isEJ1 = triggerstring.Contains(
"EJ1"),
98 isEJ2 = triggerstring.Contains(
"EJ2");
99 if(!(isMinBias || isEG1 || isEG2 || isEJ1 || isEJ2))
return kFALSE;
102 AliVParticle *mctrack = 0;
103 for(Int_t ipart = 0; ipart < MCEvent()->GetNumberOfTracks(); ipart++){
104 mctrack = MCEvent()->GetTrack(ipart);
107 fHistMgr->FillTH1(
"hMCall", mctrack->Pt());
110 for(std::vector<const AliVParticle *>::iterator it = particles.begin(); it != particles.end(); ++it) {
111 const Double_t &pt = (*it)->Pt();
118 for(
int itrk = 0; itrk < mcjet->GetNumberOfTracks(); itrk++){
119 mctrack = mcjet->TrackAt(itrk, GetParticleContainer(0)->GetArray());
121 fHistMgr->FillTH2(
"hMCjetTrack", mcjet->Pt(), mctrack->Pt());
128 for(std::vector<const AliVParticle *>::iterator it = tracks.begin(); it != tracks.end(); ++it) {
129 const Double_t &pt = (*it)->Pt();
130 if(isMinBias)
fHistMgr->FillTH1(
"hTracksMB", pt);
131 if(isEJ1)
fHistMgr->FillTH1(
"hTracksEJ1", pt);
132 if(isEJ2)
fHistMgr->FillTH1(
"hTracksEJ2", pt);
133 if(isEG1)
fHistMgr->FillTH1(
"hTracksEG1", pt);
134 if(isEG2)
fHistMgr->FillTH1(
"hTracksEG2", pt);
138 AliVParticle *jettrack = NULL;
141 for(
int itrk = 0; itrk < recjet->GetNumberOfTracks(); itrk++){
142 jettrack = recjet->TrackAt(itrk, GetParticleContainer(1)->GetArray());
144 if(!
AcceptTrack(dynamic_cast<AliVTrack *>(jettrack)))
continue;
145 if(isMinBias)
fHistMgr->FillTH2(
"hRecjetTrackMB", recjet->Pt(), jettrack->Pt());
146 if(isEJ1)
fHistMgr->FillTH2(
"hRecjetTrackEJ1", recjet->Pt(), jettrack->Pt());
147 if(isEJ2)
fHistMgr->FillTH2(
"hRecjetTrackEJ2", recjet->Pt(), jettrack->Pt());
148 if(isEG1)
fHistMgr->FillTH2(
"hRecjetTrackEG1", recjet->Pt(), jettrack->Pt());
149 if(isEG2)
fHistMgr->FillTH2(
"hRecjetTrackEG2", recjet->Pt(), jettrack->Pt());
157 std::vector<const AliVParticle *> result;
159 AliVTrack *track = NULL;
162 if((track = dynamic_cast<AliVTrack *>(test))){
166 result.push_back(test);
173 if(part->Phi() < 1.4 || part->Phi() > 3.1)
return false;
174 if(TMath::Abs(part->Eta()) > 0.5)
return false;
175 if(!part->Charge())
return false;
185 const AliMCParticle *mcpart =
dynamic_cast<const AliMCParticle *
>(part);
187 return MCEvent()->IsPhysicalPrimary(part->GetLabel());
189 const AliAODMCParticle *aodpart =
dynamic_cast<const AliAODMCParticle *
>(part);
190 if(aodpart)
return aodpart->IsPhysicalPrimary();
196 std::vector<double> mybinning;
197 std::map<double,double> definitions;
198 definitions.insert(std::pair<double, double>(1, 0.05));
199 definitions.insert(std::pair<double, double>(2, 0.1));
200 definitions.insert(std::pair<double, double>(4, 0.2));
201 definitions.insert(std::pair<double, double>(7, 0.5));
202 definitions.insert(std::pair<double, double>(16, 1));
203 definitions.insert(std::pair<double, double>(36, 2));
204 definitions.insert(std::pair<double, double>(40, 4));
205 definitions.insert(std::pair<double, double>(50, 5));
206 definitions.insert(std::pair<double, double>(100, 10));
207 definitions.insert(std::pair<double, double>(200, 20));
208 double currentval = 0.;
209 mybinning.push_back(currentval);
210 for(std::map<double,double>::iterator
id = definitions.begin();
id != definitions.end(); ++id){
211 double limit =
id->first, binwidth =
id->second;
212 while(currentval < limit){
213 currentval += binwidth;
214 mybinning.push_back(currentval);
217 binning.Set(mybinning.size());
219 for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
224 double binwidth = (max-min)/static_cast<double>(nbins);
225 binning.Set(nbins+1);
227 double currentlimit = min + binwidth;
228 for(
int ibin = 0; ibin <
nbins; ibin++){
229 binning[ibin+1] = currentlimit;
230 currentlimit += binwidth;
Bool_t IsPhysicalPrimary(const AliVParticle *const part) const
std::vector< const AliVParticle * > GetSelectedParticles(AliParticleContainer *const cont) const
Bool_t AcceptTrack(AliVTrack *const track) const
Bool_t AcceptParticle(const AliVParticle *const part) const
TString fJetContainerNameRec
void UserCreateOutputObjects()
TString fParticleContainerNameRec
TString fJetContainerNameMC
TString fParticleContainerNameMC
virtual AliVParticle * GetNextAcceptParticle(Int_t i=-1)
AliAnalysisTaskParticleInJet()
void CreatePtBinning(TArrayD &binning) const
AliEmcalTrackSelection * fTrackSelection
void CreateLinearBinning(TArrayD &binning, int nbins, double min, double max) const
virtual ~AliAnalysisTaskParticleInJet()
Declartion of class AliEmcalTrackSelection.
ClassImp(AliAnalysisTaskParticleInJet) AliAnalysisTaskParticleInJet
virtual bool IsTrackAccepted(AliVTrack *const trk)=0