11 #include <THashList.h> 16 #include "AliAODMCParticle.h" 19 #include "AliInputEventHandler.h" 21 #include "AliMCEvent.h" 22 #include "AliMCParticle.h" 24 #include "AliVEvent.h" 25 #include "AliVParticle.h" 26 #include "AliVTrack.h" 35 fTrackSelection(NULL),
36 fParticleContainerNameRec(""),
37 fParticleContainerNameMC(""),
38 fJetContainerNameRec(""),
39 fJetContainerNameMC("")
46 fTrackSelection(NULL),
47 fParticleContainerNameRec(
""),
48 fParticleContainerNameMC(
""),
49 fJetContainerNameRec(
""),
50 fJetContainerNameMC(
"")
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){
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);
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);
110 for(std::vector<const AliVParticle *>::iterator it = particles.begin(); it != particles.end(); ++it) {
129 for(std::vector<const AliVParticle *>::iterator it = tracks.begin(); it != tracks.end(); ++it) {
139 AliVParticle *jettrack = NULL;
146 if(!
AcceptTrack(dynamic_cast<AliVTrack *>(jettrack)))
continue;
159 std::vector<const AliVParticle *> result;
160 cont->ResetCurrentID();
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()
AliJetContainer * GetJetContainer(Int_t i=0) const
std::vector< const AliVParticle * > GetSelectedParticles(AliParticleContainer *const cont) const
void FillTH2(const char *hname, double x, double y, double weight=1., Option_t *opt="")
Fill a 2D histogram within the container.
Bool_t AcceptTrack(AliVTrack *const track) const
Bool_t AcceptParticle(const AliVParticle *const part) const
TString fJetContainerNameRec
TString part
use mixed event to constrain combinatorial background
Container for particles within the EMCAL framework.
void UserCreateOutputObjects()
Int_t TrackAt(Int_t idx) const
UShort_t GetNumberOfTracks() const
TString fParticleContainerNameRec
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
TString fJetContainerNameMC
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.
Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Create a new TH1 within the container.
TString fParticleContainerNameMC
AliAnalysisTaskParticleInJet()
void CreatePtBinning(TArrayD &binning) const
AliEmcalTrackSelection * fTrackSelection
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Fill a 1D histogram within the container.
void CreateLinearBinning(TArrayD &binning, int nbins, double min, double max) const
virtual PWG::EMCAL::AliEmcalTrackSelResultPtr IsTrackAccepted(AliVTrack *const trk)=0
Interface for track selection code.
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
Container class for histograms.
void test(int runnumber=195345)
virtual ~AliAnalysisTaskParticleInJet()