]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveTRDLoaderImp.cxx
TOF Raw data and clusters visualization
[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
13 #include <TEveManager.h>
14
15 #include "TFile.h"
16 #include "TTree.h"
17
18 #include <TGButton.h>
19
20 #include "AliLog.h"
21 #include "AliRun.h"
22 #include "AliRunLoader.h"
23 #include "AliLoader.h"
24 #include "AliTRDrawData.h"
25 #include "AliRawReaderRoot.h"
26 #include "AliRawReaderDate.h"
27
28 #include "AliTRDv1.h"
29 #include "AliTRDhit.h"
30 #include "AliTRDdigitsManager.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(0)
46 {}
47
48 //______________________________________________________________________________
49 AliEveTRDLoaderSim::~AliEveTRDLoaderSim()
50 {}
51
52 //______________________________________________________________________________
53 Bool_t  AliEveTRDLoaderSim::GoToEvent(int ev)
54 {
55   if(!fChildren.size()){
56     AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
57     return kFALSE;
58   }
59   if(!fLoadHits && !fLoadDigits && !fLoadClusters && !fLoadTracks){
60     AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
61     return kFALSE;
62   }
63
64   fEvent = ev;
65
66   if(!fRunLoader){
67     AliError("RunLoader not initialized.");
68     return kFALSE;
69   }
70   fRunLoader->UnloadAll("TRD");
71   Unload();
72
73   if(fRunLoader->GetEvent(ev)) return kFALSE;
74   TTree *t = 0;
75   if(fLoadHits){
76     fRunLoader->LoadHits("TRD", "READ");
77     t = fRunLoader->GetTreeH("TRD", kFALSE);
78     if(!t) return kFALSE;
79     fTRD->SetTreeAddress();
80     if(!LoadHits(t)) return kFALSE;
81   }
82   if(fLoadDigits){
83     fRunLoader->LoadDigits("TRD", "READ");
84     t = fRunLoader->GetTreeD("TRD", kFALSE);
85     if(!t) return kFALSE;
86     fTRD->SetTreeAddress();
87     if(!LoadDigits(t)) return kFALSE;
88   }
89   if(fLoadClusters){
90     fRunLoader->LoadRecPoints("TRD", "READ");
91     t = fRunLoader->GetTreeR("TRD", kFALSE);
92     if(!t) return kFALSE;
93     if(!LoadClusters(t)) return kFALSE;
94   }
95   if(fLoadTracks){
96     fRunLoader->LoadTracks("TRD", "READ");
97     t = fRunLoader->GetTreeT("TRD", kFALSE);
98     if(!t) return kFALSE;
99     if(!LoadTracklets(t)) return kFALSE;
100   }
101
102   gEve->Redraw3D();
103   return kTRUE;
104 }
105
106
107 //______________________________________________________________________________
108 Bool_t  AliEveTRDLoaderSim::LoadHits(TTree *tH)
109 {
110   Info("LoadHits()", "Loading ...");
111   if(!fChildren.size()) return kTRUE;
112
113   AliEveTRDChamber *chmb = 0x0;
114   AliTRDhit *hit = 0x0;
115   Int_t d;
116   for(int iTrack=0; iTrack<tH->GetEntries(); iTrack++){
117     gAlice->ResetHits();
118     if(!tH->GetEvent(iTrack)) continue;
119     hit = (AliTRDhit*)fTRD->FirstHit(-1);
120     if(!hit) continue;
121     d = hit->GetDetector();
122     chmb = GetChamber(d);
123     while(hit){
124       if(d != hit->GetDetector()){
125         d = hit->GetDetector();
126         chmb = GetChamber(d);
127       }
128       if(chmb) chmb->AddHit(hit);
129       hit = (AliTRDhit*)fTRD->NextHit();
130     }
131   }
132   return kTRUE;
133 }
134
135 //______________________________________________________________________________
136 Bool_t  AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
137 {
138   //Info("Open()", "");
139
140
141   fFilename = filename;
142   fDir = dir;
143   fDir += "/";
144
145   fRunLoader = AliRunLoader::GetRunLoader();
146   if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
147                                                   AliConfig::GetDefaultEventFolderName(),"read");
148   if(!fRunLoader){
149     AliError("Couldn't find run loader");
150     return kFALSE;
151   }
152   fRunLoader->SetDirName(fDir);
153
154   gAlice = fRunLoader->GetAliRun();
155   if(!gAlice) fRunLoader->LoadgAlice();
156   if(!gAlice){
157     AliError("Couldn't find gAlice object");
158     return kFALSE;
159   }
160   fTRD = (AliTRDv1*)gAlice->GetDetector("TRD");
161   if(!fTRD){
162     AliError("Couldn't find TRD");
163     return kFALSE;
164   }
165
166   return kTRUE;
167 }
168
169
170
171 ///////////////////////////////////////////////////////////
172 /////////////   AliEveTRDLoaderRaw    /////////////////////
173 ///////////////////////////////////////////////////////////
174
175
176 //______________________________________________________________________________
177 AliEveTRDLoaderRaw::AliEveTRDLoaderRaw(const Text_t* n, const Text_t* t) :
178   AliEveTRDLoader(n, t),
179   fRawDateReader (0),
180   fRawRootReader (0),
181   fRaw           (0),
182   fDataRoot      (kTRUE),
183   fEventOld      (-1)
184 {}
185
186 //______________________________________________________________________________
187 AliEveTRDLoaderRaw::~AliEveTRDLoaderRaw()
188 {}
189
190
191 //______________________________________________________________________________
192 Bool_t  AliEveTRDLoaderRaw::Open(const char *filename, const char *dir)
193 {
194   //    Info("Open()", Form("Open %s/%s", dir, filename));
195   fFilename = filename;
196   fDir = dir;
197   fDir += "/";
198
199
200   if(fRaw) delete fRaw;
201   fRaw = new AliTRDrawData();
202
203   if(fDataRoot){
204     if(fRawRootReader) delete fRawRootReader;
205     fRawRootReader = new AliRawReaderRoot(filename);
206   } else {
207     if(fRawDateReader) delete fRawDateReader;
208     fRawDateReader = new AliRawReaderDate(fDir+fFilename);
209   }
210
211   return kTRUE;
212 }
213
214 //______________________________________________________________________________
215 void AliEveTRDLoaderRaw::SetDataType(TRDDataTypes type)
216 {
217   fDataRoot = (type == kRawRoot) ? kTRUE : kFALSE;
218 }
219
220 //______________________________________________________________________________
221 Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev)
222 {
223   if(!fChildren.size()){
224     AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
225     return kFALSE;
226   }
227
228   static const TEveException eH("AliEveTRDLoader::GotoEvent ");
229   if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
230
231
232   if(ev == fEventOld) return kTRUE;
233   Bool_t checkEnd;
234   if(ev < fEventOld) {
235     fRawRootReader->RewindEvents();
236     fEventOld = -1;
237     checkEnd = kFALSE;
238   } else checkEnd = kTRUE;
239
240   do NextEvent(); while(fEventOld != ev && !(checkEnd == kTRUE && fEventOld == 0));
241   LoadEvent();
242   gEve->Redraw3D();
243   //gEve->EnableRedraw();
244   return kTRUE;
245 }
246
247 //______________________________________________________________________________
248 Bool_t AliEveTRDLoaderRaw::LoadEvent()
249 {
250   Info("LoadEvent()", "Loading ...");
251
252   static const TEveException eH("AliEveTRDLoader::LoadEvent ");
253   if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
254
255
256   fRawRootReader->Reset();
257
258   AliEveTRDChamber *chmb;
259   AliTRDdigitsManager *dm;
260   dm = fRaw->Raw2Digits(fRawRootReader);
261
262   for(int idet=0; idet<540; idet++){
263     if(!(chmb=GetChamber(idet))) continue;
264     chmb->LoadDigits(dm);
265   }
266   return kTRUE;
267 }
268
269 //______________________________________________________________________________
270 void AliEveTRDLoaderRaw::NextEvent(Bool_t rewindOnEnd)
271 {
272   static const TEveException eH("AliEveTRDLoader::NextEvent ");
273   if(fRawRootReader == 0x0) throw(eH + "data file not opened.");
274
275
276   if(fRawRootReader->NextEvent() == kTRUE) ++fEventOld;
277   else {
278     if(fEventOld == -1) throw(eH + "no events available.");
279     if(rewindOnEnd) {
280       Warning("NextEvent()", Form("Reached end of stream (event=%d), rewinding to first event.", fEventOld));
281       fRawRootReader->RewindEvents();
282       fRawRootReader->NextEvent();
283       fEventOld = 0;
284     } else throw(eH + "last event reached.");
285   }
286 }
287
288
289
290 ///////////////////////////////////////////////////////////
291 //////////// AliEveTRDLoaderSimEditor /////////////////////
292 ///////////////////////////////////////////////////////////
293
294 //______________________________________________________________________________
295 AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height,
296                                                    UInt_t options, Pixel_t back) :
297   TGedFrame(p, width, height, options | kVerticalFrame, back),
298   fM(0), fLoadHits(0), fLoadDigits(0), fLoadClusters(0), fLoadTracks(0)
299 {
300   MakeTitle("AliEveTRDLoaderSim");
301
302   // "Data selector" group frame
303   TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
304   fLoadHits = new TGCheckButton(fGroupFrame,"  Hits");
305   fLoadHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=0)");
306   fGroupFrame->AddFrame(fLoadHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
307
308   fLoadDigits = new TGCheckButton(fGroupFrame,"  Digits");
309   fLoadDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=1)");
310   fGroupFrame->AddFrame(fLoadDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
311
312   fLoadClusters = new TGCheckButton(fGroupFrame,"  Clusters");
313   fLoadClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=2)");
314   fGroupFrame->AddFrame(fLoadClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
315
316   fLoadTracks = new TGCheckButton(fGroupFrame,"  Tracklets ");
317   fLoadTracks->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=3)");
318   fGroupFrame->AddFrame(fLoadTracks, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
319
320   fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
321   //    fGroupFrame->Resize(164,116);
322   AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
323 }
324
325 //______________________________________________________________________________
326 AliEveTRDLoaderSimEditor::~AliEveTRDLoaderSimEditor()
327 {}
328
329 //______________________________________________________________________________
330 void AliEveTRDLoaderSimEditor::SetModel(TObject* obj)
331 {
332   fM = dynamic_cast<AliEveTRDLoaderSim*>(obj);
333
334   Bool_t kFile = kTRUE;
335   if(fM->fFilename.CompareTo("") == 0) kFile = kFALSE;
336
337   /*    printf("\thits      %s\n", fM->fLoadHits ? "true" : "false");
338     printf("\tdigits    %s\n", fM->fLoadDigits ? "true" : "false");
339     printf("\tclusters  %s\n", fM->fLoadClusters ? "true" : "false");
340     printf("\ttracklets %s\n", fM->fLoadTracks ? "true" : "false");*/
341   fLoadHits->SetEnabled(kFile);
342   if(kFile) fLoadHits->SetState(fM->fLoadHits ? kButtonDown : kButtonUp);
343   fLoadDigits->SetEnabled(kFile);
344   if(kFile) fLoadDigits->SetState(fM->fLoadDigits ? kButtonDown : kButtonUp);
345   fLoadClusters->SetEnabled(kFile);
346   if(kFile) fLoadClusters->SetState(fM->fLoadClusters ? kButtonDown : kButtonUp);
347   fLoadTracks->SetEnabled(kFile);
348   if(kFile) fLoadTracks->SetState(fM->fLoadTracks ? kButtonDown : kButtonUp);
349 }
350
351 //______________________________________________________________________________
352 void AliEveTRDLoaderSimEditor::Toggle(Int_t id)
353 {
354   switch(id){
355     case 0:
356       fM->fLoadHits = fLoadHits->IsDown() ? kTRUE : kFALSE;
357       break;
358     case 1:
359       fM->fLoadDigits = fLoadDigits->IsDown() ? kTRUE : kFALSE;
360       break;
361     case 2:
362       fM->fLoadClusters = fLoadClusters->IsDown() ? kTRUE : kFALSE;
363       break;
364     case 3:
365       fM->fLoadTracks = fLoadTracks->IsDown() ? kTRUE : kFALSE;
366       break;
367   }
368 }
369
370 ///////////////////////////////////////////////////////////
371 /////////////   TRDLoaderRawEditor    /////////////////////
372 ///////////////////////////////////////////////////////////
373
374 // //________________________________________________________
375 // TRDLoaderRawEditor::TRDLoaderRawEditor(const TGWindow* p, Int_t width, Int_t height, UInt_t options, Pixel_t back) : TGedFrame(p, width, height, options | kVerticalFrame, back)
376 // {
377 //      MakeTitle("AliEveTRDLoaderRaw");
378 // }
379 //
380 // void TRDLoaderRawEditor::SetModel(TObject* obj)
381 // {
382 //      Info("SetModel()", "");
383 //      fM = dynamic_cast<AliEveTRDLoaderRaw*>(obj);
384 // }