//__________________________________________________________________________
AliITSRawStreamSPD::AliITSRawStreamSPD(AliRawReader* rawReader) :
AliITSRawStream(rawReader),
- fEventCounter(-1),fChipAddr(0),fHalfStaveNr(0),fCol(0),fRow(0),
+ fEventCounter(-1),fChipAddr(0),fHalfStaveNr(0),fCol(0),fRow(0),fCalHeadLen(0),
fData(0),fOffset(0),fHitCount(0),
fDataChar1(0),fDataChar2(0),fDataChar3(0),fDataChar4(0),
fFirstWord(kTRUE),fPrevEventId(0xffffffff),
//__________________________________________________________________________
AliITSRawStreamSPD::AliITSRawStreamSPD(const AliITSRawStreamSPD& rstream) :
AliITSRawStream(rstream.fRawReader),
- fEventCounter(-1),fChipAddr(0),fHalfStaveNr(0),fCol(0),fRow(0),
+ fEventCounter(-1),fChipAddr(0),fHalfStaveNr(0),fCol(0),fRow(0),fCalHeadLen(0),
fData(0),fOffset(0),fHitCount(0),
fDataChar1(0),fDataChar2(0),fDataChar3(0),fDataChar4(0),
fFirstWord(kTRUE),fPrevEventId(0xffffffff),
fHeaderOrTrailerReadLast = kFALSE;
fFillOutOfSynch = kFALSE;
+ // check router error bits:
+ UInt_t statusBits = fRawReader->GetStatusBits();
+ if ((statusBits >> 5) & 1) { // linkrx/detector fatal error bit
+ TString errMess = "LinkRx Error Bit Set";
+ AliError(errMess.Data());
+ fRawReader->AddMajorErrorLog(kLinkRxDetectorFatalErr,errMess.Data());
+ if (fAdvancedErrorLog) fAdvLogger->ProcessError(kLinkRxDetectorFatalErr,ddlID,-1,-1,errMess.Data());
+ }
+ if ((statusBits >> 12) & 1) { // trigger sequence monitor error bit
+ TString errMess = "TSM Trigger Error Bit Set";
+ AliError(errMess.Data());
+ fRawReader->AddMajorErrorLog(kTSMtriggerErr,errMess.Data());
+ if (fAdvancedErrorLog) fAdvLogger->ProcessError(kTSMtriggerErr,ddlID,-1,-1,errMess.Data());
+ }
+ if (fRawReader->TestBlockAttribute(7)) { // bunch crossing difference error bit
+ TString errMess = "High Multiplicity Event Flag Set";
+ AliError(errMess.Data());
+ fRawReader->AddMajorErrorLog(kHighMultiplicityFlag,errMess.Data());
+ if (fAdvancedErrorLog) fAdvLogger->ProcessError(kHighMultiplicityFlag,ddlID,-1,-1,errMess.Data());
+ }
+
// set eq active and the participating half-staves (for access from outside this class),
// set what number of chip headers/trailers to expect (for the moment not used)
fActiveEq[ddlID]=kTRUE;
if (fRawReader->TestBlockAttribute(6)) { // is the calib header present?
if (ReadNextInt()) {
// length of cal header:
- UInt_t calLen = fDataChar1+(fDataChar2<<8)+(fDataChar3<<16)+(fDataChar4<<24);
- if (calLen>kCalHeadLenMax) {
- TString errMess = Form("Header length %d > max = %d",calLen,kCalHeadLenMax);
+ fCalHeadLen = fDataChar1+(fDataChar2<<8)+(fDataChar3<<16)+(fDataChar4<<24);
+ if (fCalHeadLen>kCalHeadLenMax) {
+ TString errMess = Form("Header length %d > max = %d",fCalHeadLen,kCalHeadLenMax);
AliError(errMess.Data());
fRawReader->AddMajorErrorLog(kCalHeaderLengthErr,errMess.Data());
if (fAdvancedErrorLog) fAdvLogger->ProcessError(kCalHeaderLengthErr,ddlID,-1,-1,errMess.Data());
return -1;
}
else {
- for (UInt_t iword=0; iword<calLen; iword++) {
+ for (UInt_t iword=0; iword<fCalHeadLen; iword++) {
if (ReadNextInt()) {
fCalHeadWord[iword] = fDataChar1+(fDataChar2<<8)+(fDataChar3<<16)+(fDataChar4<<24);
}
return -1;
}
}
- return calLen;
+ return fCalHeadLen;
}
}
}
else if (errorCode==kAdvEventCounterErr) return "Event Counter Error (Adv)";
else if (errorCode==kAdvEventCounterOrderErr) return "Event Counter Jump Error (Adv)";
else if (errorCode==kTrailerErrorBitErr) return "Trailer Error Bit Set";
+ else if (errorCode==kLinkRxDetectorFatalErr) return "LinkRx/Detector Fatal Error Bit Set";
+ else if (errorCode==kTSMtriggerErr) return "TSM Trigger Error Bit Set";
+ else if (errorCode==kHighMultiplicityFlag) return "High Multiplicity Event Flag Set";
else return "";
}
//__________________________________________________________________________
return -1;
}
//__________________________________________________________________________
+Int_t AliITSRawStreamSPD::GetHword(UInt_t index) {
+ if (index<kCalHeadLenMax) return fCalHeadWord[index];
+ else return 0;
+}
Bool_t AliITSRawStreamSPD::GetHhalfStaveScanned(UInt_t hs) const {
if (hs<6) return (Bool_t)((fCalHeadWord[0]>>(6+hs)) & (0x00000001));
else return kFALSE;
if (chip<10) return ((( fCalHeadWord[7]>>(16+chip)) & 0x00000001) == 1);
else return kFALSE;
}
+UInt_t AliITSRawStreamSPD::GetFOHnumDacs() const {
+ return (fCalHeadLen-37)/2;
+}
+UInt_t AliITSRawStreamSPD::GetFOHdacIndex(UInt_t index) const {
+ if (index>=GetFOHnumDacs()) {
+ TString errMess = Form("Only %d DACs in this run, returning 0",GetFOHnumDacs());
+ AliError(errMess.Data());
+ return 0;
+ }
+ return fCalHeadWord[7+index*2];
+}
+UInt_t AliITSRawStreamSPD::GetFOHdacValue(UInt_t index) const {
+ if (index>=GetFOHnumDacs()) {
+ TString errMess = Form("Only %d DACs in this run, returning 0",GetFOHnumDacs());
+ AliError(errMess.Data());
+ return 0;
+ }
+ return fCalHeadWord[7+1+index*2];
+}
+UInt_t AliITSRawStreamSPD::GetFOHchipCount(UInt_t hs, UInt_t chip) const {
+ if (hs<6 && chip<10) {
+ if (chip%2==0) {
+ return ((fCalHeadWord[7 + GetFOHnumDacs()*2 + (hs*10 + chip)/2] >> 16) & 0x0000ffff);
+ }
+ else {
+ return (fCalHeadWord[7 + GetFOHnumDacs()*2 + (hs*10 + chip)/2] & 0x0000ffff);
+ }
+ }
+ else return 0;
+}
//__________________________________________________________________________
Int_t AliITSRawStreamSPD::GetModuleNumber(UInt_t iDDL, UInt_t iModule) {
if (iDDL<20 && iModule<12) return fgkDDLModuleMap[iDDL][iModule];
else return 240;
}
//__________________________________________________________________________
+UInt_t AliITSRawStreamSPD::GetOfflineChipKeyFromOnline(UInt_t eqId, UInt_t hs, UInt_t chip) {
+ // online->offline (chip key: 0-1199)
+ if (eqId<20 && hs<6 && chip<10) {
+ UInt_t module = GetOfflineModuleFromOnline(eqId,hs,chip);
+ UInt_t chipInModule = ( chip>4 ? chip-5 : chip );
+ if(eqId>9) chipInModule = 4 - chipInModule; // side C only
+ return (module*5 + chipInModule);
+ } else return 1200;
+}
+//__________________________________________________________________________
UInt_t AliITSRawStreamSPD::GetOfflineColFromOnline(UInt_t eqId, UInt_t hs, UInt_t chip, UInt_t col) {
// online->offline (col)
if (eqId>=20 || hs>=6 || chip>=10 || col>=32) return 160; // error
return 255-row;
}
-
-
-