]>
Commit | Line | Data |
---|---|---|
980821ba | 1 | // $Id$ |
680855e5 | 2 | // |
3 | // Class to make PicoTracks in AOD/ESD events. | |
4 | // | |
cd231d42 | 5 | // Author: S.Aiola, C.Loizides |
680855e5 | 6 | |
7 | #include <TClonesArray.h> | |
11d18b51 | 8 | #include <TRandom3.h> |
a070db7d | 9 | #include "AliAODEvent.h" |
680855e5 | 10 | #include "AliAODTrack.h" |
a070db7d | 11 | #include "AliAnalysisManager.h" |
680855e5 | 12 | #include "AliESDtrack.h" |
13 | #include "AliESDtrackCuts.h" | |
cc67ea22 | 14 | #include "AliEmcalPicoTrackMaker.h" |
680855e5 | 15 | #include "AliLog.h" |
a070db7d | 16 | #include "AliPicoTrack.h" |
17 | #include "AliVTrack.h" | |
eb556d0c | 18 | #include "AliAODMCParticle.h" |
893907a5 | 19 | #include "AliNamedArrayI.h" |
680855e5 | 20 | |
21 | ClassImp(AliEmcalPicoTrackMaker) | |
22 | ||
23 | //________________________________________________________________________ | |
24 | AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() : | |
25 | AliAnalysisTaskSE("AliEmcalPicoTrackMaker"), | |
680855e5 | 26 | fTracksOutName("PicoTracks"), |
27 | fTracksInName("tracks"), | |
eb556d0c | 28 | fMCParticlesName("mcparticles"), |
9733b37f | 29 | fMinTrackPt(0), |
11d18b51 | 30 | fMaxTrackPt(1000), |
d2343e15 | 31 | fMinTrackEta(-10), |
32 | fMaxTrackEta(10), | |
9733b37f | 33 | fMinTrackPhi(-10), |
34 | fMaxTrackPhi(10), | |
11d18b51 | 35 | fTrackEfficiency(1), |
eb556d0c | 36 | fCopyMCFlag(kFALSE), |
680855e5 | 37 | fTracksIn(0), |
eb556d0c | 38 | fTracksOut(0), |
39 | fMCParticles(0), | |
893907a5 | 40 | fMCParticlesMap(0), |
eb556d0c | 41 | fInit(kFALSE) |
680855e5 | 42 | { |
43 | // Constructor. | |
ab292aef | 44 | |
1187666b | 45 | fAODfilterBits[0] = -1; |
46 | fAODfilterBits[1] = -1; | |
680855e5 | 47 | } |
48 | ||
49 | //________________________________________________________________________ | |
50 | AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) : | |
a070db7d | 51 | AliAnalysisTaskSE(name), |
680855e5 | 52 | fTracksOutName("PicoTracks"), |
53 | fTracksInName("tracks"), | |
eb556d0c | 54 | fMCParticlesName("mcparticles"), |
9733b37f | 55 | fMinTrackPt(0), |
11d18b51 | 56 | fMaxTrackPt(1000), |
d2343e15 | 57 | fMinTrackEta(-10), |
58 | fMaxTrackEta(10), | |
9733b37f | 59 | fMinTrackPhi(-10), |
60 | fMaxTrackPhi(10), | |
11d18b51 | 61 | fTrackEfficiency(1), |
eb556d0c | 62 | fCopyMCFlag(kFALSE), |
680855e5 | 63 | fTracksIn(0), |
eb556d0c | 64 | fTracksOut(0), |
65 | fMCParticles(0), | |
893907a5 | 66 | fMCParticlesMap(0), |
eb556d0c | 67 | fInit(kFALSE) |
680855e5 | 68 | { |
69 | // Constructor. | |
70 | ||
1187666b | 71 | fAODfilterBits[0] = -1; |
72 | fAODfilterBits[1] = -1; | |
680855e5 | 73 | fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks"; |
74 | } | |
75 | ||
76 | //________________________________________________________________________ | |
77 | AliEmcalPicoTrackMaker::~AliEmcalPicoTrackMaker() | |
78 | { | |
a070db7d | 79 | // Destructor. |
680855e5 | 80 | } |
81 | ||
82 | //________________________________________________________________________ | |
83 | void AliEmcalPicoTrackMaker::UserCreateOutputObjects() | |
84 | { | |
a070db7d | 85 | // Create my user objects. |
680855e5 | 86 | } |
87 | ||
88 | //________________________________________________________________________ | |
89 | void AliEmcalPicoTrackMaker::UserExec(Option_t *) | |
90 | { | |
91 | // Main loop, called for each event. | |
92 | ||
eb556d0c | 93 | if (!fInit) { |
e44e8726 | 94 | fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName)); |
95 | if (!fTracksIn) { | |
96 | AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data())); | |
97 | return; | |
98 | } | |
99 | if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) { | |
100 | AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data())); | |
101 | return; | |
102 | } | |
eb556d0c | 103 | |
104 | fTracksOut = new TClonesArray("AliPicoTrack"); | |
105 | fTracksOut->SetName(fTracksOutName); | |
106 | ||
107 | // add tracks to event if not yet there | |
108 | if (InputEvent()->FindListObject(fTracksOutName)) { | |
109 | AliFatal(Form("Object %s already present in the event!",fTracksOutName.Data())); | |
110 | } | |
111 | else { | |
112 | InputEvent()->AddObject(fTracksOut); | |
113 | } | |
114 | ||
115 | if (fCopyMCFlag) { | |
116 | fMCParticles = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fMCParticlesName)); | |
117 | if (!fMCParticles) { | |
118 | AliError(Form("Could not retrieve MC particles %s!", fMCParticlesName.Data())); | |
119 | } | |
120 | if (!fMCParticles->GetClass()->GetBaseClass("AliVParticle")) { | |
121 | AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fMCParticlesName.Data())); | |
122 | fMCParticles = 0; | |
123 | } | |
893907a5 | 124 | |
125 | TString mapName(fMCParticlesName); | |
126 | mapName += "_Map"; | |
127 | fMCParticlesMap = dynamic_cast<AliNamedArrayI*>(InputEvent()->FindListObject(mapName)); | |
eb556d0c | 128 | } |
129 | ||
130 | fInit = kTRUE; | |
a070db7d | 131 | } |
132 | ||
71c1dd76 | 133 | fTracksOut->Delete(); |
c4a9715d | 134 | |
a070db7d | 135 | // loop over tracks |
136 | const Int_t Ntracks = fTracksIn->GetEntriesFast(); | |
680855e5 | 137 | for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) { |
85fbcc1d | 138 | |
e44e8726 | 139 | AliVTrack *track = static_cast<AliVTrack*>(fTracksIn->At(iTracks)); |
85fbcc1d | 140 | |
a070db7d | 141 | if (!track) |
680855e5 | 142 | continue; |
85fbcc1d | 143 | |
9733b37f | 144 | if (track->Pt() > fMaxTrackPt || track->Pt() < fMinTrackPt) |
145 | continue; | |
146 | ||
147 | if (track->Eta() < fMinTrackEta || track->Eta() > fMaxTrackEta || | |
148 | track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi) | |
85fbcc1d | 149 | continue; |
11d18b51 | 150 | |
11d18b51 | 151 | if (fTrackEfficiency < 1) { |
152 | Double_t r = gRandom->Rndm(); | |
153 | if (fTrackEfficiency < r) | |
154 | continue; | |
155 | } | |
156 | ||
b3bef4aa | 157 | Bool_t isEmc = kFALSE; |
158 | if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 && | |
159 | track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() && | |
160 | track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad()) | |
161 | isEmc = kTRUE; | |
162 | ||
33a8056d | 163 | AliPicoTrack *picotrack = new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(), |
dac83212 | 164 | track->Eta(), |
165 | track->Phi(), | |
166 | track->Charge(), | |
167 | track->GetLabel(), | |
168 | AliPicoTrack::GetTrackType(track), | |
169 | track->GetTrackEtaOnEMCal(), | |
170 | track->GetTrackPhiOnEMCal(), | |
171 | track->GetTrackPtOnEMCal(), | |
172 | isEmc); | |
33a8056d | 173 | picotrack->SetTrack(track); |
eb556d0c | 174 | |
175 | if (fCopyMCFlag && track->GetLabel() != 0) { | |
176 | AliVParticle *mcpart = GetMCParticle(TMath::Abs(track->GetLabel())); | |
177 | if (mcpart) { | |
178 | UInt_t mcFlag = mcpart->GetFlag(); | |
179 | picotrack->SetFlag(mcFlag); | |
180 | Short_t genIndex = mcpart->GetGeneratorIndex(); | |
181 | picotrack->SetGeneratorIndex(genIndex); | |
182 | } | |
183 | } | |
184 | ||
680855e5 | 185 | ++nacc; |
186 | } | |
187 | } | |
eb556d0c | 188 | |
189 | //________________________________________________________________________ | |
190 | AliVParticle* AliEmcalPicoTrackMaker::GetMCParticle(Int_t label) | |
191 | { | |
192 | if (!fMCParticles) return 0; | |
893907a5 | 193 | Int_t index = label; |
194 | if (fMCParticlesMap) index = fMCParticlesMap->At(label); | |
195 | if (index < 0 || index >= fMCParticles->GetEntriesFast()) return 0; | |
196 | AliVParticle *part = static_cast<AliVParticle*>(fMCParticles->At(index)); | |
eb556d0c | 197 | return part; |
198 | } |