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 **************************************************************************/
10 #include "AliEveTRDLoaderImp.h"
11 #include "AliEveTRDModuleImp.h"
13 #include <TEveManager.h>
22 #include "AliRunLoader.h"
23 #include "AliLoader.h"
24 #include "AliTRDrawData.h"
25 #include "AliRawReaderRoot.h"
26 #include "AliRawReaderDate.h"
29 #include "AliTRDhit.h"
30 #include "AliTRDdigitsManager.h"
32 ClassImp(AliEveTRDLoaderSim)
33 ClassImp(AliEveTRDLoaderRaw)
34 ClassImp(AliEveTRDLoaderSimEditor)
35 //ClassImp(TRDLoaderRawEditor)
37 ///////////////////////////////////////////////////////////
38 ///////////// AliEveTRDLoaderSim /////////////////////
39 ///////////////////////////////////////////////////////////
42 //______________________________________________________________________________
43 AliEveTRDLoaderSim::AliEveTRDLoaderSim(const Text_t* n, const Text_t* t) :
44 AliEveTRDLoader(n, t),
48 //______________________________________________________________________________
49 AliEveTRDLoaderSim::~AliEveTRDLoaderSim()
52 //______________________________________________________________________________
53 Bool_t AliEveTRDLoaderSim::GoToEvent(int ev)
55 if(!fChildren.size()){
56 AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
59 if(!fLoadHits && !fLoadDigits && !fLoadClusters && !fLoadTracks){
60 AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
67 AliError("RunLoader not initialized.");
70 fRunLoader->UnloadAll("TRD");
73 if(fRunLoader->GetEvent(ev)) return kFALSE;
76 fRunLoader->LoadHits("TRD", "READ");
77 t = fRunLoader->GetTreeH("TRD", kFALSE);
79 fTRD->SetTreeAddress();
80 if(!LoadHits(t)) return kFALSE;
83 fRunLoader->LoadDigits("TRD", "READ");
84 t = fRunLoader->GetTreeD("TRD", kFALSE);
86 fTRD->SetTreeAddress();
87 if(!LoadDigits(t)) return kFALSE;
90 fRunLoader->LoadRecPoints("TRD", "READ");
91 t = fRunLoader->GetTreeR("TRD", kFALSE);
93 if(!LoadClusters(t)) return kFALSE;
96 fRunLoader->LoadTracks("TRD", "READ");
97 t = fRunLoader->GetTreeT("TRD", kFALSE);
99 if(!LoadTracklets(t)) return kFALSE;
107 //______________________________________________________________________________
108 Bool_t AliEveTRDLoaderSim::LoadHits(TTree *tH)
110 Info("LoadHits()", "Loading ...");
111 if(!fChildren.size()) return kTRUE;
113 AliEveTRDChamber *chmb = 0x0;
114 AliTRDhit *hit = 0x0;
116 for(int iTrack=0; iTrack<tH->GetEntries(); iTrack++){
118 if(!tH->GetEvent(iTrack)) continue;
119 hit = (AliTRDhit*)fTRD->FirstHit(-1);
121 d = hit->GetDetector();
122 chmb = GetChamber(d);
124 if(d != hit->GetDetector()){
125 d = hit->GetDetector();
126 chmb = GetChamber(d);
128 if(chmb) chmb->AddHit(hit);
129 hit = (AliTRDhit*)fTRD->NextHit();
135 //______________________________________________________________________________
136 Bool_t AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
138 //Info("Open()", "");
141 fFilename = filename;
145 fRunLoader = AliRunLoader::GetRunLoader();
146 if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
147 AliConfig::GetDefaultEventFolderName(),"read");
149 AliError("Couldn't find run loader");
152 fRunLoader->SetDirName(fDir);
154 gAlice = fRunLoader->GetAliRun();
155 if(!gAlice) fRunLoader->LoadgAlice();
157 AliError("Couldn't find gAlice object");
160 fTRD = (AliTRDv1*)gAlice->GetDetector("TRD");
162 AliError("Couldn't find TRD");
171 ///////////////////////////////////////////////////////////
172 ///////////// AliEveTRDLoaderRaw /////////////////////
173 ///////////////////////////////////////////////////////////
176 //______________________________________________________________________________
177 AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) :
178 AliEveTRDLoader(n, t),
186 //______________________________________________________________________________
187 AliEveTRDLoaderRaw::~AliEveTRDLoaderRaw()
191 //______________________________________________________________________________
192 Bool_t AliEveTRDLoaderRaw::Open(const char *filename, const char *dir)
194 // Info("Open()", Form("Open %s/%s", dir, filename));
195 fFilename = filename;
200 if(fRaw) delete fRaw;
201 fRaw = new AliTRDrawData();
204 if(fRawRootReader) delete fRawRootReader;
205 fRawRootReader = new AliRawReaderRoot(filename);
207 if(fRawDateReader) delete fRawDateReader;
208 fRawDateReader = new AliRawReaderDate(fDir+fFilename);
214 //______________________________________________________________________________
215 void AliEveTRDLoaderRaw::SetDataType(TRDDataTypes type)
217 fDataRoot = (type == kRawRoot) ? kTRUE : kFALSE;
220 //______________________________________________________________________________
221 Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev)
223 if(!fChildren.size()){
224 AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
228 static const TEveException eH("AliEveTRDLoader::GotoEvent ");
229 if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
232 if(ev == fEventOld) return kTRUE;
235 fRawRootReader->RewindEvents();
238 } else checkEnd = kTRUE;
240 do NextEvent(); while(fEventOld != ev && !(checkEnd == kTRUE && fEventOld == 0));
243 //gEve->EnableRedraw();
247 //______________________________________________________________________________
248 Bool_t AliEveTRDLoaderRaw::LoadEvent()
250 Info("LoadEvent()", "Loading ...");
252 static const TEveException eH("AliEveTRDLoader::LoadEvent ");
253 if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
256 fRawRootReader->Reset();
258 AliEveTRDChamber *chmb;
259 AliTRDdigitsManager *dm;
260 dm = fRaw->Raw2Digits(fRawRootReader);
262 for(int idet=0; idet<540; idet++){
263 if(!(chmb=GetChamber(idet))) continue;
264 chmb->LoadDigits(dm);
269 //______________________________________________________________________________
270 void AliEveTRDLoaderRaw::NextEvent(Bool_t rewindOnEnd)
272 static const TEveException eH("AliEveTRDLoader::NextEvent ");
273 if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
276 if(fRawRootReader->NextEvent() == kTRUE) ++fEventOld;
278 if(fEventOld == -1) throw(eH + "no events available.");
280 Warning("NextEvent()", Form("Reached end of stream (event=%d), rewinding to first event.", fEventOld));
281 fRawRootReader->RewindEvents();
282 fRawRootReader->NextEvent();
284 } else throw(eH + "last event reached.");
290 ///////////////////////////////////////////////////////////
291 //////////// AliEveTRDLoaderSimEditor /////////////////////
292 ///////////////////////////////////////////////////////////
294 //______________________________________________________________________________
295 AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height,
296 UInt_t options, Pixel_t back) :
297 TGedFrame(p, width, height, options | kVerticalFrame, back),
298 fM(0), fLoadHits(0), fLoadDigits(0), fLoadClusters(0), fLoadTracks(0)
300 MakeTitle("AliEveTRDLoaderSim");
302 // "Data selector" group frame
303 TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
304 fLoadHits = new TGCheckButton(fGroupFrame," Hits");
305 fLoadHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=0)");
306 fGroupFrame->AddFrame(fLoadHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
308 fLoadDigits = new TGCheckButton(fGroupFrame," Digits");
309 fLoadDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=1)");
310 fGroupFrame->AddFrame(fLoadDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
312 fLoadClusters = new TGCheckButton(fGroupFrame," Clusters");
313 fLoadClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=2)");
314 fGroupFrame->AddFrame(fLoadClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
316 fLoadTracks = new TGCheckButton(fGroupFrame," Tracklets ");
317 fLoadTracks->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=3)");
318 fGroupFrame->AddFrame(fLoadTracks, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
320 fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
321 // fGroupFrame->Resize(164,116);
322 AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
325 //______________________________________________________________________________
326 AliEveTRDLoaderSimEditor::~AliEveTRDLoaderSimEditor()
329 //______________________________________________________________________________
330 void AliEveTRDLoaderSimEditor::SetModel(TObject* obj)
332 fM = dynamic_cast<AliEveTRDLoaderSim*>(obj);
334 Bool_t kFile = kTRUE;
335 if(fM->fFilename.CompareTo("") == 0) kFile = kFALSE;
337 /* printf("\thits %s\n", fM->fLoadHits ? "true" : "false");
338 printf("\tdigits %s\n", fM->fLoadDigits ? "true" : "false");
339 printf("\tclusters %s\n", fM->fLoadClusters ? "true" : "false");
340 printf("\ttracklets %s\n", fM->fLoadTracks ? "true" : "false");*/
341 fLoadHits->SetEnabled(kFile);
342 if(kFile) fLoadHits->SetState(fM->fLoadHits ? kButtonDown : kButtonUp);
343 fLoadDigits->SetEnabled(kFile);
344 if(kFile) fLoadDigits->SetState(fM->fLoadDigits ? kButtonDown : kButtonUp);
345 fLoadClusters->SetEnabled(kFile);
346 if(kFile) fLoadClusters->SetState(fM->fLoadClusters ? kButtonDown : kButtonUp);
347 fLoadTracks->SetEnabled(kFile);
348 if(kFile) fLoadTracks->SetState(fM->fLoadTracks ? kButtonDown : kButtonUp);
351 //______________________________________________________________________________
352 void AliEveTRDLoaderSimEditor::Toggle(Int_t id)
356 fM->fLoadHits = fLoadHits->IsDown() ? kTRUE : kFALSE;
359 fM->fLoadDigits = fLoadDigits->IsDown() ? kTRUE : kFALSE;
362 fM->fLoadClusters = fLoadClusters->IsDown() ? kTRUE : kFALSE;
365 fM->fLoadTracks = fLoadTracks->IsDown() ? kTRUE : kFALSE;
370 ///////////////////////////////////////////////////////////
371 ///////////// TRDLoaderRawEditor /////////////////////
372 ///////////////////////////////////////////////////////////
374 // //________________________________________________________
375 // TRDLoaderRawEditor::TRDLoaderRawEditor(const TGWindow* p, Int_t width, Int_t height, UInt_t options, Pixel_t back) : TGedFrame(p, width, height, options | kVerticalFrame, back)
377 // MakeTitle("AliEveTRDLoaderRaw");
380 // void TRDLoaderRawEditor::SetModel(TObject* obj)
382 // Info("SetModel()", "");
383 // fM = dynamic_cast<AliEveTRDLoaderRaw*>(obj);