]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/AliJetEmbeddingFromGenTask.cxx
bug fix
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliJetEmbeddingFromGenTask.cxx
CommitLineData
8628b70c 1// $Id$
6deabc32 2//
3// Jet embedding task.
4//
5// Author: S.Aiola, C.Loizides
6
7#include "AliJetEmbeddingFromGenTask.h"
8
9#include <TClonesArray.h>
bd2cf60a 10#include <TFolder.h>
6deabc32 11#include <TLorentzVector.h>
bd2cf60a 12#include <TParticle.h>
13#include <TParticlePDG.h>
6deabc32 14#include <TRandom3.h>
e6f3b167 15#include <TProfile.h>
6deabc32 16#include "AliAnalysisManager.h"
17#include "AliEMCALDigit.h"
18#include "AliEMCALGeometry.h"
19#include "AliEMCALRecPoint.h"
20#include "AliGenerator.h"
bd2cf60a 21#include "AliHeader.h"
6deabc32 22#include "AliLog.h"
23#include "AliPicoTrack.h"
bd2cf60a 24#include "AliRun.h"
25#include "AliRunLoader.h"
26#include "AliStack.h"
6deabc32 27#include "AliStack.h"
28#include "AliVCluster.h"
29#include "AliVEvent.h"
e6f3b167 30#include "AliGenPythiaEventHeader.h"
cfa7b4df 31#include "AliStackPartonInfo.h"
f0134962 32#include "AliPythiaRndm.h"
6deabc32 33ClassImp(AliJetEmbeddingFromGenTask)
34
35//________________________________________________________________________
36AliJetEmbeddingFromGenTask::AliJetEmbeddingFromGenTask() :
37 AliJetModelBaseTask("AliJetEmbeddingFromGenTask"),
e6f3b167 38 fGen(0),
4d3b366f 39 fMassless(kFALSE),
72978588 40 fChargedOnly(kFALSE),
8d2d2145 41 fHistPt(0),
72978588 42 fHistEtaPhi(0),
e6f3b167 43 fHistTrials(0),
44 fHistXsection(0),
45 fHistPtHard(0)
6deabc32 46{
47 // Default constructor.
48 SetSuffix("EmbeddedFromGen");
49}
50
51//________________________________________________________________________
e6f3b167 52AliJetEmbeddingFromGenTask::AliJetEmbeddingFromGenTask(const char *name, Bool_t drawqa) :
53 AliJetModelBaseTask(name,drawqa),
54 fGen(0),
4d3b366f 55 fMassless(kFALSE),
72978588 56 fChargedOnly(kFALSE),
8d2d2145 57 fHistPt(0),
72978588 58 fHistEtaPhi(0),
e6f3b167 59 fHistTrials(0),
60 fHistXsection(0),
61 fHistPtHard(0)
6deabc32 62{
63 // Standard constructor.
64 SetSuffix("EmbeddedFromGen");
65}
66
67//________________________________________________________________________
68AliJetEmbeddingFromGenTask::~AliJetEmbeddingFromGenTask()
69{
70 // Destructor
71}
72
e6f3b167 73//________________________________________________________________________
74void AliJetEmbeddingFromGenTask::UserCreateOutputObjects()
75{
76 // Create user output.
77
78 if (!fQAhistos)
79 return;
80
81 AliJetModelBaseTask::UserCreateOutputObjects();
82
8d2d2145 83 fHistPt = new TH1F("fHistpt","fHistPt;#it{p}_{T};N",100,0.,100.);
84 fOutput->Add(fHistPt);
85
cfa7b4df 86 fHistEtaPhi = new TH2F("fHistEtapHI","fHistEtaPhi;#eta;#varphi",100,-3.,3.,100.,0.,TMath::TwoPi());
72978588 87 fOutput->Add(fHistEtaPhi);
88
e6f3b167 89 fHistTrials = new TH1F("fHistTrials", "fHistTrials", 1, 0, 1);
90 fHistTrials->GetYaxis()->SetTitle("trials");
91 fOutput->Add(fHistTrials);
92
93 fHistXsection = new TProfile("fHistXsection", "fHistXsection", 1, 0, 1);
94 fHistXsection->GetYaxis()->SetTitle("xsection");
95 fOutput->Add(fHistXsection);
96
97 fHistPtHard = new TH1F("fHistPtHard", "fHistPtHard", 500, 0., 500.);
98 fHistPtHard->GetXaxis()->SetTitle("p_{T,hard} (GeV/c)");
99 fHistPtHard->GetYaxis()->SetTitle("counts");
100 fOutput->Add(fHistPtHard);
101
102 PostData(1, fOutput);
103}
104
6deabc32 105//________________________________________________________________________
d63c8c07 106Bool_t AliJetEmbeddingFromGenTask::ExecOnce()
6deabc32 107{
bd2cf60a 108 // Exec only once.
6deabc32 109
bd2cf60a 110 if (!gAlice) {
111 new AliRun("gAlice","The ALICE Off-line Simulation Framework");
112 delete gRandom;
113 gRandom = new TRandom3(0);
114 }
115
116 TFolder *folder = new TFolder(GetName(),GetName());
117 AliRunLoader *rl = new AliRunLoader(folder);
c2e16a2c 118 gAlice->SetRunLoader(rl);
bd2cf60a 119 rl->MakeHeader();
120 rl->MakeStack();
121 AliStack *stack = rl->Stack();
122 fGen->SetStack(stack);
123 fGen->Init();
124
806ada48 125 if (!(InputEvent()->FindListObject(fTracksName))) {
bd2cf60a 126 fOutTracks = new TClonesArray("AliPicoTrack", 1000);
127 fOutTracks->SetName(fTracksName);
884c6dab 128 InputEvent()->AddObject(fOutTracks);
bd2cf60a 129 fNTracks = 0;
6deabc32 130 }
cfa7b4df 131
0187d9d1 132 if(!fPartonInfoName.IsNull()) {
133 if (!(InputEvent()->FindListObject(fPartonInfoName))) {
134 fStackPartonInfo = new AliStackPartonInfo("PartonsInfo");
135 fStackPartonInfo->SetName(fPartonInfoName);
136 InputEvent()->AddObject(fStackPartonInfo);
137 }
cfa7b4df 138 }
d63c8c07 139 return kTRUE;
6deabc32 140}
141
142//________________________________________________________________________
143void AliJetEmbeddingFromGenTask::Run()
144{
145 // Embed particles.
146
bd2cf60a 147 if (fCopyArray)
148 CopyTracks();
f0134962 149 AliPythiaRndm::SetPythiaRandom(new TRandom3());
150 AliPythiaRndm::GetPythiaRandom()->SetSeed(clock()+gSystem->GetPid());
6deabc32 151 AliStack *stack = fGen->GetStack();
bd2cf60a 152 stack->Reset();
153 fGen->Generate();
6deabc32 154 const Int_t nprim = stack->GetNprimary();
243ce6d2 155 // reject if partons are missing from stack for some reason
156 if(nprim < 8) return;
0187d9d1 157 if(fStackPartonInfo) {
158 TParticle *part6 = stack->Particle(6);
159 TParticle *part7 = stack->Particle(7);
160
161 fStackPartonInfo->SetPartonFlag6(TMath::Abs(part6->GetPdgCode()));
162 fStackPartonInfo->SetPartonPt6(part6->Pt());
163 fStackPartonInfo->SetPartonEta6(part6->Eta());
164 fStackPartonInfo->SetPartonPhi6(part6->Phi());
165
166 fStackPartonInfo->SetPartonFlag7(TMath::Abs(part7->GetPdgCode()));
167 fStackPartonInfo->SetPartonPt7(part7->Pt());
168 fStackPartonInfo->SetPartonEta7(part7->Eta());
169 fStackPartonInfo->SetPartonPhi7(part7->Phi());
170 }
171
6deabc32 172 for (Int_t i=0;i<nprim;++i) {
bd2cf60a 173 if (!stack->IsPhysicalPrimary(i))
174 continue;
6deabc32 175 TParticle *part = stack->Particle(i);
bd2cf60a 176 TParticlePDG *pdg = part->GetPDG(1);
177 if (!pdg)
178 continue;
179 Int_t c = (Int_t)(TMath::Abs(pdg->Charge()));
72978588 180 if (fChargedOnly && c==0) continue;
bd2cf60a 181 Double_t pt = part->Pt();
182 Double_t eta = part->Eta();
183 Double_t phi = part->Phi();
184 if (eta<fEtaMin)
185 continue;
186 if (eta>fEtaMax)
187 continue;
188 if (phi<fPhiMin)
189 continue;
190 if (phi>fPhiMax)
191 continue;
192 if (pt<fPtMin)
193 continue;
194 if (pt>fPtMax)
195 continue;
4d3b366f 196 Double_t mass = part->GetMass();
197 if(fMassless) mass = 0.;
8d2d2145 198 fHistPt->Fill(pt);
72978588 199 fHistEtaPhi->Fill(eta,phi);
4d3b366f 200 AddTrack(pt, eta, phi,0,0,0,0,0,0,c,mass);
6deabc32 201 }
e6f3b167 202
203 FillPythiaHistograms();
204}
205
206//________________________________________________________________________
207void AliJetEmbeddingFromGenTask::FillPythiaHistograms() {
208 //Get PYTHIA info: pt-hard, x-section, trials
209
210 if (!fQAhistos)
211 return;
212
213 AliRunLoader *rl = AliRunLoader::Instance();
214 AliGenPythiaEventHeader *genPH = dynamic_cast<AliGenPythiaEventHeader*>(rl->GetHeader()->GenEventHeader());
215 if(genPH) {
e6f3b167 216 Float_t xsec = genPH->GetXsection();
217 Int_t trials = genPH->Trials();
218 Float_t pthard = genPH->GetPtHard();
219
220 fHistXsection->Fill(0.5,xsec);
221 fHistTrials->Fill(0.5,trials);
222 fHistPtHard->Fill(pthard);
223 }
6deabc32 224}