]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/src/AliLevel3.cxx
Comments formatted the way THtml likes it.
[u/mrichter/AliRoot.git] / HLT / src / AliLevel3.cxx
CommitLineData
532bd2d0 1//$Id$
2
82bd465a 3// Author: Anders Vestbo <mailto:vestbo$fi.uib.no>, Uli Frankenfeld <mailto:franken@fi.uib.no>
4//*-- Copyright &copy ASV
108615fc 5
108615fc 6#include <TFile.h>
7#include <TDirectory.h>
8#include <TClonesArray.h>
9#include <TStopwatch.h>
10#include <iostream.h>
11
2e1fe9ef 12#include "AliL3Logging.h"
108615fc 13#include "AliLevel3.h"
14#include "AliL3ConfMapper.h"
15#include "AliL3Vertex.h"
16#include "AliL3VertexFinder.h"
17#include "AliL3TrackMerger.h"
18#include "AliL3GlobalMerger.h"
19#include "AliL3InterMerger.h"
20#include "AliL3ConfMapPoint.h"
21#include "AliL3ConfMapTrack.h"
22#include "AliL3Transform.h"
f3e63a47 23#include "AliL3ClustFinderNew.h"
108615fc 24#include "AliL3DigitData.h"
25#include "AliL3TrackArray.h"
26#include "AliL3MemHandler.h"
2e1fe9ef 27#ifdef use_aliroot
108615fc 28#include "AliL3FileHandler.h"
2e1fe9ef 29#endif
108615fc 30#include "AliL3Benchmark.h"
31
32#include "AliL3DigitData.h"
33#include "AliL3TrackSegmentData.h"
34#include "AliL3SpacePointData.h"
35#include "AliL3VertexData.h"
36
82bd465a 37//_____________________________________________________________
108615fc 38//
39// AliLevel3
40//
41// Interface class for Level3 tracker.
42// Tracking is done by calling constructor with input,output
43// given as argument.
44// You must always remember to set the tracking parameters. E.g.:
45//
46// AliLevel3 *level3 = new AliLevel3(inputfile,outputfile);
47// level3->SetTrackerParam(); //Sets default tracking parameters
48// level3->ProcessSector(2,2); //Does tracking on sector 2 (actually 2+38)
82bd465a 49//Begin_Html
50/*
51<img src="tpcsectorsnb.gif">
52*/
53//End_Html
108615fc 54
55ClassImp(AliLevel3)
56
57AliLevel3::AliLevel3(){
58 fInputFile=0;
59 fOutputFile=0;
60 Init();
61}
62
63AliLevel3::AliLevel3(Char_t *infile,Char_t *outfile){
64 //Constructor. Calls constructor of the tracker, vertexfinder and merger classes.
65
66 fOutputFile = new TFile(outfile,"NEW");
67
68 if(!fOutputFile->IsOpen())
69 {
70 LOG(AliL3Log::kWarning, "AliLevel3::AliLevel3","File Open")
71 <<"Delete your old "<<outfile<<" file!"<<ENDLOG;
72 }
73 fInputFile = new TFile(infile,"READ");
74
75 if(!fInputFile->IsOpen())
76 {
77 LOG(AliL3Log::kError,"AliLevel3::AliLevel3","File Open")
78 <<"Inputfile "<<infile<<" does not exist"<<ENDLOG;
79 return;
80 }
81
82 Init();
83}
84
85AliLevel3::AliLevel3(TFile *in, TFile *out){
86 fOutputFile = out;
87 fInputFile = in;
88 if(!in){
89 LOG(AliL3Log::kError,"AliLevel3::AliLevel3","File Open")
90 <<"Pointer to InFile 0x0!"<<ENDLOG;
91 return;
92 }
93 if(!out){
94 LOG(AliL3Log::kError,"AliLevel3::AliLevel3","File Open")
95 <<"Pointer to OutFile 0x0!"<<ENDLOG;
96 return;
97 }
98
99 if(!fOutputFile->IsOpen())
100 {
101 LOG(AliL3Log::kWarning,"AliLevel3::AliLevel3","File Open")
102 <<"no output file!"<<ENDLOG;
103 return;
104 }
105 if(!fInputFile->IsOpen())
106 {
107 LOG(AliL3Log::kError,"AliLevel3::AliLevel3","File Open")
108 <<"Inputfile does not exist"<<ENDLOG;
109 return;
110 }
111 Init();
112}
113
114void AliLevel3::Init(){
115 fWriteOut = kFALSE;
116 fGlobalMerger=0;
117 fTransformer = new AliL3Transform();
118 fDoRoi = kFALSE;
532bd2d0 119 fDoNonVertex = kFALSE;
6e32a12a 120 fClusterDeconv = kTRUE;
697056ae 121 fEta[0] = 0.;
122 fEta[1] = 0.9;
108615fc 123 fUseBinary =kFALSE;
124 SetPath("");
532bd2d0 125 fFindVertex =kFALSE;
126 fEvent=0;
82bd465a 127 if(1){
21896bc6 128 fNPatch = 1; //number of patches change row in process
129 fRow[0][0] = 0; // first row
90ba4031 130 fRow[0][1] = 175; // last row
21896bc6 131 }
132 if(0){
133 fNPatch = 2; //number of patches change row in process
134 fRow[0][0] = 0; // first row
135 fRow[0][1] = 54;
136 fRow[1][0] = 55;
90ba4031 137 fRow[1][1] = 175; // last row
21896bc6 138 }
90ba4031 139 if(0){
21896bc6 140 fNPatch = 5; //number of patches change row in process
141 fRow[0][0] = 0; // first row
142 fRow[0][1] = 45;
143 fRow[1][0] = 46;
144 fRow[1][1] = 77;
145 fRow[2][0] = 78;
146 fRow[2][1] = 109;
95a00d93 147 fRow[3][0] = 110;
21896bc6 148 fRow[3][1] = 141;
149 fRow[4][0] = 142;
90ba4031 150 fRow[4][1] = 175; // last row
21896bc6 151 }
82bd465a 152 if(0){
88d19ba2 153 fNPatch = 6; //number of patches change row in process
154 fRow[0][0] = 0; // first row
155 fRow[0][1] = 31;
156 fRow[1][0] = 32;
157 fRow[1][1] = 63;
158 fRow[2][0] = 64;
159 fRow[2][1] = 91;
160 fRow[3][0] = 92;
161 fRow[3][1] = 119;
162 fRow[4][0] = 120;
163 fRow[4][1] = 143;
164 fRow[5][0] = 144;
165 fRow[5][1] = 175; // last row
166 }
108615fc 167 fVertexFinder = new AliL3VertexFinder();
168 fVertex = new AliL3Vertex();
169 fTracker = new AliL3ConfMapper();
170 fTrackMerger = new AliL3TrackMerger(fNPatch);
171 fInterMerger = new AliL3InterMerger();
2e1fe9ef 172 #ifdef use_aliroot
108615fc 173 fFileHandler = new AliL3FileHandler();
174 fFileHandler->SetAliInput(fInputFile);
2e1fe9ef 175 #else
176 fFileHandler = new AliL3MemHandler();
177 #endif
108615fc 178 fBenchmark = new AliL3Benchmark();
179}
180
181void AliLevel3::DoBench(char* name){
182 fBenchmark->Analyze(name);
183}
184
185void AliLevel3::DoMc(char* file){
82bd465a 186#ifdef use_aliroot
108615fc 187 if(!fFileHandler->IsDigit())
188 fFileHandler->SetMCOutput(file);
82bd465a 189#endif
108615fc 190}
191
192AliLevel3::~AliLevel3(){
193 //Destructor
194 if(fVertexFinder) delete fVertexFinder;
195 if(fVertex) delete fVertex;
196 if(fTracker) delete fTracker;
197 if(fTransformer) delete fTransformer;
198 if(fTrackMerger) delete fTrackMerger;
199 if(fInterMerger) delete fInterMerger;
200 if(fFileHandler) delete fFileHandler;
201}
202
203void AliLevel3::SetTrackerParam(Int_t phi_segments, Int_t eta_segments,
83f458e3 204 Int_t trackletlength, Int_t tracklength,
205 Int_t rowscopetracklet, Int_t rowscopetrack,
206 Double_t min_pt_fit, Double_t maxangle,
207 Double_t goodDist, Double_t hitChi2Cut,
208 Double_t goodHitChi2, Double_t trackChi2Cut,
209 Int_t maxdist,Double_t maxphi,Double_t maxeta,Bool_t vertexconstraint)
108615fc 210{
211 //Set parameters input to the tracker
212 //If no arguments are given, default parameters will be used
213
214 fTracker->SetNSegments(phi_segments,eta_segments);
108615fc 215 fTracker->SetMaxDca(min_pt_fit);
532bd2d0 216 fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,vertexconstraint);
217 fTracker->SetTrackletCuts(maxangle,goodDist,vertexconstraint);
218 if(vertexconstraint)
83f458e3 219 fTracker->MainVertexSettings(trackletlength,tracklength,rowscopetracklet,rowscopetrack,maxphi,maxeta);
532bd2d0 220 else
221 fTracker->NonVertexSettings(trackletlength,tracklength,rowscopetracklet,rowscopetrack);
222
108615fc 223 fTracker->SetParamDone(true);
4ce675df 224 fTracker->InitVolumes();
108615fc 225}
226
532bd2d0 227void AliLevel3::ProcessEvent(Int_t first,Int_t last,Int_t event){
108615fc 228 //Do tracking on all slices in region [first,last]
229 //Slices numbering in TPC goes from 0-35, which means that 1 slice
230 //corresponds to inner+outer sector.E.g. slice 2 corresponds to
231 //inner=2 + outer=38.
232 fGlobalMerger= new AliL3GlobalMerger(first,last);
532bd2d0 233 fEvent=event;
108615fc 234 for(Int_t i=first; i<=last; i++){
235 ProcessSlice(i);
236 fGlobalMerger->SetVertex(fVertex);
237 fGlobalMerger->SetTransformer(fTransformer);
238 fGlobalMerger->InitSlice(i);
108615fc 239 fGlobalMerger->FillTracks(fNTrackData,fTrackData);
108615fc 240 fFileHandler->Free(); //free the memory
241 fNTrackData=0;
242 fTrackData=0;
243 }
244 fBenchmark->Start("Global Merger");
532bd2d0 245 //fGlobalMerger->AddAllTracks();
82bd465a 246 //fGlobalMerger->Merge();
247 fGlobalMerger->SlowMerge();
108615fc 248 fBenchmark->Stop("Global Merger");
249
250 if(fWriteOut) WriteResults();
251 delete fGlobalMerger; fGlobalMerger = 0;
252}
253
254void AliLevel3::ProcessSlice(Int_t slice){
255 char name[256];
91f3257c 256 Bool_t UseCF = kFALSE;
e0ea9951 257#ifdef use_aliroot
258 UseCF = fFileHandler->IsDigit();
95a00d93 259#else
260 if(fUseBinary)
261 UseCF = kTRUE; //In case you are not using aliroot
e0ea9951 262#endif
108615fc 263 const Int_t maxpoints=100000;
264 const Int_t pointsize = maxpoints * sizeof(AliL3SpacePointData);
265 AliL3MemHandler *memory = new AliL3MemHandler();
95a00d93 266
108615fc 267 fTrackMerger->Reset();
268 fTrackMerger->SetTransformer(fTransformer);
e0ea9951 269 fTrackMerger->SetRows(fRow[0]);
108615fc 270 for(Int_t patch=fNPatch-1;patch>=0;patch--){
e0ea9951 271 fFileHandler->Init(slice,patch,fRow[patch]);
108615fc 272 fFileHandler->Init(fTransformer);
273 UInt_t npoints=0;
274 AliL3SpacePointData *points =0;
275 UInt_t ndigits=0;
276 AliL3DigitRowData *digits =0;
91f3257c 277 if(UseCF){
278 if(fUseBinary){
279 if(!fDoRoi){
6e32a12a 280 if(1){ //Binary to Memory
95a00d93 281 fFileHandler->Free();
91f3257c 282 sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,patch);
95a00d93 283 if(!fFileHandler->SetBinaryInput(name)) return;
284 digits= (AliL3DigitRowData *)fFileHandler->CompBinary2Memory(ndigits);
91f3257c 285 fFileHandler->CloseBinaryInput();
286 }
287
6e32a12a 288 if(0){ //Binary to Memory with Benchmark
91f3257c 289 fFileHandler->Free();
290 sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,patch);
1c5eccbd 291 if(!memory->SetBinaryInput(name)) return;
91f3257c 292 UInt_t compsize=memory->GetFileSize();
293 UInt_t *comp=(UInt_t *)memory->Allocate(compsize);
294 memory->CompBinary2CompMemory(ndigits,comp);
295 memory->CloseBinaryInput();
296 UInt_t datasize=memory->GetMemorySize(ndigits,comp);
297 digits=(AliL3DigitRowData *)fFileHandler->Allocate(datasize);
298 fBenchmark->Start("Unpacker");
299 fFileHandler->CompMemory2Memory(ndigits,digits,comp);
300 fBenchmark->Stop("Unpacker");
301 memory->Free();
302 }
303
88d19ba2 304 if(0){ //Binary to Memory with Random
91f3257c 305 fFileHandler->Free();
306 fFileHandler->ResetRandom();
307 fFileHandler->SetRandomCluster(100);
308 fFileHandler->SetNGenerate(100);
309 sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,patch);
1c5eccbd 310 if(!memory->SetBinaryInput(name)) return;
91f3257c 311 UInt_t compsize=memory->GetFileSize();
312 UInt_t *comp=(UInt_t *)memory->Allocate(compsize);
313 memory->CompBinary2CompMemory(ndigits,comp);
314 memory->CloseBinaryInput();
315 UInt_t dsize=memory->GetMemorySize(ndigits,comp);
316 UInt_t rsize=fFileHandler->GetRandomSize();
317 digits=(AliL3DigitRowData*)fFileHandler->Allocate(dsize+rsize);
318 fBenchmark->Start("Unpacker");
319 fFileHandler->CompMemory2Memory(ndigits,digits,comp);
320 fBenchmark->Stop("Unpacker");
321 memory->Free();
322 }
108615fc 323 }
324
91f3257c 325 else{ //Binary to Memory with Roi
108615fc 326 fFileHandler->Free();
91f3257c 327 Int_t sli[2]={0,0};
328 fFileHandler->SetROI(fEta,sli);
108615fc 329 sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,patch);
1c5eccbd 330 if(!memory->SetBinaryInput(name)) return;
108615fc 331 UInt_t compsize=memory->GetFileSize();
332 UInt_t *comp=(UInt_t *)memory->Allocate(compsize);
333 memory->CompBinary2CompMemory(ndigits,comp);
334 memory->CloseBinaryInput();
335 UInt_t datasize=memory->GetMemorySize(ndigits,comp);
336 digits=(AliL3DigitRowData *)fFileHandler->Allocate(datasize);
337 fBenchmark->Start("Unpacker");
91f3257c 338 datasize = fFileHandler->CompMemory2Memory(ndigits,digits,comp);
339 fBenchmark->Stop("Unpacker");
108615fc 340 memory->Free();
108615fc 341 }
91f3257c 342 }//end UseBinary
343 else{
2e1fe9ef 344#ifdef use_aliroot
21896bc6 345 fBenchmark->Start("Dummy Unpacker");
108615fc 346 sprintf(name,"digits_%d_%d.raw",slice,patch);
21896bc6 347 fBenchmark->Stop("Dummy Unpacker");
2e1fe9ef 348
108615fc 349 if(0){ //Ali to Binary
350 fFileHandler->SetBinaryOutput(name);
351 fFileHandler->AliDigits2CompBinary();
352 fFileHandler->CloseBinaryOutput();
353 }
354
355 if(1){ //Ali to Memory
532bd2d0 356 digits=(AliL3DigitRowData *)fFileHandler->AliDigits2Memory(ndigits,fEvent);
108615fc 357 if(fWriteOut){ //Memory to Binary
358 fFileHandler->SetBinaryOutput(name);
359 fFileHandler->Memory2CompBinary(ndigits,digits);
360 fFileHandler->CloseBinaryOutput();
361 }
362 }
2e1fe9ef 363#endif
91f3257c 364 }//end else UseBinary
108615fc 365
e0ea9951 366 points = (AliL3SpacePointData *) memory->Allocate(pointsize);
367
f3e63a47 368 fClusterFinder = new AliL3ClustFinderNew(fTransformer);
e0ea9951 369 fClusterFinder->InitSlice(slice,patch,fRow[patch][0],fRow[patch][1]
532bd2d0 370 ,maxpoints);
371 fClusterFinder->SetDeconv(fClusterDeconv);
83f458e3 372 fClusterFinder->SetXYError(0.2);
373 fClusterFinder->SetZError(0.3);
e0ea9951 374 fClusterFinder->SetOutputArray(points);
375 fClusterFinder->Read(ndigits,digits);
376 fBenchmark->Start("Cluster Finder");
377 fClusterFinder->ProcessDigits();
378 fBenchmark->Stop("Cluster Finder");
379 npoints = fClusterFinder->GetNumberOfClusters();
380 delete fClusterFinder;
381 fClusterFinder =0;
382 fFileHandler->Free();
91f3257c 383 LOG(AliL3Log::kInformational,"AliLevel3::ProcessSlice","Cluster Finder")
384 <<AliL3Log::kDec<<"Found "<<npoints<<" Points"<<ENDLOG;
385
e0ea9951 386
91f3257c 387 }//end UseCF
388 else{// if not use Clusterfinder
389 if(fUseBinary){//Binary to Memory
390 memory->Free();
391 sprintf(name,"/%spoints_%d_%d.raw",fPath,slice,patch);
1c5eccbd 392 if(!memory->SetBinaryInput(name)) return;
91f3257c 393 points = (AliL3SpacePointData *) memory->Allocate();
394 memory->Binary2Memory(npoints,points);
395 memory->CloseBinaryInput();
396 LOG(AliL3Log::kInformational,"AliLevel3::ProcessSlice","Read Cluster")
397 <<AliL3Log::kDec<<"Found "<<npoints<<" Points in File"<<ENDLOG;
398 }
e0ea9951 399#ifdef use_aliroot
91f3257c 400 else{
401 points = fFileHandler->AliPoints2Memory(npoints);
402 }
e0ea9951 403#endif
91f3257c 404 fBenchmark->Start("Dummy Unpacker");
405 fBenchmark->Stop("Dummy Unpacker");
406 fBenchmark->Start("Dummy CF");
407 fBenchmark->Stop("Dummy CF");
408 }
e0ea9951 409
108615fc 410 if(patch == fNPatch-1){
411 // Vertex
412 if(fFindVertex){
413 // Vertex Finder
414
415 fBenchmark->Start("Vertex Finder Read");
416 fVertexFinder->Reset();
417 fVertexFinder->Read(npoints,points);
418 fBenchmark->Stop("Vertex Finder Read");
419 fBenchmark->Start("Vertex Finder");
420 fVertexFinder->Analyze();
421 AliL3VertexData vertex[1];
422 fVertexFinder->Write(vertex);
423 fVertex->Read(vertex);
424 fBenchmark->Stop("Vertex Finder");
425 }
426 else{
427 //use 0,0,0 for vertex
428 fVertex->SetZero();
429 }
430 fTrackMerger->SetVertex(fVertex);
431 }
82bd465a 432 fTracker->InitSector(slice,fRow[patch]);//,fEta);
108615fc 433 fTracker->SetVertex(fVertex);
434 fBenchmark->Start("Tracker Read Hits");
435 fTracker->ReadHits(npoints,points);
436 fBenchmark->Stop("Tracker Read Hits");
437 fBenchmark->Start("MainVertexTracking A");
83f458e3 438 fTracker->MainVertexTracking();
439 //fTracker->MainVertexTracking_a();
108615fc 440 fBenchmark->Stop("MainVertexTracking A");
83f458e3 441 //fBenchmark->Start("MainVertexTracking B");
442 //fTracker->MainVertexTracking_b();
443 //fBenchmark->Stop("MainVertexTracking B");
108615fc 444 fBenchmark->Start("Tracking fit");
532bd2d0 445 if(fDoNonVertex)
446 fTracker->NonVertexTracking();//Do a second pass for nonvertex tracks
108615fc 447 fTracker->FillTracks();
448 fBenchmark->Stop("Tracking fit");
449
450 if(fWriteOut)
451 WriteSpacePoints(npoints, points, slice, patch); //do after Tracking
e0ea9951 452
453 //free memory
454 if(UseCF)
455 memory->Free();
456 else
457 fFileHandler->Free();
108615fc 458
459 UInt_t ntracks0 =0;
460 AliL3TrackSegmentData *trackdata0 =
461 (AliL3TrackSegmentData *) memory->Allocate(fTracker->GetTracks());
462 memory->TrackArray2Memory(ntracks0,trackdata0,fTracker->GetTracks());
6e32a12a 463 /*
108615fc 464 //write tracks
465 if(fWriteOut){
6e32a12a 466 sprintf(name,"%stracks_tr_%d_%d.raw",fWriteOutPath,slice,patch);
108615fc 467 memory->SetBinaryOutput(name);
468 memory->Memory2Binary(ntracks0,trackdata0);
469 memory->CloseBinaryOutput();
470 }
6e32a12a 471 */
108615fc 472 fInterMerger->Reset();
473 fInterMerger->SetTransformer(fTransformer);
e0ea9951 474 fInterMerger->Init(fRow[patch],patch);
108615fc 475
108615fc 476 fInterMerger->FillTracks(ntracks0,trackdata0);
108615fc 477 fBenchmark->Start("Inter Merger");
82bd465a 478 // fInterMerger->Merge();
108615fc 479// fInterMerger->SlowMerge();
480
481 fBenchmark->Stop("Inter Merger");
6e32a12a 482 /*
108615fc 483 //write inter merged tracks
484 if(fWriteOut){
6e32a12a 485 sprintf(name,"%stracks_im_%d_%d.raw",fWriteOutPath,slice,patch);
108615fc 486 WriteTracks(name,fInterMerger,'i'); //write output of intermerger
6e32a12a 487 }
488 */
108615fc 489 memory->Free();
490
491 UInt_t ntracks1 =0;
492 AliL3TrackSegmentData *trackdata1 =
493 (AliL3TrackSegmentData *) memory->Allocate(fInterMerger->GetInTracks(0));
494 memory->TrackArray2Memory(ntracks1,trackdata1,fInterMerger->GetInTracks(0));
495
496 fTrackMerger->InitSector(slice,patch);
108615fc 497 fTrackMerger->FillTracks(ntracks1,trackdata1);
108615fc 498
499 memory->Free();
500 }
501 fBenchmark->Start("Patch Merger");
502// fTrackMerger->SlowMerge();
95a00d93 503 //fTrackMerger->AddAllTracks();
504 fTrackMerger->Merge();
108615fc 505 fBenchmark->Stop("Patch Merger");
6e32a12a 506 /*
108615fc 507 //write merged tracks
508 if(fWriteOut){
6e32a12a 509 sprintf(name,"%stracks_tm_%d.raw",fWriteOutPath,slice);
108615fc 510 WriteTracks(name,fTrackMerger,'o'); //write output of trackmerger
511 }
6e32a12a 512 */
108615fc 513 fTrackData = (AliL3TrackSegmentData *)
514 fFileHandler->Allocate(fTrackMerger->GetOutTracks());
515
516 fFileHandler->TrackArray2Memory(fNTrackData,fTrackData,
517 fTrackMerger->GetOutTracks());
518
519 delete memory;
520}
521
522void AliLevel3::WriteSpacePoints(UInt_t npoints,AliL3SpacePointData *points,
523 Int_t slice,Int_t patch){
524 char name[256];
6e32a12a 525 sprintf(name,"%spoints_%d_%d.raw",fWriteOutPath,slice,patch);
108615fc 526 AliL3MemHandler * memory = new AliL3MemHandler();
527 memory->SetBinaryOutput(name);
528 memory->Transform(npoints,points,slice,fTransformer);
529 memory->Memory2Binary(npoints,points);
530 memory->CloseBinaryOutput();
531 delete memory;
532}
533
534
535Int_t AliLevel3::WriteTracks(char *filename,AliL3Merger *merger,char opt){
2e1fe9ef 536 AliL3MemHandler *memory = new AliL3MemHandler();
108615fc 537 memory->SetBinaryOutput(filename);
538 if(opt=='a'||opt=='i'){ //add intracks
539 for(Int_t i=0;i<merger->GetNIn();i++){
540 AliL3TrackArray *tr=merger->GetInTracks(i);
541 memory->TrackArray2Binary(tr);
542 }
543 }
544
545 if(opt=='o'||opt=='a'){
546 AliL3TrackArray *tr=merger->GetOutTracks();
547 memory->TrackArray2Binary(tr);
548 }
549
550 memory->CloseBinaryOutput();
551
552 return 1;
553}
554
555void AliLevel3::WriteResults()
556{
557 //Write the resulting tracks to outputfile
6e32a12a 558 Char_t fname[256];
559 sprintf(fname,"%stracks.raw",fWriteOutPath);
560 WriteTracks(fname,fGlobalMerger,'a');
561 //WriteTracks("tracks.raw",fGlobalMerger,'a');
562 sprintf(fname,"%stracks_gl.raw",fWriteOutPath);
563 WriteTracks(fname,fGlobalMerger,'o');
564 //WriteTracks("tracks_gl.raw",fGlobalMerger,'o');
108615fc 565}