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