AliAltroRawStream::AliAltroRawStream(AliRawReader* rawReader) :
fNoAltroMapping(kTRUE),
fIsOldRCUFormat(kFALSE),
+ fIsShortDataHeader(kFALSE),
fDDLNumber(-1),
fPrevDDLNumber(-1),
fRCUId(-1),
TObject(stream),
fNoAltroMapping(kTRUE),
fIsOldRCUFormat(kFALSE),
+ fIsShortDataHeader(kFALSE),
fDDLNumber(-1),
fPrevDDLNumber(-1),
fRCUId(-1),
// Therefore we need to transform it to number of bytes
position *= 5;
- // Check the consistency of the header and trailer
- if ((fRawReader->GetDataSize() - 4) != position)
- AliFatal(Form("Inconsistent raw data size ! Expected %d bytes (from the header), found %d bytes (in the RCU trailer)!",
- fRawReader->GetDataSize()-4,
- position));
+ if (!fIsShortDataHeader) {
+ // Check the consistency of the header and trailer
+ if ((fRawReader->GetDataSize() - 4) != position)
+ AliFatal(Form("Inconsistent raw data size ! Expected %d bytes (from the header), found %d bytes (in the RCU trailer)!",
+ fRawReader->GetDataSize()-4,
+ position));
+ }
+ else {
+ // Check the consistency of the header and trailer
+ // In this case the header is shorter by 4 bytes
+ if (fRawReader->GetDataSize() != position)
+ AliFatal(Form("Inconsistent raw data size ! Expected %d bytes (from the header), found %d bytes (in the RCU trailer)!",
+ fRawReader->GetDataSize(),
+ position));
+
+ // 7 32-bit words Common Data Header
+ // therefore we have to shift back by 4 bytes
+ // the pointer to the raw data payload
+ fData -= 4;
+ }
+
// Return the position in units of 10-bit words
return position*8/10;
}
///
/// This is a base class for reading raw data digits in Altro format
/// The class is able to read both old and new RCU trailer formats
-/// One can switch between formats using fIsOldRCUFormat flag
+/// One can switch between formats using fIsOldRCUFormat flag.
+/// In case the Common Data Header is 7 32-bit words long, one
+/// can use the fIsShortDataHeader flag.
///
///////////////////////////////////////////////////////////////////////////////
void SetNoAltroMapping(Bool_t flag) { fNoAltroMapping = flag; } // Specify whenever to use or not the altro mapping
void SetOldRCUFormat(Bool_t flag) { fIsOldRCUFormat = flag; } // Specify whenever to use or not the old RCU trailer format
+ void SetShortDataHeader(Bool_t flag) { fIsShortDataHeader = flag; } // Specify whenever to assume or not a short CDH format
protected:
AliAltroRawStream(const AliAltroRawStream& stream);
Short_t fSegmentation[3]; // temporary container for the dummy trailer, to be removed
Bool_t fIsOldRCUFormat; // flag used to select between old and new RCU trailer format
+ Bool_t fIsShortDataHeader; // flag used to select between normal and short CDH format
private :