ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

///////////////////////////////////////////////////////////////////////////////
///
/// This is a base class for reading raw data digits in Altro format.
/// The class is able to read the RCU v3 and above formats.
/// The main difference between the format V3 and older ones is in
/// the coding of the 10-bit Altro payload words. In V3 3 10-bit words
/// are coded in one 32-bit word. The bits 30 and 31 are used to identify
/// the payload, altro header and RCU trailer contents.
///
///
/// cvetan.cheshkov@cern.ch 1/04/2009
///////////////////////////////////////////////////////////////////////////////

#include "AliAltroRawStreamV3.h"
#include "AliRawReader.h"
#include "AliLog.h"
#include "AliAltroRawStream.h"
#include "AliRawEventHeaderBase.h"

ClassImp(AliAltroRawStreamV3)


//_____________________________________________________________________________
AliAltroRawStreamV3::AliAltroRawStreamV3(AliRawReader* rawReader) :
  fIsShortDataHeader(kFALSE),
  fDDLNumber(-1),
  fRCUId(-1),
  fHWAddress(-1),
  fRawReader(rawReader),
  fData(NULL),
  fChannelStartPos(-1),
  fPosition(-1),
  fCount(-1),
  fStartTimeBin(-1),
  fBunchLength(-1),
  fBadChannel(kFALSE),
  fPayloadSize(-1),
  fChannelPayloadSize(-1),
  fBunchDataPointer(NULL),
  fBunchDataIndex(-1),
  fRCUTrailerData(NULL),
  fRCUTrailerSize(0),
  fFECERRA(0),
  fFECERRB(0),
  fERRREG2(0),
  fERRREG3(0),
  fActiveFECsA(0),
  fActiveFECsB(0),
  fAltroCFG1(0),
  fAltroCFG2(0),
  fOldStream(NULL),
  fCheckAltroPayload(kTRUE),
  fFormatVersion(0)
{
  // Constructor
  // Create an object to read Altro raw digits in
  // RCU version 3 and beyond format
  for(Int_t i = 0; i < kMaxNTimeBins; i++) fBunchData[i] = 0;
}

//_____________________________________________________________________________
AliAltroRawStreamV3::~AliAltroRawStreamV3()
{
// destructor
// delete old stream object if one exists
  if (fOldStream) delete fOldStream;
}

//_____________________________________________________________________________
AliAltroRawStreamV3::AliAltroRawStreamV3(const AliAltroRawStreamV3& stream) :
  TObject(stream),
  fIsShortDataHeader(stream.fIsShortDataHeader),
  fDDLNumber(stream.fDDLNumber),
  fRCUId(stream.fRCUId),
  fHWAddress(stream.fHWAddress),
  fRawReader(stream.fRawReader),
  fData(stream.fData),
  fChannelStartPos(stream.fChannelStartPos),
  fPosition(stream.fPosition),
  fCount(stream.fCount),
  fStartTimeBin(stream.fStartTimeBin),
  fBunchLength(stream.fBunchLength),
  fBadChannel(stream.fBadChannel),
  fPayloadSize(stream.fPayloadSize),
  fChannelPayloadSize(stream.fChannelPayloadSize),
  fBunchDataPointer(stream.fBunchDataPointer),
  fBunchDataIndex(stream.fBunchDataIndex),
  fRCUTrailerData(stream.fRCUTrailerData),
  fRCUTrailerSize(stream.fRCUTrailerSize),
  fFECERRA(stream.fFECERRA),
  fFECERRB(stream.fFECERRB),
  fERRREG2(stream.fERRREG2),
  fERRREG3(stream.fERRREG3),
  fActiveFECsA(stream.fActiveFECsA),
  fActiveFECsB(stream.fActiveFECsB),
  fAltroCFG1(stream.fAltroCFG1),
  fAltroCFG2(stream.fAltroCFG2),
  fOldStream(NULL),
  fCheckAltroPayload(stream.fCheckAltroPayload),
  fFormatVersion(0)
{
  // Copy constructor
  // Copy the bunch data array
  for(Int_t i = 0; i < kMaxNTimeBins; i++) fBunchData[i] = stream.fBunchData[i];

  if (stream.fOldStream)
    fOldStream = new AliAltroRawStream(*stream.fOldStream);
}

//_____________________________________________________________________________
AliAltroRawStreamV3& AliAltroRawStreamV3::operator = (const AliAltroRawStreamV3& stream)
{
  // assignment operator
  // ... 
  if(&stream == this) return *this;

  fIsShortDataHeader = stream.fIsShortDataHeader;
  fDDLNumber         = stream.fDDLNumber;
  fRCUId             = stream.fRCUId;
  fHWAddress         = stream.fHWAddress;
  fRawReader         = stream.fRawReader;
  fData              = stream.fData;
  fChannelStartPos   = stream.fChannelStartPos;
  fPosition          = stream.fPosition;
  fCount             = stream.fCount;
  fStartTimeBin      = stream.fStartTimeBin;
  fBunchLength       = stream.fBunchLength;
  fBadChannel        = stream.fBadChannel;
  fPayloadSize       = stream.fPayloadSize;
  fChannelPayloadSize= stream.fChannelPayloadSize;
  fBunchDataPointer  = stream.fBunchDataPointer;
  fBunchDataIndex    = stream.fBunchDataIndex;
  fRCUTrailerData    = stream.fRCUTrailerData;
  fRCUTrailerSize    = stream.fRCUTrailerSize;
  fFECERRA           = stream.fFECERRA;
  fFECERRB           = stream.fFECERRB;
  fERRREG2           = stream.fERRREG2;
  fERRREG3           = stream.fERRREG3;
  fActiveFECsA       = stream.fActiveFECsA;
  fActiveFECsB       = stream.fActiveFECsB;
  fAltroCFG1         = stream.fAltroCFG1;
  fAltroCFG2         = stream.fAltroCFG2;
  fFormatVersion     = stream.fFormatVersion;

  for(Int_t i = 0; i < kMaxNTimeBins; i++) fBunchData[i] = stream.fBunchData[i];

  if (stream.fOldStream) {
    if (fOldStream) delete fOldStream;
    fOldStream = new AliAltroRawStream(stream.fRawReader);
    *fOldStream = *stream.fOldStream;
  }

  fCheckAltroPayload = stream.fCheckAltroPayload;

  return *this;
}

//_____________________________________________________________________________
void AliAltroRawStreamV3::Reset()
{
// Complete reset of raw stream params
// Reset of the raw-reader as well

  fDDLNumber = fRCUId = fHWAddress = -1;
  fChannelStartPos = -1;
  fPosition = fCount = -1;
  fBunchLength = fStartTimeBin = -1;
  fBadChannel = kFALSE;
  fPayloadSize = -1;
  fChannelPayloadSize = -1;
  fBunchDataPointer = NULL;
  fBunchDataIndex = -1;

  fRCUTrailerData = NULL;
  fRCUTrailerSize = 0;

  fFECERRA = fFECERRB = fERRREG2 = fERRREG3 = fActiveFECsA = fActiveFECsB = fAltroCFG1 = fAltroCFG2 = 0;

  if (fRawReader) fRawReader->Reset();

  if (fOldStream) fOldStream->Reset();
}

//_____________________________________________________________________________
Bool_t AliAltroRawStreamV3::NextDDL()
{
// Read the next DDL payload (CDH + RCU trailer)
// Updates the information which is coming from these
// two sources
  fFormatVersion = 0;
  fPosition = 0;
  // Get next DDL payload
  // return wtih false in case no more data payloads
  // are found
  do {
    if (!fRawReader->ReadNextData(fData)) return kFALSE;
  } while (fRawReader->GetDataSize() == 0);

  fDDLNumber = fRawReader->GetDDLID();
  fChannelPayloadSize = -1;
  fChannelStartPos = -1;

  fFormatVersion = (fRawReader->GetBlockAttributes() & 0xF);

  if (fFormatVersion < 2) {
    // old altro format data
    if (!fOldStream) {
      fOldStream = new AliAltroRawStream(fRawReader);
      AliInfo(Form("RCU firmware verion %d detected. Using AliAltroRawStream to decode the data.",
		   fFormatVersion));
    }
    Bool_t status = fOldStream->NextDDL(fData);
    if (status) {
      fRCUId = fOldStream->GetRCUId();
      fRCUTrailerSize = fOldStream->GetRCUTrailerSize();
      fOldStream->GetRCUTrailerData(fRCUTrailerData);
      fFECERRA = fOldStream->GetFECERRA();
      fFECERRB = fOldStream->GetFECERRB();
      fERRREG2 = fOldStream->GetERRREG2();
      fERRREG3 = ((UInt_t)fOldStream->GetNChAddrMismatch()) |
	(((UInt_t)fOldStream->GetNChLengthMismatch()) << 12);
      fActiveFECsA = fOldStream->GetActiveFECsA();
      fActiveFECsB = fOldStream->GetActiveFECsB();
      fAltroCFG1 = fOldStream->GetAltroCFG1();
      fAltroCFG2 = fOldStream->GetAltroCFG2();
      if (fRawReader->GetType() == AliRawEventHeaderBase::kStartOfData)
	fPayloadSize = fOldStream->GetRCUPayloadSizeInSOD();
    }
    return status;
  }

  return ReadRCUTrailer(fFormatVersion);
}

//_____________________________________________________________________________
Bool_t AliAltroRawStreamV3::NextChannel()
{
  // Read the next Altro channel from the
  // raw-data stream
  // Updates the channel hardware address member and
  // channel data size. Sets the error flag in case
  // RCU signals readout error in this channel
  if (fOldStream) {
    Bool_t status = fOldStream->NextChannel();
    if (status) {
      fHWAddress = fOldStream->GetHWAddress();
      fChannelPayloadSize = fOldStream->GetChannelPayloadSize();
    }
    return status;
  }

  Int_t channelStartPos=fPosition;
  fChannelStartPos = -1;
  fCount = -1;
  fBadChannel = kFALSE;
  fBunchDataIndex = 0;
  fBunchLength = -1;

  UInt_t word = 0;
  do {
    word = Get32bitWord(fPosition++);
    if (fPosition > fPayloadSize) return kFALSE;
  }
  while ((word >> 30) != 1);

  // check for readout errors
  fBadChannel = (word >> 29) & 0x1;

  // extract channel payload and hw address
  fCount = (word >> 16) & 0x3FF; 
  fChannelPayloadSize = fCount;
  fHWAddress = word & 0xFFF;

  // Now unpack the altro data
  // Revert the order of the samples
  // inside the bunch so that the
  // first time is first in the samples
  // array
  Int_t isample = 0;
  Int_t nwords = (fCount+2)/3;
  for (Int_t iword = 0; iword < nwords; iword++) {
    word = Get32bitWord(fPosition++);
    if ((word >> 30) != 0) {
      // Unexpected end of altro channel payload
      AliWarning(Form("Unexpected end of payload in altro channel payload! DDL=%03d, Address=0x%x, word=0x%x",
		      fDDLNumber,fHWAddress,word));
      fRawReader->AddMinorErrorLog(kAltroPayloadErr,Form("hw=0x%x",fHWAddress));
      if (AliDebugLevel() > 0) HexDumpChannel();
      fCount = -1;
      fPosition--;
      return kFALSE;
    }
    fBunchData[isample++] = (word >> 20) & 0x3FF;
    fBunchData[isample++] = (word >> 10) & 0x3FF;
    fBunchData[isample++] = word & 0x3FF;
  }  

  fChannelStartPos=channelStartPos;
  return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliAltroRawStreamV3::NextBunch()
{
  // Read next altro bunch from the
  // raw-data stream.
  // Updates the start/end time-bins
  // and the array with altro samples
  if (fOldStream) {
    Bool_t status = fOldStream->NextBunch(fBunchData,fBunchLength,fStartTimeBin);
    if (status) fBunchDataPointer = &fBunchData[0];
    else fBunchDataPointer = NULL;
    return status;
  }

  Int_t prevTimeBin = (fBunchLength > 0) ? fStartTimeBin-fBunchLength+1 : 1024;
  fBunchLength = fStartTimeBin = -1;
  fBunchDataPointer = NULL;

  if ((fBunchDataIndex >= fCount) || fBadChannel) return kFALSE;

  fBunchLength = fBunchData[fBunchDataIndex];
  if (fBunchLength <= 2) {
    // Invalid bunch size
     AliDebug(1,Form("Too short bunch length (%d) @ %d in Address=0x%x (DDL=%03d)!",
		    fBunchLength,fBunchDataIndex,fHWAddress,fDDLNumber));
    fRawReader->AddMinorErrorLog(kAltroBunchHeadErr,Form("hw=0x%x",fHWAddress));
    if (AliDebugLevel() > 0) HexDumpChannel();
    fCount = fBunchLength = -1;
    return kFALSE;
  }
  if ((fBunchDataIndex + fBunchLength) > fCount) {
    // Too long bunch detected
    AliDebug(1,Form("Too long bunch detected @ %d in Address=0x%x (DDL=%03d) ! Expected <= %d 10-bit words, found %d !", fBunchDataIndex,
		    fHWAddress,fDDLNumber,fCount-fBunchDataIndex,fBunchLength));
    fRawReader->AddMinorErrorLog(kAltroBunchHeadErr,Form("hw=0x%x",fHWAddress));
    if (AliDebugLevel() > 0) HexDumpChannel();
    fCount = fBunchLength = -1;
    return kFALSE;
  }
  fBunchDataIndex++;
  fBunchLength -= 2;

  fStartTimeBin = fBunchData[fBunchDataIndex++];
  if (fCheckAltroPayload) {
    if ((fStartTimeBin-fBunchLength+1) < 0) {
      AliWarning(Form("Invalid start time-bin @ %d in Address=0x%x (DDL=%03d)! (%d-%d+1) < 0", fBunchDataIndex-1,
		      fHWAddress,fDDLNumber,fStartTimeBin,fBunchLength));
      fRawReader->AddMinorErrorLog(kAltroPayloadErr,Form("hw=0x%x",fHWAddress));
      if (AliDebugLevel() > 0) HexDumpChannel();
      fCount = fBunchLength = -1;
      return kFALSE;
    }
    if (fStartTimeBin >= prevTimeBin) {
      AliWarning(Form("Invalid start time-bin @ %d in Address=0x%x (DDL=%03d)! (%d>=%d)", fBunchDataIndex-1,
		      fHWAddress,fDDLNumber,fStartTimeBin,prevTimeBin));
      fRawReader->AddMinorErrorLog(kAltroPayloadErr,Form("hw=0x%x",fHWAddress));
      if (AliDebugLevel() > 0) HexDumpChannel();
      fCount = fBunchLength = -1;
      return kFALSE;
    }
  }

  fBunchDataPointer = &fBunchData[fBunchDataIndex];

  fBunchDataIndex += fBunchLength;

  return kTRUE;
}

//_____________________________________________________________________________
const UChar_t *AliAltroRawStreamV3::GetChannelPayload() const
{
  //returns raw channel data, length 4+(fChannelPayloadSize+2)/3*4
  if (fChannelStartPos<0 || fChannelPayloadSize<0) return NULL;
  Int_t channelSize=1+(fChannelPayloadSize+2)/3; // nof 32bit words
  if (fPosition<fChannelStartPos+channelSize) return NULL;
  return fData+(fChannelStartPos<<2);
}

//_____________________________________________________________________________
UInt_t AliAltroRawStreamV3::Get32bitWord(Int_t index) const
{
  // This method returns the 32 bit word at a given
  // position inside the raw data payload.
  // The 'index' points to the beginning of the word.
  // The method is supposed to be endian (platform)
  // independent.

  index = (index << 2); 
  UInt_t word  = 0;
  word |= fData[index++];
  word |= fData[index++] << 8;
  word |= fData[index++] << 16;
  word |= fData[index++] << 24;

  return word;
}

///_____________________________________________________________________________
Bool_t AliAltroRawStreamV3::ReadRCUTrailer(UChar_t rcuVer)
{
  // Read the RCU trailer according
  // to the RCU formware version
  // specified in CDH
  // Cross-check with version found in the
  // trailer

  fRCUTrailerData = NULL;
  fRCUTrailerSize = 0;
  fPayloadSize = -1;

  Int_t index = fRawReader->GetDataSize()/4;

  // First read 32-bit word with the
  // trailer size (7 bits), RCU ID (9 bits) and
  // RCU firmware version (8 bits?)
  // The two major bit should be 11 (identifies
  // the end of the trailer)
  UInt_t word = Get32bitWord(--index);

  if ((word >> 30) != 3) {
    fRawReader->AddFatalErrorLog(kRCUTrailerErr,"");
    AliError("Last RCU trailer word not found!");
    return kFALSE;
  }

  UChar_t ver = (word >> 16) & 0xFF;
  if (ver != rcuVer) {
    // Wrong RCU firmware version detected
    fRawReader->AddMajorErrorLog(kRCUVerErr,Form("%d!=%d",
						 ver,rcuVer));
    AliDebug(1,Form("Wrong RCU firmware version detected: %d != %d",
		    ver,rcuVer));
  }

  fRCUId = (Int_t)((word >> 7) & 0x1FF);
  Int_t trailerSize = (word & 0x7F);

  // Now read the beginning of the trailer
  // where the payload size is written
  if (trailerSize < 2) {
    fRawReader->AddMajorErrorLog(kRCUTrailerErr,Form("tr=%d bytes",
						     trailerSize*4));
    AliWarning(Form("Invalid trailer size found (%d bytes) !",
		    trailerSize*4));
    return kFALSE;
  }

  trailerSize -= 2;
  fRCUTrailerSize = trailerSize*4;

  for (; trailerSize > 0; trailerSize--) {
    word = Get32bitWord(--index);
    if ((word >> 30) != 2) {
      fRawReader->AddMinorErrorLog(kRCUTrailerErr,"missing 10");
      AliWarning("Missing RCU trailer identifier pattern!");
      continue;
    }
    Int_t parCode = (word >> 26) & 0xF;
    Int_t parData = word & 0x3FFFFFF;
    switch (parCode) {
    case 1:
      // ERR_REG1
      fFECERRA = ((parData >> 13) & 0x1FFF) << 7;
      fFECERRB = ((parData & 0x1FFF)) << 7;
      break;
    case 2:
      // ERR_REG2
      fERRREG2 = parData & 0x1FF;
      break;
    case 3:
      // ERR_REG3
      fERRREG3 = parData & 0x1FFFFFF;
      break;
    case 4:
      // FEC_RO_A
      fActiveFECsA = parData & 0xFFFF;
      break;
    case 5:
      // FEC_RO_B
      fActiveFECsB = parData & 0xFFFF;
      break;
    case 6:
      // RDO_CFG1
      fAltroCFG1 = parData & 0xFFFFF;
      break;
    case 7:
      // RDO_CFG2
      fAltroCFG2 = parData & 0x1FFFFFF;
     break;
    default:
      fRawReader->AddMinorErrorLog(kRCUTrailerErr,"undef word");
      AliWarning(Form("Undefined parameter code %d, ignore it !",
		      parCode));
      break;
    }
  }

  if (index < 1) {
    fRawReader->AddMajorErrorLog(kRCUTrailerErr,Form("tr=%d raw=%d bytes",
						     fRCUTrailerSize+8,
						     fRawReader->GetDataSize()));
    AliWarning(Form("Invalid trailer size found (%d bytes) ! The size is bigger than the raw data size (%d bytes)!",
		    fRCUTrailerSize,
		    fRawReader->GetDataSize()));
  }

  fRCUTrailerData = fData + index*4;

  // Now read the payload size
  // (First word in the RCU trailer)
  fPayloadSize = Get32bitWord(--index) & 0x3FFFFFF;

  if ((fRawReader->GetDataSize() - fRCUTrailerSize - 8) != (fPayloadSize*4)) {
    fRawReader->AddMajorErrorLog(kRCUTrailerSizeErr,Form("h=%d tr=%d rcu=%d bytes",
							 fRawReader->GetDataSize(),
							 fRCUTrailerSize+8,
							 fPayloadSize*4));
    AliWarning(Form("Inconsistent raw data size ! Raw data size - %d bytes (from CDH), RCU trailer - %d bytes, raw data size (from RCU trailer) - %d bytes !",
		    fRawReader->GetDataSize(),
		    fRCUTrailerSize+8,
		    fPayloadSize*4));
  }

  return kTRUE;
}

//_____________________________________________________________________________
Int_t AliAltroRawStreamV3::GetBranch() const
{
  // The method provides the RCU branch index (0 or 1)
  // for the current hardware address.
  // In case the hardware address has not been yet
  // initialized, the method returns -1
  if (fHWAddress == -1) return -1;

  return ((fHWAddress >> 11) & 0x1);
}

//_____________________________________________________________________________
Int_t AliAltroRawStreamV3::GetFEC() const
{
  // The method provides the front-end card index
  // for the current hardware address.
  // In case the hardware address has not been yet
  // initialized, the method returns -1
  if (fHWAddress == -1) return -1;

  return ((fHWAddress >> 7) & 0xF);
}

//_____________________________________________________________________________
Int_t AliAltroRawStreamV3::GetAltro() const
{
  // The method provides the altro chip index
  // for the current hardware address.
  // In case the hardware address has not been yet
  // initialized, the method returns -1
  if (fHWAddress == -1) return -1;

  return ((fHWAddress >> 4) & 0x7);
}

//_____________________________________________________________________________
Int_t AliAltroRawStreamV3::GetChannel() const
{
  // The method provides the channel index
  // for the current hardware address.
  // In case the hardware address has not been yet
  // initialized, the method returns -1
  if (fHWAddress == -1) return -1;

  return (fHWAddress & 0xF);
}

//_____________________________________________________________________________
Bool_t AliAltroRawStreamV3::GetRCUTrailerData(UChar_t*& data) const
{
  // Return a pointer to the RCU trailer
  // data. Should be called always after
  // the RCU trailer was already processed
  // in the GetPosition() method
  if (!fRCUTrailerSize || !fRCUTrailerData) {
    AliError("No valid RCU trailer data is found !");
    data = NULL;
    return kFALSE;
  }

  data = fRCUTrailerData;

  return kTRUE;
}

//_____________________________________________________________________________
void AliAltroRawStreamV3::PrintRCUTrailer() const
{
  // Prints the contents of
  // the RCU trailer data
  printf("RCU trailer (Format version %d):\n"
	 "==================================================\n",  GetFormatVersion());
  printf("FECERRA:                                   0x%x\n", fFECERRA);
  printf("FECERRB:                                   0x%x\n", fFECERRB);
  printf("ERRREG2:                                   0x%x\n", fERRREG2);
  printf("#channels skipped due to address mismatch: %d\n",GetNChAddrMismatch());
  printf("#channels skipped due to bad block length: %d\n",GetNChLengthMismatch());
  printf("Active FECs (branch A):                    0x%x\n", fActiveFECsA);
  printf("Active FECs (branch B):                    0x%x\n", fActiveFECsB);
  printf("Baseline corr:                             0x%x\n",GetBaselineCorr());
  printf("Number of presamples:                      %d\n", GetNPresamples());
  printf("Number of postsamples:                     %d\n",GetNPostsamples());
  printf("Second baseline corr:                      %d\n",GetSecondBaselineCorr());
  printf("GlitchFilter:                              %d\n",GetGlitchFilter());
  printf("Number of non-ZS postsamples:              %d\n",GetNNonZSPostsamples());
  printf("Number of non-ZS presamples:               %d\n",GetNNonZSPresamples());
  printf("Number of ALTRO buffers:                   %d\n",GetNAltroBuffers());
  printf("Number of pretrigger samples:              %d\n",GetNPretriggerSamples());
  printf("Number of samples per channel:             %d\n",GetNSamplesPerCh());
  printf("Sparse readout:                            %d\n",GetSparseRO());
  printf("Sampling time:                             %e s\n",GetTSample());
  printf("L1 Phase:                                  %e s\n",GetL1Phase());
  printf("AltroCFG1:                                 0x%x\n",GetAltroCFG1());
  printf("AltroCFG2:                                 0x%x\n",GetAltroCFG2());
  printf("==================================================\n");
}

//_____________________________________________________________________________
void AliAltroRawStreamV3::SelectRawData(Int_t detId)
{
  // Select the raw data for specific
  // detector id
  AliDebug(1,Form("Selecting raw data for detector %d",detId));
  fRawReader->Select(detId);
}

//_____________________________________________________________________________
void AliAltroRawStreamV3::SelectRawData(const char *detName)
{
  // Select the raw data for specific
  // detector name
  AliDebug(1,Form("Selecting raw data for detector %s",detName));
  fRawReader->Select(detName);
}

//_____________________________________________________________________________
Double_t AliAltroRawStreamV3::GetTSample() const
{
  // Returns the sampling time
  // in seconds. In case the rcu trailer
  // was note read, return an invalid number (0)

  if (!fRCUTrailerData) return 0.;

  const Double_t kLHCTimeSample = 25.0e-9; // LHC clocks runs at 40 MHz
  UChar_t fq = (fAltroCFG2 >> 5) & 0xF;
  Double_t tSample;
  switch (fq) {
  case 0:
    // 20 MHz
    tSample = 2.0*kLHCTimeSample;
    break;
  case 1:
    // 10 Mhz
    tSample = 4.0*kLHCTimeSample;
    break;
  case 2:
    // 5 MHz
    tSample = 8.0*kLHCTimeSample;
    break;
  default:
    AliWarning(Form("Invalid sampling frequency value %d !",
		      fq));
    tSample = 0.;
    break;
  }

  return tSample;
}

//_____________________________________________________________________________
Double_t AliAltroRawStreamV3::GetL1Phase() const
{
  // Returns the L1 phase w.r.t to the
  // LHC clock
  if (!fRCUTrailerData) return 0.;

  const Double_t kLHCTimeSample = 25.0e-9; // LHC clocks runs at 40 MHz
  Double_t phase = ((Double_t)(fAltroCFG2 & 0x1F))*kLHCTimeSample;

  Double_t tSample = GetTSample();
  if (phase >= tSample) {
    AliWarning(Form("Invalid L1 trigger phase (%f >= %f) !",
		    phase,tSample));
    phase = 0.;
  }

  return phase;
}

//_____________________________________________________________________________
void AliAltroRawStreamV3::AddMappingErrorLog(const char *message)
{
  // Signal a mapping error
  // The method can be used by the TPC,PHOS,EMCAL,FMD raw stream
  // classes in order to log an error related to bad altro mapping

  if (fRawReader) fRawReader->AddMinorErrorLog(kBadAltroMapping,message);
}

//_____________________________________________________________________________
UChar_t *AliAltroRawStreamV3::GetRCUPayloadInSOD() const
{
  // Get a pointer to the data in case
  // of SOD events
  if (fRawReader) {
    if (fRawReader->GetType() == AliRawEventHeaderBase::kStartOfData) {
      return fData;
    }
  }
  return NULL;
}

//_____________________________________________________________________________
Int_t AliAltroRawStreamV3::GetRCUPayloadSizeInSOD() const
{
  // Get the size of the RCU data in case
  // of SOD events
  if (fRawReader) {
    if (fRawReader->GetType() == AliRawEventHeaderBase::kStartOfData) {
      return fPayloadSize;
    }
  }
  return -1;
}

//_____________________________________________________________________________

void AliAltroRawStreamV3::HexDumpChannel() const
{
  // Print of the Hex Data of the current channel
  // to decipher read-out warnings and errors
  if (fCount>0 && fPosition>0) {
    printf("Hex-Dump of DDL: %3d, RCU ID: %d, HWADDR: 0x%03x\n",
           fDDLNumber,fRCUId,fHWAddress);
    printf("32-bit     - 2bit 10bit 10bit 10bit - ");
    printf("Index 10bit  10bit  10bit\n");
    printf("**********   **** ***** ***** ***** - ");
    printf("***** ****** ****** ******\n");
    Int_t nwords = (fCount+2)/3+1;
    for (Int_t iword = 0; iword < nwords; iword++) {
      UInt_t word32 = Get32bitWord(fPosition-nwords+iword);
      UInt_t marker  = word32 >> 30 & 0x3;
      UInt_t word101 = word32 >> 20 & 0x3FF;
      UInt_t word102 = word32 >> 10 & 0x3FF;
      UInt_t word103 = word32 >> 00 & 0x3FF; // nice octal number
      printf("0x%08x - 0b%1d%1d 0x%03x 0x%03x 0x%03x",
	     word32,marker>>1,marker&0x1,word101,word102,word103);
      if (iword == 0) { printf(" - Channel Header\n"); continue; }
      Int_t base = 3*(iword-1);
      printf(" - %5d 0x%03x%c 0x%03x%c 0x%03x%c\n", base,
	     fBunchData[base],   (fBunchDataIndex == base   ? '*' : ' '),
	     fBunchData[base+1], (fBunchDataIndex == base+1 ? '*' : ' '),
	     fBunchData[base+2], (fBunchDataIndex == base+2 ? '*' : ' '));
    }
  }
}
 AliAltroRawStreamV3.cxx:1
 AliAltroRawStreamV3.cxx:2
 AliAltroRawStreamV3.cxx:3
 AliAltroRawStreamV3.cxx:4
 AliAltroRawStreamV3.cxx:5
 AliAltroRawStreamV3.cxx:6
 AliAltroRawStreamV3.cxx:7
 AliAltroRawStreamV3.cxx:8
 AliAltroRawStreamV3.cxx:9
 AliAltroRawStreamV3.cxx:10
 AliAltroRawStreamV3.cxx:11
 AliAltroRawStreamV3.cxx:12
 AliAltroRawStreamV3.cxx:13
 AliAltroRawStreamV3.cxx:14
 AliAltroRawStreamV3.cxx:15
 AliAltroRawStreamV3.cxx:16
 AliAltroRawStreamV3.cxx:17
 AliAltroRawStreamV3.cxx:18
 AliAltroRawStreamV3.cxx:19
 AliAltroRawStreamV3.cxx:20
 AliAltroRawStreamV3.cxx:21
 AliAltroRawStreamV3.cxx:22
 AliAltroRawStreamV3.cxx:23
 AliAltroRawStreamV3.cxx:24
 AliAltroRawStreamV3.cxx:25
 AliAltroRawStreamV3.cxx:26
 AliAltroRawStreamV3.cxx:27
 AliAltroRawStreamV3.cxx:28
 AliAltroRawStreamV3.cxx:29
 AliAltroRawStreamV3.cxx:30
 AliAltroRawStreamV3.cxx:31
 AliAltroRawStreamV3.cxx:32
 AliAltroRawStreamV3.cxx:33
 AliAltroRawStreamV3.cxx:34
 AliAltroRawStreamV3.cxx:35
 AliAltroRawStreamV3.cxx:36
 AliAltroRawStreamV3.cxx:37
 AliAltroRawStreamV3.cxx:38
 AliAltroRawStreamV3.cxx:39
 AliAltroRawStreamV3.cxx:40
 AliAltroRawStreamV3.cxx:41
 AliAltroRawStreamV3.cxx:42
 AliAltroRawStreamV3.cxx:43
 AliAltroRawStreamV3.cxx:44
 AliAltroRawStreamV3.cxx:45
 AliAltroRawStreamV3.cxx:46
 AliAltroRawStreamV3.cxx:47
 AliAltroRawStreamV3.cxx:48
 AliAltroRawStreamV3.cxx:49
 AliAltroRawStreamV3.cxx:50
 AliAltroRawStreamV3.cxx:51
 AliAltroRawStreamV3.cxx:52
 AliAltroRawStreamV3.cxx:53
 AliAltroRawStreamV3.cxx:54
 AliAltroRawStreamV3.cxx:55
 AliAltroRawStreamV3.cxx:56
 AliAltroRawStreamV3.cxx:57
 AliAltroRawStreamV3.cxx:58
 AliAltroRawStreamV3.cxx:59
 AliAltroRawStreamV3.cxx:60
 AliAltroRawStreamV3.cxx:61
 AliAltroRawStreamV3.cxx:62
 AliAltroRawStreamV3.cxx:63
 AliAltroRawStreamV3.cxx:64
 AliAltroRawStreamV3.cxx:65
 AliAltroRawStreamV3.cxx:66
 AliAltroRawStreamV3.cxx:67
 AliAltroRawStreamV3.cxx:68
 AliAltroRawStreamV3.cxx:69
 AliAltroRawStreamV3.cxx:70
 AliAltroRawStreamV3.cxx:71
 AliAltroRawStreamV3.cxx:72
 AliAltroRawStreamV3.cxx:73
 AliAltroRawStreamV3.cxx:74
 AliAltroRawStreamV3.cxx:75
 AliAltroRawStreamV3.cxx:76
 AliAltroRawStreamV3.cxx:77
 AliAltroRawStreamV3.cxx:78
 AliAltroRawStreamV3.cxx:79
 AliAltroRawStreamV3.cxx:80
 AliAltroRawStreamV3.cxx:81
 AliAltroRawStreamV3.cxx:82
 AliAltroRawStreamV3.cxx:83
 AliAltroRawStreamV3.cxx:84
 AliAltroRawStreamV3.cxx:85
 AliAltroRawStreamV3.cxx:86
 AliAltroRawStreamV3.cxx:87
 AliAltroRawStreamV3.cxx:88
 AliAltroRawStreamV3.cxx:89
 AliAltroRawStreamV3.cxx:90
 AliAltroRawStreamV3.cxx:91
 AliAltroRawStreamV3.cxx:92
 AliAltroRawStreamV3.cxx:93
 AliAltroRawStreamV3.cxx:94
 AliAltroRawStreamV3.cxx:95
 AliAltroRawStreamV3.cxx:96
 AliAltroRawStreamV3.cxx:97
 AliAltroRawStreamV3.cxx:98
 AliAltroRawStreamV3.cxx:99
 AliAltroRawStreamV3.cxx:100
 AliAltroRawStreamV3.cxx:101
 AliAltroRawStreamV3.cxx:102
 AliAltroRawStreamV3.cxx:103
 AliAltroRawStreamV3.cxx:104
 AliAltroRawStreamV3.cxx:105
 AliAltroRawStreamV3.cxx:106
 AliAltroRawStreamV3.cxx:107
 AliAltroRawStreamV3.cxx:108
 AliAltroRawStreamV3.cxx:109
 AliAltroRawStreamV3.cxx:110
 AliAltroRawStreamV3.cxx:111
 AliAltroRawStreamV3.cxx:112
 AliAltroRawStreamV3.cxx:113
 AliAltroRawStreamV3.cxx:114
 AliAltroRawStreamV3.cxx:115
 AliAltroRawStreamV3.cxx:116
 AliAltroRawStreamV3.cxx:117
 AliAltroRawStreamV3.cxx:118
 AliAltroRawStreamV3.cxx:119
 AliAltroRawStreamV3.cxx:120
 AliAltroRawStreamV3.cxx:121
 AliAltroRawStreamV3.cxx:122
 AliAltroRawStreamV3.cxx:123
 AliAltroRawStreamV3.cxx:124
 AliAltroRawStreamV3.cxx:125
 AliAltroRawStreamV3.cxx:126
 AliAltroRawStreamV3.cxx:127
 AliAltroRawStreamV3.cxx:128
 AliAltroRawStreamV3.cxx:129
 AliAltroRawStreamV3.cxx:130
 AliAltroRawStreamV3.cxx:131
 AliAltroRawStreamV3.cxx:132
 AliAltroRawStreamV3.cxx:133
 AliAltroRawStreamV3.cxx:134
 AliAltroRawStreamV3.cxx:135
 AliAltroRawStreamV3.cxx:136
 AliAltroRawStreamV3.cxx:137
 AliAltroRawStreamV3.cxx:138
 AliAltroRawStreamV3.cxx:139
 AliAltroRawStreamV3.cxx:140
 AliAltroRawStreamV3.cxx:141
 AliAltroRawStreamV3.cxx:142
 AliAltroRawStreamV3.cxx:143
 AliAltroRawStreamV3.cxx:144
 AliAltroRawStreamV3.cxx:145
 AliAltroRawStreamV3.cxx:146
 AliAltroRawStreamV3.cxx:147
 AliAltroRawStreamV3.cxx:148
 AliAltroRawStreamV3.cxx:149
 AliAltroRawStreamV3.cxx:150
 AliAltroRawStreamV3.cxx:151
 AliAltroRawStreamV3.cxx:152
 AliAltroRawStreamV3.cxx:153
 AliAltroRawStreamV3.cxx:154
 AliAltroRawStreamV3.cxx:155
 AliAltroRawStreamV3.cxx:156
 AliAltroRawStreamV3.cxx:157
 AliAltroRawStreamV3.cxx:158
 AliAltroRawStreamV3.cxx:159
 AliAltroRawStreamV3.cxx:160
 AliAltroRawStreamV3.cxx:161
 AliAltroRawStreamV3.cxx:162
 AliAltroRawStreamV3.cxx:163
 AliAltroRawStreamV3.cxx:164
 AliAltroRawStreamV3.cxx:165
 AliAltroRawStreamV3.cxx:166
 AliAltroRawStreamV3.cxx:167
 AliAltroRawStreamV3.cxx:168
 AliAltroRawStreamV3.cxx:169
 AliAltroRawStreamV3.cxx:170
 AliAltroRawStreamV3.cxx:171
 AliAltroRawStreamV3.cxx:172
 AliAltroRawStreamV3.cxx:173
 AliAltroRawStreamV3.cxx:174
 AliAltroRawStreamV3.cxx:175
 AliAltroRawStreamV3.cxx:176
 AliAltroRawStreamV3.cxx:177
 AliAltroRawStreamV3.cxx:178
 AliAltroRawStreamV3.cxx:179
 AliAltroRawStreamV3.cxx:180
 AliAltroRawStreamV3.cxx:181
 AliAltroRawStreamV3.cxx:182
 AliAltroRawStreamV3.cxx:183
 AliAltroRawStreamV3.cxx:184
 AliAltroRawStreamV3.cxx:185
 AliAltroRawStreamV3.cxx:186
 AliAltroRawStreamV3.cxx:187
 AliAltroRawStreamV3.cxx:188
 AliAltroRawStreamV3.cxx:189
 AliAltroRawStreamV3.cxx:190
 AliAltroRawStreamV3.cxx:191
 AliAltroRawStreamV3.cxx:192
 AliAltroRawStreamV3.cxx:193
 AliAltroRawStreamV3.cxx:194
 AliAltroRawStreamV3.cxx:195
 AliAltroRawStreamV3.cxx:196
 AliAltroRawStreamV3.cxx:197
 AliAltroRawStreamV3.cxx:198
 AliAltroRawStreamV3.cxx:199
 AliAltroRawStreamV3.cxx:200
 AliAltroRawStreamV3.cxx:201
 AliAltroRawStreamV3.cxx:202
 AliAltroRawStreamV3.cxx:203
 AliAltroRawStreamV3.cxx:204
 AliAltroRawStreamV3.cxx:205
 AliAltroRawStreamV3.cxx:206
 AliAltroRawStreamV3.cxx:207
 AliAltroRawStreamV3.cxx:208
 AliAltroRawStreamV3.cxx:209
 AliAltroRawStreamV3.cxx:210
 AliAltroRawStreamV3.cxx:211
 AliAltroRawStreamV3.cxx:212
 AliAltroRawStreamV3.cxx:213
 AliAltroRawStreamV3.cxx:214
 AliAltroRawStreamV3.cxx:215
 AliAltroRawStreamV3.cxx:216
 AliAltroRawStreamV3.cxx:217
 AliAltroRawStreamV3.cxx:218
 AliAltroRawStreamV3.cxx:219
 AliAltroRawStreamV3.cxx:220
 AliAltroRawStreamV3.cxx:221
 AliAltroRawStreamV3.cxx:222
 AliAltroRawStreamV3.cxx:223
 AliAltroRawStreamV3.cxx:224
 AliAltroRawStreamV3.cxx:225
 AliAltroRawStreamV3.cxx:226
 AliAltroRawStreamV3.cxx:227
 AliAltroRawStreamV3.cxx:228
 AliAltroRawStreamV3.cxx:229
 AliAltroRawStreamV3.cxx:230
 AliAltroRawStreamV3.cxx:231
 AliAltroRawStreamV3.cxx:232
 AliAltroRawStreamV3.cxx:233
 AliAltroRawStreamV3.cxx:234
 AliAltroRawStreamV3.cxx:235
 AliAltroRawStreamV3.cxx:236
 AliAltroRawStreamV3.cxx:237
 AliAltroRawStreamV3.cxx:238
 AliAltroRawStreamV3.cxx:239
 AliAltroRawStreamV3.cxx:240
 AliAltroRawStreamV3.cxx:241
 AliAltroRawStreamV3.cxx:242
 AliAltroRawStreamV3.cxx:243
 AliAltroRawStreamV3.cxx:244
 AliAltroRawStreamV3.cxx:245
 AliAltroRawStreamV3.cxx:246
 AliAltroRawStreamV3.cxx:247
 AliAltroRawStreamV3.cxx:248
 AliAltroRawStreamV3.cxx:249
 AliAltroRawStreamV3.cxx:250
 AliAltroRawStreamV3.cxx:251
 AliAltroRawStreamV3.cxx:252
 AliAltroRawStreamV3.cxx:253
 AliAltroRawStreamV3.cxx:254
 AliAltroRawStreamV3.cxx:255
 AliAltroRawStreamV3.cxx:256
 AliAltroRawStreamV3.cxx:257
 AliAltroRawStreamV3.cxx:258
 AliAltroRawStreamV3.cxx:259
 AliAltroRawStreamV3.cxx:260
 AliAltroRawStreamV3.cxx:261
 AliAltroRawStreamV3.cxx:262
 AliAltroRawStreamV3.cxx:263
 AliAltroRawStreamV3.cxx:264
 AliAltroRawStreamV3.cxx:265
 AliAltroRawStreamV3.cxx:266
 AliAltroRawStreamV3.cxx:267
 AliAltroRawStreamV3.cxx:268
 AliAltroRawStreamV3.cxx:269
 AliAltroRawStreamV3.cxx:270
 AliAltroRawStreamV3.cxx:271
 AliAltroRawStreamV3.cxx:272
 AliAltroRawStreamV3.cxx:273
 AliAltroRawStreamV3.cxx:274
 AliAltroRawStreamV3.cxx:275
 AliAltroRawStreamV3.cxx:276
 AliAltroRawStreamV3.cxx:277
 AliAltroRawStreamV3.cxx:278
 AliAltroRawStreamV3.cxx:279
 AliAltroRawStreamV3.cxx:280
 AliAltroRawStreamV3.cxx:281
 AliAltroRawStreamV3.cxx:282
 AliAltroRawStreamV3.cxx:283
 AliAltroRawStreamV3.cxx:284
 AliAltroRawStreamV3.cxx:285
 AliAltroRawStreamV3.cxx:286
 AliAltroRawStreamV3.cxx:287
 AliAltroRawStreamV3.cxx:288
 AliAltroRawStreamV3.cxx:289
 AliAltroRawStreamV3.cxx:290
 AliAltroRawStreamV3.cxx:291
 AliAltroRawStreamV3.cxx:292
 AliAltroRawStreamV3.cxx:293
 AliAltroRawStreamV3.cxx:294
 AliAltroRawStreamV3.cxx:295
 AliAltroRawStreamV3.cxx:296
 AliAltroRawStreamV3.cxx:297
 AliAltroRawStreamV3.cxx:298
 AliAltroRawStreamV3.cxx:299
 AliAltroRawStreamV3.cxx:300
 AliAltroRawStreamV3.cxx:301
 AliAltroRawStreamV3.cxx:302
 AliAltroRawStreamV3.cxx:303
 AliAltroRawStreamV3.cxx:304
 AliAltroRawStreamV3.cxx:305
 AliAltroRawStreamV3.cxx:306
 AliAltroRawStreamV3.cxx:307
 AliAltroRawStreamV3.cxx:308
 AliAltroRawStreamV3.cxx:309
 AliAltroRawStreamV3.cxx:310
 AliAltroRawStreamV3.cxx:311
 AliAltroRawStreamV3.cxx:312
 AliAltroRawStreamV3.cxx:313
 AliAltroRawStreamV3.cxx:314
 AliAltroRawStreamV3.cxx:315
 AliAltroRawStreamV3.cxx:316
 AliAltroRawStreamV3.cxx:317
 AliAltroRawStreamV3.cxx:318
 AliAltroRawStreamV3.cxx:319
 AliAltroRawStreamV3.cxx:320
 AliAltroRawStreamV3.cxx:321
 AliAltroRawStreamV3.cxx:322
 AliAltroRawStreamV3.cxx:323
 AliAltroRawStreamV3.cxx:324
 AliAltroRawStreamV3.cxx:325
 AliAltroRawStreamV3.cxx:326
 AliAltroRawStreamV3.cxx:327
 AliAltroRawStreamV3.cxx:328
 AliAltroRawStreamV3.cxx:329
 AliAltroRawStreamV3.cxx:330
 AliAltroRawStreamV3.cxx:331
 AliAltroRawStreamV3.cxx:332
 AliAltroRawStreamV3.cxx:333
 AliAltroRawStreamV3.cxx:334
 AliAltroRawStreamV3.cxx:335
 AliAltroRawStreamV3.cxx:336
 AliAltroRawStreamV3.cxx:337
 AliAltroRawStreamV3.cxx:338
 AliAltroRawStreamV3.cxx:339
 AliAltroRawStreamV3.cxx:340
 AliAltroRawStreamV3.cxx:341
 AliAltroRawStreamV3.cxx:342
 AliAltroRawStreamV3.cxx:343
 AliAltroRawStreamV3.cxx:344
 AliAltroRawStreamV3.cxx:345
 AliAltroRawStreamV3.cxx:346
 AliAltroRawStreamV3.cxx:347
 AliAltroRawStreamV3.cxx:348
 AliAltroRawStreamV3.cxx:349
 AliAltroRawStreamV3.cxx:350
 AliAltroRawStreamV3.cxx:351
 AliAltroRawStreamV3.cxx:352
 AliAltroRawStreamV3.cxx:353
 AliAltroRawStreamV3.cxx:354
 AliAltroRawStreamV3.cxx:355
 AliAltroRawStreamV3.cxx:356
 AliAltroRawStreamV3.cxx:357
 AliAltroRawStreamV3.cxx:358
 AliAltroRawStreamV3.cxx:359
 AliAltroRawStreamV3.cxx:360
 AliAltroRawStreamV3.cxx:361
 AliAltroRawStreamV3.cxx:362
 AliAltroRawStreamV3.cxx:363
 AliAltroRawStreamV3.cxx:364
 AliAltroRawStreamV3.cxx:365
 AliAltroRawStreamV3.cxx:366
 AliAltroRawStreamV3.cxx:367
 AliAltroRawStreamV3.cxx:368
 AliAltroRawStreamV3.cxx:369
 AliAltroRawStreamV3.cxx:370
 AliAltroRawStreamV3.cxx:371
 AliAltroRawStreamV3.cxx:372
 AliAltroRawStreamV3.cxx:373
 AliAltroRawStreamV3.cxx:374
 AliAltroRawStreamV3.cxx:375
 AliAltroRawStreamV3.cxx:376
 AliAltroRawStreamV3.cxx:377
 AliAltroRawStreamV3.cxx:378
 AliAltroRawStreamV3.cxx:379
 AliAltroRawStreamV3.cxx:380
 AliAltroRawStreamV3.cxx:381
 AliAltroRawStreamV3.cxx:382
 AliAltroRawStreamV3.cxx:383
 AliAltroRawStreamV3.cxx:384
 AliAltroRawStreamV3.cxx:385
 AliAltroRawStreamV3.cxx:386
 AliAltroRawStreamV3.cxx:387
 AliAltroRawStreamV3.cxx:388
 AliAltroRawStreamV3.cxx:389
 AliAltroRawStreamV3.cxx:390
 AliAltroRawStreamV3.cxx:391
 AliAltroRawStreamV3.cxx:392
 AliAltroRawStreamV3.cxx:393
 AliAltroRawStreamV3.cxx:394
 AliAltroRawStreamV3.cxx:395
 AliAltroRawStreamV3.cxx:396
 AliAltroRawStreamV3.cxx:397
 AliAltroRawStreamV3.cxx:398
 AliAltroRawStreamV3.cxx:399
 AliAltroRawStreamV3.cxx:400
 AliAltroRawStreamV3.cxx:401
 AliAltroRawStreamV3.cxx:402
 AliAltroRawStreamV3.cxx:403
 AliAltroRawStreamV3.cxx:404
 AliAltroRawStreamV3.cxx:405
 AliAltroRawStreamV3.cxx:406
 AliAltroRawStreamV3.cxx:407
 AliAltroRawStreamV3.cxx:408
 AliAltroRawStreamV3.cxx:409
 AliAltroRawStreamV3.cxx:410
 AliAltroRawStreamV3.cxx:411
 AliAltroRawStreamV3.cxx:412
 AliAltroRawStreamV3.cxx:413
 AliAltroRawStreamV3.cxx:414
 AliAltroRawStreamV3.cxx:415
 AliAltroRawStreamV3.cxx:416
 AliAltroRawStreamV3.cxx:417
 AliAltroRawStreamV3.cxx:418
 AliAltroRawStreamV3.cxx:419
 AliAltroRawStreamV3.cxx:420
 AliAltroRawStreamV3.cxx:421
 AliAltroRawStreamV3.cxx:422
 AliAltroRawStreamV3.cxx:423
 AliAltroRawStreamV3.cxx:424
 AliAltroRawStreamV3.cxx:425
 AliAltroRawStreamV3.cxx:426
 AliAltroRawStreamV3.cxx:427
 AliAltroRawStreamV3.cxx:428
 AliAltroRawStreamV3.cxx:429
 AliAltroRawStreamV3.cxx:430
 AliAltroRawStreamV3.cxx:431
 AliAltroRawStreamV3.cxx:432
 AliAltroRawStreamV3.cxx:433
 AliAltroRawStreamV3.cxx:434
 AliAltroRawStreamV3.cxx:435
 AliAltroRawStreamV3.cxx:436
 AliAltroRawStreamV3.cxx:437
 AliAltroRawStreamV3.cxx:438
 AliAltroRawStreamV3.cxx:439
 AliAltroRawStreamV3.cxx:440
 AliAltroRawStreamV3.cxx:441
 AliAltroRawStreamV3.cxx:442
 AliAltroRawStreamV3.cxx:443
 AliAltroRawStreamV3.cxx:444
 AliAltroRawStreamV3.cxx:445
 AliAltroRawStreamV3.cxx:446
 AliAltroRawStreamV3.cxx:447
 AliAltroRawStreamV3.cxx:448
 AliAltroRawStreamV3.cxx:449
 AliAltroRawStreamV3.cxx:450
 AliAltroRawStreamV3.cxx:451
 AliAltroRawStreamV3.cxx:452
 AliAltroRawStreamV3.cxx:453
 AliAltroRawStreamV3.cxx:454
 AliAltroRawStreamV3.cxx:455
 AliAltroRawStreamV3.cxx:456
 AliAltroRawStreamV3.cxx:457
 AliAltroRawStreamV3.cxx:458
 AliAltroRawStreamV3.cxx:459
 AliAltroRawStreamV3.cxx:460
 AliAltroRawStreamV3.cxx:461
 AliAltroRawStreamV3.cxx:462
 AliAltroRawStreamV3.cxx:463
 AliAltroRawStreamV3.cxx:464
 AliAltroRawStreamV3.cxx:465
 AliAltroRawStreamV3.cxx:466
 AliAltroRawStreamV3.cxx:467
 AliAltroRawStreamV3.cxx:468
 AliAltroRawStreamV3.cxx:469
 AliAltroRawStreamV3.cxx:470
 AliAltroRawStreamV3.cxx:471
 AliAltroRawStreamV3.cxx:472
 AliAltroRawStreamV3.cxx:473
 AliAltroRawStreamV3.cxx:474
 AliAltroRawStreamV3.cxx:475
 AliAltroRawStreamV3.cxx:476
 AliAltroRawStreamV3.cxx:477
 AliAltroRawStreamV3.cxx:478
 AliAltroRawStreamV3.cxx:479
 AliAltroRawStreamV3.cxx:480
 AliAltroRawStreamV3.cxx:481
 AliAltroRawStreamV3.cxx:482
 AliAltroRawStreamV3.cxx:483
 AliAltroRawStreamV3.cxx:484
 AliAltroRawStreamV3.cxx:485
 AliAltroRawStreamV3.cxx:486
 AliAltroRawStreamV3.cxx:487
 AliAltroRawStreamV3.cxx:488
 AliAltroRawStreamV3.cxx:489
 AliAltroRawStreamV3.cxx:490
 AliAltroRawStreamV3.cxx:491
 AliAltroRawStreamV3.cxx:492
 AliAltroRawStreamV3.cxx:493
 AliAltroRawStreamV3.cxx:494
 AliAltroRawStreamV3.cxx:495
 AliAltroRawStreamV3.cxx:496
 AliAltroRawStreamV3.cxx:497
 AliAltroRawStreamV3.cxx:498
 AliAltroRawStreamV3.cxx:499
 AliAltroRawStreamV3.cxx:500
 AliAltroRawStreamV3.cxx:501
 AliAltroRawStreamV3.cxx:502
 AliAltroRawStreamV3.cxx:503
 AliAltroRawStreamV3.cxx:504
 AliAltroRawStreamV3.cxx:505
 AliAltroRawStreamV3.cxx:506
 AliAltroRawStreamV3.cxx:507
 AliAltroRawStreamV3.cxx:508
 AliAltroRawStreamV3.cxx:509
 AliAltroRawStreamV3.cxx:510
 AliAltroRawStreamV3.cxx:511
 AliAltroRawStreamV3.cxx:512
 AliAltroRawStreamV3.cxx:513
 AliAltroRawStreamV3.cxx:514
 AliAltroRawStreamV3.cxx:515
 AliAltroRawStreamV3.cxx:516
 AliAltroRawStreamV3.cxx:517
 AliAltroRawStreamV3.cxx:518
 AliAltroRawStreamV3.cxx:519
 AliAltroRawStreamV3.cxx:520
 AliAltroRawStreamV3.cxx:521
 AliAltroRawStreamV3.cxx:522
 AliAltroRawStreamV3.cxx:523
 AliAltroRawStreamV3.cxx:524
 AliAltroRawStreamV3.cxx:525
 AliAltroRawStreamV3.cxx:526
 AliAltroRawStreamV3.cxx:527
 AliAltroRawStreamV3.cxx:528
 AliAltroRawStreamV3.cxx:529
 AliAltroRawStreamV3.cxx:530
 AliAltroRawStreamV3.cxx:531
 AliAltroRawStreamV3.cxx:532
 AliAltroRawStreamV3.cxx:533
 AliAltroRawStreamV3.cxx:534
 AliAltroRawStreamV3.cxx:535
 AliAltroRawStreamV3.cxx:536
 AliAltroRawStreamV3.cxx:537
 AliAltroRawStreamV3.cxx:538
 AliAltroRawStreamV3.cxx:539
 AliAltroRawStreamV3.cxx:540
 AliAltroRawStreamV3.cxx:541
 AliAltroRawStreamV3.cxx:542
 AliAltroRawStreamV3.cxx:543
 AliAltroRawStreamV3.cxx:544
 AliAltroRawStreamV3.cxx:545
 AliAltroRawStreamV3.cxx:546
 AliAltroRawStreamV3.cxx:547
 AliAltroRawStreamV3.cxx:548
 AliAltroRawStreamV3.cxx:549
 AliAltroRawStreamV3.cxx:550
 AliAltroRawStreamV3.cxx:551
 AliAltroRawStreamV3.cxx:552
 AliAltroRawStreamV3.cxx:553
 AliAltroRawStreamV3.cxx:554
 AliAltroRawStreamV3.cxx:555
 AliAltroRawStreamV3.cxx:556
 AliAltroRawStreamV3.cxx:557
 AliAltroRawStreamV3.cxx:558
 AliAltroRawStreamV3.cxx:559
 AliAltroRawStreamV3.cxx:560
 AliAltroRawStreamV3.cxx:561
 AliAltroRawStreamV3.cxx:562
 AliAltroRawStreamV3.cxx:563
 AliAltroRawStreamV3.cxx:564
 AliAltroRawStreamV3.cxx:565
 AliAltroRawStreamV3.cxx:566
 AliAltroRawStreamV3.cxx:567
 AliAltroRawStreamV3.cxx:568
 AliAltroRawStreamV3.cxx:569
 AliAltroRawStreamV3.cxx:570
 AliAltroRawStreamV3.cxx:571
 AliAltroRawStreamV3.cxx:572
 AliAltroRawStreamV3.cxx:573
 AliAltroRawStreamV3.cxx:574
 AliAltroRawStreamV3.cxx:575
 AliAltroRawStreamV3.cxx:576
 AliAltroRawStreamV3.cxx:577
 AliAltroRawStreamV3.cxx:578
 AliAltroRawStreamV3.cxx:579
 AliAltroRawStreamV3.cxx:580
 AliAltroRawStreamV3.cxx:581
 AliAltroRawStreamV3.cxx:582
 AliAltroRawStreamV3.cxx:583
 AliAltroRawStreamV3.cxx:584
 AliAltroRawStreamV3.cxx:585
 AliAltroRawStreamV3.cxx:586
 AliAltroRawStreamV3.cxx:587
 AliAltroRawStreamV3.cxx:588
 AliAltroRawStreamV3.cxx:589
 AliAltroRawStreamV3.cxx:590
 AliAltroRawStreamV3.cxx:591
 AliAltroRawStreamV3.cxx:592
 AliAltroRawStreamV3.cxx:593
 AliAltroRawStreamV3.cxx:594
 AliAltroRawStreamV3.cxx:595
 AliAltroRawStreamV3.cxx:596
 AliAltroRawStreamV3.cxx:597
 AliAltroRawStreamV3.cxx:598
 AliAltroRawStreamV3.cxx:599
 AliAltroRawStreamV3.cxx:600
 AliAltroRawStreamV3.cxx:601
 AliAltroRawStreamV3.cxx:602
 AliAltroRawStreamV3.cxx:603
 AliAltroRawStreamV3.cxx:604
 AliAltroRawStreamV3.cxx:605
 AliAltroRawStreamV3.cxx:606
 AliAltroRawStreamV3.cxx:607
 AliAltroRawStreamV3.cxx:608
 AliAltroRawStreamV3.cxx:609
 AliAltroRawStreamV3.cxx:610
 AliAltroRawStreamV3.cxx:611
 AliAltroRawStreamV3.cxx:612
 AliAltroRawStreamV3.cxx:613
 AliAltroRawStreamV3.cxx:614
 AliAltroRawStreamV3.cxx:615
 AliAltroRawStreamV3.cxx:616
 AliAltroRawStreamV3.cxx:617
 AliAltroRawStreamV3.cxx:618
 AliAltroRawStreamV3.cxx:619
 AliAltroRawStreamV3.cxx:620
 AliAltroRawStreamV3.cxx:621
 AliAltroRawStreamV3.cxx:622
 AliAltroRawStreamV3.cxx:623
 AliAltroRawStreamV3.cxx:624
 AliAltroRawStreamV3.cxx:625
 AliAltroRawStreamV3.cxx:626
 AliAltroRawStreamV3.cxx:627
 AliAltroRawStreamV3.cxx:628
 AliAltroRawStreamV3.cxx:629
 AliAltroRawStreamV3.cxx:630
 AliAltroRawStreamV3.cxx:631
 AliAltroRawStreamV3.cxx:632
 AliAltroRawStreamV3.cxx:633
 AliAltroRawStreamV3.cxx:634
 AliAltroRawStreamV3.cxx:635
 AliAltroRawStreamV3.cxx:636
 AliAltroRawStreamV3.cxx:637
 AliAltroRawStreamV3.cxx:638
 AliAltroRawStreamV3.cxx:639
 AliAltroRawStreamV3.cxx:640
 AliAltroRawStreamV3.cxx:641
 AliAltroRawStreamV3.cxx:642
 AliAltroRawStreamV3.cxx:643
 AliAltroRawStreamV3.cxx:644
 AliAltroRawStreamV3.cxx:645
 AliAltroRawStreamV3.cxx:646
 AliAltroRawStreamV3.cxx:647
 AliAltroRawStreamV3.cxx:648
 AliAltroRawStreamV3.cxx:649
 AliAltroRawStreamV3.cxx:650
 AliAltroRawStreamV3.cxx:651
 AliAltroRawStreamV3.cxx:652
 AliAltroRawStreamV3.cxx:653
 AliAltroRawStreamV3.cxx:654
 AliAltroRawStreamV3.cxx:655
 AliAltroRawStreamV3.cxx:656
 AliAltroRawStreamV3.cxx:657
 AliAltroRawStreamV3.cxx:658
 AliAltroRawStreamV3.cxx:659
 AliAltroRawStreamV3.cxx:660
 AliAltroRawStreamV3.cxx:661
 AliAltroRawStreamV3.cxx:662
 AliAltroRawStreamV3.cxx:663
 AliAltroRawStreamV3.cxx:664
 AliAltroRawStreamV3.cxx:665
 AliAltroRawStreamV3.cxx:666
 AliAltroRawStreamV3.cxx:667
 AliAltroRawStreamV3.cxx:668
 AliAltroRawStreamV3.cxx:669
 AliAltroRawStreamV3.cxx:670
 AliAltroRawStreamV3.cxx:671
 AliAltroRawStreamV3.cxx:672
 AliAltroRawStreamV3.cxx:673
 AliAltroRawStreamV3.cxx:674
 AliAltroRawStreamV3.cxx:675
 AliAltroRawStreamV3.cxx:676
 AliAltroRawStreamV3.cxx:677
 AliAltroRawStreamV3.cxx:678
 AliAltroRawStreamV3.cxx:679
 AliAltroRawStreamV3.cxx:680
 AliAltroRawStreamV3.cxx:681
 AliAltroRawStreamV3.cxx:682
 AliAltroRawStreamV3.cxx:683
 AliAltroRawStreamV3.cxx:684
 AliAltroRawStreamV3.cxx:685
 AliAltroRawStreamV3.cxx:686
 AliAltroRawStreamV3.cxx:687
 AliAltroRawStreamV3.cxx:688
 AliAltroRawStreamV3.cxx:689
 AliAltroRawStreamV3.cxx:690
 AliAltroRawStreamV3.cxx:691
 AliAltroRawStreamV3.cxx:692
 AliAltroRawStreamV3.cxx:693
 AliAltroRawStreamV3.cxx:694
 AliAltroRawStreamV3.cxx:695
 AliAltroRawStreamV3.cxx:696
 AliAltroRawStreamV3.cxx:697
 AliAltroRawStreamV3.cxx:698
 AliAltroRawStreamV3.cxx:699
 AliAltroRawStreamV3.cxx:700
 AliAltroRawStreamV3.cxx:701
 AliAltroRawStreamV3.cxx:702
 AliAltroRawStreamV3.cxx:703
 AliAltroRawStreamV3.cxx:704
 AliAltroRawStreamV3.cxx:705
 AliAltroRawStreamV3.cxx:706
 AliAltroRawStreamV3.cxx:707
 AliAltroRawStreamV3.cxx:708
 AliAltroRawStreamV3.cxx:709
 AliAltroRawStreamV3.cxx:710
 AliAltroRawStreamV3.cxx:711
 AliAltroRawStreamV3.cxx:712
 AliAltroRawStreamV3.cxx:713
 AliAltroRawStreamV3.cxx:714
 AliAltroRawStreamV3.cxx:715
 AliAltroRawStreamV3.cxx:716
 AliAltroRawStreamV3.cxx:717
 AliAltroRawStreamV3.cxx:718
 AliAltroRawStreamV3.cxx:719
 AliAltroRawStreamV3.cxx:720
 AliAltroRawStreamV3.cxx:721
 AliAltroRawStreamV3.cxx:722
 AliAltroRawStreamV3.cxx:723
 AliAltroRawStreamV3.cxx:724
 AliAltroRawStreamV3.cxx:725
 AliAltroRawStreamV3.cxx:726
 AliAltroRawStreamV3.cxx:727
 AliAltroRawStreamV3.cxx:728
 AliAltroRawStreamV3.cxx:729
 AliAltroRawStreamV3.cxx:730
 AliAltroRawStreamV3.cxx:731
 AliAltroRawStreamV3.cxx:732
 AliAltroRawStreamV3.cxx:733
 AliAltroRawStreamV3.cxx:734
 AliAltroRawStreamV3.cxx:735
 AliAltroRawStreamV3.cxx:736
 AliAltroRawStreamV3.cxx:737
 AliAltroRawStreamV3.cxx:738
 AliAltroRawStreamV3.cxx:739
 AliAltroRawStreamV3.cxx:740
 AliAltroRawStreamV3.cxx:741
 AliAltroRawStreamV3.cxx:742
 AliAltroRawStreamV3.cxx:743
 AliAltroRawStreamV3.cxx:744
 AliAltroRawStreamV3.cxx:745
 AliAltroRawStreamV3.cxx:746
 AliAltroRawStreamV3.cxx:747
 AliAltroRawStreamV3.cxx:748
 AliAltroRawStreamV3.cxx:749
 AliAltroRawStreamV3.cxx:750
 AliAltroRawStreamV3.cxx:751
 AliAltroRawStreamV3.cxx:752
 AliAltroRawStreamV3.cxx:753
 AliAltroRawStreamV3.cxx:754
 AliAltroRawStreamV3.cxx:755
 AliAltroRawStreamV3.cxx:756
 AliAltroRawStreamV3.cxx:757
 AliAltroRawStreamV3.cxx:758
 AliAltroRawStreamV3.cxx:759
 AliAltroRawStreamV3.cxx:760
 AliAltroRawStreamV3.cxx:761
 AliAltroRawStreamV3.cxx:762
 AliAltroRawStreamV3.cxx:763
 AliAltroRawStreamV3.cxx:764
 AliAltroRawStreamV3.cxx:765
 AliAltroRawStreamV3.cxx:766
 AliAltroRawStreamV3.cxx:767
 AliAltroRawStreamV3.cxx:768
 AliAltroRawStreamV3.cxx:769
 AliAltroRawStreamV3.cxx:770
 AliAltroRawStreamV3.cxx:771
 AliAltroRawStreamV3.cxx:772
 AliAltroRawStreamV3.cxx:773
 AliAltroRawStreamV3.cxx:774
 AliAltroRawStreamV3.cxx:775
 AliAltroRawStreamV3.cxx:776
 AliAltroRawStreamV3.cxx:777
 AliAltroRawStreamV3.cxx:778
 AliAltroRawStreamV3.cxx:779
 AliAltroRawStreamV3.cxx:780
 AliAltroRawStreamV3.cxx:781