Removing RAW/alimdc.spec, not used
[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>
d6186083 39#include <AliKalmanTrack.h>
40#include <AliITSgeom.h>
7b4414a8 41#include <AliESDVertex.h>
e10815f1 42
43ClassImp(AliHoughFilter)
44
45//_____________________________________________________________________________
f3c1e83c 46AliHoughFilter::AliHoughFilter():
47fPtmin(0),
48fITSgeom(NULL)
e10815f1 49{
50// default constructor
51
d6186083 52 // Init debug level
4aa41877 53 AliHLTLog::fgLevel = AliHLTLog::kError;
54 if (AliDebugLevel() > 0) AliHLTLog::fgLevel = AliHLTLog::kWarning;
55 if (AliDebugLevel() > 1) AliHLTLog::fgLevel = AliHLTLog::kInformational;
56 if (AliDebugLevel() > 2) AliHLTLog::fgLevel = AliHLTLog::kDebug;
d6186083 57
58 // Init TPC HLT geometry
59 const char *path = gSystem->Getenv("ALICE_ROOT");
60 Char_t pathname[1024];
61 strcpy(pathname,path);
62 strcat(pathname,"/HLT/src");
4aa41877 63 if (!AliHLTTransform::Init(pathname, kFALSE))
e10815f1 64 AliError("HLT initialization failed!");
d6186083 65
66 // Init magnetic field
f7a1cc68 67 AliMagF* field = (AliMagF*)TGeoGlobalMagField::Instance();
c84a5e9e 68 AliTracker::SetFieldMap(field,kTRUE);
4aa41877 69 fPtmin = 0.1*AliHLTTransform::GetSolenoidField();
d6186083 70
71 // Init ITS geometry
72 fITSgeom = new AliITSgeom();
73 fITSgeom->ReadNewFile("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymmFMD.det");
74 if (!fITSgeom)
75 AliError("ITS geometry not found!");
76
c27411e7 77 // Init PID
78 AliPID pid;
e10815f1 79}
80
81//_____________________________________________________________________________
33314186 82Bool_t AliHoughFilter::Filter(AliRawVEvent* event, AliESDEvent* esd)
e10815f1 83{
d6186083 84 // Run fast online reconstruction
85 // based on the HLT tracking algorithms
86
87 TStopwatch globaltimer;
88 globaltimer.Start();
89
d6186083 90 TStopwatch timer;
91 timer.Start();
92
93 TTree *treeITSclusters = new TTree("TreeL3ITSclusters"," "); //make a tree
79eedd0f 94 treeITSclusters->SetDirectory(0);
95
d6186083 96 RunITSclusterer(event,treeITSclusters);
97 RunITSvertexer(esd,treeITSclusters);
98 RunTPCtracking(event,esd);
99 RunITStracking(esd,treeITSclusters);
100 delete treeITSclusters;
101
d6186083 102 AliInfo(Form("Event filter has finished in %f seconds\n\n\n\n\n\n",globaltimer.RealTime()));
103
104 return kTRUE;
105}
106
107//_____________________________________________________________________________
33314186 108void AliHoughFilter::RunITSclusterer(AliRawVEvent* event, TTree *treeClusters)
d6186083 109{
110 // Run ITS Clusterer
111 // The clusters are stored in a tree
112
113 TStopwatch timer;
114 timer.Start();
115
79c75366 116 AliHLTITSclusterer clusterer(0);
d6186083 117 AliRawReader *itsrawreader=new AliRawReaderRoot(event);
118 clusterer.Digits2Clusters(itsrawreader,treeClusters);
119 delete itsrawreader;
120 AliInfo(Form("ITS clusterer has finished in %f seconds\n",timer.RealTime()));
121
122}
123
124
125//_____________________________________________________________________________
af885e0f 126void AliHoughFilter::RunITSvertexer(AliESDEvent* esd, TTree *treeClusters)
d6186083 127{
128 // Run SPD vertexerZ
129 // Store the result in the ESD
130
131 TStopwatch timer;
132 timer.Start();
e10815f1 133
4aa41877 134 AliHLTITSVertexerZ vertexer;
d6186083 135 AliESDVertex *vertex = vertexer.FindVertexForCurrentEvent(fITSgeom,treeClusters);
136 esd->SetVertex(vertex);
137 AliInfo(Form("ITS vertexer has finished in %f seconds\n",timer.RealTime()));
138
139}
140
141//_____________________________________________________________________________
33314186 142void AliHoughFilter::RunTPCtracking(AliRawVEvent* event, AliESDEvent* esd)
d6186083 143{
144 // Run hough transform tracking in TPC
145 // The z of the vertex is taken from the ESD
146 // The result of the tracking is stored in the ESD
e10815f1 147 TStopwatch timer;
148 timer.Start();
149
d6186083 150 const AliESDVertex *vertex = esd->GetVertex();
151 Float_t zvertex = vertex->GetZv();
e10815f1 152
4aa41877 153 AliHLTHough *hough1 = new AliHLTHough();
e10815f1 154
155 hough1->SetThreshold(4);
d6186083 156 hough1->CalcTransformerParams(fPtmin);
e10815f1 157 hough1->SetPeakThreshold(70,-1);
d6186083 158 hough1->Init(100,4,event,zvertex);
e10815f1 159 hough1->SetAddHistograms();
160
4aa41877 161 AliHLTHough *hough2 = new AliHLTHough();
d6186083 162
e10815f1 163 hough2->SetThreshold(4);
d6186083 164 hough2->CalcTransformerParams(fPtmin);
e10815f1 165 hough2->SetPeakThreshold(70,-1);
d6186083 166 hough2->Init(100,4,event,zvertex);
e10815f1 167 hough2->SetAddHistograms();
168
169 Int_t nglobaltracks = 0;
170 /* In case we run HLT code in 2 threads */
171 hough1->StartProcessInThread(0,17);
172 hough2->StartProcessInThread(18,35);
173
174 if(hough1->WaitForThreadFinish())
4aa41877 175 ::Fatal("AliHLTHough::WaitForThreadFinish"," Can not join the required thread! ");
e10815f1 176 if(hough2->WaitForThreadFinish())
4aa41877 177 ::Fatal("AliHLTHough::WaitForThreadFinish"," Can not join the required thread! ");
d6186083 178
179 /* In case we run HLT code in the main thread
180 for(Int_t slice=0; slice<=17; slice++)
181 {
182 hough1->ReadData(slice,0);
183 hough1->Transform();
184 hough1->AddAllHistogramsRows();
185 hough1->FindTrackCandidatesRow();
186 hough1->AddTracks();
187 }
188 for(Int_t slice=18; slice<=35; slice++)
189 {
190 hough2->ReadData(slice,0);
191 hough2->Transform();
192 hough2->AddAllHistogramsRows();
193 hough2->FindTrackCandidatesRow();
194 hough2->AddTracks();
195 }
196 */
e10815f1 197
198 nglobaltracks += hough1->FillESD(esd);
199 nglobaltracks += hough2->FillESD(esd);
200
d6186083 201 /* In case we want to debug the ESD
202 gSystem->MakeDirectory("hough1");
203 hough1->WriteTracks("./hough1");
204 gSystem->MakeDirectory("hough2");
205 hough2->WriteTracks("./hough2");
206 */
e10815f1 207
208 delete hough1;
209 delete hough2;
210
d6186083 211 AliInfo(Form("\nHough Transformer has found %d TPC tracks in %f seconds\n\n", nglobaltracks,timer.RealTime()));
212
213}
214
215//_____________________________________________________________________________
af885e0f 216void AliHoughFilter::RunITStracking(AliESDEvent* esd, TTree *treeClusters)
d6186083 217{
218 // Run the ITS tracker
219 // The tracks from the HT TPC tracking are used as seeds
220 // The prologated tracks are updated in the ESD
221 TStopwatch timer;
222 timer.Start();
223
224 Double_t vtxPos[3];
225 Double_t vtxErr[3]={0.005,0.005,0.010};
226 const AliESDVertex *vertex = esd->GetVertex();
227 vertex->GetXYZ(vtxPos);
228
e341247d 229 AliHLTITStracker itsTracker(0);
d6186083 230 itsTracker.SetVertex(vtxPos,vtxErr);
231
232 itsTracker.LoadClusters(treeClusters);
233 itsTracker.Clusters2Tracks(esd);
234 itsTracker.UnloadClusters();
235 AliInfo(Form("ITS tracker has finished in %f seconds\n",timer.RealTime()));
e10815f1 236
e10815f1 237}