]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/EveDet/AliEveTRDModuleImp.cxx
doxy: code cleanup: comments and clarifications
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDModuleImp.cxx
CommitLineData
d810d0de 1// $Id$
2// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4/**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
51346b82 7 * full copyright notice. *
d810d0de 8 **************************************************************************/
fd31e9de 9
d810d0de 10#include "AliEveTRDModuleImp.h"
11#include "AliEveTRDData.h"
b9df0156 12#include "AliEveEventManager.h"
a282bf09 13
a879a24a 14#include "TTree.h"
6983e87a 15#include "TGListTree.h"
16#include "TClonesArray.h"
17#include "TGeoManager.h"
18#include "TGeoMatrix.h"
a282bf09 19
84aff7a4 20#include "TEveManager.h"
21#include "TEveTrack.h"
6983e87a 22#include "TEveGeoNode.h"
23#include "TEveTrans.h"
24
a282bf09 25
edf0c4a0 26#include "AliLog.h"
6bbacce9 27#include "AliCDBManager.h"
a282bf09 28#include "AliTRDgeometry.h"
29#include "AliTRDCommonParam.h"
30#include "AliTRDpadPlane.h"
a282bf09 31#include "AliTRDhit.h"
32#include "AliTRDcluster.h"
6bbacce9 33#include "AliTRDtrackingChamber.h"
a879a24a 34#include "AliTRDtrackletMCM.h"
a282bf09 35
d810d0de 36ClassImp(AliEveTRDChamber)
37ClassImp(AliEveTRDNode)
a282bf09 38
fd31e9de 39//______________________________________________________________________________
d810d0de 40AliEveTRDNode::AliEveTRDNode(const char *typ, Int_t det) :
41 TEveElement(), AliEveTRDModule(typ, det)
a282bf09 42{
a15e6d7d 43 // Xonstructor.
a282bf09 44}
45
fd31e9de 46//______________________________________________________________________________
47void AliEveTRDNode::Paint(Option_t* option)
a282bf09 48{
a15e6d7d 49 // Paint object.
50
90ae0503 51 AliEveTRDModule *module(NULL);
fd31e9de 52 List_i iter = fChildren.begin();
53 while(iter != fChildren.end()){
90ae0503 54 if((module = dynamic_cast<AliEveTRDModule*>(*iter))) module->Paint(option);
fd31e9de 55 iter++;
56 }
a282bf09 57}
58
fd31e9de 59//______________________________________________________________________________
60void AliEveTRDNode::Reset()
a282bf09 61{
a15e6d7d 62 // Reset.
63
fd31e9de 64 List_i iter = fChildren.begin();
65 while(iter != fChildren.end()){
527ceac3 66 //(dynamic_cast<AliEveTRDModule*>(*iter))->Reset();
fd31e9de 67 iter++;
68 }
a282bf09 69}
70
fd31e9de 71//______________________________________________________________________________
d810d0de 72void AliEveTRDNode::Collapse()
a282bf09 73{
a15e6d7d 74 // Collapse.
75
fd31e9de 76 TGListTree *list = gEve->GetListTree();
77 AliEveTRDNode *node = 0x0;
78 List_i iter = fChildren.begin();
79 while(iter != fChildren.end()){
80 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->Collapse();
81 list->CloseItem(FindListTreeItem(list));
82 iter++;
83 }
a282bf09 84}
85
fd31e9de 86//______________________________________________________________________________
d810d0de 87void AliEveTRDNode::Expand()
a282bf09 88{
a15e6d7d 89 // Expand.
90
fd31e9de 91 TGListTree *list = gEve->GetListTree();
92 AliEveTRDNode *node = 0x0;
93 List_i iter = fChildren.begin();
94 while(iter != fChildren.end()){
95 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->Expand();
96 list->OpenItem(FindListTreeItem(list));
97 iter++;
98 }
a282bf09 99}
100
fd31e9de 101//______________________________________________________________________________
e11486f9 102void AliEveTRDNode::EnableListElements(Bool_t rnr_self, Bool_t rnr_children)
a282bf09 103{
a15e6d7d 104 // Enable list elements.
105
e11486f9 106 SetRnrSelf(rnr_self);
107 AliEveTRDNode *node(NULL);
108 AliEveTRDChamber *chmb(NULL);
fd31e9de 109 List_i iter = fChildren.begin();
110 while(iter != fChildren.end()){
111 if((node = dynamic_cast<AliEveTRDNode*>(*iter))){
e11486f9 112 node->SetRnrSelf(rnr_children);
113 node->EnableListElements(rnr_children, rnr_children);
fd31e9de 114 }
e11486f9 115 if((chmb = dynamic_cast<AliEveTRDChamber*>(*iter))) chmb->EnableListElements(rnr_children, rnr_children);
fd31e9de 116 iter++;
117 }
118 gEve->Redraw3D();
a282bf09 119}
120
fd31e9de 121//______________________________________________________________________________
e11486f9 122void AliEveTRDNode::DisableListElements(Bool_t rnr_self, Bool_t rnr_children)
a282bf09 123{
a15e6d7d 124 // Disable list elements.
125
e11486f9 126 SetRnrSelf(rnr_self);
127 AliEveTRDNode *node(NULL);
128 AliEveTRDChamber *chmb(NULL);
fd31e9de 129 List_i iter = fChildren.begin();
130 while(iter != fChildren.end()){
131 if((node = dynamic_cast<AliEveTRDNode*>(*iter))){
e11486f9 132 node->SetRnrSelf(rnr_children);
133 node->DisableListElements(rnr_children, rnr_children);
fd31e9de 134 }
e11486f9 135 if((chmb = dynamic_cast<AliEveTRDChamber*>(*iter))) chmb->DisableListElements(rnr_children, rnr_children);
fd31e9de 136 iter++;
137 }
138 gEve->Redraw3D();
a282bf09 139}
140
fd31e9de 141//______________________________________________________________________________
d810d0de 142void AliEveTRDNode::UpdateLeaves()
a282bf09 143{
a15e6d7d 144 // Update leaves.
145
fd31e9de 146 AliEveTRDModule *module;
147 List_i iter = fChildren.begin();
148 while(iter != fChildren.end()){
149 module = dynamic_cast<AliEveTRDModule*>(*iter);
150 if(!module) continue;
151
152 module->fRnrHits = fRnrHits;
153 module->fRnrDigits = fRnrDigits;
154 module->fDigitsLog = fDigitsLog;
155 module->fDigitsBox = fDigitsBox;
156 module->fDigitsThreshold = fDigitsThreshold;
157 module->fDigitsNeedRecompute = fDigitsNeedRecompute;
158 module->fRnrRecPoints = fRnrRecPoints;
159 module->fRnrTracklets = fRnrTracklets;
160 iter++;
161 }
162
163 AliEveTRDNode *node = 0x0;
164 iter = fChildren.begin();
165 while(iter != fChildren.end()){
166 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->UpdateLeaves();
167 iter++;
168 }
a282bf09 169}
170
171
fd31e9de 172//______________________________________________________________________________
d810d0de 173void AliEveTRDNode::UpdateNode()
a282bf09 174{
a15e6d7d 175 // Update node.
176
fd31e9de 177 // Info("UpdateNode()", Form("%s", GetName()));
178 AliEveTRDNode *node = 0x0;
179 List_i iter = fChildren.begin();
180 while(iter != fChildren.end()){
181 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->UpdateNode();
182 iter++;
183 }
a282bf09 184
fd31e9de 185 Int_t score[11];
186 for(int i=0; i<11; i++) score[i] = 0;
187 AliEveTRDModule *module;
188 iter = fChildren.begin();
189 while(iter != fChildren.end()){
190 module = dynamic_cast<AliEveTRDModule*>(*iter);
191 if(!module) continue;
192 score[0] += (module->fLoadHits) ? 1 : 0;
193 score[1] += (module->fRnrHits) ? 1 : 0;
194
195 score[2] += (module->fLoadDigits) ? 1 : 0;
196 score[3] += (module->fRnrDigits) ? 1 : 0;
197 score[4] += (module->fDigitsLog) ? 1 : 0;
198 score[5] += (module->fDigitsBox) ? 1 : 0;
199 score[6] += (module->fDigitsNeedRecompute) ? 1 : 0;
200
201 score[7] += (module->fLoadRecPoints) ? 1 : 0;
202 score[8] += (module->fRnrRecPoints) ? 1 : 0;
203
204 score[9] += (module->fLoadTracklets) ? 1 : 0;
205 score[10] += (module->fRnrTracklets) ? 1 : 0;
206 iter++;
207 }
a282bf09 208
fd31e9de 209 Int_t size = fChildren.size();
210 fLoadHits = (score[0] > 0) ? kTRUE : kFALSE;
211 fRnrHits = (score[1] == size) ? kTRUE : kFALSE;
51346b82 212
fd31e9de 213 fLoadDigits = (score[2] > 0) ? kTRUE : kFALSE;
214 fRnrDigits = (score[3] == size) ? kTRUE : kFALSE;
215 fDigitsLog = (score[4] == size) ? kTRUE : kFALSE;
216 fDigitsBox = (score[5] == size) ? kTRUE : kFALSE;
217 fDigitsNeedRecompute = (score[6] == size) ? kTRUE : kFALSE;
51346b82 218
fd31e9de 219 fLoadRecPoints = (score[7] > 0) ? kTRUE : kFALSE;
220 fRnrRecPoints = (score[8] == size) ? kTRUE : kFALSE;
51346b82 221
fd31e9de 222 fLoadTracklets = (score[9] > 0) ? kTRUE : kFALSE;
223 fRnrTracklets = (score[10] == size) ? kTRUE : kFALSE;
a282bf09 224}
225
a282bf09 226
fd31e9de 227///////////////////////////////////////////////////////////
228//////////// AliEveTRDChamber ////////////////////
229///////////////////////////////////////////////////////////
a282bf09 230
fd31e9de 231//______________________________________________________________________________
232AliEveTRDChamber::AliEveTRDChamber(Int_t det) :
6983e87a 233 TEveElement()
234 ,AliEveTRDModule("Chmb", det)
235 ,fDigits(0x0)
236 ,fHits(0x0)
237 ,fRecPoints(0x0)
238 ,fTracklets(0x0)
239 ,fGeo(0x0)
240 ,fShape(0x0)
241 ,fNrows(-1)
242 ,fNcols(-1)
243 ,fNtime(22)
a282bf09 244{
245 //
fd31e9de 246 // Constructor
a282bf09 247 //
a282bf09 248}
249
edf0c4a0 250
fd31e9de 251//______________________________________________________________________________
d810d0de 252void AliEveTRDChamber::LoadClusters(TObjArray *clusters)
a282bf09 253{
254 //
255 // Draw clusters
256 //
51346b82 257
fd31e9de 258 if(!fGeo){
259 AliError(Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
260 return;
261 }
262
a4197d2e 263 if(!fRecPoints){
264 AddElement(fRecPoints = new AliEveTRDClusters());
265 fRecPoints->SetTitle(Form("Clusters for Det %d", GetID()));
6983e87a 266 }
267 fRecPoints->Reset();
fd31e9de 268
4f7bd6c9 269 // get rotation parameters
270 Int_t sec = AliTRDgeometry::GetSector(GetID());
271 Float_t alpha((0.5+sec)*AliTRDgeometry::GetAlpha()),
272 cphi(TMath::Cos(alpha)),
273 sphi(TMath::Sin(alpha));
fd31e9de 274 Float_t q;
6983e87a 275 Float_t g[3]; //global coordinates
4f7bd6c9 276 AliTRDcluster *c(NULL);
0d9ef37b 277 Int_t nc = clusters->GetEntriesFast();
278 for(int iclus=0; iclus<nc; iclus++){
4f7bd6c9 279 if(!(c = (AliTRDcluster*)clusters->UncheckedAt(iclus))) continue;
fd31e9de 280 q = c->GetQ();
4f7bd6c9 281 // Temorary fix related to bug http://savannah.cern.ch/bugs/?89730
282 // c->GetGlobalXYZ(g);
283 g[0] = c->GetX() * cphi - c->GetY() * sphi;
284 g[1] = c->GetX() * sphi + c->GetY() * cphi;
285 g[2] = c->GetZ();
286 Int_t id = fRecPoints->SetNextPoint(g[0], g[1], g[2]);
6983e87a 287 fRecPoints->SetPointId(id, new AliTRDcluster(*c));
fd31e9de 288 }
fbc350a3 289 fRecPoints->StampObjProps();
fd31e9de 290 fLoadRecPoints = kTRUE;
a282bf09 291}
292
6bbacce9 293
294//______________________________________________________________________________
295void AliEveTRDChamber::LoadClusters(AliTRDtrackingChamber *tc)
296{
297 if(!fGeo){
298 AliError(Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
299 return;
300 }
301
302 if(!fRecPoints){
303 AddElement(fRecPoints = new AliEveTRDClusters());
304 fRecPoints->SetTitle(Form("Clusters for Det %d", GetID()));
305 }
306 fRecPoints->Reset();
307
4f7bd6c9 308 // get rotation parameters
309 Int_t sec = AliTRDgeometry::GetSector(fDet);
310 Float_t alpha((0.5+sec)*AliTRDgeometry::GetAlpha()),
311 cphi(TMath::Cos(alpha)),
312 sphi(TMath::Sin(alpha));
6bbacce9 313 Float_t g[3]; //global coordinates
4f7bd6c9 314 const AliTRDchamberTimeBin *tb(NULL);
ab456262 315 for(int itb=0; itb<AliTRDseedV1::kNtb; itb++){
6bbacce9 316 tb = tc->GetTB(itb);
317 if(!(Int_t(*tb))) continue;
4f7bd6c9 318 const AliTRDcluster *c(NULL); Int_t ic = 0;
6bbacce9 319 while((c=tb->GetCluster(ic))){
4f7bd6c9 320 // Temorary fix related to bug http://savannah.cern.ch/bugs/?89730
321 // c->GetGlobalXYZ(g);
322 g[0] = c->GetX() * cphi - c->GetY() * sphi;
323 g[1] = c->GetX() * sphi + c->GetY() * cphi;
324 g[2] = c->GetZ();
325 Int_t id = fRecPoints->SetNextPoint(g[0], g[1], g[2]);
6bbacce9 326 fRecPoints->SetPointId(id, new AliTRDcluster(*c));
327 ic++;
328 }
329 }
330 fRecPoints->StampObjProps();
331 fLoadRecPoints = kTRUE;
332}
333
334
fd31e9de 335//______________________________________________________________________________
d810d0de 336void AliEveTRDChamber::LoadDigits(AliTRDdigitsManager *digits)
a282bf09 337{
338 //
339 // Draw digits
340 //
fd31e9de 341 if(!fGeo){
342 AliError(Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
343 return;
344 }
51346b82 345
6983e87a 346 if(!fDigits) AddElement(fDigits = new AliEveTRDDigits(this));
51346b82 347
5998b164 348 //fDigits->Reset();
fd31e9de 349 fDigits->SetData(digits);
fbc350a3 350 fDigits->StampObjProps();
0d9ef37b 351 fDigitsNeedRecompute = kTRUE;
fd31e9de 352 fLoadDigits = kTRUE;
a282bf09 353}
354
fd31e9de 355//______________________________________________________________________________
6983e87a 356void AliEveTRDChamber::LoadHits(TClonesArray *hits, Int_t &idx)
a282bf09 357{
358 //
359 // Draw hits
360 //
fd31e9de 361
a4197d2e 362 if(!fHits){
363 AddElement(fHits = new AliEveTRDHits());
364 fHits->SetTitle(Form("Hits for Det %d", GetID()));
fd31e9de 365 }
fd31e9de 366 fLoadHits = kTRUE;
6983e87a 367 Int_t nhits = hits->GetEntriesFast();
368
369 AliTRDhit *hit = 0x0;
370 while(idx<nhits){
371 hit = (AliTRDhit*)hits->UncheckedAt(idx);
372 if(hit->GetDetector() != fDet) return;
373
374 Int_t id = fHits->SetNextPoint(hit->X(), hit->Y(), hit->Z());
375 fHits->SetPointId(id, new AliTRDhit(*hit));
fbc350a3 376 fHits->StampObjProps();
6983e87a 377 idx++;
378 }
379 return;
a282bf09 380}
381
fd31e9de 382//______________________________________________________________________________
a879a24a 383void AliEveTRDChamber::LoadTracklets(TTree *trklTree)
a282bf09 384{
385 //
386 // Draw tracks
387 //
a879a24a 388
fd31e9de 389 if(!fGeo){
ea41d018 390 Error("LoadTracklets()", "Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet);
fd31e9de 391 return;
392 }
fd31e9de 393
394 if(!fTracklets){
a879a24a 395 fTracklets = new TClonesArray("AliEveTRDTrackletOnline",100);
396 } else {
397 fTracklets->Delete();
398 TEveElementList *trklChild = (TEveElementList*) FindChild("Tracklets");
a428533a 399 if (trklChild)
400 trklChild->Destroy();
a879a24a 401 }
402
403
404 TBranch *mcmBranch = trklTree->GetBranch("mcmtrklbranch");
405 if (!mcmBranch)
406 return;
407
408 AliTRDtrackletMCM *trkl = 0x0;
409 mcmBranch->SetAddress(&trkl);
410
411 TEveElementList* listOfTracklets = new TEveElementList("Tracklets");
412 gEve->AddElement(listOfTracklets, this);
413
414 for(Int_t iTrkl = 0; iTrkl < mcmBranch->GetEntries(); iTrkl++){
415 mcmBranch->GetEntry(iTrkl);
416 if (trkl->GetDetector() == GetID()) {
417 new ((*fTracklets)[fTracklets->GetEntriesFast()]) AliEveTRDTrackletOnline(trkl);
418 gEve->AddElement(new AliEveTRDTrackletOnline(trkl), listOfTracklets);
419 }
fd31e9de 420 }
421 fLoadTracklets = kTRUE;
a282bf09 422}
423
a282bf09 424
fd31e9de 425//______________________________________________________________________________
d810d0de 426void AliEveTRDChamber::SetGeometry(AliTRDgeometry *geo)
14217b5f 427{
a15e6d7d 428 // Set geometry.
429
fd31e9de 430 fGeo = geo;
51346b82 431
6983e87a 432 Int_t ism = geo->GetSector(fDet);
7bc3159a 433 Int_t istk = geo->GetStack(fDet);
434 Int_t ilyr = geo->GetLayer(fDet);
435 Int_t icha = istk*6+ilyr;
d2472d3d 436 Int_t idx(1);
437 if(ism>12&&ism<16) idx=3;
438 else if(ism==11||ism==12) idx=2;
6983e87a 439
440 // define pad plane size in pads
7bc3159a 441 AliTRDpadPlane *pp = fGeo->GetPadPlane(ilyr, istk);
6983e87a 442 fNrows = pp->GetNrows();
443 fNcols = pp->GetNcols();
444
445// this version for setting the rendarable object is not working very nice
446// Int_t shape_offset = TEveGeoShape::Class()->GetDataMemberOffset("fShape");
447// TEveGeoShape* eg_shape = new TEveGeoShape("geometry");
448// eg_shape->RefMainTrans().SetFrom(* gGeoManager->GetCurrentMatrix());
449// * (TGeoShape**) (((char*)eg_shape) + shape_offset) = gGeoManager->GetCurrentVolume()->GetShape();
450//
451// eg_shape->StampColorSelection();
5998b164 452 if(!(gGeoManager)){
6bbacce9 453 AliEveEventManager::AssertGeometry();
5998b164 454 if(!(gGeoManager)){
455 AliError("Geo manager not available.");
456 return;
457 }
6bbacce9 458 }
6983e87a 459
460 // define rendarable volumes
d2472d3d 461 if(!gGeoManager->cd(Form("/B077_1/BSEGMO%d_1/BTRD%d_1/UTR%d_1/UTS%d_1/UTI%d_1/UT%02d_1", ism, ism, idx, idx, idx, icha))) return;
462
6983e87a 463 fShape = new TEveGeoTopNode(gGeoManager, gGeoManager->GetCurrentNode());
464 fShape->RefMainTrans().SetFrom(*gGeoManager->GetCurrentMatrix());
465 fShape->DisableListElements();
466 fShape->SetRnrSelf(kFALSE);
467// try to set the properties but it is crashing !!
468// TEveGeoNode *node = 0x0;
469// if((node = (TEveGeoNode*)fShape->FindChild(Form("UA%02d_1", icha)))) node->SetRnrState(kTRUE);
470// else AliWarning(Form("Can not retrieve geo node UA%02d_1", icha));
471
472 AddElement(fShape);
14217b5f 473}
474