Initial version of the RCU ALTRO V3 format encoder. It derives from the old encoder...
[u/mrichter/AliRoot.git] / RAW / AliAltroBuffer.h
3ea47630 1/* Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
5// Class used for read-write the ALTRO data format //
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
17#ifndef AliALTROBUFFER_H
18#define AliALTROBUFFER_H
20#include <TObject.h>
4c846604 21
22class AliFstream;
3ea47630 23
5802cf2d 24class AliAltroMapping;
3ea47630 25
26class AliAltroBuffer: public TObject {
27 public:
573322da 28 AliAltroBuffer(const char* fileName, AliAltroMapping *mapping = NULL);
3ea47630 29 virtual ~AliAltroBuffer();
94b2b783 31 virtual void FillBuffer(Int_t val);
3ea47630 32 //this method stores a word into the buffer
3ea47630 33
34 void WriteTrailer(Int_t wordsNumber, Int_t padNumber,
35 Int_t rowNumber, Int_t secNumber);
36 //this method is used to write the trailer
94b2b783 37 virtual void WriteTrailer(Int_t wordsNumber, Short_t hwAddress);
20daa34d 38 //this method is used to write the trailer
3ea47630 39
5ca4e0a0 40 void WriteChannel(Int_t padNumber, Int_t rowNumber, Int_t secNumber,
3ea47630 41 Int_t nTimeBins, const Int_t* adcValues,
42 Int_t threshold = 0);
43 //this method is used to write all ADC values and the trailer of a channel
5ca4e0a0 44 void WriteChannel(Short_t hwAddress,
cc934096 45 Int_t nTimeBins, const Int_t* adcValues,
46 Int_t threshold = 0);
47 //this method is used to write all ADC values and the trailer of a channel
5ca4e0a0 48 Int_t WriteBunch(Int_t nTimeBins, const Int_t* adcValues,
cc934096 49 Int_t threshold = 0);
50 //this method is used to write all ADC values
3ea47630 51
5ca4e0a0 52 void WriteDataHeader(Bool_t dummy, Bool_t compressed);
3ea47630 53 //this method is used to write the data header
5e6235b5 54
94b2b783 55 virtual void WriteRCUTrailer(Int_t rcuId);
5e6235b5 56 //this method is used to write the RCU trailer
3ea47630 58 void SetVerbose(Int_t val) {fVerbose = val;}
59 //this method is used to set the verbose level
60 //level 0 no output messages
61 //level !=0 some messages are displayed during the run
5ca4e0a0 62 void Flush();
3ea47630 63 //this method is used to fill the buffer with 2AA hexadecimal value and save it into the output file
3ea47630 64
16e29964 65 void SetMapping(AliAltroMapping *mapping) { fMapping = mapping; }
20daa34d 67 protected:
3ea47630 68 AliAltroBuffer(const AliAltroBuffer& source);
69 AliAltroBuffer& operator = (const AliAltroBuffer& source);
71 UInt_t fBuffer[5]; //Buffer dimension is 32*5=160 bits and it contains 16 values
72 //A value is never splitted in two Buffer
75 Int_t fShift; //This variable contains the number of free bits in the current cell of
76 //the Buffer after that the value Val is been inserted.
77 //size of Int_t is 32 bit that is the same size of a cell of Buffer so
78 //the shift operation are performed only on value Val.
79 Int_t fCurrentCell; //This variable contains the cell number of the cell currently used
80 Int_t fFreeCellBuffer;//number of free cells of the buffer
3ea47630 81 Int_t fVerbose; //verbose level
4c846604 82 AliFstream* fFile; //logical name of the I/O file
3ea47630 83 UInt_t fDataHeaderPos;//Data header position
3ea47630 84
5802cf2d 85 // Now the parameters for the mapping
573322da 86 AliAltroMapping* fMapping; // Pointer to the mapping handler
5802cf2d 87
3ea47630 88 ClassDef(AliAltroBuffer,0) // Interface to the Altro format