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"
12 #include "EveBase/AliEveEventManager.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"
29 ClassImp(AliEveTRDLoaderSim)
30 ClassImp(AliEveTRDLoaderRaw)
31 ClassImp(AliEveTRDLoaderSimEditor)
32 //ClassImp(TRDLoaderRawEditor)
34 ///////////////////////////////////////////////////////////
35 ///////////// AliEveTRDLoaderSim /////////////////////
36 ///////////////////////////////////////////////////////////
39 //______________________________________________________________________________
40 AliEveTRDLoaderSim::AliEveTRDLoaderSim(const Text_t* n, const Text_t* t) :
45 if(gAlice && (fRunLoader = AliEveEventManager::AssertRunLoader())) SetDataLinked();
48 //______________________________________________________________________________
49 Bool_t AliEveTRDLoaderSim::GoToEvent(int ev)
53 if(!fChildren.size()){
54 AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
58 AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
65 AliError("RunLoader not initialized.");
68 fRunLoader->UnloadAll("TRD");
71 if(fRunLoader->GetEvent(ev)) return kFALSE;
73 if(fDataType&kTRDHits){
74 fRunLoader->LoadHits("TRD", "READ");
75 t = fRunLoader->GetTreeH("TRD", kFALSE);
77 if(!LoadHits(t)) return kFALSE;
79 if(fDataType&kTRDDigits){
80 fRunLoader->LoadDigits("TRD", "READ");
81 t = fRunLoader->GetTreeD("TRD", kFALSE);
83 if(!LoadDigits(t)) return kFALSE;
85 if(fDataType&kTRDClusters){
86 fRunLoader->LoadRecPoints("TRD", "READ");
87 t = fRunLoader->GetTreeR("TRD", kFALSE);
89 if(!LoadClusters(t)) return kFALSE;
91 if(fDataType&kTRDTracklets){
92 fRunLoader->LoadTracks("TRD", "READ");
93 t = fRunLoader->GetTreeT("TRD", kFALSE);
95 if(!LoadTracklets(t)) return kFALSE;
103 //______________________________________________________________________________
104 Bool_t AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
106 // Open file in given dir.
108 if(fRunLoader) return kTRUE;
110 fRunLoader = AliRunLoader::GetRunLoader();
111 if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
112 AliConfig::GetDefaultEventFolderName(),"read");
113 if(!fRunLoader) return kFALSE;
115 gAlice = fRunLoader->GetAliRun();
116 if(!gAlice) fRunLoader->LoadgAlice();
117 if(!gAlice) return kFALSE;
119 fFilename = filename;
122 fRunLoader->SetDirName(fDir);
129 ///////////////////////////////////////////////////////////
130 ///////////// AliEveTRDLoaderRaw /////////////////////
131 ///////////////////////////////////////////////////////////
134 //______________________________________________________________________________
135 AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) :
136 AliEveTRDLoader(n, t),
145 //______________________________________________________________________________
146 Bool_t AliEveTRDLoaderRaw::Open(const char *filename, const char *dir)
148 // Open file in gvenn dir.
150 fFilename = filename;
154 if(fRaw) delete fRaw;
155 fRaw = new AliTRDrawData();
157 if(fDataType&kTRDRawRoot){
158 if(fRawRootReader) delete fRawRootReader;
159 fRawRootReader = new AliRawReaderRoot(filename);
160 } else if(fDataType&kTRDRawDate){
161 if(fRawDateReader) delete fRawDateReader;
162 fRawDateReader = new AliRawReaderDate(fDir+fFilename);
164 AliError("No data type was set.");
172 //______________________________________________________________________________
173 Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev)
175 // Go to given event.
177 if(!fChildren.size()){
178 AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
182 static const TEveException kEH("AliEveTRDLoader::GotoEvent ");
183 if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
186 if(ev == fEventOld) return kTRUE;
189 fRawRootReader->RewindEvents();
192 } else checkEnd = kTRUE;
194 do NextEvent(); while(fEventOld != ev && !(checkEnd == kTRUE && fEventOld == 0));
201 //______________________________________________________________________________
202 Bool_t AliEveTRDLoaderRaw::LoadEvent()
206 Info("LoadEvent()", "Loading ...");
208 static const TEveException kEH("AliEveTRDLoader::LoadEvent ");
209 if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
212 fRawRootReader->Reset();
214 AliEveTRDChamber *chmb;
215 AliTRDdigitsManager *dm;
216 dm = fRaw->Raw2Digits(fRawRootReader);
218 for(int idet=0; idet<540; idet++){
219 if(!(chmb=GetChamber(idet))) continue;
220 chmb->LoadDigits(dm);
225 //______________________________________________________________________________
226 Bool_t AliEveTRDLoaderRaw::NextEvent(Bool_t rewindOnEnd)
230 static const TEveException kEH("AliEveTRDLoader::NextEvent ");
231 if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
234 if(fRawRootReader->NextEvent() == kTRUE) ++fEventOld;
236 if(fEventOld == -1) throw(kEH + "no events available.");
238 Warning("NextEvent()", Form("Reached end of stream (event=%d), rewinding to first event.", fEventOld));
239 fRawRootReader->RewindEvents();
240 fRawRootReader->NextEvent();
242 } else throw(kEH + "last event reached.");
249 ///////////////////////////////////////////////////////////
250 //////////// AliEveTRDLoaderSimEditor /////////////////////
251 ///////////////////////////////////////////////////////////
253 //______________________________________________________________________________
254 AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height,
255 UInt_t options, Pixel_t back) :
256 TGedFrame(p, width, height, options | kVerticalFrame, back)
260 ,fCheckedClusters(0x0)
261 ,fCheckedTracklets(0x0)
265 MakeTitle("AliEveTRDLoaderSim");
267 // "Data selector" group frame
268 TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
269 fCheckedHits = new TGCheckButton(fGroupFrame," Hits");
270 fCheckedHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDHits));
271 fGroupFrame->AddFrame(fCheckedHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
273 fCheckedDigits = new TGCheckButton(fGroupFrame," Digits");
274 fCheckedDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDDigits));
275 fGroupFrame->AddFrame(fCheckedDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
277 fCheckedClusters = new TGCheckButton(fGroupFrame," Clusters");
278 fCheckedClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDClusters));
279 fGroupFrame->AddFrame(fCheckedClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
281 fCheckedTracklets = new TGCheckButton(fGroupFrame," Tracklets ");
282 fCheckedTracklets->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDTracklets));
283 fGroupFrame->AddFrame(fCheckedTracklets, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
285 fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
286 // fGroupFrame->Resize(164,116);
287 AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
290 //______________________________________________________________________________
291 void AliEveTRDLoaderSimEditor::SetModel(TObject* obj)
295 fM = dynamic_cast<AliEveTRDLoaderSim*>(obj);
297 Bool_t kRL = (fM->IsDataLinked()) ? kTRUE : kFALSE;
299 fCheckedHits->SetEnabled(kRL);
300 if(kRL) fCheckedHits->SetState(fM->fDataType&AliEveTRDLoader::kTRDHits ? kButtonDown : kButtonUp);
301 fCheckedDigits->SetEnabled(kRL);
302 if(kRL) fCheckedDigits->SetState(fM->fDataType&AliEveTRDLoader::kTRDDigits ? kButtonDown : kButtonUp);
303 fCheckedClusters->SetEnabled(kRL);
304 if(kRL) fCheckedClusters->SetState(fM->fDataType&AliEveTRDLoader::kTRDClusters ? kButtonDown : kButtonUp);
305 fCheckedTracklets->SetEnabled(kRL);
306 if(kRL) fCheckedTracklets->SetState(fM->fDataType&AliEveTRDLoader::kTRDTracklets ? kButtonDown : kButtonUp);
309 //______________________________________________________________________________
310 void AliEveTRDLoaderSimEditor::Toggle(Int_t id)
312 // Toggle given button id.
315 case AliEveTRDLoader::kTRDHits:
316 fM->fDataType |= fCheckedHits->IsDown() ? AliEveTRDLoader::kTRDHits : 0;
318 case AliEveTRDLoader::kTRDDigits:
319 fM->fDataType |= fCheckedDigits->IsDown() ? AliEveTRDLoader::kTRDDigits : 0;
321 case AliEveTRDLoader::kTRDClusters:
322 fM->fDataType |= fCheckedClusters->IsDown() ? AliEveTRDLoader::kTRDClusters : 0;
324 case AliEveTRDLoader::kTRDTracklets:
325 fM->fDataType |= fCheckedTracklets->IsDown() ? AliEveTRDLoader::kTRDTracklets : 0;