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