New classes and macros for raw data compression and ADC (D.Favretto)
[u/mrichter/AliRoot.git] / TPC / AliTPCBuffer160.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 AliTPCBUFFER160_H
18 #define AliTPCBUFFER160_H
19
20 class AliTPCBuffer160:public TObject{
21 public:
22   AliTPCBuffer160(){}//default constructor
23   AliTPCBuffer160(const char* fileName,Int_t flag);//constructor
24   virtual ~AliTPCBuffer160();//destructor
25   AliTPCBuffer160(const AliTPCBuffer160 &source); // copy constructor
26   AliTPCBuffer160& operator=(const AliTPCBuffer160 &source); // ass. op.
27   void  FillBuffer(Int_t Val);
28   //this method returmn the number of free cells of the internal buffer
29   Int_t GetFreeCellNumber()const{return fFreeCellBuffer;}
30   //this method return the next word of 10 bit (reading the file backward) if it exists -1 otherwise
31   Int_t GetNextBackWord();
32   //this method return the next word of 10 bit (reading the file forward) if it exists -1 otherwise
33   Int_t GetNext();
34   //this method is used to write tha trailer
35   void  WriteTrailer(Int_t WordsNumber,Int_t PadNumber,Int_t RowNumber,Int_t SecNumber);
36   //this method is used to read the trailer when the file is read forward
37   void  ReadTrailer(Int_t &WordsNumber,Int_t &PadNumber,Int_t &RowNumber,Int_t &SecNumber);
38   //this method is used to read the trailer when the file is read backward
39   Int_t ReadTrailerBackward(Int_t &WordsNumber,Int_t &PadNumber,Int_t &RowNumber,Int_t &SecNumber);
40   //this methos is used to write the Mini header
41   void  WriteMiniHeader(ULong_t Size,Int_t SecNumber,Int_t SubSector,Int_t Detector,Int_t Flag );
42   //this methos is used to set the verbose level 
43   //level  0 no output messages
44   //level !=0 some messages are displayed during the run
45   void  SetVerbose(Int_t val){fVerbose=val;}
46   //this method is used to fill the buffer with 2AA hexadecimal value and save it into the output file
47   void  Flush();
48   Int_t GetFillWordsNum(){return EndingFillWords;}
49 private:
50   //this method is used to pack bits into a word of 32 bits
51   void  PackWord(ULong_t &BaseWord, ULong_t Word, Int_t StartBit, Int_t StopBit);
52   //this method is used to read a precise number of bits from a word of 32 bits
53   void  UnpackWord(ULong_t PackedWord, Int_t StartBit, Int_t StopBit, ULong_t &Word);
54
55   ULong_t fBuffer[5];   //Buffer dimension is 32*5=160 bits and it contains 16 values
56                         //A value is never splitted in two Buffer
57
58
59   Int_t fShift;         //This variable contains the number of free bits in the current cel of
60                         //the Buffer after that the value Val is been inserted.
61                         //size of Int_t is 32 bit that is the same size of a cell of Buffer so 
62                         //the shift operation are perfomend only on value Val.
63   Int_t fCurrentCell;   //This variable contains the cell number of the cell currently used 
64   Int_t fFreeCellBuffer;//number of free cells of the buffer
65   Int_t fFlag;          //0 read  1 write
66   Int_t fVerbose;       //verbose level
67   fstream f;            //logical name of the I/O file
68   Int_t fMaskBackward;  
69   ULong_t fFilePosition;//'pointer' to the actual position in the file
70   ULong_t fFileEnd;     //position of the last element of the file (File dimension)
71   ULong_t fMiniHeaderPos;//Mini header position
72   Int_t  EndingFillWords;
73   ClassDef(AliTPCBuffer160,1)
74 };
75
76 #endif