f970146670124c7118597da73c46703ea2458ea7
[u/mrichter/AliRoot.git] / PWG / EMCAL / AliEmcalParticleMaker.cxx
1 // $Id$
2 //
3 // Class to make emcal particles in AOD/ESD events.
4 //
5 // Author: S.Aiola
6
7 #include <TClonesArray.h>
8
9 #include "AliLog.h"
10 #include "AliVTrack.h"
11 #include "AliVCluster.h"
12 #include "AliEmcalParticle.h"
13
14 #include "AliEmcalParticleMaker.h"
15
16 ClassImp(AliEmcalParticleMaker)
17
18 //________________________________________________________________________
19 AliEmcalParticleMaker::AliEmcalParticleMaker() : 
20   AliAnalysisTaskEmcal("AliEmcalParticleMaker",kFALSE),
21   fTracksOutName("EmcalTracks"),
22   fCaloOutName("EmcalClusters"),
23   fTracksOut(0),
24   fCaloClustersOut(0)
25 {
26   // Constructor.
27 }
28
29 //________________________________________________________________________
30 AliEmcalParticleMaker::AliEmcalParticleMaker(const char *name) : 
31   AliAnalysisTaskEmcal(name,kFALSE),
32   fTracksOutName("EmcalTracks"),
33   fCaloOutName("EmcalClusters"),
34   fTracksOut(0),
35   fCaloClustersOut(0)
36 {
37   // Constructor.
38
39 }
40
41 //________________________________________________________________________
42 AliEmcalParticleMaker::~AliEmcalParticleMaker()
43 {
44   // Destructor.
45 }
46
47 //________________________________________________________________________
48 void AliEmcalParticleMaker::UserCreateOutputObjects()
49 {
50   // Create my user objects.
51
52   fTracksOut = new TClonesArray("AliEmcalParticle");
53   fTracksOut->SetName(fTracksOutName);
54
55   fCaloClustersOut = new TClonesArray("AliEmcalParticle");
56   fCaloClustersOut->SetName(fCaloOutName);
57 }
58
59 //________________________________________________________________________
60 Bool_t AliEmcalParticleMaker::Run() 
61 {
62   // Create th emcal particles
63
64   // add tracks to event if not yet there
65   fTracksOut->Delete();
66   if (!(InputEvent()->FindListObject(fTracksOutName))) {
67     InputEvent()->AddObject(fTracksOut);
68   }
69   fCaloClustersOut->Delete();
70   if (!(InputEvent()->FindListObject(fCaloOutName))) {
71     InputEvent()->AddObject(fCaloClustersOut);
72   }
73
74   // clear container (normally a null operation as the event should clean it already)
75   fTracksOut->Delete();
76   fCaloClustersOut->Delete();
77
78   if (fTracks) {
79     // loop over tracks
80     const Int_t Ntracks = fTracks->GetEntries();
81     for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
82       
83       AliVTrack *track = dynamic_cast<AliVTrack*>(fTracks->At(iTracks));
84       new ((*fTracksOut)[iTracks]) AliEmcalParticle(track, iTracks);
85     }
86   }
87
88   if (fCaloClusters) {
89     // loop over clusters
90     const Int_t Nclusters = fCaloClusters->GetEntries();
91     for (Int_t iClusters = 0; iClusters < Nclusters; ++iClusters) {
92       
93       AliVCluster *cluster = dynamic_cast<AliVCluster*>(fCaloClusters->At(iClusters));
94       new ((*fCaloClustersOut)[iClusters]) AliEmcalParticle(cluster, iClusters, fVertex[0], fVertex[1], fVertex[2]);
95     }
96   }
97   return kTRUE;
98 }