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 "AliTRDrawData.h"
25 #include "AliTRDrawStreamBase.h"
26 #include "AliTRDdigitsManager.h"
27 #include "AliRawReaderRoot.h"
28 #include "AliRawReaderDate.h"
30 ClassImp(AliEveTRDLoaderSim)
31 ClassImp(AliEveTRDLoaderRaw)
32 ClassImp(AliEveTRDLoaderSimEditor)
33 //ClassImp(TRDLoaderRawEditor)
35 ///////////////////////////////////////////////////////////
36 ///////////// AliEveTRDLoaderSim /////////////////////
37 ///////////////////////////////////////////////////////////
40 //______________________________________________________________________________
41 AliEveTRDLoaderSim::AliEveTRDLoaderSim(const Text_t* n, const Text_t* t) :
46 if(gAlice && (fRunLoader = AliEveEventManager::AssertRunLoader())) SetDataLinked();
49 //______________________________________________________________________________
50 Bool_t AliEveTRDLoaderSim::GoToEvent(int ev)
54 if(!fChildren.size()){
55 AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
59 AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
66 AliError("RunLoader not initialized.");
69 fRunLoader->UnloadAll("TRD");
72 if(fRunLoader->GetEvent(ev)) return kFALSE;
74 if(fDataType&kTRDHits){
75 fRunLoader->LoadHits("TRD", "READ");
76 t = fRunLoader->GetTreeH("TRD", kFALSE);
78 if(!LoadHits(t)) return kFALSE;
80 if(fDataType&kTRDDigits){
81 fRunLoader->LoadDigits("TRD", "READ");
82 t = fRunLoader->GetTreeD("TRD", kFALSE);
84 if(!LoadDigits(t)) return kFALSE;
86 if(fDataType&kTRDClusters){
87 fRunLoader->LoadRecPoints("TRD", "READ");
88 t = fRunLoader->GetTreeR("TRD", kFALSE);
90 if(!LoadClusters(t)) return kFALSE;
92 if(fDataType&kTRDTracklets){
93 fRunLoader->LoadTracks("TRD", "READ");
94 t = fRunLoader->GetTreeT("TRD", kFALSE);
96 if(!LoadTracklets(t)) return kFALSE;
104 //______________________________________________________________________________
105 Bool_t AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
107 // Open file in given dir.
109 if(fRunLoader) return kTRUE;
111 fRunLoader = AliRunLoader::Instance();
112 if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
113 AliConfig::GetDefaultEventFolderName(),"read");
114 if(!fRunLoader) return kFALSE;
116 gAlice = fRunLoader->GetAliRun();
117 if(!gAlice) fRunLoader->LoadgAlice();
118 if(!gAlice) return kFALSE;
120 fFilename = filename;
123 fRunLoader->SetDirName(fDir);
130 ///////////////////////////////////////////////////////////
131 ///////////// AliEveTRDLoaderRaw /////////////////////
132 ///////////////////////////////////////////////////////////
135 //______________________________________________________________________________
136 AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) :
137 AliEveTRDLoader(n, t)
138 ,fRawDateReader (0x0)
139 ,fRawRootReader (0x0)
146 //______________________________________________________________________________
147 Bool_t AliEveTRDLoaderRaw::Open(const char *filename, const char *dir)
149 // Open file in gvenn dir.
151 fFilename = filename;
155 if(fRaw) delete fRaw;
156 fRaw = new AliTRDrawData();
158 if(fDataType&kTRDRawRoot){
159 if(fRawRootReader) delete fRawRootReader;
160 fRawRootReader = new AliRawReaderRoot(filename);
161 } else if(fDataType&kTRDRawDate){
162 if(fRawDateReader) delete fRawDateReader;
163 fRawDateReader = new AliRawReaderDate(fDir+fFilename);
165 AliError("No data type was set.");
173 //______________________________________________________________________________
174 Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev)
176 // Go to given event.
178 //AliInfo(Form("Event %d %d %d", ev, fEvent, fEventCnt));
181 if(!fChildren.size()){
182 AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
186 static const TEveException kEH("AliEveTRDLoader::GotoEvent ");
187 if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
190 if(ev == fEventCnt) return kTRUE;
192 fRawRootReader->RewindEvents();
196 Bool_t FOUND = kFALSE;
197 while(fRawRootReader->NextEvent()){
204 if(!FOUND) return kFALSE;
213 //______________________________________________________________________________
214 Bool_t AliEveTRDLoaderRaw::LoadEvent()
217 AliInfo("Loading ...");
219 static const TEveException kEH("AliEveTRDLoader::LoadEvent ");
220 if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
223 fRawRootReader->Reset();
224 fRawRootReader->SelectEquipment(0, 1024, 1041);
225 fRawRootReader->Select("TRD");
227 AliTRDrawStreamBase::SetRawStreamVersion(AliTRDrawStreamBase::kTRDfastStream);
228 // AliTRDrawStream::AllowCorruptedData();
229 // AliTRDrawStream::DisableStackNumberChecker();
230 // AliTRDrawStream::DisableStackLinkNumberChecker();
232 AliTRDrawStreamBase *pinput =
233 AliTRDrawStreamBase::GetRawStream(fRawRootReader);
234 AliTRDrawStreamBase &input = *pinput;
236 // AliInfo(Form("Stream version: %s", input.IsA()->GetName()));
238 AliEveTRDChamber *chmb;
239 AliTRDdigitsManager *dm = new AliTRDdigitsManager();
243 while ((det = input.NextChamber(dm)) >= 0){
244 if(!(chmb=GetChamber(det))) continue;
245 chmb->LoadDigits(dm);
247 dm->RemoveDigits(det);
248 dm->RemoveDictionaries(det);
249 dm->ClearIndexes(det);
262 ///////////////////////////////////////////////////////////
263 //////////// AliEveTRDLoaderSimEditor /////////////////////
264 ///////////////////////////////////////////////////////////
266 //______________________________________________________________________________
267 AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height,
268 UInt_t options, Pixel_t back) :
269 TGedFrame(p, width, height, options | kVerticalFrame, back)
273 ,fCheckedClusters(0x0)
274 ,fCheckedTracklets(0x0)
278 MakeTitle("AliEveTRDLoaderSim");
280 // "Data selector" group frame
281 TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
282 fCheckedHits = new TGCheckButton(fGroupFrame," Hits");
283 fCheckedHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDHits));
284 fGroupFrame->AddFrame(fCheckedHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
286 fCheckedDigits = new TGCheckButton(fGroupFrame," Digits");
287 fCheckedDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDDigits));
288 fGroupFrame->AddFrame(fCheckedDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
290 fCheckedClusters = new TGCheckButton(fGroupFrame," Clusters");
291 fCheckedClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDClusters));
292 fGroupFrame->AddFrame(fCheckedClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
294 fCheckedTracklets = new TGCheckButton(fGroupFrame," Tracklets ");
295 fCheckedTracklets->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDTracklets));
296 fGroupFrame->AddFrame(fCheckedTracklets, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
298 fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
299 // fGroupFrame->Resize(164,116);
300 AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
303 //______________________________________________________________________________
304 void AliEveTRDLoaderSimEditor::SetModel(TObject* obj)
308 if(!(fM = dynamic_cast<AliEveTRDLoaderSim*>(obj))) return;
310 Bool_t kRL = (fM->IsDataLinked()) ? kTRUE : kFALSE;
312 fCheckedHits->SetEnabled(kRL);
313 if(kRL) fCheckedHits->SetState(fM->fDataType&AliEveTRDLoader::kTRDHits ? kButtonDown : kButtonUp);
314 fCheckedDigits->SetEnabled(kRL);
315 if(kRL) fCheckedDigits->SetState(fM->fDataType&AliEveTRDLoader::kTRDDigits ? kButtonDown : kButtonUp);
316 fCheckedClusters->SetEnabled(kRL);
317 if(kRL) fCheckedClusters->SetState(fM->fDataType&AliEveTRDLoader::kTRDClusters ? kButtonDown : kButtonUp);
318 fCheckedTracklets->SetEnabled(kRL);
319 if(kRL) fCheckedTracklets->SetState(fM->fDataType&AliEveTRDLoader::kTRDTracklets ? kButtonDown : kButtonUp);
322 //______________________________________________________________________________
323 void AliEveTRDLoaderSimEditor::Toggle(Int_t id)
325 // Toggle given button id.
328 case AliEveTRDLoader::kTRDHits:
329 fM->fDataType |= fCheckedHits->IsDown() ? AliEveTRDLoader::kTRDHits : 0;
331 case AliEveTRDLoader::kTRDDigits:
332 fM->fDataType |= fCheckedDigits->IsDown() ? AliEveTRDLoader::kTRDDigits : 0;
334 case AliEveTRDLoader::kTRDClusters:
335 fM->fDataType |= fCheckedClusters->IsDown() ? AliEveTRDLoader::kTRDClusters : 0;
337 case AliEveTRDLoader::kTRDTracklets:
338 fM->fDataType |= fCheckedTracklets->IsDown() ? AliEveTRDLoader::kTRDTracklets : 0;