]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/EMCALJetTasks/AliJetEmbeddingTask.cxx
fix from Salvatore
[u/mrichter/AliRoot.git] / PWGGA / EMCALJetTasks / AliJetEmbeddingTask.cxx
CommitLineData
44629b14 1// $Id$
2//
3// Jet embedding task.
4//
5// Author: Salvatore Aiola, Constantin Loizides
6
7#include <TClonesArray.h>
8#include <TLorentzVector.h>
9#include <TRandom3.h>
10
11#include "AliAnalysisManager.h"
12#include "AliVEvent.h"
13#include "AliVCluster.h"
14#include "AliEMCALDigit.h"
15#include "AliEMCALRecPoint.h"
16#include "AliPicoTrack.h"
17#include "AliEMCALGeometry.h"
18#include "AliLog.h"
19
20#include "AliJetEmbeddingTask.h"
21
22ClassImp(AliJetEmbeddingTask)
23
24//________________________________________________________________________
25AliJetEmbeddingTask::AliJetEmbeddingTask() :
26 AliAnalysisTaskSE("AliJetEmbeddingTask"),
27 fGeomName(),
28 fTracksName(),
29 fOutTracksName(),
30 fCaloName(),
31 fOutCaloName(),
32 fEtaMin(-1),
33 fEtaMax(1),
34 fPhiMin(0),
35 fPhiMax(TMath::Pi() * 2),
36 fPtMin(0),
37 fPtMax(0),
38 fCopyArray(kTRUE),
39 fNEmbClusters(0),
40 fNEmbTracks(0),
41 fGeom(0),
42 fClusters(0),
43 fOutClusters(0),
44 fTracks(0),
45 fOutTracks(0)
46{
47 // Default constructor.
48}
49
50//________________________________________________________________________
51AliJetEmbeddingTask::AliJetEmbeddingTask(const char *name) :
52 AliAnalysisTaskSE(name),
53 fGeomName(""),
54 fTracksName("PicoTracks"),
55 fOutTracksName("PicoTracksEmbedded"),
56 fCaloName("CaloClustersCorr"),
57 fOutCaloName("CaloClustersCorrEmbedded"),
58 fEtaMin(-1),
59 fEtaMax(1),
60 fPhiMin(0),
61 fPhiMax(TMath::Pi() * 2),
62 fPtMin(50),
63 fPtMax(60),
64 fCopyArray(kTRUE),
65 fNEmbClusters(0),
66 fNEmbTracks(1),
67 fGeom(0),
68 fClusters(0),
69 fOutClusters(0),
70 fTracks(0),
71 fOutTracks(0)
72{
73 // Standard constructor.
74
75}
76
77//________________________________________________________________________
78AliJetEmbeddingTask::~AliJetEmbeddingTask()
79{
80 // Destructor
81}
82
83//________________________________________________________________________
84void AliJetEmbeddingTask::Init()
85{
86 // Init task.
87
88 if (fNEmbTracks > 0) {
89 fTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
90
91 if (strcmp(fTracks->GetClass()->GetName(), "AliPicoTrack")) {
92 AliError("Can only embed PicoTracks!");
93 return;
94 }
95
96 if (!fTracks) {
97 AliError(Form("Couldn't retrieve tracks with name %s!", fTracksName.Data()));
98 return;
99 }
100
101 if (!fOutTracks) {
102 fOutTracksName = fTracksName;
103 if (fCopyArray) {
104 fOutTracksName += "Embedded";
105 fOutTracks = new TClonesArray(*fTracks);
106 fOutTracks->SetName(fOutTracksName);
107 }
108 else {
109 fOutTracks = fTracks;
110 }
111 }
112
113 if (fCopyArray) {
114 if (!(InputEvent()->FindListObject(fOutTracksName)))
115 InputEvent()->AddObject(fOutTracks);
116 fOutTracks->Clear();
117 }
118 }
119
120 if (fNEmbClusters > 0) {
121 fClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fCaloName));
122
123 if (!fClusters) {
124 AliError(Form("Couldn't retrieve clusters with name %s!", fCaloName.Data()));
125 return;
126 }
127
128 if (!fOutClusters) {
129 fOutCaloName = fCaloName;
130 if (fCopyArray) {
131 fOutCaloName += "Embedded";
132 fOutClusters = new TClonesArray(*fClusters);
133 fOutClusters->SetName(fOutCaloName);
134 }
135 else {
136 fOutClusters = fClusters;
137 }
138 }
139
140 if (fCopyArray) {
141 if (!(InputEvent()->FindListObject(fOutCaloName)))
142 InputEvent()->AddObject(fOutClusters);
143 fOutClusters->Clear();
144 }
145 }
146
808ba0db 147 if (!fGeom) {
148 if (fGeomName.Length()>0) {
149 fGeom = AliEMCALGeometry::GetInstance(fGeomName);
150 if (!fGeom)
151 AliError(Form("Could not get geometry with name %s!", fGeomName.Data()));
152 } else {
153 fGeom = AliEMCALGeometry::GetInstance();
154 if (!fGeom)
155 AliError("Could not get default geometry!");
44629b14 156 }
808ba0db 157 }
44629b14 158}
159
160//________________________________________________________________________
161void AliJetEmbeddingTask::Embed()
162{
163 // Embed particles.
164
165 if (fNEmbClusters > 0 && fOutClusters) {
44629b14 166 const Int_t nClusters = fOutClusters->GetEntriesFast();
167 TClonesArray digits("AliEMCALDigit", 1);
d69437c0 168 for (Int_t i = 0; i < fNEmbClusters; ++i) {
44629b14 169 Double_t pt = gRandom->Rndm() * (fPtMax - fPtMin) + fPtMin;
170 Double_t eta = gRandom->Rndm() * (fEtaMax - fEtaMin) + fEtaMin;
171 Double_t phi = gRandom->Rndm() * (fPhiMax - fPhiMin) + fPhiMin;
172
173 TLorentzVector nPart;
174 nPart.SetPtEtaPhiM(pt, eta, phi, 0);
175 Double_t e = nPart.E();
176
177 Int_t absId = 0;
178 fGeom->GetAbsCellIdFromEtaPhi(eta, phi, absId);
808ba0db 179
180 if (absId == -1) {
181 AliWarning(Form("Unable to embed cluster in eta = %f, phi = %f!"
182 " Maybe the eta-phi range is not inside the EMCal acceptance (eta = [%f, %f], phi = [%f, %f])",
183 eta, phi, fEtaMin, fEtaMax, fPhiMin, fPhiMax));
184 continue;
185 }
44629b14 186
187 AliEMCALDigit *digit = static_cast<AliEMCALDigit*>(digits.New(0));
188 digit->SetId(absId);
189 digit->SetIndexInList(0);
190 digit->SetType(AliEMCALDigit::kHG);
191 digit->SetAmplitude(e);
192
808ba0db 193 AliEMCALRecPoint recPoint("");
d69437c0 194 recPoint.AddDigit(*digit, e, kFALSE);
195 recPoint.EvalGlobalPosition(0, &digits);
44629b14 196
197 TVector3 gpos;
d69437c0 198 recPoint.GetGlobalPosition(gpos);
44629b14 199 Float_t g[3];
200 gpos.GetXYZ(g);
201
202 AliVCluster *cluster = static_cast<AliVCluster*>(fOutClusters->New(nClusters + i));
203 cluster->SetType(AliVCluster::kEMCALClusterv1);
d69437c0 204 cluster->SetE(recPoint.GetEnergy());
44629b14 205 cluster->SetPosition(g);
206 cluster->SetNCells(1);
207 UShort_t shortAbsId = absId;
208 cluster->SetCellsAbsId(&shortAbsId);
808ba0db 209 Double32_t fract = 1;
210 cluster->SetCellsAmplitudeFraction(&fract);
44629b14 211 cluster->SetID(nClusters + i);
212 cluster->SetEmcCpvDistance(-1);
213 cluster->SetChi2(100); // MC flag!
214 }
215 }
216
217 if (fNEmbTracks > 0 && fOutTracks) {
218 Int_t nTracks = fOutTracks->GetEntriesFast();
d69437c0 219 for (Int_t i = 0; i < fNEmbTracks; ++i) {
44629b14 220 Double_t pt = gRandom->Rndm() * (fPtMax - fPtMin) + fPtMin;
221 Double_t eta = gRandom->Rndm() * (fEtaMax - fEtaMin) + fEtaMin;
222 Double_t phi = gRandom->Rndm() * (fPhiMax - fPhiMin) + fPhiMin;
223
224 new ((*fOutTracks)[nTracks + i]) AliPicoTrack(pt,
225 eta,
226 phi,
227 1,
228 100, // MC flag!
229 0,
230 0,
231 kFALSE);
232 }
233 }
234}
235
236//________________________________________________________________________
237void AliJetEmbeddingTask::UserExec(Option_t *)
238{
239 // Execute per event.
240
241 Init();
242
243 Embed();
244}