]>
Commit | Line | Data |
---|---|---|
8309c1ab | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* $Id$ */ | |
17 | ||
18 | /////////////////////////////////////////////////////////////////////////////// | |
83347831 | 19 | // // |
20 | // This class provides access to ZDC digits in raw data. // | |
21 | // // | |
22 | // It loops over all ZDC digits in the raw data given by the AliRawReader. // | |
23 | // The Next method goes to the next digit. If there are no digits left // | |
24 | // it returns kFALSE. // | |
25 | // Getters provide information about the current digit. // | |
26 | // // | |
8309c1ab | 27 | /////////////////////////////////////////////////////////////////////////////// |
28 | ||
11b06725 | 29 | #include <TSystem.h> |
8309c1ab | 30 | #include "AliZDCRawStream.h" |
31 | #include "AliRawReader.h" | |
1ee299a5 | 32 | #include "AliRawDataHeader.h" |
33 | #include "AliRawEventHeaderBase.h" | |
cc2abffd | 34 | #include "AliLog.h" |
8309c1ab | 35 | |
36 | ClassImp(AliZDCRawStream) | |
37 | ||
38 | ||
39 | //_____________________________________________________________________________ | |
40 | AliZDCRawStream::AliZDCRawStream(AliRawReader* rawReader) : | |
41 | fRawReader(rawReader), | |
1ee299a5 | 42 | fBuffer(0), |
44455047 | 43 | fReadOutCard(-1), |
1ee299a5 | 44 | fEvType(0), |
45 | fPosition(0), | |
46 | fIsCalib(kFALSE), | |
47 | fIsDARCHeader(kFALSE), | |
c3986754 | 48 | fIsHeaderMapping(kFALSE), |
1ee299a5 | 49 | fIsChMapping(kFALSE), |
50 | fIsADCDataWord(kFALSE), | |
51 | fIsADCHeader(kFALSE), | |
52 | fIsADCEOB(kFALSE), | |
fee50699 | 53 | fSODReading(kFALSE), |
54 | fIsMapRead(kFALSE), | |
44455047 | 55 | fDeadfaceOffset(-1), |
56 | fDeadbeefOffset(-1), | |
1ee299a5 | 57 | fDataOffset(0), |
58 | fModType(-1), | |
59 | fADCModule(-1), | |
60 | fADCNChannels(-1), | |
786b72f5 | 61 | fADCChannel(-1), |
cc2abffd | 62 | fADCValue(-1), |
1ee299a5 | 63 | fADCGain(-1), |
c33b6ca6 | 64 | fIsUnderflow(kFALSE), |
65 | fIsOverflow(kFALSE), | |
fee50699 | 66 | fScGeo(0), |
c083685e | 67 | fScNWords(0), |
68 | fScTriggerSource(0), | |
e42bdf10 | 69 | fScTriggerNumber(0), |
c083685e | 70 | fIsScEventGood(kTRUE), |
71 | fIsScHeaderRead(kFALSE), | |
72 | fScStartCounter(0), | |
73 | fScEvCounter(0), | |
ad3a602e | 74 | fIsScalerWord(kFALSE), |
da090841 | 75 | fDetPattern(0), |
76 | fTrigCountNWords(0), | |
f70a5526 | 77 | fIsTriggerScaler(kFALSE), |
da090841 | 78 | fTrigCountStart(0), |
79 | fMBTrigInput(0), | |
80 | fCentralTrigInput(0), | |
81 | fSCentralTrigInput(0), | |
82 | fEMDTrigInput(0), | |
83 | fL0Received(0), | |
84 | fMBtrig2CTP(0), | |
85 | fCentralTrig2CTP(0), | |
86 | fSCentralTrig2CTP(0), | |
87 | fEMDTrig2CTP(0), | |
88 | fTrigHistNWords(0), | |
f70a5526 | 89 | fIsTriggerHistory(kFALSE), |
90 | fTrigHistStart(0), | |
da090841 | 91 | fPileUpBit1stWord(0), |
92 | fL0Bit1stWord(0), | |
93 | fCentralTrigHist(0), | |
94 | fMBTrigHist(0), | |
95 | fPileUpBit2ndWord(0), | |
96 | fL0Bit2ndWord(0), | |
97 | fSCentralTrigHist(0), | |
98 | fEMDTrigHist(0), | |
58671297 | 99 | fNChannelsOn(0), |
c3986754 | 100 | fCurrentCh(-1), |
101 | fCabledSignal(-1), | |
102 | fCurrScCh(-1), | |
da090841 | 103 | fIsADCEventGood(kTRUE), |
c3986754 | 104 | fIsL0BitSet(kTRUE), |
da090841 | 105 | fIsPileUpEvent(kFALSE) |
8309c1ab | 106 | { |
abf60186 | 107 | // Create an object to read ZDC raw digits |
1ee299a5 | 108 | fRawReader->Reset(); |
362c9d61 | 109 | fRawReader->Select("ZDC"); |
1ee299a5 | 110 | // |
58671297 | 111 | const int kNch = 48; |
112 | for(Int_t i=0; i<kNch; i++){ | |
c3986754 | 113 | for(Int_t j=0; j<5; j++){ |
114 | fMapADC[i][j]=-1; | |
115 | if(i<32) fScalerMap[i][j]=-1; | |
116 | } | |
1ee299a5 | 117 | } |
da090841 | 118 | |
119 | for(Int_t k=0; k<4; k++) fCPTInput[k] = 0; | |
1ee299a5 | 120 | |
8309c1ab | 121 | } |
122 | ||
123 | //_____________________________________________________________________________ | |
124 | AliZDCRawStream::AliZDCRawStream(const AliZDCRawStream& stream) : | |
a718c993 | 125 | TObject(stream), |
c61a7285 | 126 | fRawReader(stream.fRawReader), |
1ee299a5 | 127 | fBuffer(stream.GetRawBuffer()), |
44455047 | 128 | fReadOutCard(stream.GetReadOutCard()), |
1ee299a5 | 129 | fEvType(stream.fEvType), |
130 | fPosition(stream.fPosition), | |
131 | fIsCalib(stream.fIsCalib), | |
132 | fIsDARCHeader(stream.fIsDARCHeader), | |
c3986754 | 133 | fIsHeaderMapping(stream.fIsHeaderMapping), |
1ee299a5 | 134 | fIsChMapping(stream.fIsChMapping), |
135 | fIsADCDataWord(stream.fIsADCDataWord), | |
136 | fIsADCHeader(stream.fIsADCHeader), | |
137 | fIsADCEOB(stream.fIsADCEOB), | |
fee50699 | 138 | fSODReading(stream.fSODReading), |
139 | fIsMapRead(stream.fIsMapRead), | |
1ee299a5 | 140 | fDeadfaceOffset(stream.GetDeadfaceOffset()), |
141 | fDeadbeefOffset(stream.GetDeadbeefOffset()), | |
142 | fDataOffset(stream.GetDataOffset()), | |
143 | fModType(stream.GetModType()), | |
a718c993 | 144 | fADCModule(stream.GetADCModule()), |
1ee299a5 | 145 | fADCNChannels(stream.GetADCNChannels()), |
a718c993 | 146 | fADCChannel(stream.GetADCChannel()), |
147 | fADCValue(stream.GetADCValue()), | |
148 | fADCGain(stream.GetADCGain()), | |
c33b6ca6 | 149 | fIsUnderflow(stream.fIsUnderflow), |
150 | fIsOverflow(stream.fIsOverflow), | |
e42bdf10 | 151 | fScGeo(stream.GetScGeo()), |
c083685e | 152 | fScNWords(stream.GetScNWords()), |
153 | fScTriggerSource(stream.GetScTriggerSource()), | |
22fe5e66 | 154 | fScTriggerNumber(stream.fScTriggerNumber), |
e42bdf10 | 155 | fIsScEventGood(stream.fIsScEventGood), |
c083685e | 156 | fIsScHeaderRead(stream.fIsScHeaderRead), |
157 | fScStartCounter(stream.fScStartCounter), | |
158 | fScEvCounter(stream.fScEvCounter), | |
ad3a602e | 159 | fIsScalerWord(stream.fIsScalerWord), |
da090841 | 160 | fDetPattern(stream.fDetPattern), |
161 | fTrigCountNWords(stream.fTrigCountNWords), | |
f70a5526 | 162 | fIsTriggerScaler(stream.fIsTriggerScaler), |
da090841 | 163 | fTrigCountStart(stream.fTrigCountStart), |
164 | fMBTrigInput(stream.fMBTrigInput), | |
165 | fCentralTrigInput(stream.fCentralTrigInput), | |
166 | fSCentralTrigInput(stream.fSCentralTrigInput), | |
167 | fEMDTrigInput(stream.fEMDTrigInput), | |
168 | fL0Received(stream.fL0Received), | |
169 | fMBtrig2CTP(stream.fMBtrig2CTP), | |
170 | fCentralTrig2CTP(stream.fCentralTrig2CTP), | |
171 | fSCentralTrig2CTP(stream.fSCentralTrig2CTP), | |
172 | fEMDTrig2CTP(stream.fEMDTrig2CTP), | |
173 | fTrigHistNWords(stream.fTrigHistNWords), | |
f70a5526 | 174 | fIsTriggerHistory(stream.fIsTriggerHistory), |
175 | fTrigHistStart(stream.fTrigHistStart), | |
da090841 | 176 | fPileUpBit1stWord(stream.fPileUpBit1stWord), |
177 | fL0Bit1stWord(stream.fL0Bit1stWord), | |
178 | fCentralTrigHist(stream.fCentralTrigHist), | |
179 | fMBTrigHist(stream.fMBTrigHist), | |
180 | fPileUpBit2ndWord(stream.fPileUpBit2ndWord), | |
181 | fL0Bit2ndWord(stream.fL0Bit2ndWord), | |
182 | fSCentralTrigHist(stream.fSCentralTrigHist), | |
183 | fEMDTrigHist(stream.fEMDTrigHist), | |
9d0b658a | 184 | fNChannelsOn(stream.fNChannelsOn), |
c3986754 | 185 | fCurrentCh(stream.fCurrentCh), |
186 | fCabledSignal(stream.GetCabledSignal()), | |
187 | fCurrScCh(stream.fCurrScCh), | |
da090841 | 188 | fIsADCEventGood(stream.fIsADCEventGood), |
c3986754 | 189 | fIsL0BitSet(stream.fIsL0BitSet), |
da090841 | 190 | fIsPileUpEvent(stream.fIsPileUpEvent) |
c3986754 | 191 | |
8309c1ab | 192 | { |
abf60186 | 193 | // Copy constructor |
58671297 | 194 | const int kNch = 48; |
c0aec6f6 | 195 | for(Int_t j=0; j<2; j++) fSector[j] = stream.GetSector(j); |
58671297 | 196 | for(Int_t i=0; i<kNch; i++){ |
c3986754 | 197 | for(Int_t j=0; j<5; j++){ |
198 | fMapADC[i][j] = stream.fMapADC[i][j]; | |
199 | if(i<32) fScalerMap[i][j] = stream.fMapADC[i][j]; | |
200 | } | |
1ee299a5 | 201 | } |
da090841 | 202 | |
203 | for(Int_t k=0; k<4; k++) fCPTInput[k] = stream.fCPTInput[k]; | |
8309c1ab | 204 | } |
205 | ||
206 | //_____________________________________________________________________________ | |
207 | AliZDCRawStream& AliZDCRawStream::operator = (const AliZDCRawStream& | |
208 | /* stream */) | |
209 | { | |
abf60186 | 210 | // Assignment operator |
8309c1ab | 211 | Fatal("operator =", "assignment operator not implemented"); |
212 | return *this; | |
213 | } | |
214 | ||
215 | //_____________________________________________________________________________ | |
216 | AliZDCRawStream::~AliZDCRawStream() | |
217 | { | |
abf60186 | 218 | // Destructor |
8309c1ab | 219 | |
220 | } | |
221 | ||
c93c022b | 222 | //_____________________________________________________________________________ |
223 | void AliZDCRawStream::ReadChMap() | |
224 | { | |
225 | // Reading channel map | |
58671297 | 226 | const int kNch = 48; |
27afc0c8 | 227 | AliDebug(2,"\t Reading ZDC ADC mapping from OCDB\n"); |
fee50699 | 228 | AliZDCChMap * chMap = GetChMap(); |
6d653649 | 229 | //chMap->Print(""); |
58671297 | 230 | for(Int_t i=0; i<kNch; i++){ |
fee50699 | 231 | fMapADC[i][0] = chMap->GetADCModule(i); |
232 | fMapADC[i][1] = chMap->GetADCChannel(i); | |
233 | fMapADC[i][2] = -1; | |
234 | fMapADC[i][3] = chMap->GetDetector(i); | |
235 | fMapADC[i][4] = chMap->GetSector(i); | |
236 | } | |
237 | fIsMapRead = kTRUE; | |
c93c022b | 238 | } |
239 | ||
1ee299a5 | 240 | //_____________________________________________________________________________ |
241 | void AliZDCRawStream::ReadCDHHeader() | |
242 | { | |
243 | // Reading CDH | |
244 | const AliRawDataHeader* header = fRawReader->GetDataHeader(); | |
245 | if(!header) { | |
9d0b658a | 246 | AliError(" No CDH in raw data streaming"); |
1ee299a5 | 247 | fRawReader->AddMajorErrorLog(kCDHError); |
fee50699 | 248 | return; |
1ee299a5 | 249 | } |
250 | else{ | |
27afc0c8 | 251 | //printf("\t AliZDCRawStream::ReadCDHHeader -> Data Size = %x\n",fRawReader->GetDataSize()); |
1ee299a5 | 252 | |
ac84d2fc | 253 | UChar_t message = header->GetAttributes(); |
27afc0c8 | 254 | //printf("\t AliZDCRawStream::ReadCDHHeader -> Attributes %x\n",message); |
1ee299a5 | 255 | |
910216a3 | 256 | if((message & 0xf0) == 0x0){ // PHYSICS RUN |
58671297 | 257 | //printf("\t PHYSICS RUN raw data found\n"); |
258 | } | |
910216a3 | 259 | else if((message & 0xf0) == 0x10){ // COSMIC RUN |
65448375 | 260 | //printf("\t STANDALONE_COSMIC RUN raw data found\n"); |
1ee299a5 | 261 | } |
910216a3 | 262 | else if((message & 0xf0) == 0x20){ // PEDESTAL RUN |
65448375 | 263 | //printf("\t STANDALONE_PEDESTAL RUN raw data found\n"); |
1ee299a5 | 264 | } |
910216a3 | 265 | else if((message & 0xf0) == 0x30){ // LASER RUN |
65448375 | 266 | //printf("\t STANDALONE_LASER RUN raw data found\n"); |
ac84d2fc | 267 | } |
910216a3 | 268 | else if((message & 0xf0) == 0x40){ // CALIBRATION_CENTRAL RUN |
58671297 | 269 | //printf("\t CALIBRATION_CENTRAL RUN raw data found\n"); |
270 | } | |
910216a3 | 271 | else if((message & 0xf0) == 0x50){ // CALIBRATION_SEMICENTRAL |
58671297 | 272 | //printf("\t CALIBRATION_SEMICENTRAL RUN raw data found\n"); |
273 | } | |
910216a3 | 274 | else if((message & 0xf0) == 0x60){ // CALIBRATION_MB |
58671297 | 275 | //printf("\t CALIBRATION_MB RUN raw data found\n"); |
276 | } | |
910216a3 | 277 | else if((message & 0xf0) == 0x70){ // CALIBRATION_EMD |
58671297 | 278 | //printf("\t CALIBRATION_EMD RUN raw data found\n"); |
279 | } | |
44455047 | 280 | // *** Checking the bit indicating the used readout card |
281 | // (the payload is different in the 2 cases!) | |
282 | if((message & 0x08) == 0){ // ** DARC card | |
283 | fReadOutCard = 0; | |
284 | fIsDARCHeader = kTRUE; | |
27afc0c8 | 285 | AliInfo("\t ZDC readout card used: DARC"); |
44455047 | 286 | } |
13390187 | 287 | else if((message & 0x08) == 0x08){ // ** ZRC card |
44455047 | 288 | fReadOutCard = 1; |
27afc0c8 | 289 | AliInfo("\t ZDC readout card used: ZRC"); |
44455047 | 290 | } |
291 | ||
1ee299a5 | 292 | if(header->GetL1TriggerMessage() & 0x1){ // Calibration bit set in CDH |
293 | fIsCalib = kTRUE; | |
294 | } | |
27afc0c8 | 295 | //printf("\t AliZDCRawStream::ReadCDHHeader -> L1TriggerMessage %x\n",header->GetL1TriggerMessage()); |
296 | //printf("\t AliZDCRawStream::ReadCDHHeader -> Calibration bit = %d\n",fIsCalib); | |
1ee299a5 | 297 | |
298 | UInt_t status = header->GetStatus(); | |
299 | //printf("\t AliZDCRawStream::ReadCDHHeader -> status = %d\n",status); | |
f9f99efb | 300 | if((status & 0x000f) == 0x0001){ |
c083685e | 301 | AliDebug(2,"CDH -> DARC trg0 overlap error"); |
1ee299a5 | 302 | fRawReader->AddMajorErrorLog(kDARCError); |
303 | } | |
f9f99efb | 304 | if((status & 0x000f) == 0x0002){ |
c083685e | 305 | AliDebug(2,"CDH -> DARC trg0 missing error"); |
1ee299a5 | 306 | fRawReader->AddMajorErrorLog(kDARCError); |
307 | } | |
f9f99efb | 308 | if((status & 0x000f) == 0x0004){ |
c083685e | 309 | AliDebug(2,"CDH -> DARC data parity error"); |
1ee299a5 | 310 | fRawReader->AddMajorErrorLog(kDARCError); |
311 | } | |
f9f99efb | 312 | if((status & 0x000f) == 0x0008){ |
c083685e | 313 | AliDebug(2,"CDH -> DARC ctrl parity error"); |
1ee299a5 | 314 | fRawReader->AddMajorErrorLog(kDARCError); |
315 | } | |
316 | // | |
f9f99efb | 317 | if((status & 0x00f0) == 0x0010){ |
c083685e | 318 | AliDebug(2,"CDH -> DARC trg unavailable"); |
1ee299a5 | 319 | fRawReader->AddMajorErrorLog(kDARCError); |
320 | } | |
f9f99efb | 321 | if((status & 0x00f0) == 0x0020){ |
c3986754 | 322 | AliDebug(2,"CDH -> DARC FEE error"); |
1ee299a5 | 323 | fRawReader->AddMajorErrorLog(kDARCError); |
324 | } | |
325 | // | |
f9f99efb | 326 | if((status & 0x0f00) == 0x0200){ |
c083685e | 327 | AliDebug(2,"CDH -> DARC L1 time violation"); |
1ee299a5 | 328 | fRawReader->AddMajorErrorLog(kDARCError); |
329 | } | |
f9f99efb | 330 | if((status & 0x0f00) == 0x0400){ |
c3986754 | 331 | AliDebug(2,"CDH -> DARC L2 time-out"); |
1ee299a5 | 332 | fRawReader->AddMajorErrorLog(kDARCError); |
333 | } | |
f9f99efb | 334 | if((status & 0x0f00) == 0x0800){ |
c3986754 | 335 | AliDebug(2,"CDH -> DARC prepulse time violation"); |
1ee299a5 | 336 | fRawReader->AddMajorErrorLog(kDARCError); |
337 | } | |
338 | // | |
f9f99efb | 339 | if((status & 0xf000) == 0x1000){ |
c083685e | 340 | AliDebug(2,"CDH -> DARC other error"); |
1ee299a5 | 341 | fRawReader->AddMajorErrorLog(kDARCError); |
342 | } | |
343 | } | |
44455047 | 344 | |
1ee299a5 | 345 | } |
346 | ||
8309c1ab | 347 | //_____________________________________________________________________________ |
348 | Bool_t AliZDCRawStream::Next() | |
349 | { | |
abf60186 | 350 | // Read the next raw digit |
351 | // Returns kFALSE if there is no digit left | |
8309c1ab | 352 | |
1ee299a5 | 353 | if(!fRawReader->ReadNextInt((UInt_t&) fBuffer)) return kFALSE; |
58671297 | 354 | const int kNch = 48; |
c3986754 | 355 | Int_t kFirstADCGeo=0, kLastADCGeo=3, kScalerGeo=8, kPUGeo=29, kTrigScales=30, kTrigHistory=31; |
356 | fIsHeaderMapping = kFALSE; fIsChMapping = kFALSE; | |
357 | fIsADCHeader = kFALSE; fIsADCDataWord = kFALSE; fIsADCEOB = kFALSE; | |
ad3a602e | 358 | fIsUnderflow = kFALSE; fIsOverflow = kFALSE; fIsScalerWord = kFALSE; |
58671297 | 359 | fSector[0] = fSector[1] = -1; |
f70a5526 | 360 | // fTrigCountNWords = 9; fTrigHistNWords = 2; |
da090841 | 361 | for(Int_t kl=0; kl<4; kl++) fCPTInput[kl] = 0; |
362 | ||
1ee299a5 | 363 | fEvType = fRawReader->GetType(); |
1ee299a5 | 364 | if(fPosition==0){ |
365 | //if(fEvType==7 || fEvType ==8){ //Physics or calibration event | |
1ee299a5 | 366 | ReadCDHHeader(); |
367 | //} | |
c3986754 | 368 | fCurrentCh=0; fCurrScCh=0; fNChannelsOn=0; |
369 | // Ch. debug | |
370 | //printf("\n AliZDCRawStream::Next() - ev. type %d",fEvType); | |
1ee299a5 | 371 | } |
ac84d2fc | 372 | |
c3986754 | 373 | // Ch. debug |
374 | //printf("\n AliZDCRawStream::Next() - fBuffer[%d] = %x\n",fPosition, fBuffer); | |
375 | ||
9d0b658a | 376 | // *** End of ZDC event |
ac84d2fc | 377 | if(fBuffer == 0xcafefade){ |
27afc0c8 | 378 | //printf("\n AliZDCRawStream::Next() ***** End of ZDC event *****\n\n"); |
ac84d2fc | 379 | return kFALSE; |
380 | } | |
1ee299a5 | 381 | |
382 | // ------------------------------------------- | |
1069e28d | 383 | // --- DARC header |
1ee299a5 | 384 | // ------------------------------------------- |
fee50699 | 385 | // If the CDH has been read then |
386 | // the DARC header must follow | |
44455047 | 387 | if(fReadOutCard==0 && fIsDARCHeader){ |
84d2abc2 | 388 | //printf("\t ---- DARC header ----\n"); |
1ee299a5 | 389 | if(fIsCalib){ |
390 | fDeadfaceOffset = 9; | |
391 | fDeadbeefOffset = 25; | |
392 | } | |
393 | else{ | |
394 | fDeadfaceOffset = 1; | |
395 | fDeadbeefOffset = 7; | |
396 | } | |
397 | fDataOffset = 1+fDeadbeefOffset; | |
398 | fIsDARCHeader = kFALSE; | |
abf60186 | 399 | } |
1ee299a5 | 400 | |
44455047 | 401 | // --------------------------------------------- |
402 | // --- Start of data event (SOD) --- | |
403 | // --- decoding mapping of connected ADC ch. --- | |
404 | // --------------------------------------------- | |
fee50699 | 405 | // In the SOD event ADC ch. mapping is written |
1e85619e | 406 | if(fEvType==10){ |
407 | if(fSODReading){ | |
fee50699 | 408 | |
13390187 | 409 | if(fPosition>=fDataOffset){ |
c3986754 | 410 | if((fBuffer&0xff000001) == 0xff000001){ // ************** Mapping |
8700404e | 411 | // DARC 1st datum @ fDataOffset+1 \ ZRC 1st valid datum @ fDataOffset=0 |
13390187 | 412 | if((fPosition==fDataOffset+1) || (fPosition==fDataOffset)){ |
1e85619e | 413 | printf("\n\n ------ AliZDCRawStream -> Reading mapping from StartOfData event ------\n"); |
c3986754 | 414 | fCurrentCh=0; fCurrScCh=0; |
6006df88 | 415 | } |
1ee299a5 | 416 | else{ |
1e85619e | 417 | printf(" ------ AliZDCRawStream -> End of ZDC StartOfData event ------\n\n"); |
418 | fSODReading = kFALSE; | |
fee50699 | 419 | return kFALSE; |
1ee299a5 | 420 | } |
421 | } | |
c3986754 | 422 | else if((fBuffer&0xff000002) == 0xff000002){ // ************** Threshold settings |
423 | fPosition++; | |
27afc0c8 | 424 | return kFALSE; // !!!!!!!!!!!!!!!!!!!!! For the moment thresholds are not read |
c3986754 | 425 | } |
426 | else if((fBuffer&0x80000000)>>31 == 1){ // --- Mapping header | |
427 | fIsHeaderMapping = kTRUE; | |
428 | fADCModule = ((fBuffer & 0x7f000000)>>24); // GEO address!!! | |
429 | fModType = ((fBuffer & 0x7ff00)>>8); | |
430 | fADCNChannels = (fBuffer & 0xff); // # of channels following the header | |
1ee299a5 | 431 | // |
c083685e | 432 | printf(" ******** GEO %d, mod. type %d, #ch. %d\n",fADCModule,fModType,fADCNChannels); |
6006df88 | 433 | } |
c3986754 | 434 | else if((fBuffer&0x80000000)>>31 == 0){ // --- Mapping channel |
435 | fADCChannel = ((fBuffer & 0x3fff0000)>>16); | |
436 | fCabledSignal = (fBuffer&0xffff); | |
437 | // | |
27afc0c8 | 438 | if(fModType == kV965){ // ******** ADCs ******************************** |
c3986754 | 439 | // Channel signal |
440 | if((fBuffer&0x40000000)>>30==0){ // high range chain ADC | |
441 | fIsChMapping = kTRUE; | |
442 | fMapADC[fCurrentCh][0] = fADCModule; | |
443 | fMapADC[fCurrentCh][1] = fADCChannel; | |
444 | fMapADC[fCurrentCh][2] = fCabledSignal; | |
445 | // - No. of channels on | |
446 | fNChannelsOn++; | |
447 | // | |
448 | // Determining detector and sector | |
449 | // ----------------------------------------- | |
450 | // For the decoding of the following lines | |
451 | // look the enum in AliZDCRawStream.h file | |
452 | // ----------------------------------------- | |
453 | if((fCabledSignal>=2 && fCabledSignal<=6) || (fCabledSignal>=26 && fCabledSignal<=30) | |
454 | || fCabledSignal==24 || fCabledSignal==48){ | |
455 | fMapADC[fCurrentCh][3] = 4; //ZNA | |
456 | // | |
27afc0c8 | 457 | if(fCabledSignal==kZNAC || fCabledSignal==kZNACoot) fMapADC[fCurrentCh][4]=0; |
c3986754 | 458 | else if(fCabledSignal==3 || fCabledSignal==27) fMapADC[fCurrentCh][4]=1; |
459 | else if(fCabledSignal==4 || fCabledSignal==28) fMapADC[fCurrentCh][4]=2; | |
460 | else if(fCabledSignal==5 || fCabledSignal==29) fMapADC[fCurrentCh][4]=3; | |
461 | else if(fCabledSignal==6 || fCabledSignal==30) fMapADC[fCurrentCh][4]=4; | |
462 | else if(fCabledSignal==24 || fCabledSignal==48) fMapADC[fCurrentCh][4]=5; //Reference PTM | |
463 | } | |
464 | else if((fCabledSignal>=7 && fCabledSignal<=11) || (fCabledSignal>=31 && fCabledSignal<=35)){ | |
465 | fMapADC[fCurrentCh][3] = 5; //ZPA | |
466 | // | |
467 | if(fCabledSignal==7 || fCabledSignal==31) fMapADC[fCurrentCh][4]=0; | |
468 | else if(fCabledSignal==8 || fCabledSignal==32) fMapADC[fCurrentCh][4]=1; | |
469 | else if(fCabledSignal==9 || fCabledSignal==33) fMapADC[fCurrentCh][4]=2; | |
470 | else if(fCabledSignal==10 || fCabledSignal==34) fMapADC[fCurrentCh][4]=3; | |
471 | else if(fCabledSignal==11 || fCabledSignal==35) fMapADC[fCurrentCh][4]=4; | |
472 | } | |
473 | else if((fCabledSignal>=12 && fCabledSignal<=16) || (fCabledSignal>=36 && fCabledSignal<=40) | |
474 | || fCabledSignal==25 || fCabledSignal==49){ | |
475 | fMapADC[fCurrentCh][3] = 1; //ZNC | |
476 | // | |
477 | if(fCabledSignal==12 || fCabledSignal==36) fMapADC[fCurrentCh][4]=0; | |
478 | else if(fCabledSignal==13 || fCabledSignal==37) fMapADC[fCurrentCh][4]=1; | |
479 | else if(fCabledSignal==14 || fCabledSignal==38) fMapADC[fCurrentCh][4]=2; | |
480 | else if(fCabledSignal==15 || fCabledSignal==39) fMapADC[fCurrentCh][4]=3; | |
481 | else if(fCabledSignal==16 || fCabledSignal==40) fMapADC[fCurrentCh][4]=4; | |
482 | else if(fCabledSignal==25 || fCabledSignal==49) fMapADC[fCurrentCh][4]=5; //Reference PTM | |
483 | } | |
484 | else if((fCabledSignal>=17 && fCabledSignal<=21) || (fCabledSignal>=41 && fCabledSignal<=45)){ | |
485 | fMapADC[fCurrentCh][3] = 2; //ZPC | |
486 | // | |
487 | if(fCabledSignal==17 || fCabledSignal==41) fMapADC[fCurrentCh][4]=0; | |
488 | else if(fCabledSignal==18 || fCabledSignal==42) fMapADC[fCurrentCh][4]=1; | |
489 | else if(fCabledSignal==19 || fCabledSignal==43) fMapADC[fCurrentCh][4]=2; | |
490 | else if(fCabledSignal==20 || fCabledSignal==44) fMapADC[fCurrentCh][4]=3; | |
491 | else if(fCabledSignal==21 || fCabledSignal==45) fMapADC[fCurrentCh][4]=4; | |
492 | } | |
493 | else if(fCabledSignal==22 || fCabledSignal==23 || fCabledSignal==46 || fCabledSignal==47){ | |
494 | fMapADC[fCurrentCh][3] = 3; // ZEM | |
495 | // | |
496 | if(fCabledSignal==22 || fCabledSignal==46) fMapADC[fCurrentCh][4]=1; | |
497 | else if(fCabledSignal==23 || fCabledSignal==47) fMapADC[fCurrentCh][4]=2; | |
498 | } | |
499 | //Ch. debug | |
500 | //printf("\tADC mod. %d ch. %d signal %d ",fADCModule,fADCChannel,fCabledSignal); | |
501 | //printf(" det. %d sec. %d\n",fMapADC[fCurrentCh][3],fMapADC[fCurrentCh][4]); | |
502 | // | |
503 | fCurrentCh++; | |
504 | // | |
505 | } // high range channels | |
506 | }// ModType=1 (ADC mapping) | |
27afc0c8 | 507 | else if(fModType == kV830){ // ******** VME scaler ************************** |
c3986754 | 508 | fIsChMapping = kTRUE; |
509 | fScalerMap[fCurrScCh][0] = fADCModule; | |
510 | fScalerMap[fCurrScCh][1] = fADCChannel; | |
511 | fScalerMap[fCurrScCh][2] = fCabledSignal; | |
c93c022b | 512 | // |
513 | // Determining detector and sector | |
514 | // ----------------------------------------- | |
515 | // For the decoding of the following lines | |
516 | // look the enum in AliZDCRawStream.h file | |
517 | // ----------------------------------------- | |
c3986754 | 518 | // NOT CONSIDERING OUT OF TIME OR REFERENCE SIGNALS FOR SCALER!!!!! |
519 | if(fCabledSignal>=2 && fCabledSignal<=6){ | |
520 | fScalerMap[fCurrScCh][3] = 4; //ZNA | |
c93c022b | 521 | // |
c3986754 | 522 | if(fCabledSignal==2 ) fScalerMap[fCurrScCh][4]=0; |
523 | else if(fCabledSignal==3) fScalerMap[fCurrScCh][4]=1; | |
524 | else if(fCabledSignal==4) fScalerMap[fCurrScCh][4]=2; | |
525 | else if(fCabledSignal==5) fScalerMap[fCurrScCh][4]=3; | |
526 | else if(fCabledSignal==6) fScalerMap[fCurrScCh][4]=4; | |
c93c022b | 527 | } |
c3986754 | 528 | else if(fCabledSignal>=7 && fCabledSignal<=11){ |
529 | fScalerMap[fCurrScCh][3] = 5; //ZPA | |
c93c022b | 530 | // |
c3986754 | 531 | if(fCabledSignal==7 ) fScalerMap[fCurrScCh][4]=0; |
532 | else if(fCabledSignal==8) fScalerMap[fCurrScCh][4]=1; | |
533 | else if(fCabledSignal==9) fScalerMap[fCurrScCh][4]=2; | |
534 | else if(fCabledSignal==10) fScalerMap[fCurrScCh][4]=3; | |
535 | else if(fCabledSignal==11) fScalerMap[fCurrScCh][4]=4; | |
c93c022b | 536 | } |
c3986754 | 537 | else if(fCabledSignal>=12 && fCabledSignal<=16){ |
538 | fScalerMap[fCurrScCh][3] = 1; //ZNC | |
c93c022b | 539 | // |
c3986754 | 540 | if(fCabledSignal==12) fScalerMap[fCurrScCh][4]=0; |
541 | else if(fCabledSignal==13) fScalerMap[fCurrScCh][4]=1; | |
542 | else if(fCabledSignal==14) fScalerMap[fCurrScCh][4]=2; | |
543 | else if(fCabledSignal==15) fScalerMap[fCurrScCh][4]=3; | |
544 | else if(fCabledSignal==16) fScalerMap[fCurrScCh][4]=4; | |
c93c022b | 545 | } |
c3986754 | 546 | else if(fCabledSignal>=17 && fCabledSignal<=21){ |
547 | fScalerMap[fCurrScCh][3] = 2; //ZPC | |
c93c022b | 548 | // |
c3986754 | 549 | if(fCabledSignal==17) fScalerMap[fCurrScCh][4]=0; |
550 | else if(fCabledSignal==18) fScalerMap[fCurrScCh][4]=1; | |
551 | else if(fCabledSignal==19) fScalerMap[fCurrScCh][4]=2; | |
552 | else if(fCabledSignal==20) fScalerMap[fCurrScCh][4]=3; | |
553 | else if(fCabledSignal==21) fScalerMap[fCurrScCh][4]=4; | |
c93c022b | 554 | } |
c3986754 | 555 | else if(fCabledSignal==22 || fCabledSignal==23){ |
556 | fScalerMap[fCurrScCh][3] = 3; // ZEM | |
c93c022b | 557 | // |
c3986754 | 558 | if(fCabledSignal==22 ) fScalerMap[fCurrScCh][4]=1; |
559 | else if(fCabledSignal==23) fScalerMap[fCurrScCh][4]=2; | |
c93c022b | 560 | } |
c3986754 | 561 | // Ch debug. |
562 | //printf("\t VME scaler mod. %d ch. %d, signal %d",fScalerMap[fCurrScCh][0],fADCChannel,fCabledSignal); | |
563 | //if(fCabledSignal!=0 && fCabledSignal!=1) printf(" det. %d sec. %d\n",fScalerMap[fCurrScCh][3],fScalerMap[fCurrScCh][4]); | |
564 | //else printf(" Signal void/not connected\n"); | |
565 | ||
566 | fCurrScCh++; | |
567 | } | |
27afc0c8 | 568 | /*else if(fModType == kTRG){ // **** scalers from trigger card |
c3986754 | 569 | //printf("\t Trigger scaler mod. %d ch. %d, signal %d\n",fADCModule,fADCChannel,fCabledSignal); |
570 | } | |
27afc0c8 | 571 | else if(fModType == kTRGI){ // **** trigger history from trigger card |
c3986754 | 572 | //printf("\t Trigger card ch. %d, signal %d\n",fADCChannel,fCabledSignal); |
573 | } | |
27afc0c8 | 574 | else if(fModType == kPU){ // **** pattern unit |
c3986754 | 575 | //printf("\t P.U. mod. %d ch. %d, signal %d\n",fADCModule,fADCChannel,fCabledSignal); |
27afc0c8 | 576 | }*/ |
c3986754 | 577 | }//reading channel mapping |
1ee299a5 | 578 | } |
1e85619e | 579 | } // if fSODREading |
580 | fPosition++; | |
581 | return kTRUE; | |
44455047 | 582 | } // ------------------------------- SOD event |
1ee299a5 | 583 | |
584 | // ------------------------------------------- | |
585 | // --- DARC data | |
586 | // ------------------------------------------- | |
a5747d8f | 587 | if(fPosition<fDeadfaceOffset && fReadOutCard==0){ |
588 | fPosition++; | |
589 | return kTRUE; | |
590 | } | |
591 | else if(fPosition==fDeadfaceOffset && fReadOutCard==0){ | |
592 | if(fBuffer != 0xdeadface){ | |
a44b6e36 | 593 | //AliWarning(" NO deadface after DARC data"); |
a5747d8f | 594 | fRawReader->AddMajorErrorLog(kDARCError); |
595 | } | |
596 | else{ | |
1ee299a5 | 597 | fPosition++; |
598 | return kTRUE; | |
599 | } | |
a5747d8f | 600 | } |
601 | else if(fPosition>fDeadfaceOffset && fPosition<fDeadbeefOffset && fReadOutCard==0){ | |
602 | fPosition++; | |
603 | return kTRUE; | |
604 | } | |
605 | else if(fPosition==fDeadbeefOffset && fReadOutCard==0){ | |
606 | if(fBuffer != 0xdeadbeef){ | |
a44b6e36 | 607 | //AliWarning(" NO deadbeef after DARC global data"); |
a5747d8f | 608 | fRawReader->AddMajorErrorLog(kDARCError); |
609 | fPosition++; | |
610 | return kFALSE; | |
1ee299a5 | 611 | } |
a5747d8f | 612 | else{ |
1ee299a5 | 613 | fPosition++; |
614 | return kTRUE; | |
615 | } | |
1e85619e | 616 | } // ------------------------------- End of DARC data |
44455047 | 617 | |
1e85619e | 618 | // --------------------------------------------- |
1ee299a5 | 619 | // --- ZDC data |
c3986754 | 620 | // --- ADCs + VME scaler + trigger card + P.U. |
1e85619e | 621 | // --------------------------------------------- |
1ee299a5 | 622 | else if(fPosition>=fDataOffset){ |
fee50699 | 623 | |
624 | //printf("AliZDCRawStream: fSODReading = %d\n", fSODReading); | |
625 | if(!fSODReading && !fIsMapRead) ReadChMap(); | |
626 | ||
44455047 | 627 | // !!!!!!!!!!!!!!! DARC readout card only !!!!!!!!!!! |
1ee299a5 | 628 | // Not valid datum before the event |
629 | // there MUST be a NOT valid datum before the event!!! | |
44455047 | 630 | if(fReadOutCard==0){ |
a5747d8f | 631 | if(fPosition==fDataOffset){ |
44455047 | 632 | //printf("\t **** ZDC data begin ****\n"); |
633 | if((fBuffer & 0x07000000) != 0x06000000){ | |
634 | fRawReader->AddMajorErrorLog(kZDCDataError); | |
635 | } | |
636 | else if((fBuffer & 0x07000000) == 0x06000001){ // Corrupted event!!! | |
637 | fIsADCEventGood = kFALSE; | |
638 | } | |
c3986754 | 639 | } |
1ee299a5 | 640 | |
44455047 | 641 | // If the not valid datum isn't followed by the 1st ADC header |
642 | // the event is corrupted (i.e., 2 gates arrived before trigger) | |
a5747d8f | 643 | else if(fPosition==fDataOffset+1){ |
44455047 | 644 | if((fBuffer & 0x07000000) != 0x02000000){ |
645 | AliWarning("ZDC ADC -> The not valid datum is NOT followed by an ADC header!"); | |
646 | fRawReader->AddMajorErrorLog(kZDCDataError); | |
647 | fIsADCEventGood = kFALSE; | |
648 | fPosition++; | |
649 | return kFALSE; | |
650 | } | |
1ee299a5 | 651 | } |
652 | } | |
653 | ||
c3986754 | 654 | // Get geo address of current word |
655 | // - ADC GEO = 0, 1, 2, 3 | |
656 | // - VME scaler GEO = 8 | |
657 | // - PU GEO = 29 | |
658 | // - Trigger card scales GEO = 30 | |
659 | // - Trigger card history GEO = 31 | |
c083685e | 660 | fADCModule = (Int_t) ((fBuffer & 0xf8000000)>>27); |
c083685e | 661 | |
c3986754 | 662 | // ************************************ ADC MODULES ************************************ |
663 | if(fADCModule>=kFirstADCGeo && fADCModule<=kLastADCGeo){ | |
1ee299a5 | 664 | // *** ADC header |
ac84d2fc | 665 | if((fBuffer & 0x07000000) == 0x02000000){ |
1ee299a5 | 666 | fIsADCHeader = kTRUE; |
667 | fADCNChannels = ((fBuffer & 0x00003f00)>>8); | |
58671297 | 668 | //printf(" AliZDCRawStream -> ADC HEADER: mod.%d has %d ch. \n",fADCModule,fADCNChannels); |
1ee299a5 | 669 | } |
670 | // *** ADC data word | |
671 | else if((fBuffer & 0x07000000) == 0x00000000){ | |
672 | fIsADCDataWord = kTRUE; | |
673 | fADCChannel = ((fBuffer & 0x1e0000) >> 17); | |
674 | fADCGain = ((fBuffer & 0x10000) >> 16); | |
675 | fADCValue = (fBuffer & 0xfff); | |
c3986754 | 676 | // |
677 | //printf(" AliZDCRawStream -> ADC DATUM: mod. %d ch. %d gain %d value %d\n", | |
84d2abc2 | 678 | // fADCModule,fADCChannel,fADCGain,fADCValue); |
c93c022b | 679 | |
c33b6ca6 | 680 | // Checking if the channel map for the ADCs has been provided/read |
681 | if(fMapADC[0][0]==-1){ | |
682 | printf("\t ATTENTION!!! No ADC mapping has been found/provided!!!\n"); | |
683 | return kFALSE; | |
684 | } | |
685 | // | |
58671297 | 686 | /*for(Int_t ci=0; ci<kNch; ci++){ |
9d0b658a | 687 | printf(" %d mod %d ch %d det %d sec %d\n",ci,fMapADC[ci][0], |
c33b6ca6 | 688 | fMapADC[ci][1], fMapADC[ci][3], fMapADC[ci][4]); |
689 | }*/ | |
690 | ||
691 | // Scan of the map to assign the correct volumes | |
692 | Int_t foundMapEntry = kFALSE; | |
58671297 | 693 | for(Int_t k=0; k<kNch; k++){ |
c33b6ca6 | 694 | if(fADCModule==fMapADC[k][0] && fADCChannel==fMapADC[k][1]){ |
695 | fSector[0] = fMapADC[k][3]; | |
696 | fSector[1] = fMapADC[k][4]; | |
697 | foundMapEntry = kTRUE; | |
698 | break; | |
699 | } | |
700 | } | |
701 | if(foundMapEntry==kFALSE){ | |
c3986754 | 702 | AliWarning(Form(" No valid entry in ADC mapping for raw data %d ADCmod. %d ch. %d\n", |
703 | fPosition,fADCModule,fADCChannel)); | |
c33b6ca6 | 704 | } |
705 | // | |
c3986754 | 706 | //printf("AliZDCRawStream -> ADCmod. %d ch. %d -> det %d sec %d\n", |
707 | // fADCModule,fADCChannel,fSector[0],fSector[1]); | |
c33b6ca6 | 708 | |
709 | // Final checks | |
6d653649 | 710 | if(foundMapEntry==kTRUE){ |
711 | if(fSector[0]<1 || fSector[0]>5){ | |
712 | AliWarning(Form(" No valid detector assignment: %d",fSector[0])); | |
713 | fRawReader->AddMajorErrorLog(kInvalidSector); | |
714 | } | |
715 | // | |
716 | if(fSector[1]<0 || fSector[1]>5){ | |
717 | AliWarning(Form(" No valid sector assignment: %d",fSector[1])); | |
718 | fRawReader->AddMajorErrorLog(kInvalidSector); | |
719 | } | |
720 | // | |
721 | if(fADCModule<0 || fADCModule>3){ | |
722 | AliError(Form(" No valid ADC module: %d",fADCModule)); | |
723 | fRawReader->AddMajorErrorLog(kInvalidADCModule); | |
724 | } | |
c33b6ca6 | 725 | } |
1ee299a5 | 726 | |
c33b6ca6 | 727 | // Checking the underflow and overflow bits |
728 | if(fBuffer & 0x1000) fIsUnderflow = kTRUE; | |
729 | else if (fBuffer & 0x2000) fIsOverflow = kTRUE; | |
730 | ||
1ee299a5 | 731 | }//ADC data word |
732 | // *** ADC EOB | |
733 | else if((fBuffer & 0x07000000) == 0x04000000){ | |
734 | fIsADCEOB = kTRUE; | |
735 | //printf(" AliZDCRawStream -> EOB --------------------------\n"); | |
736 | } | |
c083685e | 737 | }//ADC module |
da090841 | 738 | // ********************************* VME SCALER HEADER ********************************* |
c3986754 | 739 | else if(fADCModule == kScalerGeo){ |
c083685e | 740 | if(fBuffer & 0x04000000 && fIsScHeaderRead==kFALSE){ // *** Scaler header |
741 | fScGeo = (fBuffer & 0xf8000000)>>27; | |
742 | fScNWords = (fBuffer & 0x00fc0000)>>18; | |
743 | fScTriggerSource = (fBuffer & 0x00030000)>>16; | |
744 | fScTriggerNumber = (fBuffer & 0x0000ffff); | |
745 | fIsScHeaderRead = kTRUE; | |
f70a5526 | 746 | fScStartCounter = fPosition; |
c083685e | 747 | //Ch. debug |
f70a5526 | 748 | //printf(" AliZDCRawStream -> VME SCALER HEADER: geo %d Nwords %d TrigSource %d TrigNo. %d\n", |
c083685e | 749 | // fScGeo,fScNWords,fScTriggerSource,fScTriggerNumber); |
750 | } | |
751 | else if(!(fBuffer & 0x04000000)){ | |
752 | fIsScEventGood = kFALSE; | |
753 | } | |
c3986754 | 754 | } |
da090841 | 755 | // *********************************** PATTERN UNIT *********************************** |
c3986754 | 756 | else if(fADCModule == kPUGeo){ |
757 | // still to be implemented!!! Not yet in data!!! | |
da090841 | 758 | fDetPattern = (fBuffer & 0x0000003f); |
f70a5526 | 759 | // Ch. debug |
760 | //printf(" AliZDCRawStream -> Pattern Unit\n"); | |
761 | ||
c3986754 | 762 | } |
da090841 | 763 | // ******************************** TRIGGER CARD COUNTS ******************************** |
c3986754 | 764 | else if(fADCModule == kTrigScales){ |
f70a5526 | 765 | if(fIsTriggerScaler == kFALSE){ |
766 | fTrigCountNWords = (Int_t) ((fBuffer & 0xfc0000)>>17); | |
da090841 | 767 | fTrigCountStart = fPosition; |
f70a5526 | 768 | fIsTriggerScaler = kTRUE; |
da090841 | 769 | } |
f70a5526 | 770 | // Ch. debug |
771 | //printf(" AliZDCRawStream -> Trigger Scaler header\n"); | |
c3986754 | 772 | } |
da090841 | 773 | // ********************************** TRIGGER HISTORY ********************************** |
c3986754 | 774 | else if(fADCModule == kTrigHistory){ |
f70a5526 | 775 | if(fIsTriggerHistory == kFALSE){ |
776 | fTrigHistNWords = (Int_t) ((fBuffer & 0xfc0000)>>17); | |
777 | fTrigHistStart = fPosition; | |
778 | fIsTriggerHistory = kTRUE; | |
da090841 | 779 | } |
f70a5526 | 780 | // Ch. debug |
781 | //printf(" AliZDCRawStream -> Trigger History header\n"); | |
782 | ||
c3986754 | 783 | } |
da090841 | 784 | // ********************************** VME SCALER DATA ********************************** |
c3986754 | 785 | // Reading VME scaler data |
c083685e | 786 | if(fIsScHeaderRead && fPosition>=fScStartCounter+1){ // *** Scaler word |
ad3a602e | 787 | fADCModule=kScalerGeo; fIsADCDataWord=kFALSE; fIsScalerWord=kTRUE; |
c083685e | 788 | fScEvCounter = fBuffer; |
789 | Int_t nWords = (Int_t) (fScNWords); | |
790 | if(fPosition == fScStartCounter+nWords) fIsScHeaderRead = kFALSE; | |
791 | //Ch. debug | |
792 | //printf(" AliZDCRawStream -> scaler datum %d", fScEvCounter); | |
793 | } | |
f70a5526 | 794 | // ******************************** TRIGGER SCALER DATA ******************************** |
795 | // Reading trigger scaler data | |
796 | if(fIsTriggerScaler && fPosition>=fTrigCountStart+1){ | |
8700404e | 797 | fADCModule = kTrigScales; fIsADCDataWord = kFALSE; |
f70a5526 | 798 | if(fPosition == fTrigCountStart+1) fMBTrigInput = fBuffer; |
799 | else if(fPosition == fTrigCountStart+2) fCentralTrigInput = fBuffer; | |
800 | else if(fPosition == fTrigCountStart+3) fSCentralTrigInput = fBuffer; | |
801 | else if(fPosition == fTrigCountStart+4) fEMDTrigInput = fBuffer; | |
802 | else if(fPosition == fTrigCountStart+5) fL0Received = fBuffer; | |
803 | else if(fPosition == fTrigCountStart+6) fMBtrig2CTP = fBuffer; | |
804 | else if(fPosition == fTrigCountStart+7) fCentralTrig2CTP = fBuffer; | |
805 | else if(fPosition == fTrigCountStart+8) fSCentralTrig2CTP = fBuffer; | |
806 | else if(fPosition == fTrigCountStart+9){ | |
807 | fEMDTrig2CTP = fBuffer; | |
808 | fIsTriggerScaler = kFALSE; | |
809 | } | |
810 | // Ch. debug | |
811 | //printf(" AliZDCRawStream -> Trigger Scaler datum %d\n", fPosition-fTrigCountStart); | |
812 | } | |
813 | // ******************************* TRIGGER HISTORY WORDS ****************************** | |
814 | // Reading trigger history | |
815 | if(fIsTriggerHistory && fPosition>=fTrigHistStart+1){ | |
8700404e | 816 | fADCModule = kTrigHistory; fIsADCDataWord = kFALSE; |
f70a5526 | 817 | if(fPosition == fTrigHistStart+1){ |
818 | fPileUpBit1stWord = (fBuffer & 0x80000000) >> 31; | |
819 | fL0Bit1stWord = (fBuffer & 0x40000000) >> 30; | |
820 | fCentralTrigHist = (fBuffer & 0x3fff8000) >> 14; | |
821 | fMBTrigHist = (fBuffer & 0x00007fff); | |
822 | // | |
823 | fCPTInput[0] = (fBuffer & 0x00000080) >> 6; // MB bit | |
824 | fCPTInput[1] = (fBuffer & 0x00400000) >> 21; // CENTRAL bit | |
825 | } | |
826 | ||
827 | else if(fPosition == fTrigHistStart+fTrigHistNWords){ | |
828 | fPileUpBit2ndWord = (fBuffer & 0x80000000) >> 31; | |
829 | fL0Bit2ndWord = (fBuffer & 0x40000000) >> 30; | |
830 | fSCentralTrigHist = (fBuffer & 0x3fff8000) >> 14; | |
831 | fEMDTrigHist = (fBuffer & 0x00007fff); | |
832 | // | |
833 | fCPTInput[2] = (fBuffer & 0x00000080) >> 6; // SEMICENTRAL bit | |
834 | fCPTInput[3] = (fBuffer & 0x00400000) >> 21; // EMD bit | |
835 | // | |
836 | fIsTriggerHistory = kFALSE; | |
837 | ||
838 | // Checking if the event is good | |
839 | // (1) both history word pile up bits must be = 0 | |
840 | if(fPileUpBit1stWord==0 && fPileUpBit2ndWord==0) fIsPileUpEvent = kFALSE; | |
841 | else{ | |
842 | fIsPileUpEvent = kTRUE; | |
843 | printf(" AliZDCRawStream -> PILE UP EVENT: bitPileUp0 %d bitPileUp1 %d\n", | |
13390187 | 844 | fPileUpBit1stWord, fPileUpBit2ndWord); |
f70a5526 | 845 | } |
846 | // (2) both history word L0 bits must be = 1 | |
847 | if(fL0Bit1stWord==1 && fL0Bit2ndWord==1) fIsL0BitSet = kTRUE; | |
848 | else{ | |
849 | fIsL0BitSet = kFALSE; | |
850 | printf(" AliZDCRawStream -> L0 wrongly set: bitL0word0 %d bitL0word1 %d\n", | |
851 | fL0Bit1stWord, fL0Bit2ndWord); | |
852 | } | |
853 | } | |
854 | // Ch. debug | |
855 | //printf(" AliZDCRawStream -> Trigger history word %d\n", fPosition-fTrigHistStart); | |
856 | } | |
1ee299a5 | 857 | |
858 | } | |
f70a5526 | 859 | |
1ee299a5 | 860 | fPosition++; |
83347831 | 861 | |
8309c1ab | 862 | return kTRUE; |
863 | } | |
e42bdf10 | 864 | |
fee50699 | 865 | //_____________________________________________________________________________ |
866 | AliCDBStorage* AliZDCRawStream::SetStorage(const char *uri) | |
867 | { | |
868 | // Setting the storage | |
869 | ||
870 | AliCDBStorage *storage = AliCDBManager::Instance()->GetStorage(uri); | |
871 | ||
872 | return storage; | |
873 | } | |
874 | ||
875 | ||
876 | //_____________________________________________________________________________ | |
877 | AliZDCChMap* AliZDCRawStream::GetChMap() const | |
878 | { | |
879 | ||
880 | // Getting calibration object for ZDC | |
881 | ||
882 | AliCDBEntry *entry = AliCDBManager::Instance()->Get("ZDC/Calib/ChMap"); | |
883 | if(!entry) AliFatal("No calibration data loaded!"); | |
884 | ||
885 | AliZDCChMap *calibdata = dynamic_cast<AliZDCChMap*> (entry->GetObject()); | |
886 | if(!calibdata) AliFatal("Wrong calibration object in calibration file!"); | |
887 | ||
888 | return calibdata; | |
889 | } |