]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Alieve/TRDModuleImp.cxx
- The default value of useFastDecoder in ctor changed to kFALSE,
[u/mrichter/AliRoot.git] / EVE / Alieve / TRDModuleImp.cxx
CommitLineData
a282bf09 1#include "TRDModuleImp.h"
2#include "TRDData.h"
3
4#include "TMath.h"
5#include <TGListTree.h>
6
32e219c2 7#include "Reve/ReveManager.h"
a282bf09 8#include "Reve/Track.h"
9
edf0c4a0 10#include "AliLog.h"
a282bf09 11#include "AliRun.h"
12#include "AliTRDv1.h"
13#include "AliTRDgeometry.h"
14#include "AliTRDCommonParam.h"
15#include "AliTRDpadPlane.h"
16#include "AliTRDdigit.h"
17#include "AliTRDhit.h"
18#include "AliTRDcluster.h"
19#include "AliTRDcalibDB.h"
20#include "AliTRDdataArrayI.h"
21#include "AliTRDmcmTracklet.h"
22
23
24
25using namespace Reve;
26using namespace Alieve;
27using namespace std;
28
29ClassImp(TRDChamber)
30ClassImp(TRDNode)
31
32//________________________________________________________
f5790a4c 33TRDNode::TRDNode(const char *typ, Int_t det) :
2caed564 34 Reve::RenderElement(), TRDModule(typ, det)
a282bf09 35{
36}
37
38//________________________________________________________
39void TRDNode::Paint(Option_t* option)
40{
e6ac3950 41 List_i iter = fChildren.begin();
a282bf09 42 while(iter != fChildren.end()){
43 (dynamic_cast<TRDModule*>(*iter))->Paint(option);
44 iter++;
45 }
46}
47
48//________________________________________________________
49void TRDNode::Reset()
50{
e6ac3950 51 List_i iter = fChildren.begin();
a282bf09 52 while(iter != fChildren.end()){
53 (dynamic_cast<TRDModule*>(*iter))->Reset();
54 iter++;
55 }
56}
57
58//________________________________________________________
14217b5f 59void TRDNode::Collapse()
a282bf09 60{
61 TGListTree *list = gReve->GetListTree();
62 TRDNode *node = 0x0;
e6ac3950 63 List_i iter = fChildren.begin();
a282bf09 64 while(iter != fChildren.end()){
14217b5f 65 if((node = dynamic_cast<TRDNode*>(*iter))) node->Collapse();
a282bf09 66 list->CloseItem(FindListTreeItem(list));
67 iter++;
68 }
69}
70
71//________________________________________________________
72void TRDNode::Expand()
73{
74 TGListTree *list = gReve->GetListTree();
75 TRDNode *node = 0x0;
e6ac3950 76 List_i iter = fChildren.begin();
a282bf09 77 while(iter != fChildren.end()){
78 if((node = dynamic_cast<TRDNode*>(*iter))) node->Expand();
79 list->OpenItem(FindListTreeItem(list));
80 iter++;
81 }
82}
83
84//________________________________________________________
85void TRDNode::EnableListElements()
86{
2caed564 87 SetRnrSelf(kTRUE);
a282bf09 88 TRDNode *node = 0x0;
89 TRDChamber *chmb = 0x0;
e6ac3950 90 List_i iter = fChildren.begin();
a282bf09 91 while(iter != fChildren.end()){
92 if((node = dynamic_cast<TRDNode*>(*iter))){
2caed564 93 node->SetRnrSelf(kTRUE);
a282bf09 94 node->EnableListElements();
95 }
2caed564 96 if((chmb = dynamic_cast<TRDChamber*>(*iter))) chmb->SetRnrSelf(kTRUE);
a282bf09 97 iter++;
98 }
99 gReve->Redraw3D();
100}
101
102//________________________________________________________
103void TRDNode::DisableListElements()
104{
2caed564 105 SetRnrSelf(kFALSE);
a282bf09 106 TRDNode *node = 0x0;
107 TRDChamber *chmb = 0x0;
e6ac3950 108 List_i iter = fChildren.begin();
a282bf09 109 while(iter != fChildren.end()){
110 if((node = dynamic_cast<TRDNode*>(*iter))){
2caed564 111 node->SetRnrSelf(kFALSE);
a282bf09 112 node->DisableListElements();
113 }
2caed564 114 if((chmb = dynamic_cast<TRDChamber*>(*iter))) chmb->SetRnrSelf(kFALSE);
a282bf09 115 iter++;
116 }
117 gReve->Redraw3D();
118}
119
120//________________________________________________________
121void TRDNode::UpdateLeaves()
122{
123 TRDModule *module;
e6ac3950 124 List_i iter = fChildren.begin();
a282bf09 125 while(iter != fChildren.end()){
126 module = dynamic_cast<TRDModule*>(*iter);
127 if(!module) continue;
128
129 module->fRnrHits = fRnrHits;
130 module->fRnrDigits = fRnrDigits;
131 module->fDigitsLog = fDigitsLog;
132 module->fDigitsBox = fDigitsBox;
133 module->fDigitsThreshold = fDigitsThreshold;
134 module->kDigitsNeedRecompute = kDigitsNeedRecompute;
135 module->fRnrRecPoints = fRnrRecPoints;
136 module->fRnrTracklets = fRnrTracklets;
137 iter++;
138 }
139
140 TRDNode *node = 0x0;
141 iter = fChildren.begin();
142 while(iter != fChildren.end()){
143 if((node = dynamic_cast<TRDNode*>(*iter))) node->UpdateLeaves();
144 iter++;
145 }
146}
147
148
149//________________________________________________________
150void TRDNode::UpdateNode()
151{
152// Info("UpdateNode()", Form("%s", GetName()));
153 TRDNode *node = 0x0;
e6ac3950 154 List_i iter = fChildren.begin();
a282bf09 155 while(iter != fChildren.end()){
156 if((node = dynamic_cast<TRDNode*>(*iter))) node->UpdateNode();
157 iter++;
158 }
159
160 Int_t score[11];
161 for(int i=0; i<11; i++) score[i] = 0;
162 TRDModule *module;
163 iter = fChildren.begin();
164 while(iter != fChildren.end()){
165 module = dynamic_cast<TRDModule*>(*iter);
166 if(!module) continue;
167 score[0] += (module->fLoadHits) ? 1 : 0;
168 score[1] += (module->fRnrHits) ? 1 : 0;
169
170 score[2] += (module->fLoadDigits) ? 1 : 0;
171 score[3] += (module->fRnrDigits) ? 1 : 0;
172 score[4] += (module->fDigitsLog) ? 1 : 0;
173 score[5] += (module->fDigitsBox) ? 1 : 0;
174 score[6] += (module->kDigitsNeedRecompute) ? 1 : 0;
175
176 score[7] += (module->fLoadRecPoints) ? 1 : 0;
177 score[8] += (module->fRnrRecPoints) ? 1 : 0;
178
179 score[9] += (module->fLoadTracklets) ? 1 : 0;
180 score[10] += (module->fRnrTracklets) ? 1 : 0;
181 iter++;
182 }
183
184 Int_t size = fChildren.size();
185 fLoadHits = (score[0] > 0) ? kTRUE : kFALSE;
186 fRnrHits = (score[1] == size) ? kTRUE : kFALSE;
187
188 fLoadDigits = (score[2] > 0) ? kTRUE : kFALSE;
189 fRnrDigits = (score[3] == size) ? kTRUE : kFALSE;
190 fDigitsLog = (score[4] == size) ? kTRUE : kFALSE;
191 fDigitsBox = (score[5] == size) ? kTRUE : kFALSE;
192 kDigitsNeedRecompute = (score[6] == size) ? kTRUE : kFALSE;
193
194 fLoadRecPoints = (score[7] > 0) ? kTRUE : kFALSE;
195 fRnrRecPoints = (score[8] == size) ? kTRUE : kFALSE;
196
197 fLoadTracklets = (score[9] > 0) ? kTRUE : kFALSE;
198 fRnrTracklets = (score[10] == size) ? kTRUE : kFALSE;
199}
200
201
202///////////////////////////////////////////////////////////
203///////////// TRDChamber /////////////////////
204///////////////////////////////////////////////////////////
205
206//________________________________________________________
f5790a4c 207TRDChamber::TRDChamber(Int_t det) :
14217b5f 208 Reve::RenderElement(), TRDModule("Chmb", det), rowMax(-1), colMax(-1), timeMax(22), fX0(0.), fPla(-1)
a282bf09 209{
210 //
211 // Constructor
212 //
14217b5f 213
a282bf09 214 fDigits = 0x0;
215 fHits = 0x0;
216 fRecPoints = 0x0;
217 fTracklets = 0x0;
218
c9625b63 219 AliTRDCommonParam* parCom = AliTRDCommonParam::Instance();
220 samplingFrequency = parCom->GetSamplingFrequency();
14217b5f 221
222 fGeo = 0x0;
223 fPadPlane = 0x0;
a282bf09 224}
225
226//________________________________________________________
14217b5f 227TRDChamber::TRDChamber(const TRDChamber &mod):
a282bf09 228 Reve::RenderElement(), TRDModule("Chmb", mod.fDet)
229{
230 //
231 // Copy constructor
232 //
233 SetMainColor(mod.GetMainColor());
234
235 if(mod.fDigits) {}
236 if(mod.fHits) {}
237 if(mod.fRecPoints){}
238}
239
240//________________________________________________________
241TRDChamber& TRDChamber::operator=(const TRDChamber &mod)
242{
243 //
244 // Assignment operator
245 //
246
247 if (this != &mod) {
248 fDet = mod.fDet;
249 if(mod.fDigits) {}
250 if(mod.fHits) {}
251 if(mod.fRecPoints){}
252 }
253 return *this;
254}
255
edf0c4a0 256//________________________________________________________
257Int_t TRDChamber::GetSM() const
258{
259 if(!fGeo){
260 AliWarning("Fail. No TRD geometry defined.");
261 return -1;
262 }
263 return fGeo->GetSector(fDet);
264}
265
266//________________________________________________________
267Int_t TRDChamber::GetSTK() const
268{
269 if(!fGeo){
270 AliWarning("Fail. No TRD geometry defined.");
271 return -1;
272 }
273 return fGeo->GetChamber(fDet);
274}
275
a282bf09 276//________________________________________________________
277void TRDChamber::LoadClusters(TObjArray *clusters)
278{
279 //
280 // Draw clusters
281 //
282
14217b5f 283 if(!fGeo){
edf0c4a0 284 AliError(Form("Geometry not set for chamber %d. Please call first TRDChamber::SetGeometry().", fDet));
14217b5f 285 return;
286 }
edf0c4a0 287
a282bf09 288 if(!fRecPoints){
edf0c4a0 289 fRecPoints = new TRDClusters(this);
a282bf09 290 fRecPoints->SetMarkerSize(1.);
291 fRecPoints->SetMarkerStyle(24);
292 fRecPoints->SetMarkerColor(6);
edf0c4a0 293 fRecPoints->SetOwnIds(kTRUE);
14217b5f 294 } else fRecPoints->Reset();
a282bf09 295
be2031ac 296 Float_t q;
297 Double_t cloc[3], cglo[3];
a282bf09 298
a282bf09 299 AliTRDcluster *c=0x0;
300 for(int iclus=0; iclus<clusters->GetEntriesFast(); iclus++){
301 c = (AliTRDcluster*)clusters->UncheckedAt(iclus);
be2031ac 302 cloc[0] = c->GetX();
303 cloc[1] = c->GetY();
304 cloc[2] = c->GetZ();
a282bf09 305 q = c->GetQ();
306 fGeo->RotateBack(fDet,cloc,cglo);
307 fRecPoints->SetNextPoint(cglo[0], cglo[1], cglo[2]);
edf0c4a0 308 fRecPoints->SetPointId(c);
a282bf09 309 }
310 fLoadRecPoints = kTRUE;
311}
312
313//________________________________________________________
14217b5f 314void TRDChamber::LoadDigits(AliTRDdigitsManager *digits)
a282bf09 315{
316 //
317 // Draw digits
318 //
14217b5f 319 if(!fGeo){
edf0c4a0 320 AliError(Form("Geometry not set for chamber %d. Please call first TRDChamber::SetGeometry().", fDet));
14217b5f 321 return;
322 }
323// Info("LoadDigits()", Form("digits =0x%x", digits));
324
a282bf09 325 if(!fDigits) fDigits = new TRDDigits(this);
326 else fDigits->Reset();
327
328 fDigits->SetData(digits);
329 fLoadDigits = kTRUE;
330}
331
332//________________________________________________________
333void TRDChamber::AddHit(AliTRDhit *hit)
334{
335 //
336 // Draw hits
337 //
14217b5f 338// Info("AddHit()", Form("%s", GetName()));
339
a282bf09 340 if(!fHits){
edf0c4a0 341 fHits = new TRDHits(this);
a282bf09 342 fHits->SetMarkerSize(.1);
343 fHits->SetMarkerColor(2);
edf0c4a0 344 fHits->SetOwnIds(kTRUE);
a282bf09 345 }
14217b5f 346
a282bf09 347 fHits->SetNextPoint(hit->X(), hit->Y(), hit->Z());
edf0c4a0 348 fHits->SetPointId(hit);
a282bf09 349 fLoadHits = kTRUE;
350}
351
352//________________________________________________________
353void TRDChamber::LoadTracklets(TObjArray *tracks)
354{
355 //
356 // Draw tracks
357 //
14217b5f 358 if(!fGeo){
359 Error("LoadTracklets()", Form("Geometry not set for chamber %d. Please call first TRDChamber::SetGeometry().", fDet));
360 return;
361 }
362// Info("LoadTracklets()", Form("tracks = 0x%x", tracks));
363
a282bf09 364 if(!fTracklets){
365 fTracklets = new std::vector<Reve::Track*>;
14217b5f 366 } else fTracklets->clear();
a282bf09 367
a282bf09 368
369 AliTRDmcmTracklet *trk = 0x0;
370 Double_t cloc[3], cglo[3];
371 for(int itrk=0; itrk<tracks->GetEntries();itrk++){
372 trk = (AliTRDmcmTracklet*)tracks->At(itrk);
373 trk->MakeTrackletGraph(fGeo,.5);
374 fTracklets->push_back(new Reve::Track());
375 fTracklets->back()->SetLineColor(4);
376
377 cloc[0] = trk->GetTime0(); // x0
378 cloc[1] = trk->GetOffset(); // y0
379 cloc[2] = trk->GetRowz(); // z
380 fGeo->RotateBack(fDet,cloc,cglo);
381 fTracklets->back()->SetNextPoint(cglo[0], cglo[1], cglo[2]);
382
383 cloc[0] += 3.7; // x1
384 cloc[1] += TMath::Tan(trk->GetSlope()*TMath::Pi()/180.) * 3.7; // y1
385 fGeo->RotateBack(fDet,cloc,cglo);
386 fTracklets->back()->SetNextPoint(cglo[0], cglo[1], cglo[2]);
387 }
388 fLoadTracklets = kTRUE;
389}
390
391//____________________________________________________
392void TRDChamber::Paint(Option_t* option)
393{
394/* Info("Paint()", Form("%s", GetName()));*/
2caed564 395 if(!fRnrSelf) return;
a282bf09 396 if(fDigits && fRnrDigits){
397 if(kDigitsNeedRecompute){
a282bf09 398 fDigits->ComputeRepresentation();
399 kDigitsNeedRecompute = kFALSE;
400 }
401 fDigits->Paint(option);
402 }
403 if(fRecPoints && fRnrRecPoints) fRecPoints->GetObject()->Paint(option);
404 if(fHits && fRnrHits) fHits->GetObject()->Paint(option);
405 if(fTracklets && fRnrTracklets){
406 for(vector<Reve::Track*>::iterator i=fTracklets->begin(); i != fTracklets->end(); ++i) (*i)->Paint(option);
407 }
408}
409
410//________________________________________________________
411void TRDChamber::Reset()
412{
413 if(fHits){
414 fHits->Reset();
415 fLoadHits = kFALSE;
416 }
417 if(fDigits){
418 fDigits->Reset();
419 fLoadDigits = kFALSE;
420 }
421 if(fRecPoints){
422 fRecPoints->Reset();
423 fLoadRecPoints = kFALSE;
424 }
425 if(fTracklets){
426 fTracklets->clear();
427 fLoadTracklets = kFALSE;
428 }
429}
430
14217b5f 431//________________________________________________________
432void TRDChamber::SetGeometry(AliTRDgeometry *geo)
433{
434 fGeo = geo;
435
436 fPla = fGeo->GetPlane(fDet);
437 fX0 = fGeo->GetTime0(fPla);
438
2f767356 439 fPadPlane = fGeo->GetPadPlane(fPla,fGeo->GetChamber(fDet));
14217b5f 440 rowMax = fPadPlane->GetNrows();
441 colMax = fPadPlane->GetNcols();
442}
443