ROOT logo
/**************************************************************************
 * This file is property of and copyright by the ALICE HLT Project        *
 * All rights reserved.                                                   *
 *                                                                        *
 * Primary Authors:                                                       *
 *   Artur Szostak <artursz@iafrica.com>                                  *
 *                                                                        *
 * 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.                  *
 **************************************************************************/

/* $Id$ */

/// \class AliMUONRawStreamTriggerHP
///
/// Implementation of a streamer interface to the high performance trigger decoder.
/// This is the raw stream class which interfaces between the high performance
/// core decoder for MUON trigger chambers and the AliRawReader class.
/// To gain the most out of the decoder, the Next() method should be used,
/// for example:
/// \code
///   AliMUONRawStreamTriggerHP* rawStream;  // assume initialised
///   const AliMUONRawStreamTriggerHP::AliLocalStruct* localStruct;
///   while ((localStruct = rawStream->Next()) != NULL)
///   {
///      // Do something with localStruct here.
///   }
/// \endcode
///
/// This decoder tries to implement as similar an interface as possible to
/// AliMUONRawStreamTrigger where possible. However certain constructs which
/// would slow us down too much are avoided.
///
/// \author Artur Szostak <artursz@iafrica.com>

#include "AliMUONRawStreamTriggerHP.h"
#include "AliMUONDarcHeader.h"
#include "AliMUONRegHeader.h"
#include "AliMUONLocalStruct.h"
#include "AliMUONDDLTrigger.h"
#include "AliRawReader.h"
#include "AliLog.h"
#include <cassert>
#include <iostream>
using std::cout;
using std::endl;
using std::hex;
using std::dec;

/// \cond CLASSIMP
ClassImp(AliMUONRawStreamTriggerHP)
/// \endcond

const Int_t AliMUONRawStreamTriggerHP::fgkMaxDDL = 2;
bool AliMUONRawStreamTriggerHP::AliLocalStruct::fgOverrideId = true;

const AliMUONRegionalHeaderStruct
AliMUONRawStreamTriggerHP::AliDecoderEventHandler::fgkEmptyHeader = {
	AliMUONTriggerDDLDecoder<AliDecoderEventHandler>::RegionalErrorWord(),
	0,
	{0, 0},
	0
};


AliMUONRawStreamTriggerHP::AliMUONRawStreamTriggerHP() :
	AliMUONVRawStreamTrigger(),
	fDecoder(),
	fDDL(0),
	fBufferSize(8192),
	fBuffer(new UChar_t[8192]),
	fkCurrentLocalStruct(NULL),
	fHadError(kFALSE),
	fDone(kFALSE),
	fDDLObject(NULL),
	fTotalNumberOfDarcEoWErrors(0),
	fTotalNumberOfGlobalEoWErrors(0),
	fTotalNumberOfRegEoWErrors(0),
	fTotalNumberOfLocalEoWErrors(0)
{
	///
	/// Default constructor.
	///
	
	fDecoder.ExitOnError(false);

	fDecoder.GetHandler().SetMaxStructs(
			fDecoder.MaxRegionals(),
			fDecoder.MaxLocals()
		);

	fDecoder.GetHandler().SetRawStream(this);
}


AliMUONRawStreamTriggerHP::AliMUONRawStreamTriggerHP(AliRawReader* rawReader) :
	AliMUONVRawStreamTrigger(rawReader),
	fDecoder(),
	fDDL(0),
	fBufferSize(8192),
	fBuffer(new UChar_t[8192]),
	fkCurrentLocalStruct(NULL),
	fHadError(kFALSE),
	fDone(kFALSE),
	fDDLObject(NULL),
	fTotalNumberOfDarcEoWErrors(0),
	fTotalNumberOfGlobalEoWErrors(0),
	fTotalNumberOfRegEoWErrors(0),
	fTotalNumberOfLocalEoWErrors(0)
{
	///
	/// Constructor with AliRawReader as argument.
	///
	
	fDecoder.ExitOnError(false);

	fDecoder.GetHandler().SetMaxStructs(
			fDecoder.MaxRegionals(),
			fDecoder.MaxLocals()
		);
	
	fDecoder.GetHandler().SetRawStream(this);
}


AliMUONRawStreamTriggerHP::~AliMUONRawStreamTriggerHP()
{
	///
	/// Default destructor which cleans up the memory allocated.
	///
	
	if (fBuffer != NULL)
	{
		delete [] fBuffer;
	}
	if (fDDLObject != NULL)
	{
		delete fDDLObject;
	}
}


void AliMUONRawStreamTriggerHP::First()
{
	/// Initialise or reset the iterator.
	/// The first DDL will be found and decoded.
	
	assert( GetReader() != NULL );
	
	fDDL = 0;
	fDone = kFALSE;
	NextDDL();
	fTotalNumberOfDarcEoWErrors = 0;
	fTotalNumberOfGlobalEoWErrors = 0;
	fTotalNumberOfRegEoWErrors = 0;
	fTotalNumberOfLocalEoWErrors = 0;
}


Bool_t AliMUONRawStreamTriggerHP::NextDDL()
{
	/// Read in the next trigger DDL and decode the payload with the
	/// high performance decoder.
	/// \return kTRUE if the next DDL was successfully read and kFALSE
	///    otherwise.

	assert( GetReader() != NULL );
	
	// The temporary object if generated in GetDDLTracker, is now stale,
	// so delete it.
	if (fDDLObject != NULL)
	{
		delete fDDLObject;
		fDDLObject = NULL;
	}
	
	fkCurrentLocalStruct = NULL;
	
	while (fDDL < GetMaxDDL())
	{
		GetReader()->Reset();
		GetReader()->Select("MUONTRG", fDDL, fDDL);  // Select the DDL file to be read.
		if (GetReader()->ReadHeader()) break;
		AliDebug(3, Form("Skipping DDL %d which does not seem to be there", fDDL+1));
		fDDL++;
	}

	// If we reach the end of the DDL list for this event then reset the
	// DDL counter, mark the iteration as done and exit.
	if (fDDL >= GetMaxDDL())
	{
		fDDL = 0;
		fDone = kTRUE;
		return kFALSE;
	}
	else
	{
		fDone = kFALSE;
	}

	AliDebug(3, Form("DDL Number %d\n", fDDL));
	
	Int_t dataSize = GetReader()->GetDataSize(); // in bytes
	// Check if we have enough buffer space already in fBuffer. If we do then
	// just continue reading otherwise we need to resize the buffer.
	if (fBufferSize < dataSize)
	{
		if (fBuffer != NULL)
		{
			delete [] fBuffer;
			fBuffer = NULL;
			fBufferSize = 0;
		}
		try
		{
			fBuffer = new UChar_t[dataSize];
			fBufferSize = dataSize;
		}
		catch (const std::bad_alloc&)
		{
			AliError("Could not allocate more buffer space. Cannot decode DDL.");
			return kFALSE;
		}
	}
	
	if (not GetReader()->ReadNext(fBuffer, dataSize))
	{
		return kFALSE;
	}
	
#ifndef R__BYTESWAP
	Swap(reinterpret_cast<UInt_t*>(fBuffer), dataSize / sizeof(UInt_t)); // Swap needed for mac power pc.
#endif
	
	fDDL++; // Remember to increment index to next DDL before the calls to
	        // fDecoder.Decode since the callback methods of the decoder might
	        // use AliMUONRawStreamTriggerHP::GetDDL()
	
	// Check if this is a scalar event.
	AliRawReader * reader = GetReader();
	if (!reader) return kFALSE;

	const AliRawDataHeader * cdh = reader->GetDataHeader();
	const AliRawDataHeaderV3 * cdh3 = reader->GetDataHeaderV3();

	if (!cdh && !cdh3) return kFALSE;

	bool scalerEvent = ((cdh ?  cdh->GetL1TriggerMessage() : cdh3->GetL1TriggerMessage()) & 0x1) == 0x1;
	
	bool result = false;
	try
	{
		// Since we might allocate memory inside OnNewBuffer in the event
		// handler we need to trap any memory allocation exception to be robust.
		result = fDecoder.Decode(fBuffer, dataSize, scalerEvent);
		fHadError = (result == true ? kFALSE : kTRUE);
		fTotalNumberOfDarcEoWErrors += fDecoder.GetHandler().GetDarcEoWErrors();
		fTotalNumberOfGlobalEoWErrors += fDecoder.GetHandler().GetGlobalEoWErrors();
		fTotalNumberOfRegEoWErrors += fDecoder.GetHandler().GetRegEoWErrors();
		fTotalNumberOfLocalEoWErrors += fDecoder.GetHandler().GetLocalEoWErrors();
	}
	catch (const std::bad_alloc&)
	{
		AliError("Could not allocate more buffer space. Cannot decode DDL.");
		return kFALSE;
	}

	// Update the current local structure pointer.
	fkCurrentLocalStruct = fDecoder.GetHandler().FirstLocalStruct();

	return kTRUE;
}


Bool_t AliMUONRawStreamTriggerHP::IsDone() const
{
	/// Indicates whether the iteration is finished or not.
	/// \return kTRUE if we already read all the digits and kFALSE if not.
	
	return fDone;
}


Bool_t AliMUONRawStreamTriggerHP::Next(
		UChar_t& id,   UChar_t& dec,     Bool_t& trigY,
		UChar_t& yPos, UChar_t& sXDev,   UChar_t& xDev,
		UChar_t& xPos, Bool_t& triggerY, Bool_t& triggerX,
		TArrayS& xPattern, TArrayS& yPattern
	)
{
	/// Advance one step in the iteration. Returns kFALSE if finished.
	/// If kTRUE is returned then the output parameters are filled with
	/// the values found in the next local trigger circuit structure.
	
	const AliLocalStruct* localStruct = Next();
	if (localStruct == NULL) return kFALSE;
	
	id    = localStruct->GetId();
	dec   = localStruct->GetDec();
	trigY = localStruct->GetTrigY();
	yPos  = localStruct->GetYPos();
	sXDev = localStruct->GetSXDev();
	xDev  = localStruct->GetXDev();
	xPos  = localStruct->GetXPos();
	
	triggerX = localStruct->GetTriggerX();
	triggerY = localStruct->GetTriggerY();
	
	localStruct->GetXPattern(xPattern);
	localStruct->GetYPattern(yPattern);

	return kTRUE;
}


AliMUONDDLTrigger* AliMUONRawStreamTriggerHP::GetDDLTrigger() const
{
	/// Construct and return a pointer to the DDL payload object.
	/// \return Pointer to internally constructed AliMUONDDLTrigger object.
	///         The object is owned by this class and should not be deleted
	///         by the caller.
	///
	/// \note This method should not be used just to gain access to the DDL
	/// payload, unless there is a good reason to have the AliMUONDDLTrigger
	/// object. For example, if you want to modify the data and then save it
	/// to another DDL stream. Otherwise it can be an order of magnitude
	/// faster to access the DDL headers and data with the GetHeaders,
	/// GetRegionalHeader and GetLocalStruct methods for example.
	/// Refer to the MUONRawStreamTrigger.C macro to see how to use the fast
	/// decoder interface optimally.
	
	if (fDDLObject != NULL) return fDDLObject;
	
	fDDLObject = new AliMUONDDLTrigger;
	
	// Copy over all DARC, global headers and scalars.
	AliMUONDarcHeader* darcHeader = fDDLObject->GetDarcHeader();
	const AliHeader* hdr = GetHeaders();
	UInt_t word = hdr->GetDarcHeader();
	memcpy(darcHeader->GetHeader(), &word, sizeof(word));
	if (hdr->GetDarcScalars() != NULL)
	{
		memcpy(darcHeader->GetDarcScalers(), hdr->GetDarcScalars(), sizeof(AliMUONDarcScalarsStruct));
	}
	memcpy(darcHeader->GetGlobalInput(), hdr->GetGlobalHeader(), sizeof(AliMUONGlobalHeaderStruct));
	if (hdr->GetGlobalScalars() != NULL)
	{
		memcpy(darcHeader->GetGlobalScalers(), hdr->GetGlobalScalars(), sizeof(AliMUONGlobalScalarsStruct));
	}
	
	for (Int_t iReg = 0; iReg < (Int_t)GetRegionalHeaderCount(); iReg++)
	{
		AliMUONRegHeader regHeader;
		AliMUONLocalStruct localStruct;
		
		const AliRegionalHeader* rh = GetRegionalHeader(iReg);
		// Copy local structure and scalars and add everything into DDL object.
		memcpy(regHeader.GetHeader(), rh->GetHeader(), sizeof(AliMUONRegionalHeaderStruct));
		if (rh->GetScalars() != NULL)
		{
			memcpy(regHeader.GetScalers(), rh->GetScalars(), sizeof(AliMUONRegionalScalarsStruct));
		}
		fDDLObject->AddRegHeader(regHeader);
		
		const AliLocalStruct* lstruct = rh->GetFirstLocalStruct();
		while (lstruct != NULL)
		{
			// Copy local structure and scalars and add everything into DDL object.
			memcpy(localStruct.GetData(), lstruct->GetData(), sizeof(AliMUONLocalInfoStruct));
			if (lstruct->GetScalars() != NULL)
			{
				memcpy(localStruct.GetScalers(), lstruct->GetScalars(), sizeof(AliMUONLocalScalarsStruct));
			}
			if (AliMUONRawStreamTriggerHP::AliLocalStruct::GetOverrideIdFlag() == true)
			{
				// Since the override ID flag is set, we need to replace the
				// ID in the structure with the calculated one returned by GetId().
				AliMUONLocalInfoStruct* strptr = reinterpret_cast<AliMUONLocalInfoStruct*>( localStruct.GetData() );
				UInt_t triggerBits = strptr->fTriggerBits;
				triggerBits &= ~(0xF << 19);
				strptr->fTriggerBits = triggerBits | ((lstruct->GetId() & 0xF) << 19);
			}
			fDDLObject->AddLocStruct(localStruct, iReg);
			lstruct = lstruct->Next();
		}
	}
	
	return fDDLObject;
}


void AliMUONRawStreamTriggerHP::SetMaxReg(Int_t reg)
{
	/// Set the maximum allowed number of regional cards in the DDL.
	
	fDecoder.MaxRegionals( (UInt_t) reg );
	
	fDecoder.GetHandler().SetMaxStructs(
			fDecoder.MaxRegionals(),
			fDecoder.MaxLocals()
		);
}


void AliMUONRawStreamTriggerHP::SetMaxLoc(Int_t loc)
{
	/// Sets the maximum number of local cards in the DDL.
	
	fDecoder.MaxLocals( (UInt_t) loc );
	
	fDecoder.GetHandler().SetMaxStructs(
			fDecoder.MaxRegionals(),
			fDecoder.MaxLocals()
		);
}

///////////////////////////////////////////////////////////////////////////////

void AliMUONRawStreamTriggerHP::AliHeader::Print() const
{
	/// Print DARC header, global header and global scalars to screen.
	
	cout << "===== DARC info =====" << endl;
	cout << "Header bits : 0x" << hex << fDarcHeader << dec << endl;
	if (fDarcScalars != NULL)
	{
		cout << "L0R :   " << fDarcScalars->fL0R << " (0x"
			<< hex << fDarcScalars->fL0R << dec << ")" << endl;
		cout << "L1P :   " << fDarcScalars->fL1P << " (0x"
			<< hex << fDarcScalars->fL1P << dec << ")" << endl;
		cout << "L1S :   " << fDarcScalars->fL1S << " (0x"
			<< hex << fDarcScalars->fL1S << dec << ")" << endl;
		cout << "L2A :   " << fDarcScalars->fL2A << " (0x"
			<< hex << fDarcScalars->fL2A << dec << ")" << endl;
		cout << "L2R :   " << fDarcScalars->fL2R << " (0x"
			<< hex << fDarcScalars->fL2R << dec << ")" << endl;
		cout << "Clock : " << fDarcScalars->fClk << " (0x"
			<< hex << fDarcScalars->fClk << dec << ")" << endl;
		cout << "Hold :  " << fDarcScalars->fHold << " (0x"
			<< hex << fDarcScalars->fHold << dec << ")" << endl;
		cout << "Spare : " << fDarcScalars->fSpare << " (0x"
			<< hex << fDarcScalars->fSpare << dec << ")" << endl;
	}
	else
	{
		cout << "Scalars == NULL" << endl;
	}
	
	cout << "===== Global info =====" << endl;
	for (int i = 0; i < 4; i++)
	{
		cout << "Input[" << i << "] : " << fGlobalHeader->fInput[i] << " (0x"
			<< hex << fGlobalHeader->fInput[i] << dec << ")" << endl;
	}
	cout << "Output :    " << fGlobalHeader->fOutput << " (0x"
		<< hex << fGlobalHeader->fOutput << dec << ")" << endl;
	if (fGlobalScalars != NULL)
	{
		cout << "L0 :         " << fGlobalScalars->fL0 << " (0x"
			<< hex << fGlobalScalars->fL0 << dec << ")" << endl;
		cout << "Clock :     " << fGlobalScalars->fClk << " (0x"
			<< hex << fGlobalScalars->fClk << dec << ")" << endl;
		for (int j = 0; j < 4; j++)
		{
			cout << "Scaler[" << j << "] : " << fGlobalScalars->fScaler[j] << " (0x"
				<< hex << fGlobalScalars->fScaler[j] << dec << ")" << endl;
		}
		cout << "Hold :      " << fGlobalScalars->fHold << " (0x"
			<< hex << fGlobalScalars->fHold << dec << ")" << endl;
		cout << "Spare :     " << fGlobalScalars->fSpare << " (0x"
			<< hex << fGlobalScalars->fSpare << dec << ")" << endl;
	}
	else
	{
		cout << "Scalars == NULL" << endl;
	}
}

void AliMUONRawStreamTriggerHP::AliRegionalHeader::Print() const
{
	/// Print the regional header and scalars to screen.
	
	cout << "===== Regional card info =====" << endl;
	cout << "DarcWord : " << fHeader->fDarcWord << " (0x"
		<< hex << fHeader->fDarcWord << dec << ")" << endl;
	cout << "Word :     " << fHeader->fWord << " (0x"
		<< hex << fHeader->fWord << dec << ")" << endl;
	cout << "Input[0] : " << fHeader->fInput[0] << " (0x"
		<< hex << fHeader->fInput[0] << dec << ")" << endl;
	cout << "Input[1] : " << fHeader->fInput[1] << " (0x"
		<< hex << fHeader->fInput[1] << dec << ")" << endl;
	cout << "L0/Mask :  " << fHeader->fL0CountAndMask << " (0x"
		<< hex << fHeader->fL0CountAndMask << dec << ")" << endl;
	if (fScalars != NULL)
	{
		cout << "Clock :     " << fScalars->fClk << " (0x"
			<< hex << fScalars->fClk << dec << ")" << endl;
		for (int i = 0; i < 8; i++)
		{
			cout << "Scaler[" << i << "] : " << fScalars->fScaler[i] << " (0x"
				<< hex << fScalars->fScaler[i] << dec << ")" << endl;
		}
		cout << "Hold :      " << fScalars->fHold << " (0x"
			<< hex << fScalars->fHold << dec << ")" << endl;
	}
	else
	{
		cout << "Scalars == NULL" << endl;
	}
}

void AliMUONRawStreamTriggerHP::AliLocalStruct::Print() const
{
	/// Print local trigger structure and scalars to screen.
	
	cout << "===== Local card info =====" << endl;
	cout << "X2X1 :         " << fLocalStruct->fX2X1 << " (0x"
		<< hex << fLocalStruct->fX2X1 << dec << ")" << endl;
	cout << "X4X3 :         " << fLocalStruct->fX4X3 << " (0x"
		<< hex << fLocalStruct->fX4X3 << dec << ")" << endl;
	cout << "Y2Y1 :         " << fLocalStruct->fY2Y1 << " (0x"
		<< hex << fLocalStruct->fY2Y1 << dec << ")" << endl;
	cout << "Y4Y3 :         " << fLocalStruct->fY4Y3 << " (0x"
		<< hex << fLocalStruct->fY4Y3 << dec << ")" << endl;
	cout << "Trigger bits : " << fLocalStruct->fTriggerBits << " (0x"
		<< hex << fLocalStruct->fTriggerBits << dec << ")" << endl;
	if (fScalars != NULL)
	{
		cout << "L0 :           " << fScalars->fL0 << " (0x"
			<< hex << fScalars->fL0 << dec << ")" << endl;
		cout << "Hold :         " << fScalars->fHold << " (0x"
			<< hex << fScalars->fHold << dec << ")" << endl;
		cout << "Clock :        " << fScalars->fClk << " (0x"
			<< hex << fScalars->fClk << dec << ")" << endl;
		cout << "LPtNTrig :     " << fScalars->fLPtNTrig << " (0x"
			<< hex << fScalars->fLPtNTrig << dec << ")" << endl;
		cout << "HPtNTrig :     " << fScalars->fHPtNTrig << " (0x"
			<< hex << fScalars->fHPtNTrig << dec << ")" << endl;
		cout << "LPtRTrig :     " << fScalars->fLPtRTrig << " (0x"
			<< hex << fScalars->fLPtRTrig << dec << ")" << endl;
		cout << "HPtRTrig :     " << fScalars->fHPtRTrig << " (0x"
			<< hex << fScalars->fHPtRTrig << dec << ")" << endl;
		cout << "LPtLTrig :     " << fScalars->fLPtLTrig << " (0x"
			<< hex << fScalars->fLPtLTrig << dec << ")" << endl;
		cout << "HPtLTrig :     " << fScalars->fHPtLTrig << " (0x"
			<< hex << fScalars->fHPtLTrig << dec << ")" << endl;
		cout << "LPtSTrig :     " << fScalars->fLPtSTrig << " (0x"
			<< hex << fScalars->fLPtSTrig << dec << ")" << endl;
		cout << "HPtSTrig :     " << fScalars->fHPtSTrig << " (0x"
			<< hex << fScalars->fHPtSTrig << dec << ")" << endl;
		for (int i = 0; i < 8*4; i++)
		{
			cout << "Scaler[" << i << "] :  " << fScalars->fScaler[i] << " (0x"
				<< hex << fScalars->fScaler[i] << dec << ")" << endl;
		}
		cout << "EOS :          " << fScalars->fEOS << " (0x"
			<< hex << fScalars->fEOS << dec << ")" << endl;
		cout << "Reset :        " << fScalars->fReset << " (0x"
			<< hex << fScalars->fReset << dec << ")" << endl;
	}
	else
	{
		cout << "Scalars == NULL" << endl;
	}
}

///////////////////////////////////////////////////////////////////////////////

AliMUONRawStreamTriggerHP::AliDecoderEventHandler::AliDecoderEventHandler() :
	fRawStream(NULL),
	fBufferStart(NULL),
	fDarcHeader(0),
	fDarcScalars(NULL),
	fHeaders(),
	fRegionalsCount(0),
	fRegionals(NULL),
	fLocals(NULL),
	fEndOfLocals(NULL),
	fCurrentRegional(NULL),
	fCurrentLocal(NULL),
	fDarcEoWErrors(0),
	fGlobalEoWErrors(0),
	fRegEoWErrors(0),
	fLocalEoWErrors(0),
	fWarnings(kTRUE)
{
	/// Default constructor
}


AliMUONRawStreamTriggerHP::AliDecoderEventHandler::~AliDecoderEventHandler()
{
	/// Default destructor cleans up the allocated memory.
	
	if (fRegionals != NULL) delete [] fRegionals;
	if (fLocals != NULL) delete [] fLocals;
}


void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::SetMaxStructs(
		UInt_t maxRegionals, UInt_t maxLocals
	)
{
	/// Sets the maximum number of structures allowed.
	
	// Start by clearing the current arrays.
	if (fRegionals != NULL)
	{
		delete [] fRegionals;
		fRegionals = NULL;
	}
	if (fLocals != NULL)
	{
		delete [] fLocals;
		fLocals = NULL;
		fEndOfLocals = NULL;
	}
	fCurrentRegional = NULL;
	fCurrentLocal = NULL;
	
	// Allocate new memory.
	fRegionals = new AliRegionalHeader[maxRegionals];
	fLocals = new AliLocalStruct[maxRegionals*maxLocals];
	fEndOfLocals = fLocals;
	
	fRegionalsCount = maxRegionals;
}


void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnNewBuffer(
		const void* buffer, UInt_t /*bufferSize*/
	)
{
	/// This is called by the high performance decoder when a new DDL payload
	/// is about to be decoded.

	assert( fRawStream != NULL );
	
	// remember the start of the buffer to be used in OnError.
	fBufferStart = buffer;

	// Reset error counters.
	fDarcEoWErrors = 0;
	fGlobalEoWErrors = 0;
	fRegEoWErrors = 0;
	fLocalEoWErrors = 0;
	
	// Reset the current local structure pointer which will be used to track
	// where we need to fill fLocals. We have to subtract one space because we
	// will increment the pointer the first time in the OnLocalStruct method.
	fCurrentLocal = fLocals-1;
	
	fCurrentRegional = NULL;
	
	// Reset and link up all the regional structures together.
	for (UInt_t i = 0; i+1 < fRegionalsCount; i++)
	{
		fRegionals[i] = AliRegionalHeader(fLocals, &fgkEmptyHeader, NULL);
		fRegionals[i].SetNext(&fRegionals[i+1]);
	}
	// Reset the last structure.
	fRegionals[fRegionalsCount-1] = AliRegionalHeader(fLocals, &fgkEmptyHeader, NULL);
}


void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnError(
		ErrorCode error, const void* location
	)
{
	/// This is called by the high performance decoder when a error occurs
	/// when trying to decode the DDL payload. This indicates corruption in
	/// the data. This method converts the error code to a descriptive message
	/// and logs this with the raw reader.
	/// \param error  The error code indicating the problem.
	/// \param location  A pointer to the location within the DDL payload buffer
	///              being decoded where the problem with the data was found.

	assert( fRawStream != NULL );
	assert( fRawStream->GetReader() != NULL );
	
	Char_t* message = NULL;
	//UInt_t word = 0;

	switch (error)
	{
	case kWrongEventType:
		message = Form("Wrong event type obtained from the Darc header, take the one of CDH");
		break;
		
	case kBadEndOfDarc:
		fDarcEoWErrors++;
		message = Form(
			"Wrong end of Darc word %x instead of %x\n",
			*reinterpret_cast<const UInt_t*>(location),
			AliMUONTriggerDDLDecoder<AliMUONTriggerDDLDecoderEventHandler>::EndOfDarcWord()
		);
		fRawStream->GetReader()->AddMajorErrorLog(kDarcEoWErr, message);
		break;
		
	case kBadEndOfGlobal:
		fGlobalEoWErrors++;
		message = Form(
			"Wrong end of Global word %x instead of %x\n",
			*reinterpret_cast<const UInt_t*>(location),
			AliMUONTriggerDDLDecoder<AliMUONTriggerDDLDecoderEventHandler>::EndOfGlobalWord()
		);
		fRawStream->GetReader()->AddMajorErrorLog(kGlobalEoWErr, message);
		break;
		
	case kBadEndOfRegional:
		fRegEoWErrors++;
		message = Form(
			"Wrong end of Regional word %x instead of %x\n",
			*reinterpret_cast<const UInt_t*>(location),
			AliMUONTriggerDDLDecoder<AliMUONTriggerDDLDecoderEventHandler>::EndOfRegionalWord()
		);
		fRawStream->GetReader()->AddMajorErrorLog(kRegEoWErr, message);
		break;
		
	case kBadEndOfLocal:
		fLocalEoWErrors++;
		message = Form(
			"Wrong end of Local word %x instead of %x\n",
			*reinterpret_cast<const UInt_t*>(location),
			AliMUONTriggerDDLDecoder<AliMUONTriggerDDLDecoderEventHandler>::EndOfLocalWord()
		);
		fRawStream->GetReader()->AddMajorErrorLog(kLocalEoWErr, message);
		break;
		
	default:
		message = Form(
			"%s (At byte %lu in DDL.)",
			ErrorCodeToMessage(error),
			(unsigned long)location - (unsigned long)fBufferStart + sizeof(AliRawDataHeaderV3)
		);
		fRawStream->GetReader()->AddMajorErrorLog(error, message);
		break;
	}

	if (fWarnings)
	{
		AliWarningGeneral(
				"AliMUONRawStreamTriggerHP::AliDecoderEventHandler",
				message
			);
	}
}

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