]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/EMCAL/AliEmcalPicoTrackMaker.cxx
cosmetics
[u/mrichter/AliRoot.git] / PWG / EMCAL / AliEmcalPicoTrackMaker.cxx
1 // $Id$
2 //
3 // Class to make PicoTracks in AOD/ESD events.
4 //
5 // Author: S.Aiola, C.Loizides
6
7 #include <TClonesArray.h>
8 #include <TRandom3.h>
9 #include "AliAODEvent.h"
10 #include "AliAODTrack.h"
11 #include "AliAnalysisManager.h"
12 #include "AliESDtrack.h"
13 #include "AliESDtrackCuts.h"
14 #include "AliEmcalPicoTrackMaker.h"
15 #include "AliLog.h"
16 #include "AliPicoTrack.h"
17 #include "AliVTrack.h"
18
19 ClassImp(AliEmcalPicoTrackMaker)
20
21 //________________________________________________________________________
22 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() : 
23   AliAnalysisTaskSE("AliEmcalPicoTrackMaker"),
24   fTracksOutName("PicoTracks"),
25   fTracksInName("tracks"),
26   fMinTrackPt(0),
27   fMaxTrackPt(1000),
28   fMinTrackEta(-10),
29   fMaxTrackEta(10),
30   fMinTrackPhi(-10),
31   fMaxTrackPhi(10),
32   fTrackEfficiency(1),
33   fTracksIn(0),
34   fTracksOut(0)
35 {
36   // Constructor.
37
38   fAODfilterBits[0] = -1;
39   fAODfilterBits[1] = -1;
40 }
41
42 //________________________________________________________________________
43 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) : 
44   AliAnalysisTaskSE(name),
45   fTracksOutName("PicoTracks"),
46   fTracksInName("tracks"),
47   fMinTrackPt(0),
48   fMaxTrackPt(1000),
49   fMinTrackEta(-10),
50   fMaxTrackEta(10),
51   fMinTrackPhi(-10),
52   fMaxTrackPhi(10),
53   fTrackEfficiency(1),
54   fTracksIn(0),
55   fTracksOut(0)
56 {
57   // Constructor.
58
59   fAODfilterBits[0] = -1;
60   fAODfilterBits[1] = -1;
61   fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
62 }
63
64 //________________________________________________________________________
65 AliEmcalPicoTrackMaker::~AliEmcalPicoTrackMaker()
66 {
67   // Destructor.
68 }
69
70 //________________________________________________________________________
71 void AliEmcalPicoTrackMaker::UserCreateOutputObjects()
72 {
73   // Create my user objects.
74
75   fTracksOut = new TClonesArray("AliPicoTrack");
76   fTracksOut->SetName(fTracksOutName);
77 }
78
79 //________________________________________________________________________
80 void AliEmcalPicoTrackMaker::UserExec(Option_t *) 
81 {
82   // Main loop, called for each event.
83
84   AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
85   if (!am) {
86     AliError("Manager zero, returning");
87     return;
88   }
89
90   // retrieve tracks from input.
91   if (!fTracksIn) { 
92     fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
93     if (!fTracksIn) {
94       AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data())); 
95       return;
96     }
97     if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
98       AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data())); 
99       return;
100     }
101   }
102
103   // add tracks to event if not yet there
104   fTracksOut->Delete();
105   if (!(InputEvent()->FindListObject(fTracksOutName))) {
106     InputEvent()->AddObject(fTracksOut);
107   }
108
109   // loop over tracks
110   const Int_t Ntracks = fTracksIn->GetEntriesFast();
111   for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
112
113     AliVTrack *track = static_cast<AliVTrack*>(fTracksIn->At(iTracks));
114
115     if (!track)
116       continue;
117
118     if (track->Pt() > fMaxTrackPt || track->Pt() < fMinTrackPt)
119       continue;
120
121     if (track->Eta() < fMinTrackEta || track->Eta() > fMaxTrackEta || 
122         track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi)
123       continue;
124
125     if (fTrackEfficiency < 1) {
126       Double_t r = gRandom->Rndm();
127       if (fTrackEfficiency < r) 
128         continue;
129     }
130
131     Bool_t isEmc = kFALSE;
132     if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 && 
133         track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() &&
134         track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad())
135       isEmc = kTRUE;
136
137     AliPicoTrack *picotrack = new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(), 
138                                                                      track->Eta(), 
139                                                                      track->Phi(), 
140                                                                      track->Charge(), 
141                                                                      track->GetLabel(),
142                                                                      AliPicoTrack::GetTrackType(track),
143                                                                      track->GetTrackEtaOnEMCal(), 
144                                                                      track->GetTrackPhiOnEMCal(), 
145                                                                      track->GetTrackPtOnEMCal(), 
146                                                                      isEmc);
147     picotrack->SetTrack(track);
148     ++nacc;
149   }
150 }