]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TPC/AliTPCMonitorDateFile.cxx
code violation
[u/mrichter/AliRoot.git] / TPC / AliTPCMonitorDateFile.cxx
CommitLineData
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 18Revision 1.1 2007/09/17 10:23:31 cvetan
19New 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 41ClassImp(AliTPCMonitorDateFile)
42
43//____________________________________________________________________________
ca7b8371 44AliTPCMonitorDateFile::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//____________________________________________________________________________
59AliTPCMonitorDateFile::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//____________________________________________________________________________
75AliTPCMonitorDateFile &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//____________________________________________________________________________
95AliTPCMonitorDateFile::~AliTPCMonitorDateFile()
96{
97 // Destructor
98 delete fin;
99 if(fisBigMemAllocated == true){
100 delete[] fbigMem;
101 }
102}
103
104//____________________________________________________________________________
105void 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//____________________________________________________________________________
119Bool_t AliTPCMonitorDateFile::IsDateFileOpen()
120{
121 // Check if DATE file is open
122 return fin->is_open();
123}
124
125//____________________________________________________________________________
126void AliTPCMonitorDateFile::CloseDateFile()
127{
128 // Close DATE file
129 fin->close();
130 freadPosOverflow = false;
131 delete fin;
132 fin = new ifstream();
133}
134
135//____________________________________________________________________________
136void AliTPCMonitorDateFile::ResetFilePos()
137{
138 // Reset file position
139 ffilePos = 0;
140}
141
142//____________________________________________________________________________
143void 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//____________________________________________________________________________
152Int_t AliTPCMonitorDateFile::GetFileSize()
153{
154 // Return size of DATE file
155 return ffileSize;
156}
157
158//____________________________________________________________________________
159void 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//____________________________________________________________________________
224Bool_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//____________________________________________________________________________
236Bool_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//____________________________________________________________________________
248Int_t AliTPCMonitorDateFile::GetFilePosition()
249{
250 // Return current position in file
251 return ffilePos;
252}
253
254//____________________________________________________________________________
255Int_t AliTPCMonitorDateFile::GetAllocatedSizeofArray()
256{
257 // Return size of allocated data array
258 return fbigMemsize;
259}
260
261//____________________________________________________________________________
262void 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//____________________________________________________________________________
278Char_t *AliTPCMonitorDateFile::GetMemoryPointer()
279{
280 // Return pointer to data array
281 return fbigMem;
282}
283