4 #include "AliL3Logger.h"
5 #include "AliL3FileHandler.h"
6 #include "AliL3DigitData.h"
7 #include "AliL3Transform.h"
8 #include "AliL3Hough.h"
9 #include "AliL3TrackArray.h"
10 #include "AliL3Track.h"
11 #include "AliL3HoughTrack.h"
12 #include "AliL3Fitter.h"
13 #include "AliL3ClusterFitter.h"
14 #include "AliL3Vertex.h"
15 #include "AliL3Benchmark.h"
16 #include <AliRunLoader.h>
18 #include <TParticle.h>
22 #include <TStopwatch.h>
23 #include <TBenchmark.h>
29 Int_t runrowhough(Char_t *path="./",Char_t *outpath="./fitter",int s1=0,int s2=35,int nevent=1,Bool_t skip=kTRUE)
31 Bool_t isinit=AliL3Transform::Init(path,kTRUE);
33 cerr << "Could not create transform settings, please check log for error messages!" << endl;
36 Float_t ptmin = 0.1*AliL3Transform::GetSolenoidField();
40 AliRunLoader *rl = AliRunLoader::Open("galice.root");
43 AliStack* stack = rl->Stack();
44 TParticle *orig = (TParticle*)stack->Particle(0);
45 Float_t xori = orig->Vx();
46 Float_t yori = orig->Vy();
48 cout<<" Primary vertex at ("<<xori<<","<<yori<<","<<zvertex<<")"<<endl;
49 if (rl->LoadgAlice()) {
50 cerr<<"Error occured while loading gAlice"<<endl;
56 cout<<" Hough Tranform will run with ptmin="<<ptmin<<" and zvertex="<<zvertex<<endl;
58 AliL3Benchmark *fBenchmark = new AliL3Benchmark();
59 AliL3Hough *hough = new AliL3Hough();
60 hough->SetThreshold(4);
61 hough->SetTransformerParams(140,76,ptmin,-1);
62 hough->SetPeakThreshold(50,-1);
63 hough->Init(path, kFALSE, 100, kFALSE,4,0,0,zvertex);
64 hough->SetAddHistograms();
66 for(int ev=0; ev<nevent; ev++)
68 for(int slice=s1; slice<=s2; slice++)
70 cout<<"Processing slice "<<slice<<endl;
71 hough->ReadData(slice,ev);
73 hough->AddAllHistogramsRows();
74 hough->FindTrackCandidates();
77 hough->WriteTracks(outpath);
79 sprintf(bname,"rowhough_%d",ev);
80 hough->DoBench(bname);
84 AliL3ClusterFitter *fitter = new AliL3ClusterFitter(path);
86 // Set debug flag for the cluster fitter
89 // Setting fitter parameters
90 fitter->SetInnerWidthFactor(1,1.5);
91 fitter->SetOuterWidthFactor(1,1.5);
92 fitter->SetNmaxOverlaps(5);
94 // fitter->SetChiSqMax(5,kFALSE); //isolated clusters
95 fitter->SetChiSqMax(5,kTRUE); //overlapping clusters
97 Int_t rowrange[2] = {0,AliL3Transform::GetNRows()-1};
99 // Takes input from global hough tracks produced by HT
100 fitter->LoadSeeds(rowrange,kFALSE,ev,zvertex);
104 for(int slice=s1; slice<=s2; slice++)
106 for(Int_t ipatch = 0; ipatch < AliL3Transform::GetNPatches(); ipatch++)
109 hough->GetMemHandler(ipatch)->Free();
110 hough->GetMemHandler(ipatch)->Init(slice,ipatch);
111 AliL3DigitRowData *digits = (AliL3DigitRowData *)hough->GetMemHandler(ipatch)->AliAltroDigits2Memory(ndigits,ev);
113 fBenchmark->Start("Fitter Init");
114 fitter->Init(slice,ipatch);
115 fBenchmark->Stop("Fitter Init");
116 fitter->SetInputData(digits);
117 fBenchmark->Start("Fitter cluster finder");
118 fitter->FindClusters();
119 fBenchmark->Stop("Fitter cluster finder");
120 fitter->WriteClusters();
124 // Refit of the clusters
126 //The seeds are the input tracks from circle HT
127 AliL3TrackArray *tracks = fitter->GetSeeds();
128 AliL3Fitter *ft = new AliL3Fitter(&vertex,1);
130 ft->LoadClusters("./fitter/",ev,kFALSE);
131 fBenchmark->Start("Track fitter");
132 for(Int_t i=0; i<tracks->GetNTracks(); i++)
134 AliL3Track *track = tracks->GetCheckedTrack(i);
136 if(track->GetNHits() < 20) continue;
137 ft->SortTrackClusters(track);
139 track->UpdateToFirstPoint();
141 fBenchmark->Stop("Track fitter");
144 //Write the final tracks
145 fitter->WriteTracks(20);
152 fBenchmark->Analyze("fitter");
155 hough->DoBench("rowhough");