52c19022 |
1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
3 | * * |
4 | * Author: The ALICE Off-line Project. * |
5 | * Contributors are mentioned in the code where appropriate. * |
6 | * * |
7 | * Permission to use, copy, modify and distribute this software and its * |
8 | * documentation strictly for non-commercial purposes is hereby granted * |
9 | * without fee, provided that the above copyright notice appears in all * |
10 | * copies and that both the copyright notice and this permission notice * |
11 | * appear in the supporting documentation. The authors make no claims * |
12 | * about the suitability of this software for any purpose. It is * |
13 | * provided "as is" without express or implied warranty. * |
14 | **************************************************************************/ |
15 | |
16 | /* $Id: AliTRDgtuSim.cxx 28397 2008-09-02 09:33:00Z cblume $ */ |
17 | |
18 | //////////////////////////////////////////////////////////////////////////// |
19 | // // |
20 | // GTU simulation // |
21 | // // |
22 | // Authors: J. Klein (Jochen.Klein@cern.ch) // |
23 | // // |
24 | //////////////////////////////////////////////////////////////////////////// |
25 | |
26 | #include <stdio.h> |
27 | #include <fstream> |
28 | #include <string> |
29 | |
30 | #include "TFile.h" |
31 | #include "TROOT.h" |
44eafcf2 |
32 | #include "TObject.h" |
52c19022 |
33 | #include "TClonesArray.h" |
34 | |
4d6aee34 |
35 | #include "AliRun.h" |
36 | #include "AliRunLoader.h" |
37 | #include "AliLoader.h" |
f7247d06 |
38 | #include "AliTreeLoader.h" |
4d6aee34 |
39 | #include "AliLog.h" |
40 | #include "AliESDTrdTrack.h" |
44eafcf2 |
41 | #include "AliESDTrdTracklet.h" |
4d6aee34 |
42 | |
52c19022 |
43 | #include "AliTRDgtuSim.h" |
c1ad4629 |
44 | #include "AliTRDfeeParam.h" |
52c19022 |
45 | #include "AliTRDgtuTMU.h" |
46 | #include "AliTRDtrackGTU.h" |
47 | #include "AliTRDtrackletWord.h" |
48 | #include "AliTRDtrackletMCM.h" |
49 | #include "AliESDEvent.h" |
52c19022 |
50 | |
51 | ClassImp(AliTRDgtuSim) |
52 | |
5f006bd7 |
53 | AliTRDgtuSim::AliTRDgtuSim(AliRunLoader *rl) |
52c19022 |
54 | : TObject(), |
55 | fRunLoader(rl), |
c1ad4629 |
56 | fFeeParam(AliTRDfeeParam::Instance()), |
52c19022 |
57 | fTMU(0x0), |
58 | fTrackletArray(0x0), |
59 | fTrackTree(0x0), |
60 | fTrackletTree(0x0) |
61 | { |
44eafcf2 |
62 | // fTrackletTree = new TTree("gtutracklets", "Tree with GTU tracklets"); |
63 | // fTrackletTree->SetDirectory(0); |
52c19022 |
64 | } |
65 | |
5f006bd7 |
66 | AliTRDgtuSim::~AliTRDgtuSim() |
52c19022 |
67 | { |
36dc3337 |
68 | // destructor |
69 | |
52c19022 |
70 | if (fTrackletArray) |
44eafcf2 |
71 | fTrackletArray->Clear(); |
52c19022 |
72 | delete fTrackletArray; |
73 | delete fTrackletTree; |
74 | } |
75 | |
5f006bd7 |
76 | Bool_t AliTRDgtuSim::RunGTUFromTrackletFile(TString filename, Int_t event, Int_t noev) |
52c19022 |
77 | { |
5f006bd7 |
78 | // run the GTU from a file of tracklets |
36dc3337 |
79 | // used for comparison to VHDL simulation |
80 | |
44eafcf2 |
81 | ifstream input(filename.Data()); |
5f006bd7 |
82 | |
44eafcf2 |
83 | std::string str; |
84 | TString string; |
85 | int lineno = 0; |
5f006bd7 |
86 | |
44eafcf2 |
87 | Int_t iEventPrev = -1; |
88 | Int_t iStackPrev = -1; |
89 | Int_t iSecPrev = -1; |
90 | Int_t iSec = -1; |
91 | Int_t iStack = -1; |
92 | Int_t iLink = -1; |
93 | Int_t iEvent = -1; |
94 | Int_t evcnt = -1; |
5f006bd7 |
95 | |
44eafcf2 |
96 | fTMU = 0x0; |
5f006bd7 |
97 | |
44eafcf2 |
98 | TClonesArray trklArray("AliTRDtrackletWord", 100); |
99 | TClonesArray trklArrayGTU("AliTRDtrackletGTU", 100); |
5f006bd7 |
100 | |
44eafcf2 |
101 | AliDebug(1, Form("--------- Reading from %s ----------", filename.Data())); |
102 | while (getline(input, str)) { |
103 | lineno++; |
104 | string = str; |
52c19022 |
105 | |
44eafcf2 |
106 | TObjArray *tokens = string.Tokenize(" "); |
107 | if (tokens->GetEntriesFast() < 7) { |
108 | AliWarning(Form("Invalid input in line %i, too few parameters", lineno)); |
109 | continue; |
110 | } |
52c19022 |
111 | |
44eafcf2 |
112 | if ( ((TObjString*) tokens->At(0))->GetString().Atoi() < event) |
113 | continue; |
52c19022 |
114 | |
44eafcf2 |
115 | iEvent = ((TObjString*) tokens->At(0))->GetString().Atoi(); |
116 | iSec = ((TObjString*) tokens->At(1))->GetString().Atoi(); |
117 | iStack = ((TObjString*) tokens->At(2))->GetString().Atoi(); |
118 | iLink = 2 * ((TObjString*) tokens->At(3))->GetString().Atoi() + ((TObjString*) tokens->At(4))->GetString().Atoi(); |
5f006bd7 |
119 | |
44eafcf2 |
120 | if ((iEvent != iEventPrev) || |
121 | (iStack != iStackPrev) || |
122 | (iSec != iSecPrev)) { |
123 | if(fTMU) { |
36dc3337 |
124 | TList *listOfTracks = new TList(); |
52c19022 |
125 | fTMU->SetStack(iStackPrev); |
126 | fTMU->SetSector(iSecPrev); |
36dc3337 |
127 | fTMU->RunTMU(listOfTracks); |
44eafcf2 |
128 | AliDebug(1,Form("--- There are %i tracks. Writing ...", listOfTracks->GetEntries())); |
36dc3337 |
129 | WriteTracksToTree(listOfTracks); |
44eafcf2 |
130 | // fTMU->WriteTrackletsToTree(fTrackletTree); |
131 | // WriteTracksToLoader(listOfTracks); |
36dc3337 |
132 | WriteTracksToDataFile(listOfTracks, iEventPrev); |
44eafcf2 |
133 | if (listOfTracks->GetEntries() > 0) |
134 | AliDebug(2,Form(" %4.1f GeV/c", ((AliTRDtrackGTU*) listOfTracks->At(0))->GetPt() )); |
52c19022 |
135 | delete fTMU; |
44eafcf2 |
136 | fTMU = new AliTRDgtuTMU(); |
36dc3337 |
137 | delete listOfTracks; |
44eafcf2 |
138 | listOfTracks = 0x0; |
139 | } else { |
140 | fTMU = new AliTRDgtuTMU(); |
141 | } |
142 | iStackPrev = iStack; |
143 | iSecPrev = iSec; |
144 | iEventPrev = iEvent; |
145 | evcnt++; |
146 | if (evcnt == noev) |
147 | break; |
148 | } |
149 | for (Int_t i = 5; i < tokens->GetEntriesFast(); i++) { |
150 | UInt_t trackletWord = 0; |
151 | sscanf(((TObjString*) tokens->At(i))->GetString().Data(), "%i", &trackletWord); |
152 | if (trackletWord == 0x10001000) |
153 | break; |
154 | AliDebug(2, Form("link: %2i trkl: %2i - %s -> 0x%08x", |
155 | iLink, i-4, ((TObjString*) tokens->At(i))->GetString().Data(), trackletWord)); |
156 | AliTRDtrackletWord *tracklet = new (trklArray[trklArray.GetEntriesFast()]) AliTRDtrackletWord(trackletWord); |
157 | AliTRDtrackletGTU *trkl = new (trklArrayGTU[trklArrayGTU.GetEntriesFast()]) AliTRDtrackletGTU(tracklet); |
158 | if (fTMU) |
159 | fTMU->AddTracklet(trkl, iLink); |
52c19022 |
160 | } |
44eafcf2 |
161 | } |
52c19022 |
162 | |
44eafcf2 |
163 | if (fTMU && evcnt < noev) { |
164 | TList *listOfTracks = new TList(); |
165 | fTMU->SetStack(iStackPrev); |
166 | fTMU->SetSector(iSecPrev); |
167 | fTMU->RunTMU(listOfTracks); |
168 | WriteTracksToTree(listOfTracks); |
169 | // fTMU->WriteTrackletsToTree(fTrackletTree); |
170 | // WriteTracksToLoader(listOfTracks); |
171 | WriteTracksToDataFile(listOfTracks, iEventPrev); |
172 | delete fTMU; |
173 | delete listOfTracks; |
174 | fTMU = 0x0; |
175 | } |
176 | |
177 | AliInfo(Form("Analyzed %i events", evcnt)); |
178 | return kTRUE; |
52c19022 |
179 | } |
180 | |
5f006bd7 |
181 | Bool_t AliTRDgtuSim::RunGTU(AliLoader *loader, AliESDEvent *esd) |
52c19022 |
182 | { |
36dc3337 |
183 | // run the GTU on tracklets taken from the loader |
5f006bd7 |
184 | // if specified the GTU tracks are written to the ESD event |
36dc3337 |
185 | |
c1ad4629 |
186 | if (!fFeeParam->GetTracklet()) |
187 | return kFALSE; |
188 | |
44eafcf2 |
189 | if (fTrackletArray) |
190 | fTrackletArray->Clear(); |
191 | |
192 | if (loader) { |
52c19022 |
193 | if (!LoadTracklets(loader)) { |
a8518fd2 |
194 | AliError("Could not load the tracklets. Nothing done ..."); |
52c19022 |
195 | return kFALSE; |
196 | } |
44eafcf2 |
197 | } |
198 | else { |
199 | LoadTracklets(esd); |
200 | } |
52c19022 |
201 | |
f7247d06 |
202 | AliDebug(1, Form("running on %i tracklets", fTrackletArray->GetEntriesFast())); |
203 | |
52c19022 |
204 | Int_t iStackPrev = -1; |
205 | Int_t iSecPrev = -1; |
206 | Int_t iSec = -1; |
207 | Int_t iStack = -1; |
208 | Int_t iLink = -1; |
209 | |
210 | if (fTMU) { |
211 | delete fTMU; |
212 | fTMU = 0x0; |
213 | } |
5f006bd7 |
214 | |
36dc3337 |
215 | TList *listOfTracks = new TList(); |
5f006bd7 |
216 | |
52c19022 |
217 | TIter next(fTrackletArray); |
52c19022 |
218 | |
44eafcf2 |
219 | while (AliTRDtrackletGTU *trkl = (AliTRDtrackletGTU*) next()) { |
52c19022 |
220 | iSec = trkl->GetDetector() / 30; |
221 | iStack = (trkl->GetDetector() % 30) / 6; |
44eafcf2 |
222 | iLink = trkl->GetHCId() % 12; |
52c19022 |
223 | |
224 | if (iStack != iStackPrev || iSec != iSecPrev) { |
225 | if(fTMU) { |
226 | fTMU->SetStack(iStackPrev); |
227 | fTMU->SetSector(iSecPrev); |
36dc3337 |
228 | fTMU->RunTMU(listOfTracks); |
229 | WriteTracksToTree(listOfTracks); |
44eafcf2 |
230 | // fTMU->WriteTrackletsToTree(fTrackletTree); |
2cf67435 |
231 | WriteTracksToLoader(listOfTracks); |
36dc3337 |
232 | WriteTracksToESD(listOfTracks, esd); |
52c19022 |
233 | fTMU->Reset(); |
36dc3337 |
234 | listOfTracks->Delete(); |
52c19022 |
235 | } else { |
236 | fTMU = new AliTRDgtuTMU(); |
237 | } |
238 | iStackPrev = iStack; |
239 | iSecPrev = iSec; |
d2c8b010 |
240 | AliDebug(1, Form("now in sec %i, stack %i", iSec, iStack)); |
52c19022 |
241 | } |
d2c8b010 |
242 | AliDebug(1, Form("adding tracklet: 0x%08x in sec %i stack %i link %i", |
243 | trkl->GetTrackletWord(), trkl->GetDetector() / 30, (trkl->GetDetector() % 30) / 6, trkl->GetHCId() % 12)); |
44eafcf2 |
244 | if (fTMU) { |
637666cd |
245 | fTMU->AddTracklet(trkl, iLink); |
44eafcf2 |
246 | } |
52c19022 |
247 | } |
5f006bd7 |
248 | |
52c19022 |
249 | if (fTMU) { |
250 | fTMU->SetStack(iStackPrev); |
251 | fTMU->SetSector(iSecPrev); |
36dc3337 |
252 | fTMU->RunTMU(listOfTracks); |
253 | WriteTracksToTree(listOfTracks); |
44eafcf2 |
254 | // fTMU->WriteTrackletsToTree(fTrackletTree); |
2cf67435 |
255 | WriteTracksToLoader(listOfTracks); |
36dc3337 |
256 | WriteTracksToESD(listOfTracks, esd); |
52c19022 |
257 | delete fTMU; |
258 | fTMU = 0x0; |
36dc3337 |
259 | listOfTracks->Delete(); |
52c19022 |
260 | } |
261 | |
36dc3337 |
262 | delete listOfTracks; |
52c19022 |
263 | |
264 | return kTRUE; |
265 | } |
266 | |
44eafcf2 |
267 | Bool_t AliTRDgtuSim::LoadTracklets(const AliESDEvent *const esd) |
268 | { |
269 | AliDebug(1,"Loading tracklets from ESD event ..."); |
270 | |
271 | if (!fTrackletArray) |
272 | fTrackletArray = new TClonesArray("AliTRDtrackletGTU", 1000); |
273 | |
274 | for (Int_t iTracklet = 0; iTracklet < esd->GetNumberOfTrdTracklets(); iTracklet++) { |
275 | AliESDTrdTracklet *trkl = esd->GetTrdTracklet(iTracklet); |
276 | new ((*fTrackletArray)[fTrackletArray->GetEntries()]) AliTRDtrackletGTU(trkl); |
277 | } |
278 | |
279 | return kTRUE; |
280 | } |
281 | |
5f006bd7 |
282 | Bool_t AliTRDgtuSim::LoadTracklets(AliLoader *const loader) |
52c19022 |
283 | { |
36dc3337 |
284 | // load the tracklets using the given loader |
285 | |
c8b1590d |
286 | AliDebug(1,"Loading tracklets ..."); |
52c19022 |
287 | |
c1ad4629 |
288 | if (!fFeeParam->GetTracklet()) |
289 | return kFALSE; |
290 | |
52c19022 |
291 | if (!loader) { |
292 | AliError("No loader given!"); |
293 | return kFALSE; |
294 | } |
295 | |
296 | AliDataLoader *trackletLoader = loader->GetDataLoader("tracklets"); |
297 | if (!trackletLoader) { |
298 | AliError("No tracklet loader found!"); |
299 | return kFALSE; |
300 | } |
301 | |
302 | trackletLoader->Load(); |
f7247d06 |
303 | TTree *trackletTree = 0x0; |
52c19022 |
304 | |
f7247d06 |
305 | // simulated tracklets |
306 | trackletTree = trackletLoader->Tree(); |
307 | if (trackletTree) { |
308 | TBranch *trklbranch = trackletTree->GetBranch("mcmtrklbranch"); |
309 | if (trklbranch) { |
52c19022 |
310 | if (!fTrackletArray) |
44eafcf2 |
311 | fTrackletArray = new TClonesArray("AliTRDtrackletGTU", 1000); |
52c19022 |
312 | |
44eafcf2 |
313 | AliTRDtrackletMCM *trkl = 0x0; |
52c19022 |
314 | trklbranch->SetAddress(&trkl); |
315 | for (Int_t iTracklet = 0; iTracklet < trklbranch->GetEntries(); iTracklet++) { |
f7247d06 |
316 | trklbranch->GetEntry(iTracklet); |
44eafcf2 |
317 | new ((*fTrackletArray)[fTrackletArray->GetEntries()]) AliTRDtrackletGTU(new AliTRDtrackletMCM(*trkl)); |
52c19022 |
318 | } |
319 | return kTRUE; |
f7247d06 |
320 | } |
52c19022 |
321 | } |
322 | |
f7247d06 |
323 | // raw tracklets |
324 | AliTreeLoader *tl = (AliTreeLoader*) trackletLoader->GetBaseLoader("tracklets-raw"); |
325 | trackletTree = tl ? tl->Load(), tl->Tree() : 0x0; |
52c19022 |
326 | |
f7247d06 |
327 | if (trackletTree) { |
328 | if (!fTrackletArray) |
44eafcf2 |
329 | fTrackletArray = new TClonesArray("AliTRDtrackletGTU", 1000); |
5f006bd7 |
330 | |
331 | Int_t hc; |
f7247d06 |
332 | TClonesArray *ar = 0x0; |
333 | trackletTree->SetBranchAddress("hc", &hc); |
334 | trackletTree->SetBranchAddress("trkl", &ar); |
335 | |
336 | for (Int_t iEntry = 0; iEntry < trackletTree->GetEntries(); iEntry++) { |
337 | trackletTree->GetEntry(iEntry); |
2cf67435 |
338 | AliDebug(2, Form("%i tracklets in HC %i", ar->GetEntriesFast(), hc)); |
f7247d06 |
339 | for (Int_t iTracklet = 0; iTracklet < ar->GetEntriesFast(); iTracklet++) { |
340 | AliTRDtrackletWord *trklWord = (AliTRDtrackletWord*) (*ar)[iTracklet]; |
44eafcf2 |
341 | new((*fTrackletArray)[fTrackletArray->GetEntriesFast()]) AliTRDtrackletGTU(new AliTRDtrackletWord(trklWord->GetTrackletWord(), hc)); |
52c19022 |
342 | } |
f7247d06 |
343 | } |
344 | return kTRUE; |
52c19022 |
345 | } |
5f006bd7 |
346 | |
f7247d06 |
347 | AliError("No raw tracklet tree found\n"); |
52c19022 |
348 | |
f7247d06 |
349 | return kFALSE; |
52c19022 |
350 | } |
351 | |
5f006bd7 |
352 | Bool_t AliTRDgtuSim::WriteTracksToDataFile(TList *listOfTracks, Int_t event) |
52c19022 |
353 | { |
36dc3337 |
354 | // write the found tracks to a data file |
355 | // used for comparison to VHDL simulation |
356 | |
52c19022 |
357 | Int_t sm = 0; |
358 | Int_t stack = 0; |
359 | |
360 | FILE *out; |
361 | out = fopen("test.data", "a"); |
362 | |
36dc3337 |
363 | AliDebug(1,Form("%i tracks found in event %i", listOfTracks->GetSize(), event)); |
44eafcf2 |
364 | // fprintf(out, "0 %5i %2i %i 00000000\n", event, sm, stack); |
36dc3337 |
365 | for (Int_t i = 0; i < listOfTracks->GetSize(); i++) { |
366 | AliTRDtrackGTU *trk = (AliTRDtrackGTU*) listOfTracks->At(i); |
52c19022 |
367 | sm = trk->GetSector(); |
368 | stack = trk->GetStack(); |
44eafcf2 |
369 | |
370 | ULong64_t trackWord = 1; |
371 | AppendBits(trackWord, 1, 0); |
372 | AppendBits(trackWord, 6, trk->GetTrackletMask()); |
373 | AppendBits(trackWord, 18, (Int_t) trk->GetA()); |
374 | AppendBits(trackWord, 18, (Int_t) trk->GetB()); |
375 | AppendBits(trackWord, 12, (Int_t) trk->GetC()); |
376 | AppendBits(trackWord, 8, trk->GetPID()); |
377 | fprintf(out, "ev. %i sec. %i stack %i - track word: 0x%016llx, ", |
378 | event, sm, stack, trackWord); |
379 | |
380 | trackWord = 0; |
381 | AppendBits(trackWord, 11, 0); // flags |
382 | AppendBits(trackWord, 3, 0); |
383 | AppendBits(trackWord, 13, trk->GetYapprox()); |
384 | AppendBits(trackWord, 6, trk->GetTrackletIndex(5)); |
385 | AppendBits(trackWord, 6, trk->GetTrackletIndex(4)); |
386 | AppendBits(trackWord, 6, trk->GetTrackletIndex(3)); |
387 | AppendBits(trackWord, 6, trk->GetTrackletIndex(2)); |
388 | AppendBits(trackWord, 6, trk->GetTrackletIndex(1)); |
389 | AppendBits(trackWord, 6, trk->GetTrackletIndex(0)); |
390 | fprintf(out, "extended track word: 0x%016llx\n", trackWord); |
391 | |
5f006bd7 |
392 | fprintf(out, "1 %5i %2i %2i %3i %3i %3i %3i %3i %3i %3i %4i %f\n", event, sm, stack, trk->GetTrackletMask(), |
393 | trk->GetTrackletIndex(5), |
394 | trk->GetTrackletIndex(4), |
395 | trk->GetTrackletIndex(3), |
396 | trk->GetTrackletIndex(2), |
397 | trk->GetTrackletIndex(1), |
52c19022 |
398 | trk->GetTrackletIndex(0), |
5f006bd7 |
399 | trk->GetPtInt(), |
52c19022 |
400 | trk->GetPt()); |
401 | } |
402 | fclose(out); |
403 | return kTRUE; |
404 | } |
405 | |
5f006bd7 |
406 | Bool_t AliTRDgtuSim::WriteTracksToTree(TList *listOfTracks, Int_t /*event*/) |
52c19022 |
407 | { |
36dc3337 |
408 | // write the tracks to the tree for intermediate storage |
52c19022 |
409 | |
36dc3337 |
410 | AliDebug(1,Form("Writing %i tracks to the tree...", listOfTracks->GetEntries())); |
411 | |
412 | if (!listOfTracks) |
52c19022 |
413 | return kFALSE; |
414 | |
5f006bd7 |
415 | if (listOfTracks->GetEntries() <= 0) |
52c19022 |
416 | return kTRUE; |
417 | |
80f93426 |
418 | if (!fTrackTree) { |
52c19022 |
419 | fTrackTree = new TTree("gtutracks", "GTU tracks"); |
80f93426 |
420 | fTrackTree->SetDirectory(0); |
421 | } |
52c19022 |
422 | |
423 | AliTRDtrackGTU *trk = 0x0; |
424 | TBranch *branch = fTrackTree->GetBranch("TRDgtuTrack"); |
425 | if (!branch) { |
426 | branch = fTrackTree->Branch("TRDgtuTrack", "AliTRDtrackGTU", &trk, 32000, 99); |
427 | } |
428 | |
36dc3337 |
429 | TIter next(listOfTracks); |
4cc89512 |
430 | while ((trk = (AliTRDtrackGTU*) next())) { |
431 | trk->CookLabel(); |
52c19022 |
432 | branch->SetAddress(&trk); |
5f006bd7 |
433 | fTrackTree->Fill(); |
52c19022 |
434 | } |
435 | fTrackTree->ResetBranchAddress(branch); |
436 | |
5f006bd7 |
437 | return kTRUE; |
52c19022 |
438 | } |
439 | |
36dc3337 |
440 | Bool_t AliTRDgtuSim::WriteTreesToFile() const { |
441 | // write the trees holding tracklets and tracks to file |
442 | |
52c19022 |
443 | TFile *f = TFile::Open("TRD.GtuTracking.root", "RECREATE"); |
444 | f->cd(); |
445 | if (fTrackTree) |
446 | f->WriteTObject(fTrackTree); |
447 | if (fTrackletTree) |
448 | f->WriteTObject(fTrackletTree); |
449 | f->Close(); |
450 | return kTRUE; |
451 | } |
452 | |
5f006bd7 |
453 | Bool_t AliTRDgtuSim::WriteTracksToESD(const TList * const listOfTracks, AliESDEvent *esd) |
52c19022 |
454 | { |
36dc3337 |
455 | // fill the found tracks to the given ESD event |
456 | |
52c19022 |
457 | if (esd) { |
36dc3337 |
458 | TIter next(listOfTracks); |
52c19022 |
459 | while (AliTRDtrackGTU *trk = (AliTRDtrackGTU*) next()) { |
460 | AliESDTrdTrack *trdtrack = trk->CreateTrdTrack(); |
2cf67435 |
461 | if (trdtrack->GetLabel() < 0) |
462 | trdtrack->SetLabel(-2); |
52c19022 |
463 | esd->AddTrdTrack(trdtrack); |
464 | delete trdtrack; |
465 | } |
466 | } |
467 | return kTRUE; |
468 | } |
c8b1590d |
469 | |
2cf67435 |
470 | Bool_t AliTRDgtuSim::WriteTracksToLoader(const TList * const listOfTracks) |
c8b1590d |
471 | { |
36dc3337 |
472 | // write the GTU tracks to the dedicated loader |
473 | // these tracks contain more information than the ones in the ESD |
474 | |
c8b1590d |
475 | if (!fTrackTree) { |
c1ad4629 |
476 | AliDebug(1, "No track tree found!"); |
c8b1590d |
477 | return kFALSE; |
478 | } |
479 | |
480 | AliRunLoader *rl = AliRunLoader::Instance(); |
481 | AliDataLoader *dl = 0x0; |
482 | if (rl) |
483 | dl = rl->GetLoader("TRDLoader")->GetDataLoader("gtutracks"); |
484 | if (!dl) { |
485 | AliError("Could not get the GTU-track data loader!"); |
486 | return kFALSE; |
487 | } |
488 | |
489 | TTree *trackTree = dl->Tree(); |
490 | if (!trackTree) { |
491 | dl->MakeTree(); |
492 | trackTree = dl->Tree(); |
493 | } |
5f006bd7 |
494 | |
c8b1590d |
495 | AliTRDtrackGTU *trk = 0x0; |
2cf67435 |
496 | |
f7247d06 |
497 | if (!trackTree->GetBranch("TRDtrackGTU")) |
498 | trackTree->Branch("TRDtrackGTU", "AliTRDtrackGTU", &trk, 32000); |
5f006bd7 |
499 | |
2cf67435 |
500 | TIter next(listOfTracks); |
3512dabb |
501 | while ((trk = (AliTRDtrackGTU*) next())) { |
f7247d06 |
502 | trackTree->SetBranchAddress("TRDtrackGTU", &trk); |
c8b1590d |
503 | trackTree->Fill(); |
504 | } |
505 | |
506 | dl->WriteData("OVERWRITE"); |
507 | |
508 | return kTRUE; |
509 | } |