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 **************************************************************************/
10 #include "AliEveTRDModuleImp.h"
11 #include "AliEveTRDData.h"
14 #include <TGListTree.h>
16 #include "TEveManager.h"
17 #include "TEveTrack.h"
22 #include "AliTRDgeometry.h"
23 #include "AliTRDCommonParam.h"
24 #include "AliTRDpadPlane.h"
25 #include "AliTRDdigit.h"
26 #include "AliTRDhit.h"
27 #include "AliTRDcluster.h"
28 #include "AliTRDcalibDB.h"
29 #include "AliTRDdataArrayI.h"
30 #include "AliTRDmcmTracklet.h"
32 ClassImp(AliEveTRDChamber)
33 ClassImp(AliEveTRDNode)
35 //______________________________________________________________________________
36 AliEveTRDNode::AliEveTRDNode(const char *typ, Int_t det) :
37 TEveElement(), AliEveTRDModule(typ, det)
41 //______________________________________________________________________________
42 void AliEveTRDNode::Paint(Option_t* option)
44 List_i iter = fChildren.begin();
45 while(iter != fChildren.end()){
46 (dynamic_cast<AliEveTRDModule*>(*iter))->Paint(option);
51 //______________________________________________________________________________
52 void AliEveTRDNode::Reset()
54 List_i iter = fChildren.begin();
55 while(iter != fChildren.end()){
56 (dynamic_cast<AliEveTRDModule*>(*iter))->Reset();
61 //______________________________________________________________________________
62 void AliEveTRDNode::Collapse()
64 TGListTree *list = gEve->GetListTree();
65 AliEveTRDNode *node = 0x0;
66 List_i iter = fChildren.begin();
67 while(iter != fChildren.end()){
68 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->Collapse();
69 list->CloseItem(FindListTreeItem(list));
74 //______________________________________________________________________________
75 void AliEveTRDNode::Expand()
77 TGListTree *list = gEve->GetListTree();
78 AliEveTRDNode *node = 0x0;
79 List_i iter = fChildren.begin();
80 while(iter != fChildren.end()){
81 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->Expand();
82 list->OpenItem(FindListTreeItem(list));
87 //______________________________________________________________________________
88 void AliEveTRDNode::EnableListElements()
91 AliEveTRDNode *node = 0x0;
92 AliEveTRDChamber *chmb = 0x0;
93 List_i iter = fChildren.begin();
94 while(iter != fChildren.end()){
95 if((node = dynamic_cast<AliEveTRDNode*>(*iter))){
96 node->SetRnrSelf(kTRUE);
97 node->EnableListElements();
99 if((chmb = dynamic_cast<AliEveTRDChamber*>(*iter))) chmb->SetRnrSelf(kTRUE);
105 //______________________________________________________________________________
106 void AliEveTRDNode::DisableListElements()
109 AliEveTRDNode *node = 0x0;
110 AliEveTRDChamber *chmb = 0x0;
111 List_i iter = fChildren.begin();
112 while(iter != fChildren.end()){
113 if((node = dynamic_cast<AliEveTRDNode*>(*iter))){
114 node->SetRnrSelf(kFALSE);
115 node->DisableListElements();
117 if((chmb = dynamic_cast<AliEveTRDChamber*>(*iter))) chmb->SetRnrSelf(kFALSE);
123 //______________________________________________________________________________
124 void AliEveTRDNode::UpdateLeaves()
126 AliEveTRDModule *module;
127 List_i iter = fChildren.begin();
128 while(iter != fChildren.end()){
129 module = dynamic_cast<AliEveTRDModule*>(*iter);
130 if(!module) continue;
132 module->fRnrHits = fRnrHits;
133 module->fRnrDigits = fRnrDigits;
134 module->fDigitsLog = fDigitsLog;
135 module->fDigitsBox = fDigitsBox;
136 module->fDigitsThreshold = fDigitsThreshold;
137 module->fDigitsNeedRecompute = fDigitsNeedRecompute;
138 module->fRnrRecPoints = fRnrRecPoints;
139 module->fRnrTracklets = fRnrTracklets;
143 AliEveTRDNode *node = 0x0;
144 iter = fChildren.begin();
145 while(iter != fChildren.end()){
146 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->UpdateLeaves();
152 //______________________________________________________________________________
153 void AliEveTRDNode::UpdateNode()
155 // Info("UpdateNode()", Form("%s", GetName()));
156 AliEveTRDNode *node = 0x0;
157 List_i iter = fChildren.begin();
158 while(iter != fChildren.end()){
159 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->UpdateNode();
164 for(int i=0; i<11; i++) score[i] = 0;
165 AliEveTRDModule *module;
166 iter = fChildren.begin();
167 while(iter != fChildren.end()){
168 module = dynamic_cast<AliEveTRDModule*>(*iter);
169 if(!module) continue;
170 score[0] += (module->fLoadHits) ? 1 : 0;
171 score[1] += (module->fRnrHits) ? 1 : 0;
173 score[2] += (module->fLoadDigits) ? 1 : 0;
174 score[3] += (module->fRnrDigits) ? 1 : 0;
175 score[4] += (module->fDigitsLog) ? 1 : 0;
176 score[5] += (module->fDigitsBox) ? 1 : 0;
177 score[6] += (module->fDigitsNeedRecompute) ? 1 : 0;
179 score[7] += (module->fLoadRecPoints) ? 1 : 0;
180 score[8] += (module->fRnrRecPoints) ? 1 : 0;
182 score[9] += (module->fLoadTracklets) ? 1 : 0;
183 score[10] += (module->fRnrTracklets) ? 1 : 0;
187 Int_t size = fChildren.size();
188 fLoadHits = (score[0] > 0) ? kTRUE : kFALSE;
189 fRnrHits = (score[1] == size) ? kTRUE : kFALSE;
191 fLoadDigits = (score[2] > 0) ? kTRUE : kFALSE;
192 fRnrDigits = (score[3] == size) ? kTRUE : kFALSE;
193 fDigitsLog = (score[4] == size) ? kTRUE : kFALSE;
194 fDigitsBox = (score[5] == size) ? kTRUE : kFALSE;
195 fDigitsNeedRecompute = (score[6] == size) ? kTRUE : kFALSE;
197 fLoadRecPoints = (score[7] > 0) ? kTRUE : kFALSE;
198 fRnrRecPoints = (score[8] == size) ? kTRUE : kFALSE;
200 fLoadTracklets = (score[9] > 0) ? kTRUE : kFALSE;
201 fRnrTracklets = (score[10] == size) ? kTRUE : kFALSE;
205 ///////////////////////////////////////////////////////////
206 //////////// AliEveTRDChamber ////////////////////
207 ///////////////////////////////////////////////////////////
209 //______________________________________________________________________________
210 AliEveTRDChamber::AliEveTRDChamber(Int_t det) :
211 TEveElement(), AliEveTRDModule("Chmb", det),
212 fDigits(0), fHits(0), fRecPoints(0), fTracklets(0),
213 fRowMax(-1), fColMax(-1), fTimeMax(22), fSamplingFrequency(0),
222 AliTRDCommonParam* parCom = AliTRDCommonParam::Instance();
223 fSamplingFrequency = parCom->GetSamplingFrequency();
226 //______________________________________________________________________________
227 Int_t AliEveTRDChamber::GetSM() const
230 AliWarning("Fail. No TRD geometry defined.");
233 return fGeo->GetSector(fDet);
236 //______________________________________________________________________________
237 Int_t AliEveTRDChamber::GetSTK() const
240 AliWarning("Fail. No TRD geometry defined.");
243 return fGeo->GetChamber(fDet);
246 //______________________________________________________________________________
247 void AliEveTRDChamber::LoadClusters(TObjArray *clusters)
254 AliError(Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
259 fRecPoints = new AliEveTRDClusters(this);
260 fRecPoints->SetMarkerSize(1.);
261 fRecPoints->SetMarkerStyle(24);
262 fRecPoints->SetMarkerColor(6);
263 fRecPoints->SetOwnIds(kTRUE);
264 } else fRecPoints->Reset();
267 Double_t cloc[3], cglo[3];
269 AliTRDcluster *c=0x0;
270 for(int iclus=0; iclus<clusters->GetEntriesFast(); iclus++){
271 c = (AliTRDcluster*)clusters->UncheckedAt(iclus);
276 fGeo->RotateBack(fDet,cloc,cglo);
277 fRecPoints->SetNextPoint(cglo[0], cglo[1], cglo[2]);
278 fRecPoints->SetPointId(c);
280 fLoadRecPoints = kTRUE;
283 //______________________________________________________________________________
284 void AliEveTRDChamber::LoadDigits(AliTRDdigitsManager *digits)
290 AliError(Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
293 // Info("LoadDigits()", Form("digits =0x%x", digits));
295 if(!fDigits) fDigits = new AliEveTRDDigits(this);
296 else fDigits->Reset();
298 fDigits->SetData(digits);
302 //______________________________________________________________________________
303 void AliEveTRDChamber::AddHit(AliTRDhit *hit)
308 // Info("AddHit()", Form("%s", GetName()));
311 fHits = new AliEveTRDHits(this);
312 fHits->SetMarkerSize(.1);
313 fHits->SetMarkerColor(2);
314 fHits->SetOwnIds(kTRUE);
317 fHits->SetNextPoint(hit->X(), hit->Y(), hit->Z());
318 fHits->SetPointId(hit);
322 //______________________________________________________________________________
323 void AliEveTRDChamber::LoadTracklets(TObjArray *tracks)
329 Error("LoadTracklets()", Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
332 // Info("LoadTracklets()", Form("tracks = 0x%x", tracks));
335 fTracklets = new std::vector<TEveTrack*>;
336 } else fTracklets->clear();
339 AliTRDmcmTracklet *trk = 0x0;
340 Double_t cloc[3], cglo[3];
341 for(int itrk=0; itrk<tracks->GetEntries();itrk++){
342 trk = (AliTRDmcmTracklet*)tracks->At(itrk);
343 trk->MakeTrackletGraph(fGeo,.5);
344 fTracklets->push_back(new TEveTrack());
345 fTracklets->back()->SetLineColor(4);
347 cloc[0] = trk->GetTime0(); // x0
348 cloc[1] = trk->GetOffset(); // y0
349 cloc[2] = trk->GetRowz(); // z
350 fGeo->RotateBack(fDet,cloc,cglo);
351 fTracklets->back()->SetNextPoint(cglo[0], cglo[1], cglo[2]);
353 cloc[0] += 3.7; // x1
354 cloc[1] += TMath::Tan(trk->GetSlope()*TMath::Pi()/180.) * 3.7; // y1
355 fGeo->RotateBack(fDet,cloc,cglo);
356 fTracklets->back()->SetNextPoint(cglo[0], cglo[1], cglo[2]);
358 fLoadTracklets = kTRUE;
361 //____________________________________________________
362 void AliEveTRDChamber::Paint(Option_t* option)
364 /* Info("Paint()", Form("%s", GetName()));*/
365 if(!fRnrSelf) return;
366 if(fDigits && fRnrDigits){
367 if(fDigitsNeedRecompute){
368 fDigits->ComputeRepresentation();
369 fDigitsNeedRecompute = kFALSE;
371 fDigits->Paint(option);
373 if(fRecPoints && fRnrRecPoints) fRecPoints->GetObject()->Paint(option);
374 if(fHits && fRnrHits) fHits->GetObject()->Paint(option);
375 if(fTracklets && fRnrTracklets){
376 for(std::vector<TEveTrack*>::iterator i=fTracklets->begin(); i != fTracklets->end(); ++i) (*i)->Paint(option);
380 //______________________________________________________________________________
381 void AliEveTRDChamber::Reset()
389 fLoadDigits = kFALSE;
393 fLoadRecPoints = kFALSE;
397 fLoadTracklets = kFALSE;
401 //______________________________________________________________________________
402 void AliEveTRDChamber::SetGeometry(AliTRDgeometry *geo)
406 fPla = fGeo->GetPlane(fDet);
407 fX0 = fGeo->GetTime0(fPla);
409 fPadPlane = fGeo->GetPadPlane(fPla,fGeo->GetChamber(fDet));
410 fRowMax = fPadPlane->GetNrows();
411 fColMax = fPadPlane->GetNcols();