]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Alieve/TPCLoader.cxx
Put black-listed classes out of Alieve namespace.
[u/mrichter/AliRoot.git] / EVE / Alieve / TPCLoader.cxx
1 // $Header$
2
3 #include "TPCLoader.h"
4 #include "TPCData.h"
5 #include <Alieve/TPCSector2D.h>
6 #include <Alieve/TPCSector3D.h>
7 #include <TEveManager.h>
8 #include <TEveGedEditor.h>
9
10 #include <AliRawReaderRoot.h>
11 #include <AliTPCRawStream.h>
12
13 #include <TSystem.h>
14 using namespace Alieve;
15
16 //______________________________________________________________________
17 // TPCLoader
18 //
19
20 ClassImp(TPCLoader)
21
22 TPCLoader::TPCLoader(const Text_t* n, const Text_t* t) :
23   TEveElementList(n, t),
24
25   fFile(),
26   fEvent(-1),
27   fDoubleSR(kFALSE),
28
29   fTPCEquipementMap(),
30   fReader(0),
31   fData(0),
32
33   fSec2Ds(36),
34   fSec3Ds(36),
35
36   fSetInitSectorParams(kFALSE),
37   fInitMinTime(0), fInitMaxTime(460), fInitThreshold(5), fInitMaxVal(128)
38 {
39   fData = new TPCData;
40 }
41
42 TPCLoader::~TPCLoader()
43 {
44   delete fReader;
45   delete fData;
46 }
47
48 /**************************************************************************/
49
50 void TPCLoader::RemoveElementLocal(TEveElement* el)
51 {
52   for(Int_t i=0; i<36; ++i) {
53     if(fSec2Ds[i] == el) fSec2Ds[i] = 0;
54     if(fSec3Ds[i] == el) fSec3Ds[i] = 0;
55   }
56 }
57
58 void TPCLoader::RemoveElementsLocal()
59 {
60   for(Int_t i=0; i<36; ++i) {
61     fSec2Ds[i] = 0;
62     fSec3Ds[i] = 0;
63   }
64 }
65
66 /**************************************************************************/
67
68 void TPCLoader::SetData(TPCData* d)
69 {
70   delete fData;
71   fData = d;
72 }
73
74 /**************************************************************************/
75
76 void TPCLoader::OpenFile()
77 {
78   static const TEveException eH("TPCLoader::OpenFile ");
79
80   if(gSystem->AccessPathName(fFile, kReadPermission))
81       throw(eH + "can not read '" + fFile + "'.");
82
83   fData->DeleteAllSectors();
84
85   delete fReader;
86   fReader =  0;
87   fEvent  = -1;
88
89   fReader = new AliRawReaderRoot(fFile);
90   if(fTPCEquipementMap != "")
91     fReader->LoadEquipmentIdsMap
92       (gSystem->ExpandPathName(fTPCEquipementMap.Data()));
93
94   NextEvent();
95   LoadEvent();
96   UpdateSectors(kTRUE);
97 }
98
99 void TPCLoader::LoadEvent()
100 {
101   static const TEveException eH("TPCLoader::LoadEvent ");
102
103   if(fReader == 0)
104     throw(eH + "data file not opened.");
105
106   printf("Now loading event %d\n", fEvent);
107   fReader->Reset();
108   AliTPCRawStream input(fReader);
109   input.SetOldRCUFormat(kTRUE);
110   fReader->Select("TPC");
111
112   fData->DropAllSectors();
113   fData->LoadRaw(input, kTRUE, kTRUE);  
114 }
115
116 void TPCLoader::NextEvent(Bool_t rewindOnEnd)
117 {
118   static const TEveException eH("TPCLoader::NextEvent ");
119
120   if(fReader == 0)
121     throw(eH + "data file not opened.");
122
123   if(fReader->NextEvent() == kTRUE) {
124     ++fEvent;
125   } else {
126     if(fEvent == -1)
127       throw(eH + "no events available.");
128     if(rewindOnEnd) {
129       printf("Reached end of stream (event=%d), rewinding to first event.\n", fEvent);
130       fReader->RewindEvents();
131       fReader->NextEvent();
132       fEvent = 0;
133     } else {
134       throw(eH + "last event reached.");
135     }
136   }
137 }
138
139 void TPCLoader::GotoEvent(Int_t event)
140 {
141   static const TEveException eH("TPCLoader::GotoEvent ");
142
143   if(fReader == 0)
144     throw(eH + "data file not opened.");
145
146   if(event == fEvent)
147     return;
148   Bool_t checkEnd;
149   if(event < fEvent) {
150     fReader->RewindEvents();
151     fEvent = -1;
152     checkEnd = kFALSE;
153   } else {
154     checkEnd = kTRUE;
155   }
156   do {
157     NextEvent();
158   } while(fEvent != event && !(checkEnd == kTRUE && fEvent == 0));
159   LoadEvent();
160   UpdateSectors();
161 }
162
163 void* TPCLoader::LoopEvent(TPCLoader* loader)
164 {
165   loader->NextEvent();
166   loader->LoadEvent();
167   loader->UpdateSectors();
168   if (gEve->GetEditor()->GetModel() == loader)
169     gEve->EditElement(loader);
170   return 0;
171 }
172
173 /**************************************************************************/
174
175 void TPCLoader::UpdateSectors(Bool_t dropNonPresent)
176 {
177   gEve->DisableRedraw();
178   for(Int_t i=0; i<=35; ++i)
179   {
180     TPCSectorData* sd = fData->GetSectorData(i);
181
182     // 2D sectors
183     if(fSec2Ds[i] != 0)
184     {
185       if (dropNonPresent && sd == 0) {
186         gEve->RemoveElement(fSec2Ds[i], this);
187         fSec2Ds[i] = 0;
188       } else {
189         fSec2Ds[i]->IncRTS();
190         fSec2Ds[i]->ElementChanged();
191       }
192     }
193     else
194     {
195       if(sd != 0) {
196         TPCSector2D* s = new TPCSector2D(Form("Sector2D %d", i));
197         fSec2Ds[i] = s;
198         s->SetSectorID(i);
199         s->SetDataSource(fData);
200
201         if(fDoubleSR)
202           s->SetMaxTime(1023);
203
204         if(fSetInitSectorParams) {
205           s->SetMinTime(fInitMinTime);
206           s->SetMaxTime(fInitMaxTime);
207           s->SetThreshold(fInitThreshold);
208           s->SetMaxVal(fInitMaxVal);
209         }
210
211         s->SetAutoTrans(kTRUE);
212         s->SetFrameColor(36);
213
214         gEve->AddElement(s, this);
215       }
216     }
217
218     // 3D sectors
219     if(fSec3Ds[i] != 0)
220     {
221       if (dropNonPresent && sd == 0) {
222         gEve->RemoveElement(fSec3Ds[i], this);
223         fSec3Ds[i] = 0;
224       } else {
225         fSec3Ds[i]->IncRTS();
226         fSec3Ds[i]->ElementChanged();
227       }
228     }
229   }
230   gEve->Redraw3D(kTRUE, kFALSE);
231   gEve->EnableRedraw();
232 }
233
234 void TPCLoader::ReloadSectors()
235 {
236   LoadEvent();
237   UpdateSectors();
238 }
239
240 void TPCLoader::CreateSectors3D()
241 {
242   gEve->DisableRedraw();
243   for(Int_t i=0; i<=35; ++i) {
244     TPCSectorData* sd = fData->GetSectorData(i);
245     if(sd != 0 && fSec3Ds[i] == 0) {
246       TPCSector3D* s = new TPCSector3D(Form("Sector3D %d", i));
247       fSec3Ds[i] = s;
248       s->SetSectorID(i);
249       s->SetDataSource(fData);
250
251       if(fDoubleSR)
252         s->SetDriftVel(2.273);
253       if(fSec2Ds[i] != 0)
254         s->CopyVizParams(*fSec2Ds[i]);
255
256       s->SetAutoTrans(kTRUE);
257       s->SetFrameColor(36);
258
259       gEve->AddElement(s, this);
260     }
261   }
262   gEve->EnableRedraw();
263 }
264
265 void TPCLoader::DeleteSectors3D()
266 {
267   gEve->DisableRedraw();
268   for(Int_t i=0; i<=35; ++i) {
269     TEveElement* re = fSec3Ds[i];
270     if(re != 0) {
271       gEve->RemoveElement(re, this);
272       // delete re; // Done automatically.
273       fSec3Ds[i] = 0;
274     }
275   }
276   gEve->EnableRedraw();
277 }
278
279 /**************************************************************************/
280
281 void TPCLoader::SetInitParams(Int_t mint, Int_t maxt, Int_t thr, Int_t maxval)
282 {
283   fSetInitSectorParams = kTRUE;
284   fInitMinTime   = mint;
285   fInitMaxTime   = maxt;
286   fInitThreshold = thr;
287   fInitMaxVal    = maxval;
288 }