22 #include <AliESDEvent.h> 23 #include <AliAODEvent.h> 24 #include "AliESDVertex.h" 25 #include "AliAODVertex.h" 26 #include <AliAODTrack.h> 28 #include <TClonesArray.h> 29 #include <AliAODMCParticle.h> 43 AliAnalysisTaskEmcalJet("
AliAnalysisTaskChargedJetsHadronToy", kTRUE), fAddTracksFromInputEvent(0), fAddTracksFromPicoTracks(0), fAddTracksFromToy(0), fAddTracksFromMixedEvent(0), fTrackEfficiency_InputEvent(1.0), fTrackEfficiency_Toy(1.0), fTrackEfficiency_ME(1.0), fTrackEfficiency_PicoTracks(1.0), fLabelOffset_InputEvent(0), fLabelOffset_Toy(500000), fLabelOffset_ME(600000), fLabelOffset_PicoTracks(700000), fDistributionMultiplicity(0), fDistributionPt(0), fDistributionEtaPhi(0), fMinCentrality(0), fMaxCentrality(10), fMaxEta(0.9), fDistributionV2(0), fDistributionV3(0), fDistributionV4(0), fDistributionV5(0), fMixedEvent_Tree(0), fMixedEvent_CurrentFile(0), fMixedEvent_CurrentFileID(-1), fMixedEvent_BaseFolder(""), fMixedEvent_TreeName("ME_tree"), fMixedEvent_CurrentEventID(0), fMixedEvent_NumTotalFiles(30), fBuffer_NumTracks(0), fBuffer_TrackPt(0), fBuffer_TrackPhi(0), fBuffer_TrackEta(0), fBuffer_TrackCharge(0), fPicoTracksArrayName(""), fPicoTracksArray(0), fEventTracksArrayName(""), fEventTracksArray(0), fOutputArrayName(""), fOutputArray(0), fRandom(), fToyCent(0), fRandomPsi3(0), fRandomPsi4(0), fRandomPsi5(0)
46 fBuffer_TrackPt =
new Float_t[10000];
47 fBuffer_TrackPhi =
new Float_t[10000];
48 fBuffer_TrackEta =
new Float_t[10000];
49 fBuffer_TrackCharge =
new Short_t[10000];
56 AliAnalysisTaskEmcalJet(name, kTRUE), fAddTracksFromInputEvent(0), fAddTracksFromPicoTracks(0), fAddTracksFromToy(0), fAddTracksFromMixedEvent(0), fTrackEfficiency_InputEvent(1.0), fTrackEfficiency_Toy(1.0), fTrackEfficiency_ME(1.0), fTrackEfficiency_PicoTracks(1.0), fLabelOffset_InputEvent(0), fLabelOffset_Toy(500000), fLabelOffset_ME(600000), fLabelOffset_PicoTracks(700000), fDistributionMultiplicity(0), fDistributionPt(0), fDistributionEtaPhi(0), fMinCentrality(0), fMaxCentrality(10), fMaxEta(0.9), fDistributionV2(0), fDistributionV3(0), fDistributionV4(0), fDistributionV5(0), fMixedEvent_Tree(0), fMixedEvent_CurrentFile(0), fMixedEvent_CurrentFileID(-1), fMixedEvent_BaseFolder(
""), fMixedEvent_TreeName(
"ME_tree"), fMixedEvent_CurrentEventID(0), fMixedEvent_NumTotalFiles(30), fBuffer_NumTracks(0), fBuffer_TrackPt(0), fBuffer_TrackPhi(0), fBuffer_TrackEta(0), fBuffer_TrackCharge(0), fPicoTracksArrayName(
""), fPicoTracksArray(0), fEventTracksArrayName(
""), fEventTracksArray(0), fOutputArrayName(
""), fOutputArray(0), fRandom(), fToyCent(0), fRandomPsi3(0), fRandomPsi4(0), fRandomPsi5(0)
90 AddHistogram1D<TH1D>(
"hCombined_TrackPt",
"Tracks p_{T} distribution",
"", 300, 0., 300.,
"p_{T} (GeV/c)",
"dN^{Tracks}/dp_{T}");
91 AddHistogram2D<TH2D>(
"hCombined_TrackPhiEta",
"Track angular distribution #phi/#eta",
"COLZ", 180, 0., 2*TMath::Pi(), 100, -2.5, 2.5,
"#phi",
"#eta",
"dN^{Tracks}/d#phi d#eta");
92 AddHistogram1D<TH1D>(
"hCombined_Multiplicity",
"Number of tracks in acceptance vs. centrality",
"", 2000, 0., 20000.,
"N tracks",
"dN^{Events}/dN^{Tracks}");
94 AddHistogram1D<TH1D>(
"hToy_TrackPt",
"Tracks p_{T} distribution (toy)",
"", 300, 0., 300.,
"p_{T} (GeV/c)",
"dN^{Tracks}/dp_{T}");
95 AddHistogram2D<TH2D>(
"hToy_TrackPhiEta",
"Track angular distribution #phi/#eta (toy)",
"COLZ", 180, 0., 2*TMath::Pi(), 100, -2.5, 2.5,
"#phi",
"#eta",
"dN^{Tracks}/d#phi d#eta");
96 AddHistogram1D<TH1D>(
"hToy_Multiplicity",
"Number of tracks in acceptance vs. centrality (toy)",
"", 2000, 0., 20000.,
"N tracks",
"dN^{Events}/dN^{Tracks}");
98 AddHistogram1D<TH1D>(
"hInputTracks_TrackPt",
"Tracks p_{T} distribution (input tracks)",
"", 300, 0., 300.,
"p_{T} (GeV/c)",
"dN^{Tracks}/dp_{T}");
99 AddHistogram2D<TH2D>(
"hInputTracks_TrackPhiEta",
"Track angular distribution #phi/#eta (input tracks)",
"COLZ", 180, 0., 2*TMath::Pi(), 100, -2.5, 2.5,
"#phi",
"#eta",
"dN^{Tracks}/d#phi d#eta");
100 AddHistogram1D<TH1D>(
"hInputTracks_Multiplicity",
"Number of tracks in acceptance vs. centrality (input tracks)",
"", 2000, 0., 20000.,
"N tracks",
"dN^{Events}/dN^{Tracks}");
102 AddHistogram1D<TH1D>(
"hPicoTracks_TrackPt",
"Tracks p_{T} distribution (picotracks)",
"", 300, 0., 300.,
"p_{T} (GeV/c)",
"dN^{Tracks}/dp_{T}");
103 AddHistogram2D<TH2D>(
"hPicoTracks_TrackPhiEta",
"Track angular distribution #phi/#eta (picotracks)",
"COLZ", 180, 0., 2*TMath::Pi(), 100, -2.5, 2.5,
"#phi",
"#eta",
"dN^{Tracks}/d#phi d#eta");
104 AddHistogram1D<TH1D>(
"hPicoTracks_Multiplicity",
"Number of tracks in acceptance vs. centrality (picotracks)",
"", 2000, 0., 20000.,
"N tracks",
"dN^{Events}/dN^{Tracks}");
106 AddHistogram1D<TH1D>(
"hMixedEvent_TrackPt",
"Tracks p_{T} distribution (ME)",
"", 300, 0., 300.,
"p_{T} (GeV/c)",
"dN^{Tracks}/dp_{T}");
107 AddHistogram2D<TH2D>(
"hMixedEvent_TrackPhiEta",
"Track angular distribution #phi/#eta (ME)",
"COLZ", 180, 0., 2*TMath::Pi(), 100, -2.5, 2.5,
"#phi",
"#eta",
"dN^{Tracks}/d#phi d#eta");
108 AddHistogram1D<TH1D>(
"hMixedEvent_Multiplicity",
"Number of tracks in acceptance vs. centrality (ME)",
"", 2000, 0., 20000.,
"N tracks",
"dN^{Events}/dN^{Tracks}");
123 AliFatal(Form(
"Input array name not given, although demanded"));
134 AliFatal(Form(
"Picotrack array name not given, although demanded"));
143 AliFatal(Form(
"Output array '%s' already exists in the event! Rename it.",
fOutputArrayName.Data()));
151 AliFatal(
"Demanded tracks from toy, but one of the necessary distribution was not given!");
172 if(dynamic_cast<AliESDEvent*>(InputEvent()))
174 if((dynamic_cast<AliESDEvent*>(InputEvent()))->GetPrimaryVertexTracks())
175 if(!(dynamic_cast<AliESDEvent*>(InputEvent()))->GetPrimaryVertexTracks()->GetNContributors())
176 static_cast<AliESDEvent*
>(fInputEvent)->SetPrimaryVertexTracks(
new AliESDVertex(0.,0., 100));
178 else if(dynamic_cast<AliAODEvent*>(InputEvent()))
180 if( (!(dynamic_cast<AliAODEvent*>(InputEvent()))->GetPrimaryVertex()) || (!(
dynamic_cast<AliAODEvent*
>(InputEvent()))->GetPrimaryVertex()->GetNContributors()) )
183 p[0] = 0.; p[1] = 0.; p[2] = 0.;
184 AliAODVertex* vertex =
new AliAODVertex(p,1.);
185 vertex->SetNContributors(100);
186 vertex->SetName(
"PrimaryVertex");
187 static_cast<AliAODEvent*
>(fInputEvent)->AddVertex(vertex);
191 Int_t numParticles_InputTracks = 0;
192 Int_t numParticles_Toy = 0;
193 Int_t numParticles_MixedEvent = 0;
194 Int_t numParticles_PicoTracks = 0;
195 Int_t particleCount = 0;
204 if (fTrackEfficiency_InputEvent < fRandom->Rndm())
209 AliAODMCParticle* aodMCParticle =
dynamic_cast<AliAODMCParticle*
>(
fEventTracksArray->At(i));
213 if (TMath::Abs(aodTrack->Eta()) >
fMaxEta)
216 new ((*fOutputArray)[particleCount]) AliAODTrack(*aodTrack);
218 if(aodTrack->IsHybridGlobalConstrainedGlobal())
221 FillHistogram(
"hInputTracks_TrackPhiEta", aodTrack->Phi(), aodTrack->Eta());
222 numParticles_InputTracks++;
225 else if(aodMCParticle)
227 if (!aodMCParticle->IsPhysicalPrimary())
229 if (aodMCParticle->Charge() == 0)
231 if (TMath::Abs(aodMCParticle->Eta()) >
fMaxEta)
234 Float_t trackTheta = 2.*atan(exp(-aodMCParticle->Eta()));
235 new ((*fOutputArray)[particleCount]) AliAODTrack();
236 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetPt(aodMCParticle->Pt());
237 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetPhi(aodMCParticle->Phi());
238 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetTheta(trackTheta);
239 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetCharge(aodMCParticle->Charge());
241 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetIsHybridGlobalConstrainedGlobal();
244 FillHistogram(
"hInputTracks_TrackPhiEta", aodMCParticle->Phi(), aodMCParticle->Eta());
245 numParticles_InputTracks++;
271 if (fTrackEfficiency_ME < fRandom->Rndm())
280 new ((*fOutputArray)[particleCount]) AliAODTrack();
283 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetTheta(trackTheta);
286 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetIsHybridGlobalConstrainedGlobal();
288 numParticles_MixedEvent++;
300 for(
Int_t i=0;i<multiplicity; i++)
304 if (fTrackEfficiency_Toy < fRandom->Rndm())
311 Double_t trackTheta = 2.*atan(exp(-trackEta));
314 if (TMath::Abs(trackEta) >
fMaxEta)
316 if(trackCharge>0) trackCharge = 1;
else trackCharge = -1;
320 trackPhi =
AddFlow(trackPhi, trackPt);
324 new ((*fOutputArray)[particleCount]) AliAODTrack();
325 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetPt(trackPt);
326 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetPhi(trackPhi);
327 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetTheta(trackTheta);
328 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetCharge(trackCharge);
330 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetIsHybridGlobalConstrainedGlobal();
345 if (fTrackEfficiency_PicoTracks < fRandom->Rndm())
349 if (TMath::Abs(inputParticle->
Eta()) >
fMaxEta)
353 new ((*fOutputArray)[particleCount]) AliAODTrack();
354 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetPt(inputParticle->
Pt());
355 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetPhi(inputParticle->
Phi());
356 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetTheta(2.*atan(exp(-inputParticle->
Eta())));
357 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetCharge(inputParticle->
Charge());
359 static_cast<AliAODTrack*
>(
fOutputArray->At(particleCount))->SetIsHybridGlobalConstrainedGlobal();
361 numParticles_PicoTracks++;
367 FillHistogram(
"hInputTracks_Multiplicity", numParticles_InputTracks);
369 FillHistogram(
"hMixedEvent_Multiplicity", numParticles_MixedEvent);
370 FillHistogram(
"hPicoTracks_Multiplicity", numParticles_PicoTracks);
376 Int_t hybridMult = 0;
379 AliAODTrack* track =
static_cast<AliAODTrack*
>(
fOutputArray->At(iTrack));
380 if(!track->IsHybridGlobalConstrainedGlobal())
384 FillHistogram(
"hCombined_TrackPhiEta", track->Phi(), track->Eta());
397 AliInfo(Form(
"Opening mixed event file: %s", fileName.Data()));
399 if (fileName.BeginsWith(
"alien://") && !gGrid)
401 AliInfo(
"Trying to connect to AliEn ...");
402 TGrid::Connect(
"alien://");
404 if (
gSystem->AccessPathName(fileName)) {
405 AliError(Form(
"File %s does not exist!", fileName.Data()));
415 AliError(Form(
"Unable to open file: %s!", fileName.Data()));
438 Int_t maxNumberOfIterations = 200;
491 for (
Int_t i=0; i<maxNumberOfIterations; i++)
495 + v2*TMath::Sin(2.*(phi-(
fEPV0+(TMath::Pi()/2.))))
501 +v2*TMath::Cos(2.*(phi-(
fEPV0+(TMath::Pi()/2.))))
507 if (TMath::AreEqualAbs(phiprev,phi,precisionPhi))
break;
517 TGrid::Connect(
"alien://");
518 TFile* fileInput = TFile::Open(configFileName);
521 AliError(
"Toy distributions file not found!");
525 TH1* distPt =
static_cast<TH1*
>(fileInput->Get(
"Pt"));
526 TH1* distMult =
static_cast<TH1*
>(fileInput->Get(
"Multiplicity"));
527 TH1* distPhiEta =
static_cast<TH1*
>(fileInput->Get(
"PhiEta"));
529 TH2* distV2 =
static_cast<TH2*
>(fileInput->Get(
"v2_EP_PbPb"));
530 TH2* distV3 =
static_cast<TH2*
>(fileInput->Get(
"v3_EP_PbPb"));
531 TH2* distV4 =
static_cast<TH2*
>(fileInput->Get(
"v4_EP_PbPb"));
548 AliError(Form(
"Cannot find histogram <%s> ",key)) ;
561 AliError(Form(
"Cannot find histogram <%s> ",key));
565 if (tmpHist->IsA()->GetBaseClass(
"TH1"))
566 static_cast<TH1*>(tmpHist)->Fill(x,y);
567 else if (tmpHist->IsA()->GetBaseClass(
"TH2"))
568 static_cast<TH2*>(tmpHist)->Fill(x,y);
577 AliError(Form(
"Cannot find histogram <%s> ",key));
581 tmpHist->Fill(x,y,add);
587 T* tmpHist =
new T(name, title, xBins, xMin, xMax);
589 tmpHist->GetXaxis()->SetTitle(xTitle);
590 tmpHist->GetYaxis()->SetTitle(yTitle);
591 tmpHist->SetOption(options);
592 tmpHist->SetMarkerStyle(kFullCircle);
601 template <
class T>
T*
AliAnalysisTaskChargedJetsHadronToy::AddHistogram2D(
const char* name,
const char*
title,
const char* options,
Int_t xBins,
Double_t xMin,
Double_t xMax,
Int_t yBins,
Double_t yMin,
Double_t yMax,
const char* xTitle,
const char* yTitle,
const char* zTitle)
603 T* tmpHist =
new T(name, title, xBins, xMin, xMax, yBins, yMin, yMax);
604 tmpHist->GetXaxis()->SetTitle(xTitle);
605 tmpHist->GetYaxis()->SetTitle(yTitle);
606 tmpHist->GetZaxis()->SetTitle(zTitle);
607 tmpHist->SetOption(options);
608 tmpHist->SetMarkerStyle(kFullCircle);
Bool_t fAddTracksFromMixedEvent
Int_t fMixedEvent_CurrentEventID
TH2 * fDistributionV5
Distribution for v4 in bins of pt and centrality.
Bool_t Run()
eventwise calculated psi 5
TH2 * fDistributionV3
Distribution for v2 in bins of pt and centrality.
TString fMixedEvent_TreeName
Double_t fToyCent
random number generator
Double_t fRandomPsi4
eventwise calculated psi 3
Float_t * fBuffer_TrackPhi
buffer for track pt array
void SetDistributionPt(TH1 *val)
Short_t * fBuffer_TrackCharge
buffer for track eta array
Int_t fMixedEvent_NumTotalFiles
TClonesArray * fOutputArray
TH1 * fDistributionMultiplicity
Double_t fEPV0
!event plane V0
Double_t fTrackEfficiency_PicoTracks
Int_t fLabelOffset_InputEvent
TString fPicoTracksArrayName
buffer for track charge array
TString fMixedEvent_BaseFolder
Double_t fTrackEfficiency_InputEvent
void FillHistogram(const char *key, Double_t x)
TString fOutputArrayName
input array containing tracks from events
void SetDistributionV4(TH2 *val)
Double_t fTrackEfficiency_ME
TString fEventTracksArrayName
input array containing pico tracks
void SetDistributionMultiplicity(TH1 *val)
T * AddHistogram1D(const char *name="CustomHistogram", const char *title="NO_TITLE", const char *options="", Int_t xBins=100, Double_t xMin=0.0, Double_t xMax=20.0, const char *xTitle="x axis", const char *yTitle="y axis")
UShort_t T(UShort_t m, UShort_t t)
void AddTracksFromToy(const char *configFileName="alien:///alice/cern.ch/user/r/rhaake/Distributions_PbPb_1800.root")
TRandom3 * fRandom
output array
void SetDistributionV2(TH2 *val)
Double_t fTrackEfficiency_Toy
Int_t fLabelOffset_PicoTracks
TH2 * fDistributionV4
Distribution for v3 in bins of pt and centrality.
void SetDistributionEtaPhi(TH1 *val)
Bool_t fAddTracksFromPicoTracks
Double_t fRandomPsi5
eventwise calculated psi 4
void UserCreateOutputObjects()
Int_t fMixedEvent_CurrentFileID
ME: open file.
void Terminate(Option_t *)
AliAnalysisTaskChargedJetsHadronToy()
Double_t AddFlow(Double_t phi, Double_t pt)
AliEmcalList * fOutput
!output list
Float_t * fBuffer_TrackPt
TClonesArray * fEventTracksArray
TH1 * fDistributionEtaPhi
TTree * GetNextMixedEventTree()
Double_t fRandomPsi3
eventwise centrality value
Base task in the EMCAL jet framework.
TFile * fMixedEvent_CurrentFile
ME: The tree of the mixed event.
T * AddHistogram2D(const char *name="CustomHistogram", const char *title="NO_TITLE", const char *options="", Int_t xBins=100, Double_t xMin=0.0, Double_t xMax=20.0, Int_t yBins=100, Double_t yMin=0.0, Double_t yMax=20.0, const char *xTitle="x axis", const char *yTitle="y axis", const char *zTitle="z axis")
void UserCreateOutputObjects()
Main initialization function on the worker.
virtual ~AliAnalysisTaskChargedJetsHadronToy()
TClonesArray * fPicoTracksArray
void SetDistributionV3(TH2 *val)
TTree * fMixedEvent_Tree
Distribution for v5 in bins of pt and centrality.
void ExecOnce()
Perform steps needed to initialize the analysis.
Bool_t fAddTracksFromInputEvent
Float_t * fBuffer_TrackEta
buffer for track phi array