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