]>
Commit | Line | Data |
---|---|---|
3ea47630 | 1 | #ifndef ALIALTRORAWSTREAM_H |
2 | #define ALIALTRORAWSTREAM_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | ||
8 | /////////////////////////////////////////////////////////////////////////////// | |
9 | /// | |
10 | /// This is a base class for reading raw data digits in Altro format | |
7e18047e | 11 | /// The class is able to read both old and new RCU trailer formats |
9a090ccd | 12 | /// Switch between formats is done automatically using the last payload word. |
1e984421 | 13 | /// In case the Common Data Header is 7 32-bit words long, one |
14 | /// can use the fIsShortDataHeader flag. | |
3ea47630 | 15 | /// |
16 | /////////////////////////////////////////////////////////////////////////////// | |
17 | ||
18 | #include <TObject.h> | |
19 | ||
20 | class AliRawReader; | |
21 | ||
3ea47630 | 22 | class AliAltroRawStream: public TObject { |
23 | public : | |
24 | AliAltroRawStream(AliRawReader* rawReader); | |
25 | virtual ~AliAltroRawStream(); | |
26 | ||
3a291af4 | 27 | virtual void Reset(); |
28 | virtual Bool_t Next(); | |
3ea47630 | 29 | |
0148e633 | 30 | virtual Bool_t NextDDL(UChar_t* data = NULL); // Iterate over DDLs/RCUs |
31 | virtual Bool_t NextChannel(); // Iterate over altro channels | |
32 | virtual Bool_t NextBunch(UShort_t *bunchData, | |
33 | Int_t &bunchLength, | |
34 | Int_t &startTimeBin); // Iterate over altro bunches | |
35 | ||
cf4af8c7 | 36 | Int_t GetDDLNumber() const { return fDDLNumber; } // Provide current DDL number |
37 | Int_t GetPrevDDLNumber() const { return fPrevDDLNumber; }// Provide previous DDL number | |
38 | Bool_t IsNewDDLNumber() const {return (fDDLNumber != fPrevDDLNumber);}; | |
39 | Int_t GetRCUId() const { return fRCUId; } // Provide current RCU identifier | |
40 | Int_t GetPrevRCUId() const { return fPrevRCUId; } // Provide previous RCU identifier | |
41 | Bool_t IsNewRCUId() const {return (fRCUId != fPrevRCUId);}; | |
42 | Int_t GetHWAddress() const { return fHWAddress; } // Provide current hardware address | |
43 | Int_t GetPrevHWAddress() const { return fPrevHWAddress; } // Provide previous hardware address | |
44 | Bool_t IsNewHWAddress() const {return (fHWAddress != fPrevHWAddress) || IsNewDDLNumber();}; | |
45 | Int_t GetTime() const { return fTime; } // Provide index of current time bin | |
46 | Int_t GetPrevTime() const { return fPrevTime; } // Provide index of previous time bin | |
47 | Bool_t IsNewTime() const {return (fTime != fPrevTime) || IsNewHWAddress();}; | |
48 | Int_t GetSignal() const { return fSignal; } // Provide signal in ADC counts | |
49 | Int_t GetTimeLength() const { return fTimeBunch; } // Provide total length of current time bunch | |
50 | ||
e76a0935 | 51 | Int_t GetChannelPayloadSize() const { return fChannelPayloadSize; } |
eae29211 | 52 | Int_t GetRCUPayloadSizeInSOD() const; |
e76a0935 | 53 | |
e68dc1cf | 54 | Int_t GetBranch() const; // Provide the branch index for the current hardware address |
55 | Int_t GetFEC() const; // Provide the front-end card index for the current hardware address | |
56 | Int_t GetAltro() const; // Provide the altro chip index for the current hardware address | |
57 | Int_t GetChannel() const; // Provide the channel index for the current hardware address | |
58 | ||
cf4af8c7 | 59 | Bool_t GetRCUTrailerData(UChar_t*& data) const; // Provide a pointer to RCU trailer |
60 | Int_t GetRCUTrailerSize() const { return fRCUTrailerSize; } // Provide size of RCU trailer | |
5e6235b5 | 61 | |
31be3849 | 62 | // RCU trailer related getters |
63 | UInt_t GetFECERRA() const { return fFECERRA; } | |
64 | UInt_t GetFECERRB() const { return fFECERRB; } | |
65 | UShort_t GetERRREG2() const { return fERRREG2; } | |
7473795a | 66 | UShort_t GetNChAddrMismatch() const { return fERRREG3; } |
67 | UShort_t GetNChLengthMismatch() const { return fERRREG4; } | |
68 | ||
31be3849 | 69 | UShort_t GetActiveFECsA() const { return fActiveFECsA; } |
70 | UShort_t GetActiveFECsB() const { return fActiveFECsB; } | |
71 | ||
f683d15c | 72 | UInt_t GetAltroCFG1() const { return fAltroCFG1; } |
31be3849 | 73 | UChar_t GetBaselineCorr() const { return fAltroCFG1 & 0xF; } |
2898b1f0 | 74 | Bool_t GetPolarity() const { return (fAltroCFG1 >> 4) & 0x1; } |
75 | UChar_t GetNPresamples() const { return (fAltroCFG1 >> 5) & 0x3; } | |
76 | UChar_t GetNPostsamples() const { return (fAltroCFG1 >> 7) & 0xF; } | |
77 | Bool_t GetSecondBaselineCorr() const { return (fAltroCFG1 >> 11) & 0x1; } | |
78 | UChar_t GetGlitchFilter() const { return (fAltroCFG1 >> 12) & 0x3; } | |
79 | UChar_t GetNNonZSPostsamples() const { return (fAltroCFG1 >> 14) & 0x7; } | |
80 | UChar_t GetNNonZSPresamples() const { return (fAltroCFG1 >> 17) & 0x3; } | |
81 | Bool_t GetZeroSupp() const { return (fAltroCFG1 >> 19) & 0x1; } | |
31be3849 | 82 | |
f683d15c | 83 | UInt_t GetAltroCFG2() const { return fAltroCFG2; } |
31be3849 | 84 | Bool_t GetNAltroBuffers() const { return (fAltroCFG2 >> 24) & 0x1; } |
85 | UChar_t GetNPretriggerSamples() const{ return (fAltroCFG2 >> 20) & 0xF; } | |
86 | UShort_t GetNSamplesPerCh() const { return (fAltroCFG2 >> 10) & 0x3FF; } | |
87 | Bool_t GetSparseRO() const { return (fAltroCFG2 >> 9) & 0x1; } | |
f683d15c | 88 | Double_t GetTSample() const; |
89 | Double_t GetL1Phase() const; | |
31be3849 | 90 | void PrintRCUTrailer() const; |
91 | ||
e7fd2555 | 92 | void SelectRawData(Int_t detId); // Select raw data for specific detector id |
362c9d61 | 93 | void SelectRawData(const char *detName); // Select raw data for specific detector name |
e7fd2555 | 94 | |
1e984421 | 95 | void SetShortDataHeader(Bool_t flag) { fIsShortDataHeader = flag; } // Specify whenever to assume or not a short CDH format |
7e18047e | 96 | |
776c3b9c | 97 | void PrintDebug() const; // Print debug information in case of decoding errors |
eb09ec9a | 98 | void AddMappingErrorLog(const char *message = NULL); |
99 | ||
100 | enum EAltroRawStreamError { | |
101 | kRCUTrailerSizeErr = 1, | |
102 | kAltroTrailerErr = 2, | |
103 | kBunchLengthReadErr = 3, | |
104 | kTimeBinReadErr = 4, | |
105 | kAmplitudeReadErr = 5, | |
106 | k32bitWordReadErr = 6, | |
7dcdcfe4 | 107 | kBadAltroMapping = 7, |
108 | kRCUTrailerErr = 8 | |
eb09ec9a | 109 | }; |
776c3b9c | 110 | |
3a291af4 | 111 | AliAltroRawStream& operator = (const AliAltroRawStream& stream); |
e7bee78b | 112 | AliAltroRawStream(const AliAltroRawStream& stream); |
113 | ||
114 | protected: | |
3a291af4 | 115 | |
1e984421 | 116 | Bool_t fIsShortDataHeader; // flag used to select between normal and short CDH format |
7e18047e | 117 | |
e7fd2555 | 118 | private : |
3a291af4 | 119 | |
e7fd2555 | 120 | UShort_t GetNextWord(); |
121 | Bool_t ReadTrailer(); | |
e7fd2555 | 122 | void ReadBunch(); |
123 | void ReadAmplitude(); | |
124 | Int_t GetPosition(); | |
5e6235b5 | 125 | UInt_t Get32bitWord(Int_t &index); |
31be3849 | 126 | Int_t ReadRCUTrailer(Int_t &index, Int_t trailerSize); |
e7fd2555 | 127 | |
128 | Int_t fDDLNumber; // index of current DDL number | |
5e6235b5 | 129 | Int_t fPrevDDLNumber;// index of previous DDL number |
130 | Int_t fRCUId; // current RCU identifier | |
131 | Int_t fPrevRCUId; // previous RCU identifier | |
3a291af4 | 132 | Short_t fHWAddress; // current hardware address |
133 | Short_t fPrevHWAddress;// previous hardware address | |
3ea47630 | 134 | Int_t fTime; // index of current time bin |
e7fd2555 | 135 | Int_t fPrevTime; // index of previous time bin |
3ea47630 | 136 | Int_t fSignal; // signal in ADC counts |
634692a1 | 137 | Int_t fTimeBunch; // total length of the current time bunch |
3ea47630 | 138 | |
139 | AliRawReader* fRawReader; // object for reading the raw data | |
140 | ||
3a291af4 | 141 | |
e7fd2555 | 142 | UChar_t* fData; // raw data |
3ea47630 | 143 | |
3ea47630 | 144 | Int_t fPosition; // current (10 bit) position in fData |
145 | Int_t fCount; // counter of words to be read for current trailer | |
e76a0935 | 146 | Int_t fChannelPayloadSize; // |
3ea47630 | 147 | Int_t fBunchLength; // remaining number of signal bins in the current bunch |
148 | ||
5e6235b5 | 149 | UChar_t* fRCUTrailerData; // pointer to RCU trailer data |
150 | Int_t fRCUTrailerSize; // size of RCU trailer data in bytes | |
151 | ||
31be3849 | 152 | // RCU trailer contents |
153 | UInt_t fFECERRA; // contains errors related to ALTROBUS transactions | |
154 | UInt_t fFECERRB; // contains errors related to ALTROBUS transactions | |
155 | UShort_t fERRREG2; // contains errors related to ALTROBUS transactions or trailer of ALTRO channel block | |
7473795a | 156 | UShort_t fERRREG3; // contains number of altro channels skipped due to an address mismatch |
157 | UShort_t fERRREG4; // contains number of altro channels skipped due to a block length mismatch | |
31be3849 | 158 | UShort_t fActiveFECsA; // bit pattern of active FECs in branch A |
159 | UShort_t fActiveFECsB; // bit pattern of active FECs in branch B | |
160 | UInt_t fAltroCFG1; // ALTROCFG1 register | |
161 | UInt_t fAltroCFG2; // ALTROCFG2 and ALTROIF registers | |
162 | ||
3ea47630 | 163 | ClassDef(AliAltroRawStream, 0) // base class for reading Altro raw digits |
164 | }; | |
165 | ||
166 | #endif |