]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveTRDLoaderImp.cxx
b991282c901e8c6636270f3626589442823ebe60
[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   // Constructor.
48 }
49
50 //______________________________________________________________________________
51 Bool_t  AliEveTRDLoaderSim::GoToEvent(int ev)
52 {
53   // Go to given event.
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   // Load hits.
111
112   Info("LoadHits()", "Loading ...");
113   if(!fChildren.size()) return kTRUE;
114
115   AliEveTRDChamber *chmb = 0x0;
116   AliTRDhit *hit = 0x0;
117   Int_t d;
118   for(int iTrack=0; iTrack<tH->GetEntries(); iTrack++){
119     gAlice->ResetHits();
120     if(!tH->GetEvent(iTrack)) continue;
121     hit = (AliTRDhit*)fTRD->FirstHit(-1);
122     if(!hit) continue;
123     d = hit->GetDetector();
124     chmb = GetChamber(d);
125     while(hit){
126       if(d != hit->GetDetector()){
127         d = hit->GetDetector();
128         chmb = GetChamber(d);
129       }
130       if(chmb) chmb->AddHit(hit);
131       hit = (AliTRDhit*)fTRD->NextHit();
132     }
133   }
134   return kTRUE;
135 }
136
137 //______________________________________________________________________________
138 Bool_t  AliEveTRDLoaderSim::Open(const char *filename, const char *dir)
139 {
140   // Open file in given dir.
141
142   fFilename = filename;
143   fDir = dir;
144   fDir += "/";
145
146   fRunLoader = AliRunLoader::GetRunLoader();
147   if(!fRunLoader) fRunLoader = AliRunLoader::Open(filename,
148                                                   AliConfig::GetDefaultEventFolderName(),"read");
149   if(!fRunLoader){
150     AliError("Couldn't find run loader");
151     return kFALSE;
152   }
153   fRunLoader->SetDirName(fDir);
154
155   gAlice = fRunLoader->GetAliRun();
156   if(!gAlice) fRunLoader->LoadgAlice();
157   if(!gAlice){
158     AliError("Couldn't find gAlice object");
159     return kFALSE;
160   }
161   fTRD = (AliTRDv1*)gAlice->GetDetector("TRD");
162   if(!fTRD){
163     AliError("Couldn't find TRD");
164     return kFALSE;
165   }
166
167   return kTRUE;
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   // Constructor.
186 }
187
188 //______________________________________________________________________________
189 Bool_t  AliEveTRDLoaderRaw::Open(const char *filename, const char *dir)
190 {
191   // Open file in gvenn dir.
192
193   fFilename = filename;
194   fDir = dir;
195   fDir += "/";
196
197   if(fRaw) delete fRaw;
198   fRaw = new AliTRDrawData();
199
200   if(fDataRoot){
201     if(fRawRootReader) delete fRawRootReader;
202     fRawRootReader = new AliRawReaderRoot(filename);
203   } else {
204     if(fRawDateReader) delete fRawDateReader;
205     fRawDateReader = new AliRawReaderDate(fDir+fFilename);
206   }
207
208   return kTRUE;
209 }
210
211 //______________________________________________________________________________
212 void AliEveTRDLoaderRaw::SetDataType(TRDDataTypes type)
213 {
214   // Set data type.
215
216   fDataRoot = (type == kRawRoot) ? kTRUE : kFALSE;
217 }
218
219 //______________________________________________________________________________
220 Bool_t AliEveTRDLoaderRaw::GoToEvent(int ev)
221 {
222   // Go to given event.
223
224   if(!fChildren.size()){
225     AliWarning("Please select first the chamber that you want to monitor from \"Chamber(s) selector\".");
226     return kFALSE;
227   }
228
229   static const TEveException kEH("AliEveTRDLoader::GotoEvent ");
230   if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
231
232
233   if(ev == fEventOld) return kTRUE;
234   Bool_t checkEnd;
235   if(ev < fEventOld) {
236     fRawRootReader->RewindEvents();
237     fEventOld = -1;
238     checkEnd = kFALSE;
239   } else checkEnd = kTRUE;
240
241   do NextEvent(); while(fEventOld != ev && !(checkEnd == kTRUE && fEventOld == 0));
242   LoadEvent();
243   gEve->Redraw3D();
244
245   return kTRUE;
246 }
247
248 //______________________________________________________________________________
249 Bool_t AliEveTRDLoaderRaw::LoadEvent()
250 {
251   // Load event.
252
253   Info("LoadEvent()", "Loading ...");
254
255   static const TEveException kEH("AliEveTRDLoader::LoadEvent ");
256   if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
257
258
259   fRawRootReader->Reset();
260
261   AliEveTRDChamber *chmb;
262   AliTRDdigitsManager *dm;
263   dm = fRaw->Raw2Digits(fRawRootReader);
264
265   for(int idet=0; idet<540; idet++){
266     if(!(chmb=GetChamber(idet))) continue;
267     chmb->LoadDigits(dm);
268   }
269   return kTRUE;
270 }
271
272 //______________________________________________________________________________
273 void AliEveTRDLoaderRaw::NextEvent(Bool_t rewindOnEnd)
274 {
275   // Go to next event.
276
277   static const TEveException kEH("AliEveTRDLoader::NextEvent ");
278   if(fRawRootReader == 0x0) throw(kEH + "data file not opened.");
279
280
281   if(fRawRootReader->NextEvent() == kTRUE) ++fEventOld;
282   else {
283     if(fEventOld == -1) throw(kEH + "no events available.");
284     if(rewindOnEnd) {
285       Warning("NextEvent()", Form("Reached end of stream (event=%d), rewinding to first event.", fEventOld));
286       fRawRootReader->RewindEvents();
287       fRawRootReader->NextEvent();
288       fEventOld = 0;
289     } else throw(kEH + "last event reached.");
290   }
291 }
292
293
294
295 ///////////////////////////////////////////////////////////
296 //////////// AliEveTRDLoaderSimEditor /////////////////////
297 ///////////////////////////////////////////////////////////
298
299 //______________________________________________________________________________
300 AliEveTRDLoaderSimEditor::AliEveTRDLoaderSimEditor(const TGWindow* p, Int_t width, Int_t height,
301                                                    UInt_t options, Pixel_t back) :
302   TGedFrame(p, width, height, options | kVerticalFrame, back),
303   fM(0), fLoadHits(0), fLoadDigits(0), fLoadClusters(0), fLoadTracks(0)
304 {
305   // Constructor.
306
307   MakeTitle("AliEveTRDLoaderSim");
308
309   // "Data selector" group frame
310   TGGroupFrame *fGroupFrame = new TGGroupFrame(this,"Data selector");
311   fLoadHits = new TGCheckButton(fGroupFrame,"  Hits");
312   fLoadHits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=0)");
313   fGroupFrame->AddFrame(fLoadHits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
314
315   fLoadDigits = new TGCheckButton(fGroupFrame,"  Digits");
316   fLoadDigits->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=1)");
317   fGroupFrame->AddFrame(fLoadDigits, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
318
319   fLoadClusters = new TGCheckButton(fGroupFrame,"  Clusters");
320   fLoadClusters->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=2)");
321   fGroupFrame->AddFrame(fLoadClusters, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
322
323   fLoadTracks = new TGCheckButton(fGroupFrame,"  Tracklets ");
324   fLoadTracks->Connect("Clicked()", "AliEveTRDLoaderSimEditor", this, "Toggle(=3)");
325   fGroupFrame->AddFrame(fLoadTracks, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
326
327   fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
328   //    fGroupFrame->Resize(164,116);
329   AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
330 }
331
332 //______________________________________________________________________________
333 void AliEveTRDLoaderSimEditor::SetModel(TObject* obj)
334 {
335   // Set model object.
336
337   fM = dynamic_cast<AliEveTRDLoaderSim*>(obj);
338
339   Bool_t kFile = kTRUE;
340   if(fM->fFilename.CompareTo("") == 0) kFile = kFALSE;
341
342   fLoadHits->SetEnabled(kFile);
343   if(kFile) fLoadHits->SetState(fM->fLoadHits ? kButtonDown : kButtonUp);
344   fLoadDigits->SetEnabled(kFile);
345   if(kFile) fLoadDigits->SetState(fM->fLoadDigits ? kButtonDown : kButtonUp);
346   fLoadClusters->SetEnabled(kFile);
347   if(kFile) fLoadClusters->SetState(fM->fLoadClusters ? kButtonDown : kButtonUp);
348   fLoadTracks->SetEnabled(kFile);
349   if(kFile) fLoadTracks->SetState(fM->fLoadTracks ? kButtonDown : kButtonUp);
350 }
351
352 //______________________________________________________________________________
353 void AliEveTRDLoaderSimEditor::Toggle(Int_t id)
354 {
355   // Toggle given button id.
356
357   switch(id){
358     case 0:
359       fM->fLoadHits = fLoadHits->IsDown() ? kTRUE : kFALSE;
360       break;
361     case 1:
362       fM->fLoadDigits = fLoadDigits->IsDown() ? kTRUE : kFALSE;
363       break;
364     case 2:
365       fM->fLoadClusters = fLoadClusters->IsDown() ? kTRUE : kFALSE;
366       break;
367     case 3:
368       fM->fLoadTracks = fLoadTracks->IsDown() ? kTRUE : kFALSE;
369       break;
370   }
371 }