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