]>
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" | |
680855e5 | 18 | |
19 | ClassImp(AliEmcalPicoTrackMaker) | |
20 | ||
21 | //________________________________________________________________________ | |
22 | AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() : | |
23 | AliAnalysisTaskSE("AliEmcalPicoTrackMaker"), | |
24 | fESDtrackCuts(0), | |
25 | fTracksOutName("PicoTracks"), | |
26 | fTracksInName("tracks"), | |
9733b37f | 27 | fMinTrackPt(0), |
11d18b51 | 28 | fMaxTrackPt(1000), |
d2343e15 | 29 | fMinTrackEta(-10), |
30 | fMaxTrackEta(10), | |
9733b37f | 31 | fMinTrackPhi(-10), |
32 | fMaxTrackPhi(10), | |
11d18b51 | 33 | fTrackEfficiency(1), |
bb99fbec | 34 | fIncludeNoITS(kTRUE), |
86f2216c | 35 | fUseNegativeLabels(kTRUE), |
7f76e479 | 36 | fIsMC(kFALSE), |
69d71b2d | 37 | fCutMaxFractionSharedTPCClusters(0.4), |
680855e5 | 38 | fTracksIn(0), |
39 | fTracksOut(0) | |
40 | { | |
41 | // Constructor. | |
ab292aef | 42 | |
1187666b | 43 | fAODfilterBits[0] = -1; |
44 | fAODfilterBits[1] = -1; | |
680855e5 | 45 | } |
46 | ||
47 | //________________________________________________________________________ | |
48 | AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) : | |
a070db7d | 49 | AliAnalysisTaskSE(name), |
680855e5 | 50 | fESDtrackCuts(0), |
51 | fTracksOutName("PicoTracks"), | |
52 | fTracksInName("tracks"), | |
9733b37f | 53 | fMinTrackPt(0), |
11d18b51 | 54 | fMaxTrackPt(1000), |
d2343e15 | 55 | fMinTrackEta(-10), |
56 | fMaxTrackEta(10), | |
9733b37f | 57 | fMinTrackPhi(-10), |
58 | fMaxTrackPhi(10), | |
11d18b51 | 59 | fTrackEfficiency(1), |
bb99fbec | 60 | fIncludeNoITS(kTRUE), |
86f2216c | 61 | fUseNegativeLabels(kTRUE), |
7f76e479 | 62 | fIsMC(kFALSE), |
69d71b2d | 63 | fCutMaxFractionSharedTPCClusters(0.4), |
680855e5 | 64 | fTracksIn(0), |
65 | fTracksOut(0) | |
66 | { | |
67 | // Constructor. | |
68 | ||
1187666b | 69 | fAODfilterBits[0] = -1; |
70 | fAODfilterBits[1] = -1; | |
680855e5 | 71 | fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks"; |
72 | } | |
73 | ||
74 | //________________________________________________________________________ | |
75 | AliEmcalPicoTrackMaker::~AliEmcalPicoTrackMaker() | |
76 | { | |
a070db7d | 77 | // Destructor. |
680855e5 | 78 | } |
79 | ||
80 | //________________________________________________________________________ | |
81 | void AliEmcalPicoTrackMaker::UserCreateOutputObjects() | |
82 | { | |
a070db7d | 83 | // Create my user objects. |
680855e5 | 84 | |
85 | fTracksOut = new TClonesArray("AliPicoTrack"); | |
86 | fTracksOut->SetName(fTracksOutName); | |
87 | } | |
88 | ||
89 | //________________________________________________________________________ | |
90 | void AliEmcalPicoTrackMaker::UserExec(Option_t *) | |
91 | { | |
92 | // Main loop, called for each event. | |
93 | ||
94 | AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager(); | |
95 | if (!am) { | |
96 | AliError("Manager zero, returning"); | |
97 | return; | |
98 | } | |
99 | ||
a070db7d | 100 | // retrieve tracks from input. |
e44e8726 | 101 | if (!fTracksIn) { |
102 | fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName)); | |
103 | if (!fTracksIn) { | |
104 | AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data())); | |
105 | return; | |
106 | } | |
107 | if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) { | |
108 | AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data())); | |
109 | return; | |
110 | } | |
a070db7d | 111 | } |
112 | ||
113 | // add tracks to event if not yet there | |
71c1dd76 | 114 | fTracksOut->Delete(); |
c4a9715d | 115 | if (!(InputEvent()->FindListObject(fTracksOutName))) { |
680855e5 | 116 | InputEvent()->AddObject(fTracksOut); |
c4a9715d | 117 | } |
c4a9715d | 118 | |
a070db7d | 119 | // test if we are in ESD or AOD mode |
120 | Bool_t esdMode = kTRUE; | |
121 | if (dynamic_cast<AliAODEvent*>(InputEvent())!=0) | |
122 | esdMode = kFALSE; | |
123 | ||
124 | // loop over tracks | |
125 | const Int_t Ntracks = fTracksIn->GetEntriesFast(); | |
680855e5 | 126 | for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) { |
85fbcc1d | 127 | |
e44e8726 | 128 | AliVTrack *track = static_cast<AliVTrack*>(fTracksIn->At(iTracks)); |
85fbcc1d | 129 | |
a070db7d | 130 | if (!track) |
680855e5 | 131 | continue; |
85fbcc1d | 132 | |
9733b37f | 133 | if (track->Pt() > fMaxTrackPt || track->Pt() < fMinTrackPt) |
134 | continue; | |
135 | ||
136 | if (track->Eta() < fMinTrackEta || track->Eta() > fMaxTrackEta || | |
137 | track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi) | |
85fbcc1d | 138 | continue; |
11d18b51 | 139 | |
376d84a3 | 140 | Bool_t isEmc = kFALSE; |
92c9ea30 | 141 | Int_t type = -1; |
a070db7d | 142 | if (esdMode) { |
92c9ea30 | 143 | AliESDtrack *esdtrack = static_cast<AliESDtrack*>(track); |
144 | if (fESDtrackCuts && !fESDtrackCuts->AcceptTrack(esdtrack)) | |
145 | continue; | |
146 | type = esdtrack->GetTRDNchamberdEdx(); | |
147 | if (!fIncludeNoITS && (type==2)) | |
bb99fbec | 148 | continue; |
376d84a3 | 149 | isEmc = track->IsEMCAL(); |
a070db7d | 150 | } else { |
151 | AliAODTrack *aodtrack = static_cast<AliAODTrack*>(track); | |
1187666b | 152 | if (fAODfilterBits[0] < 0) { |
153 | if (aodtrack->IsHybridGlobalConstrainedGlobal()) | |
92c9ea30 | 154 | type = 3; |
1187666b | 155 | else /*not a good track*/ |
156 | continue; | |
cc67ea22 | 157 | } else { |
bb99fbec | 158 | if (aodtrack->TestFilterBit(fAODfilterBits[0])) { |
92c9ea30 | 159 | type = 0; |
cc67ea22 | 160 | } else if (aodtrack->TestFilterBit(fAODfilterBits[1])) { |
bb99fbec | 161 | if ((aodtrack->GetStatus()&AliESDtrack::kITSrefit)==0) { |
162 | if (fIncludeNoITS) | |
92c9ea30 | 163 | type = 2; |
bb99fbec | 164 | else |
165 | continue; | |
cc67ea22 | 166 | } else { |
92c9ea30 | 167 | type = 1; |
bb99fbec | 168 | } |
169 | } | |
170 | else {/*not a good track*/ | |
1187666b | 171 | continue; |
bb99fbec | 172 | } |
1187666b | 173 | } |
69d71b2d | 174 | if (fCutMaxFractionSharedTPCClusters > 0) { |
175 | Double_t frac = Double_t(aodtrack->GetTPCnclsS()) / Double_t(aodtrack->GetTPCncls()); | |
176 | if (frac > fCutMaxFractionSharedTPCClusters) | |
177 | continue; | |
178 | } | |
376d84a3 | 179 | if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 && |
3648548f | 180 | track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() && |
376d84a3 | 181 | track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad()) |
182 | isEmc = kTRUE; | |
680855e5 | 183 | } |
184 | ||
11d18b51 | 185 | if (fTrackEfficiency < 1) { |
186 | Double_t r = gRandom->Rndm(); | |
187 | if (fTrackEfficiency < r) | |
188 | continue; | |
189 | } | |
190 | ||
7f76e479 | 191 | Int_t label = 0; |
6a20534a | 192 | if (fIsMC) { |
86f2216c | 193 | if (fUseNegativeLabels) |
6a20534a | 194 | label = track->GetLabel(); |
86f2216c | 195 | else |
196 | label = TMath::Abs(track->GetLabel()); | |
197 | ||
3648548f | 198 | if (label == 0) |
5be3857d | 199 | AliDebug(2,Form("Track %d with label==0", iTracks)); |
6a20534a | 200 | } |
f660c2d6 | 201 | |
5cb6a7e6 | 202 | /*AliPicoTrack *picotrack =*/ new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(), |
92c9ea30 | 203 | track->Eta(), |
204 | track->Phi(), | |
205 | track->Charge(), | |
f660c2d6 | 206 | label, |
92c9ea30 | 207 | type, |
208 | track->GetTrackEtaOnEMCal(), | |
209 | track->GetTrackPhiOnEMCal(), | |
56bd3193 | 210 | track->GetTrackPtOnEMCal(), |
92c9ea30 | 211 | isEmc); |
680855e5 | 212 | ++nacc; |
213 | } | |
214 | } |