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 "AliTRDrawStream.h"
27 #include "AliTRDrawStreamBase.h"
28 #include "AliTRDdigitsManager.h"
29 #include "AliRawReaderRoot.h"
30 #include "AliRawReaderDate.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) :
48 if(gAlice && (fRunLoader = AliEveEventManager::AssertRunLoader())) SetDataLinked();
51 //______________________________________________________________________________
52 Bool_t AliEveTRDLoaderSim::GoToEvent(int ev)
56 if(!fChildren.size()){
57 AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
61 AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
68 AliError("RunLoader not initialized.");
71 fRunLoader->UnloadAll("TRD");
74 if(fRunLoader->GetEvent(ev)) return kFALSE;
76 if(fDataType&kTRDHits){
77 fRunLoader->LoadHits("TRD", "READ");
78 t = fRunLoader->GetTreeH("TRD", kFALSE);
80 if(!LoadHits(t)) return kFALSE;
82 if(fDataType&kTRDDigits){
83 fRunLoader->LoadDigits("TRD", "READ");
84 t = fRunLoader->GetTreeD("TRD", kFALSE);
86 if(!LoadDigits(t)) return kFALSE;
88 if(fDataType&kTRDClusters){
89 fRunLoader->LoadRecPoints("TRD", "READ");
90 t = fRunLoader->GetTreeR("TRD", kFALSE);
92 if(!LoadClusters(t)) return kFALSE;
94 if(fDataType&kTRDTracklets){
95 fRunLoader->LoadTracks("TRD", "READ");
96 t = fRunLoader->GetTreeT("TRD", kFALSE);
98 if(!LoadTracklets(t)) return kFALSE;
106 //______________________________________________________________________________
107 Bool_t AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
109 // Open file in given dir.
111 if(fRunLoader) return kTRUE;
113 fRunLoader = AliRunLoader::Instance();
114 if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
115 AliConfig::GetDefaultEventFolderName(),"read");
116 if(!fRunLoader) return kFALSE;
118 gAlice = fRunLoader->GetAliRun();
119 if(!gAlice) fRunLoader->LoadgAlice();
120 if(!gAlice) return kFALSE;
122 fFilename = filename;
125 fRunLoader->SetDirName(fDir);
132 ///////////////////////////////////////////////////////////
133 ///////////// AliEveTRDLoaderRaw /////////////////////
134 ///////////////////////////////////////////////////////////
137 //______________________________________________________________________________
138 AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) :
139 AliEveTRDLoader(n, t)
140 ,fRawDateReader (0x0)
141 ,fRawRootReader (0x0)
148 //______________________________________________________________________________
149 Bool_t AliEveTRDLoaderRaw::Open(const char *filename, const char *dir)
151 // Open file in gvenn dir.
153 fFilename = filename;
157 if(fRaw) delete fRaw;
158 fRaw = new AliTRDrawData();
160 if(fDataType&kTRDRawRoot){
161 if(fRawRootReader) delete fRawRootReader;
162 fRawRootReader = new AliRawReaderRoot(filename);
163 } else if(fDataType&kTRDRawDate){
164 if(fRawDateReader) delete fRawDateReader;
165 fRawDateReader = new AliRawReaderDate(fDir+fFilename);
167 AliError("No data type was set.");
175 //______________________________________________________________________________
176 Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev)
178 // Go to given event.
180 //AliInfo(Form("Event %d %d %d", ev, fEvent, fEventCnt));
183 if(!fChildren.size()){
184 AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
188 static const TEveException kEH("AliEveTRDLoader::GotoEvent ");
189 if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
192 if(ev == fEventCnt) return kTRUE;
194 fRawRootReader->RewindEvents();
198 Bool_t FOUND = kFALSE;
199 while(fRawRootReader->NextEvent()){
206 if(!FOUND) return kFALSE;
215 //______________________________________________________________________________
216 Bool_t AliEveTRDLoaderRaw::LoadEvent()
219 AliInfo("Loading ...");
221 static const TEveException kEH("AliEveTRDLoader::LoadEvent ");
222 if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
225 fRawRootReader->Reset();
226 fRawRootReader->SelectEquipment(0, 1024, 1041);
227 fRawRootReader->Select("TRD");
229 AliTRDrawStreamBase::SetRawStreamVersion(AliTRDrawStreamBase::kTRDrealStream);
230 AliTRDrawStream::AllowCorruptedData();
231 AliTRDrawStream::DisableStackNumberChecker();
232 AliTRDrawStream::DisableStackLinkNumberChecker();
234 AliTRDrawStreamBase *pinput =
235 AliTRDrawStreamBase::GetRawStream(fRawRootReader);
236 AliTRDrawStreamBase &input = *pinput;
238 // AliInfo(Form("Stream version: %s", input.IsA()->GetName()));
240 AliEveTRDChamber *chmb;
241 AliTRDdigitsManager *dm = new AliTRDdigitsManager();
245 while ((det = input.NextChamber(dm)) >= 0){
246 if(!(chmb=GetChamber(det))) continue;
247 chmb->LoadDigits(dm);
249 dm->RemoveDigits(det);
250 dm->RemoveDictionaries(det);
251 dm->ClearIndexes(det);
264 ///////////////////////////////////////////////////////////
265 //////////// AliEveTRDLoaderSimEditor /////////////////////
266 ///////////////////////////////////////////////////////////
268 //______________________________________________________________________________
269 AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height,
270 UInt_t options, Pixel_t back) :
271 TGedFrame(p, width, height, options | kVerticalFrame, back)
275 ,fCheckedClusters(0x0)
276 ,fCheckedTracklets(0x0)
280 MakeTitle("AliEveTRDLoaderSim");
282 // "Data selector" group frame
283 TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
284 fCheckedHits = new TGCheckButton(fGroupFrame," Hits");
285 fCheckedHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDHits));
286 fGroupFrame->AddFrame(fCheckedHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
288 fCheckedDigits = new TGCheckButton(fGroupFrame," Digits");
289 fCheckedDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDDigits));
290 fGroupFrame->AddFrame(fCheckedDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
292 fCheckedClusters = new TGCheckButton(fGroupFrame," Clusters");
293 fCheckedClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDClusters));
294 fGroupFrame->AddFrame(fCheckedClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
296 fCheckedTracklets = new TGCheckButton(fGroupFrame," Tracklets ");
297 fCheckedTracklets->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDTracklets));
298 fGroupFrame->AddFrame(fCheckedTracklets, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
300 fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
301 // fGroupFrame->Resize(164,116);
302 AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
305 //______________________________________________________________________________
306 void AliEveTRDLoaderSimEditor::SetModel(TObject* obj)
310 fM = dynamic_cast<AliEveTRDLoaderSim*>(obj);
312 Bool_t kRL = (fM->IsDataLinked()) ? kTRUE : kFALSE;
314 fCheckedHits->SetEnabled(kRL);
315 if(kRL) fCheckedHits->SetState(fM->fDataType&AliEveTRDLoader::kTRDHits ? kButtonDown : kButtonUp);
316 fCheckedDigits->SetEnabled(kRL);
317 if(kRL) fCheckedDigits->SetState(fM->fDataType&AliEveTRDLoader::kTRDDigits ? kButtonDown : kButtonUp);
318 fCheckedClusters->SetEnabled(kRL);
319 if(kRL) fCheckedClusters->SetState(fM->fDataType&AliEveTRDLoader::kTRDClusters ? kButtonDown : kButtonUp);
320 fCheckedTracklets->SetEnabled(kRL);
321 if(kRL) fCheckedTracklets->SetState(fM->fDataType&AliEveTRDLoader::kTRDTracklets ? kButtonDown : kButtonUp);
324 //______________________________________________________________________________
325 void AliEveTRDLoaderSimEditor::Toggle(Int_t id)
327 // Toggle given button id.
330 case AliEveTRDLoader::kTRDHits:
331 fM->fDataType |= fCheckedHits->IsDown() ? AliEveTRDLoader::kTRDHits : 0;
333 case AliEveTRDLoader::kTRDDigits:
334 fM->fDataType |= fCheckedDigits->IsDown() ? AliEveTRDLoader::kTRDDigits : 0;
336 case AliEveTRDLoader::kTRDClusters:
337 fM->fDataType |= fCheckedClusters->IsDown() ? AliEveTRDLoader::kTRDClusters : 0;
339 case AliEveTRDLoader::kTRDTracklets:
340 fM->fDataType |= fCheckedTracklets->IsDown() ? AliEveTRDLoader::kTRDTracklets : 0;