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