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();
119 for(
int itrk = 0; itrk < mcjet->GetNumberOfTracks(); itrk++){
120 mctrack = mcjet->TrackAt(itrk, GetParticleContainer(0)->GetArray());
122 fHistMgr->FillTH2(
"hMCjetTrack", mcjet->Pt(), mctrack->Pt());
129 for(std::vector<const AliVParticle *>::iterator it = tracks.begin(); it != tracks.end(); ++it) {
130 const Double_t &pt = (*it)->Pt();
131 if(isMinBias)
fHistMgr->FillTH1(
"hTracksMB", pt);
132 if(isEJ1)
fHistMgr->FillTH1(
"hTracksEJ1", pt);
133 if(isEJ2)
fHistMgr->FillTH1(
"hTracksEJ2", pt);
134 if(isEG1)
fHistMgr->FillTH1(
"hTracksEG1", pt);
135 if(isEG2)
fHistMgr->FillTH1(
"hTracksEG2", pt);
139 AliVParticle *jettrack = NULL;
143 for(
int itrk = 0; itrk < recjet->GetNumberOfTracks(); itrk++){
144 jettrack = recjet->TrackAt(itrk, GetParticleContainer(1)->GetArray());
146 if(!
AcceptTrack(dynamic_cast<AliVTrack *>(jettrack)))
continue;
147 if(isMinBias)
fHistMgr->FillTH2(
"hRecjetTrackMB", recjet->Pt(), jettrack->Pt());
148 if(isEJ1)
fHistMgr->FillTH2(
"hRecjetTrackEJ1", recjet->Pt(), jettrack->Pt());
149 if(isEJ2)
fHistMgr->FillTH2(
"hRecjetTrackEJ2", recjet->Pt(), jettrack->Pt());
150 if(isEG1)
fHistMgr->FillTH2(
"hRecjetTrackEG1", recjet->Pt(), jettrack->Pt());
151 if(isEG2)
fHistMgr->FillTH2(
"hRecjetTrackEG2", recjet->Pt(), jettrack->Pt());
159 std::vector<const AliVParticle *> result;
162 AliVTrack *track = NULL;
165 if((track = dynamic_cast<AliVTrack *>(test))){
169 result.push_back(test);
176 if(part->Phi() < 1.4 || part->Phi() > 3.1)
return false;
177 if(TMath::Abs(part->Eta()) > 0.5)
return false;
178 if(!part->Charge())
return false;
188 const AliMCParticle *mcpart =
dynamic_cast<const AliMCParticle *
>(part);
190 return MCEvent()->IsPhysicalPrimary(part->GetLabel());
192 const AliAODMCParticle *aodpart =
dynamic_cast<const AliAODMCParticle *
>(part);
193 if(aodpart)
return aodpart->IsPhysicalPrimary();
199 std::vector<double> mybinning;
200 std::map<double,double> definitions;
201 definitions.insert(std::pair<double, double>(1, 0.05));
202 definitions.insert(std::pair<double, double>(2, 0.1));
203 definitions.insert(std::pair<double, double>(4, 0.2));
204 definitions.insert(std::pair<double, double>(7, 0.5));
205 definitions.insert(std::pair<double, double>(16, 1));
206 definitions.insert(std::pair<double, double>(36, 2));
207 definitions.insert(std::pair<double, double>(40, 4));
208 definitions.insert(std::pair<double, double>(50, 5));
209 definitions.insert(std::pair<double, double>(100, 10));
210 definitions.insert(std::pair<double, double>(200, 20));
211 double currentval = 0.;
212 mybinning.push_back(currentval);
213 for(std::map<double,double>::iterator
id = definitions.begin();
id != definitions.end(); ++id){
214 double limit =
id->first, binwidth =
id->second;
215 while(currentval < limit){
216 currentval += binwidth;
217 mybinning.push_back(currentval);
220 binning.Set(mybinning.size());
222 for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
227 double binwidth = (max-min)/static_cast<double>(nbins);
228 binning.Set(nbins+1);
230 double currentlimit = min + binwidth;
231 for(
int ibin = 0; ibin <
nbins; ibin++){
232 binning[ibin+1] = currentlimit;
233 currentlimit += binwidth;
Bool_t IsPhysicalPrimary(const AliVParticle *const part) const
virtual AliVParticle * GetNextAcceptParticle()
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
Container for particles within the EMCAL framework.
void UserCreateOutputObjects()
TString fParticleContainerNameRec
TString fJetContainerNameMC
TString fParticleContainerNameMC
AliAnalysisTaskParticleInJet()
void CreatePtBinning(TArrayD &binning) const
AliEmcalTrackSelection * fTrackSelection
void CreateLinearBinning(TArrayD &binning, int nbins, double min, double max) const
virtual ~AliAnalysisTaskParticleInJet()
void ResetCurrentID(Int_t i=-1)
ClassImp(AliAnalysisTaskParticleInJet) AliAnalysisTaskParticleInJet
virtual bool IsTrackAccepted(AliVTrack *const trk)=0