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);
180 AliEMCALDigit *digit = static_cast<AliEMCALDigit*>(digits.New(0));
182 digit->SetIndexInList(0);
183 digit->SetType(AliEMCALDigit::kHG);
184 digit->SetAmplitude(e);
186 AliEMCALRecPoint recPoint;
187 recPoint.AddDigit(*digit, e, kFALSE);
188 recPoint.EvalGlobalPosition(0, &digits);
191 recPoint.GetGlobalPosition(gpos);
195 AliVCluster *cluster = static_cast<AliVCluster*>(fOutClusters->New(nClusters + i));
196 cluster->SetType(AliVCluster::kEMCALClusterv1);
197 cluster->SetE(recPoint.GetEnergy());
198 cluster->SetPosition(g);
199 cluster->SetNCells(1);
200 UShort_t shortAbsId = absId;
201 cluster->SetCellsAbsId(&shortAbsId);
202 cluster->SetCellsAmplitudeFraction(NULL);
203 cluster->SetID(nClusters + i);
204 cluster->SetEmcCpvDistance(-1);
205 cluster->SetChi2(100); // MC flag!
209 if (fNEmbTracks > 0 && fOutTracks) {
210 Int_t nTracks = fOutTracks->GetEntriesFast();
211 for (Int_t i = 0; i < fNEmbTracks; ++i) {
212 Double_t pt = gRandom->Rndm() * (fPtMax - fPtMin) + fPtMin;
213 Double_t eta = gRandom->Rndm() * (fEtaMax - fEtaMin) + fEtaMin;
214 Double_t phi = gRandom->Rndm() * (fPhiMax - fPhiMin) + fPhiMin;
216 new ((*fOutTracks)[nTracks + i]) AliPicoTrack(pt,
228 //________________________________________________________________________
229 void AliJetEmbeddingTask::UserExec(Option_t *)
231 // Execute per event.