2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
4 /**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
9 #include "AliEveTRDLoaderImp.h"
10 #include "AliEveTRDModuleImp.h"
12 //#include "AliTRDv1.h"
14 #include <TEveManager.h>
23 #include "AliRunLoader.h"
24 #include "AliLoader.h"
25 #include "AliTRDrawData.h"
26 #include "AliRawReaderRoot.h"
27 #include "AliRawReaderDate.h"
30 #include "AliTRDhit.h"
31 #include "AliTRDdigitsManager.h"
35 ClassImp(AliEveTRDLoaderSim)
36 ClassImp(AliEveTRDLoaderRaw)
37 ClassImp(AliEveTRDLoaderSimEditor)
38 //ClassImp(TRDLoaderRawEditor)
40 ///////////////////////////////////////////////////////////
41 ///////////// AliEveTRDLoaderSim /////////////////////
42 ///////////////////////////////////////////////////////////
45 //________________________________________________________
46 AliEveTRDLoaderSim::AliEveTRDLoaderSim(const Text_t* n, const Text_t* t) : AliEveTRDLoader(n, t)
51 //________________________________________________________
52 AliEveTRDLoaderSim::~AliEveTRDLoaderSim()
55 //________________________________________________________
56 Bool_t AliEveTRDLoaderSim::GoToEvent(int ev)
58 if(!fChildren.size()){
59 AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
62 if(!kLoadHits && !kLoadDigits && !kLoadClusters && !kLoadTracks){
63 AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
70 AliError("RunLoader not initialized.");
73 fRunLoader->UnloadAll("TRD");
76 if(fRunLoader->GetEvent(ev)) return kFALSE;
79 fRunLoader->LoadHits("TRD", "READ");
80 t = fRunLoader->GetTreeH("TRD", kFALSE);
82 fTRD->SetTreeAddress();
83 if(!LoadHits(t)) return kFALSE;
86 fRunLoader->LoadDigits("TRD", "READ");
87 t = fRunLoader->GetTreeD("TRD", kFALSE);
89 fTRD->SetTreeAddress();
90 if(!LoadDigits(t)) return kFALSE;
93 fRunLoader->LoadRecPoints("TRD", "READ");
94 t = fRunLoader->GetTreeR("TRD", kFALSE);
96 if(!LoadClusters(t)) return kFALSE;
99 fRunLoader->LoadTracks("TRD", "READ");
100 t = fRunLoader->GetTreeT("TRD", kFALSE);
101 if(!t) return kFALSE;
102 if(!LoadTracklets(t)) return kFALSE;
110 //________________________________________________________
111 Bool_t AliEveTRDLoaderSim::LoadHits(TTree *tH)
113 Info("LoadHits()", "Loading ...");
114 if(!fChildren.size()) return kTRUE;
116 AliEveTRDChamber *chmb = 0x0;
117 AliTRDhit *hit = 0x0;
119 for(int iTrack=0; iTrack<tH->GetEntries(); iTrack++){
121 if(!tH->GetEvent(iTrack)) continue;
122 hit = (AliTRDhit*)fTRD->FirstHit(-1);
124 d = hit->GetDetector();
125 chmb = GetChamber(d);
127 if(d != hit->GetDetector()){
128 d = hit->GetDetector();
129 chmb = GetChamber(d);
131 if(chmb) chmb->AddHit(hit);
132 hit = (AliTRDhit*)fTRD->NextHit();
138 //________________________________________________________
139 Bool_t AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
141 //Info("Open()", "");
144 fFilename = filename;
148 fRunLoader = AliRunLoader::GetRunLoader();
149 if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
150 AliConfig::GetDefaultEventFolderName(),"read");
152 AliError("Couldn't find run loader");
155 fRunLoader->SetDirName(fDir);
157 gAlice = fRunLoader->GetAliRun();
158 if(!gAlice) fRunLoader->LoadgAlice();
160 AliError("Couldn't find gAlice object");
163 fTRD = (AliTRDv1*)gAlice->GetDetector("TRD");
165 AliError("Couldn't find TRD");
174 ///////////////////////////////////////////////////////////
175 ///////////// AliEveTRDLoaderRaw /////////////////////
176 ///////////////////////////////////////////////////////////
179 //________________________________________________________
180 AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) : AliEveTRDLoader(n, t)
182 fRawDateReader = 0x0;
183 fRawRootReader = 0x0;
189 //________________________________________________________
190 AliEveTRDLoaderRaw::~AliEveTRDLoaderRaw()
196 //________________________________________________________
197 Bool_t AliEveTRDLoaderRaw::Open(const char *filename, const char *dir)
199 // Info("Open()", Form("Open %s/%s", dir, filename));
200 fFilename = filename;
205 if(fRaw) delete fRaw;
206 fRaw = new AliTRDrawData();
209 if(fRawRootReader) delete fRawRootReader;
210 fRawRootReader = new AliRawReaderRoot(filename);
212 if(fRawDateReader) delete fRawDateReader;
213 fRawDateReader = new AliRawReaderDate(fDir+fFilename);
219 //________________________________________________________
220 void AliEveTRDLoaderRaw::SetDataType(TRDDataTypes type)
222 fDataRoot = (type == kRawRoot) ? kTRUE : kFALSE;
225 //________________________________________________________
226 Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev)
228 if(!fChildren.size()){
229 AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
233 static const TEveException eH("AliEveTRDLoader::GotoEvent ");
234 if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
237 if(ev == fEventOld) return kTRUE;
240 fRawRootReader->RewindEvents();
243 } else checkEnd = kTRUE;
245 do NextEvent(); while(fEventOld != ev && !(checkEnd == kTRUE && fEventOld == 0));
248 //gEve->EnableRedraw();
252 //________________________________________________________
253 Bool_t AliEveTRDLoaderRaw::LoadEvent()
255 Info("LoadEvent()", "Loading ...");
257 static const TEveException eH("AliEveTRDLoader::LoadEvent ");
258 if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
261 fRawRootReader->Reset();
263 AliEveTRDChamber *chmb;
264 AliTRDdigitsManager *dm;
265 dm = fRaw->Raw2Digits(fRawRootReader);
267 for(int idet=0; idet<540; idet++){
268 if(!(chmb=GetChamber(idet))) continue;
269 chmb->LoadDigits(dm);
274 //________________________________________________________
275 void AliEveTRDLoaderRaw::NextEvent(Bool_t rewindOnEnd)
277 static const TEveException eH("AliEveTRDLoader::NextEvent ");
278 if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
281 if(fRawRootReader->NextEvent() == kTRUE) ++fEventOld;
283 if(fEventOld == -1) throw(eH + "no events available.");
285 Warning("NextEvent()", Form("Reached end of stream (event=%d), rewinding to first event.", fEventOld));
286 fRawRootReader->RewindEvents();
287 fRawRootReader->NextEvent();
289 } else throw(eH + "last event reached.");
295 ///////////////////////////////////////////////////////////
296 ///////////// AliEveTRDLoaderSimEditor /////////////////////
297 ///////////////////////////////////////////////////////////
299 //________________________________________________________
300 AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height, UInt_t options, Pixel_t back) : TGedFrame(p, width, height, options | kVerticalFrame, back)
302 MakeTitle("AliEveTRDLoaderSim");
304 // "Data selector" group frame
305 TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
306 fLoadHits = new TGCheckButton(fGroupFrame," Hits");
307 fLoadHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=0)");
308 fGroupFrame->AddFrame(fLoadHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
310 fLoadDigits = new TGCheckButton(fGroupFrame," Digits");
311 fLoadDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=1)");
312 fGroupFrame->AddFrame(fLoadDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
314 fLoadClusters = new TGCheckButton(fGroupFrame," Clusters");
315 fLoadClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=2)");
316 fGroupFrame->AddFrame(fLoadClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
318 fLoadTracks = new TGCheckButton(fGroupFrame," Tracklets ");
319 fLoadTracks->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=3)");
320 fGroupFrame->AddFrame(fLoadTracks, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
322 fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
323 // fGroupFrame->Resize(164,116);
324 AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
327 //________________________________________________________
328 AliEveTRDLoaderSimEditor::~AliEveTRDLoaderSimEditor()
331 //_________________________________________________________
332 void AliEveTRDLoaderSimEditor::SetModel(TObject* obj)
334 fM = dynamic_cast<AliEveTRDLoaderSim*>(obj);
336 Bool_t kFile = kTRUE;
337 if(fM->fFilename.CompareTo("") == 0) kFile = kFALSE;
339 /* printf("\thits %s\n", fM->kLoadHits ? "true" : "false");
340 printf("\tdigits %s\n", fM->kLoadDigits ? "true" : "false");
341 printf("\tclusters %s\n", fM->kLoadClusters ? "true" : "false");
342 printf("\ttracklets %s\n", fM->kLoadTracks ? "true" : "false");*/
343 fLoadHits->SetEnabled(kFile);
344 if(kFile) fLoadHits->SetState(fM->kLoadHits ? kButtonDown : kButtonUp);
345 fLoadDigits->SetEnabled(kFile);
346 if(kFile) fLoadDigits->SetState(fM->kLoadDigits ? kButtonDown : kButtonUp);
347 fLoadClusters->SetEnabled(kFile);
348 if(kFile) fLoadClusters->SetState(fM->kLoadClusters ? kButtonDown : kButtonUp);
349 fLoadTracks->SetEnabled(kFile);
350 if(kFile) fLoadTracks->SetState(fM->kLoadTracks ? kButtonDown : kButtonUp);
353 //________________________________________________________
354 void AliEveTRDLoaderSimEditor::Toggle(Int_t id)
358 fM->kLoadHits = fLoadHits->IsDown() ? kTRUE : kFALSE;
361 fM->kLoadDigits = fLoadDigits->IsDown() ? kTRUE : kFALSE;
364 fM->kLoadClusters = fLoadClusters->IsDown() ? kTRUE : kFALSE;
367 fM->kLoadTracks = fLoadTracks->IsDown() ? kTRUE : kFALSE;
372 ///////////////////////////////////////////////////////////
373 ///////////// TRDLoaderRawEditor /////////////////////
374 ///////////////////////////////////////////////////////////
376 // //________________________________________________________
377 // TRDLoaderRawEditor::TRDLoaderRawEditor(const TGWindow* p, Int_t width, Int_t height, UInt_t options, Pixel_t back) : TGedFrame(p, width, height, options | kVerticalFrame, back)
379 // MakeTitle("AliEveTRDLoaderRaw");
382 // void TRDLoaderRawEditor::SetModel(TObject* obj)
384 // Info("SetModel()", "");
385 // fM = dynamic_cast<AliEveTRDLoaderRaw*>(obj);