Line data Source code
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 :
8 : //////////////////////////////////////////////////
9 : // //
10 : // Class to provide access to ZDC raw data //
11 : // Author: Chiara Oppedisano //
12 : // //
13 : //////////////////////////////////////////////////
14 :
15 : #include <TObject.h>
16 : #include "AliCDBManager.h"
17 : #include "AliCDBStorage.h"
18 : #include "AliZDCChMap.h"
19 :
20 : class AliRawReader;
21 : struct AliRawDataHeader;
22 :
23 :
24 : class AliZDCRawStream: public TObject {
25 : public :
26 :
27 : // Module type codes
28 : enum ZDCModules{kV965=1, kV830=2, kTRG=3, kTRGI=4, kPU=5, KV1290=6, kV775N=7};
29 :
30 : // Module type codes
31 : enum ZDCGeoAddr{kFirstADCGeo=0, kLastADCGeo=3, kADDADCGeo=5,
32 : kTDCFakeGeo=8, kZDCTDCGeo=4, kADDTDCGeo=6,
33 : kScalerGeo=16, kPUGeo=29, kTrigScales=30, kTrigHistory=31};
34 :
35 : // Signal codes for ZDC
36 : // Same codes used in DAQ configuration file
37 : // To be changed ONLY IF this file is changed!!!
38 : // **** DO NOT CHANGE THE FOLLOWING LINES!!! ****
39 : enum ZDCSignal{
40 : kNotConnected=0, kVoid=1,
41 : kZNAC=2, kZNA1=3, kZNA2=4, kZNA3=5, kZNA4=6,
42 : kZPAC=7, kZPA1=8, kZPA2=9, kZPA3=10, kZPA4=11,
43 : kZNCC=12, kZNC1=13, kZNC2=14, kZNC3=15, kZNC4=16,
44 : kZPCC=17, kZPC1=18, kZPC2=19, kZPC3=20, kZPC4=21,
45 : kZEM1=22, kZEM2=23,
46 : kZDCAMon=24, kZDCCMon=25,
47 : kZNACoot=26, kZNA1oot=27, kZNA2oot=28, kZNA3oot=29, kZNA4oot=30,
48 : kZPACoot=31, kZPA1oot=32, kZPA2oot=33, kZPA3oot=34, kZPA4oot=35,
49 : kZNCCoot=36, kZNC1oot=37, kZNC2oot=38, kZNC3oot=39, kZNC4oot=40,
50 : kZPCCoot=41, kZPC1oot=42, kZPC2oot=43, kZPC3oot=44, kZPC4oot=45,
51 : kZEM1oot=46, kZEM2oot=47,
52 : kZDCAMonoot=48, kZDCCMonoot=49,
53 : kL1MBI=50, kL1CNI=51, kL1SCI=52, kL1EMDI=53, kL0I=54,
54 : kL1MBO=55, kL1CNO=56, kL1SCO=57, kL1EMDO=58,
55 : kHMBCN=59, kHSCEMD=60,
56 : kZNACD=61, kZNA1D=62, kZNA2D=63, kZNA3D=64, kZNA4D=65,
57 : kZPACD=66, kZPA1D=67, kZPA2D=68, kZPA3D=69, kZPA4D=70,
58 : kZNCCD=71, kZNC1D=72, kZNC2D=73, kZNC3D=74, kZNC4D=75,
59 : kZPCCD=76, kZPC1D=77, kZPC2D=78, kZPC3D=79, kZPC4D=80,
60 : kZEM1D=81, kZEM2D=82,
61 : kZDCAMonD=83, kZDCCMonD=84,
62 : kZNAD=85, kZPAD=86, kZNCD=87, kZPCD=88, kZEMD=89,
63 : kZNA0D=90, kZPA0D=91, kZNC0D=92, kZPC0D=93, k1kHzD=94, kGate=95, kAD=96, kCD=97,
64 : kAorCD=98, kAandCD=99, kZEMORD=100, kAorCorZEMORD=101, kAorCorZEMD=102, kAD0=103, kAD1=104, kAD2=105,
65 : kAD3=106, kAD4=107, kAD5=108, kAD6=109, kAD7=110, kAD8=111, kAD9=112, kAD10=113,
66 : kAD11=114, kAD12=115, kAD13=116, kAD14=117, kAD15=118, kAD0D=119, kAD1D=120, kAD2D=121,
67 : kAD3D=122, kAD4D=123, kAD5D=124, kAD6D=125, kAD7D=126, kAD8D=127, kAD9D=128, kAD10D=129,
68 : kAD11D=130, kAD12D=131, kAD13D=132, kAD14D=133, kAD15D=134, kL0=135,
69 : k1ZAC=136, k1ZED=137, k1ZMD=138, k1ZMB=139
70 : };
71 :
72 : // Error codes in raw data streaming
73 : enum EZDCRawStreamError{
74 : kCDHError = 1,
75 : kDARCError = 2,
76 : kZDCDataError = 3,
77 : kInvalidADCModule = 4,
78 : kInvalidSector = 5};
79 :
80 : AliZDCRawStream(AliRawReader* rawReader);
81 : virtual ~AliZDCRawStream();
82 : virtual Bool_t Next();
83 :
84 : virtual void ReadChMap();
85 :
86 : virtual void ReadCDHHeader();
87 :
88 0 : UInt_t GetRawBuffer() const {return fBuffer;}
89 0 : Int_t GetReadOutCard() const {return fReadOutCard;}
90 :
91 0 : Int_t GetDeadfaceOffset() const {return fDeadfaceOffset;}
92 0 : Int_t GetDeadbeefOffset() const {return fDeadbeefOffset;}
93 0 : Int_t GetDataOffset() const {return fDataOffset;}
94 :
95 1380 : Int_t GetSector(Int_t i) const {return fSector[i];}
96 0 : Int_t GetModType() const {return fModType;}
97 2498 : Int_t GetADCModule() const {return fADCModule;}
98 0 : Int_t GetADCNChannels() const {return fADCNChannels;}
99 690 : Int_t GetADCChannel() const {return fADCChannel;}
100 690 : Int_t GetADCValue() const {return fADCValue;}
101 690 : Int_t GetADCGain() const {return fADCGain;}
102 :
103 0 : Int_t GetModuleGEO() const {return fADCModule;}
104 0 : Int_t GetChannel() const {return fADCChannel;}
105 :
106 0 : Bool_t IsZDCTDCHeader() const {return fIsZDCTDCHeader;}
107 0 : Bool_t IsZDCTDCDatum() const {return fIsZDCTDCdatum;}
108 0 : Int_t GetZDCTDCDatum() const {return fZDCTDCdatum;}
109 :
110 0 : Bool_t IsADDADCChannel() const {return fIsADDChannel;}
111 0 : Int_t GetADDADCDatum() const {return fADDADCdatum;}
112 0 : Bool_t IsADDTDCdatum() const {return fIsADDTDCdatum;}
113 0 : Int_t GetADDTDCDatum() const {return fADDTDCdatum;}
114 :
115 : AliCDBStorage *SetStorage(const char* uri);
116 :
117 : // Map from OCDB
118 : AliZDCChMap *GetChMap() const;
119 : // ADC map
120 720 : Int_t GetNChannelsOn() const {return fNChannelsOn;}
121 0 : Int_t GetCabledSignal() const {return fCabledSignal;}
122 0 : Int_t GetADCModFromMap(Int_t i) const {return fMapADC[i][0];}
123 0 : Int_t GetADCChFromMap(Int_t i) const {return fMapADC[i][1];}
124 0 : Int_t GetADCSignFromMap(Int_t i) const {return fMapADC[i][2];}
125 0 : Int_t GetDetectorFromMap(Int_t i) const {return fMapADC[i][3];}
126 0 : Int_t GetTowerFromMap(Int_t i) const {return fMapADC[i][4];}
127 : // Scaler map
128 0 : Int_t GetScalerModFromMap(Int_t i) const {return fScalerMap[i][0];}
129 0 : Int_t GetScalerChFromMap(Int_t i) const {return fScalerMap[i][1];}
130 0 : Int_t GetScalerSignFromMap(Int_t i) const {return fScalerMap[i][2];}
131 0 : Int_t GetScDetectorFromMap(Int_t i) const {return fScalerMap[i][3];}
132 0 : Int_t GetScTowerFromMap(Int_t i) const {return fScalerMap[i][4];}
133 : // TDC map
134 0 : Int_t GetTDCModFromMap(Int_t i) const {return fTDCMap[i][0];}
135 0 : Int_t GetTDCChFromMap(Int_t i) const {return fTDCMap[i][1];}
136 0 : Int_t GetTDCSignFromMap(Int_t i) const {return fTDCMap[i][2];}
137 :
138 0 : Bool_t IsCalibration() const {return fIsCalib;}
139 0 : Bool_t IsDARCHeader() const {return fIsDARCHeader;}
140 0 : Bool_t IsHeaderMapping() const {return fIsHeaderMapping;}
141 0 : Bool_t IsChMapping() const {return fIsChMapping;}
142 3920 : Bool_t IsADCDataWord() const {return fIsADCDataWord;}
143 0 : Bool_t IsADCHeader() const {return fIsADCHeader;}
144 0 : Bool_t IsADCEOB() const {return fIsADCEOB;}
145 1440 : Bool_t IsUnderflow() const {return fIsUnderflow;}
146 1416 : Bool_t IsOverflow() const {return fIsOverflow;}
147 :
148 0 : UInt_t GetScGeo() const {return fScGeo;}
149 0 : UInt_t GetScNWords() const {return fScNWords;}
150 0 : UInt_t GetScTriggerSource() const {return fScTriggerSource;}
151 0 : UInt_t GetTriggerNumber() const {return fScTriggerNumber;}
152 0 : UInt_t GetTriggerCount() const {return fScEvCounter;}
153 0 : Bool_t IsScHeaderRead() const {return fIsScHeaderRead;}
154 0 : Bool_t IsScEventGood() const {return fIsScEventGood;}
155 0 : Bool_t IsScalerWord() const {return fIsScalerWord;}
156 :
157 0 : UInt_t GetDetectorPattern() const {return fDetPattern;}
158 :
159 48 : Bool_t IstriggerHistoryWord() const {return fIsTriggerHistory;}
160 0 : Int_t GetTriggerInput2CTP() const {return *fCPTInput;}
161 : Bool_t IsCPTInputMBTrigger()
162 0 : {if(fCPTInput[0]==1) return kTRUE; else return kFALSE;}
163 : Bool_t IsCPTInputCentralTrigger()
164 0 : {if(fCPTInput[1]==1) return kTRUE; else return kFALSE;}
165 : Bool_t IsCPTInputSemiCentralTrigger()
166 0 : {if(fCPTInput[2]==1) return kTRUE; else return kFALSE;}
167 : Bool_t IsCPTInputEMDTrigger()
168 0 : {if(fCPTInput[3]==1) return kTRUE; else return kFALSE;}
169 :
170 720 : Bool_t IsADCEventGood() const {return fIsADCEventGood;}
171 0 : Bool_t IsL0BitSet() const {return fIsL0BitSet;}
172 0 : Bool_t IsPileUpEvent() const {return fIsPileUpEvent;}
173 :
174 0 : void SetReadOutCard(Int_t icard) {fReadOutCard=icard;}
175 0 : void SetDataOffset(Int_t iOffset) {fDataOffset=iOffset;}
176 0 : void SetNChannelsOn(Int_t val) {fNChannelsOn = val;}
177 0 : void SetSector(Int_t i, Int_t val) {fSector[i] = val;}
178 0 : void SetMapRead(Bool_t value) {fIsMapRead=value;}
179 : // Set ADC map
180 0 : void SetMapADCMod(Int_t iraw, Int_t imod) {if(iraw<48) fMapADC[iraw][0]=imod;}
181 0 : void SetMapADCCh(Int_t iraw, Int_t ich) {if(iraw<48) fMapADC[iraw][1]=ich;}
182 0 : void SetMapADCSig(Int_t iraw, Int_t isig) {if(iraw<48) fMapADC[iraw][2]=isig;}
183 0 : void SetMapDet(Int_t iraw, Int_t idet) {if(iraw<48) fMapADC[iraw][3]=idet;}
184 0 : void SetMapTow(Int_t iraw, Int_t itow) {if(iraw<48) fMapADC[iraw][4]=itow;}
185 : // SetTDC map
186 0 : void SetTDCModFromMap(Int_t ich, Int_t mod) {if(ich<32) fTDCMap[ich][0]=mod;}
187 0 : void SetTDCChFromMap(Int_t ich, Int_t ch) {if(ich<32) fTDCMap[ich][1]=ch;}
188 0 : void SetTDCSignFromMap(Int_t ich, Int_t sig) {if(ich<32) fTDCMap[ich][2]=sig;}
189 :
190 0 : void SetReadCDH(Bool_t value) {fReadCDH=value;}
191 0 : void SetSODReading(Bool_t iset) {fSODReading = iset;}
192 :
193 0 : void SetCabledSignal(int sigcode) {fCabledSignal = sigcode;}
194 :
195 : private :
196 : AliZDCRawStream(const AliZDCRawStream& stream);
197 : AliZDCRawStream& operator = (const AliZDCRawStream& stream);
198 :
199 : AliRawReader* fRawReader; // object for reading the raw data
200 :
201 : // Data for buffer decoding
202 : UInt_t fBuffer; // [DARC header +] ADC buffer
203 : Int_t fReadOutCard; // 0 for DARC, 1 for ZRC
204 : UInt_t fEvType; // Event type
205 : Int_t fPosition; // bit position in buffer data word
206 :
207 : // Boolean variables indicating data type
208 : Bool_t fIsCalib; // True when calibration run
209 : Bool_t fIsDARCHeader; // True when DARC header
210 : Bool_t fIsHeaderMapping; // True when reading header mapping
211 : Bool_t fIsChMapping; // True when reading ch. mapping
212 : Bool_t fIsADCDataWord; // True when data word
213 : Bool_t fIsADCHeader; // True when ADC header
214 : Bool_t fIsADCEOB; // True when EOB
215 : Bool_t fSODReading; // True when reading SOD (DA)
216 : Bool_t fIsMapRead; // True if map is already read
217 : Bool_t fReadCDH; // False for sim raw data (uncorrect CDH!)
218 :
219 : Int_t fDeadfaceOffset; // deadface offset
220 : Int_t fDeadbeefOffset; // deadbeef offset
221 : Int_t fDataOffset; // data offset
222 :
223 : // ADC signal
224 : Int_t fSector[2]; // [detector, sector]
225 : Int_t fModType; // Module type
226 : Int_t fADCModule; // ADC module = GEO address for scaler, trigger card, P.U.
227 : Int_t fADCNChannels; // number of ADC ch.
228 : Int_t fADCChannel; // ADC channel = ch. for scaler, trigger card, P.U.
229 : Int_t fADCValue; // ADC channel
230 : Int_t fADCGain; // ADC gain (0=high range; 1=low range)
231 : Bool_t fIsUnderflow; // ADC underflow
232 : Bool_t fIsOverflow; // ADC overflow
233 :
234 : // Scaler
235 : UInt_t fScGeo; // scaler GEO address
236 : UInt_t fScNWords; // no. of words in scaler event
237 : UInt_t fScTriggerSource; // Trigger source
238 : UInt_t fScTriggerNumber; // no. of triggers
239 : Bool_t fIsScEventGood; // true if scaler event is good
240 : Bool_t fIsScHeaderRead; // true if scaler header is read
241 : Int_t fScStartCounter; // position in the buffer where scaler data begins
242 : UInt_t fScEvCounter; // event counter
243 : Bool_t fIsScalerWord; // is scaler word (not header)
244 :
245 : // Pattern Unit
246 : UInt_t fDetPattern; // word from the pattern unit
247 :
248 : // Trigger card
249 : // (1) trigger counts
250 : Int_t fTrigCountNWords; // no. of words to read from trigger card scalers
251 : Bool_t fIsTriggerScaler; // Trigger card scalers - 1st word read
252 : Int_t fTrigCountStart; // Trigger card scalers - counter
253 : Int_t fMBTrigInput; // MB trigger input to trigger card
254 : Int_t fCentralTrigInput; // CENTRAL trigger input to trigger card
255 : Int_t fSCentralTrigInput;// SEMICENTRAL trigger input to trigger card
256 : Int_t fEMDTrigInput; // EMD trigger input to trigger card
257 : Int_t fL0Received; // L0 received by the trigger card
258 : Int_t fMBtrig2CTP; // trigger input to the CTP for MB
259 : Int_t fCentralTrig2CTP; // trigger input to the CTP for CENTRAL
260 : Int_t fSCentralTrig2CTP; // trigger input to the CTP for SEMICENTRAL
261 : Int_t fEMDTrig2CTP; // trigger input to the CTP for EMD
262 : // (2) trigger history
263 : Int_t fTrigHistNWords; // no. of words to read from trigger history data
264 : Bool_t fIsTriggerHistory; // Trigger history - 1st word read
265 : Int_t fTrigHistStart; // Trigger card history - counter
266 : Int_t fPileUpBit1stWord; // Pile up bit from 1st word
267 : Int_t fL0Bit1stWord; // L0 bit from 1st word
268 : UInt_t fCentralTrigHist; // history for CENTRAL trigger
269 : UInt_t fMBTrigHist; // history for CENTRAL trigger
270 : Int_t fPileUpBit2ndWord; // Pile up bit from 2nd word
271 : Int_t fL0Bit2ndWord; // L0 bit from 2nd word
272 : UInt_t fSCentralTrigHist; // history for SEMICENTRAL trigger
273 : UInt_t fEMDTrigHist; // history for EMD trigger
274 : Int_t fCPTInput[4]; // Trigger sent to the CTP
275 :
276 : // Channel mapping
277 : Int_t fNChannelsOn; // No. of signals/ADC ch. used
278 : Int_t fCurrentCh; // current mapped ADC ch.
279 : Int_t fCabledSignal; // physics signal (from enum)
280 : Int_t fMapADC[48][5]; // ADC map {ADC mod., ch., signal, det., sec.}
281 : Int_t fCurrScCh; // current mapped scaler ch.
282 : Int_t fScalerMap[32][5]; // Scaler map {Scaler mod., ch., signal, det., sec.}
283 : Int_t fCurrTDCCh; // current mapped TDC ch.
284 : Int_t fTDCMap[32][3]; // TDC map {Scaler mod., ch., signal}
285 :
286 : // Checks over raw data event quality
287 : Bool_t fIsADCEventGood; // true if not valid datum not corrupted
288 : Bool_t fIsL0BitSet; // true if L0 bit in history words = 1
289 : Bool_t fIsPileUpEvent; // true if pile up bits in history words = 0
290 :
291 : // ADD ADC
292 : Bool_t fIsADDChannel; // true if datum is an ADD ADC channel
293 : Int_t fADDADCdatum; // ADD ADC datum
294 :
295 : // TDCs
296 : Bool_t fIsTDCHeaderRead; // true when streaming one of the 2 TDCs
297 : Int_t fTDCStartCounter; // counts after a TDC header
298 : //
299 : Bool_t fIsZDCTDCHeader; // true if datum is a ZDC TDC header
300 : Bool_t fIsZDCTDCdatum; // true if the current is a TDC datum
301 : Int_t fZDCTDCdatum; // datum for ZDC TDC
302 : Int_t fZDCTDCsignal; // signal connected in ZDC TDC
303 : //
304 : Bool_t fIsADDTDCHeader; // true if datum is an ADD TDC channel
305 : Bool_t fIsADDTDCdatum; // true when streaming ADD TDC data
306 : Int_t fADDTDCdatum; // datum for ADD TDC
307 : //
308 : Bool_t fIsPARSet; // Adding the check for PAR
309 :
310 20 : ClassDef(AliZDCRawStream, 22) // class for reading ZDC raw data
311 : };
312 :
313 : #endif
|