]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/AliTPCMonitorDateFile.cxx
Coding convention fixes from Stefan
[u/mrichter/AliRoot.git] / TPC / AliTPCMonitorDateFile.cxx
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$
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
21 */ 
22
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
37
38 #include "AliTPCMonitorDateFile.h"
39 #include "AliTPCMonitorDateFormat.h"
40 #include <Riostream.h>
41 ClassImp(AliTPCMonitorDateFile)
42
43 //____________________________________________________________________________
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())
54 {
55   // Constructor
56 }
57
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  
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;
163   Char_t         fmem[512];                      // array for event header
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