-//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 © ASV
#include <TFile.h>
#include <TDirectory.h>
#include "AliL3ConfMapPoint.h"
#include "AliL3ConfMapTrack.h"
#include "AliL3Transform.h"
-#include "AliL3ClustFinder.h"
+#include "AliL3ClustFinderNew.h"
#include "AliL3DigitData.h"
#include "AliL3TrackArray.h"
#include "AliL3MemHandler.h"
#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)
fGlobalMerger=0;
fTransformer = new AliL3Transform();
fDoRoi = kFALSE;
+ fDoNonVertex = kFALSE;
+ fClusterDeconv = kFALSE;
+ 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] = 173; // last row
+ fRow[0][1] = 175; // last row
}
if(0){
fNPatch = 2; //number of patches change row in process
fRow[0][0] = 0; // first row
fRow[0][1] = 54;
fRow[1][0] = 55;
- fRow[1][1] = 173; // last row
+ fRow[1][1] = 175; // last row
}
- if(1){
+ if(0){
fNPatch = 5; //number of patches change row in process
fRow[0][0] = 0; // first row
fRow[0][1] = 45;
fRow[3][0] = 110;
fRow[3][1] = 141;
fRow[4][0] = 142;
- fRow[4][1] = 173; // last row
+ fRow[4][1] = 175; // last row
+ }
+ if(0){
+ fNPatch = 6; //number of patches change row in process
+ fRow[0][0] = 0; // first row
+ fRow[0][1] = 31;
+ fRow[1][0] = 32;
+ fRow[1][1] = 63;
+ fRow[2][0] = 64;
+ fRow[2][1] = 91;
+ fRow[3][0] = 92;
+ fRow[3][1] = 119;
+ fRow[4][0] = 120;
+ fRow[4][1] = 143;
+ fRow[5][0] = 144;
+ fRow[5][1] = 175; // last row
}
fVertexFinder = new AliL3VertexFinder();
fVertex = new AliL3Vertex();
}
void AliLevel3::DoMc(char* file){
- #ifdef use_aliroot
+#ifdef use_aliroot
if(!fFileHandler->IsDigit())
fFileHandler->SetMCOutput(file);
- #endif
+#endif
}
AliLevel3::~AliLevel3(){
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 maxdist,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);
+ 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);
fTrackData=0;
}
fBenchmark->Start("Global Merger");
- fGlobalMerger->Merge();
-// fGlobalMerger->SlowMerge();
+ //fGlobalMerger->AddAllTracks();
+ //fGlobalMerger->Merge();
+ fGlobalMerger->SlowMerge();
fBenchmark->Stop("Global Merger");
if(fWriteOut) WriteResults();
if(0){ //Binary to Memory
fFileHandler->Free();
sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,patch);
- fFileHandler->SetBinaryInput(name);
+ if(!fFileHandler->SetBinaryInput(name)) return;
digits= (AliL3DigitRowData *)fFileHandler->CompBinary2Memory(ndigits);
fFileHandler->CloseBinaryInput();
}
- if(0){ //Binary to Memory with Benchmark
+ if(1){ //Binary to Memory with Benchmark
fFileHandler->Free();
sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,patch);
- memory->SetBinaryInput(name);
+ if(!memory->SetBinaryInput(name)) return;
UInt_t compsize=memory->GetFileSize();
UInt_t *comp=(UInt_t *)memory->Allocate(compsize);
memory->CompBinary2CompMemory(ndigits,comp);
memory->Free();
}
- if(1){ //Binary to Memory with Random
+ if(0){ //Binary to Memory with Random
fFileHandler->Free();
fFileHandler->ResetRandom();
fFileHandler->SetRandomCluster(100);
fFileHandler->SetNGenerate(100);
sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,patch);
- memory->SetBinaryInput(name);
+ if(!memory->SetBinaryInput(name)) return;
UInt_t compsize=memory->GetFileSize();
UInt_t *comp=(UInt_t *)memory->Allocate(compsize);
memory->CompBinary2CompMemory(ndigits,comp);
Int_t sli[2]={0,0};
fFileHandler->SetROI(fEta,sli);
sprintf(name,"%sdigits_%d_%d.raw",fPath,slice,patch);
- memory->SetBinaryInput(name);
+ if(!memory->SetBinaryInput(name)) return;
UInt_t compsize=memory->GetFileSize();
UInt_t *comp=(UInt_t *)memory->Allocate(compsize);
memory->CompBinary2CompMemory(ndigits,comp);
}
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);
points = (AliL3SpacePointData *) memory->Allocate(pointsize);
- fClusterFinder = new AliL3ClustFinder(fTransformer);
+ fClusterFinder = new AliL3ClustFinderNew(fTransformer);
fClusterFinder->InitSlice(slice,patch,fRow[patch][0],fRow[patch][1]
- ,maxpoints);
+ ,maxpoints);
+ fClusterFinder->SetDeconv(fClusterDeconv);
fClusterFinder->SetXYError(0.1);
fClusterFinder->SetZError(0.2);
fClusterFinder->SetOutputArray(points);
if(fUseBinary){//Binary to Memory
memory->Free();
sprintf(name,"/%spoints_%d_%d.raw",fPath,slice,patch);
- memory->SetBinaryInput(name);
+ if(!memory->SetBinaryInput(name)) return;
points = (AliL3SpacePointData *) memory->Allocate();
memory->Binary2Memory(npoints,points);
memory->CloseBinaryInput();
}
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);
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");
fInterMerger->FillTracks(ntracks0,trackdata0);
fBenchmark->Start("Inter Merger");
- fInterMerger->Merge();
+ // fInterMerger->Merge();
// fInterMerger->SlowMerge();
fBenchmark->Stop("Inter Merger");
fBenchmark->Start("Patch Merger");
// fTrackMerger->SlowMerge();
fTrackMerger->AddAllTracks();
-// fTrackMerger->Merge();
+ fTrackMerger->Merge();
fBenchmark->Stop("Patch Merger");
//write merged tracks
if(fWriteOut){