ROOT logo
// $Id: $

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

/// @file   testAliHLTReadoutList.C
/// @author Artur Szostak <artursz@iafrica.com>
/// @date   8 June 2010
/// @brief  Test program for the AliHLTReadoutList class.
///

#if defined(__CINT__) && (! defined(__MAKECINT__))
#error This macro must be compiled. Try running as testAliHLTReadoutList.C++.
#endif

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliHLTDataTypes.h"
#include "AliHLTReadoutList.h"
#include "AliHLTDAQ.h"
#include "TRandom3.h"
#include "TString.h"
#include "Riostream.h"
#include <vector>
#include <algorithm>
#endif

// The detector codes as used by AliHLTReadoutList.
const int kgNumberOfCodes = 21;
const int kgDetCodes[kgNumberOfCodes] = {
	AliHLTReadoutList::kITSSPD,
	AliHLTReadoutList::kITSSDD,
	AliHLTReadoutList::kITSSSD,
	AliHLTReadoutList::kTPC,
	AliHLTReadoutList::kTRD,
	AliHLTReadoutList::kTOF,
	AliHLTReadoutList::kHMPID,
	AliHLTReadoutList::kPHOS,
	AliHLTReadoutList::kCPV,
	AliHLTReadoutList::kPMD,
	AliHLTReadoutList::kMUONTRK,
	AliHLTReadoutList::kMUONTRG,
	AliHLTReadoutList::kFMD,
	AliHLTReadoutList::kT0,
	AliHLTReadoutList::kV0,
	AliHLTReadoutList::kZDC,
	AliHLTReadoutList::kACORDE,
	AliHLTReadoutList::kTRG,
	AliHLTReadoutList::kEMCAL,
	AliHLTReadoutList::kDAQTEST,
	AliHLTReadoutList::kHLT
};
const char* kgDetCodeName[kgNumberOfCodes] = {
	"AliHLTReadoutList::kITSSPD",
	"AliHLTReadoutList::kITSSDD",
	"AliHLTReadoutList::kITSSSD",
	"AliHLTReadoutList::kTPC",
	"AliHLTReadoutList::kTRD",
	"AliHLTReadoutList::kTOF",
	"AliHLTReadoutList::kHMPID",
	"AliHLTReadoutList::kPHOS",
	"AliHLTReadoutList::kCPV",
	"AliHLTReadoutList::kPMD",
	"AliHLTReadoutList::kMUONTRK",
	"AliHLTReadoutList::kMUONTRG",
	"AliHLTReadoutList::kFMD",
	"AliHLTReadoutList::kT0",
	"AliHLTReadoutList::kV0",
	"AliHLTReadoutList::kZDC",
	"AliHLTReadoutList::kACORDE",
	"AliHLTReadoutList::kTRG",
	"AliHLTReadoutList::kEMCAL",
	"AliHLTReadoutList::kDAQTEST",
	"AliHLTReadoutList::kHLT"
};

/**
 * Converts a code to string.
 * \param code  The ID code of the detector. One of AliHLTReadoutList::EDetectorId
 * \returns the code name as a string given a the detector code.
 */
const char* CodeToString(int code)
{
	for (int i = 0; i < kgNumberOfCodes; ++i)
	{
		if (kgDetCodes[i] == code) return kgDetCodeName[i];
	}
	return "UNKNOWN";
}

/**
 * Checks if the basic empty and clear methods work.
 */
bool CheckEmptyAndClear()
{
	AliHLTReadoutList rl;
	if (rl.Empty() != true)
	{
		cerr << "ERROR: AliHLTReadoutList::Empty returns false for an empty readout list." << endl;
		return false;
	}
	
	// Enable all the detectors and check this operation.
	rl.Enable(AliHLTReadoutList::kALLDET);
	for (int i = 0; i < kgNumberOfCodes; ++i)
	{
		if (i == 19) continue; // This is the test DDL. off by default.
		if (not rl.DetectorEnabled(kgDetCodes[i]))
		{
			cerr << "ERROR: AliHLTReadoutList::Enable(AliHLTReadoutList::kALLDET) did not enable for "
				<< CodeToString(kgDetCodes[i]) << "." << endl;
			return false;
		}
	}
	if (rl.DetectorEnabled(AliHLTReadoutList::kDAQTEST))
	{
		cerr << "ERROR: AliHLTReadoutList::Enable(AliHLTReadoutList::kALLDET) enabled bits"
			" for AliHLTReadoutList::kDAQTEST but should not have." << endl;
		return false;
	}
	
	rl.Clear();
	// Fetch the raw bits for the readout list structure and check that they
	// are all zero, since we should have disabled everything in the loop above.
	AliHLTEventDDL bits = rl;
	if (bits.fCount != (unsigned int)gkAliHLTDDLListSize)
	{
		cerr << "ERROR: Typecast operator AliHLTEventDDL () is not"
			" setting the fCount of the structure correctly." << endl;
		return false;
	}
	for (int j = 0; j < gkAliHLTDDLListSize; ++j)
	{
		if (bits.fList[j] != 0x0)
		{
			cerr << "ERROR: Word " << j << " in internal AliHLTReadoutList"
				" bitfield structure is not zero as expected after a"
				" call to AliHLTReadoutList::Clear." << endl;
			return false;
		}
	}
	
	return true;
}

/**
 * Tests enabling and disabling of different detectors.
 */
bool CheckEnablingDisabling()
{
	for (int i = 0; i < 10000; ++i)
	{
		// Get 3 random detector codes.
		int detNum[3] = {
			gRandom->Integer(kgNumberOfCodes),
			gRandom->Integer(kgNumberOfCodes),
			gRandom->Integer(kgNumberOfCodes)
		};
		int code[3] = {
			kgDetCodes[detNum[0]],
			kgDetCodes[detNum[1]],
			kgDetCodes[detNum[2]]
		};
		// make sure the codes are not duplicated.
		while (code[1] == code[0])
		{
			detNum[1] = gRandom->Integer(kgNumberOfCodes);
			code[1] = kgDetCodes[detNum[1]];
		}
		while (code[2] == code[1] or code[2] == code[0])
		{
			detNum[2] = gRandom->Integer(kgNumberOfCodes);
			code[2] = kgDetCodes[detNum[2]];
		}
		
		// Choose the number of codes to use, from 1 to max 3.
		int codeCount = gRandom->Integer(3) + 1;
		
		// Build up the detector code list for the AliHLTReadoutList constructor.
		int totalCode = 0;
		for (int j = 0; j < codeCount; ++j) totalCode |= code[j];
		
		AliHLTReadoutList rl(totalCode);
		if (rl.Empty() == true)
		{
			cerr << "ERROR: AliHLTReadoutList::Empty returns true for a non empty readout list." << endl;
			return false;
		}
		
		// Check that the correct detectors have been enabled and
		// that we can disable a detector correctly.
		for (int j = 0; j < codeCount; ++j)
		{
			if (rl.DetectorEnabled(code[j]) == false)
			{
				cerr << "ERROR: Detector was not enabled for "
					<< CodeToString(code[j]) << " by constructor." << endl;
				return false;
			}
			if (rl.DetectorDisabled(code[j]) == true)
			{
				cerr << "ERROR: DetectorDisabled returned and incorrect result"
					" when detectors enabled for "
					<< CodeToString(code[j]) << " by constructor." << endl;
				return false;
			}
			
			// Also check each bit individualy according to AliHLTDAQ values.
			int det = detNum[j];
			int maxddls = AliHLTDAQ::NumberOfDdls(det);
			for (int ddlindex = 0; ddlindex < maxddls; ++ddlindex)
			{
				int ddlid = AliHLTDAQ::DdlIDOffset(det) | (ddlindex & 0xFF);
				if (rl.IsDDLDisabled(ddlid))
				{
					cerr << "ERROR: Bit not set for DDL " << ddlid
						<< ", even though detector "
						<< AliHLTDAQ::OnlineName(det)
						<< " was enabled." << endl;
					return false;
				}
			}
			
			rl.Disable(code[j]);
			if (rl.DetectorEnabled(code[j]) == true)
			{
				cerr << "ERROR: AliHLTReadoutList::Disable(x) is not working for x = "
					<< CodeToString(code[j]) << "." << endl;
				return false;
			}
			if (rl.DetectorDisabled(code[j]) == false)
			{
				cerr << "ERROR: DetectorDisabled returned and incorrect result"
					" when calling AliHLTReadoutList::Disable(x) for "
					<< CodeToString(code[j]) << "." << endl;
				return false;
			}
		}
		
		// Fetch the raw bits for the readout list structure and check that they
		// are all zero, since we should have disabled everything in the loop above.
		AliHLTEventDDL bits = rl;
		for (int j = 0; j < gkAliHLTDDLListSize; ++j)
		{
			if (bits.fList[j] != 0x0)
			{
				cerr << "ERROR: Word " << j << " in internal AliHLTReadoutList"
					" bitfield structure is not zero as expected." << endl;
				return false;
			}
		}
	}
	return true;
}

/**
 * Tests enabling and disabling of different DDLs.
 */
bool CheckEnablingDisablingDDLs()
{
	for (int i = 0; i < 10000; ++i)
	{
		// Get random DDL IDs that are each unique.
		std::vector<int> ddls;
		int ddlCount = gRandom->Integer(100) + 1;
		for (int j = 0; j < ddlCount; ++j)
		{
			int ddlid = -1;
			do
			{
				int det = gRandom->Integer(AliHLTDAQ::NumberOfDetectors());
				int maxddls = AliHLTDAQ::NumberOfDdls(det);
				// The following is a special check since AliDAQ could be the newer version.
				// det = 18 is for EMCAL and gkAliHLTDDLListSize = 30 indicates old version
				// of AliHLTEventDDL before EMCAL expantion with DCAL.
				if (det == 18 and gkAliHLTDDLListSize == 30 and maxddls > 24) maxddls = 24;
				int ddlindex = gRandom->Integer(maxddls);
				ddlid = AliHLTDAQ::DdlID(det, ddlindex);
				if (std::find(ddls.begin(), ddls.end(), ddlid) != ddls.end()) ddlid = -1;
			}
			while (ddlid == -1);
			ddls.push_back(ddlid);
		}
		
		// Build up the enable list for the AliHLTReadoutList constructor.
		TString enableList;
		for (size_t j = 0; j < ddls.size(); ++j)
		{
			char num[32];
			sprintf(num, "%d", ddls[j]);
			enableList += " ";
			enableList += num;
		}
		
		AliHLTReadoutList rl(enableList.Data());
		if (rl.Empty() == true)
		{
			cerr << "ERROR: AliHLTReadoutList::Empty returns true for a non empty readout list." << endl;
			return false;
		}
		
		// Check that the correct DDLs have been enabled and
		// that we can disable a DDL correctly.
		for (size_t j = 0; j < ddls.size(); ++j)
		{
			if (rl.IsDDLEnabled(ddls[j]) == false)
			{
				cerr << "ERROR: DDL " << ddls[j] << " was not enabled by constructor." << endl;
				return false;
			}
			rl.DisableDDLBit(ddls[j]);
			if (rl.IsDDLDisabled(ddls[j]) == false)
			{
				cerr << "ERROR: AliHLTReadoutList::DisableDDLBit(x) is not working for x = "
					<< ddls[j] << "." << endl;
				return false;
			}
		}
		
		// Fetch the raw bits for the readout list structure and check that they
		// are all zero, since we should have disabled everything in the loop above.
		AliHLTEventDDL bits = rl;
		for (int j = 0; j < gkAliHLTDDLListSize; ++j)
		{
			if (bits.fList[j] != 0x0)
			{
				cerr << "ERROR: Word " << j << " in internal AliHLTReadoutList"
					" bitfield structure is not zero as expected." << endl;
				return false;
			}
		}
	}
	return true;
}

/**
 * Tests if using incorrect DDL IDs returns zero or is ignored as expected.
 */
bool CheckIncorrectIDs()
{
	for (int i = 0; i < 1000000; ++i)
	{
		// Get random DDL ID outside the valid range.
		int ddlid = -1;
		int det = gRandom->Integer(AliHLTDAQ::NumberOfDetectors()+1);
		if (det != AliHLTDAQ::NumberOfDetectors())
		{
			int maxddls = AliHLTDAQ::NumberOfDdls(det);
			int ddlindex = gRandom->Integer(0xFF - maxddls) + maxddls;
			ddlid = AliHLTDAQ::DdlIDOffset(det) | (ddlindex & 0xFF);
		}
		else
		{
			det = gRandom->Integer(11) + 20;
			if (det == 30) det = 31;
			int ddlindex = gRandom->Integer(0xFF);
			ddlid = (det << 8) | (ddlindex & 0xFF);
		}
		
		AliHLTReadoutList rl;
		if (rl.GetDDLBit(ddlid) != kFALSE)
		{
			cerr << "ERROR: Received a non zero result for invalid DDL " << ddlid << "." << endl;
			return false;
		}
		AliHLTEventDDL before = rl;
		rl.EnableDDLBit(ddlid);
		AliHLTEventDDL after = rl;
		if (memcmp(&before, &after, sizeof(AliHLTEventDDL)) != 0)
		{
			cerr << "ERROR: Modified AliHLTReadoutList structure using an invalid DDL "
				<< ddlid << "." << endl;
			cerr << "========== Dump of bits before modification ==========" << endl;
			for (unsigned int j = 0; j < before.fCount; ++j)
			{
				cerr << "[word " << dec << j << "] = " << hex << before.fList[j] << dec << endl;
			}
			cerr << "========== Dump of bits after modification ==========" << endl;
			for (unsigned int j = 0; j < after.fCount; ++j)
			{
				cerr << "[word " << dec << j << "] = " << hex << after.fList[j] << dec << endl;
			}
			return false;
		}
	}
	return true;
}

/**
 * Tests the mapping of the AliHLTReadoutList::GetFirstWord, AliHLTReadoutList::GetWordCount
 * and AliHLTReadoutList::GetDetectorFromWord methods.
 */
bool CheckWordIndexAndCount()
{
	int wordCovered[gkAliHLTDDLListSize];
	for (int j = 0; j < gkAliHLTDDLListSize; ++j) wordCovered[j] = 0;
	
	for (int i = 0; i < kgNumberOfCodes; ++i)
	{
		AliHLTReadoutList rl;
		Int_t firstword = rl.GetFirstWord((AliHLTReadoutList::EDetectorId)kgDetCodes[i]);
		if (firstword < 0 or gkAliHLTDDLListSize-1 < firstword)
		{
			cerr << "ERROR: AliHLTReadoutList::GetFirstWord(" << kgDetCodeName[i]
				<< ") returns " << firstword
				<< ", which is outside the valid range of [0.." << gkAliHLTDDLListSize-1
				<< "]." << endl;
			return false;
		}
		
		Int_t lastword = firstword + rl.GetWordCount((AliHLTReadoutList::EDetectorId)kgDetCodes[i]);
		if (lastword < 1 or gkAliHLTDDLListSize < lastword)
		{
			cerr << "ERROR: The sum AliHLTReadoutList::GetFirstWord(" << kgDetCodeName[i]
				<< ") + AliHLTReadoutList::GetWordCount(" << kgDetCodeName[i]
				<< ") gives " << lastword
				<< ", which is outside the valid range of [1.." << gkAliHLTDDLListSize
				<< "]." << endl;
			return false;
		}
		
		for (int j = firstword; j < lastword; ++j)
		{
			if (wordCovered[j] == 1)
			{
				cerr << "ERROR: The combination of AliHLTReadoutList::GetWordCount(" << kgDetCodeName[i]
					<< ") and AliHLTReadoutList::GetWordCount(" << kgDetCodeName[i]
					<< ") overlaps with previous detectors. Check the mapping in these functions."
					<< endl;
				return false;
			}
			wordCovered[j] = 1;
		}
		
		Int_t maxddls = AliHLTDAQ::NumberOfDdls(i);
		Int_t ddlid = AliHLTDAQ::DdlIDOffset(i) | (gRandom->Integer(maxddls) & 0xFF);
		rl.EnableDDLBit(ddlid);
		if (rl.GetFirstUsedDetector() != kgDetCodes[i])
		{
			cerr << "ERROR: AliHLTReadoutList::GetFirstUsedDetector() did not return the correct value of"
				<< kgDetCodeName[i] << " after calling AliHLTReadoutList::EnableDDLBit("
				<< ddlid << ")." << endl;
			return false;
		}
		if (rl.GetFirstUsedDetector((AliHLTReadoutList::EDetectorId)kgDetCodes[i]) != AliHLTReadoutList::kNoDetector)
		{
			cerr << "ERROR: AliHLTReadoutList::GetFirstUsedDetector(" << kgDetCodeName[i]
				<< "+1) did not return the correct value of AliHLTReadoutList::kNoDetector"
				   " after calling AliHLTReadoutList::EnableDDLBit("
				<< ddlid << ")." << endl;
			return false;
		}
	}
	
	for (int j = 0; j < gkAliHLTDDLListSize; ++j)
	{
		if (wordCovered[j] == 0)
		{
			cerr << "ERROR: The functions AliHLTReadoutList::GetWordCount"
				" and AliHLTReadoutList::GetWordCount do not fully cover"
				" all DDL readout list words." << endl;
			return false;
		}
	}
	
	// Check the mapping of GetDetectorFromWord
	for (int j = 0; j < gkAliHLTDDLListSize; ++j)
	{
		AliHLTReadoutList::EDetectorId det = AliHLTReadoutList::GetDetectorFromWord(j);
		Int_t firstword = AliHLTReadoutList::GetFirstWord(det);
		Int_t lastword = firstword + AliHLTReadoutList::GetWordCount(det);
		if (not (firstword <= j and j < lastword))
		{
			cerr << "ERROR: The function AliHLTReadoutList::GetDetectorFromWord returns "
				<< AliHLTReadoutList::DetectorIdToString(det)
				<< " for word " << j
				<< " but the GetFirstWord and GetWordCount methods indicate a different range."
				<< " The mapping is probably incorrect." << endl;
			return false;
		}
	}
	
	return true;
}

/**
 * Runs the unit test for the AliHLTReadoutList class.
 * \returns true if the class passed the test and false otherwise.
 */
bool testAliHLTReadoutList()
{
	gRandom->SetSeed(123);
	
	if (AliHLTDAQ::NumberOfDetectors() != kgNumberOfCodes)
	{
		cerr << "ERROR: The testAliHLTReadoutList.C macro needs to be updated"
			" or something went really wrong."
			" The number of detectors reported by AliHLTDAQ is not "
			<< kgNumberOfCodes << ", as expected, but "
			<< AliHLTDAQ::NumberOfDetectors() << "." << endl;
		return false;
	}
	
	if (not CheckEmptyAndClear()) return false;
	if (not CheckEnablingDisabling()) return false;
	if (not CheckEnablingDisablingDDLs()) return false;
	if (not CheckIncorrectIDs()) return false;
	if (not CheckWordIndexAndCount()) return false;
	
	return true;
}

#ifndef __MAKECINT__

int main(int /*argc*/, const char** /*argv*/)
{
	bool resultOk = testAliHLTReadoutList();
	if (not resultOk) return 1;
	return 0;
}

#endif // __MAKECINT__
 testAliHLTReadoutList.C:1
 testAliHLTReadoutList.C:2
 testAliHLTReadoutList.C:3
 testAliHLTReadoutList.C:4
 testAliHLTReadoutList.C:5
 testAliHLTReadoutList.C:6
 testAliHLTReadoutList.C:7
 testAliHLTReadoutList.C:8
 testAliHLTReadoutList.C:9
 testAliHLTReadoutList.C:10
 testAliHLTReadoutList.C:11
 testAliHLTReadoutList.C:12
 testAliHLTReadoutList.C:13
 testAliHLTReadoutList.C:14
 testAliHLTReadoutList.C:15
 testAliHLTReadoutList.C:16
 testAliHLTReadoutList.C:17
 testAliHLTReadoutList.C:18
 testAliHLTReadoutList.C:19
 testAliHLTReadoutList.C:20
 testAliHLTReadoutList.C:21
 testAliHLTReadoutList.C:22
 testAliHLTReadoutList.C:23
 testAliHLTReadoutList.C:24
 testAliHLTReadoutList.C:25
 testAliHLTReadoutList.C:26
 testAliHLTReadoutList.C:27
 testAliHLTReadoutList.C:28
 testAliHLTReadoutList.C:29
 testAliHLTReadoutList.C:30
 testAliHLTReadoutList.C:31
 testAliHLTReadoutList.C:32
 testAliHLTReadoutList.C:33
 testAliHLTReadoutList.C:34
 testAliHLTReadoutList.C:35
 testAliHLTReadoutList.C:36
 testAliHLTReadoutList.C:37
 testAliHLTReadoutList.C:38
 testAliHLTReadoutList.C:39
 testAliHLTReadoutList.C:40
 testAliHLTReadoutList.C:41
 testAliHLTReadoutList.C:42
 testAliHLTReadoutList.C:43
 testAliHLTReadoutList.C:44
 testAliHLTReadoutList.C:45
 testAliHLTReadoutList.C:46
 testAliHLTReadoutList.C:47
 testAliHLTReadoutList.C:48
 testAliHLTReadoutList.C:49
 testAliHLTReadoutList.C:50
 testAliHLTReadoutList.C:51
 testAliHLTReadoutList.C:52
 testAliHLTReadoutList.C:53
 testAliHLTReadoutList.C:54
 testAliHLTReadoutList.C:55
 testAliHLTReadoutList.C:56
 testAliHLTReadoutList.C:57
 testAliHLTReadoutList.C:58
 testAliHLTReadoutList.C:59
 testAliHLTReadoutList.C:60
 testAliHLTReadoutList.C:61
 testAliHLTReadoutList.C:62
 testAliHLTReadoutList.C:63
 testAliHLTReadoutList.C:64
 testAliHLTReadoutList.C:65
 testAliHLTReadoutList.C:66
 testAliHLTReadoutList.C:67
 testAliHLTReadoutList.C:68
 testAliHLTReadoutList.C:69
 testAliHLTReadoutList.C:70
 testAliHLTReadoutList.C:71
 testAliHLTReadoutList.C:72
 testAliHLTReadoutList.C:73
 testAliHLTReadoutList.C:74
 testAliHLTReadoutList.C:75
 testAliHLTReadoutList.C:76
 testAliHLTReadoutList.C:77
 testAliHLTReadoutList.C:78
 testAliHLTReadoutList.C:79
 testAliHLTReadoutList.C:80
 testAliHLTReadoutList.C:81
 testAliHLTReadoutList.C:82
 testAliHLTReadoutList.C:83
 testAliHLTReadoutList.C:84
 testAliHLTReadoutList.C:85
 testAliHLTReadoutList.C:86
 testAliHLTReadoutList.C:87
 testAliHLTReadoutList.C:88
 testAliHLTReadoutList.C:89
 testAliHLTReadoutList.C:90
 testAliHLTReadoutList.C:91
 testAliHLTReadoutList.C:92
 testAliHLTReadoutList.C:93
 testAliHLTReadoutList.C:94
 testAliHLTReadoutList.C:95
 testAliHLTReadoutList.C:96
 testAliHLTReadoutList.C:97
 testAliHLTReadoutList.C:98
 testAliHLTReadoutList.C:99
 testAliHLTReadoutList.C:100
 testAliHLTReadoutList.C:101
 testAliHLTReadoutList.C:102
 testAliHLTReadoutList.C:103
 testAliHLTReadoutList.C:104
 testAliHLTReadoutList.C:105
 testAliHLTReadoutList.C:106
 testAliHLTReadoutList.C:107
 testAliHLTReadoutList.C:108
 testAliHLTReadoutList.C:109
 testAliHLTReadoutList.C:110
 testAliHLTReadoutList.C:111
 testAliHLTReadoutList.C:112
 testAliHLTReadoutList.C:113
 testAliHLTReadoutList.C:114
 testAliHLTReadoutList.C:115
 testAliHLTReadoutList.C:116
 testAliHLTReadoutList.C:117
 testAliHLTReadoutList.C:118
 testAliHLTReadoutList.C:119
 testAliHLTReadoutList.C:120
 testAliHLTReadoutList.C:121
 testAliHLTReadoutList.C:122
 testAliHLTReadoutList.C:123
 testAliHLTReadoutList.C:124
 testAliHLTReadoutList.C:125
 testAliHLTReadoutList.C:126
 testAliHLTReadoutList.C:127
 testAliHLTReadoutList.C:128
 testAliHLTReadoutList.C:129
 testAliHLTReadoutList.C:130
 testAliHLTReadoutList.C:131
 testAliHLTReadoutList.C:132
 testAliHLTReadoutList.C:133
 testAliHLTReadoutList.C:134
 testAliHLTReadoutList.C:135
 testAliHLTReadoutList.C:136
 testAliHLTReadoutList.C:137
 testAliHLTReadoutList.C:138
 testAliHLTReadoutList.C:139
 testAliHLTReadoutList.C:140
 testAliHLTReadoutList.C:141
 testAliHLTReadoutList.C:142
 testAliHLTReadoutList.C:143
 testAliHLTReadoutList.C:144
 testAliHLTReadoutList.C:145
 testAliHLTReadoutList.C:146
 testAliHLTReadoutList.C:147
 testAliHLTReadoutList.C:148
 testAliHLTReadoutList.C:149
 testAliHLTReadoutList.C:150
 testAliHLTReadoutList.C:151
 testAliHLTReadoutList.C:152
 testAliHLTReadoutList.C:153
 testAliHLTReadoutList.C:154
 testAliHLTReadoutList.C:155
 testAliHLTReadoutList.C:156
 testAliHLTReadoutList.C:157
 testAliHLTReadoutList.C:158
 testAliHLTReadoutList.C:159
 testAliHLTReadoutList.C:160
 testAliHLTReadoutList.C:161
 testAliHLTReadoutList.C:162
 testAliHLTReadoutList.C:163
 testAliHLTReadoutList.C:164
 testAliHLTReadoutList.C:165
 testAliHLTReadoutList.C:166
 testAliHLTReadoutList.C:167
 testAliHLTReadoutList.C:168
 testAliHLTReadoutList.C:169
 testAliHLTReadoutList.C:170
 testAliHLTReadoutList.C:171
 testAliHLTReadoutList.C:172
 testAliHLTReadoutList.C:173
 testAliHLTReadoutList.C:174
 testAliHLTReadoutList.C:175
 testAliHLTReadoutList.C:176
 testAliHLTReadoutList.C:177
 testAliHLTReadoutList.C:178
 testAliHLTReadoutList.C:179
 testAliHLTReadoutList.C:180
 testAliHLTReadoutList.C:181
 testAliHLTReadoutList.C:182
 testAliHLTReadoutList.C:183
 testAliHLTReadoutList.C:184
 testAliHLTReadoutList.C:185
 testAliHLTReadoutList.C:186
 testAliHLTReadoutList.C:187
 testAliHLTReadoutList.C:188
 testAliHLTReadoutList.C:189
 testAliHLTReadoutList.C:190
 testAliHLTReadoutList.C:191
 testAliHLTReadoutList.C:192
 testAliHLTReadoutList.C:193
 testAliHLTReadoutList.C:194
 testAliHLTReadoutList.C:195
 testAliHLTReadoutList.C:196
 testAliHLTReadoutList.C:197
 testAliHLTReadoutList.C:198
 testAliHLTReadoutList.C:199
 testAliHLTReadoutList.C:200
 testAliHLTReadoutList.C:201
 testAliHLTReadoutList.C:202
 testAliHLTReadoutList.C:203
 testAliHLTReadoutList.C:204
 testAliHLTReadoutList.C:205
 testAliHLTReadoutList.C:206
 testAliHLTReadoutList.C:207
 testAliHLTReadoutList.C:208
 testAliHLTReadoutList.C:209
 testAliHLTReadoutList.C:210
 testAliHLTReadoutList.C:211
 testAliHLTReadoutList.C:212
 testAliHLTReadoutList.C:213
 testAliHLTReadoutList.C:214
 testAliHLTReadoutList.C:215
 testAliHLTReadoutList.C:216
 testAliHLTReadoutList.C:217
 testAliHLTReadoutList.C:218
 testAliHLTReadoutList.C:219
 testAliHLTReadoutList.C:220
 testAliHLTReadoutList.C:221
 testAliHLTReadoutList.C:222
 testAliHLTReadoutList.C:223
 testAliHLTReadoutList.C:224
 testAliHLTReadoutList.C:225
 testAliHLTReadoutList.C:226
 testAliHLTReadoutList.C:227
 testAliHLTReadoutList.C:228
 testAliHLTReadoutList.C:229
 testAliHLTReadoutList.C:230
 testAliHLTReadoutList.C:231
 testAliHLTReadoutList.C:232
 testAliHLTReadoutList.C:233
 testAliHLTReadoutList.C:234
 testAliHLTReadoutList.C:235
 testAliHLTReadoutList.C:236
 testAliHLTReadoutList.C:237
 testAliHLTReadoutList.C:238
 testAliHLTReadoutList.C:239
 testAliHLTReadoutList.C:240
 testAliHLTReadoutList.C:241
 testAliHLTReadoutList.C:242
 testAliHLTReadoutList.C:243
 testAliHLTReadoutList.C:244
 testAliHLTReadoutList.C:245
 testAliHLTReadoutList.C:246
 testAliHLTReadoutList.C:247
 testAliHLTReadoutList.C:248
 testAliHLTReadoutList.C:249
 testAliHLTReadoutList.C:250
 testAliHLTReadoutList.C:251
 testAliHLTReadoutList.C:252
 testAliHLTReadoutList.C:253
 testAliHLTReadoutList.C:254
 testAliHLTReadoutList.C:255
 testAliHLTReadoutList.C:256
 testAliHLTReadoutList.C:257
 testAliHLTReadoutList.C:258
 testAliHLTReadoutList.C:259
 testAliHLTReadoutList.C:260
 testAliHLTReadoutList.C:261
 testAliHLTReadoutList.C:262
 testAliHLTReadoutList.C:263
 testAliHLTReadoutList.C:264
 testAliHLTReadoutList.C:265
 testAliHLTReadoutList.C:266
 testAliHLTReadoutList.C:267
 testAliHLTReadoutList.C:268
 testAliHLTReadoutList.C:269
 testAliHLTReadoutList.C:270
 testAliHLTReadoutList.C:271
 testAliHLTReadoutList.C:272
 testAliHLTReadoutList.C:273
 testAliHLTReadoutList.C:274
 testAliHLTReadoutList.C:275
 testAliHLTReadoutList.C:276
 testAliHLTReadoutList.C:277
 testAliHLTReadoutList.C:278
 testAliHLTReadoutList.C:279
 testAliHLTReadoutList.C:280
 testAliHLTReadoutList.C:281
 testAliHLTReadoutList.C:282
 testAliHLTReadoutList.C:283
 testAliHLTReadoutList.C:284
 testAliHLTReadoutList.C:285
 testAliHLTReadoutList.C:286
 testAliHLTReadoutList.C:287
 testAliHLTReadoutList.C:288
 testAliHLTReadoutList.C:289
 testAliHLTReadoutList.C:290
 testAliHLTReadoutList.C:291
 testAliHLTReadoutList.C:292
 testAliHLTReadoutList.C:293
 testAliHLTReadoutList.C:294
 testAliHLTReadoutList.C:295
 testAliHLTReadoutList.C:296
 testAliHLTReadoutList.C:297
 testAliHLTReadoutList.C:298
 testAliHLTReadoutList.C:299
 testAliHLTReadoutList.C:300
 testAliHLTReadoutList.C:301
 testAliHLTReadoutList.C:302
 testAliHLTReadoutList.C:303
 testAliHLTReadoutList.C:304
 testAliHLTReadoutList.C:305
 testAliHLTReadoutList.C:306
 testAliHLTReadoutList.C:307
 testAliHLTReadoutList.C:308
 testAliHLTReadoutList.C:309
 testAliHLTReadoutList.C:310
 testAliHLTReadoutList.C:311
 testAliHLTReadoutList.C:312
 testAliHLTReadoutList.C:313
 testAliHLTReadoutList.C:314
 testAliHLTReadoutList.C:315
 testAliHLTReadoutList.C:316
 testAliHLTReadoutList.C:317
 testAliHLTReadoutList.C:318
 testAliHLTReadoutList.C:319
 testAliHLTReadoutList.C:320
 testAliHLTReadoutList.C:321
 testAliHLTReadoutList.C:322
 testAliHLTReadoutList.C:323
 testAliHLTReadoutList.C:324
 testAliHLTReadoutList.C:325
 testAliHLTReadoutList.C:326
 testAliHLTReadoutList.C:327
 testAliHLTReadoutList.C:328
 testAliHLTReadoutList.C:329
 testAliHLTReadoutList.C:330
 testAliHLTReadoutList.C:331
 testAliHLTReadoutList.C:332
 testAliHLTReadoutList.C:333
 testAliHLTReadoutList.C:334
 testAliHLTReadoutList.C:335
 testAliHLTReadoutList.C:336
 testAliHLTReadoutList.C:337
 testAliHLTReadoutList.C:338
 testAliHLTReadoutList.C:339
 testAliHLTReadoutList.C:340
 testAliHLTReadoutList.C:341
 testAliHLTReadoutList.C:342
 testAliHLTReadoutList.C:343
 testAliHLTReadoutList.C:344
 testAliHLTReadoutList.C:345
 testAliHLTReadoutList.C:346
 testAliHLTReadoutList.C:347
 testAliHLTReadoutList.C:348
 testAliHLTReadoutList.C:349
 testAliHLTReadoutList.C:350
 testAliHLTReadoutList.C:351
 testAliHLTReadoutList.C:352
 testAliHLTReadoutList.C:353
 testAliHLTReadoutList.C:354
 testAliHLTReadoutList.C:355
 testAliHLTReadoutList.C:356
 testAliHLTReadoutList.C:357
 testAliHLTReadoutList.C:358
 testAliHLTReadoutList.C:359
 testAliHLTReadoutList.C:360
 testAliHLTReadoutList.C:361
 testAliHLTReadoutList.C:362
 testAliHLTReadoutList.C:363
 testAliHLTReadoutList.C:364
 testAliHLTReadoutList.C:365
 testAliHLTReadoutList.C:366
 testAliHLTReadoutList.C:367
 testAliHLTReadoutList.C:368
 testAliHLTReadoutList.C:369
 testAliHLTReadoutList.C:370
 testAliHLTReadoutList.C:371
 testAliHLTReadoutList.C:372
 testAliHLTReadoutList.C:373
 testAliHLTReadoutList.C:374
 testAliHLTReadoutList.C:375
 testAliHLTReadoutList.C:376
 testAliHLTReadoutList.C:377
 testAliHLTReadoutList.C:378
 testAliHLTReadoutList.C:379
 testAliHLTReadoutList.C:380
 testAliHLTReadoutList.C:381
 testAliHLTReadoutList.C:382
 testAliHLTReadoutList.C:383
 testAliHLTReadoutList.C:384
 testAliHLTReadoutList.C:385
 testAliHLTReadoutList.C:386
 testAliHLTReadoutList.C:387
 testAliHLTReadoutList.C:388
 testAliHLTReadoutList.C:389
 testAliHLTReadoutList.C:390
 testAliHLTReadoutList.C:391
 testAliHLTReadoutList.C:392
 testAliHLTReadoutList.C:393
 testAliHLTReadoutList.C:394
 testAliHLTReadoutList.C:395
 testAliHLTReadoutList.C:396
 testAliHLTReadoutList.C:397
 testAliHLTReadoutList.C:398
 testAliHLTReadoutList.C:399
 testAliHLTReadoutList.C:400
 testAliHLTReadoutList.C:401
 testAliHLTReadoutList.C:402
 testAliHLTReadoutList.C:403
 testAliHLTReadoutList.C:404
 testAliHLTReadoutList.C:405
 testAliHLTReadoutList.C:406
 testAliHLTReadoutList.C:407
 testAliHLTReadoutList.C:408
 testAliHLTReadoutList.C:409
 testAliHLTReadoutList.C:410
 testAliHLTReadoutList.C:411
 testAliHLTReadoutList.C:412
 testAliHLTReadoutList.C:413
 testAliHLTReadoutList.C:414
 testAliHLTReadoutList.C:415
 testAliHLTReadoutList.C:416
 testAliHLTReadoutList.C:417
 testAliHLTReadoutList.C:418
 testAliHLTReadoutList.C:419
 testAliHLTReadoutList.C:420
 testAliHLTReadoutList.C:421
 testAliHLTReadoutList.C:422
 testAliHLTReadoutList.C:423
 testAliHLTReadoutList.C:424
 testAliHLTReadoutList.C:425
 testAliHLTReadoutList.C:426
 testAliHLTReadoutList.C:427
 testAliHLTReadoutList.C:428
 testAliHLTReadoutList.C:429
 testAliHLTReadoutList.C:430
 testAliHLTReadoutList.C:431
 testAliHLTReadoutList.C:432
 testAliHLTReadoutList.C:433
 testAliHLTReadoutList.C:434
 testAliHLTReadoutList.C:435
 testAliHLTReadoutList.C:436
 testAliHLTReadoutList.C:437
 testAliHLTReadoutList.C:438
 testAliHLTReadoutList.C:439
 testAliHLTReadoutList.C:440
 testAliHLTReadoutList.C:441
 testAliHLTReadoutList.C:442
 testAliHLTReadoutList.C:443
 testAliHLTReadoutList.C:444
 testAliHLTReadoutList.C:445
 testAliHLTReadoutList.C:446
 testAliHLTReadoutList.C:447
 testAliHLTReadoutList.C:448
 testAliHLTReadoutList.C:449
 testAliHLTReadoutList.C:450
 testAliHLTReadoutList.C:451
 testAliHLTReadoutList.C:452
 testAliHLTReadoutList.C:453
 testAliHLTReadoutList.C:454
 testAliHLTReadoutList.C:455
 testAliHLTReadoutList.C:456
 testAliHLTReadoutList.C:457
 testAliHLTReadoutList.C:458
 testAliHLTReadoutList.C:459
 testAliHLTReadoutList.C:460
 testAliHLTReadoutList.C:461
 testAliHLTReadoutList.C:462
 testAliHLTReadoutList.C:463
 testAliHLTReadoutList.C:464
 testAliHLTReadoutList.C:465
 testAliHLTReadoutList.C:466
 testAliHLTReadoutList.C:467
 testAliHLTReadoutList.C:468
 testAliHLTReadoutList.C:469
 testAliHLTReadoutList.C:470
 testAliHLTReadoutList.C:471
 testAliHLTReadoutList.C:472
 testAliHLTReadoutList.C:473
 testAliHLTReadoutList.C:474
 testAliHLTReadoutList.C:475
 testAliHLTReadoutList.C:476
 testAliHLTReadoutList.C:477
 testAliHLTReadoutList.C:478
 testAliHLTReadoutList.C:479
 testAliHLTReadoutList.C:480
 testAliHLTReadoutList.C:481
 testAliHLTReadoutList.C:482
 testAliHLTReadoutList.C:483
 testAliHLTReadoutList.C:484
 testAliHLTReadoutList.C:485
 testAliHLTReadoutList.C:486
 testAliHLTReadoutList.C:487
 testAliHLTReadoutList.C:488
 testAliHLTReadoutList.C:489
 testAliHLTReadoutList.C:490
 testAliHLTReadoutList.C:491
 testAliHLTReadoutList.C:492
 testAliHLTReadoutList.C:493
 testAliHLTReadoutList.C:494
 testAliHLTReadoutList.C:495
 testAliHLTReadoutList.C:496
 testAliHLTReadoutList.C:497
 testAliHLTReadoutList.C:498
 testAliHLTReadoutList.C:499
 testAliHLTReadoutList.C:500
 testAliHLTReadoutList.C:501
 testAliHLTReadoutList.C:502
 testAliHLTReadoutList.C:503
 testAliHLTReadoutList.C:504
 testAliHLTReadoutList.C:505
 testAliHLTReadoutList.C:506
 testAliHLTReadoutList.C:507
 testAliHLTReadoutList.C:508
 testAliHLTReadoutList.C:509
 testAliHLTReadoutList.C:510
 testAliHLTReadoutList.C:511
 testAliHLTReadoutList.C:512
 testAliHLTReadoutList.C:513
 testAliHLTReadoutList.C:514
 testAliHLTReadoutList.C:515
 testAliHLTReadoutList.C:516
 testAliHLTReadoutList.C:517
 testAliHLTReadoutList.C:518
 testAliHLTReadoutList.C:519
 testAliHLTReadoutList.C:520
 testAliHLTReadoutList.C:521
 testAliHLTReadoutList.C:522
 testAliHLTReadoutList.C:523
 testAliHLTReadoutList.C:524
 testAliHLTReadoutList.C:525
 testAliHLTReadoutList.C:526
 testAliHLTReadoutList.C:527
 testAliHLTReadoutList.C:528
 testAliHLTReadoutList.C:529
 testAliHLTReadoutList.C:530
 testAliHLTReadoutList.C:531
 testAliHLTReadoutList.C:532
 testAliHLTReadoutList.C:533
 testAliHLTReadoutList.C:534
 testAliHLTReadoutList.C:535