5 // Author: S.Aiola, C.Loizides
7 #include "AliJetEmbeddingFromGenTask.h"
9 #include <TClonesArray.h>
11 #include <TLorentzVector.h>
12 #include <TParticle.h>
13 #include <TParticlePDG.h>
16 #include "AliAnalysisManager.h"
17 #include "AliEMCALDigit.h"
18 #include "AliEMCALGeometry.h"
19 #include "AliEMCALRecPoint.h"
20 #include "AliGenerator.h"
21 #include "AliHeader.h"
23 #include "AliPicoTrack.h"
25 #include "AliRunLoader.h"
27 #include "AliVCluster.h"
28 #include "AliVEvent.h"
29 #include "AliGenPythiaEventHeader.h"
30 #include "AliPythiaInfo.h"
31 #include "AliPythiaRndm.h"
32 ClassImp(AliJetEmbeddingFromGenTask)
34 //________________________________________________________________________
35 AliJetEmbeddingFromGenTask::AliJetEmbeddingFromGenTask() :
36 AliJetModelBaseTask("AliJetEmbeddingFromGenTask"),
46 // Default constructor.
47 SetSuffix("EmbeddedFromGen");
50 //________________________________________________________________________
51 AliJetEmbeddingFromGenTask::AliJetEmbeddingFromGenTask(const char *name, Bool_t drawqa) :
52 AliJetModelBaseTask(name,drawqa),
62 // Standard constructor.
63 SetSuffix("EmbeddedFromGen");
66 //________________________________________________________________________
67 AliJetEmbeddingFromGenTask::~AliJetEmbeddingFromGenTask()
72 //________________________________________________________________________
73 void AliJetEmbeddingFromGenTask::UserCreateOutputObjects()
75 // Create user output.
80 AliJetModelBaseTask::UserCreateOutputObjects();
82 fHistPt = new TH1F("fHistpt","fHistPt;#it{p}_{T};N",100,0.,100.);
83 fOutput->Add(fHistPt);
85 fHistEtaPhi = new TH2F("fHistEtapHI","fHistEtaPhi;#eta;#varphi",100,-3.,3.,100.,0.,TMath::TwoPi());
86 fOutput->Add(fHistEtaPhi);
88 fHistTrials = new TH1F("fHistTrials", "fHistTrials", 1, 0, 1);
89 fHistTrials->GetYaxis()->SetTitle("trials");
90 fOutput->Add(fHistTrials);
92 fHistXsection = new TProfile("fHistXsection", "fHistXsection", 1, 0, 1);
93 fHistXsection->GetYaxis()->SetTitle("xsection");
94 fOutput->Add(fHistXsection);
96 fHistPtHard = new TH1F("fHistPtHard", "fHistPtHard", 500, 0., 500.);
97 fHistPtHard->GetXaxis()->SetTitle("p_{T,hard} (GeV/c)");
98 fHistPtHard->GetYaxis()->SetTitle("counts");
99 fOutput->Add(fHistPtHard);
101 PostData(1, fOutput);
104 //________________________________________________________________________
105 Bool_t AliJetEmbeddingFromGenTask::ExecOnce()
110 new AliRun("gAlice","The ALICE Off-line Simulation Framework");
112 gRandom = new TRandom3(0);
115 TFolder *folder = new TFolder(GetName(),GetName());
116 AliRunLoader *rl = new AliRunLoader(folder);
117 gAlice->SetRunLoader(rl);
120 AliStack *stack = rl->Stack();
121 fGen->SetStack(stack);
124 if (!(InputEvent()->FindListObject(fTracksName))) {
125 fOutTracks = new TClonesArray("AliPicoTrack", 1000);
126 fOutTracks->SetName(fTracksName);
127 InputEvent()->AddObject(fOutTracks);
131 if(!fPythiaInfoName.IsNull()) {
132 if (!(InputEvent()->FindListObject(fPythiaInfoName))) {
133 fPythiaInfo = new AliPythiaInfo("PythiaInfo");
134 fPythiaInfo->SetName(fPythiaInfoName);
135 InputEvent()->AddObject(fPythiaInfo);
141 //________________________________________________________________________
142 void AliJetEmbeddingFromGenTask::Run()
148 AliPythiaRndm::SetPythiaRandom(new TRandom3());
149 AliPythiaRndm::GetPythiaRandom()->SetSeed(clock()+gSystem->GetPid());
150 AliStack *stack = fGen->GetStack();
153 const Int_t nprim = stack->GetNprimary();
154 // reject if partons are missing from stack for some reason
155 if(nprim < 8) return;
157 TParticle *part6 = stack->Particle(6);
158 TParticle *part7 = stack->Particle(7);
160 fPythiaInfo->SetPartonFlag6(TMath::Abs(part6->GetPdgCode()));
161 fPythiaInfo->SetPartonPt6(part6->Pt());
162 fPythiaInfo->SetPartonEta6(part6->Eta());
163 fPythiaInfo->SetPartonPhi6(part6->Phi());
165 fPythiaInfo->SetPartonFlag7(TMath::Abs(part7->GetPdgCode()));
166 fPythiaInfo->SetPartonPt7(part7->Pt());
167 fPythiaInfo->SetPartonEta7(part7->Eta());
168 fPythiaInfo->SetPartonPhi7(part7->Phi());
171 for (Int_t i=0;i<nprim;++i) {
172 if (!stack->IsPhysicalPrimary(i))
174 TParticle *part = stack->Particle(i);
175 TParticlePDG *pdg = part->GetPDG(1);
178 Int_t c = (Int_t)(TMath::Abs(pdg->Charge()));
179 if (fChargedOnly && c==0) continue;
180 Double_t pt = part->Pt();
181 Double_t eta = part->Eta();
182 Double_t phi = part->Phi();
195 Double_t mass = part->GetMass();
196 if(fMassless) mass = 0.;
198 fHistEtaPhi->Fill(eta,phi);
199 AddTrack(pt, eta, phi,0,0,0,0,0,0,c,mass);
202 FillPythiaHistograms();
205 //________________________________________________________________________
206 void AliJetEmbeddingFromGenTask::FillPythiaHistograms() {
207 //Get PYTHIA info: pt-hard, x-section, trials
212 AliRunLoader *rl = AliRunLoader::Instance();
213 AliGenPythiaEventHeader *genPH = dynamic_cast<AliGenPythiaEventHeader*>(rl->GetHeader()->GenEventHeader());
215 Float_t xsec = genPH->GetXsection();
216 Int_t trials = genPH->Trials();
217 Float_t pthard = genPH->GetPtHard();
218 Float_t ptWeight=genPH->EventWeight();
219 if(fPythiaInfo) fPythiaInfo->SetPythiaEventWeight(ptWeight);
220 fHistXsection->Fill(0.5,xsec);
221 fHistTrials->Fill(0.5,trials);
222 fHistPtHard->Fill(pthard);