]>
Commit | Line | Data |
---|---|---|
48265b32 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* | |
17 | $Log$ | |
ca7b8371 | 18 | Revision 1.1 2007/09/17 10:23:31 cvetan |
19 | New TPC monitoring package from Stefan Kniege. The monitoring package can be started by running TPCMonitor.C macro located in macros folder. | |
20 | ||
48265b32 | 21 | */ |
22 | ||
ca7b8371 | 23 | //////////////////////////////////////////////////////////////////////// |
24 | // | |
25 | // AliTPCMonitorDateFile class | |
26 | // | |
27 | // Class for handling the data structure in a DATE file | |
28 | // Used to read DATE files for the TPC raw data Monitor | |
29 | // | |
30 | // Author: Roland Bramm | |
31 | // Stefan Kniege, IKF, Frankfurt | |
32 | // | |
33 | // | |
34 | ///////////////////////////////////////////////////////////////////////// | |
35 | ||
36 | ||
48265b32 | 37 | |
ca7b8371 | 38 | #include "AliTPCMonitorDateFile.h" |
39 | #include "AliTPCMonitorDateFormat.h" | |
40 | #include <Riostream.h> | |
48265b32 | 41 | ClassImp(AliTPCMonitorDateFile) |
42 | ||
43 | //____________________________________________________________________________ | |
ca7b8371 | 44 | AliTPCMonitorDateFile::AliTPCMonitorDateFile() : |
45 | ffilePos(0), | |
46 | fbigMem(0), | |
47 | fbigMemsize(0), | |
48 | fisBigMemAllocated(false), | |
49 | ffileSize(0), | |
50 | ffilename(""), | |
51 | finitFile(false), | |
52 | freadPosOverflow(false), | |
53 | fin(new ifstream()) | |
48265b32 | 54 | { |
55 | // Constructor | |
48265b32 | 56 | } |
57 | ||
ca7b8371 | 58 | //____________________________________________________________________________ |
59 | AliTPCMonitorDateFile::AliTPCMonitorDateFile(const AliTPCMonitorDateFile &datefile) : | |
60 | TNamed(datefile.GetName(),datefile.GetTitle()), | |
61 | ffilePos(datefile.ffilePos), | |
62 | fbigMem(datefile.fbigMem), | |
63 | fbigMemsize(datefile.fbigMemsize), | |
64 | fisBigMemAllocated(datefile.fisBigMemAllocated), | |
65 | ffileSize(datefile.ffileSize), | |
66 | ffilename(datefile.ffilename), | |
67 | finitFile(datefile.finitFile), | |
68 | freadPosOverflow(datefile.freadPosOverflow), | |
69 | fin(new ifstream()) | |
70 | { | |
71 | // copy constructor | |
72 | } | |
73 | ||
74 | //____________________________________________________________________________ | |
75 | AliTPCMonitorDateFile &AliTPCMonitorDateFile:: operator= (const AliTPCMonitorDateFile& datefile) | |
76 | { | |
77 | ||
78 | // assignment operator | |
79 | if(this!=&datefile) | |
80 | { | |
81 | ffilePos=datefile.ffilePos; | |
82 | fbigMem=datefile.fbigMem; | |
83 | fbigMemsize=datefile.fbigMemsize; | |
84 | fisBigMemAllocated=datefile.fisBigMemAllocated; | |
85 | ffileSize=datefile.ffileSize; | |
86 | ffilename=datefile.ffilename; | |
87 | finitFile=datefile.finitFile; | |
88 | freadPosOverflow=datefile.freadPosOverflow; | |
89 | fin = new ifstream(); | |
90 | } | |
91 | return *this; | |
92 | } | |
93 | ||
48265b32 | 94 | //____________________________________________________________________________ |
95 | AliTPCMonitorDateFile::~AliTPCMonitorDateFile() | |
96 | { | |
97 | // Destructor | |
98 | delete fin; | |
99 | if(fisBigMemAllocated == true){ | |
100 | delete[] fbigMem; | |
101 | } | |
102 | } | |
103 | ||
104 | //____________________________________________________________________________ | |
105 | void AliTPCMonitorDateFile::OpenDateFile(string name) | |
106 | { | |
107 | // Open DATE file | |
108 | if( (ffilename != name) && (finitFile == true) ) { | |
109 | CloseDateFile(); | |
110 | ResetFilePos(); | |
111 | } | |
112 | fin->open(name.c_str()); | |
113 | ffilename = name; | |
114 | SetFileSize(); | |
115 | finitFile = true; | |
116 | } | |
117 | ||
118 | //____________________________________________________________________________ | |
119 | Bool_t AliTPCMonitorDateFile::IsDateFileOpen() | |
120 | { | |
121 | // Check if DATE file is open | |
122 | return fin->is_open(); | |
123 | } | |
124 | ||
125 | //____________________________________________________________________________ | |
126 | void AliTPCMonitorDateFile::CloseDateFile() | |
127 | { | |
128 | // Close DATE file | |
129 | fin->close(); | |
130 | freadPosOverflow = false; | |
131 | delete fin; | |
132 | fin = new ifstream(); | |
133 | } | |
134 | ||
135 | //____________________________________________________________________________ | |
136 | void AliTPCMonitorDateFile::ResetFilePos() | |
137 | { | |
138 | // Reset file position | |
139 | ffilePos = 0; | |
140 | } | |
141 | ||
142 | //____________________________________________________________________________ | |
143 | void AliTPCMonitorDateFile::SetFileSize() | |
144 | { | |
145 | // Set size of DATE file | |
146 | fin->seekg (0, ios::end); | |
147 | ffileSize = fin->tellg(); | |
148 | fin->seekg (0, ios::beg); | |
149 | } | |
150 | ||
151 | //____________________________________________________________________________ | |
152 | Int_t AliTPCMonitorDateFile::GetFileSize() | |
153 | { | |
154 | // Return size of DATE file | |
155 | return ffileSize; | |
156 | } | |
157 | ||
158 | //____________________________________________________________________________ | |
159 | void AliTPCMonitorDateFile::ReadEvent() | |
160 | { | |
161 | // Read in event from file | |
162 | Int_t size; | |
ca7b8371 | 163 | Char_t fmem[512]; // array for event header |
48265b32 | 164 | Char_t swapcarry[4]; |
165 | Bool_t toSwapEndian = false; | |
166 | //Fetch some bytes to get headers to know how much | |
167 | fin->seekg(ffilePos); | |
168 | //if( (getFilePosition() + sizeof(fmem)) <= (unsigned int)getFileSize()){ | |
169 | UInt_t sfmem = 272; | |
170 | if( (GetFilePosition() + sfmem) <= (UInt_t)GetFileSize()){ | |
171 | ||
172 | ||
173 | fin->read((Char_t*)fmem,sfmem); | |
174 | fin->seekg(ffilePos); | |
175 | AliTPCMonitorDateFormat *DateForm; | |
176 | DateForm = new AliTPCMonitorDateFormat((Char_t *)&fmem); | |
177 | ||
178 | ||
179 | ||
180 | toSwapEndian = DateForm->IsEventWrongEndian(); | |
181 | if(toSwapEndian == true){ | |
182 | delete DateForm; | |
183 | for(Int_t i = 0; i < 68; i++) { | |
184 | swapcarry[0] = fmem[(i*4)+0]; | |
185 | swapcarry[1] = fmem[(i*4)+1]; | |
186 | swapcarry[2] = fmem[(i*4)+2]; | |
187 | swapcarry[3] = fmem[(i*4)+3]; | |
188 | fmem[(i*4)+0] = swapcarry[3]; | |
189 | fmem[(i*4)+1] = swapcarry[2]; | |
190 | fmem[(i*4)+2] = swapcarry[1]; | |
191 | fmem[(i*4)+3] = swapcarry[0]; | |
192 | } | |
193 | DateForm = new AliTPCMonitorDateFormat((Char_t *)&fmem); | |
194 | } | |
195 | size = DateForm->GetEventSize(); | |
196 | if(size > GetAllocatedSizeofArray()) { | |
197 | AllocateArray((Int_t)(size*1.1)); | |
198 | } | |
199 | if( (GetFilePosition() + size) <= GetFileSize()){ | |
200 | fin->read((Char_t*)fbigMem,size); | |
201 | if(toSwapEndian == true){ | |
202 | for(Int_t i = 0; i < (size/4); i++) { | |
203 | swapcarry[0] = fbigMem[(i*4)+0]; | |
204 | swapcarry[1] = fbigMem[(i*4)+1]; | |
205 | swapcarry[2] = fbigMem[(i*4)+2]; | |
206 | swapcarry[3] = fbigMem[(i*4)+3]; | |
207 | fbigMem[(i*4)+0] = swapcarry[3]; | |
208 | fbigMem[(i*4)+1] = swapcarry[2]; | |
209 | fbigMem[(i*4)+2] = swapcarry[1]; | |
210 | fbigMem[(i*4)+3] = swapcarry[0]; | |
211 | } | |
212 | } | |
213 | ffilePos += size; | |
214 | }else{ | |
215 | freadPosOverflow = true; | |
216 | } | |
217 | delete DateForm; | |
218 | }else{ | |
219 | freadPosOverflow = true; | |
220 | } | |
221 | } | |
222 | ||
223 | //____________________________________________________________________________ | |
224 | Bool_t AliTPCMonitorDateFile::IsLastEvent() | |
225 | { | |
226 | // Check if event is last event in file | |
227 | Bool_t retval; | |
228 | if( (ffilePos < ffileSize) && (freadPosOverflow == false) ) | |
229 | retval = false; | |
230 | else | |
231 | retval = true; | |
232 | return retval; | |
233 | } | |
234 | ||
235 | //____________________________________________________________________________ | |
236 | Bool_t AliTPCMonitorDateFile::IsEventValid() | |
237 | { | |
238 | // Check Over flow flag | |
239 | Bool_t retval; | |
240 | if(freadPosOverflow == false) | |
241 | retval = true; | |
242 | else | |
243 | retval = false; | |
244 | return retval; | |
245 | } | |
246 | ||
247 | //____________________________________________________________________________ | |
248 | Int_t AliTPCMonitorDateFile::GetFilePosition() | |
249 | { | |
250 | // Return current position in file | |
251 | return ffilePos; | |
252 | } | |
253 | ||
254 | //____________________________________________________________________________ | |
255 | Int_t AliTPCMonitorDateFile::GetAllocatedSizeofArray() | |
256 | { | |
257 | // Return size of allocated data array | |
258 | return fbigMemsize; | |
259 | } | |
260 | ||
261 | //____________________________________________________________________________ | |
262 | void AliTPCMonitorDateFile::AllocateArray(Int_t size) | |
263 | { | |
264 | // allocate data array | |
265 | if(fisBigMemAllocated == false) { | |
266 | fbigMem = new Char_t[size]; | |
267 | fbigMemsize = size; | |
268 | fisBigMemAllocated = true; | |
269 | } else { | |
270 | delete fbigMem; | |
271 | fbigMem = new Char_t[size]; | |
272 | fbigMemsize = size; | |
273 | fisBigMemAllocated = true; | |
274 | } | |
275 | } | |
276 | ||
277 | //____________________________________________________________________________ | |
278 | Char_t *AliTPCMonitorDateFile::GetMemoryPointer() | |
279 | { | |
280 | // Return pointer to data array | |
281 | return fbigMem; | |
282 | } | |
283 |