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 "AliTRDrawStream.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 // AliTRDrawStream::AllowCorruptedData();
228 // AliTRDrawStream::DisableStackNumberChecker();
229 // AliTRDrawStream::DisableStackLinkNumberChecker();
231 AliTRDrawStream *pinput = new AliTRDrawStream(fRawRootReader);
232 AliTRDrawStream &input = *pinput;
234 // AliInfo(Form("Stream version: %s", input.IsA()->GetName()));
236 AliEveTRDChamber *chmb;
237 AliTRDdigitsManager *dm = new AliTRDdigitsManager();
241 while ((det = input.NextChamber(dm)) >= 0){
242 if(!(chmb=GetChamber(det))) continue;
243 chmb->LoadDigits(dm);
245 dm->RemoveDigits(det);
246 dm->RemoveDictionaries(det);
247 dm->ClearIndexes(det);
260 ///////////////////////////////////////////////////////////
261 //////////// AliEveTRDLoaderSimEditor /////////////////////
262 ///////////////////////////////////////////////////////////
264 //______________________________________________________________________________
265 AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height,
266 UInt_t options, Pixel_t back) :
267 TGedFrame(p, width, height, options | kVerticalFrame, back)
271 ,fCheckedClusters(0x0)
272 ,fCheckedTracklets(0x0)
276 MakeTitle("AliEveTRDLoaderSim");
278 // "Data selector" group frame
279 TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
280 fCheckedHits = new TGCheckButton(fGroupFrame," Hits");
281 fCheckedHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDHits));
282 fGroupFrame->AddFrame(fCheckedHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
284 fCheckedDigits = new TGCheckButton(fGroupFrame," Digits");
285 fCheckedDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDDigits));
286 fGroupFrame->AddFrame(fCheckedDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
288 fCheckedClusters = new TGCheckButton(fGroupFrame," Clusters");
289 fCheckedClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDClusters));
290 fGroupFrame->AddFrame(fCheckedClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
292 fCheckedTracklets = new TGCheckButton(fGroupFrame," Tracklets ");
293 fCheckedTracklets->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDTracklets));
294 fGroupFrame->AddFrame(fCheckedTracklets, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
296 fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
297 // fGroupFrame->Resize(164,116);
298 AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
301 //______________________________________________________________________________
302 void AliEveTRDLoaderSimEditor::SetModel(TObject* obj)
306 if(!(fM = dynamic_cast<AliEveTRDLoaderSim*>(obj))) return;
308 Bool_t kRL = (fM->IsDataLinked()) ? kTRUE : kFALSE;
310 fCheckedHits->SetEnabled(kRL);
311 if(kRL) fCheckedHits->SetState(fM->fDataType&AliEveTRDLoader::kTRDHits ? kButtonDown : kButtonUp);
312 fCheckedDigits->SetEnabled(kRL);
313 if(kRL) fCheckedDigits->SetState(fM->fDataType&AliEveTRDLoader::kTRDDigits ? kButtonDown : kButtonUp);
314 fCheckedClusters->SetEnabled(kRL);
315 if(kRL) fCheckedClusters->SetState(fM->fDataType&AliEveTRDLoader::kTRDClusters ? kButtonDown : kButtonUp);
316 fCheckedTracklets->SetEnabled(kRL);
317 if(kRL) fCheckedTracklets->SetState(fM->fDataType&AliEveTRDLoader::kTRDTracklets ? kButtonDown : kButtonUp);
320 //______________________________________________________________________________
321 void AliEveTRDLoaderSimEditor::Toggle(Int_t id)
323 // Toggle given button id.
326 case AliEveTRDLoader::kTRDHits:
327 fM->fDataType |= fCheckedHits->IsDown() ? AliEveTRDLoader::kTRDHits : 0;
329 case AliEveTRDLoader::kTRDDigits:
330 fM->fDataType |= fCheckedDigits->IsDown() ? AliEveTRDLoader::kTRDDigits : 0;
332 case AliEveTRDLoader::kTRDClusters:
333 fM->fDataType |= fCheckedClusters->IsDown() ? AliEveTRDLoader::kTRDClusters : 0;
335 case AliEveTRDLoader::kTRDTracklets:
336 fM->fDataType |= fCheckedTracklets->IsDown() ? AliEveTRDLoader::kTRDTracklets : 0;