]>
Commit | Line | Data |
---|---|---|
8309c1ab | 1 | #ifndef ALIZDCRAWSTREAM_H |
2 | #define ALIZDCRAWSTREAM_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 | ||
1ee299a5 | 8 | ////////////////////////////////////////////////// |
9 | // // | |
10 | // Class to provide access to ZDC raw data // | |
11 | // Author: Chiara Oppedisano // | |
12 | // // | |
13 | ////////////////////////////////////////////////// | |
8309c1ab | 14 | |
15 | #include <TObject.h> | |
fee50699 | 16 | #include "AliCDBManager.h" |
17 | #include "AliCDBStorage.h" | |
18 | #include "AliZDCChMap.h" | |
8309c1ab | 19 | |
20 | class AliRawReader; | |
1ee299a5 | 21 | class AliRawDataHeader; |
8309c1ab | 22 | |
23 | ||
24 | class AliZDCRawStream: public TObject { | |
25 | public : | |
cc2abffd | 26 | AliZDCRawStream(AliRawReader* rawReader); |
8309c1ab | 27 | virtual ~AliZDCRawStream(); |
8309c1ab | 28 | virtual Bool_t Next(); |
c93c022b | 29 | |
30 | virtual void ReadChMap(); | |
8309c1ab | 31 | |
1ee299a5 | 32 | virtual void ReadCDHHeader(); |
8309c1ab | 33 | |
c93c022b | 34 | UInt_t GetRawBuffer() const {return fBuffer;} |
1ee299a5 | 35 | |
c93c022b | 36 | Int_t GetDeadfaceOffset() const {return fDeadfaceOffset;} |
37 | Int_t GetDeadbeefOffset() const {return fDeadbeefOffset;} | |
38 | Int_t GetDataOffset() const {return fDataOffset;} | |
39 | ||
40 | Int_t GetSector(Int_t i) const {return fSector[i];} | |
41 | Int_t GetModType() const {return fModType;} | |
42 | Int_t GetADCModule() const {return fADCModule;} | |
43 | Int_t GetADCNChannels() const {return fADCNChannels;} | |
44 | Int_t GetADCChannel() const {return fADCChannel;} | |
45 | Int_t GetADCValue() const {return fADCValue;} | |
46 | Int_t GetADCGain() const {return fADCGain;} | |
fee50699 | 47 | |
fee50699 | 48 | AliCDBStorage *SetStorage(const char* uri); |
c3986754 | 49 | |
50 | // Map from OCDB | |
fee50699 | 51 | AliZDCChMap *GetChMap() const; |
c3986754 | 52 | // ADC map |
9d0b658a | 53 | Int_t GetNChannelsOn() const {return fNChannelsOn;} |
fee50699 | 54 | Int_t GetCabledSignal() const {return fCabledSignal;} |
c93c022b | 55 | Int_t GetADCModFromMap(Int_t i) const {return fMapADC[i][0];} |
56 | Int_t GetADCChFromMap(Int_t i) const {return fMapADC[i][1];} | |
57 | Int_t GetADCSignFromMap(Int_t i) const {return fMapADC[i][2];} | |
58 | Int_t GetDetectorFromMap(Int_t i) const {return fMapADC[i][3];} | |
59 | Int_t GetTowerFromMap(Int_t i) const {return fMapADC[i][4];} | |
c3986754 | 60 | // Scaler map |
61 | Int_t GetScalerModFromMap(Int_t i) const {return fScalerMap[i][0];} | |
62 | Int_t GetScalerChFromMap(Int_t i) const {return fScalerMap[i][1];} | |
63 | Int_t GetScalerSignFromMap(Int_t i) const {return fScalerMap[i][2];} | |
64 | Int_t GetScDetectorFromMap(Int_t i) const {return fScalerMap[i][3];} | |
65 | Int_t GetScTowerFromMap(Int_t i) const {return fScalerMap[i][4];} | |
66 | ||
67 | Bool_t IsCalibration() const {return fIsCalib;} | |
68 | Bool_t IsDARCHeader() const {return fIsDARCHeader;} | |
69 | Bool_t IsHeaderMapping() const {return fIsHeaderMapping;} | |
70 | Bool_t IsChMapping() const {return fIsChMapping;} | |
71 | Bool_t IsADCDataWord() const {return fIsADCDataWord;} | |
72 | Bool_t IsADCHeader() const {return fIsADCHeader;} | |
73 | Bool_t IsADCEOB() const {return fIsADCEOB;} | |
74 | Bool_t IsUnderflow() const {return fIsUnderflow;} | |
75 | Bool_t IsOverflow() const {return fIsOverflow;} | |
e42bdf10 | 76 | |
e42bdf10 | 77 | UInt_t GetScGeo() const {return fScGeo;} |
c083685e | 78 | UInt_t GetScNWords() const {return fScNWords;} |
79 | UInt_t GetScTriggerSource() const {return fScTriggerSource;} | |
e42bdf10 | 80 | UInt_t GetTriggerNumber() const {return fScTriggerNumber;} |
c083685e | 81 | UInt_t GetTriggerCount() const {return fScEvCounter;} |
c3986754 | 82 | |
83 | Bool_t IsEventGood() const {return fIsEventGood;} | |
84 | Bool_t IsL0BitSet() const {return fIsL0BitSet;} | |
85 | Bool_t IsPileUpOff() const {return fIsPileUpOff;} | |
9d0b658a | 86 | |
87 | void SetNChannelsOn(Int_t val) {fNChannelsOn = val;} | |
1ee299a5 | 88 | void SetSector(Int_t i, Int_t val) {fSector[i] = val;} |
89 | void SetMapADCMod(Int_t iraw, Int_t imod) {fMapADC[iraw][0]=imod;} | |
fee50699 | 90 | void SetMapADCCh(Int_t iraw, Int_t ich) {fMapADC[iraw][1]=ich;} |
1ee299a5 | 91 | void SetMapADCSig(Int_t iraw, Int_t isig) {fMapADC[iraw][2]=isig;} |
fee50699 | 92 | void SetMapDet(Int_t iraw, Int_t idet) {fMapADC[iraw][3]=idet;} |
93 | void SetMapTow(Int_t iraw, Int_t itow) {fMapADC[iraw][4]=itow;} | |
94 | ||
95 | void SetSODReading(Bool_t iset) {fSODReading = iset;} | |
1ee299a5 | 96 | |
f9f99efb | 97 | // Error codes in raw data streaming |
1ee299a5 | 98 | enum EZDCRawStreamError{ |
99 | kCDHError = 1, | |
100 | kDARCError = 2, | |
101 | kZDCDataError = 3, | |
612c76c4 | 102 | kInvalidADCModule = 4, |
103 | kInvalidSector = 5}; | |
f9f99efb | 104 | |
c3986754 | 105 | // Module type codes |
106 | enum{kV965=1, kV830=2, kTRG=3, kTRGI=4, kPU=5}; | |
107 | ||
f9f99efb | 108 | // Signal codes for ZDC |
109 | // Same codes used in DAQ configuration file | |
110 | // To be changed ONLY IF this file is changed!!! | |
111 | // **** DO NOT CHANGE THE FOLLOWING LINES!!! **** | |
1ee299a5 | 112 | enum ZDCSignal{kNotConnected=0, kVoid=1, |
113 | kZNAC=2, kZNA1=3, kZNA2=4, kZNA3=5, kZNA4=6, | |
114 | kZPAC=7, kZPA1=8, kZPA2=9, kZPA3=10, kZPA4=11, | |
115 | kZNCC=12, kZNC1=13, kZNC2=14, kZNC3=15, kZNC4=16, | |
116 | kZPCC=17, kZPC1=18, kZPC2=19, kZPC3=20, kZPC4=21, | |
117 | kZEM1=22, kZEM2=23, | |
118 | kZDCAMon=24, kZDCCMon=25, | |
119 | kZNACoot=26, kZNA1oot=27, kZNA2oot=28, kZNA3oot=29, kZNA4oot=30, | |
120 | kZPACoot=31, kZPA1oot=32, kZPA2oot=33, kZPA3oot=34, kZPA4oot=35, | |
121 | kZNCCoot=36, kZNC1oot=37, kZNC2oot=38, kZNC3oot=39, kZNC4oot=40, | |
122 | kZPCCoot=41, kZPC1oot=42, kZPC2oot=43, kZPC3oot=44, kZPC4oot=45, | |
123 | kZEM1oot=46, kZEM2oot=47, | |
c3986754 | 124 | kZDCAMonoot=48, kZDCCMonoot=49, |
125 | kL1MBI=50, kL1CNI=51, kL1SCI=52, kL1EMDI=53, kL0I=54, | |
126 | kL1MBO=55, kL1CNO=56, kL1SCO=57, kL1EMDO=58, | |
127 | kHMBCN=59, kHSCEMD=60}; | |
1ee299a5 | 128 | |
8309c1ab | 129 | private : |
130 | AliZDCRawStream(const AliZDCRawStream& stream); | |
131 | AliZDCRawStream& operator = (const AliZDCRawStream& stream); | |
132 | ||
1ee299a5 | 133 | AliRawReader* fRawReader; // object for reading the raw data |
f9f99efb | 134 | |
135 | // Data for buffer decoding | |
1ee299a5 | 136 | UInt_t fBuffer; // DARC header + ADC buffer |
137 | UInt_t fEvType; // Event type | |
138 | Int_t fPosition; // bit position in buffer data word | |
139 | ||
f9f99efb | 140 | // Boolean variables indicating data type |
1ee299a5 | 141 | Bool_t fIsCalib; // True when calibration run |
142 | Bool_t fIsDARCHeader; // True when DARC header | |
c3986754 | 143 | Bool_t fIsHeaderMapping; // True when reading header mapping |
1ee299a5 | 144 | Bool_t fIsChMapping; // True when reading ch. mapping |
145 | Bool_t fIsADCDataWord; // True when data word | |
146 | Bool_t fIsADCHeader; // True when ADC header | |
147 | Bool_t fIsADCEOB; // True when EOB | |
fee50699 | 148 | Bool_t fSODReading; // True when reading SOD (DA) |
149 | Bool_t fIsMapRead; // True if map is already read | |
1ee299a5 | 150 | |
151 | // From CDH | |
152 | UInt_t fDARCEvBlockLenght; // DARC block length | |
153 | UInt_t fDARCBlockAttributes;// DARC block attributes | |
8309c1ab | 154 | |
1ee299a5 | 155 | Int_t fDeadfaceOffset; // deadface offset |
156 | Int_t fDeadbeefOffset; // deadbeef offset | |
157 | Int_t fDataOffset; // data offset | |
158 | ||
159 | // ADC signal | |
160 | Int_t fSector[2]; // [detector, sector] | |
161 | Int_t fModType; // Module type | |
c3986754 | 162 | Int_t fADCModule; // ADC module = GEO address for scaler, trigger card, P.U. |
1ee299a5 | 163 | Int_t fADCNChannels; // number of ADC ch. |
c3986754 | 164 | Int_t fADCChannel; // ADC channel = ch. for scaler, trigger card, P.U. |
1ee299a5 | 165 | Int_t fADCValue; // ADC channel |
166 | Int_t fADCGain; // ADC gain (0=high range; 1=low range) | |
c33b6ca6 | 167 | Bool_t fIsUnderflow; // ADC underflow |
168 | Bool_t fIsOverflow; // ADC overflow | |
1ee299a5 | 169 | |
e42bdf10 | 170 | // Scaler |
e42bdf10 | 171 | UInt_t fScGeo; // scaler GEO address |
c083685e | 172 | UInt_t fScNWords; // no. of words in scaler event |
173 | UInt_t fScTriggerSource; // Trigger source | |
e42bdf10 | 174 | UInt_t fScTriggerNumber; // no. of triggers |
c083685e | 175 | UInt_t fIsScEventGood; // true if scaler event is good |
176 | UInt_t fIsScHeaderRead; // true if scaler event is good | |
177 | Int_t fScStartCounter; // position in the buffer where scaler data begins | |
178 | UInt_t fScEvCounter; // event counter | |
e42bdf10 | 179 | |
1ee299a5 | 180 | // Channel mapping |
c3986754 | 181 | Int_t fNChannelsOn; // No. of signals/ADC ch. used |
182 | Int_t fCurrentCh; // current mapped ADC ch. | |
183 | Int_t fCabledSignal; // physics signal (from enum) | |
184 | Int_t fMapADC[48][5]; // ADC map {ADC mod., ch., signal, det., sec.} | |
185 | Int_t fCurrScCh; // current mapped scaler ch. | |
186 | Int_t fScalerMap[32][5]; // Scaler map {Scaler mod., ch., signal, det., sec.} | |
187 | ||
188 | // Checks over raw data event quality | |
189 | Bool_t fIsEventGood; // true if not valid datum not corrupted | |
190 | Bool_t fIsL0BitSet; // true if L0 bit in history words = 1 | |
191 | Bool_t fIsPileUpOff; // true if pile up bits in history words = 0 | |
192 | ||
193 | ClassDef(AliZDCRawStream, 11) // class for reading ZDC raw data | |
8309c1ab | 194 | }; |
195 | ||
196 | #endif |