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) {
167 const Int_t nClusters = fOutClusters->GetEntriesFast();
168 TClonesArray digits("AliEMCALDigit", 1);
170 for (Int_t i = 0; i < fNEmbClusters; i++) {
171 Double_t pt = gRandom->Rndm() * (fPtMax - fPtMin) + fPtMin;
172 Double_t eta = gRandom->Rndm() * (fEtaMax - fEtaMin) + fEtaMin;
173 Double_t phi = gRandom->Rndm() * (fPhiMax - fPhiMin) + fPhiMin;
175 TLorentzVector nPart;
176 nPart.SetPtEtaPhiM(pt, eta, phi, 0);
177 Double_t e = nPart.E();
180 fGeom->GetAbsCellIdFromEtaPhi(eta, phi, absId);
182 AliEMCALDigit *digit = static_cast<AliEMCALDigit*>(digits.New(0));
184 digit->SetIndexInList(0);
185 digit->SetType(AliEMCALDigit::kHG);
186 digit->SetAmplitude(e);
188 AliEMCALRecPoint *recPoint = new AliEMCALRecPoint();
189 recPoint->AddDigit(*digit, e, kFALSE);
190 recPoint->EvalGlobalPosition(0, &digits);
193 recPoint->GetGlobalPosition(gpos);
197 AliVCluster *cluster = static_cast<AliVCluster*>(fOutClusters->New(nClusters + i));
198 cluster->SetType(AliVCluster::kEMCALClusterv1);
199 cluster->SetE(recPoint->GetEnergy());
200 cluster->SetPosition(g);
201 cluster->SetNCells(1);
202 UShort_t shortAbsId = absId;
203 cluster->SetCellsAbsId(&shortAbsId);
204 cluster->SetCellsAmplitudeFraction(NULL);
205 cluster->SetID(nClusters + i);
206 cluster->SetEmcCpvDistance(-1);
207 cluster->SetChi2(100); // MC flag!
211 if (fNEmbTracks > 0 && fOutTracks) {
212 Int_t nTracks = fOutTracks->GetEntriesFast();
214 for (Int_t i = 0; i < fNEmbTracks; i++) {
215 Double_t pt = gRandom->Rndm() * (fPtMax - fPtMin) + fPtMin;
216 Double_t eta = gRandom->Rndm() * (fEtaMax - fEtaMin) + fEtaMin;
217 Double_t phi = gRandom->Rndm() * (fPhiMax - fPhiMin) + fPhiMin;
219 new ((*fOutTracks)[nTracks + i]) AliPicoTrack(pt,
231 //________________________________________________________________________
232 void AliJetEmbeddingTask::UserExec(Option_t *)
234 // Execute per event.