]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Alieve/TRDLoader.cxx
Runloader is updated when moving to next file (quick fix).
[u/mrichter/AliRoot.git] / EVE / Alieve / TRDLoader.cxx
CommitLineData
a282bf09 1#include "TRDLoader.h"
2#include "TRDModuleImp.h"
3
4#include <Reve/RGTopFrame.h>
5#include <Reve/RGValuators.h>
6
7#include <TSystem.h>
8#include <TGLabel.h>
9#include <TGButton.h>
10#include <TGTextEntry.h>
11#include <TGNumberEntry.h>
12#include <TGFileDialog.h>
13#include <TGListTree.h>
14#include <TGToolTip.h>
15
16#include "AliRun.h"
17#include "AliRunLoader.h"
18#include "AliLoader.h"
19#include "AliCDBManager.h"
20
21#include "AliTRDv1.h"
22#include "AliTRDhit.h"
23#include "AliTRDcluster.h"
24#include "AliTRDmcmTracklet.h"
25#include "AliTRDdigitsManager.h"
26#include "AliTRDgeometry.h"
27
28#include <algorithm>
29
30using namespace Reve;
31using namespace Alieve;
32using namespace std;
33class AliTRDdataArrayI;
34
35ClassImp(Alieve::TRDLoader)
36ClassImp(Alieve::TRDLoaderEditor)
37
38///////////////////////////////////////////////////////////
39///////////// TRDLoader /////////////////////
40///////////////////////////////////////////////////////////
41
42
43//________________________________________________________
2caed564 44TRDLoader::TRDLoader(const Text_t* n, const Text_t* t) : Reve::RenderElement(), TNamed(n,t), fSM(-1), fStack(-1), fLy(-1), fEvent(0)
14217b5f 45{
a282bf09 46 kLoadHits = kFALSE;
47 kLoadDigits = kFALSE;
48 kLoadClusters = kFALSE;
49 kLoadTracks = kFALSE;
14217b5f 50 fFilename = "";
51 fDir = ".";
52
53 fRunLoader = 0x0;
54 fGeo = new AliTRDgeometry();
a282bf09 55
56 AliCDBManager *fCDBManager=AliCDBManager::Instance();
57 fCDBManager->SetDefaultStorage("local://$ALICE_ROOT");
58 fCDBManager->SetRun(0);
59}
60
61//________________________________________________________
62TRDLoader::~TRDLoader()
63{
64// if(fChambers) {fChambers->clear(); delete fChambers;}
65}
66
67//________________________________________________________
68template<class T>
69class ID
70{
71public:
f5790a4c 72 ID( int value ) : id(value) {}
a282bf09 73 bool operator()(const T &t) const {
74 return ((dynamic_cast<TRDModule*>(t))->GetID() == id);
75 }
76private:
77 const int id;
78};
f5790a4c 79void TRDLoader::AddChambers(int sm, int stk, int ly)
a282bf09 80{
81 Int_t ism_start = (sm == -1) ? 0 : sm;
82 Int_t ism_stop = (sm == -1) ? 18 : sm+1;
83 Int_t istk_start= (stk == -1)? 0 : stk;
84 Int_t istk_stop = (stk == -1)? 5 : stk+1;
85 Int_t ily_start = (ly == -1) ? 0 : ly;
86 Int_t ily_stop = (ly == -1) ? 6 : ly+1;
87
e6ac3950 88 List_i ichmb;
a282bf09 89 ichmb = fChildren.begin();
90 while(ichmb != fChildren.end()){
2caed564 91 (*ichmb)->SetRnrSelf(kFALSE);
a282bf09 92 ichmb++;
93 }
94
95 TRDNode *SM=0x0, *STK=0x0;
96 TRDChamber *CHMB = 0x0;
97 int det;
98 for(int ism=ism_start; ism<ism_stop; ism++){
99 ichmb = find_if(fChildren.begin(), fChildren.end(), ID<RenderElement*>(ism));
100 if(ichmb != fChildren.end()){
101 SM = (TRDNode*)(*ichmb);
2caed564 102 SM->SetRnrSelf(kTRUE);
a282bf09 103 }else{
104 gReve->AddRenderElement(this, SM = new TRDNode("SM", ism));
105 SM->FindListTreeItem(gReve->GetListTree())->SetTipText(Form("Supermodule %2d", ism));
106 }
107 for(int istk=istk_start; istk<istk_stop; istk++){
108 ichmb = find_if(SM->begin(), SM->end(), ID<RenderElement*>(istk));
109 if(ichmb != SM->end()){
110 STK = (TRDNode*)(*ichmb);
2caed564 111 STK->SetRnrSelf(kTRUE);
a282bf09 112 }else{
113 gReve->AddRenderElement(SM, STK = new TRDNode("Stack", istk));
114 STK->FindListTreeItem(gReve->GetListTree())->SetTipText(Form("SM %2d Stack %1d", ism, istk));
115 }
116 for(int ily=ily_start; ily<ily_stop; ily++){
14217b5f 117 det = fGeo->GetDetector(ily, istk, ism);
a282bf09 118 ichmb = find_if(STK->begin(), STK->end(), ID<RenderElement*>(det));
2caed564 119 if(ichmb != STK->end()) (*ichmb)->SetRnrSelf(kTRUE);
a282bf09 120 else{
121 gReve->AddRenderElement(STK, CHMB = new TRDChamber(det));
14217b5f 122 CHMB->SetGeometry(fGeo);
a282bf09 123 CHMB->FindListTreeItem(gReve->GetListTree())->SetTipText(Form("SM %2d Stack %1d Layer %1d", ism, istk, ily));
124 }
125 }
126 }
127 }
128 gReve->Redraw3D();
129}
130
131//________________________________________________________
f5790a4c 132TRDChamber* TRDLoader::GetChamber(int d)
a282bf09 133{
e6ac3950 134 List_i ism, istack, ichmb;
a282bf09 135
14217b5f 136 ism = find_if(fChildren.begin(), fChildren.end(), ID<RenderElement*>(fGeo->GetSector(d)));
a282bf09 137 if(ism == fChildren.end()) return 0x0;
14217b5f 138 istack = find_if(((TRDNode*)(*ism))->begin(), ((TRDNode*)(*ism))->end(), ID<RenderElement*>(fGeo->GetChamber(d)));
a282bf09 139 if(istack == ((TRDNode*)(*ism))->end()) return 0x0;
140 ichmb = find_if(((TRDNode*)(*istack))->begin(), ((TRDNode*)(*istack))->end(), ID<RenderElement*>(d));
141 if(ichmb == ((TRDNode*)(*istack))->end()) return 0x0;
142 return dynamic_cast<TRDChamber*>(*ichmb);
143}
144
145//________________________________________________________
f5790a4c 146Bool_t TRDLoader::GoToEvent(int ev)
a282bf09 147{
148 Info("GoToEvent", Form("Event = %d", ev));
14217b5f 149 fEvent = ev;
150
a282bf09 151 if(!fRunLoader) return kFALSE;
152 fRunLoader->UnloadAll("TRD");
153 Unload();
154
155 fRunLoader->GetEvent(ev);
156 TTree *t = 0x0;
157 if(kLoadHits){
158 fRunLoader->LoadHits("TRD", "READ");
159 t = fRunLoader->GetTreeH("TRD", kFALSE);
160 if(!t) return kFALSE;
161 fTRD->SetTreeAddress();
162 if(!LoadHits(t)) return kFALSE;
163 }
164 if(kLoadDigits){
165 fRunLoader->LoadDigits("TRD", "READ");
166 t = fRunLoader->GetTreeD("TRD", kFALSE);
167 if(!t) return kFALSE;
168 fTRD->SetTreeAddress();
169 if(!LoadDigits(t)) return kFALSE;
170 }
171 if(kLoadClusters){
172 fRunLoader->LoadRecPoints("TRD", "READ");
173 t = fRunLoader->GetTreeR("TRD", kFALSE);
174 if(!t) return kFALSE;
175 if(!LoadClusters(t)) return kFALSE;
176 }
177 if(kLoadTracks){
178 fRunLoader->LoadTracks("TRD", "READ");
179 t = fRunLoader->GetTreeT("TRD", kFALSE);
180 if(!t) return kFALSE;
181 if(!LoadTracklets(t)) return kFALSE;
182 }
183 gReve->Redraw3D();
184 return kTRUE;
185}
186
187
188//________________________________________________________
189Bool_t TRDLoader::LoadClusters(TTree *tC)
190{
191 Info("LoadClusters()", Form("Clusters tree 0x%x", tC));
192 if(!fChildren.size()) return kTRUE;
193
194 TObjArray *clusters = new TObjArray();
195 tC->SetBranchAddress("TRDcluster",&clusters);
196
197 TRDChamber *chmb = 0x0;
198 AliTRDcluster *c=0x0;
199 for(int idet=0; idet<540; idet++){
200 if(!tC->GetEntry(idet)) continue;
201 if(clusters->GetEntriesFast()) c = (AliTRDcluster*)clusters->UncheckedAt(0);
202 if((chmb = GetChamber(c->GetDetector()))) chmb->LoadClusters(clusters);
203 }
204 return kTRUE;
205}
206
207
208//________________________________________________________
209Bool_t TRDLoader::LoadDigits(TTree *tD)
210{
211 Info("LoadDigits()", Form("Digits tree 0x%x", tD));
212
213 if(!fChildren.size()) return kTRUE;
214
215 TRDChamber *chmb;
a282bf09 216 AliTRDdigitsManager dm;
217 dm.ReadDigits(tD);
218 for(int idet=0; idet<540; idet++){
219 if(!(chmb=GetChamber(idet))) continue;
14217b5f 220// digits = dm.GetDigits(idet);
221// if(!digits) continue;
222// chmb->LoadDigits(digits);
223 chmb->LoadDigits(&dm);
a282bf09 224 }
225 return kTRUE;
226}
227
228
229//________________________________________________________
230Bool_t TRDLoader::LoadHits(TTree *tH)
231{
232 Info("LoadHits()", Form("Hits tree 0x%x", tH));
233 if(!fChildren.size()) return kTRUE;
234
235 TRDChamber *chmb = 0x0;
14217b5f 236 AliTRDhit *hit = 0x0;
a282bf09 237 Int_t d;
238 for(int iTrack=0; iTrack<tH->GetEntries(); iTrack++){
239 gAlice->ResetHits();
240 if(!tH->GetEvent(iTrack)) continue;
241 hit = (AliTRDhit*)fTRD->FirstHit(-1);
242 if(!hit) continue;
243 d = hit->GetDetector();
244 chmb = GetChamber(d);
245 while(hit){
246 if(d != hit->GetDetector()){
247 d = hit->GetDetector();
248 chmb = GetChamber(d);
249 }
250 if(chmb) chmb->AddHit(hit);
251 hit = (AliTRDhit*)fTRD->NextHit();
252 }
253 }
254 return kTRUE;
255}
256
257//________________________________________________________
258Bool_t TRDLoader::LoadTracklets(TTree *tT)
259{
260 Info("LoadTracklets()", Form("Tracks tree 0x%x", tT));
261 if(!fChildren.size()) return kTRUE;
262
263 TObjArray *tracks = new TObjArray();
264 tT->SetBranchAddress("TRDmcmTracklet",&tracks);
265
266 TRDChamber *chmb = 0x0;
267 AliTRDmcmTracklet *trk=0x0;
268 for(int idet=0; idet<540; idet++){
269 if(!tT->GetEntry(idet)) continue;
270 if(tracks->GetEntriesFast()) trk = (AliTRDmcmTracklet*)tracks->UncheckedAt(0);
271 if((chmb = GetChamber(trk->GetDetector()))) chmb->LoadTracklets(tracks);
272 }
273
274 return kTRUE;
275}
276
277//________________________________________________________
14217b5f 278Bool_t TRDLoader::Open(const char *filename, const char *dir)
a282bf09 279{
14217b5f 280 fFilename = filename;
281 fDir = dir;
282 fDir += "/";
283
284 fRunLoader = AliRunLoader::GetRunLoader();
a282bf09 285 if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
286 AliConfig::GetDefaultEventFolderName(),"read");
287 if(!fRunLoader){
288 Error("Open()", "Couldn't find run loader");
289 return kFALSE;
290 }
14217b5f 291 fRunLoader->SetDirName(fDir);
292
a282bf09 293 gAlice = fRunLoader->GetAliRun();
294 if(!gAlice) fRunLoader->LoadgAlice();
295 if(!gAlice){
296 Error("Open()", "Couldn't find gAlice object");
297 return kFALSE;
298 }
299 fTRD = (AliTRDv1*)gAlice->GetDetector("TRD");
300 if(!fTRD){
301 Error("Open()", "Couldn't find TRD");
302 return kFALSE;
303 }
14217b5f 304
a282bf09 305 return kTRUE;
306}
307
a282bf09 308//________________________________________________________
309void TRDLoader::Unload()
310{
e6ac3950 311 List_i ichmb = fChildren.begin();
a282bf09 312 while(ichmb != fChildren.end()){
313 (dynamic_cast<TRDModule*>(*ichmb))->Reset();
314 ichmb++;
315 }
316}
317
318///////////////////////////////////////////////////////////
319///////////// TRDLoaderEditor /////////////////////
320///////////////////////////////////////////////////////////
321
322//________________________________________________________
323TRDLoaderEditor::TRDLoaderEditor(const TGWindow* p, Int_t width, Int_t height, UInt_t options, Pixel_t back) : TGedFrame(p, width, height, options | kVerticalFrame, back)
324{
325 MakeTitle("TRDLoader");
326
327 fFile = 0x0;
14217b5f 328 TGTextButton *fOpenFile = 0x0;
a282bf09 329 Int_t labelW = 42;
330 {
331 TGHorizontalFrame* f = new TGHorizontalFrame(this);
332 TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
333 TGLabel* l = new TGLabel(g, "File: ");
334 g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
335 f->AddFrame(g);
336 fFile = new TGTextEntry(f);
337 fFile->SetWidth(140);
338 f->AddFrame(fFile);
339/*
340 fFile->Connect("DoubleClicked()",
341 "Alieve::TPCLoaderEditor", this, "FileSelect()");
342 fFile->Connect("TextChanged(const char *)",
343 "Alieve::TPCLoaderEditor", this, "FileChanged()");
344*/
345 fOpenFile = new TGTextButton(f, "Open");
346 f->AddFrame(fOpenFile);
347 fOpenFile->Connect("Clicked()",
348 "Alieve::TRDLoaderEditor", this, "FileOpen()");
349 AddFrame(f);
350 }
351
352 fEvent = new RGValuator(this, "Event:", 110, 0);
353 fEvent->SetShowSlider(kFALSE);
354 fEvent->SetLabelWidth(labelW);
355 fEvent->SetNELength(6);
356 fEvent->Build();
357 fEvent->SetLimits(-1, 1000);
358 fEvent->SetToolTip("Current event number");
359/* fEvent->Connect("ValueSet(Double_t)",
360 "Alieve::TPCLoaderEditor", this, "DoEvent()");
361*/
362 AddFrame(fEvent);
363
364
365 // "Chamber(s) selector" group frame
366 TGGroupFrame *fGroupFrame1974 = new TGGroupFrame(this,"Chamber(s) selector");
14217b5f 367 TGVerticalFrame *fVerticalFrame1974 = new TGVerticalFrame(fGroupFrame1974, 150, 50,kVerticalFrame);
368
369 fSMNumber = new RGValuator(fVerticalFrame1974, "SM:", 0, 0);
370 fSMNumber->SetShowSlider(kFALSE);
371 fSMNumber->SetLabelWidth(labelW);
372 fSMNumber->SetNELength(6);
373 fSMNumber->Build();
374 fSMNumber->SetLimits(-1, 17);
375 fSMNumber->SetToolTip("Supermodule id [-1 for all]");
376 fVerticalFrame1974->AddFrame(fSMNumber, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX | kLHintsExpandY,2,2,2,2));
377
378 fStackNumber = new RGValuator(fVerticalFrame1974, "Stack:", 0, 0);
379 fStackNumber->SetShowSlider(kFALSE);
380 fStackNumber->SetLabelWidth(labelW);
381 fStackNumber->SetNELength(6);
382 fStackNumber->Build();
383 fStackNumber->SetLimits(-1, 4);
384 fStackNumber->SetToolTip("Stack id [-1 for all in this SM]");
385 fVerticalFrame1974->AddFrame(fStackNumber, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX | kLHintsExpandY,2,2,2,2));
386
387 fPlaneNumber = new RGValuator(fVerticalFrame1974, "Plane:", 0, 0);
388 fPlaneNumber->SetShowSlider(kFALSE);
389 fPlaneNumber->SetLabelWidth(labelW);
390 fPlaneNumber->SetNELength(6);
391 fPlaneNumber->Build();
392 fPlaneNumber->SetLimits(-1, 5);
393 fPlaneNumber->SetToolTip("Plane id [-1 for all in this stack]");
394
395 fVerticalFrame1974->AddFrame(fPlaneNumber, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX | kLHintsExpandY,2,2,2,2));
a282bf09 396
14217b5f 397 fGroupFrame1974->AddFrame(fVerticalFrame1974, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandY | kLHintsCenterX,2,2,2,2));
a282bf09 398
399 TGTextButton *fTextButton2037 = new TGTextButton(fGroupFrame1974,"Select");
400 fTextButton2037->SetTextJustify(36);
14217b5f 401// fTextButton2037->Resize(128,22);
402 fGroupFrame1974->AddFrame(fTextButton2037, new TGLayoutHints(kLHintsExpandY | kLHintsCenterX,2,2,2,2));
a282bf09 403 fTextButton2037->Connect("Clicked()",
404 "Alieve::TRDLoaderEditor", this, "AddChambers()");
405
406 fGroupFrame1974->SetLayoutManager(new TGHorizontalLayout(fGroupFrame1974));
407// fGroupFrame1974->Resize(164,150);
408 AddFrame(fGroupFrame1974, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
409
410
411 // "Data selector" group frame
412 TGGroupFrame *fGroupFrame1987 = new TGGroupFrame(this,"Data selector");
413 fLoadHits = new TGCheckButton(fGroupFrame1987," Hits");
414 fGroupFrame1987->AddFrame(fLoadHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
415 fLoadDigits = new TGCheckButton(fGroupFrame1987," Digits");
416 fGroupFrame1987->AddFrame(fLoadDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
417 fLoadClusters = new TGCheckButton(fGroupFrame1987," Clusters");
418 fGroupFrame1987->AddFrame(fLoadClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
14217b5f 419 fLoadTracks = new TGCheckButton(fGroupFrame1987," Tracklets ");
420 fGroupFrame1987->AddFrame(fLoadTracks, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
a282bf09 421
422 fGroupFrame1987->SetLayoutManager(new TGVerticalLayout(fGroupFrame1987));
423// fGroupFrame1987->Resize(164,116);
424 AddFrame(fGroupFrame1987, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
425
426 TGTextButton *fTextButton2004 = new TGTextButton(this,"Load");
427 fTextButton2004->SetTextJustify(36);
428 fTextButton2004->Resize(164,22);
429 AddFrame(fTextButton2004, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
430
431 fTextButton2004->Connect("Clicked()",
432 "Alieve::TRDLoaderEditor", this, "Load()");
433}
434
435//________________________________________________________
436TRDLoaderEditor::~TRDLoaderEditor()
437{}
438
439//_________________________________________________________
440void TRDLoaderEditor::SetModel(TObject* obj)
441{
442 fM = dynamic_cast<TRDLoader*>(obj);
14217b5f 443
444 fFile->SetText(gSystem->BaseName(fM->fFilename.Data()));
445
446 Bool_t kFile = kTRUE;
447 if(fM->fFilename.CompareTo("") == 0) kFile = kFALSE;
448
449 fEvent->SetEnabled(kFile);
450 if(kFile) fEvent->GetEntry()->SetIntNumber(fM->fEvent);
451
452 fSMNumber->SetEnabled(kFile);
453 if(kFile) fSMNumber->GetEntry()->SetIntNumber(fM->fSM);
454 fStackNumber->SetEnabled(kFile);
455 if(kFile) fStackNumber->GetEntry()->SetIntNumber(fM->fStack);
456 fPlaneNumber->SetEnabled(kFile);
457 if(kFile) fPlaneNumber->GetEntry()->SetIntNumber(fM->fLy);
458
459 fLoadHits->SetEnabled(kFile);
460 if(kFile) fLoadHits->SetState(fM->kLoadHits ? kButtonDown : kButtonUp);
461 fLoadDigits->SetEnabled(kFile);
462 if(kFile) fLoadDigits->SetState(fM->kLoadDigits ? kButtonDown : kButtonUp);
463 fLoadClusters->SetEnabled(kFile);
464 if(kFile) fLoadClusters->SetState(fM->kLoadClusters ? kButtonDown : kButtonUp);
465 fLoadTracks->SetEnabled(kFile);
466 if(kFile) fLoadTracks->SetState(fM->kLoadTracks ? kButtonDown : kButtonUp);
a282bf09 467}
468
469//________________________________________________________
470void TRDLoaderEditor::AddChambers()
471{
14217b5f 472 fM->fSM = (int)fSMNumber->GetEntry()->GetNumber();
473 fM->fStack = (int)fStackNumber->GetEntry()->GetNumber();
474 fM->fLy = (int)fPlaneNumber->GetEntry()->GetNumber();
475 fM->AddChambers(fM->fSM, fM->fStack, fM->fLy);
a282bf09 476}
477
478//________________________________________________________
479void TRDLoaderEditor::FileOpen()
480{
481 TGFileInfo fi;
14217b5f 482 fi.fIniDir = StrDup(gSystem->DirName (fM->fFilename.Data()));
483 fi.fFilename = StrDup(gSystem->BaseName(fM->fFilename.Data()));
484// fi.fFileTypes = tpcfiletypes;
485
a282bf09 486 new TGFileDialog(fClient->GetRoot(), gReve, kFDOpen, &fi);
487 if (!fi.fFilename) return;
488
489 fFile->SetToolTipText(gSystem->DirName (fi.fFilename));
490 fFile->SetText (gSystem->BaseName(fi.fFilename));
491
14217b5f 492 fM->Open(gSystem->BaseName(fi.fFilename), gSystem->DirName (fi.fFilename));
493 SetModel(fM);
a282bf09 494}
495
496//________________________________________________________
497void TRDLoaderEditor::Load()
498{
499 fM->kLoadHits = kFALSE;
500 fM->kLoadDigits = kFALSE;
501 fM->kLoadClusters = kFALSE;
502 fM->kLoadTracks = kFALSE;
503 if(fLoadHits->IsDown()) fM->kLoadHits = kTRUE;
504 if(fLoadDigits->IsDown()) fM->kLoadDigits = kTRUE;
505 if(fLoadClusters->IsDown()) fM->kLoadClusters = kTRUE;
14217b5f 506 if(fLoadTracks->IsDown()) fM->kLoadTracks = kTRUE;
a282bf09 507
508 fM->GoToEvent((int)fEvent->GetEntry()->GetNumber());
509}
510