4 #include "AliHLTLogger.h"
5 #include "AliHLTFileHandler.h"
6 #include "AliHLTDigitData.h"
7 #include "AliHLTTransform.h"
8 #include "AliHLTHough.h"
9 #include "AliHLTTrackArray.h"
10 #include "AliHLTTrack.h"
11 #include "AliHLTHoughTrack.h"
12 #include "AliHLTFitter.h"
13 #include "AliHLTClusterFitter.h"
14 #include "AliHLTVertex.h"
15 #include "AliHLTBenchmark.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=AliHLTTransform::Init(path,kTRUE);
33 cerr << "Could not create transform settings, please check log for error messages!" << endl;
36 Float_t ptmin = 0.1*AliHLTTransform::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 AliHLTBenchmark *fBenchmark = new AliHLTBenchmark();
59 AliHLTHough *hough = new AliHLTHough();
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 AliHLTClusterFitter *fitter = new AliHLTClusterFitter(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,AliHLTTransform::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 < AliHLTTransform::GetNPatches(); ipatch++)
109 hough->GetMemHandler(ipatch)->Free();
110 hough->GetMemHandler(ipatch)->Init(slice,ipatch);
111 AliHLTDigitRowData *digits = (AliHLTDigitRowData *)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 AliHLTTrackArray *tracks = fitter->GetSeeds();
128 AliHLTFitter *ft = new AliHLTFitter(&vertex,1);
130 ft->LoadClusters("./fitter/",ev,kFALSE);
131 fBenchmark->Start("Track fitter");
132 for(Int_t i=0; i<tracks->GetNTracks(); i++)
134 AliHLTTrack *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");