//_____________________________________________________________________________
AliAltroRawStream::AliAltroRawStream(AliRawReader* rawReader) :
- fNoAltroMapping(kTRUE),
fIsShortDataHeader(kFALSE),
fDDLNumber(-1),
fPrevDDLNumber(-1),
fAltroCFG2(0)
{
// create an object to read Altro raw digits
- fSegmentation[0] = fSegmentation[1] = fSegmentation[2] = -1;
}
//_____________________________________________________________________________
AliAltroRawStream::AliAltroRawStream(const AliAltroRawStream& stream) :
TObject(stream),
- fNoAltroMapping(stream.fNoAltroMapping),
fIsShortDataHeader(stream.fIsShortDataHeader),
fDDLNumber(stream.fDDLNumber),
fPrevDDLNumber(stream.fPrevDDLNumber),
fAltroCFG1(stream.fAltroCFG1),
fAltroCFG2(stream.fAltroCFG2)
{
- fSegmentation[0] = stream.fSegmentation[0];
- fSegmentation[1] = stream.fSegmentation[1];
- fSegmentation[2] = stream.fSegmentation[2];
}
//_____________________________________________________________________________
{
if(&stream == this) return *this;
- fNoAltroMapping = stream.fNoAltroMapping;
fIsShortDataHeader = stream.fIsShortDataHeader;
fDDLNumber = stream.fDDLNumber;
fPrevDDLNumber = stream.fPrevDDLNumber;
fAltroCFG1 = stream.fAltroCFG1;
fAltroCFG2 = stream.fAltroCFG2;
- fSegmentation[0] = stream.fSegmentation[0];
- fSegmentation[1] = stream.fSegmentation[1];
- fSegmentation[2] = stream.fSegmentation[2];
-
return *this;
}
fDDLNumber = fPrevDDLNumber = fRCUId = fPrevRCUId = fHWAddress = fPrevHWAddress = fTime = fPrevTime = fSignal = fTimeBunch = -1;
if (fRawReader) fRawReader->Reset();
-
- fSegmentation[0] = fSegmentation[1] = fSegmentation[2] = -1;
}
//_____________________________________________________________________________
return kTRUE;
}
+//_____________________________________________________________________________
+Bool_t AliAltroRawStream::NextDDL(UChar_t *data)
+{
+ if (!data) {
+ do {
+ if (!fRawReader->ReadNextData(fData)) return kFALSE;
+ } while (fRawReader->GetDataSize() == 0);
+ }
+ else {
+ fData = data;
+ }
+
+ fDDLNumber = fRawReader->GetDDLID();
+ fPosition = GetPosition();
+
+ return kTRUE;
+}
+
+//_____________________________________________________________________________
+Bool_t AliAltroRawStream::NextChannel()
+{
+ if (fPosition <= 0) return kFALSE;
+
+ ReadTrailer();
+
+ return kTRUE;
+}
+
+//_____________________________________________________________________________
+Bool_t AliAltroRawStream::NextBunch(UShort_t *bunchData,
+ Int_t &bunchLength,
+ Int_t &startTimeBin)
+{
+ if (fCount == 0) return kFALSE;
+
+ ReadBunch();
+ bunchLength = fTimeBunch;
+ startTimeBin = fTime;
+
+ while (fBunchLength > 0) {
+ ReadAmplitude();
+ bunchData[bunchLength-fBunchLength-1] = fSignal;
+ }
+
+ return kTRUE;
+}
+
//_____________________________________________________________________________
void AliAltroRawStream::SelectRawData(Int_t detId)
{
Bool_t AliAltroRawStream::ReadTrailer()
{
//Read a trailer of 40 bits in the backward reading mode
- //In case of no mapping is provided, read a dummy trailer
- if (fNoAltroMapping) {
- AliError("No ALTRO mapping information is loaded! Reading a dummy trailer!");
- return ReadDummyTrailer();
- }
-
//First reading filling words
UShort_t temp;
Int_t nFillWords = 0;
return kTRUE;
}
-//_____________________________________________________________________________
-Bool_t AliAltroRawStream::ReadDummyTrailer()
-{
- //Read a trailer of 40 bits in the backward reading mode
- //In case of no mapping is provided, read a dummy trailer
- UShort_t temp;
- while ((temp = GetNextWord()) == 0x2AA);
-
- fSegmentation[0] = temp;
- fSegmentation[1] = GetNextWord();
- fSegmentation[2] = GetNextWord();
- fCount = GetNextWord();
- if (fCount == 0) return kFALSE;
- fHWAddress = -1;
-
- fPosition -= (4 - (fCount % 4)) % 4; // skip fill words
-
- return kTRUE;
-}
-
//_____________________________________________________________________________
void AliAltroRawStream::ReadBunch()
{
break;
case 7:
// RDO_CFG1
- fAltroCFG1 = parData & 0x7FFFF;
+ fAltroCFG1 = parData & 0xFFFFF;
break;
case 8:
// RDO_CFG2
if (index < 4) {
fRawReader->AddMajorErrorLog(kRCUTrailerErr,Form("tr=%d raw=%d bytes",
- trailerSize*4,
+ fRCUTrailerSize,
fRawReader->GetDataSize()));
AliWarning(Form("Invalid trailer size found (%d bytes) ! The size is bigger than the raw data size (%d bytes)!",
- trailerSize*4,
+ fRCUTrailerSize,
fRawReader->GetDataSize()));
}
- fRCUTrailerSize = trailerSize*4;
fRCUTrailerData = fData + index;
Int_t position = Get32bitWord(index);