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