]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/EveDet/AliEveTRDModuleImp.cxx
Fixes for inconsistent types in BinarySearch
[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
13#include "TMath.h"
14#include <TGListTree.h>
15
84aff7a4 16#include "TEveManager.h"
17#include "TEveTrack.h"
a282bf09 18
edf0c4a0 19#include "AliLog.h"
a282bf09 20#include "AliRun.h"
21#include "AliTRDv1.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"
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{
39}
40
fd31e9de 41//______________________________________________________________________________
42void AliEveTRDNode::Paint(Option_t* option)
a282bf09 43{
fd31e9de 44 List_i iter = fChildren.begin();
45 while(iter != fChildren.end()){
46 (dynamic_cast<AliEveTRDModule*>(*iter))->Paint(option);
47 iter++;
48 }
a282bf09 49}
50
fd31e9de 51//______________________________________________________________________________
52void AliEveTRDNode::Reset()
a282bf09 53{
fd31e9de 54 List_i iter = fChildren.begin();
55 while(iter != fChildren.end()){
56 (dynamic_cast<AliEveTRDModule*>(*iter))->Reset();
57 iter++;
58 }
a282bf09 59}
60
fd31e9de 61//______________________________________________________________________________
d810d0de 62void AliEveTRDNode::Collapse()
a282bf09 63{
fd31e9de 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));
70 iter++;
71 }
a282bf09 72}
73
fd31e9de 74//______________________________________________________________________________
d810d0de 75void AliEveTRDNode::Expand()
a282bf09 76{
fd31e9de 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));
83 iter++;
84 }
a282bf09 85}
86
fd31e9de 87//______________________________________________________________________________
d810d0de 88void AliEveTRDNode::EnableListElements()
a282bf09 89{
fd31e9de 90 SetRnrSelf(kTRUE);
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();
98 }
99 if((chmb = dynamic_cast<AliEveTRDChamber*>(*iter))) chmb->SetRnrSelf(kTRUE);
100 iter++;
101 }
102 gEve->Redraw3D();
a282bf09 103}
104
fd31e9de 105//______________________________________________________________________________
d810d0de 106void AliEveTRDNode::DisableListElements()
a282bf09 107{
fd31e9de 108 SetRnrSelf(kFALSE);
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();
116 }
117 if((chmb = dynamic_cast<AliEveTRDChamber*>(*iter))) chmb->SetRnrSelf(kFALSE);
118 iter++;
119 }
120 gEve->Redraw3D();
a282bf09 121}
122
fd31e9de 123//______________________________________________________________________________
d810d0de 124void AliEveTRDNode::UpdateLeaves()
a282bf09 125{
fd31e9de 126 AliEveTRDModule *module;
127 List_i iter = fChildren.begin();
128 while(iter != fChildren.end()){
129 module = dynamic_cast<AliEveTRDModule*>(*iter);
130 if(!module) continue;
131
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;
140 iter++;
141 }
142
143 AliEveTRDNode *node = 0x0;
144 iter = fChildren.begin();
145 while(iter != fChildren.end()){
146 if((node = dynamic_cast<AliEveTRDNode*>(*iter))) node->UpdateLeaves();
147 iter++;
148 }
a282bf09 149}
150
151
fd31e9de 152//______________________________________________________________________________
d810d0de 153void AliEveTRDNode::UpdateNode()
a282bf09 154{
fd31e9de 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();
160 iter++;
161 }
a282bf09 162
fd31e9de 163 Int_t score[11];
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;
172
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;
178
179 score[7] += (module->fLoadRecPoints) ? 1 : 0;
180 score[8] += (module->fRnrRecPoints) ? 1 : 0;
181
182 score[9] += (module->fLoadTracklets) ? 1 : 0;
183 score[10] += (module->fRnrTracklets) ? 1 : 0;
184 iter++;
185 }
a282bf09 186
fd31e9de 187 Int_t size = fChildren.size();
188 fLoadHits = (score[0] > 0) ? kTRUE : kFALSE;
189 fRnrHits = (score[1] == size) ? kTRUE : kFALSE;
51346b82 190
fd31e9de 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;
51346b82 196
fd31e9de 197 fLoadRecPoints = (score[7] > 0) ? kTRUE : kFALSE;
198 fRnrRecPoints = (score[8] == size) ? kTRUE : kFALSE;
51346b82 199
fd31e9de 200 fLoadTracklets = (score[9] > 0) ? kTRUE : kFALSE;
201 fRnrTracklets = (score[10] == size) ? kTRUE : kFALSE;
a282bf09 202}
203
a282bf09 204
fd31e9de 205///////////////////////////////////////////////////////////
206//////////// AliEveTRDChamber ////////////////////
207///////////////////////////////////////////////////////////
a282bf09 208
fd31e9de 209//______________________________________________________________________________
210AliEveTRDChamber::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),
214 fX0(0.), fPla(-1),
215 fPadPlane (0),
216 fGeo (0)
a282bf09 217{
218 //
fd31e9de 219 // Constructor
a282bf09 220 //
221
fd31e9de 222 AliTRDCommonParam* parCom = AliTRDCommonParam::Instance();
223 fSamplingFrequency = parCom->GetSamplingFrequency();
a282bf09 224}
225
fd31e9de 226//______________________________________________________________________________
227Int_t AliEveTRDChamber::GetSM() const
edf0c4a0 228{
fd31e9de 229 if(!fGeo){
230 AliWarning("Fail. No TRD geometry defined.");
231 return -1;
232 }
233 return fGeo->GetSector(fDet);
edf0c4a0 234}
235
fd31e9de 236//______________________________________________________________________________
237Int_t AliEveTRDChamber::GetSTK() const
edf0c4a0 238{
fd31e9de 239 if(!fGeo){
240 AliWarning("Fail. No TRD geometry defined.");
241 return -1;
242 }
243 return fGeo->GetChamber(fDet);
edf0c4a0 244}
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
258 if(!fRecPoints){
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();
265
266 Float_t q;
267 Double_t cloc[3], cglo[3];
268
269 AliTRDcluster *c=0x0;
270 for(int iclus=0; iclus<clusters->GetEntriesFast(); iclus++){
271 c = (AliTRDcluster*)clusters->UncheckedAt(iclus);
272 cloc[0] = c->GetX();
273 cloc[1] = c->GetY();
274 cloc[2] = c->GetZ();
275 q = c->GetQ();
276 fGeo->RotateBack(fDet,cloc,cglo);
277 fRecPoints->SetNextPoint(cglo[0], cglo[1], cglo[2]);
278 fRecPoints->SetPointId(c);
279 }
280 fLoadRecPoints = kTRUE;
a282bf09 281}
282
fd31e9de 283//______________________________________________________________________________
d810d0de 284void AliEveTRDChamber::LoadDigits(AliTRDdigitsManager *digits)
a282bf09 285{
286 //
287 // Draw digits
288 //
fd31e9de 289 if(!fGeo){
290 AliError(Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
291 return;
292 }
293 // Info("LoadDigits()", Form("digits =0x%x", digits));
51346b82 294
fd31e9de 295 if(!fDigits) fDigits = new AliEveTRDDigits(this);
296 else fDigits->Reset();
51346b82 297
fd31e9de 298 fDigits->SetData(digits);
299 fLoadDigits = kTRUE;
a282bf09 300}
301
fd31e9de 302//______________________________________________________________________________
d810d0de 303void AliEveTRDChamber::AddHit(AliTRDhit *hit)
a282bf09 304{
305 //
306 // Draw hits
307 //
fd31e9de 308 // Info("AddHit()", Form("%s", GetName()));
309
310 if(!fHits){
311 fHits = new AliEveTRDHits(this);
312 fHits->SetMarkerSize(.1);
313 fHits->SetMarkerColor(2);
314 fHits->SetOwnIds(kTRUE);
315 }
316
317 fHits->SetNextPoint(hit->X(), hit->Y(), hit->Z());
318 fHits->SetPointId(hit);
319 fLoadHits = kTRUE;
a282bf09 320}
321
fd31e9de 322//______________________________________________________________________________
d810d0de 323void AliEveTRDChamber::LoadTracklets(TObjArray *tracks)
a282bf09 324{
325 //
326 // Draw tracks
327 //
fd31e9de 328 if(!fGeo){
329 Error("LoadTracklets()", Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
330 return;
331 }
332 // Info("LoadTracklets()", Form("tracks = 0x%x", tracks));
333
334 if(!fTracklets){
335 fTracklets = new std::vector<TEveTrack*>;
336 } else fTracklets->clear();
337
338
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);
346
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]);
352
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]);
357 }
358 fLoadTracklets = kTRUE;
a282bf09 359}
360
361//____________________________________________________
fd31e9de 362void AliEveTRDChamber::Paint(Option_t* option)
a282bf09 363{
fd31e9de 364 /* Info("Paint()", Form("%s", GetName()));*/
365 if(!fRnrSelf) return;
366 if(fDigits && fRnrDigits){
367 if(fDigitsNeedRecompute){
368 fDigits->ComputeRepresentation();
369 fDigitsNeedRecompute = kFALSE;
370 }
371 fDigits->Paint(option);
372 }
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);
377 }
a282bf09 378}
379
fd31e9de 380//______________________________________________________________________________
381void AliEveTRDChamber::Reset()
a282bf09 382{
fd31e9de 383 if(fHits){
384 fHits->Reset();
385 fLoadHits = kFALSE;
386 }
387 if(fDigits){
388 fDigits->Reset();
389 fLoadDigits = kFALSE;
390 }
391 if(fRecPoints){
392 fRecPoints->Reset();
393 fLoadRecPoints = kFALSE;
394 }
395 if(fTracklets){
396 fTracklets->clear();
397 fLoadTracklets = kFALSE;
398 }
a282bf09 399}
400
fd31e9de 401//______________________________________________________________________________
d810d0de 402void AliEveTRDChamber::SetGeometry(AliTRDgeometry *geo)
14217b5f 403{
fd31e9de 404 fGeo = geo;
51346b82 405
fd31e9de 406 fPla = fGeo->GetPlane(fDet);
407 fX0 = fGeo->GetTime0(fPla);
51346b82 408
fd31e9de 409 fPadPlane = fGeo->GetPadPlane(fPla,fGeo->GetChamber(fDet));
410 fRowMax = fPadPlane->GetNrows();
411 fColMax = fPadPlane->GetNcols();
14217b5f 412}
413