]> git.uio.no Git - u/mrichter/AliRoot.git/blame - RAW/AliHoughFilter.cxx
Bug fix
[u/mrichter/AliRoot.git] / RAW / AliHoughFilter.cxx
CommitLineData
e10815f1 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id$ */
17
18///////////////////////////////////////////////////////////////////////////////
19// //
20// high level filter algorithm for TPC using a hough transformation //
21// //
22///////////////////////////////////////////////////////////////////////////////
23
e10815f1 24#include <TStopwatch.h>
25
4aa41877 26#include "AliHLTStandardIncludes.h"
27#include "AliHLTLogging.h"
28#include "AliHLTTransform.h"
29#include "AliHLTHough.h"
e10815f1 30#include "AliLog.h"
4aa41877 31#include <AliHLTITSclusterer.h>
32#include <AliHLTITSVertexerZ.h>
33#include <AliHLTITStracker.h>
e10815f1 34
35#include "AliHoughFilter.h"
36
d6186083 37#include "AliRawReaderRoot.h"
38#include <AliMagF.h>
39#include <AliMagFMaps.h>
40#include <AliKalmanTrack.h>
41#include <AliITSgeom.h>
7b4414a8 42#include <AliESDVertex.h>
e10815f1 43
44ClassImp(AliHoughFilter)
45
46//_____________________________________________________________________________
f3c1e83c 47AliHoughFilter::AliHoughFilter():
48fPtmin(0),
49fITSgeom(NULL)
e10815f1 50{
51// default constructor
52
d6186083 53 // Init debug level
4aa41877 54 AliHLTLog::fgLevel = AliHLTLog::kError;
55 if (AliDebugLevel() > 0) AliHLTLog::fgLevel = AliHLTLog::kWarning;
56 if (AliDebugLevel() > 1) AliHLTLog::fgLevel = AliHLTLog::kInformational;
57 if (AliDebugLevel() > 2) AliHLTLog::fgLevel = AliHLTLog::kDebug;
d6186083 58
59 // Init TPC HLT geometry
60 const char *path = gSystem->Getenv("ALICE_ROOT");
61 Char_t pathname[1024];
62 strcpy(pathname,path);
63 strcat(pathname,"/HLT/src");
4aa41877 64 if (!AliHLTTransform::Init(pathname, kFALSE))
e10815f1 65 AliError("HLT initialization failed!");
d6186083 66
67 // Init magnetic field
d6186083 68 AliMagF* field = new AliMagFMaps("Maps","Maps", 2, 1., 10., AliMagFMaps::k5kG);
c84a5e9e 69 AliTracker::SetFieldMap(field,kTRUE);
4aa41877 70 fPtmin = 0.1*AliHLTTransform::GetSolenoidField();
d6186083 71
72 // Init ITS geometry
73 fITSgeom = new AliITSgeom();
74 fITSgeom->ReadNewFile("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymmFMD.det");
75 if (!fITSgeom)
76 AliError("ITS geometry not found!");
77
c27411e7 78 // Init PID
79 AliPID pid;
e10815f1 80}
81
82//_____________________________________________________________________________
af885e0f 83Bool_t AliHoughFilter::Filter(AliRawEvent* event, AliESDEvent* esd)
e10815f1 84{
d6186083 85 // Run fast online reconstruction
86 // based on the HLT tracking algorithms
87
88 TStopwatch globaltimer;
89 globaltimer.Start();
90
d6186083 91 TStopwatch timer;
92 timer.Start();
93
94 TTree *treeITSclusters = new TTree("TreeL3ITSclusters"," "); //make a tree
79eedd0f 95 treeITSclusters->SetDirectory(0);
96
d6186083 97 RunITSclusterer(event,treeITSclusters);
98 RunITSvertexer(esd,treeITSclusters);
99 RunTPCtracking(event,esd);
100 RunITStracking(esd,treeITSclusters);
101 delete treeITSclusters;
102
d6186083 103 AliInfo(Form("Event filter has finished in %f seconds\n\n\n\n\n\n",globaltimer.RealTime()));
104
105 return kTRUE;
106}
107
108//_____________________________________________________________________________
109void AliHoughFilter::RunITSclusterer(AliRawEvent* event, TTree *treeClusters)
110{
111 // Run ITS Clusterer
112 // The clusters are stored in a tree
113
114 TStopwatch timer;
115 timer.Start();
116
79c75366 117 AliHLTITSclusterer clusterer(0);
d6186083 118 AliRawReader *itsrawreader=new AliRawReaderRoot(event);
119 clusterer.Digits2Clusters(itsrawreader,treeClusters);
120 delete itsrawreader;
121 AliInfo(Form("ITS clusterer has finished in %f seconds\n",timer.RealTime()));
122
123}
124
125
126//_____________________________________________________________________________
af885e0f 127void AliHoughFilter::RunITSvertexer(AliESDEvent* esd, TTree *treeClusters)
d6186083 128{
129 // Run SPD vertexerZ
130 // Store the result in the ESD
131
132 TStopwatch timer;
133 timer.Start();
e10815f1 134
4aa41877 135 AliHLTITSVertexerZ vertexer;
d6186083 136 AliESDVertex *vertex = vertexer.FindVertexForCurrentEvent(fITSgeom,treeClusters);
137 esd->SetVertex(vertex);
138 AliInfo(Form("ITS vertexer has finished in %f seconds\n",timer.RealTime()));
139
140}
141
142//_____________________________________________________________________________
af885e0f 143void AliHoughFilter::RunTPCtracking(AliRawEvent* event, AliESDEvent* esd)
d6186083 144{
145 // Run hough transform tracking in TPC
146 // The z of the vertex is taken from the ESD
147 // The result of the tracking is stored in the ESD
e10815f1 148 TStopwatch timer;
149 timer.Start();
150
d6186083 151 const AliESDVertex *vertex = esd->GetVertex();
152 Float_t zvertex = vertex->GetZv();
e10815f1 153
4aa41877 154 AliHLTHough *hough1 = new AliHLTHough();
e10815f1 155
156 hough1->SetThreshold(4);
d6186083 157 hough1->CalcTransformerParams(fPtmin);
e10815f1 158 hough1->SetPeakThreshold(70,-1);
d6186083 159 hough1->Init(100,4,event,zvertex);
e10815f1 160 hough1->SetAddHistograms();
161
4aa41877 162 AliHLTHough *hough2 = new AliHLTHough();
d6186083 163
e10815f1 164 hough2->SetThreshold(4);
d6186083 165 hough2->CalcTransformerParams(fPtmin);
e10815f1 166 hough2->SetPeakThreshold(70,-1);
d6186083 167 hough2->Init(100,4,event,zvertex);
e10815f1 168 hough2->SetAddHistograms();
169
170 Int_t nglobaltracks = 0;
171 /* In case we run HLT code in 2 threads */
172 hough1->StartProcessInThread(0,17);
173 hough2->StartProcessInThread(18,35);
174
175 if(hough1->WaitForThreadFinish())
4aa41877 176 ::Fatal("AliHLTHough::WaitForThreadFinish"," Can not join the required thread! ");
e10815f1 177 if(hough2->WaitForThreadFinish())
4aa41877 178 ::Fatal("AliHLTHough::WaitForThreadFinish"," Can not join the required thread! ");
d6186083 179
180 /* In case we run HLT code in the main thread
181 for(Int_t slice=0; slice<=17; slice++)
182 {
183 hough1->ReadData(slice,0);
184 hough1->Transform();
185 hough1->AddAllHistogramsRows();
186 hough1->FindTrackCandidatesRow();
187 hough1->AddTracks();
188 }
189 for(Int_t slice=18; slice<=35; slice++)
190 {
191 hough2->ReadData(slice,0);
192 hough2->Transform();
193 hough2->AddAllHistogramsRows();
194 hough2->FindTrackCandidatesRow();
195 hough2->AddTracks();
196 }
197 */
e10815f1 198
199 nglobaltracks += hough1->FillESD(esd);
200 nglobaltracks += hough2->FillESD(esd);
201
d6186083 202 /* In case we want to debug the ESD
203 gSystem->MakeDirectory("hough1");
204 hough1->WriteTracks("./hough1");
205 gSystem->MakeDirectory("hough2");
206 hough2->WriteTracks("./hough2");
207 */
e10815f1 208
209 delete hough1;
210 delete hough2;
211
d6186083 212 AliInfo(Form("\nHough Transformer has found %d TPC tracks in %f seconds\n\n", nglobaltracks,timer.RealTime()));
213
214}
215
216//_____________________________________________________________________________
af885e0f 217void AliHoughFilter::RunITStracking(AliESDEvent* esd, TTree *treeClusters)
d6186083 218{
219 // Run the ITS tracker
220 // The tracks from the HT TPC tracking are used as seeds
221 // The prologated tracks are updated in the ESD
222 TStopwatch timer;
223 timer.Start();
224
225 Double_t vtxPos[3];
226 Double_t vtxErr[3]={0.005,0.005,0.010};
227 const AliESDVertex *vertex = esd->GetVertex();
228 vertex->GetXYZ(vtxPos);
229
e341247d 230 AliHLTITStracker itsTracker(0);
d6186083 231 itsTracker.SetVertex(vtxPos,vtxErr);
232
233 itsTracker.LoadClusters(treeClusters);
234 itsTracker.Clusters2Tracks(esd);
235 itsTracker.UnloadClusters();
236 AliInfo(Form("ITS tracker has finished in %f seconds\n",timer.RealTime()));
e10815f1 237
e10815f1 238}