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