X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=RAW%2FAliAltroData.cxx;h=a94e1f8f0c7f7dd32de1cfb258ce9e6451e3b094;hb=b3d9a7bb7eb5dbca7d8fafba6c52eb5733d47f2f;hp=a240c8e0d453f12e0047b867901c24b96da560e9;hpb=84111923ddb59ea1c4d425f9fe732aba09cb0916;p=u%2Fmrichter%2FAliRoot.git diff --git a/RAW/AliAltroData.cxx b/RAW/AliAltroData.cxx index a240c8e0d45..a94e1f8f0c7 100644 --- a/RAW/AliAltroData.cxx +++ b/RAW/AliAltroData.cxx @@ -19,13 +19,14 @@ ClassImp(AliAltroData) AliAltroData::AliAltroData(): fData(0), - fBunchData(0), - fDataSize(0), - fWc(0), - fHadd(-1), - fPrevHadd(-1), - fBunchCounter(0), - fIsComplete(0) + fBunchData(0), + fDataSize(0), + fWc(0), + fHadd(-1), + fPrevHadd(-1), + fBunchCounter(0), + fIsComplete(0), + fBufferLeft(0) { @@ -92,12 +93,12 @@ AliAltroData::NextBunch(AliAltroBunch *altroBunch) -Bool_t AliAltroData::NextBunch(AliAltroBunch *altroBunch) + //Bool_t AliAltroData::NextBunch(AliAltroBunch *altroBunch) +int AliAltroData::NextBunch(AliAltroBunch *altroBunch) { if(fIsComplete == kTRUE) { - if(fBunchCounter == 0) { fBunchData = &fData[fDataSize - 1]; @@ -108,9 +109,50 @@ Bool_t AliAltroData::NextBunch(AliAltroBunch *altroBunch) if(*fBunchData == 0){ fWc += 1;}; fWc += *fBunchData; altroBunch->SetData(fData + fDataSize - fWc); - altroBunch->SetBunchSize(*fBunchData -2); + + int tmpsize = *fBunchData -2; + + // altroBunch->SetBunchSize( *fBunchData -2 ); + altroBunch->SetBunchSize( tmpsize ); + + + fBufferLeft -= *fBunchData; + // printf("%s:%d, bufferleft = %d \n", __FILE__, __LINE__ , fBufferLeft); fBunchData --; altroBunch->SetEndTimeBin( *fBunchData ); + + // Matthias Oct 10 2008: those checks are certainly a bug, first the + // bunch size is subtracted from fBufferLeft ... and than once again + // I can understand that it should not be negative but the check as + // committed in revision 29090 is wrong. + // Effectively, this is always skipping the last bunch of the last + // channel. + // if( (fBufferLeft <= 7 ) || ( fBufferLeft - tmpsize) <= 7) + //if( fBufferLeft - tmpsize <= 7) + if( fBufferLeft < 0) + { + // printf("%s:%d, ERROR, attempt too access buffer outside allowed range\n", __FILE__ , __LINE__ ); + return kFALSE; + } + + + if(fBunchCounter >0) + { + int tmpret = altroBunch->CheckConsistency(); + + if(tmpret != kTRUE) + { + return tmpret; + } + + /* + if( altroBunch->CheckConsistency() == kFALSE) + { + return kFALSE; + } + */ + } + // altroBunch->SetStartTimeBin(*fBunchData - fBunchSize); fBunchData -= (altroBunch->GetBunchSize() +1); @@ -122,7 +164,6 @@ Bool_t AliAltroData::NextBunch(AliAltroBunch *altroBunch) return kFALSE; } - fBunchCounter ++; return kTRUE; } @@ -136,7 +177,7 @@ Bool_t AliAltroData::NextBunch(AliAltroBunch *altroBunch) else { // printf("\nAliAltroData::NextBunch: WARNING, dataset is not complet. 2AAA endmarker is missing "); - // printf("\nfor branch %d, card %d, chip %d, channel %d\n", GetBranch(), GetCard(), GetChip(), GetChannel()); + // printf("\nfor branch %d, card %d, chip %d, channel %d\n", GetBranch(), GetCard(), GetChip(), GetChannel()); return kFALSE; }