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

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  Class to read the file coming from DCS containing the information        //
//  from LHC. Everything is stored in a TMap, where:                         //
//  Key   --> DP name, as passed by LHC                                      // 
//  value --> TObjArray of AliDCSArray objects                               //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <Riostream.h>
#include <time.h>

#include <TObjArray.h>
#include <TObjString.h>
#include <TObject.h>
#include <TString.h>
#include <TMap.h>
#include <TSystem.h>
#include <TError.h>

#include "AliDCSArray.h"
#include "AliLHCReader.h"
#include "AliLog.h"

using std::ifstream;
ClassImp(AliLHCReader)

//--------------------------------------------------------------------------
AliLHCReader::AliLHCReader():
	TObject(),
	fStartTime(0),
	fEndTime(0)
{
	// default ctor 
}

//--------------------------------------------------------------------------
AliLHCReader::~AliLHCReader()
{
	//
	// dtor 
	//
}

//--------------------------------------------------------------------------
TMap* AliLHCReader::ReadLHCDP(TString filename)
{
	//
	// reading the file with the inputs
	//
  gSystem->ExpandPathName(filename);
       	if( gSystem->AccessPathName( filename.Data() ) ) {
		AliError(Form( "file (%s) not found", filename.Data() ) );
		return NULL;
	}

	ifstream *file = new ifstream ( filename.Data() );
	if (!*file) {
		AliError(Form("Error opening file (%s) !",filename.Data()));
		file->close();
		delete file;
		return NULL;
	}
	TMap* mapLHC = new TMap();
	mapLHC->SetOwnerKeyValue();
	TString strLine;
	Int_t lhcEntries;
	Int_t nBlocks = 0;
	Int_t nline =0;
	while(strLine.ReadLine(*file)){
		nline++;
		AliDebug(3,Form("line n. = %d",nline));
		// tokenize the line with tabs
		//if (strLine.BeginsWith("=")) continue;
		//if (!strLine.CompareTo("END_OF_BLOCK")) {
		if (strLine.Contains("END_OF_BLOCK")) {
			AliDebug(2,"END_OF_BLOCK");
			nBlocks++;
			continue;
		}
		TObjArray* tokens = strLine.Tokenize("\t");
		Int_t ntokens = tokens->GetEntriesFast();
		//
		if ( strLine.Contains("LHC_ENTRIES ") ) {
		  // RS: special treatment for "LHC_ENTRIES N" record, which is space (and not tab) separated)
		  delete tokens;
		  tokens = strLine.Tokenize(" ");
		  ntokens = tokens->GetEntriesFast();
		}
		//
		AliDebug(3,Form("Number of tokens = %d",ntokens));
		if (ntokens == 2 && !(((TObjString*)tokens->At(0))->String()).CompareTo("LHC_ENTRIES")){
		  lhcEntries = (((TObjString*)tokens->At(1))->String()).Atoi();
		  AliInfo(Form("LHC entries = %d",lhcEntries));
		  AliDebug(3,Form("LHC entries = %d",lhcEntries)); 
		  delete tokens;
		  continue;
		}
		if (ntokens == 1 && !(((TObjString*)tokens->At(0))->String()).CompareTo("END_OF_DATA")){
			AliDebug(2,"End of file reached");
			delete tokens;
			break;
		}
		if (ntokens < 4){  
			AliInfo(Form("Wrong number of tokens --> # tokens = %d at line %d",ntokens,nline));
			// requiring at least the index of the DP, the DP name, the format, and the number of entries
			delete tokens;
			continue;
		}
		Int_t lhcDPindex = (((TObjString*)tokens->At(0))->String()).Atoi();
		AliDebug(2,Form("lhcDPindex = %d",lhcDPindex));
		TObjString* lhcDPname = (TObjString*)tokens->At(1);
		TString lhcDPtype = ((TObjString*)tokens->At(2))->String();
		AliDebug(2,Form("lhcDPname = %s",(lhcDPname->String()).Data()));
		AliDebug(2,Form("lhcDPtype = %s",lhcDPtype.Data()));
		TObjArray* typeTokens = lhcDPtype.Tokenize(":");
		if (typeTokens->GetEntriesFast() < 2 ){  
			// requiring the the type and the number of elements for each measurement
			AliError(Form("The format does not match the expected one, skipping the current line for DP = %s", lhcDPtype.Data()));
			delete typeTokens;
			delete tokens;
			continue;
		}
		TString type = ((TObjString*)typeTokens->At(0))->String();
		AliDebug(2,Form("type = %s",type.Data()));
      		Int_t nelements = (((TObjString*)typeTokens->At(1))->String()).Atoi();
		AliDebug(2,Form("nelements = %i",nelements));
		Int_t nentries = (((TObjString*)tokens->At(3))->String()).Atoi();
		AliDebug(2,Form("nentries = %i",nentries));
		Int_t nValuesPerEntry = nelements+1;
		Int_t nfixed = 4; // n. of fixed entries
		TObjArray* array;
		if (mapLHC->GetValue(lhcDPname)==0x0){
			array = new TObjArray();
			array->SetOwner(1);
			mapLHC->Add(new TObjString(lhcDPname->String()),array);			
		}
		else{
			array = (TObjArray*)mapLHC->GetValue(lhcDPname);
			AliDebug(2,Form("entry found! --> %p",array));
		}
					
		for (Int_t ientry=0; ientry< nentries; ientry ++){
			Int_t indextime = nfixed+nValuesPerEntry*ientry+nelements;
			TString strTimestamp = ((TObjString*)tokens->At(indextime))->String();
			Double_t timestamp = strTimestamp.Atof();
			AliDebug(2,Form("Timestamp in unix time = %f (s)",timestamp));
			if (fStartTime!=0 && fEndTime!=0 && (fStartTime > timestamp || fEndTime < timestamp)){
				// error in case the measurement is not within the data taking time interval
				AliError(Form("Timestamp for entry %d of DP %s not in [%d,%d]", ientry, lhcDPtype.Data(),fStartTime,fEndTime));
				continue;
			}
			if (type == "i"){
				Int_t* value = new Int_t[nelements];
				for (Int_t ielement=0; ielement<nelements; ielement++){
					value[ielement] = (((TObjString*)tokens->At(nfixed+ielement+ientry*nValuesPerEntry))->String()).Atoi();
					AliDebug(2,Form("Value at index %d = %d",nfixed+ielement+ientry*nValuesPerEntry,value[ielement]));
				}
				AliDCSArray* dcs = new AliDCSArray(nelements,value,timestamp);
				array->Add(dcs);
				delete[] value;
			}
			else if (type == "b"){
				Bool_t* value = new Bool_t[nelements];
				for (Int_t ielement=0; ielement<nelements; ielement++){
					value[ielement] = Bool_t((((TObjString*)tokens->At(nfixed+ielement+ientry*nValuesPerEntry))->String()).Atoi());
					AliDebug(2,Form("Value at index %d = %d",nfixed+ielement+ientry*nValuesPerEntry,Int_t(value[ielement])));
				}
				AliDCSArray* dcs = new AliDCSArray(nelements,value,timestamp);
				array->Add(dcs);
				delete[] value;
			}
			else if (type == "f"){ // the floats should be considered as doubles
				Double_t* value = new Double_t[nelements];
				for (Int_t ielement=0; ielement<nelements; ielement++){
					TString tempstr = (TString)(((TObjString*)tokens->At(nfixed+ielement+ientry*nValuesPerEntry))->String());
					value[ielement] = (((TObjString*)tokens->At(nfixed+ielement+ientry*nValuesPerEntry))->String()).Atof();
					AliDebug(2,Form("Value at index %d = %f from string %s",nfixed+ielement+ientry*nValuesPerEntry,value[ielement],tempstr.Data()));
				} 
				AliDCSArray* dcs = new AliDCSArray(nelements,value,timestamp);
				array->Add(dcs);
				delete[] value;
			} 
			else if (type == "s"){
				TObjArray* value = new TObjArray();
				value->SetOwner(1);
				for (Int_t ielement=0; ielement<nelements; ielement++){
				  TObjString* strobj = (new TObjString(((TObjString*)tokens->At(nfixed+ielement+ientry*nValuesPerEntry))->String()));
					AliDebug(2,Form("Value at index %d = %s",nfixed+ielement+ientry*nValuesPerEntry,(strobj->String()).Data()));
					value->Add(strobj);
				}
				AliDCSArray* dcs = new AliDCSArray(nelements,value,timestamp);
				array->Add(dcs);
				delete value;
			}
			else{
				AliError(Form("Non-expected type %s",type.Data()));
				delete typeTokens;
				delete tokens;	
				file->close();
				delete file;	
				return NULL;
			} 
		}
		delete typeTokens;
		delete tokens;
	}
	file->close();
	delete file;
	return mapLHC;
}

//--------------------------------------------------------------------------
TObjArray* AliLHCReader::ReadSingleLHCDP(TString filename, TString alias)
{
	//
	// reading the file with the inputs for the selected alias
	// returning the TObjArray containing the information only for the current alias
	//
  gSystem->ExpandPathName(filename);
       	if( gSystem->AccessPathName( filename.Data() ) ) {
		AliError(Form( "file (%s) not found", filename.Data() ) );
		return NULL;
	}

	TString selection = gSystem->GetFromPipe(Form("grep -P '^\\d+\\s+%s+\\s' %s",alias.Data(), filename.Data()));

	if (selection.Length() == 0) {
		AliError(Form("Alias %s not fouond in LHC Data file, returning a null pointer",alias.Data()));
		return NULL;
	}

	Int_t nline =0;

	TObjArray* tokenslines = selection.Tokenize("\n");
	Int_t ntokenslines = tokenslines->GetEntriesFast();
	AliDebug(3,Form("Number of tokenslines = %d",ntokenslines));

	TObjArray* array = new TObjArray(); // array to be returned
	array->SetOwner(1);

	for (Int_t iline=0; iline<ntokenslines; iline++){
		TString strLine = ((TObjString*)tokenslines->At(iline))->String();
		AliDebug(4,Form("***************** line = %s\n",strLine.Data()));
		TObjArray* tokens = strLine.Tokenize("\t");
		Int_t ntokens = tokens->GetEntriesFast();
		AliDebug(3,Form("Number of tokens = %d",ntokens));
		if (ntokens < 4){  
			AliInfo(Form("Wrong number of tokens --> # tokens = %d at line %d",ntokens,nline));
			// requiring at least the index of the DP, the DP name, the format, and the number of entries
			delete tokens;
			continue;
		}
		Int_t lhcDPindex = (((TObjString*)tokens->At(0))->String()).Atoi();
		AliDebug(2,Form("lhcDPindex = %d",lhcDPindex));
		TObjString* lhcDPname = (TObjString*)tokens->At(1);
		TString lhcDPtype = ((TObjString*)tokens->At(2))->String();
		AliDebug(2,Form("lhcDPname = %s",(lhcDPname->String()).Data()));
		AliDebug(2,Form("lhcDPtype = %s",lhcDPtype.Data()));
		TObjArray* typeTokens = lhcDPtype.Tokenize(":");
		if (typeTokens->GetEntriesFast() < 2 ){  
			// requiring the the type and the number of elements for each measurement
			AliError(Form("The format does not match the expected one, skipping the current line for DP = %s", lhcDPtype.Data()));
			delete typeTokens;
			delete tokens;
			continue;
		}
		TString type = ((TObjString*)typeTokens->At(0))->String();
		AliDebug(2,Form("type = %s",type.Data()));
      		Int_t nelements = (((TObjString*)typeTokens->At(1))->String()).Atoi();
		AliDebug(2,Form("nelements = %i",nelements));
		Int_t nentries = (((TObjString*)tokens->At(3))->String()).Atoi();
		AliDebug(2,Form("nentries = %i",nentries));
		Int_t nValuesPerEntry = nelements+1;
		Int_t nfixed = 4; // n. of fixed entries
		for (Int_t ientry=0; ientry< nentries; ientry ++){
			Int_t indextime = nfixed+nValuesPerEntry*ientry+nelements;
			TString strTimestamp = ((TObjString*)tokens->At(indextime))->String();
			Double_t timestamp = strTimestamp.Atof();
			AliDebug(2,Form("Timestamp in unix time = %f (s)",timestamp));
			if (fStartTime!=0 && fEndTime!=0 && (fStartTime > timestamp || fEndTime < timestamp)){
				// error in case the measurement is not within the data taking time interval
				AliError(Form("Timestamp for entry %d of DP %s not in [%d,%d]", ientry, lhcDPtype.Data(),fStartTime,fEndTime));
				continue;
			}
			if (type == "i"){
				Int_t* value = new Int_t[nelements];
				for (Int_t ielement=0; ielement<nelements; ielement++){
					value[ielement] = (((TObjString*)tokens->At(nfixed+ielement+ientry*nValuesPerEntry))->String()).Atoi();
					AliDebug(2,Form("Value at index %d = %d",nfixed+ielement+ientry*nValuesPerEntry,value[ielement]));
				}
				AliDCSArray* dcs = new AliDCSArray(nelements,value,timestamp);
				array->Add(dcs);
				delete[] value;
			}
			else if (type == "b"){
				Bool_t* value = new Bool_t[nelements];
				for (Int_t ielement=0; ielement<nelements; ielement++){
					value[ielement] = Bool_t((((TObjString*)tokens->At(nfixed+ielement+ientry*nValuesPerEntry))->String()).Atoi());
					AliDebug(2,Form("Value at index %d = %d",nfixed+ielement+ientry*nValuesPerEntry,Int_t(value[ielement])));
				}
				AliDCSArray* dcs = new AliDCSArray(nelements,value,timestamp);
				array->Add(dcs);
				delete[] value;
			}
			else if (type == "f"){ // the floats should be considered as doubles
				Double_t* value = new Double_t[nelements];
				for (Int_t ielement=0; ielement<nelements; ielement++){
					TString tempstr = (TString)(((TObjString*)tokens->At(nfixed+ielement+ientry*nValuesPerEntry))->String());
					value[ielement] = (((TObjString*)tokens->At(nfixed+ielement+ientry*nValuesPerEntry))->String()).Atof();
					AliDebug(2,Form("Value at index %d = %f from string %s",nfixed+ielement+ientry*nValuesPerEntry,value[ielement],tempstr.Data()));
				} 
				AliDCSArray* dcs = new AliDCSArray(nelements,value,timestamp);
				array->Add(dcs);
				delete[] value;
			} 
			else if (type == "s"){
				TObjArray* value = new TObjArray();
				value->SetOwner(1);
				for (Int_t ielement=0; ielement<nelements; ielement++){
				  TObjString* strobj = (new TObjString(((TObjString*)tokens->At(nfixed+ielement+ientry*nValuesPerEntry))->String()));
					AliDebug(2,Form("Value at index %d = %s",nfixed+ielement+ientry*nValuesPerEntry,(strobj->String()).Data()));
					value->Add(strobj);
				}
				AliDCSArray* dcs = new AliDCSArray(nelements,value,timestamp);
				array->Add(dcs);
				delete value;
			}
			else{
				AliError(Form("Non-expected type %s",type.Data()));
				delete typeTokens;
				delete tokens;	
				delete tokenslines;
				return NULL;
			} 
		}
		delete typeTokens;
		delete tokens;
	}
	delete tokenslines;
	return array;
}







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