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