X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=inline;f=FMD%2FAliFMDRawStream.cxx;h=34337e67d9956892c6fb5d489024e340e0c833d8;hb=6a265faf9bc1ec37f0b8b255250850f15c69c48e;hp=89b4b83c1ad609c8d8cd4996b9fadbea69e633f6;hpb=2b893216a60932c634827f02a8ba890f816fdc38;p=u%2Fmrichter%2FAliRoot.git diff --git a/FMD/AliFMDRawStream.cxx b/FMD/AliFMDRawStream.cxx index 89b4b83c1ad..34337e67d99 100644 --- a/FMD/AliFMDRawStream.cxx +++ b/FMD/AliFMDRawStream.cxx @@ -32,6 +32,8 @@ #include "AliFMDDebug.h" // Better debug macros // #include // #include +#include "AliRawReader.h" +#include //____________________________________________________________________ ClassImp(AliFMDRawStream) @@ -44,7 +46,7 @@ AliFMDRawStream::AliFMDRawStream(AliRawReader* reader) : AliAltroRawStream(reader) { // CTOR - fNoAltroMapping = kFALSE; + reader->Reset(); // Select FMD DDL's SelectRawData("FMD"); } @@ -52,7 +54,7 @@ AliFMDRawStream::AliFMDRawStream(AliRawReader* reader) //_____________________________________________________________________________ Bool_t AliFMDRawStream::ReadChannel(UInt_t& ddl, UInt_t& addr, - UInt_t& len, UShort_t* data) + UInt_t& len, volatile UShort_t* data) { // Read one channel and return. Returns 0 when there's no more // data. @@ -65,8 +67,9 @@ AliFMDRawStream::ReadChannel(UInt_t& ddl, UInt_t& addr, AliFMDDebug(30, ("Last is 0x%x, so reading a new word", last)); next = Next(); if(!next){ + AliFMDDebug(15, ("Read word # %d (!next)", l)); addr = GetPrevHWAddress(); - ddl = GetPrevDDLNumber(); + ddl = (GetPrevDDLNumber() < 0 ? UINT_MAX: GetPrevDDLNumber()); len = l+1; // Need to add one - l points to last valid index last = signal; break; @@ -76,16 +79,39 @@ AliFMDRawStream::ReadChannel(UInt_t& ddl, UInt_t& addr, AliFMDDebug(15, ("New hardware address, was 0x%x, now 0x%x", GetPrevHWAddress(), GetHWAddress())); addr = GetPrevHWAddress(); - ddl = GetPrevDDLNumber(); + ddl = (GetPrevDDLNumber() < 0 ? UINT_MAX : GetPrevDDLNumber()); len = l+1; // Need to add one - l points to last valid index last = signal; break; } } + // Sanity check - if the total bunch length is less than 1, then + // read until we get the next bunch. + Int_t b = GetTimeLength(); + if (b < 1) { + AliWarning(Form("Bunch length %0d is less than 0 for " + "DDL %4d address 0x%03x", + b, ddl, addr)); + last = 0xFFFF; + continue; + } + + // Sanity check - if the current time is less than 0, then read + // until we get a new bunch. Int_t t = GetTime(); + if (t < 0) { + AliWarning(Form("Time %0d is less than 0 for DDL %4d address 0x%03x", + t, ddl, addr)); + last = 0xFFFF; + continue; + } l = TMath::Max(l, t); data[t] = signal; last = 0xFFFF; +#if 0 + AliFMDDebug(signal > 512 ? 1 : 0, ("Signal @ %d (%d) is %d", + time, t, data[t])); +#endif } while (next); return next; }