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