]>
Commit | Line | Data |
---|---|---|
3ea47630 | 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 | ||
5802cf2d | 27 | class AliAltroMapping; |
3ea47630 | 28 | |
29 | class AliAltroBuffer: public TObject { | |
30 | public: | |
5802cf2d | 31 | AliAltroBuffer(const char* fileName, Int_t flag, const AliAltroMapping *mapping = NULL); |
3ea47630 | 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 | |
5802cf2d | 46 | void WriteDummyTrailer(Int_t wordsNumber, Int_t padNumber, |
47 | Int_t rowNumber, Int_t secNumber); | |
48 | //this method is used to write a dummy trailer | |
3ea47630 | 49 | Bool_t ReadTrailer(Int_t& wordsNumber, Int_t& padNumber, |
50 | Int_t& rowNumber, Int_t &secNumber); | |
51 | //this method is used to read the trailer when the file is read forward | |
52 | Bool_t ReadTrailerBackward(Int_t& wordsNumber, Int_t& padNumber, | |
53 | Int_t& rowNumber, Int_t& secNumber); | |
54 | //this method is used to read the trailer when the file is read backward | |
55 | ||
56 | void WriteChannel(Int_t padNumber, Int_t rowNumber, Int_t secNumber, | |
57 | Int_t nTimeBins, const Int_t* adcValues, | |
58 | Int_t threshold = 0); | |
59 | //this method is used to write all ADC values and the trailer of a channel | |
60 | ||
61 | void WriteDataHeader(Bool_t dummy, Bool_t compressed); | |
62 | //this method is used to write the data header | |
b0aef454 | 63 | Bool_t ReadDataHeader(); |
64 | //this method is used to read the data header | |
3ea47630 | 65 | void SetVerbose(Int_t val) {fVerbose = val;} |
66 | //this method is used to set the verbose level | |
67 | //level 0 no output messages | |
68 | //level !=0 some messages are displayed during the run | |
69 | void Flush(); | |
70 | //this method is used to fill the buffer with 2AA hexadecimal value and save it into the output file | |
71 | Int_t GetFillWordsNum() const {return fEndingFillWords;} | |
72 | ||
73 | private: | |
74 | AliAltroBuffer(const AliAltroBuffer& source); | |
75 | AliAltroBuffer& operator = (const AliAltroBuffer& source); | |
76 | ||
77 | UInt_t fBuffer[5]; //Buffer dimension is 32*5=160 bits and it contains 16 values | |
78 | //A value is never splitted in two Buffer | |
79 | ||
80 | ||
81 | Int_t fShift; //This variable contains the number of free bits in the current cell of | |
82 | //the Buffer after that the value Val is been inserted. | |
83 | //size of Int_t is 32 bit that is the same size of a cell of Buffer so | |
84 | //the shift operation are performed only on value Val. | |
85 | Int_t fCurrentCell; //This variable contains the cell number of the cell currently used | |
86 | Int_t fFreeCellBuffer;//number of free cells of the buffer | |
87 | Int_t fFlag; //0 read 1 write | |
88 | Int_t fVerbose; //verbose level | |
89 | fstream* fFile; //logical name of the I/O file | |
90 | Int_t fMaskBackward; //bit mask for backward reading of a file | |
91 | UInt_t fFilePosition;//'pointer' to the actual position in the file | |
92 | UInt_t fFileEnd; //position of the last element of the file (File dimension) | |
93 | UInt_t fDataHeaderPos;//Data header position | |
94 | Int_t fEndingFillWords;//Few words at the end of the stream | |
95 | ||
5802cf2d | 96 | // Now the parameters for the mapping |
97 | const AliAltroMapping* fMapping; // Pointer to the mapping handler | |
98 | ||
3ea47630 | 99 | ClassDef(AliAltroBuffer,0) // Interface to the Altro format |
100 | }; | |
101 | ||
102 | #endif |