]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/src/AliLevel3.cxx
Checking in for the weekend
[u/mrichter/AliRoot.git] / HLT / src / AliLevel3.cxx
index aefa02b122aff32169fbc4751c15c544ef152d7a..e99b32a1b931b9e7b862d24ef6b5d69a99356379 100644 (file)
@@ -1,6 +1,7 @@
-//Author:        Uli Frankenfeld
-//Author:        Anders Strand Vestbo
-//Last Modified: 13.12.2000
+//$Id$
+
+// Author: Anders Vestbo <mailto:vestbo$fi.uib.no>, Uli Frankenfeld <mailto:franken@fi.uib.no>
+//*-- Copyright &copy ASV
 
 #include <TFile.h>
 #include <TDirectory.h>
@@ -33,7 +34,7 @@
 #include "AliL3SpacePointData.h"
 #include "AliL3VertexData.h"
 
-//_______________________________________
+//_____________________________________________________________
 //
 //  AliLevel3
 //
 //  AliLevel3 *level3 = new AliLevel3(inputfile,outputfile);
 //  level3->SetTrackerParam(); //Sets default tracking parameters
 //  level3->ProcessSector(2,2);  //Does tracking on sector 2 (actually 2+38)
+//Begin_Html
+/*
+<img src="tpcsectorsnb.gif">
+*/
+//End_Html
 
 ClassImp(AliLevel3)
 
@@ -110,12 +116,15 @@ void AliLevel3::Init(){
   fGlobalMerger=0;
   fTransformer = new AliL3Transform();
   fDoRoi = kFALSE;
+  fDoNonVertex = kFALSE;
+  fClusterDeconv = kTRUE;
   fEta[0] = 0.;
   fEta[1] = 0.9;
   fUseBinary =kFALSE;
   SetPath("");
-  fFindVertex =kTRUE;
-  if(0){
+  fFindVertex =kFALSE;
+  fEvent=0;
+  if(1){
     fNPatch = 1;   //number of patches change row in process
     fRow[0][0] = 0;     // first row
     fRow[0][1] = 175;   // last row
@@ -135,12 +144,12 @@ void AliLevel3::Init(){
     fRow[1][1] = 77;
     fRow[2][0] = 78;
     fRow[2][1] = 109;
-    fRow[3][0] = 110;
+    fRow[3][0] = 110; 
     fRow[3][1] = 141;
     fRow[4][0] = 142;
     fRow[4][1] = 175;   // last row
   }
-  if(1){
+  if(0){
     fNPatch = 6;   //number of patches change row in process
     fRow[0][0] = 0;     // first row
     fRow[0][1] = 31;
@@ -174,10 +183,10 @@ void AliLevel3::DoBench(char* name){
 }
 
 void AliLevel3::DoMc(char* file){
-  #ifdef use_aliroot
+#ifdef use_aliroot
   if(!fFileHandler->IsDigit())
     fFileHandler->SetMCOutput(file);
-  #endif
+#endif
 }
 
 AliLevel3::~AliLevel3(){
@@ -192,31 +201,35 @@ AliLevel3::~AliLevel3(){
 }
 
 void AliLevel3::SetTrackerParam(Int_t phi_segments, Int_t eta_segments,
-                                  Int_t trackletlength, Int_t tracklength,
-                                  Int_t rowscopetracklet, Int_t rowscopetrack,
-                                  Double_t min_pt_fit, Double_t maxangle,
-                                  Double_t goodDist, Double_t hitChi2Cut,
-                                  Double_t goodHitChi2, Double_t trackChi2Cut,
-                                  Int_t maxdist)
+                               Int_t trackletlength, Int_t tracklength,
+                               Int_t rowscopetracklet, Int_t rowscopetrack,
+                               Double_t min_pt_fit, Double_t maxangle,
+                               Double_t goodDist, Double_t hitChi2Cut,
+                               Double_t goodHitChi2, Double_t trackChi2Cut,
+                               Int_t maxdist,Double_t maxphi,Double_t maxeta,Bool_t vertexconstraint)
 {
   //Set parameters input to the tracker
   //If no arguments are given, default parameters will be used
   
   fTracker->SetNSegments(phi_segments,eta_segments);
-  fTracker->MainVertexSettings(trackletlength,tracklength,rowscopetracklet,rowscopetrack);
   fTracker->SetMaxDca(min_pt_fit);
-  fTracker->SetTrackletCuts(maxangle,goodDist,true);
-  fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist);
-
+  fTracker->SetTrackCuts(hitChi2Cut,goodHitChi2,trackChi2Cut,maxdist,vertexconstraint);
+  fTracker->SetTrackletCuts(maxangle,goodDist,vertexconstraint);
+  if(vertexconstraint)
+    fTracker->MainVertexSettings(trackletlength,tracklength,rowscopetracklet,rowscopetrack,maxphi,maxeta);
+  else
+    fTracker->NonVertexSettings(trackletlength,tracklength,rowscopetracklet,rowscopetrack);
+  
   fTracker->SetParamDone(true);
 }
 
-void AliLevel3::ProcessEvent(Int_t first,Int_t last){
+void AliLevel3::ProcessEvent(Int_t first,Int_t last,Int_t event){
   //Do tracking on all slices in region [first,last]
   //Slices numbering in TPC goes from 0-35, which means that 1 slice
   //corresponds to inner+outer sector.E.g. slice 2 corresponds to
   //inner=2 + outer=38.
   fGlobalMerger= new AliL3GlobalMerger(first,last);  
+  fEvent=event;
   for(Int_t i=first; i<=last; i++){
     ProcessSlice(i);
     fGlobalMerger->SetVertex(fVertex);
@@ -228,8 +241,9 @@ void AliLevel3::ProcessEvent(Int_t first,Int_t last){
     fTrackData=0;
   }
   fBenchmark->Start("Global Merger");
-  fGlobalMerger->Merge();
-//  fGlobalMerger->SlowMerge();
+  //fGlobalMerger->AddAllTracks();
+  //fGlobalMerger->Merge();
+  fGlobalMerger->SlowMerge();
   fBenchmark->Stop("Global Merger");
 
   if(fWriteOut) WriteResults(); 
@@ -241,11 +255,14 @@ void AliLevel3::ProcessSlice(Int_t slice){
   Bool_t UseCF = kFALSE;
 #ifdef use_aliroot
   UseCF = fFileHandler->IsDigit();
+#else
+  if(fUseBinary)
+    UseCF = kTRUE; //In case you are not using aliroot
 #endif
   const Int_t maxpoints=100000;
   const Int_t pointsize = maxpoints * sizeof(AliL3SpacePointData);
   AliL3MemHandler *memory = new AliL3MemHandler();
-
+  
   fTrackMerger->Reset();
   fTrackMerger->SetTransformer(fTransformer);
   fTrackMerger->SetRows(fRow[0]);
@@ -259,15 +276,15 @@ void AliLevel3::ProcessSlice(Int_t slice){
     if(UseCF){
       if(fUseBinary){
         if(!fDoRoi){ 
-          if(0){     //Binary to Memory
-            fFileHandler->Free();
+          if(1){     //Binary to Memory
+           fFileHandler->Free();
             sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,patch);
-            if(!fFileHandler->SetBinaryInput(name)) return;
-            digits= (AliL3DigitRowData *)fFileHandler->CompBinary2Memory(ndigits);
+           if(!fFileHandler->SetBinaryInput(name)) return;
+           digits= (AliL3DigitRowData *)fFileHandler->CompBinary2Memory(ndigits);
             fFileHandler->CloseBinaryInput(); 
           }
 
-          if(1){     //Binary to Memory with Benchmark 
+          if(0){     //Binary to Memory with Benchmark 
             fFileHandler->Free();
             sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,patch);
             if(!memory->SetBinaryInput(name)) return;
@@ -335,7 +352,7 @@ void AliLevel3::ProcessSlice(Int_t slice){
         }
   
         if(1){     //Ali to Memory
-          digits=(AliL3DigitRowData *)fFileHandler->AliDigits2Memory(ndigits);
+          digits=(AliL3DigitRowData *)fFileHandler->AliDigits2Memory(ndigits,fEvent);
           if(fWriteOut){   //Memory to Binary
             fFileHandler->SetBinaryOutput(name);
             fFileHandler->Memory2CompBinary(ndigits,digits);
@@ -349,9 +366,10 @@ void AliLevel3::ProcessSlice(Int_t slice){
   
       fClusterFinder = new AliL3ClustFinderNew(fTransformer);
       fClusterFinder->InitSlice(slice,patch,fRow[patch][0],fRow[patch][1]
-                                                               ,maxpoints);
-      fClusterFinder->SetXYError(0.1);
-      fClusterFinder->SetZError(0.2);
+                               ,maxpoints);
+      fClusterFinder->SetDeconv(fClusterDeconv);
+      fClusterFinder->SetXYError(0.2);
+      fClusterFinder->SetZError(0.3);
       fClusterFinder->SetOutputArray(points);
       fClusterFinder->Read(ndigits,digits);
       fBenchmark->Start("Cluster Finder");
@@ -410,18 +428,21 @@ void AliLevel3::ProcessSlice(Int_t slice){
       }
       fTrackMerger->SetVertex(fVertex);
     }
-    fTracker->InitSector(slice,fRow[patch],fEta);
+    fTracker->InitSector(slice,fRow[patch]);//,fEta);
     fTracker->SetVertex(fVertex);
     fBenchmark->Start("Tracker Read Hits");
     fTracker->ReadHits(npoints,points);
     fBenchmark->Stop("Tracker Read Hits");
     fBenchmark->Start("MainVertexTracking A"); 
-    fTracker->MainVertexTracking_a();
+    fTracker->MainVertexTracking();
+    //fTracker->MainVertexTracking_a();
     fBenchmark->Stop("MainVertexTracking A");
-    fBenchmark->Start("MainVertexTracking B"); 
-    fTracker->MainVertexTracking_b();
-    fBenchmark->Stop("MainVertexTracking B");
+    //fBenchmark->Start("MainVertexTracking B"); 
+    //fTracker->MainVertexTracking_b();
+    //fBenchmark->Stop("MainVertexTracking B");
     fBenchmark->Start("Tracking fit");
+    if(fDoNonVertex)
+      fTracker->NonVertexTracking();//Do a second pass for nonvertex tracks
     fTracker->FillTracks();
     fBenchmark->Stop("Tracking fit");
 
@@ -438,31 +459,32 @@ void AliLevel3::ProcessSlice(Int_t slice){
     AliL3TrackSegmentData *trackdata0  = 
          (AliL3TrackSegmentData *) memory->Allocate(fTracker->GetTracks());
     memory->TrackArray2Memory(ntracks0,trackdata0,fTracker->GetTracks());
-    
+    /*
     //write tracks
     if(fWriteOut){
-      sprintf(name,"tracks_tr_%d_%d.raw",slice,patch);
+      sprintf(name,"%stracks_tr_%d_%d.raw",fWriteOutPath,slice,patch);
       memory->SetBinaryOutput(name);
       memory->Memory2Binary(ntracks0,trackdata0);
       memory->CloseBinaryOutput();
     }
-    
+    */
     fInterMerger->Reset();
     fInterMerger->SetTransformer(fTransformer);
     fInterMerger->Init(fRow[patch],patch);
 
     fInterMerger->FillTracks(ntracks0,trackdata0);
     fBenchmark->Start("Inter Merger");
-    fInterMerger->Merge();
+    // fInterMerger->Merge();
 //    fInterMerger->SlowMerge();
     
     fBenchmark->Stop("Inter Merger");
-
+    /*
     //write inter merged tracks
     if(fWriteOut){
-      sprintf(name,"tracks_im_%d_%d.raw",slice,patch);
+      sprintf(name,"%stracks_im_%d_%d.raw",fWriteOutPath,slice,patch);
       WriteTracks(name,fInterMerger,'i'); //write output of intermerger
-    }
+      }
+    */
     memory->Free();
     
     UInt_t ntracks1 =0;
@@ -477,15 +499,16 @@ void AliLevel3::ProcessSlice(Int_t slice){
   }
   fBenchmark->Start("Patch Merger");
 //  fTrackMerger->SlowMerge();
-  fTrackMerger->AddAllTracks();
-//  fTrackMerger->Merge();
+  //fTrackMerger->AddAllTracks();
+  fTrackMerger->Merge();
   fBenchmark->Stop("Patch Merger");
+  /*
   //write merged tracks
   if(fWriteOut){
-    sprintf(name,"tracks_tm_%d.raw",slice);
+    sprintf(name,"%stracks_tm_%d.raw",fWriteOutPath,slice);
     WriteTracks(name,fTrackMerger,'o'); //write output of trackmerger
   }
+  */
   fTrackData = (AliL3TrackSegmentData *) 
                          fFileHandler->Allocate(fTrackMerger->GetOutTracks());
 
@@ -498,7 +521,7 @@ void AliLevel3::ProcessSlice(Int_t slice){
 void AliLevel3::WriteSpacePoints(UInt_t npoints,AliL3SpacePointData *points,
                                                       Int_t slice,Int_t patch){
   char name[256];
-  sprintf(name,"points_%d_%d.raw",slice,patch);
+  sprintf(name,"%spoints_%d_%d.raw",fWriteOutPath,slice,patch);
   AliL3MemHandler * memory = new AliL3MemHandler();
   memory->SetBinaryOutput(name);
   memory->Transform(npoints,points,slice,fTransformer);
@@ -531,6 +554,11 @@ Int_t AliLevel3::WriteTracks(char *filename,AliL3Merger *merger,char opt){
 void AliLevel3::WriteResults()
 {
   //Write the resulting tracks to outputfile
-  WriteTracks("tracks.raw",fGlobalMerger,'a');
-  WriteTracks("tracks_gl.raw",fGlobalMerger,'o');
+  Char_t fname[256];
+  sprintf(fname,"%stracks.raw",fWriteOutPath);
+  WriteTracks(fname,fGlobalMerger,'a');
+  //WriteTracks("tracks.raw",fGlobalMerger,'a');
+  sprintf(fname,"%stracks_gl.raw",fWriteOutPath);
+  WriteTracks(fname,fGlobalMerger,'o');
+  //WriteTracks("tracks_gl.raw",fGlobalMerger,'o');
 }