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