]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveTRDModuleImp.cxx
Fixed effc++ warnings.
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDModuleImp.cxx
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          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 #include "AliEveTRDModuleImp.h"
11 #include "AliEveTRDData.h"
12
13 #include "TMath.h"
14 #include <TGListTree.h>
15
16 #include "TEveManager.h"
17 #include "TEveTrack.h"
18
19 #include "AliLog.h"
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
32 ClassImp(AliEveTRDChamber)
33 ClassImp(AliEveTRDNode)
34
35 //______________________________________________________________________________
36 AliEveTRDNode::AliEveTRDNode(const char *typ, Int_t det) :
37   TEveElement(), AliEveTRDModule(typ, det)
38 {
39 }
40
41 //______________________________________________________________________________
42 void AliEveTRDNode::Paint(Option_t* option)
43 {
44   List_i iter = fChildren.begin();
45   while(iter != fChildren.end()){
46     (dynamic_cast<AliEveTRDModule*>(*iter))->Paint(option);
47     iter++;
48   }
49 }
50
51 //______________________________________________________________________________
52 void AliEveTRDNode::Reset()
53 {
54   List_i iter = fChildren.begin();
55   while(iter != fChildren.end()){
56     (dynamic_cast<AliEveTRDModule*>(*iter))->Reset();
57     iter++;
58   }
59 }
60
61 //______________________________________________________________________________
62 void AliEveTRDNode::Collapse()
63 {
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   }
72 }
73
74 //______________________________________________________________________________
75 void AliEveTRDNode::Expand()
76 {
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   }
85 }
86
87 //______________________________________________________________________________
88 void AliEveTRDNode::EnableListElements()
89 {
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();
103 }
104
105 //______________________________________________________________________________
106 void AliEveTRDNode::DisableListElements()
107 {
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();
121 }
122
123 //______________________________________________________________________________
124 void AliEveTRDNode::UpdateLeaves()
125 {
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   }
149 }
150
151
152 //______________________________________________________________________________
153 void AliEveTRDNode::UpdateNode()
154 {
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   }
162
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   }
186
187   Int_t size = fChildren.size();
188   fLoadHits      = (score[0] > 0) ? kTRUE : kFALSE;
189   fRnrHits       = (score[1] == size) ? kTRUE : kFALSE;
190
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;
196
197   fLoadRecPoints = (score[7] > 0) ? kTRUE : kFALSE;
198   fRnrRecPoints  = (score[8] == size) ? kTRUE : kFALSE;
199
200   fLoadTracklets = (score[9] > 0) ? kTRUE : kFALSE;
201   fRnrTracklets  = (score[10] == size) ? kTRUE : kFALSE;
202 }
203
204
205 ///////////////////////////////////////////////////////////
206 ////////////      AliEveTRDChamber     ////////////////////
207 ///////////////////////////////////////////////////////////
208
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),
214   fX0(0.), fPla(-1),
215   fPadPlane (0),
216   fGeo      (0)
217 {
218   //
219   // Constructor
220   //
221
222   AliTRDCommonParam* parCom = AliTRDCommonParam::Instance();
223   fSamplingFrequency = parCom->GetSamplingFrequency();
224 }
225
226 //______________________________________________________________________________
227 Int_t AliEveTRDChamber::GetSM() const
228 {
229   if(!fGeo){
230     AliWarning("Fail. No TRD geometry defined.");
231     return -1;
232   }
233   return fGeo->GetSector(fDet);
234 }
235
236 //______________________________________________________________________________
237 Int_t AliEveTRDChamber::GetSTK() const
238 {
239   if(!fGeo){
240     AliWarning("Fail. No TRD geometry defined.");
241     return -1;
242   }
243   return fGeo->GetChamber(fDet);
244 }
245
246 //______________________________________________________________________________
247 void AliEveTRDChamber::LoadClusters(TObjArray *clusters)
248 {
249   //
250   // Draw clusters
251   //
252
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;
281 }
282
283 //______________________________________________________________________________
284 void AliEveTRDChamber::LoadDigits(AliTRDdigitsManager *digits)
285 {
286   //
287   // Draw digits
288   //
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));
294
295   if(!fDigits) fDigits = new AliEveTRDDigits(this);
296   else fDigits->Reset();
297
298   fDigits->SetData(digits);
299   fLoadDigits = kTRUE;
300 }
301
302 //______________________________________________________________________________
303 void AliEveTRDChamber::AddHit(AliTRDhit *hit)
304 {
305   //
306   // Draw hits
307   //
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;
320 }
321
322 //______________________________________________________________________________
323 void AliEveTRDChamber::LoadTracklets(TObjArray *tracks)
324 {
325   //
326   // Draw tracks
327   //
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;
359 }
360
361 //____________________________________________________
362 void AliEveTRDChamber::Paint(Option_t* option)
363 {
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   }
378 }
379
380 //______________________________________________________________________________
381 void AliEveTRDChamber::Reset()
382 {
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   }
399 }
400
401 //______________________________________________________________________________
402 void AliEveTRDChamber::SetGeometry(AliTRDgeometry *geo)
403 {
404   fGeo = geo;
405
406   fPla = fGeo->GetPlane(fDet);
407   fX0 = fGeo->GetTime0(fPla);
408
409   fPadPlane = fGeo->GetPadPlane(fPla,fGeo->GetChamber(fDet));
410   fRowMax   = fPadPlane->GetNrows();
411   fColMax   = fPadPlane->GetNcols();
412 }
413