3 // Class to make emcal particles in AOD/ESD events.
7 #include <TClonesArray.h>
10 #include "AliVTrack.h"
11 #include "AliVCluster.h"
12 #include "AliEmcalParticle.h"
14 #include "AliEmcalParticleMaker.h"
16 ClassImp(AliEmcalParticleMaker)
18 //________________________________________________________________________
19 AliEmcalParticleMaker::AliEmcalParticleMaker() :
20 AliAnalysisTaskEmcal("AliEmcalParticleMaker",kFALSE),
21 fTracksOutName("EmcalTracks"),
22 fCaloOutName("EmcalClusters"),
29 //________________________________________________________________________
30 AliEmcalParticleMaker::AliEmcalParticleMaker(const char *name) :
31 AliAnalysisTaskEmcal(name,kFALSE),
32 fTracksOutName("EmcalTracks"),
33 fCaloOutName("EmcalClusters"),
40 //________________________________________________________________________
41 AliEmcalParticleMaker::~AliEmcalParticleMaker()
46 //________________________________________________________________________
47 void AliEmcalParticleMaker::ExecOnce()
51 AliAnalysisTaskEmcal::ExecOnce();
56 if (!fTracksOutName.IsNull()) {
57 fTracksOut = new TClonesArray("AliEmcalParticle");
58 fTracksOut->SetName(fTracksOutName);
59 AddObjectToEvent(fTracksOut);
62 if (!fCaloOutName.IsNull()) {
63 fCaloClustersOut = new TClonesArray("AliEmcalParticle");
64 fCaloClustersOut->SetName(fCaloOutName);
65 AddObjectToEvent(fCaloClustersOut);
69 //________________________________________________________________________
70 Bool_t AliEmcalParticleMaker::Run()
72 // Create the emcal particles
74 if (fTracks && fTracksOut) {
75 // clear container (normally a null operation as the event should clean it already)
77 const Int_t Ntracks = fTracks->GetEntries();
78 for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
79 AliVTrack *track = static_cast<AliVTrack*>(fTracks->At(iTracks));
80 AliEmcalParticle *ep = new ((*fTracksOut)[iTracks]) AliEmcalParticle(track, iTracks);
82 ep->SetMatchedPtr(fCaloClusters);
86 if (fCaloClusters && fCaloClustersOut) {
87 // clear container (normally a null operation as the event should clean it already)
88 fCaloClustersOut->Delete();
89 const Int_t Nclusters = fCaloClusters->GetEntries();
90 for (Int_t iClusters = 0, iN=0; iClusters < Nclusters; ++iClusters) {
91 AliVCluster *cluster = static_cast<AliVCluster*>(fCaloClusters->At(iClusters));
92 /* Commented because for simplicity prefer to keep indices aligned with clusters (CL)
93 if (!cluster->IsEMCAL()) continue;
95 AliEmcalParticle *ep = new ((*fCaloClustersOut)[iN++]) AliEmcalParticle(cluster, iClusters, fVertex[0], fVertex[1], fVertex[2]);
97 ep->SetMatchedPtr(fTracks);