New methods to read and write trailers. New method to read whole altro channel
[u/mrichter/AliRoot.git] / RAW / AliAltroBuffer.h
1 /* Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
2  * See cxx source for full Copyright notice                               */
3
4 /////////////////////////////////////////////////////
5 // Class used for read-write the ALTRO data format //
6 /////////////////////////////////////////////////////
7
8 /*This class is an interface between the altro format file and the 
9   user, and can be used in write or read mode
10   In the write mode a new altro file is created and filled using the method FillBuffer().
11   The name of the file is specified as parameter in the constructor as well as the type mode.
12   In the Read mode the specified file is open and the values can be read using the
13   methods GetNext() and GetNextBackWord().
14   The first method is used to read the file forward while the second is used to read backward 
15 */
16
17 #ifndef AliALTROBUFFER_H
18 #define AliALTROBUFFER_H
19
20 #include <TObject.h>
21 #ifdef __CINT__
22 class fstream;
23 #else
24 #include "Riostream.h"
25 #endif
26
27 class AliAltroMapping;
28
29 class AliAltroBuffer: public TObject {
30  public:
31   AliAltroBuffer(const char* fileName, Int_t flag, const AliAltroMapping *mapping = NULL);
32   virtual ~AliAltroBuffer();
33
34   void  FillBuffer(Int_t val);
35   //this method stores a word into the buffer
36   Int_t GetFreeCellNumber()const {return fFreeCellBuffer;}
37   //this method returns the number of free cells of the internal buffer
38   Int_t GetNextBackWord();
39   //this method returns the next word of 10 bit (reading the file backward) if it exists -1 otherwise
40   Int_t GetNext();
41   //this method returns the next word of 10 bit (reading the file forward) if it exists -1 otherwise
42
43   void  WriteTrailer(Int_t wordsNumber, Int_t padNumber, 
44                      Int_t rowNumber, Int_t secNumber);
45   //this method is used to write the trailer
46   void  WriteTrailer(Int_t wordsNumber, Short_t hwAdress); 
47   //this method is used to write the trailer
48   void  WriteDummyTrailer(Int_t wordsNumber, Int_t padNumber, 
49                           Int_t rowNumber, Int_t secNumber);
50   //this method is used to write a dummy trailer
51   Bool_t ReadTrailer(Int_t& wordsNumber, Int_t& padNumber, 
52                      Int_t& rowNumber, Int_t &secNumber);
53   //this method is used to read the trailer when the file is read forward
54   Bool_t ReadTrailer(Int_t& wordsNumber, Short_t& hwAdress); 
55   //this method is used to read the trailer when the file is read forward
56   Bool_t ReadDummyTrailer(Int_t& wordsNumber, Int_t& padNumber, 
57                           Int_t& rowNumber, Int_t &secNumber);
58   //this method is used to read the trailer when the file is read forward
59   Bool_t ReadTrailerBackward(Int_t& wordsNumber, Int_t& padNumber, 
60                              Int_t& rowNumber, Int_t& secNumber);
61   //this method is used to read the trailer when the file is read backward
62   Bool_t ReadTrailerBackward(Int_t& wordsNumber, Short_t& hwAdress); 
63   //this method is used to read the trailer when the file is read backward
64   Bool_t ReadDummyTrailerBackward(Int_t& wordsNumber, Int_t& padNumber, 
65                                   Int_t& rowNumber, Int_t& secNumber);
66   //this method is used to read the trailer when the file is read backward
67
68   void  WriteChannel(Int_t padNumber, Int_t rowNumber, Int_t secNumber,
69                      Int_t nTimeBins, const Int_t* adcValues, 
70                      Int_t threshold = 0);
71   //this method is used to write all ADC values and the trailer of a channel
72   void  ReadChannel(Int_t padNumber, Int_t rowNumber,  Int_t secNumber,
73                     Int_t& nTimeBins, Int_t* adcValues);
74   //this method is used to read all ADC values and the trailer of a channel
75
76   void  WriteDataHeader(Bool_t dummy, Bool_t compressed);
77   //this method is used to write the data header
78   Bool_t ReadDataHeader();
79   //this method is used to read the data header
80   void  SetVerbose(Int_t val) {fVerbose = val;}
81   //this method is used to set the verbose level 
82   //level  0 no output messages
83   //level !=0 some messages are displayed during the run
84   void  Flush();
85   //this method is used to fill the buffer with 2AA hexadecimal value and save it into the output file
86   Int_t GetFillWordsNum() const {return fEndingFillWords;}
87
88   void  SetMapping(AliAltroMapping *mapping) { fMapping = mapping; }
89
90  protected:
91   AliAltroBuffer(const AliAltroBuffer& source);
92   AliAltroBuffer& operator = (const AliAltroBuffer& source);
93
94   UInt_t fBuffer[5];    //Buffer dimension is 32*5=160 bits and it contains 16 values
95                         //A value is never splitted in two Buffer
96
97
98   Int_t fShift;         //This variable contains the number of free bits in the current cell of
99                         //the Buffer after that the value Val is been inserted.
100                         //size of Int_t is 32 bit that is the same size of a cell of Buffer so 
101                         //the shift operation are performed only on value Val.
102   Int_t fCurrentCell;   //This variable contains the cell number of the cell currently used 
103   Int_t fFreeCellBuffer;//number of free cells of the buffer
104   Int_t fFlag;          //0 read  1 write
105   Int_t fVerbose;       //verbose level
106   fstream* fFile;       //logical name of the I/O file
107   Int_t fMaskBackward;  //bit mask for backward reading of a file
108   UInt_t fFilePosition;//'pointer' to the actual position in the file
109   UInt_t fFileEnd;     //position of the last element of the file (File dimension)
110   UInt_t fDataHeaderPos;//Data header position
111   Int_t  fEndingFillWords;//Few words at the end of the stream
112
113   // Now the parameters for the mapping
114   const AliAltroMapping*    fMapping;      // Pointer to the mapping handler
115
116   ClassDef(AliAltroBuffer,0)  // Interface to the Altro format
117 };
118
119 #endif