2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
4 /**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
9 #include "AliEveTRDModuleImp.h"
10 #include "AliEveTRDData.h"
13 #include <TGListTree.h>
15 #include "TEveManager.h"
16 #include "TEveTrack.h"
21 #include "AliTRDgeometry.h"
22 #include "AliTRDCommonParam.h"
23 #include "AliTRDpadPlane.h"
24 #include "AliTRDdigit.h"
25 #include "AliTRDhit.h"
26 #include "AliTRDcluster.h"
27 #include "AliTRDcalibDB.h"
28 #include "AliTRDdataArrayI.h"
29 #include "AliTRDmcmTracklet.h"
33 ClassImp(AliEveTRDChamber)
34 ClassImp(AliEveTRDNode)
36 //________________________________________________________
37 AliEveTRDNode::AliEveTRDNode(const char *typ, Int_t det) :
38 TEveElement(), AliEveTRDModule(typ, det)
42 //________________________________________________________
43 void AliEveTRDNode::Paint(Option_t* option)
45 List_i iter = fChildren.begin();
46 while(iter != fChildren.end()){
47 (dynamic_cast<AliEveTRDModule*>(*iter))->Paint(option);
52 //________________________________________________________
53 void AliEveTRDNode::Reset()
55 List_i iter = fChildren.begin();
56 while(iter != fChildren.end()){
57 (dynamic_cast<AliEveTRDModule*>(*iter))->Reset();
62 //________________________________________________________
63 void AliEveTRDNode::Collapse()
65 TGListTree *list = gEve->GetListTree();
66 AliEveTRDNode *node = 0x0;
67 List_i iter = fChildren.begin();
68 while(iter != fChildren.end()){
69 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->Collapse();
70 list->CloseItem(FindListTreeItem(list));
75 //________________________________________________________
76 void AliEveTRDNode::Expand()
78 TGListTree *list = gEve->GetListTree();
79 AliEveTRDNode *node = 0x0;
80 List_i iter = fChildren.begin();
81 while(iter != fChildren.end()){
82 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->Expand();
83 list->OpenItem(FindListTreeItem(list));
88 //________________________________________________________
89 void AliEveTRDNode::EnableListElements()
92 AliEveTRDNode *node = 0x0;
93 AliEveTRDChamber *chmb = 0x0;
94 List_i iter = fChildren.begin();
95 while(iter != fChildren.end()){
96 if((node = dynamic_cast<AliEveTRDNode*>(*iter))){
97 node->SetRnrSelf(kTRUE);
98 node->EnableListElements();
100 if((chmb = dynamic_cast<AliEveTRDChamber*>(*iter))) chmb->SetRnrSelf(kTRUE);
106 //________________________________________________________
107 void AliEveTRDNode::DisableListElements()
110 AliEveTRDNode *node = 0x0;
111 AliEveTRDChamber *chmb = 0x0;
112 List_i iter = fChildren.begin();
113 while(iter != fChildren.end()){
114 if((node = dynamic_cast<AliEveTRDNode*>(*iter))){
115 node->SetRnrSelf(kFALSE);
116 node->DisableListElements();
118 if((chmb = dynamic_cast<AliEveTRDChamber*>(*iter))) chmb->SetRnrSelf(kFALSE);
124 //________________________________________________________
125 void AliEveTRDNode::UpdateLeaves()
127 AliEveTRDModule *module;
128 List_i iter = fChildren.begin();
129 while(iter != fChildren.end()){
130 module = dynamic_cast<AliEveTRDModule*>(*iter);
131 if(!module) continue;
133 module->fRnrHits = fRnrHits;
134 module->fRnrDigits = fRnrDigits;
135 module->fDigitsLog = fDigitsLog;
136 module->fDigitsBox = fDigitsBox;
137 module->fDigitsThreshold = fDigitsThreshold;
138 module->kDigitsNeedRecompute = kDigitsNeedRecompute;
139 module->fRnrRecPoints = fRnrRecPoints;
140 module->fRnrTracklets = fRnrTracklets;
144 AliEveTRDNode *node = 0x0;
145 iter = fChildren.begin();
146 while(iter != fChildren.end()){
147 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->UpdateLeaves();
153 //________________________________________________________
154 void AliEveTRDNode::UpdateNode()
156 // Info("UpdateNode()", Form("%s", GetName()));
157 AliEveTRDNode *node = 0x0;
158 List_i iter = fChildren.begin();
159 while(iter != fChildren.end()){
160 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->UpdateNode();
165 for(int i=0; i<11; i++) score[i] = 0;
166 AliEveTRDModule *module;
167 iter = fChildren.begin();
168 while(iter != fChildren.end()){
169 module = dynamic_cast<AliEveTRDModule*>(*iter);
170 if(!module) continue;
171 score[0] += (module->fLoadHits) ? 1 : 0;
172 score[1] += (module->fRnrHits) ? 1 : 0;
174 score[2] += (module->fLoadDigits) ? 1 : 0;
175 score[3] += (module->fRnrDigits) ? 1 : 0;
176 score[4] += (module->fDigitsLog) ? 1 : 0;
177 score[5] += (module->fDigitsBox) ? 1 : 0;
178 score[6] += (module->kDigitsNeedRecompute) ? 1 : 0;
180 score[7] += (module->fLoadRecPoints) ? 1 : 0;
181 score[8] += (module->fRnrRecPoints) ? 1 : 0;
183 score[9] += (module->fLoadTracklets) ? 1 : 0;
184 score[10] += (module->fRnrTracklets) ? 1 : 0;
188 Int_t size = fChildren.size();
189 fLoadHits = (score[0] > 0) ? kTRUE : kFALSE;
190 fRnrHits = (score[1] == size) ? kTRUE : kFALSE;
192 fLoadDigits = (score[2] > 0) ? kTRUE : kFALSE;
193 fRnrDigits = (score[3] == size) ? kTRUE : kFALSE;
194 fDigitsLog = (score[4] == size) ? kTRUE : kFALSE;
195 fDigitsBox = (score[5] == size) ? kTRUE : kFALSE;
196 kDigitsNeedRecompute = (score[6] == size) ? kTRUE : kFALSE;
198 fLoadRecPoints = (score[7] > 0) ? kTRUE : kFALSE;
199 fRnrRecPoints = (score[8] == size) ? kTRUE : kFALSE;
201 fLoadTracklets = (score[9] > 0) ? kTRUE : kFALSE;
202 fRnrTracklets = (score[10] == size) ? kTRUE : kFALSE;
206 ///////////////////////////////////////////////////////////
207 ///////////// AliEveTRDChamber /////////////////////
208 ///////////////////////////////////////////////////////////
210 //________________________________________________________
211 AliEveTRDChamber::AliEveTRDChamber(Int_t det) :
212 TEveElement(), AliEveTRDModule("Chmb", det), rowMax(-1), colMax(-1), timeMax(22), fX0(0.), fPla(-1)
223 AliTRDCommonParam* parCom = AliTRDCommonParam::Instance();
224 samplingFrequency = parCom->GetSamplingFrequency();
230 //________________________________________________________
231 AliEveTRDChamber::AliEveTRDChamber(const AliEveTRDChamber &mod):
232 TEveElement(), AliEveTRDModule("Chmb", mod.fDet)
237 SetMainColor(mod.GetMainColor());
244 //________________________________________________________
245 AliEveTRDChamber& AliEveTRDChamber::operator=(const AliEveTRDChamber &mod)
248 // Assignment operator
260 //________________________________________________________
261 Int_t AliEveTRDChamber::GetSM() const
264 AliWarning("Fail. No TRD geometry defined.");
267 return fGeo->GetSector(fDet);
270 //________________________________________________________
271 Int_t AliEveTRDChamber::GetSTK() const
274 AliWarning("Fail. No TRD geometry defined.");
277 return fGeo->GetChamber(fDet);
280 //________________________________________________________
281 void AliEveTRDChamber::LoadClusters(TObjArray *clusters)
288 AliError(Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
293 fRecPoints = new AliEveTRDClusters(this);
294 fRecPoints->SetMarkerSize(1.);
295 fRecPoints->SetMarkerStyle(24);
296 fRecPoints->SetMarkerColor(6);
297 fRecPoints->SetOwnIds(kTRUE);
298 } else fRecPoints->Reset();
301 Double_t cloc[3], cglo[3];
303 AliTRDcluster *c=0x0;
304 for(int iclus=0; iclus<clusters->GetEntriesFast(); iclus++){
305 c = (AliTRDcluster*)clusters->UncheckedAt(iclus);
310 fGeo->RotateBack(fDet,cloc,cglo);
311 fRecPoints->SetNextPoint(cglo[0], cglo[1], cglo[2]);
312 fRecPoints->SetPointId(c);
314 fLoadRecPoints = kTRUE;
317 //________________________________________________________
318 void AliEveTRDChamber::LoadDigits(AliTRDdigitsManager *digits)
324 AliError(Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
327 // Info("LoadDigits()", Form("digits =0x%x", digits));
329 if(!fDigits) fDigits = new AliEveTRDDigits(this);
330 else fDigits->Reset();
332 fDigits->SetData(digits);
336 //________________________________________________________
337 void AliEveTRDChamber::AddHit(AliTRDhit *hit)
342 // Info("AddHit()", Form("%s", GetName()));
345 fHits = new AliEveTRDHits(this);
346 fHits->SetMarkerSize(.1);
347 fHits->SetMarkerColor(2);
348 fHits->SetOwnIds(kTRUE);
351 fHits->SetNextPoint(hit->X(), hit->Y(), hit->Z());
352 fHits->SetPointId(hit);
356 //________________________________________________________
357 void AliEveTRDChamber::LoadTracklets(TObjArray *tracks)
363 Error("LoadTracklets()", Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
366 // Info("LoadTracklets()", Form("tracks = 0x%x", tracks));
369 fTracklets = new std::vector<TEveTrack*>;
370 } else fTracklets->clear();
373 AliTRDmcmTracklet *trk = 0x0;
374 Double_t cloc[3], cglo[3];
375 for(int itrk=0; itrk<tracks->GetEntries();itrk++){
376 trk = (AliTRDmcmTracklet*)tracks->At(itrk);
377 trk->MakeTrackletGraph(fGeo,.5);
378 fTracklets->push_back(new TEveTrack());
379 fTracklets->back()->SetLineColor(4);
381 cloc[0] = trk->GetTime0(); // x0
382 cloc[1] = trk->GetOffset(); // y0
383 cloc[2] = trk->GetRowz(); // z
384 fGeo->RotateBack(fDet,cloc,cglo);
385 fTracklets->back()->SetNextPoint(cglo[0], cglo[1], cglo[2]);
387 cloc[0] += 3.7; // x1
388 cloc[1] += TMath::Tan(trk->GetSlope()*TMath::Pi()/180.) * 3.7; // y1
389 fGeo->RotateBack(fDet,cloc,cglo);
390 fTracklets->back()->SetNextPoint(cglo[0], cglo[1], cglo[2]);
392 fLoadTracklets = kTRUE;
395 //____________________________________________________
396 void AliEveTRDChamber::Paint(Option_t* option)
398 /* Info("Paint()", Form("%s", GetName()));*/
399 if(!fRnrSelf) return;
400 if(fDigits && fRnrDigits){
401 if(kDigitsNeedRecompute){
402 fDigits->ComputeRepresentation();
403 kDigitsNeedRecompute = kFALSE;
405 fDigits->Paint(option);
407 if(fRecPoints && fRnrRecPoints) fRecPoints->GetObject()->Paint(option);
408 if(fHits && fRnrHits) fHits->GetObject()->Paint(option);
409 if(fTracklets && fRnrTracklets){
410 for(vector<TEveTrack*>::iterator i=fTracklets->begin(); i != fTracklets->end(); ++i) (*i)->Paint(option);
414 //________________________________________________________
415 void AliEveTRDChamber::Reset()
423 fLoadDigits = kFALSE;
427 fLoadRecPoints = kFALSE;
431 fLoadTracklets = kFALSE;
435 //________________________________________________________
436 void AliEveTRDChamber::SetGeometry(AliTRDgeometry *geo)
440 fPla = fGeo->GetPlane(fDet);
441 fX0 = fGeo->GetTime0(fPla);
443 fPadPlane = fGeo->GetPadPlane(fPla,fGeo->GetChamber(fDet));
444 rowMax = fPadPlane->GetNrows();
445 colMax = fPadPlane->GetNcols();