ROOT logo
// $Id$
/**************************************************************************
 * 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.                  *
 **************************************************************************/

///  @file   AliHLTScalars.cxx
///  @author Artur Szostak <artursz@iafrica.com>
///  @date   28 Sep 2010
///  @brief  Implementation of the HLT scalars class.
///
/// This implements the scalars class for the HLT, which is a collection of
/// named scalar values. Searching for a named scalar is optimised by using
/// using a hash map.

#include "AliHLTScalars.h"
#include "TString.h"
#include "AliHLTLogging.h" // HLT logging
#include "TClass.h" // for Class_Name macro for logging
#include "TIterator.h"
#include "Riostream.h"
#include <cassert>

ClassImp(AliHLTScalars);
ClassImp(AliHLTScalars::AliScalar);


AliHLTScalars::AliHLTScalars() :
	TObject(),
	fScalars(AliHLTScalars::AliScalar::Class(), 128),
	fMap(TCollection::kInitHashTableCapacity, 2)
{
	// Default constructor.
	
	fMap.SetOwner(kFALSE);
}


AliHLTScalars::AliHLTScalars(const AliHLTScalars& obj) :
	TObject(obj),
	fScalars(obj.fScalars),
	fMap(obj.fMap.GetSize(), obj.fMap.GetRehashLevel())
{
	// Copy constructor performs a deep copy.

	fMap.SetOwner(kFALSE);
	fMap.AddAll(&fScalars);
}


AliHLTScalars::AliHLTScalars(const TClass* cl, Int_t initSize) :
	TObject(),
	fScalars(cl, initSize),
	fMap(TCollection::kInitHashTableCapacity, 2)
{
	// Constructor to be able to specify a custom class for the fScalars TClonesArray object.

	fMap.SetOwner(kFALSE);
}


AliHLTScalars::~AliHLTScalars()
{
	// Default destructor.
	
	Clear();
}


AliHLTScalars::AliScalar* AliHLTScalars::NewScalar(UInt_t i, const char* name, const char* description, Double_t value)
{
	// Creates a new scalar object.
	
	return new (fScalars[i]) AliScalar(name, description, value);
}


const AliHLTScalars::AliScalar& AliHLTScalars::Sentinel() const
{
	// Returns an empty sentinel object.
	
	static AliHLTScalars::AliScalar sentinel;
	return sentinel;
}


bool AliHLTScalars::Add(AliScalar*& scalar, const char* name, const char* description, Double_t value)
{
	// Adds a new scalar (internal version).
	
	scalar = static_cast<AliScalar*>( fMap.FindObject(name) );
	bool exists = scalar != NULL;
	if (not exists)
	{
		scalar = NewScalar(fScalars.GetEntriesFast(), name, description, value);
		fMap.Add(scalar);
	}
	else
	{
		scalar->Value(value);
	}
	return exists;
}


bool AliHLTScalars::Add(const char* name, const char* description, Double_t value)
{
	// Adds a new scalar.

	AliScalar* scalar = NULL;
	return Add(scalar, name, description, value);
}


bool AliHLTScalars::Remove(const char* name)
{
	// Removes a scalar from the list.

	TNamed x(name, "");
	TObject* scalar = fMap.Remove(&x);
	bool existed = scalar != NULL;
	if (existed)
	{
		fScalars.Remove(scalar);
		fScalars.Compress();
	}
	return existed;
}


const AliHLTScalars::AliScalar& AliHLTScalars::GetScalar(const char* name) const
{
	// Fetch the named scalar object.

	const TObject* scalar = fMap.FindObject(name);
	if (scalar != NULL)
	{
		return *static_cast<const AliScalar*>(scalar);
	}
	else
	{
		return Sentinel();
	}
}


AliHLTScalars::AliScalar& AliHLTScalars::GetScalar(const char* name)
{
	// Fetch the named scalar object for editing.

	TObject* scalar = fMap.FindObject(name);
	if (scalar == NULL)
	{
		scalar = NewScalar(fScalars.GetEntriesFast(), name, "", 0);
		fMap.Add(scalar);
	}
	return *static_cast<AliScalar*>(scalar);
}


const AliHLTScalars::AliScalar& AliHLTScalars::GetScalarN(UInt_t n) const
{
	// Fetch the n'th scalar object.

	if (n < NumberOfScalars())
	{
		const TObject* scalar = fScalars.UncheckedAt(Int_t(n));
		return *static_cast<const AliScalar*>(scalar);
	}
	else
	{
		return Sentinel();
	}
}


AliHLTScalars::AliScalar& AliHLTScalars::GetScalarN(UInt_t n)
{
	// Fetch the n'th scalar object for editing.

	TObject* scalar = NULL;
	if (n < NumberOfScalars())
	{
		scalar = fScalars.UncheckedAt(Int_t(n));
	}
	else
	{
		// We have to create all missing scalars since there cannot
		// be gaps in the TClonesArray. This can cause segfaults during
		// ROOT I/O of the class otherwise.
		for (UInt_t i = NumberOfScalars(); i <= n; ++i)
		{
			// Make sure the the name of the scalar is not taken.
			// If it is then find an unused name.
			TString nameToUse = Form("Scalar%d", i);
			if (FindObject(nameToUse.Data()) != NULL)
			{
				UInt_t m = 0;
				do
				{
					nameToUse = Form("Scalar%d_%d", i, m++);
				}
				while (FindObject(nameToUse.Data()) != NULL);
			}
			scalar = NewScalar(i, nameToUse.Data(), "", 0);
			fMap.Add(scalar);
		}
	}
	return *static_cast<AliScalar*>(scalar);
}


void AliHLTScalars::Reset()
{
	// Sets all the scalar values to zero.
	
	for (Int_t i = 0; i < fScalars.GetEntriesFast(); ++i)
	{
		AliScalar* scalar = static_cast<AliScalar*>( fScalars.UncheckedAt(i) );
		scalar->Value(0);
	}
}


void AliHLTScalars::Clear(Option_t* option)
{
	// Clears the array of scalars.

	fMap.Clear();
	fScalars.Delete(option);
}


void AliHLTScalars::Copy(TObject& object) const
{
	// Performs a deep copy.
	
	if (object.IsA() != AliHLTScalars::Class())
	{
		AliHLTLogging log;
		log.LoggingVarargs(kHLTLogError, Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , "Cannot copy to an object of type '%s'.", object.ClassName());
		return;
	}
	AliHLTScalars* obj = static_cast<AliHLTScalars*>(&object);
	obj->operator = (*this);
}


void AliHLTScalars::Print(Option_t* option) const
{
	// Prints the HLT trigger scalars.

	TIter next(&fScalars);
	const AliScalar* scalar = NULL;

	TString opt = option;
	if (opt == "compact")
	{
		scalar = static_cast<const AliScalar*>(next());
		if (scalar != NULL) cout << scalar->Value();
		while ((scalar = static_cast<const AliScalar*>(next())) != NULL)
		{
			cout << ", " << scalar->Value();
		}
		cout << endl;
		return;
	}
	
	// Calculate the maximum field width required to keep things aligned.
	int fieldwidth = 0;
	while ((scalar = static_cast<const AliScalar*>(next())) != NULL)
	{
		int length = strlen(scalar->Name()) + strlen(scalar->Description()) + 3;
		if (length > fieldwidth) fieldwidth = length;
	}
	if (fieldwidth > 80) fieldwidth = 80;
	
	cout << "HLT scalars:" << endl;
	next.Reset();
	while ((scalar = static_cast<const AliScalar*>(next())) != NULL)
	{
		TString str = scalar->Description();
		str += " (";
		str += scalar->Name();
		str += ")";
		cout << setw(fieldwidth) << str.Data() << setw(0)
		     << " = " << scalar->Value() << setw(0)
		     << endl;
	}
	if (fScalars.GetEntriesFast() == 0) cout << "(none)" << endl;
}


AliHLTScalars& AliHLTScalars::operator = (const AliHLTScalars& obj)
{
	// Performs a deep copy.
	
	if (this == &obj) return *this;
	Clear();  // Remove existing scalars.
	TObject::operator = (obj);
	for (Int_t i = 0; i < obj.fScalars.GetEntriesFast(); ++i)
	{
		const AliScalar* x = static_cast<const AliScalar*>(obj.fScalars.UncheckedAt(i));
		new (fScalars[i]) AliScalar(*x);
	}
	fMap.AddAll(&fScalars);
	return *this;
}


Bool_t AliHLTScalars::IsEqual(const TObject *obj) const
{
	// Checks if two sets of scalar lists have the same scalars.

	assert(obj != NULL);
	if (obj->IsA()->GetBaseClass(AliHLTScalars::Class()) == NULL)
	{
		AliHLTLogging log;
		log.LoggingVarargs(kHLTLogError, Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , "Cannot compare object of type '%s'' with an object of type '%s'.",
			      this->ClassName(), obj->ClassName()
			);
		return kFALSE;
	}
	const AliHLTScalars* rhs = static_cast<const AliHLTScalars*>(obj);
	if (fScalars.GetEntriesFast() != rhs->fScalars.GetEntriesFast()) return kFALSE;
	TIter next(&fScalars);
	const AliScalar* scalar = NULL;
	while ((scalar = static_cast<const AliScalar*>(next())) != NULL)
	{
		if (rhs->fScalars.FindObject(scalar->Name()) == NULL) return kFALSE;
	}
	return kTRUE;
}


bool AliHLTScalars::operator == (const AliHLTScalars& obj) const
{
	// Compares two scalar lists to see that they have the same scalar values.

	if (fScalars.GetEntriesFast() != obj.fScalars.GetEntriesFast()) return false;
	TIter next(&fScalars);
	const AliScalar* a = NULL;
	while ((a = static_cast<const AliScalar*>(next())) != NULL)
	{
		const AliScalar* b = static_cast<const AliScalar*>(
				obj.fScalars.FindObject(a->Name())
			);
		if (b == NULL) return false;
		if (a->Value() != b->Value()) return false;
	}
	return true;
}


void AliHLTScalars::AliScalar::Copy(TObject& object) const
{
	// Performs a deep copy.
	
	if (object.IsA() != AliHLTScalars::AliScalar::Class())
	{
		AliHLTLogging log;
		log.LoggingVarargs(kHLTLogError, Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , "Cannot copy to an object of type '%s'.", object.ClassName());
		return;
	}
	AliHLTScalars::AliScalar* obj = static_cast<AliHLTScalars::AliScalar*>(&object);
	*obj = *this;
}
 AliHLTScalars.cxx:1
 AliHLTScalars.cxx:2
 AliHLTScalars.cxx:3
 AliHLTScalars.cxx:4
 AliHLTScalars.cxx:5
 AliHLTScalars.cxx:6
 AliHLTScalars.cxx:7
 AliHLTScalars.cxx:8
 AliHLTScalars.cxx:9
 AliHLTScalars.cxx:10
 AliHLTScalars.cxx:11
 AliHLTScalars.cxx:12
 AliHLTScalars.cxx:13
 AliHLTScalars.cxx:14
 AliHLTScalars.cxx:15
 AliHLTScalars.cxx:16
 AliHLTScalars.cxx:17
 AliHLTScalars.cxx:18
 AliHLTScalars.cxx:19
 AliHLTScalars.cxx:20
 AliHLTScalars.cxx:21
 AliHLTScalars.cxx:22
 AliHLTScalars.cxx:23
 AliHLTScalars.cxx:24
 AliHLTScalars.cxx:25
 AliHLTScalars.cxx:26
 AliHLTScalars.cxx:27
 AliHLTScalars.cxx:28
 AliHLTScalars.cxx:29
 AliHLTScalars.cxx:30
 AliHLTScalars.cxx:31
 AliHLTScalars.cxx:32
 AliHLTScalars.cxx:33
 AliHLTScalars.cxx:34
 AliHLTScalars.cxx:35
 AliHLTScalars.cxx:36
 AliHLTScalars.cxx:37
 AliHLTScalars.cxx:38
 AliHLTScalars.cxx:39
 AliHLTScalars.cxx:40
 AliHLTScalars.cxx:41
 AliHLTScalars.cxx:42
 AliHLTScalars.cxx:43
 AliHLTScalars.cxx:44
 AliHLTScalars.cxx:45
 AliHLTScalars.cxx:46
 AliHLTScalars.cxx:47
 AliHLTScalars.cxx:48
 AliHLTScalars.cxx:49
 AliHLTScalars.cxx:50
 AliHLTScalars.cxx:51
 AliHLTScalars.cxx:52
 AliHLTScalars.cxx:53
 AliHLTScalars.cxx:54
 AliHLTScalars.cxx:55
 AliHLTScalars.cxx:56
 AliHLTScalars.cxx:57
 AliHLTScalars.cxx:58
 AliHLTScalars.cxx:59
 AliHLTScalars.cxx:60
 AliHLTScalars.cxx:61
 AliHLTScalars.cxx:62
 AliHLTScalars.cxx:63
 AliHLTScalars.cxx:64
 AliHLTScalars.cxx:65
 AliHLTScalars.cxx:66
 AliHLTScalars.cxx:67
 AliHLTScalars.cxx:68
 AliHLTScalars.cxx:69
 AliHLTScalars.cxx:70
 AliHLTScalars.cxx:71
 AliHLTScalars.cxx:72
 AliHLTScalars.cxx:73
 AliHLTScalars.cxx:74
 AliHLTScalars.cxx:75
 AliHLTScalars.cxx:76
 AliHLTScalars.cxx:77
 AliHLTScalars.cxx:78
 AliHLTScalars.cxx:79
 AliHLTScalars.cxx:80
 AliHLTScalars.cxx:81
 AliHLTScalars.cxx:82
 AliHLTScalars.cxx:83
 AliHLTScalars.cxx:84
 AliHLTScalars.cxx:85
 AliHLTScalars.cxx:86
 AliHLTScalars.cxx:87
 AliHLTScalars.cxx:88
 AliHLTScalars.cxx:89
 AliHLTScalars.cxx:90
 AliHLTScalars.cxx:91
 AliHLTScalars.cxx:92
 AliHLTScalars.cxx:93
 AliHLTScalars.cxx:94
 AliHLTScalars.cxx:95
 AliHLTScalars.cxx:96
 AliHLTScalars.cxx:97
 AliHLTScalars.cxx:98
 AliHLTScalars.cxx:99
 AliHLTScalars.cxx:100
 AliHLTScalars.cxx:101
 AliHLTScalars.cxx:102
 AliHLTScalars.cxx:103
 AliHLTScalars.cxx:104
 AliHLTScalars.cxx:105
 AliHLTScalars.cxx:106
 AliHLTScalars.cxx:107
 AliHLTScalars.cxx:108
 AliHLTScalars.cxx:109
 AliHLTScalars.cxx:110
 AliHLTScalars.cxx:111
 AliHLTScalars.cxx:112
 AliHLTScalars.cxx:113
 AliHLTScalars.cxx:114
 AliHLTScalars.cxx:115
 AliHLTScalars.cxx:116
 AliHLTScalars.cxx:117
 AliHLTScalars.cxx:118
 AliHLTScalars.cxx:119
 AliHLTScalars.cxx:120
 AliHLTScalars.cxx:121
 AliHLTScalars.cxx:122
 AliHLTScalars.cxx:123
 AliHLTScalars.cxx:124
 AliHLTScalars.cxx:125
 AliHLTScalars.cxx:126
 AliHLTScalars.cxx:127
 AliHLTScalars.cxx:128
 AliHLTScalars.cxx:129
 AliHLTScalars.cxx:130
 AliHLTScalars.cxx:131
 AliHLTScalars.cxx:132
 AliHLTScalars.cxx:133
 AliHLTScalars.cxx:134
 AliHLTScalars.cxx:135
 AliHLTScalars.cxx:136
 AliHLTScalars.cxx:137
 AliHLTScalars.cxx:138
 AliHLTScalars.cxx:139
 AliHLTScalars.cxx:140
 AliHLTScalars.cxx:141
 AliHLTScalars.cxx:142
 AliHLTScalars.cxx:143
 AliHLTScalars.cxx:144
 AliHLTScalars.cxx:145
 AliHLTScalars.cxx:146
 AliHLTScalars.cxx:147
 AliHLTScalars.cxx:148
 AliHLTScalars.cxx:149
 AliHLTScalars.cxx:150
 AliHLTScalars.cxx:151
 AliHLTScalars.cxx:152
 AliHLTScalars.cxx:153
 AliHLTScalars.cxx:154
 AliHLTScalars.cxx:155
 AliHLTScalars.cxx:156
 AliHLTScalars.cxx:157
 AliHLTScalars.cxx:158
 AliHLTScalars.cxx:159
 AliHLTScalars.cxx:160
 AliHLTScalars.cxx:161
 AliHLTScalars.cxx:162
 AliHLTScalars.cxx:163
 AliHLTScalars.cxx:164
 AliHLTScalars.cxx:165
 AliHLTScalars.cxx:166
 AliHLTScalars.cxx:167
 AliHLTScalars.cxx:168
 AliHLTScalars.cxx:169
 AliHLTScalars.cxx:170
 AliHLTScalars.cxx:171
 AliHLTScalars.cxx:172
 AliHLTScalars.cxx:173
 AliHLTScalars.cxx:174
 AliHLTScalars.cxx:175
 AliHLTScalars.cxx:176
 AliHLTScalars.cxx:177
 AliHLTScalars.cxx:178
 AliHLTScalars.cxx:179
 AliHLTScalars.cxx:180
 AliHLTScalars.cxx:181
 AliHLTScalars.cxx:182
 AliHLTScalars.cxx:183
 AliHLTScalars.cxx:184
 AliHLTScalars.cxx:185
 AliHLTScalars.cxx:186
 AliHLTScalars.cxx:187
 AliHLTScalars.cxx:188
 AliHLTScalars.cxx:189
 AliHLTScalars.cxx:190
 AliHLTScalars.cxx:191
 AliHLTScalars.cxx:192
 AliHLTScalars.cxx:193
 AliHLTScalars.cxx:194
 AliHLTScalars.cxx:195
 AliHLTScalars.cxx:196
 AliHLTScalars.cxx:197
 AliHLTScalars.cxx:198
 AliHLTScalars.cxx:199
 AliHLTScalars.cxx:200
 AliHLTScalars.cxx:201
 AliHLTScalars.cxx:202
 AliHLTScalars.cxx:203
 AliHLTScalars.cxx:204
 AliHLTScalars.cxx:205
 AliHLTScalars.cxx:206
 AliHLTScalars.cxx:207
 AliHLTScalars.cxx:208
 AliHLTScalars.cxx:209
 AliHLTScalars.cxx:210
 AliHLTScalars.cxx:211
 AliHLTScalars.cxx:212
 AliHLTScalars.cxx:213
 AliHLTScalars.cxx:214
 AliHLTScalars.cxx:215
 AliHLTScalars.cxx:216
 AliHLTScalars.cxx:217
 AliHLTScalars.cxx:218
 AliHLTScalars.cxx:219
 AliHLTScalars.cxx:220
 AliHLTScalars.cxx:221
 AliHLTScalars.cxx:222
 AliHLTScalars.cxx:223
 AliHLTScalars.cxx:224
 AliHLTScalars.cxx:225
 AliHLTScalars.cxx:226
 AliHLTScalars.cxx:227
 AliHLTScalars.cxx:228
 AliHLTScalars.cxx:229
 AliHLTScalars.cxx:230
 AliHLTScalars.cxx:231
 AliHLTScalars.cxx:232
 AliHLTScalars.cxx:233
 AliHLTScalars.cxx:234
 AliHLTScalars.cxx:235
 AliHLTScalars.cxx:236
 AliHLTScalars.cxx:237
 AliHLTScalars.cxx:238
 AliHLTScalars.cxx:239
 AliHLTScalars.cxx:240
 AliHLTScalars.cxx:241
 AliHLTScalars.cxx:242
 AliHLTScalars.cxx:243
 AliHLTScalars.cxx:244
 AliHLTScalars.cxx:245
 AliHLTScalars.cxx:246
 AliHLTScalars.cxx:247
 AliHLTScalars.cxx:248
 AliHLTScalars.cxx:249
 AliHLTScalars.cxx:250
 AliHLTScalars.cxx:251
 AliHLTScalars.cxx:252
 AliHLTScalars.cxx:253
 AliHLTScalars.cxx:254
 AliHLTScalars.cxx:255
 AliHLTScalars.cxx:256
 AliHLTScalars.cxx:257
 AliHLTScalars.cxx:258
 AliHLTScalars.cxx:259
 AliHLTScalars.cxx:260
 AliHLTScalars.cxx:261
 AliHLTScalars.cxx:262
 AliHLTScalars.cxx:263
 AliHLTScalars.cxx:264
 AliHLTScalars.cxx:265
 AliHLTScalars.cxx:266
 AliHLTScalars.cxx:267
 AliHLTScalars.cxx:268
 AliHLTScalars.cxx:269
 AliHLTScalars.cxx:270
 AliHLTScalars.cxx:271
 AliHLTScalars.cxx:272
 AliHLTScalars.cxx:273
 AliHLTScalars.cxx:274
 AliHLTScalars.cxx:275
 AliHLTScalars.cxx:276
 AliHLTScalars.cxx:277
 AliHLTScalars.cxx:278
 AliHLTScalars.cxx:279
 AliHLTScalars.cxx:280
 AliHLTScalars.cxx:281
 AliHLTScalars.cxx:282
 AliHLTScalars.cxx:283
 AliHLTScalars.cxx:284
 AliHLTScalars.cxx:285
 AliHLTScalars.cxx:286
 AliHLTScalars.cxx:287
 AliHLTScalars.cxx:288
 AliHLTScalars.cxx:289
 AliHLTScalars.cxx:290
 AliHLTScalars.cxx:291
 AliHLTScalars.cxx:292
 AliHLTScalars.cxx:293
 AliHLTScalars.cxx:294
 AliHLTScalars.cxx:295
 AliHLTScalars.cxx:296
 AliHLTScalars.cxx:297
 AliHLTScalars.cxx:298
 AliHLTScalars.cxx:299
 AliHLTScalars.cxx:300
 AliHLTScalars.cxx:301
 AliHLTScalars.cxx:302
 AliHLTScalars.cxx:303
 AliHLTScalars.cxx:304
 AliHLTScalars.cxx:305
 AliHLTScalars.cxx:306
 AliHLTScalars.cxx:307
 AliHLTScalars.cxx:308
 AliHLTScalars.cxx:309
 AliHLTScalars.cxx:310
 AliHLTScalars.cxx:311
 AliHLTScalars.cxx:312
 AliHLTScalars.cxx:313
 AliHLTScalars.cxx:314
 AliHLTScalars.cxx:315
 AliHLTScalars.cxx:316
 AliHLTScalars.cxx:317
 AliHLTScalars.cxx:318
 AliHLTScalars.cxx:319
 AliHLTScalars.cxx:320
 AliHLTScalars.cxx:321
 AliHLTScalars.cxx:322
 AliHLTScalars.cxx:323
 AliHLTScalars.cxx:324
 AliHLTScalars.cxx:325
 AliHLTScalars.cxx:326
 AliHLTScalars.cxx:327
 AliHLTScalars.cxx:328
 AliHLTScalars.cxx:329
 AliHLTScalars.cxx:330
 AliHLTScalars.cxx:331
 AliHLTScalars.cxx:332
 AliHLTScalars.cxx:333
 AliHLTScalars.cxx:334
 AliHLTScalars.cxx:335
 AliHLTScalars.cxx:336
 AliHLTScalars.cxx:337
 AliHLTScalars.cxx:338
 AliHLTScalars.cxx:339
 AliHLTScalars.cxx:340
 AliHLTScalars.cxx:341
 AliHLTScalars.cxx:342
 AliHLTScalars.cxx:343
 AliHLTScalars.cxx:344
 AliHLTScalars.cxx:345
 AliHLTScalars.cxx:346
 AliHLTScalars.cxx:347
 AliHLTScalars.cxx:348
 AliHLTScalars.cxx:349
 AliHLTScalars.cxx:350
 AliHLTScalars.cxx:351
 AliHLTScalars.cxx:352
 AliHLTScalars.cxx:353
 AliHLTScalars.cxx:354
 AliHLTScalars.cxx:355
 AliHLTScalars.cxx:356
 AliHLTScalars.cxx:357
 AliHLTScalars.cxx:358
 AliHLTScalars.cxx:359
 AliHLTScalars.cxx:360
 AliHLTScalars.cxx:361
 AliHLTScalars.cxx:362
 AliHLTScalars.cxx:363
 AliHLTScalars.cxx:364
 AliHLTScalars.cxx:365
 AliHLTScalars.cxx:366
 AliHLTScalars.cxx:367
 AliHLTScalars.cxx:368
 AliHLTScalars.cxx:369
 AliHLTScalars.cxx:370
 AliHLTScalars.cxx:371
 AliHLTScalars.cxx:372
 AliHLTScalars.cxx:373
 AliHLTScalars.cxx:374
 AliHLTScalars.cxx:375
 AliHLTScalars.cxx:376
 AliHLTScalars.cxx:377
 AliHLTScalars.cxx:378