5 // Author: Salvatore Aiola, Constantin Loizides
7 #include <TClonesArray.h>
8 #include <TLorentzVector.h>
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"
20 #include "AliJetEmbeddingTask.h"
22 ClassImp(AliJetEmbeddingTask)
24 //________________________________________________________________________
25 AliJetEmbeddingTask::AliJetEmbeddingTask() :
26 AliAnalysisTaskSE("AliJetEmbeddingTask"),
35 fPhiMax(TMath::Pi() * 2),
47 // Default constructor.
50 //________________________________________________________________________
51 AliJetEmbeddingTask::AliJetEmbeddingTask(const char *name) :
52 AliAnalysisTaskSE(name),
54 fTracksName("PicoTracks"),
55 fOutTracksName("PicoTracksEmbedded"),
56 fCaloName("CaloClustersCorr"),
57 fOutCaloName("CaloClustersCorrEmbedded"),
61 fPhiMax(TMath::Pi() * 2),
73 // Standard constructor.
77 //________________________________________________________________________
78 AliJetEmbeddingTask::~AliJetEmbeddingTask()
83 //________________________________________________________________________
84 void AliJetEmbeddingTask::Init()
88 if (fNEmbTracks > 0) {
89 fTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
91 if (strcmp(fTracks->GetClass()->GetName(), "AliPicoTrack")) {
92 AliError("Can only embed PicoTracks!");
97 AliError(Form("Couldn't retrieve tracks with name %s!", fTracksName.Data()));
102 fOutTracksName = fTracksName;
104 fOutTracksName += "Embedded";
105 fOutTracks = new TClonesArray(*fTracks);
106 fOutTracks->SetName(fOutTracksName);
109 fOutTracks = fTracks;
114 if (!(InputEvent()->FindListObject(fOutTracksName)))
115 InputEvent()->AddObject(fOutTracks);
120 if (fNEmbClusters > 0) {
121 fClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fCaloName));
124 AliError(Form("Couldn't retrieve clusters with name %s!", fCaloName.Data()));
129 fOutCaloName = fCaloName;
131 fOutCaloName += "Embedded";
132 fOutClusters = new TClonesArray(*fClusters);
133 fOutClusters->SetName(fOutCaloName);
136 fOutClusters = fClusters;
141 if (!(InputEvent()->FindListObject(fOutCaloName)))
142 InputEvent()->AddObject(fOutClusters);
143 fOutClusters->Clear();
148 if (fGeomName.Length()>0) {
149 fGeom = AliEMCALGeometry::GetInstance(fGeomName);
151 AliError(Form("Could not get geometry with name %s!", fGeomName.Data()));
153 fGeom = AliEMCALGeometry::GetInstance();
155 AliError("Could not get default geometry!");
160 //________________________________________________________________________
161 void AliJetEmbeddingTask::Embed()
165 if (fNEmbClusters > 0 && fOutClusters) {
166 const Int_t nClusters = fOutClusters->GetEntriesFast();
167 TClonesArray digits("AliEMCALDigit", 1);
168 for (Int_t i = 0; i < fNEmbClusters; ++i) {
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;
173 TLorentzVector nPart;
174 nPart.SetPtEtaPhiM(pt, eta, phi, 0);
175 Double_t e = nPart.E();
178 fGeom->GetAbsCellIdFromEtaPhi(eta, phi, absId);
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));
187 AliEMCALDigit *digit = static_cast<AliEMCALDigit*>(digits.New(0));
189 digit->SetIndexInList(0);
190 digit->SetType(AliEMCALDigit::kHG);
191 digit->SetAmplitude(e);
193 AliEMCALRecPoint recPoint("");
194 recPoint.AddDigit(*digit, e, kFALSE);
195 recPoint.EvalGlobalPosition(0, &digits);
198 recPoint.GetGlobalPosition(gpos);
202 AliVCluster *cluster = static_cast<AliVCluster*>(fOutClusters->New(nClusters + i));
203 cluster->SetType(AliVCluster::kEMCALClusterv1);
204 cluster->SetE(recPoint.GetEnergy());
205 cluster->SetPosition(g);
206 cluster->SetNCells(1);
207 UShort_t shortAbsId = absId;
208 cluster->SetCellsAbsId(&shortAbsId);
209 Double32_t fract = 1;
210 cluster->SetCellsAmplitudeFraction(&fract);
211 cluster->SetID(nClusters + i);
212 cluster->SetEmcCpvDistance(-1);
213 cluster->SetChi2(100); // MC flag!
217 if (fNEmbTracks > 0 && fOutTracks) {
218 Int_t nTracks = fOutTracks->GetEntriesFast();
219 for (Int_t i = 0; i < fNEmbTracks; ++i) {
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;
224 new ((*fOutTracks)[nTracks + i]) AliPicoTrack(pt,
236 //________________________________________________________________________
237 void AliJetEmbeddingTask::UserExec(Option_t *)
239 // Execute per event.