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