]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveTRDLoaderImp.cxx
fix digits vizualization
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDLoaderImp.cxx
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
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  **************************************************************************/
9
10 #include "AliEveTRDLoaderImp.h"
11 #include "AliEveTRDModuleImp.h"
12 #include "EveBase/AliEveEventManager.h"
13
14 #include <TEveManager.h>
15
16 //#include "TFile.h"
17 #include "TTree.h"
18
19 #include <TGButton.h>
20
21 #include "AliLog.h"
22 #include "AliRun.h"
23 #include "AliRunLoader.h"
24 //#include "AliLoader.h"
25 #include "AliTRDrawData.h"
26 #include "AliTRDrawStreamTB.h"
27 #include "AliTRDrawStreamBase.h"
28 #include "AliTRDdigitsManager.h"
29 #include "AliRawReaderRoot.h"
30 #include "AliRawReaderDate.h"
31
32 ClassImp(AliEveTRDLoaderSim)
33 ClassImp(AliEveTRDLoaderRaw)
34 ClassImp(AliEveTRDLoaderSimEditor)
35 //ClassImp(TRDLoaderRawEditor)
36
37 ///////////////////////////////////////////////////////////
38 /////////////    AliEveTRDLoaderSim  /////////////////////
39 ///////////////////////////////////////////////////////////
40
41
42 //______________________________________________________________________________
43 AliEveTRDLoaderSim::AliEveTRDLoaderSim(const Text_t* n, const Text_t* t) :
44   AliEveTRDLoader(n, t)
45   ,fRunLoader(0x0)
46 {
47   // Constructor.
48   if(gAlice && (fRunLoader = AliEveEventManager::AssertRunLoader())) SetDataLinked();
49 }
50
51 //______________________________________________________________________________
52 Bool_t  AliEveTRDLoaderSim::GoToEvent(int ev)
53 {
54   // Go to given event.
55
56   if(!fChildren.size()){
57     AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
58     return kFALSE;
59   }
60   if(!fDataType){
61     AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
62     return kFALSE;
63   }
64
65   fEvent = ev;
66
67   if(!fRunLoader){
68     AliError("RunLoader not initialized.");
69     return kFALSE;
70   }
71   fRunLoader->UnloadAll("TRD");
72   Unload();
73
74   if(fRunLoader->GetEvent(ev)) return kFALSE;
75   TTree *t = 0;
76   if(fDataType&kTRDHits){
77     fRunLoader->LoadHits("TRD", "READ");
78     t = fRunLoader->GetTreeH("TRD", kFALSE);
79     if(!t) return kFALSE;
80     if(!LoadHits(t)) return kFALSE;
81   }
82   if(fDataType&kTRDDigits){
83     fRunLoader->LoadDigits("TRD", "READ");
84     t = fRunLoader->GetTreeD("TRD", kFALSE);
85     if(!t) return kFALSE;
86     if(!LoadDigits(t)) return kFALSE;
87   }
88   if(fDataType&kTRDClusters){
89     fRunLoader->LoadRecPoints("TRD", "READ");
90     t = fRunLoader->GetTreeR("TRD", kFALSE);
91     if(!t) return kFALSE;
92     if(!LoadClusters(t)) return kFALSE;
93   }
94   if(fDataType&kTRDTracklets){
95     fRunLoader->LoadTracks("TRD", "READ");
96     t = fRunLoader->GetTreeT("TRD", kFALSE);
97     if(!t) return kFALSE;
98     if(!LoadTracklets(t)) return kFALSE;
99   }
100
101   gEve->Redraw3D();
102   return kTRUE;
103 }
104
105
106 //______________________________________________________________________________
107 Bool_t  AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
108 {
109   // Open file in given dir.
110
111   if(fRunLoader) return kTRUE;
112   
113   fRunLoader = AliRunLoader::GetRunLoader();
114   if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
115          AliConfig::GetDefaultEventFolderName(),"read");
116   if(!fRunLoader) return kFALSE;
117
118   gAlice = fRunLoader->GetAliRun();
119   if(!gAlice) fRunLoader->LoadgAlice();
120   if(!gAlice) return kFALSE;
121  
122   fFilename = filename;
123   fDir = dir;
124   fDir += "/";
125   fRunLoader->SetDirName(fDir);
126
127   SetDataLinked();
128   return kTRUE;
129 }
130
131
132 ///////////////////////////////////////////////////////////
133 /////////////   AliEveTRDLoaderRaw    /////////////////////
134 ///////////////////////////////////////////////////////////
135
136
137 //______________________________________________________________________________
138 AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) :
139   AliEveTRDLoader(n, t)
140   ,fRawDateReader (0x0)
141   ,fRawRootReader (0x0)
142   ,fRaw           (0x0)
143   ,fEventCnt(-1)
144 {
145   // Constructor.
146 }
147
148 //______________________________________________________________________________
149 Bool_t  AliEveTRDLoaderRaw::Open(const char *filename, const char *dir)
150 {
151   // Open file in gvenn dir.
152
153   fFilename = filename;
154   fDir = dir;
155   fDir += "/";
156
157   if(fRaw) delete fRaw;
158   fRaw = new AliTRDrawData();
159
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);
166   } else {
167     AliError("No data type was set.");
168     return kFALSE;
169   }
170   SetDataLinked();
171   return kTRUE;
172 }
173
174
175 //______________________________________________________________________________
176 Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev)
177 {
178   // Go to given event.
179
180   //AliInfo(Form("Event %d %d %d", ev, fEvent, fEventCnt));
181
182
183   if(!fChildren.size()){
184     AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
185     return kFALSE;
186   }
187
188   static const TEveException kEH("AliEveTRDLoader::GotoEvent ");
189   if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
190
191   fEvent = ev;
192   if(ev == fEventCnt) return kTRUE;
193   if(ev < fEventCnt) {
194     fRawRootReader->RewindEvents();
195     fEventCnt = -1;
196   }
197
198   Bool_t FOUND = kFALSE;
199   while(fRawRootReader->NextEvent()){ 
200     fEventCnt++;
201     if(fEventCnt == ev){
202       FOUND = kTRUE;
203       break;
204     }  
205   }
206   if(!FOUND) return kFALSE;
207   
208   LoadEvent();
209   gEve->Redraw3D();
210
211   return kTRUE;
212 }
213
214
215 //______________________________________________________________________________
216 Bool_t AliEveTRDLoaderRaw::LoadEvent()
217 {
218   // Load event.
219   AliInfo("Loading ...");
220
221   static const TEveException kEH("AliEveTRDLoader::LoadEvent ");
222   if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
223
224
225   fRawRootReader->Reset();
226
227   AliTRDrawStreamBase::SetRawStreamVersion(AliTRDrawStreamBase::kTRDrealStream);
228   AliTRDrawStreamTB::AllowCorruptedData();
229   AliTRDrawStreamTB::DisableStackNumberChecker();
230   AliTRDrawStreamTB::DisableStackLinkNumberChecker();
231
232   AliTRDrawStreamBase *pinput = AliTRDrawStreamBase::GetRawStream(fRawRootReader);
233   AliTRDrawStreamBase &input = *pinput;
234
235  // AliInfo(Form("Stream version: %s", input.IsA()->GetName()));
236
237   AliEveTRDChamber *chmb;
238   AliTRDdigitsManager *dm = new AliTRDdigitsManager();
239   dm->CreateArrays();
240
241   Int_t det    = 0;
242   while ((det = input.NextChamber(dm)) >= 0){
243     if(!(chmb=GetChamber(det))) continue;
244     chmb->LoadDigits(dm);
245
246     dm->RemoveDigits(det);
247     dm->RemoveDictionaries(det);
248     dm->ClearIndexes(det);
249   }
250
251   delete dm;
252   dm = NULL;
253
254   delete pinput;
255   pinput = NULL;
256
257
258   return kTRUE;
259 }
260
261
262
263 ///////////////////////////////////////////////////////////
264 //////////// AliEveTRDLoaderSimEditor /////////////////////
265 ///////////////////////////////////////////////////////////
266
267 //______________________________________________________________________________
268 AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height,
269                                                    UInt_t options, Pixel_t back) :
270   TGedFrame(p, width, height, options | kVerticalFrame, back)
271   ,fM(0x0)
272   ,fCheckedHits(0x0)
273   ,fCheckedDigits(0x0)
274   ,fCheckedClusters(0x0)
275   ,fCheckedTracklets(0x0)
276 {
277   // Constructor.
278
279   MakeTitle("AliEveTRDLoaderSim");
280
281   // "Data selector" group frame
282   TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
283   fCheckedHits = new TGCheckButton(fGroupFrame,"  Hits");
284   fCheckedHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDHits));
285   fGroupFrame->AddFrame(fCheckedHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
286
287   fCheckedDigits = new TGCheckButton(fGroupFrame,"  Digits");
288   fCheckedDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDDigits));
289   fGroupFrame->AddFrame(fCheckedDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
290
291   fCheckedClusters = new TGCheckButton(fGroupFrame,"  Clusters");
292   fCheckedClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDClusters));
293   fGroupFrame->AddFrame(fCheckedClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
294
295   fCheckedTracklets = new TGCheckButton(fGroupFrame,"  Tracklets ");
296   fCheckedTracklets->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, Form("Toggle(=%d)", (Int_t)AliEveTRDLoader::kTRDTracklets));
297   fGroupFrame->AddFrame(fCheckedTracklets, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
298
299   fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
300   //    fGroupFrame->Resize(164,116);
301   AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
302 }
303
304 //______________________________________________________________________________
305 void AliEveTRDLoaderSimEditor::SetModel(TObject* obj)
306 {
307   // Set model object.
308
309   fM = dynamic_cast<AliEveTRDLoaderSim*>(obj);
310
311   Bool_t kRL   = (fM->IsDataLinked()) ? kTRUE : kFALSE;
312
313   fCheckedHits->SetEnabled(kRL);
314   if(kRL) fCheckedHits->SetState(fM->fDataType&AliEveTRDLoader::kTRDHits ? kButtonDown : kButtonUp);
315   fCheckedDigits->SetEnabled(kRL);
316   if(kRL) fCheckedDigits->SetState(fM->fDataType&AliEveTRDLoader::kTRDDigits ? kButtonDown : kButtonUp);
317   fCheckedClusters->SetEnabled(kRL);
318   if(kRL) fCheckedClusters->SetState(fM->fDataType&AliEveTRDLoader::kTRDClusters ? kButtonDown : kButtonUp);
319   fCheckedTracklets->SetEnabled(kRL);
320   if(kRL) fCheckedTracklets->SetState(fM->fDataType&AliEveTRDLoader::kTRDTracklets ? kButtonDown : kButtonUp);
321 }
322
323 //______________________________________________________________________________
324 void AliEveTRDLoaderSimEditor::Toggle(Int_t id)
325 {
326   // Toggle given button id.
327
328   switch(id){
329   case AliEveTRDLoader::kTRDHits:
330     fM->fDataType |= fCheckedHits->IsDown() ? AliEveTRDLoader::kTRDHits : 0;
331     break;
332   case AliEveTRDLoader::kTRDDigits:
333     fM->fDataType |= fCheckedDigits->IsDown() ? AliEveTRDLoader::kTRDDigits : 0;
334     break;
335   case AliEveTRDLoader::kTRDClusters:
336     fM->fDataType |= fCheckedClusters->IsDown() ? AliEveTRDLoader::kTRDClusters : 0;
337     break;
338   case AliEveTRDLoader::kTRDTracklets:
339     fM->fDataType |= fCheckedTracklets->IsDown() ? AliEveTRDLoader::kTRDTracklets : 0;
340     break;
341   }
342 }