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