1 #include "TRDModuleImp.h"
5 #include <TGListTree.h>
7 #include "Reve/RGTopFrame.h"
8 #include "Reve/Track.h"
12 #include "AliTRDgeometry.h"
13 #include "AliTRDCommonParam.h"
14 #include "AliTRDpadPlane.h"
15 #include "AliTRDdigit.h"
16 #include "AliTRDhit.h"
17 #include "AliTRDcluster.h"
18 #include "AliTRDcalibDB.h"
19 #include "AliTRDdataArrayI.h"
20 #include "AliTRDmcmTracklet.h"
25 using namespace Alieve;
31 //________________________________________________________
32 TRDNode::TRDNode(const char *typ, Int_t det) :
33 Reve::RenderElement(), TRDModule(typ, det)
37 //________________________________________________________
38 void TRDNode::Paint(Option_t* option)
40 List_i iter = fChildren.begin();
41 while(iter != fChildren.end()){
42 (dynamic_cast<TRDModule*>(*iter))->Paint(option);
47 //________________________________________________________
50 List_i iter = fChildren.begin();
51 while(iter != fChildren.end()){
52 (dynamic_cast<TRDModule*>(*iter))->Reset();
57 //________________________________________________________
58 void TRDNode::Collapse()
60 TGListTree *list = gReve->GetListTree();
62 List_i iter = fChildren.begin();
63 while(iter != fChildren.end()){
64 if((node = dynamic_cast<TRDNode*>(*iter))) node->Collapse();
65 list->CloseItem(FindListTreeItem(list));
70 //________________________________________________________
71 void TRDNode::Expand()
73 TGListTree *list = gReve->GetListTree();
75 List_i iter = fChildren.begin();
76 while(iter != fChildren.end()){
77 if((node = dynamic_cast<TRDNode*>(*iter))) node->Expand();
78 list->OpenItem(FindListTreeItem(list));
83 //________________________________________________________
84 void TRDNode::EnableListElements()
88 TRDChamber *chmb = 0x0;
89 List_i iter = fChildren.begin();
90 while(iter != fChildren.end()){
91 if((node = dynamic_cast<TRDNode*>(*iter))){
92 node->SetRnrSelf(kTRUE);
93 node->EnableListElements();
95 if((chmb = dynamic_cast<TRDChamber*>(*iter))) chmb->SetRnrSelf(kTRUE);
101 //________________________________________________________
102 void TRDNode::DisableListElements()
106 TRDChamber *chmb = 0x0;
107 List_i iter = fChildren.begin();
108 while(iter != fChildren.end()){
109 if((node = dynamic_cast<TRDNode*>(*iter))){
110 node->SetRnrSelf(kFALSE);
111 node->DisableListElements();
113 if((chmb = dynamic_cast<TRDChamber*>(*iter))) chmb->SetRnrSelf(kFALSE);
119 //________________________________________________________
120 void TRDNode::UpdateLeaves()
123 List_i iter = fChildren.begin();
124 while(iter != fChildren.end()){
125 module = dynamic_cast<TRDModule*>(*iter);
126 if(!module) continue;
128 module->fRnrHits = fRnrHits;
129 module->fRnrDigits = fRnrDigits;
130 module->fDigitsLog = fDigitsLog;
131 module->fDigitsBox = fDigitsBox;
132 module->fDigitsThreshold = fDigitsThreshold;
133 module->kDigitsNeedRecompute = kDigitsNeedRecompute;
134 module->fRnrRecPoints = fRnrRecPoints;
135 module->fRnrTracklets = fRnrTracklets;
140 iter = fChildren.begin();
141 while(iter != fChildren.end()){
142 if((node = dynamic_cast<TRDNode*>(*iter))) node->UpdateLeaves();
148 //________________________________________________________
149 void TRDNode::UpdateNode()
151 // Info("UpdateNode()", Form("%s", GetName()));
153 List_i iter = fChildren.begin();
154 while(iter != fChildren.end()){
155 if((node = dynamic_cast<TRDNode*>(*iter))) node->UpdateNode();
160 for(int i=0; i<11; i++) score[i] = 0;
162 iter = fChildren.begin();
163 while(iter != fChildren.end()){
164 module = dynamic_cast<TRDModule*>(*iter);
165 if(!module) continue;
166 score[0] += (module->fLoadHits) ? 1 : 0;
167 score[1] += (module->fRnrHits) ? 1 : 0;
169 score[2] += (module->fLoadDigits) ? 1 : 0;
170 score[3] += (module->fRnrDigits) ? 1 : 0;
171 score[4] += (module->fDigitsLog) ? 1 : 0;
172 score[5] += (module->fDigitsBox) ? 1 : 0;
173 score[6] += (module->kDigitsNeedRecompute) ? 1 : 0;
175 score[7] += (module->fLoadRecPoints) ? 1 : 0;
176 score[8] += (module->fRnrRecPoints) ? 1 : 0;
178 score[9] += (module->fLoadTracklets) ? 1 : 0;
179 score[10] += (module->fRnrTracklets) ? 1 : 0;
183 Int_t size = fChildren.size();
184 fLoadHits = (score[0] > 0) ? kTRUE : kFALSE;
185 fRnrHits = (score[1] == size) ? kTRUE : kFALSE;
187 fLoadDigits = (score[2] > 0) ? kTRUE : kFALSE;
188 fRnrDigits = (score[3] == size) ? kTRUE : kFALSE;
189 fDigitsLog = (score[4] == size) ? kTRUE : kFALSE;
190 fDigitsBox = (score[5] == size) ? kTRUE : kFALSE;
191 kDigitsNeedRecompute = (score[6] == size) ? kTRUE : kFALSE;
193 fLoadRecPoints = (score[7] > 0) ? kTRUE : kFALSE;
194 fRnrRecPoints = (score[8] == size) ? kTRUE : kFALSE;
196 fLoadTracklets = (score[9] > 0) ? kTRUE : kFALSE;
197 fRnrTracklets = (score[10] == size) ? kTRUE : kFALSE;
201 ///////////////////////////////////////////////////////////
202 ///////////// TRDChamber /////////////////////
203 ///////////////////////////////////////////////////////////
205 //________________________________________________________
206 TRDChamber::TRDChamber(Int_t det) :
207 Reve::RenderElement(), TRDModule("Chmb", det), rowMax(-1), colMax(-1), timeMax(22), fX0(0.), fPla(-1)
218 AliTRDCommonParam* parCom = AliTRDCommonParam::Instance();
219 samplingFrequency = parCom->GetSamplingFrequency();
225 //________________________________________________________
226 TRDChamber::TRDChamber(const TRDChamber &mod):
227 Reve::RenderElement(), TRDModule("Chmb", mod.fDet)
232 SetMainColor(mod.GetMainColor());
239 //________________________________________________________
240 TRDChamber& TRDChamber::operator=(const TRDChamber &mod)
243 // Assignment operator
255 //________________________________________________________
256 void TRDChamber::LoadClusters(TObjArray *clusters)
263 Error("LoadClusters()", Form("Geometry not set for chamber %d. Please call first TRDChamber::SetGeometry().", fDet));
266 // Info("LoadClusters()", Form("clusters = 0x%x", clusters));
268 fRecPoints = new TRDHits("clusters");
269 fRecPoints->SetMarkerSize(1.);
270 fRecPoints->SetMarkerStyle(24);
271 fRecPoints->SetMarkerColor(6);
272 } else fRecPoints->Reset();
275 Double_t cloc[3], cglo[3];
277 z0 = fGeo->GetTime0(fPla);
278 AliTRDcluster *c=0x0;
279 for(int iclus=0; iclus<clusters->GetEntriesFast(); iclus++){
280 c = (AliTRDcluster*)clusters->UncheckedAt(iclus);
281 cloc[2] = c->GetZ(); //x
282 cloc[1] = c->GetY(); //y
283 cloc[0] = z0 - c->GetX(); //z
285 fGeo->RotateBack(fDet,cloc,cglo);
286 fRecPoints->SetNextPoint(cglo[0], cglo[1], cglo[2]);
287 fRecPoints->SetPointId(this);
289 fLoadRecPoints = kTRUE;
292 //________________________________________________________
293 void TRDChamber::LoadDigits(AliTRDdigitsManager *digits)
299 Error("LoadDigits()", Form("Geometry not set for chamber %d. Please call first TRDChamber::SetGeometry().", fDet));
302 // Info("LoadDigits()", Form("digits =0x%x", digits));
304 if(!fDigits) fDigits = new TRDDigits(this);
305 else fDigits->Reset();
307 fDigits->SetData(digits);
311 //________________________________________________________
312 void TRDChamber::AddHit(AliTRDhit *hit)
317 // Info("AddHit()", Form("%s", GetName()));
320 fHits = new TRDHits("hits");
321 fHits->SetMarkerSize(.1);
322 fHits->SetMarkerColor(2);
325 fHits->SetNextPoint(hit->X(), hit->Y(), hit->Z());
326 fHits->SetPointId(this);
330 //________________________________________________________
331 void TRDChamber::LoadTracklets(TObjArray *tracks)
337 Error("LoadTracklets()", Form("Geometry not set for chamber %d. Please call first TRDChamber::SetGeometry().", fDet));
340 // Info("LoadTracklets()", Form("tracks = 0x%x", tracks));
343 fTracklets = new std::vector<Reve::Track*>;
344 } else fTracklets->clear();
347 AliTRDmcmTracklet *trk = 0x0;
348 Double_t cloc[3], cglo[3];
349 for(int itrk=0; itrk<tracks->GetEntries();itrk++){
350 trk = (AliTRDmcmTracklet*)tracks->At(itrk);
351 trk->MakeTrackletGraph(fGeo,.5);
352 fTracklets->push_back(new Reve::Track());
353 fTracklets->back()->SetLineColor(4);
355 cloc[0] = trk->GetTime0(); // x0
356 cloc[1] = trk->GetOffset(); // y0
357 cloc[2] = trk->GetRowz(); // z
358 fGeo->RotateBack(fDet,cloc,cglo);
359 fTracklets->back()->SetNextPoint(cglo[0], cglo[1], cglo[2]);
361 cloc[0] += 3.7; // x1
362 cloc[1] += TMath::Tan(trk->GetSlope()*TMath::Pi()/180.) * 3.7; // y1
363 fGeo->RotateBack(fDet,cloc,cglo);
364 fTracklets->back()->SetNextPoint(cglo[0], cglo[1], cglo[2]);
366 fLoadTracklets = kTRUE;
369 //____________________________________________________
370 void TRDChamber::Paint(Option_t* option)
372 /* Info("Paint()", Form("%s", GetName()));*/
373 if(!fRnrSelf) return;
374 if(fDigits && fRnrDigits){
375 if(kDigitsNeedRecompute){
376 fDigits->ComputeRepresentation();
377 kDigitsNeedRecompute = kFALSE;
379 fDigits->Paint(option);
381 if(fRecPoints && fRnrRecPoints) fRecPoints->GetObject()->Paint(option);
382 if(fHits && fRnrHits) fHits->GetObject()->Paint(option);
383 if(fTracklets && fRnrTracklets){
384 for(vector<Reve::Track*>::iterator i=fTracklets->begin(); i != fTracklets->end(); ++i) (*i)->Paint(option);
388 //________________________________________________________
389 void TRDChamber::Reset()
397 fLoadDigits = kFALSE;
401 fLoadRecPoints = kFALSE;
405 fLoadTracklets = kFALSE;
409 //________________________________________________________
410 void TRDChamber::SetGeometry(AliTRDgeometry *geo)
414 fPla = fGeo->GetPlane(fDet);
415 fX0 = fGeo->GetTime0(fPla);
417 AliTRDCommonParam *parcom = AliTRDCommonParam::Instance();
418 fPadPlane = parcom->GetPadPlane(fPla,fGeo->GetChamber(fDet));
419 rowMax = fPadPlane->GetNrows();
420 colMax = fPadPlane->GetNcols();