]>
Commit | Line | Data |
---|---|---|
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 | **************************************************************************/ |
707b281a | 9 | |
d810d0de | 10 | #include "AliEveTRDLoader.h" |
11 | #include "AliEveTRDModuleImp.h" | |
6983e87a | 12 | #include "EveBase/AliEveEventManager.h" |
a282bf09 | 13 | |
84aff7a4 | 14 | #include <TEveManager.h> |
15 | #include <TEveGValuators.h> | |
a282bf09 | 16 | |
6983e87a | 17 | #include "TGeoManager.h" |
edf0c4a0 | 18 | #include "TSystem.h" |
19 | #include "TFile.h" | |
20 | #include "TTree.h" | |
edf0c4a0 | 21 | #include "TObjString.h" |
22 | #include "TObjArray.h" | |
6983e87a | 23 | #include "TClonesArray.h" |
edf0c4a0 | 24 | |
a282bf09 | 25 | #include <TGLabel.h> |
26 | #include <TGButton.h> | |
27 | #include <TGTextEntry.h> | |
a282bf09 | 28 | #include <TGFileDialog.h> |
a282bf09 | 29 | |
edf0c4a0 | 30 | #include "AliLog.h" |
a282bf09 | 31 | #include "AliCDBManager.h" |
32 | ||
6983e87a | 33 | #include "AliTRDhit.h" |
a282bf09 | 34 | #include "AliTRDcluster.h" |
a282bf09 | 35 | #include "AliTRDdigitsManager.h" |
36 | #include "AliTRDgeometry.h" | |
37 | ||
d810d0de | 38 | ClassImp(AliEveTRDLoader) |
39 | ClassImp(AliEveTRDLoaderEditor) | |
a282bf09 | 40 | |
41 | /////////////////////////////////////////////////////////// | |
fd31e9de | 42 | ///////////// AliEveTRDLoader ///////////////////// |
a282bf09 | 43 | /////////////////////////////////////////////////////////// |
44 | ||
45 | ||
fd31e9de | 46 | //______________________________________________________________________________ |
6983e87a | 47 | AliEveTRDLoader::AliEveTRDLoader(const Text_t* n, const Text_t* t) : TEveElementList(n, t) |
48 | ,fDataType(0) | |
49 | ,fSM(-1) | |
50 | ,fStack(-1) | |
51 | ,fLy(-1) | |
52 | ,fEvent(-1) | |
53 | ,fGeo(0x0) | |
54 | ,fFilename("") | |
55 | ,fDir(".") | |
51346b82 | 56 | { |
a15e6d7d | 57 | // Constructor. |
58 | ||
b642f9a5 | 59 | AliEveEventManager::AssertGeometry(); |
6983e87a | 60 | |
61 | fGeo = new AliTRDgeometry(); | |
62 | //fGeo->CreateClusterMatrixArray(); | |
a15e6d7d | 63 | } |
fd31e9de | 64 | |
6983e87a | 65 | //______________________________________________________________________________ |
fd31e9de | 66 | void AliEveTRDLoader::AddChambers(int sm, int stk, int ly) |
a282bf09 | 67 | { |
a15e6d7d | 68 | // Add specified chambers. |
69 | ||
6983e87a | 70 | fSM=sm; fStack=stk; fLy=ly; |
a15e6d7d | 71 | Int_t ismStart = (sm == -1) ? 0 : sm; |
72 | Int_t ismStop = (sm == -1) ? 18 : sm+1; | |
73 | Int_t istkStart= (stk == -1)? 0 : stk; | |
74 | Int_t istkStop = (stk == -1)? 5 : stk+1; | |
75 | Int_t ilyStart = (ly == -1) ? 0 : ly; | |
76 | Int_t ilyStop = (ly == -1) ? 6 : ly+1; | |
fd31e9de | 77 | |
78 | List_i ichmb; | |
79 | ichmb = fChildren.begin(); | |
80 | while(ichmb != fChildren.end()){ | |
81 | (*ichmb)->SetRnrSelf(kFALSE); | |
82 | ichmb++; | |
83 | } | |
84 | ||
a15e6d7d | 85 | AliEveTRDNode *lSM=0x0, *lSTK=0x0; |
86 | AliEveTRDChamber *lCHMB = 0x0; | |
fd31e9de | 87 | int det; |
a15e6d7d | 88 | for (int ism=ismStart; ism<ismStop; ism++){ |
6983e87a | 89 | if(!(lSM = (AliEveTRDNode*)FindChild(Form("SM%03d", ism)))){ |
a15e6d7d | 90 | AddElement(lSM = new AliEveTRDNode("SM", ism)); |
91 | lSM->SetElementTitle(Form("Supermodule %2d", ism)); | |
fd31e9de | 92 | } |
6983e87a | 93 | lSM->SetRnrSelf(kTRUE); |
94 | ||
a15e6d7d | 95 | for (int istk=istkStart; istk<istkStop; istk++) { |
6983e87a | 96 | if(!(lSTK = (AliEveTRDNode*)lSM->FindChild("Stack%03d"))){ |
a15e6d7d | 97 | lSM->AddElement(lSTK = new AliEveTRDNode("Stack", istk)); |
98 | lSTK->SetElementTitle(Form("SM %2d Stack %1d", ism, istk)); | |
fd31e9de | 99 | } |
6983e87a | 100 | lSTK->SetRnrSelf(kTRUE); |
101 | ||
a15e6d7d | 102 | for (int ily=ilyStart; ily<ilyStop; ily++) { |
fd31e9de | 103 | det = fGeo->GetDetector(ily, istk, ism); |
6983e87a | 104 | if(!(lCHMB = (AliEveTRDChamber*)lSTK->FindChild(Form("Chmb%03d", det)))){ |
a15e6d7d | 105 | lSTK->AddElement(lCHMB = new AliEveTRDChamber(det)); |
106 | lCHMB->SetGeometry(fGeo); | |
107 | lCHMB->SetElementTitle(Form("SM %2d Stack %1d Layer %1d", ism, istk, ily)); | |
fd31e9de | 108 | } |
6983e87a | 109 | lCHMB->SetRnrSelf(kTRUE); |
fd31e9de | 110 | } |
111 | } | |
112 | } | |
113 | gEve->Redraw3D(); | |
a282bf09 | 114 | } |
115 | ||
fd31e9de | 116 | //______________________________________________________________________________ |
117 | AliEveTRDChamber* AliEveTRDLoader::GetChamber(int d) | |
a282bf09 | 118 | { |
a15e6d7d | 119 | // Get given chamber. |
120 | ||
6983e87a | 121 | Int_t ism = fGeo->GetSector(d), |
7bc3159a | 122 | istk = fGeo->GetStack(d); |
6983e87a | 123 | |
124 | AliEveTRDNode *node = 0x0; | |
125 | if(!(node = (AliEveTRDNode*)FindChild(Form("SM%03d", ism)))) return 0x0; | |
126 | if(!(node = (AliEveTRDNode*)node->FindChild(Form("Stack%03d", istk)))) return 0x0; | |
127 | return (AliEveTRDChamber*)node->FindChild(Form("Chmb%03d", d)); | |
a282bf09 | 128 | } |
129 | ||
fd31e9de | 130 | //______________________________________________________________________________ |
131 | Bool_t AliEveTRDLoader::GoToEvent(int ev) | |
a282bf09 | 132 | { |
a15e6d7d | 133 | // Go to given event. |
134 | ||
fd31e9de | 135 | if(!fChildren.size()){ |
136 | AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\"."); | |
137 | return kFALSE; | |
138 | } | |
139 | ||
140 | fEvent = ev; | |
141 | ||
142 | Unload(); | |
143 | ||
144 | TTree *t = 0x0; | |
6983e87a | 145 | TFile *f = TFile::Open(Form("%s/%s", fDir.Data(), fFilename.Data())); |
16718cdc | 146 | if(! f->cd(Form("Event%d", ev))){ |
fd31e9de | 147 | AliError(Form("Couldn't find event %d in file \"%s/%s\".", ev, fDir.Data(), fFilename.Data())); |
6983e87a | 148 | f->Close(); //delete f; |
fd31e9de | 149 | return kFALSE; |
150 | } | |
151 | ||
6983e87a | 152 | if(fDataType&kTRDHits){ |
153 | t = (TTree*)gDirectory->Get("TreeH"); | |
154 | if(!t) return kFALSE; | |
155 | if(!LoadHits(t)) return kFALSE; | |
156 | } else if(fDataType&kTRDDigits){ | |
fd31e9de | 157 | t = (TTree*)gDirectory->Get("TreeD"); |
158 | if(!t) return kFALSE; | |
159 | if(!LoadDigits(t)) return kFALSE; | |
6983e87a | 160 | } else if(fDataType&kTRDClusters){ |
fd31e9de | 161 | t = (TTree*)gDirectory->Get("TreeR"); |
162 | if(!t) return kFALSE; | |
163 | if(!LoadClusters(t)) return kFALSE; | |
6983e87a | 164 | } else if(fDataType&kTRDTracklets){ |
a879a24a | 165 | t = (TTree*)gDirectory->Get("tracklets"); |
fd31e9de | 166 | if(!t) return kFALSE; |
167 | if(!LoadTracklets(t)) return kFALSE; | |
168 | } else AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button."); | |
169 | ||
6983e87a | 170 | f->Close(); //delete f; |
fd31e9de | 171 | |
172 | gEve->Redraw3D(); | |
173 | ||
174 | return kTRUE; | |
a282bf09 | 175 | } |
176 | ||
177 | ||
6983e87a | 178 | //______________________________________________________________________________ |
179 | Bool_t AliEveTRDLoader::LoadHits(TTree *tH) | |
180 | { | |
181 | // Load hits. | |
182 | ||
183 | AliInfo("Loading ..."); | |
184 | if(!fChildren.size()) return kFALSE; | |
185 | ||
186 | AliEveTRDChamber *chmb = 0x0; | |
187 | TClonesArray *hits = new TClonesArray("AliTRDhit", 100); | |
188 | tH->SetBranchAddress("TRD", &hits); | |
189 | Int_t idx, nhits; | |
190 | for(int iTrack=0; iTrack<tH->GetEntries(); iTrack++){ | |
191 | if(!tH->GetEvent(iTrack)) continue; | |
192 | if(!(nhits = hits->GetEntriesFast())) continue; | |
193 | ||
194 | idx = 0; | |
195 | while(idx < nhits){ | |
196 | Int_t det = ((AliTRDhit*)hits->UncheckedAt(idx))->GetDetector(); | |
197 | chmb = GetChamber(det); | |
198 | if(chmb) chmb->LoadHits(hits, idx); | |
199 | else{ | |
200 | AliTRDhit *hit = 0x0; | |
201 | while(idx < nhits){ | |
202 | hit = (AliTRDhit*)hits->UncheckedAt(idx); | |
203 | if(hit->GetDetector() != det) break; | |
204 | idx++; | |
205 | } | |
206 | } | |
207 | } | |
208 | hits->Delete(); | |
209 | } | |
210 | return kTRUE; | |
211 | } | |
212 | ||
213 | ||
fd31e9de | 214 | //______________________________________________________________________________ |
215 | Bool_t AliEveTRDLoader::LoadClusters(TTree *tC) | |
a282bf09 | 216 | { |
a15e6d7d | 217 | // Load clusters. |
218 | ||
fd31e9de | 219 | AliInfo("Loading ..."); |
3f797131 | 220 | if(!fChildren.size()) return kFALSE; |
fd31e9de | 221 | |
222 | TObjArray *clusters = new TObjArray(); | |
223 | tC->SetBranchAddress("TRDcluster", &clusters); | |
224 | ||
225 | AliEveTRDChamber *chmb = 0x0; | |
226 | AliTRDcluster *c=0x0; | |
227 | for(int idet=0; idet<540; idet++){ | |
228 | tC->GetEntry(idet); | |
229 | if(!clusters->GetEntriesFast()) continue; | |
230 | c = (AliTRDcluster*)clusters->UncheckedAt(0); | |
231 | if(!c) continue; | |
232 | if((chmb = GetChamber(c->GetDetector()))) chmb->LoadClusters(clusters); | |
233 | } | |
234 | return kTRUE; | |
a282bf09 | 235 | } |
236 | ||
237 | ||
fd31e9de | 238 | //______________________________________________________________________________ |
239 | Bool_t AliEveTRDLoader::LoadDigits(TTree *tD) | |
a282bf09 | 240 | { |
a15e6d7d | 241 | // Load digits. |
242 | ||
fd31e9de | 243 | AliInfo("Loading ..."); |
244 | ||
3f797131 | 245 | if(!fChildren.size()) return kFALSE; |
fd31e9de | 246 | |
247 | AliEveTRDChamber *chmb; | |
248 | AliTRDdigitsManager dm; | |
249 | dm.ReadDigits(tD); | |
250 | for(int idet=0; idet<540; idet++){ | |
251 | if(!(chmb=GetChamber(idet))) continue; | |
252 | // digits = dm.GetDigits(idet); | |
253 | // if(!digits) continue; | |
254 | // chmb->LoadDigits(digits); | |
255 | chmb->LoadDigits(&dm); | |
256 | } | |
257 | return kTRUE; | |
a282bf09 | 258 | } |
259 | ||
260 | ||
fd31e9de | 261 | //______________________________________________________________________________ |
a879a24a | 262 | Bool_t AliEveTRDLoader::LoadTracklets(TTree *trklTree) |
a282bf09 | 263 | { |
a15e6d7d | 264 | // Load tracklets. |
265 | ||
fd31e9de | 266 | AliInfo("Loading ..."); |
3f797131 | 267 | if(!fChildren.size()) return kFALSE; |
a282bf09 | 268 | |
51346b82 | 269 | |
fd31e9de | 270 | AliEveTRDChamber *chmb = 0x0; |
a879a24a | 271 | |
fd31e9de | 272 | for(int idet=0; idet<540; idet++){ |
a879a24a | 273 | if((chmb = GetChamber(idet))) |
274 | chmb->LoadTracklets(trklTree); | |
fd31e9de | 275 | } |
51346b82 | 276 | |
fd31e9de | 277 | return kTRUE; |
a282bf09 | 278 | } |
51346b82 | 279 | |
edf0c4a0 | 280 | |
fd31e9de | 281 | //______________________________________________________________________________ |
282 | Bool_t AliEveTRDLoader::Open(const char *filename, const char *dir) | |
a282bf09 | 283 | { |
a15e6d7d | 284 | // Open given file in given directory. |
285 | ||
fd31e9de | 286 | fFilename = filename; |
287 | fDir = dir; | |
288 | Int_t count = 0; | |
6983e87a | 289 | count += fDataType&kTRDHits; |
290 | count += fDataType&kTRDDigits; | |
291 | count += fDataType&kTRDClusters; | |
292 | count += fDataType&kTRDTracklets; | |
fd31e9de | 293 | |
294 | TObjArray *so = fFilename.Tokenize("."); | |
295 | ||
296 | if(((TObjString*)(*so)[0])->GetString().CompareTo("TRD") != 0){ | |
6983e87a | 297 | AliError("Filename didn't fulfill naming conventions. No TRD data will be loaded."); |
298 | return kFALSE; | |
fd31e9de | 299 | } |
6983e87a | 300 | |
301 | if(((TObjString*)(*so)[1])->GetString().CompareTo("Hits") == 0){ | |
302 | if(count && !fDataType&kTRDHits){ | |
303 | AliWarning("Data type set to HITS according to file name. Previous settings will be overwritten."); | |
304 | fDataType = 0; | |
305 | } | |
306 | fDataType|=kTRDHits; | |
307 | } else if(((TObjString*)(*so)[1])->GetString().CompareTo("Digits") == 0){ | |
308 | if(count && !fDataType&kTRDDigits){ | |
309 | AliWarning("Data type set to DIGITS according to file name. Previous settings will be overwritten."); | |
310 | fDataType = 0; | |
311 | } | |
312 | fDataType|=kTRDDigits; | |
fd31e9de | 313 | } else if(((TObjString*)(*so)[1])->GetString().CompareTo("RecPoints") == 0){ |
6983e87a | 314 | if(count && !fDataType&kTRDClusters){ |
315 | AliWarning("Data type set to CLUSTERS according to file name. Previous settings will be overwritten."); | |
316 | fDataType = 0; | |
317 | } | |
318 | fDataType|=kTRDClusters; | |
a879a24a | 319 | } else if(((TObjString*)(*so)[1])->GetString().CompareTo("Tracklets") == 0){ |
6983e87a | 320 | if(count && !fDataType&kTRDTracklets){ |
321 | AliWarning("Data type set to TRACKLETS according to file name. Previous settings will be overwritten."); | |
322 | fDataType = 0; | |
323 | } | |
324 | fDataType|=kTRDTracklets; | |
fd31e9de | 325 | } else { |
326 | AliError("Filename didn't fulfill naming conventions. No data will be loaded."); | |
327 | return kFALSE; | |
328 | } | |
329 | ||
6983e87a | 330 | SetDataLinked(); |
fd31e9de | 331 | return kTRUE; |
a282bf09 | 332 | } |
333 | ||
fd31e9de | 334 | //______________________________________________________________________________ |
d810d0de | 335 | void AliEveTRDLoader::Paint(Option_t *option) |
edf0c4a0 | 336 | { |
a15e6d7d | 337 | // Paint object. |
338 | ||
90ae0503 | 339 | AliEveTRDModule *module(NULL); |
fd31e9de | 340 | List_i ichmb = fChildren.begin(); |
341 | while(ichmb != fChildren.end()){ | |
90ae0503 | 342 | if((module = dynamic_cast<AliEveTRDModule*>(*ichmb))) module->Paint(option); |
fd31e9de | 343 | ichmb++; |
344 | } | |
edf0c4a0 | 345 | } |
346 | ||
edf0c4a0 | 347 | |
fd31e9de | 348 | //______________________________________________________________________________ |
d810d0de | 349 | void AliEveTRDLoader::Unload() |
a282bf09 | 350 | { |
a15e6d7d | 351 | // Unload module data. |
352 | ||
fd31e9de | 353 | List_i ichmb = fChildren.begin(); |
354 | while(ichmb != fChildren.end()){ | |
527ceac3 | 355 | //(dynamic_cast<AliEveTRDModule*>(*ichmb))->Reset(); |
fd31e9de | 356 | ichmb++; |
357 | } | |
a282bf09 | 358 | } |
359 | ||
360 | /////////////////////////////////////////////////////////// | |
d810d0de | 361 | ///////////// AliEveTRDLoaderEditor ///////////////////// |
a282bf09 | 362 | /////////////////////////////////////////////////////////// |
363 | ||
fd31e9de | 364 | //______________________________________________________________________________ |
365 | AliEveTRDLoaderEditor::AliEveTRDLoaderEditor(const TGWindow* p, Int_t width, Int_t height, | |
366 | UInt_t options, Pixel_t back) : | |
367 | TGedFrame(p, width, height, options | kVerticalFrame, back), | |
6983e87a | 368 | fM(0), fFile(0), fBrowse(0x0), fEvent(0), |
fd31e9de | 369 | fSMNumber(0), fStackNumber(0), fPlaneNumber(0) |
a282bf09 | 370 | { |
a15e6d7d | 371 | // Constructor. |
372 | ||
fd31e9de | 373 | MakeTitle("AliEveTRDLoader"); |
51346b82 | 374 | |
6983e87a | 375 | // file browser frame |
fd31e9de | 376 | Int_t labelW = 42; |
fd31e9de | 377 | TGHorizontalFrame* f = new TGHorizontalFrame(this); |
378 | TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth); | |
379 | TGLabel* l = new TGLabel(g, "File: "); | |
380 | g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0)); | |
381 | f->AddFrame(g); | |
382 | fFile = new TGTextEntry(f); | |
383 | fFile->SetToolTipText("Select TRD data file or galice.root"); | |
384 | fFile->SetWidth(140); | |
385 | fFile->Connect("DoubleClicked()", "AliEveTRDLoaderEditor", this, "FileOpen()"); | |
386 | f->AddFrame(fFile); | |
51346b82 | 387 | |
6983e87a | 388 | fBrowse = new TGTextButton(f, "Browse"); |
389 | f->AddFrame(fBrowse); | |
390 | fBrowse->Connect("Clicked()", "AliEveTRDLoaderEditor", this, "FileOpen()"); | |
391 | AddFrame(f, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,5,5,5,5)); | |
a282bf09 | 392 | |
393 | ||
fd31e9de | 394 | // "Chamber(s) selector" group frame |
395 | TGGroupFrame *fGroupFrame1974 = new TGGroupFrame(this,"Chamber(s) selector"); | |
396 | TGVerticalFrame *fVerticalFrame1974 = new TGVerticalFrame(fGroupFrame1974, 150, 50,kVerticalFrame); | |
51346b82 | 397 | |
fd31e9de | 398 | fSMNumber = new TEveGValuator(fVerticalFrame1974, "SM:", 0, 0); |
14217b5f | 399 | fSMNumber->SetShowSlider(kFALSE); |
400 | fSMNumber->SetLabelWidth(labelW); | |
401 | fSMNumber->SetNELength(6); | |
402 | fSMNumber->Build(); | |
403 | fSMNumber->SetLimits(-1, 17); | |
404 | fSMNumber->SetToolTip("Supermodule id [-1 for all]"); | |
fd31e9de | 405 | fVerticalFrame1974->AddFrame(fSMNumber, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX | kLHintsExpandY,2,2,2,2)); |
14217b5f | 406 | |
fd31e9de | 407 | fStackNumber = new TEveGValuator(fVerticalFrame1974, "Stack:", 0, 0); |
14217b5f | 408 | fStackNumber->SetShowSlider(kFALSE); |
409 | fStackNumber->SetLabelWidth(labelW); | |
410 | fStackNumber->SetNELength(6); | |
411 | fStackNumber->Build(); | |
412 | fStackNumber->SetLimits(-1, 4); | |
413 | fStackNumber->SetToolTip("Stack id [-1 for all in this SM]"); | |
fd31e9de | 414 | fVerticalFrame1974->AddFrame(fStackNumber, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX | kLHintsExpandY,2,2,2,2)); |
14217b5f | 415 | |
fd31e9de | 416 | fPlaneNumber = new TEveGValuator(fVerticalFrame1974, "Plane:", 0, 0); |
14217b5f | 417 | fPlaneNumber->SetShowSlider(kFALSE); |
418 | fPlaneNumber->SetLabelWidth(labelW); | |
419 | fPlaneNumber->SetNELength(6); | |
420 | fPlaneNumber->Build(); | |
421 | fPlaneNumber->SetLimits(-1, 5); | |
422 | fPlaneNumber->SetToolTip("Plane id [-1 for all in this stack]"); | |
423 | ||
fd31e9de | 424 | fVerticalFrame1974->AddFrame(fPlaneNumber, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX | kLHintsExpandY,2,2,2,2)); |
51346b82 | 425 | |
fd31e9de | 426 | fGroupFrame1974->AddFrame(fVerticalFrame1974, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandY | kLHintsCenterX,2,2,2,2)); |
a282bf09 | 427 | |
fd31e9de | 428 | TGTextButton *fTextButton2037 = new TGTextButton(fGroupFrame1974,"Select"); |
429 | fTextButton2037->SetTextJustify(36); | |
430 | fGroupFrame1974->AddFrame(fTextButton2037, new TGLayoutHints(kLHintsExpandY | kLHintsCenterX,2,2,2,2)); | |
edf0c4a0 | 431 | fTextButton2037->SetToolTipText("Apply selection", 400); |
fd31e9de | 432 | fTextButton2037->Connect("Clicked()", |
433 | "AliEveTRDLoaderEditor", this, "AddChambers()"); | |
a282bf09 | 434 | |
fd31e9de | 435 | fGroupFrame1974->SetLayoutManager(new TGHorizontalLayout(fGroupFrame1974)); |
6983e87a | 436 | AddFrame(fGroupFrame1974, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,5,5,5,5)); |
437 | ||
438 | ||
439 | // Event steering frame | |
440 | f = new TGHorizontalFrame(this); | |
441 | TGTextButton *fGoTo = new TGTextButton(f, "GoTo"); | |
442 | fGoTo->SetTextJustify(36); | |
443 | fGoTo->Resize(164,22); | |
444 | f->AddFrame(fGoTo, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
445 | fGoTo->SetToolTipText("Skip to event", 400); | |
446 | fGoTo->Connect("Clicked()", "AliEveTRDLoaderEditor", this, "GoTo()"); | |
447 | ||
448 | fEvent = new TEveGValuator(f, "Event:", 110, 0); | |
449 | fEvent->SetShowSlider(kFALSE); | |
450 | fEvent->SetLabelWidth(labelW); | |
451 | fEvent->SetNELength(6); | |
452 | fEvent->Build(); | |
453 | fEvent->SetLimits(-1, 1000); | |
454 | fEvent->SetToolTip("Set event number to be monitored"); | |
455 | fEvent->Connect("ValueSet(Double_t)", | |
456 | "AliEveTRDLoaderEditor", this, "SetEvent(Double_t)"); | |
457 | f->AddFrame(fEvent, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2,2,2,2)); | |
a282bf09 | 458 | |
6983e87a | 459 | TGTextButton *fNext = new TGTextButton(f, "Next"); |
460 | fNext->SetTextJustify(36); | |
461 | fNext->Resize(164,22); | |
462 | f->AddFrame(fNext, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2)); | |
463 | fNext->SetToolTipText("Next event", 400); | |
464 | fNext->Connect("Clicked()", "AliEveTRDLoaderEditor", this, "Next()"); | |
465 | ||
466 | AddFrame(f,new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,5,5,5,5)); | |
a282bf09 | 467 | |
a282bf09 | 468 | } |
469 | ||
fd31e9de | 470 | //______________________________________________________________________________ |
d810d0de | 471 | void AliEveTRDLoaderEditor::SetModel(TObject* obj) |
a282bf09 | 472 | { |
a15e6d7d | 473 | // Set model object. |
edf0c4a0 | 474 | |
90ae0503 | 475 | if(!(fM = dynamic_cast<AliEveTRDLoader*>(obj))) return; |
14217b5f | 476 | |
6983e87a | 477 | fFile->SetEnabled(!fM->IsDataLinked()); |
fd31e9de | 478 | fFile->SetText(gSystem->BaseName(fM->fFilename.Data())); |
6983e87a | 479 | fBrowse->SetEnabled(!fM->IsDataLinked()); |
14217b5f | 480 | |
6983e87a | 481 | fEvent->SetEnabled(fM->IsDataLinked()); |
fd31e9de | 482 | fEvent->GetEntry()->SetIntNumber(fM->fEvent); |
51346b82 | 483 | |
6983e87a | 484 | fSMNumber->SetEnabled(fM->IsDataLinked()); |
fd31e9de | 485 | fSMNumber->GetEntry()->SetIntNumber(fM->fSM); |
edf0c4a0 | 486 | |
487 | ||
6983e87a | 488 | fStackNumber->SetEnabled(fM->IsDataLinked()); |
fd31e9de | 489 | fStackNumber->GetEntry()->SetIntNumber(fM->fStack); |
edf0c4a0 | 490 | |
491 | ||
6983e87a | 492 | fPlaneNumber->SetEnabled(fM->IsDataLinked()); |
fd31e9de | 493 | fPlaneNumber->GetEntry()->SetIntNumber(fM->fLy); |
a282bf09 | 494 | } |
495 | ||
fd31e9de | 496 | //______________________________________________________________________________ |
d810d0de | 497 | void AliEveTRDLoaderEditor::AddChambers() |
a282bf09 | 498 | { |
a15e6d7d | 499 | // Slot to add chambers. |
500 | ||
fd31e9de | 501 | fM->fSM = (int)fSMNumber->GetEntry()->GetNumber(); |
502 | fM->fStack = (int)fStackNumber->GetEntry()->GetNumber(); | |
503 | fM->fLy = (int)fPlaneNumber->GetEntry()->GetNumber(); | |
504 | fM->AddChambers(fM->fSM, fM->fStack, fM->fLy); | |
a282bf09 | 505 | } |
506 | ||
fd31e9de | 507 | //______________________________________________________________________________ |
d810d0de | 508 | void AliEveTRDLoaderEditor::FileOpen() |
a282bf09 | 509 | { |
a15e6d7d | 510 | // Slot for opening of file. |
511 | ||
a282bf09 | 512 | TGFileInfo fi; |
14217b5f | 513 | fi.fIniDir = StrDup(gSystem->DirName (fM->fFilename.Data())); |
514 | fi.fFilename = StrDup(gSystem->BaseName(fM->fFilename.Data())); | |
fd31e9de | 515 | // fi.fFileTypes = tpcfiletypes; |
14217b5f | 516 | |
84aff7a4 | 517 | new TGFileDialog(fClient->GetRoot(), gEve->GetMainWindow(), kFDOpen, &fi); |
a282bf09 | 518 | if (!fi.fFilename) return; |
519 | ||
6983e87a | 520 | if(fM->Open(gSystem->BaseName(fi.fFilename), gSystem->DirName (fi.fFilename))){ |
521 | fFile->SetToolTipText(gSystem->DirName (fi.fFilename)); | |
522 | fFile->SetText (gSystem->BaseName(fi.fFilename)); | |
523 | } else fFile->Clear(); | |
edf0c4a0 | 524 | |
fd31e9de | 525 | this->SetModel(fM); |
a282bf09 | 526 | } |
527 | ||
6983e87a | 528 | void AliEveTRDLoaderEditor::GoTo() |
a282bf09 | 529 | { |
a15e6d7d | 530 | // Slot for loading of event. |
531 | ||
fd31e9de | 532 | fM->GoToEvent(fM->fEvent); |
a282bf09 | 533 | } |
6983e87a | 534 | |
535 | void AliEveTRDLoaderEditor::Next() | |
536 | { | |
537 | // Slot for loading of event. | |
538 | ||
539 | fM->NextEvent(); | |
540 | } |