]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Alieve/TPCLoader.cxx
Implemented list-management virtuals; use new functionality of RGTopFrame.
[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 <Reve/RGTopFrame.h>
8
9 #include <AliRawReaderRoot.h>
10 #include <AliTPCRawStream.h>
11
12 #include <TSystem.h>
13
14 using namespace Reve;
15 using namespace Alieve;
16
17 //______________________________________________________________________
18 // TPCLoader
19 //
20
21 ClassImp(TPCLoader)
22
23 TPCLoader::TPCLoader(const Text_t* n, const Text_t* t) :
24   RenderElementList(n, t),
25
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 {}
38
39 TPCLoader::~TPCLoader()
40 {
41   delete fReader;
42   delete fData;
43 }
44
45 /**************************************************************************/
46
47 void TPCLoader::RemoveElementLocal(RenderElement* el)
48 {
49   for(Int_t i=0; i<36; ++i) {
50     if(fSec2Ds[i] == el) fSec2Ds[i] = 0;
51     if(fSec3Ds[i] == el) fSec3Ds[i] = 0;
52   }
53
54   RenderElementList::RemoveElementLocal(el);
55 }
56
57 void TPCLoader::RemoveElements()
58 {
59   for(Int_t i=0; i<36; ++i) {
60     fSec2Ds[i] = 0;
61     fSec3Ds[i] = 0;
62   }
63
64   RenderElementList::RemoveElements();
65 }
66
67 /**************************************************************************/
68
69 void TPCLoader::SetData(TPCData* d)
70 {
71   delete fData;
72   fData = d;
73 }
74
75 /**************************************************************************/
76
77 void TPCLoader::OpenFile()
78 {
79   static const Exc_t eH("TPCLoader::OpenFile ");
80
81   if(gSystem->AccessPathName(fFile, kReadPermission))
82       throw(eH + "can not read '" + fFile + "'.");
83
84   if(fData == 0)
85     fData = new TPCData;
86
87   delete fReader;
88   fReader =  0;
89   fEvent  = -1;
90
91   fReader = new AliRawReaderRoot(fFile);
92   if(fTPCEquipementMap != "")
93     fReader->LoadEquipmentIdsMap
94       (gSystem->ExpandPathName(fTPCEquipementMap.Data()));
95
96   NextEvent();
97   LoadEvent();
98   UpdateSectors();
99 }
100
101 void TPCLoader::LoadEvent()
102 {
103   static const Exc_t eH("TPCLoader::LoadEvent ");
104
105   if(fReader == 0)
106     throw(eH + "data file not opened.");
107
108   printf("Now loading event %d\n", fEvent);
109   fReader->Reset();
110   AliTPCRawStream input(fReader);
111   input.SetOldRCUFormat(kTRUE);
112   fReader->Select("TPC");
113
114   fData->DropAllSectors();
115   fData->LoadRaw(input, kTRUE, kTRUE);  
116 }
117
118 void TPCLoader::NextEvent(Bool_t rewindOnEnd)
119 {
120   static const Exc_t eH("TPCLoader::NextEvent ");
121
122   if(fReader == 0)
123     throw(eH + "data file not opened.");
124
125   if(fReader->NextEvent() == kTRUE) {
126     ++fEvent;
127   } else {
128     if(fEvent == -1)
129       throw(eH + "no events available.");
130     if(rewindOnEnd) {
131       printf("Reached end of stream (event=%d), rewinding to first event.\n", fEvent);
132       fReader->RewindEvents();
133       fReader->NextEvent();
134       fEvent = 0;
135     } else {
136       throw(eH + "last event reached.");
137     }
138   }
139 }
140
141 void TPCLoader::GotoEvent(Int_t event)
142 {
143   static const Exc_t eH("TPCLoader::GotoEvent ");
144
145   if(fReader == 0)
146     throw(eH + "data file not opened.");
147
148   if(event == fEvent)
149     return;
150   Bool_t checkEnd;
151   if(event < fEvent) {
152     fReader->RewindEvents();
153     fEvent = -1;
154     checkEnd = kFALSE;
155   } else {
156     checkEnd = kTRUE;
157   }
158   do {
159     NextEvent();
160   } while(fEvent != event && !(checkEnd == kTRUE && fEvent == 0));
161   LoadEvent();
162   UpdateSectors();
163 }
164
165 /**************************************************************************/
166
167 void TPCLoader::UpdateSectors()
168 {
169   gReve->DisableRedraw();
170   for(Int_t i=0; i<=35; ++i) {
171     if(fSec2Ds[i] != 0) {
172       fSec2Ds[i]->IncRTS();
173     } else {
174       TPCSectorData* sd = fData->GetSectorData(i);
175       if(sd != 0) {
176         TPCSector2D* s = new TPCSector2D(Form("Sector2D %d", i));
177         fSec2Ds[i] = s;
178         s->SetSectorID(i);
179         s->SetDataSource(fData);
180
181         if(fDoubleSR)
182           s->SetMaxTime(1023);
183
184         if(fSetInitSectorParams) {
185           s->SetMinTime(fInitMinTime);
186           s->SetMaxTime(fInitMaxTime);
187           s->SetThreshold(fInitThreshold);
188         }
189
190         s->SetTrans(kTRUE);
191         s->SetFrameColor(36);
192
193         gReve->AddRenderElement(this, s);
194       }
195     }
196
197     if(fSec3Ds[i] != 0) {
198       fSec3Ds[i]->IncRTS();
199     }
200   }
201   gReve->EnableRedraw();
202 }
203
204 void TPCLoader::CreateSectors3D()
205 {
206   gReve->DisableRedraw();
207   for(Int_t i=0; i<=35; ++i) {
208     TPCSectorData* sd = fData->GetSectorData(i);
209     if(sd != 0 && fSec3Ds[i] == 0) {
210       TPCSector3D* s = new TPCSector3D(Form("Sector3D %d", i));
211       fSec3Ds[i] = s;
212       s->SetSectorID(i);
213       s->SetDataSource(fData);
214
215       if(fDoubleSR)
216         s->SetDriftVel(2.273);
217       if(fSec2Ds[i] != 0)
218         s->CopyVizParams(*fSec2Ds[i]);
219
220       s->SetTrans(kTRUE);
221       s->SetFrameColor(36);
222
223       gReve->AddRenderElement(this, s);
224     }
225   }
226   gReve->EnableRedraw();
227 }
228
229 void TPCLoader::DeleteSectors3D()
230 {
231   gReve->DisableRedraw();
232   for(Int_t i=0; i<=35; ++i) {
233     RenderElement* re = fSec3Ds[i];
234     if(re != 0) {
235       gReve->RemoveRenderElement(this, re);
236       // delete re; // Done automatically.
237       fSec3Ds[i] = 0;
238     }
239   }
240   gReve->EnableRedraw();
241 }
242
243 /**************************************************************************/
244
245 void TPCLoader::SetInitParams(Int_t mint, Int_t maxt, Int_t thr)
246 {
247   fSetInitSectorParams = kTRUE;
248   fInitMinTime   = mint;
249   fInitMaxTime   = maxt;
250   fInitThreshold = thr;
251 }