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