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