]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDReconstructor.cxx
Updating Run Types for TRIGGER pp.
[u/mrichter/AliRoot.git] / TRD / AliTRDReconstructor.cxx
CommitLineData
121a60bd 1/**************************************************************************
91834b8d 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**************************************************************************/
121a60bd 15
16/* $Id$ */
17
18///////////////////////////////////////////////////////////////////////////////
19// //
4fad09c9 20// Class for TRD reconstruction //
121a60bd 21// //
22///////////////////////////////////////////////////////////////////////////////
23
3a039a31 24#include <TObjString.h>
25#include <TObjArray.h>
d39401ad 26#include <TTreeStream.h>
27#include <TDirectory.h>
121a60bd 28
3bc9d03e 29#include "AliRawReader.h"
3bc9d03e 30
31#include "AliTRDReconstructor.h"
3fe61b77 32#include "AliTRDclusterizer.h"
a8fbb161 33#include "AliTRDrawData.h"
a2fbb6ec 34#include "AliTRDrawStreamBase.h"
a8fbb161 35#include "AliTRDdigitsManager.h"
e4f2f73d 36#include "AliTRDtrackerV1.h"
29f95561 37
97b6dfac 38#define SETFLG(n,f) ((n) |= f)
39#define CLRFLG(n,f) ((n) &= ~f)
40
121a60bd 41ClassImp(AliTRDReconstructor)
42
66f6bfd9 43TClonesArray *AliTRDReconstructor::fgClusters = 0x0;
a5b99acd 44TClonesArray *AliTRDReconstructor::fgTracklets = 0x0;
b72f4eaf 45Char_t* AliTRDReconstructor::fgSteerNames[kNsteer] = {
46 "DigitsConversion "
b72f4eaf 47 ,"Write Clusters "
48 ,"Write Online Tracklets "
b72f4eaf 49 ,"Stand Alone Tracking "
a2fbb6ec 50 ,"HLT Mode "
a5b99acd 51 ,"Process Online Tracklets"
a2fbb6ec 52 ,"Debug Streaming "
b72f4eaf 53};
54Char_t* AliTRDReconstructor::fgSteerFlags[kNsteer] = {
55 "dc"// digits conversion [false]
b72f4eaf 56 ,"cw"// write clusters [true]
57 ,"tw"// write online tracklets [false]
b72f4eaf 58 ,"sa"// track seeding (stand alone tracking) [true]
b72f4eaf 59 ,"hlt"// HLT reconstruction [false]
a5b99acd 60 ,"tp"// also use online tracklets for reconstruction [false]
a2fbb6ec 61 ,"deb"// Write debug stream [false]
b72f4eaf 62};
a2fbb6ec 63Char_t* AliTRDReconstructor::fgTaskNames[AliTRDrecoParam::kTRDreconstructionTasks] = {
64 "Clusterizer"
b72f4eaf 65 ,"Tracker"
66 ,"PID"
67};
a2fbb6ec 68Char_t* AliTRDReconstructor::fgTaskFlags[AliTRDrecoParam::kTRDreconstructionTasks] = {
69 "cl"
b72f4eaf 70 ,"tr"
71 ,"pd"
72};
73
eb38ed55 74//_____________________________________________________________________________
3a039a31 75AliTRDReconstructor::AliTRDReconstructor()
76 :AliReconstructor()
97b6dfac 77 ,fSteerParam(0)
3a039a31 78{
97b6dfac 79 // setting default "ON" steering parameters
89971837 80 // owner of debug streamers
81 SETFLG(fSteerParam, kOwner);
97b6dfac 82 // write clusters [cw]
83 SETFLG(fSteerParam, kWriteClusters);
84 // track seeding (stand alone tracking) [sa]
85 SETFLG(fSteerParam, kSeeding);
a2fbb6ec 86
87 memset(fDebugStream, 0, sizeof(TTreeSRedirector *) * AliTRDrecoParam::kTRDreconstructionTasks);
eb38ed55 88}
89
48f8adf3 90//_____________________________________________________________________________
91AliTRDReconstructor::~AliTRDReconstructor()
92{
d39401ad 93 //
94 // Destructor
95 //
96
48f8adf3 97 if(fgClusters) {
98 fgClusters->Delete(); delete fgClusters;
99 }
a5b99acd 100 if(fgTracklets) {
101 fgTracklets->Delete(); delete fgTracklets;
102 }
f29f13a6 103 if(fSteerParam&kOwner){
a2fbb6ec 104 for(Int_t itask = 0; itask < AliTRDrecoParam::kTRDreconstructionTasks; itask++)
29f95561 105 if(fDebugStream[itask]) delete fDebugStream[itask];
106 }
18c05eb3 107}
48f8adf3 108
91834b8d 109
acd241e9 110//_____________________________________________________________________________
91834b8d 111void AliTRDReconstructor::Init(){
18c05eb3 112 //
113 // Init Options
114 //
18c05eb3 115 SetOption(GetOption());
a2fbb6ec 116 Options(fSteerParam);
117
118 // Make Debug Streams when Debug Streaming
119 if(IsDebugStreaming()){
120 for(Int_t task = 0; task < AliTRDrecoParam::kTRDreconstructionTasks; task++){
121 TDirectory *savedir = gDirectory;
122 fDebugStream[task] = new TTreeSRedirector(Form("TRD.Debug%s.root", fgTaskNames[task]));
123 savedir->cd();
124 SETFLG(fSteerParam, kOwner);
125 }
126 }
acd241e9 127}
0397ce53 128
121a60bd 129//_____________________________________________________________________________
a8fbb161 130void AliTRDReconstructor::ConvertDigits(AliRawReader *rawReader
91834b8d 131 , TTree *digitsTree) const
121a60bd 132{
3bc9d03e 133 //
25ca55ce 134 // Convert raw data digits into digit objects in a root tree
3bc9d03e 135 //
121a60bd 136
ad5dd6ec 137 //AliInfo("Convert raw data digits into digit objects [RawReader -> Digit TTree]");
91834b8d 138
a8fbb161 139 AliTRDrawData rawData;
3a0f6479 140 rawReader->Reset();
141 rawReader->Select("TRD");
92c7f341 142 rawData.OpenOutput();
a2fbb6ec 143 AliTRDrawStreamBase::SetRawStreamVersion(GetRecoParam()->GetRawStreamVersion()->Data());
a8fbb161 144 AliTRDdigitsManager *manager = rawData.Raw2Digits(rawReader);
145 manager->MakeBranch(digitsTree);
146 manager->WriteDigits();
c0ab62ff 147 delete manager;
0ee00e25 148
121a60bd 149}
150
25ca55ce 151//_____________________________________________________________________________
152void AliTRDReconstructor::Reconstruct(AliRawReader *rawReader
153 , TTree *clusterTree) const
154{
155 //
156 // Reconstruct clusters
157 //
158
91834b8d 159 //AliInfo("Reconstruct TRD clusters from RAW data [RawReader -> Cluster TTree]");
160
161
3a0f6479 162 rawReader->Reset();
163 rawReader->Select("TRD");
a2fbb6ec 164 AliTRDrawStreamBase::SetRawStreamVersion(GetRecoParam()->GetRawStreamVersion()->Data());
3a0f6479 165
ca21baaa 166 // New (fast) cluster finder
a2fbb6ec 167 AliTRDclusterizer clusterer(fgTaskNames[AliTRDrecoParam::kClusterizer], fgTaskNames[AliTRDrecoParam::kClusterizer]);
3d0c7d6d 168 clusterer.SetReconstructor(this);
169 clusterer.OpenOutput(clusterTree);
11d0be11 170 clusterer.OpenTrackletOutput();
b72f4eaf 171 clusterer.SetUseLabels(kFALSE);
ca21baaa 172 clusterer.Raw2ClustersChamber(rawReader);
66f6bfd9 173
174 if(IsWritingClusters()) return;
d6e36038 175
66f6bfd9 176 // take over ownership of clusters
177 fgClusters = clusterer.RecPoints();
178 clusterer.SetClustersOwner(kFALSE);
a5b99acd 179
180 // take over ownership of online tracklets
181 fgTracklets = clusterer.TrackletsArray();
182 clusterer.SetTrackletsOwner(kFALSE);
25ca55ce 183}
184
185//_____________________________________________________________________________
a8fbb161 186void AliTRDReconstructor::Reconstruct(TTree *digitsTree
187 , TTree *clusterTree) const
25ca55ce 188{
189 //
190 // Reconstruct clusters
191 //
e4f2f73d 192
91834b8d 193 //AliInfo("Reconstruct TRD clusters from Digits [Digit TTree -> Cluster TTree]");
a2fbb6ec 194
195 AliTRDclusterizer clusterer(fgTaskNames[AliTRDrecoParam::kClusterizer], fgTaskNames[AliTRDrecoParam::kClusterizer]);
3d0c7d6d 196 clusterer.SetReconstructor(this);
197 clusterer.OpenOutput(clusterTree);
25ca55ce 198 clusterer.ReadDigits(digitsTree);
199 clusterer.MakeClusters();
d6e36038 200
66f6bfd9 201 if(IsWritingClusters()) return;
202
203 // take over ownership of clusters
204 fgClusters = clusterer.RecPoints();
205 clusterer.SetClustersOwner(kFALSE);
a5b99acd 206
207 // take over ownership of online tracklets
208 fgTracklets = clusterer.TrackletsArray();
209 clusterer.SetTrackletsOwner(kFALSE);
25ca55ce 210}
211
212//_____________________________________________________________________________
44dbae42 213AliTracker *AliTRDReconstructor::CreateTracker() const
121a60bd 214{
3bc9d03e 215 //
216 // Create a TRD tracker
217 //
121a60bd 218
e4f2f73d 219 //return new AliTRDtracker(NULL);
3a039a31 220 AliTRDtrackerV1 *tracker = new AliTRDtrackerV1();
221 tracker->SetReconstructor(this);
222 return tracker;
25ca55ce 223
25ca55ce 224}
225
226//_____________________________________________________________________________
227void AliTRDReconstructor::FillESD(TTree* /*digitsTree*/
91834b8d 228 , TTree* /*clusterTree*/
229 , AliESDEvent* /*esd*/) const
25ca55ce 230{
231 //
af26ce80 232 // Fill ESD
25ca55ce 233 //
234
25ca55ce 235}
3a039a31 236
91834b8d 237
3a039a31 238//_____________________________________________________________________________
239void AliTRDReconstructor::SetOption(Option_t *opt)
240{
d39401ad 241 //
242 // Read option string into the steer param.
243 //
97b6dfac 244
245 AliReconstructor::SetOption(opt);
3a039a31 246
247 TString s(opt);
248 TObjArray *opar = s.Tokenize(",");
249 for(Int_t ipar=0; ipar<opar->GetEntriesFast(); ipar++){
d39401ad 250 Bool_t processed = kFALSE;
3a039a31 251 TString sopt(((TObjString*)(*opar)[ipar])->String());
b72f4eaf 252 for(Int_t iopt=0; iopt<kNsteer; iopt++){
253 if(!sopt.Contains(fgSteerFlags[iopt])) continue;
254 SETFLG(fSteerParam, BIT(iopt));
255 if(sopt.Contains("!")) CLRFLG(fSteerParam, BIT(iopt));
d39401ad 256 processed = kTRUE;
b72f4eaf 257 break;
258 }
d39401ad 259 if(processed) continue;
b72f4eaf 260
261 AliWarning(Form("Unknown option flag %s.", sopt.Data()));
3a039a31 262 }
263}
264
acd241e9 265//_____________________________________________________________________________
a2fbb6ec 266void AliTRDReconstructor::Options(UInt_t steer)
b72f4eaf 267{
d39401ad 268 //
269 // Print the options
270 //
271
b72f4eaf 272 for(Int_t iopt=0; iopt<kNsteer; iopt++){
9e8fdff4 273 AliDebugGeneral("AliTRDReconstructor", 1, Form(" %s[%s]%s", fgSteerNames[iopt], fgSteerFlags[iopt], steer ?(((steer>>iopt)&1)?" : ON":" : OFF"):""));
b72f4eaf 274 }
b72f4eaf 275}
276