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.                  *
 **************************************************************************/

/*




Author: R. GUERNANE LPSC Grenoble CNRS/IN2P3
*/


#include "AliEMCALTriggerTRU.h"
#include "AliEMCALTriggerPatch.h"
#include "AliEMCALTriggerTRUDCSConfig.h"
#include "AliLog.h"

#include <TClonesArray.h>
#include <TSystem.h>
#include <Riostream.h>
#include <TFile.h>
#include <TROOT.h>

namespace
{
	const Int_t kTimeBins       = 16; // number of sampling bins of the FastOR signal
	const Int_t kTimeWindowSize =  4; // 
}

using std::ofstream;
using std::endl;
using std::ios_base;
ClassImp(AliEMCALTriggerTRU)

//________________
AliEMCALTriggerTRU::AliEMCALTriggerTRU() : AliEMCALTriggerBoard(),
fDCSConfig(0x0),
fL0Time(0)
{
	// Ctor
	
	for (Int_t i=0;i<96;i++) for (Int_t j=0;j<256;j++) fADC[i][j] = 0;
}

//________________
AliEMCALTriggerTRU::AliEMCALTriggerTRU(AliEMCALTriggerTRUDCSConfig* dcsConf, const TVector2& rSize, Int_t mapType) : 
AliEMCALTriggerBoard(rSize),
fDCSConfig(dcsConf),
fL0Time(0)
{
	// Ctor
	
	for (Int_t i=0;i<96;i++) for (Int_t j=0;j<256;j++) fADC[i][j] = 0;
	
	TVector2 size;
	
	if (dcsConf->GetL0SEL() & 0x0001) // 4-by-4
	{
		size.Set( 1. , 1. );
		SetSubRegionSize( size );
		
		size.Set( 2. , 2. );
		SetPatchSize( size );
	}	
	else                              // 2-by-2
	{
		size.Set( 1. , 1. );
		SetSubRegionSize( size );
		
		size.Set( 1. , 1. );
		SetPatchSize( size );	
	}	
	
	for (Int_t ietam=0;ietam<24;ietam++)
	{
		for (Int_t iphim=0;iphim<4;iphim++)
		{
			// idx: 0..95 since iphim: 0..11 ietam: 0..23
			Int_t idx = ( !mapType ) ? ( 3 - iphim ) + ietam * 4 : iphim + (23 - ietam) * 4;	
	
			// Build a matrix used to get TRU digit id (ADC channel) from (eta,phi)|SM
			fMap[ietam][iphim] = idx; // [0..11][0..3] namely [eta][phi] in SM
		}
	}
}

//________________
AliEMCALTriggerTRU::~AliEMCALTriggerTRU()
{
	// Dtor
}

//________________
void AliEMCALTriggerTRU::ShowFastOR(Int_t iTimeWindow, Int_t iChannel)
{
	// Dump
	
	Int_t iChanF, iChanL;
	
	if (iChannel != -1) iChanF = iChanL = iChannel;
	else
	{
		iChanF =  0;
		iChanL = 95;
	}
	
	for (Int_t i=iChanF;i<iChanL+1;i++)
	{
		printf("\tChannel: %2d - ",i);
		for (Int_t j=0;j<60;j++) 
		{
			if (j == iTimeWindow)
				printf(" | %4d",fADC[i][j]);
			else if (j == iTimeWindow+kTimeWindowSize-1)
				printf(" %4d |",fADC[i][j]);
			else
				printf(" %4d",fADC[i][j]);
		}
		
		printf("\n");
	}
}

//________________
Int_t AliEMCALTriggerTRU::L0()
{
	// L0 algo depending on TRU fw version
	
	const Int_t xsize    = Int_t(fRegionSize->X());
	const Int_t ysize    = Int_t(fRegionSize->Y());

	Int_t asum = 0;
	for (Int_t j = 0; j < xsize; j++) {		
		for (Int_t k = 0; k < ysize; k++) {
			for (Int_t l = 0; l < kTimeBins; l++) {
				asum += fADC[fMap[j][k]][l];
			}
		}
	}	
	
	// TRU has no signal, return!
	if (!asum) {
		AliDebug(999,"=== TRU has no signal ===");
		return 0;
	}
	
	AliDebug(999,Form("=== TRU PF: %x",fDCSConfig->GetSELPF()));
 
	UInt_t ma = fDCSConfig->GetSELPF() & 0xffff;
	
  // Set default peak finder if null
  if (!ma) ma = 0x1e1f;
  
	int nb = ma & 0x7f;
	
	ma = (ma >> 8) & 0x7f;
	
	AliDebug(999,Form("=== TRU fw version %x ===",fDCSConfig->GetFw()));
    
  if (fDCSConfig->GetFw() < 0x4d) {
      return L0v0(nb, ma);
    } else {
      return L0v1(nb, ma);
    }
}

//________________
Int_t AliEMCALTriggerTRU::L0v0(int mask, int pattern)
{
	// L0 issuing condition is: (2x2 PF) AND (4x4 > thres)
	
	AliDebug(999,"=== Running TRU L0 algorithm version 0 ===");

	const Int_t xsize    = Int_t(fRegionSize->X());
	const Int_t ysize    = Int_t(fRegionSize->Y());

	Int_t **othr = new Int_t*[xsize];
	Int_t **patt = new Int_t*[xsize];	
	Int_t **buff = new Int_t*[xsize];	
	
	for (Int_t x = 0; x < xsize; x++) {
		othr[x] = new Int_t[ysize];
		patt[x] = new Int_t[ysize];
		buff[x] = new Int_t[ysize];
	}
	
	for (Int_t i = 0; i < xsize; i++) {
		for (Int_t j = 0; j < ysize; j++) {
			othr[i][j] = 0;	
			patt[i][j] = 0;
			buff[i][j] = 0;
		}
	}
			
	// Time sliding window algorithm
	for (int i = 0; i <= (kTimeBins - kTimeWindowSize); i++) 
	{
		AliDebug(999,Form("----------- Time window: %d\n",i));
		
		if (AliDebugLevel()) ShowFastOR(i, -1);
		
		for (int j = 0; j < xsize; j++) {		
			for (int k = 0; k < ysize; k++) {
				
//				if (
//					!(j % int(fSubRegionSize->X())) 
//					&& 
//					!(k % int(fSubRegionSize->Y())) 
//					&& 
//					(j + int(fPatchSize->X() * fSubRegionSize->X()) <= xsize)
//					&& 
//					(k + int(fPatchSize->Y() * fSubRegionSize->Y()) <= ysize)
//					) 
//				{
//					int sum = 0;
//					
//					for (int l = 0; l < int(fPatchSize->X() * fSubRegionSize->X()); l++) 
//						for (int m = 0; m < int(fPatchSize->Y() * fSubRegionSize->Y()); m++) sum += fRegion[j + l][k + m];
//					
//					if (sum > int(fDCSConfig->GetGTHRL0())) {
//						AliDebug(999,Form("----------- Patch (%2d,%2d) is over threshold\n", j, k));
//						othr[j][k] = sum;
//					}
//				}
				
				buff[j][k] = fRegion[j][k];
				
				fRegion[j][k] = 0;
				for (Int_t l = i; l < i + kTimeWindowSize; l++) fRegion[j][k] += fADC[fMap[j][k]][l];	
				
				if (fRegion[j][k] > buff[j][k]) {
					patt[j][k] |= 0x1;
				}
				
				if (patt[j][k]) AliDebug(999,Form("----------- (%2d,%2d) New: %d Old: %d patt: %x / pattern: %x / mask: %x", j, k, fRegion[j][k], buff[j][k], patt[j][k], pattern, mask));
			}
		}
		
		for (int j = 0; j <= int(fRegionSize->X() - fPatchSize->X() * fSubRegionSize->X()); j += int(fSubRegionSize->X())) {
			for (int k = 0; k <= int(fRegionSize->Y() - fPatchSize->Y() * fSubRegionSize->Y()); k += int(fSubRegionSize->Y())) {
				
//				if (!othr[j][k]) continue;
				int sizeX = int(fPatchSize->X() * fSubRegionSize->X());				
				int sizeY = int(fPatchSize->Y() * fSubRegionSize->Y());
				
				int foundPeak = 0;
				int sum       = 0;
				
				for (int l = 0; l < sizeX; l++) {
					for (int m = 0; m < sizeY; m++) {
						sum += fRegion[j + l][k + m];
						
						if ((patt[j + l][k + m] & mask) == pattern) foundPeak++;
					}
				}
				
				if (sum > int(fDCSConfig->GetGTHRL0())) othr[j][k] = sum;
		
				if (foundPeak && othr[j][k]) {
					
					new((*fPatches)[fPatches->GetEntriesFast()]) AliEMCALTriggerPatch(j, k, othr[j][k], i);
					
					AliEMCALTriggerPatch* p = (AliEMCALTriggerPatch*)fPatches->At(fPatches->GetEntriesFast() - 1);
					
					if (AliDebugLevel()) p->Print("");
					
					const Int_t psize =  sizeX * sizeY; // Number of FastOR in the patch
					
					Int_t* idx = new Int_t[psize];
					
					for (Int_t l = 0; l < sizeX; l++) 
					{
						for (Int_t m = 0; m < sizeY; m++) 
						{   
							Int_t index = l * sizeY + m;
							
							idx[index] = fMap[int(j * fSubRegionSize->X()) + l][int(k * fSubRegionSize->Y()) + m];
							
              if ((patt[j + l][k + m] & mask) == (pattern & mask)) {
//								cout << "setting peak at " << l << " " << m << endl;
								p->SetPeak(l, m, sizeX, sizeY);
							}
							
							if (AliDebugLevel() >= 999) ShowFastOR(i, idx[index]);
						}
					}
					
					delete [] idx;
				}
			}
		}
		
		if (fPatches->GetEntriesFast() && !fL0Time) {			
			// Stop the algo when at least one patch is found ( thres & max )
			fL0Time = i;

//			break;
		}
		
		for (int j = 0; j < xsize; j++) 	
			for (int k = 0; k < ysize; k++) patt[j][k] <<= 1;
	}
	
	for (Int_t x = 0; x < xsize; x++) {
		delete [] othr[x];
		delete [] patt[x];
		delete [] buff[x];
	}

	delete [] othr;
	delete [] patt;
	delete [] buff;

	return fPatches->GetEntriesFast();
}

//________________
Int_t AliEMCALTriggerTRU::L0v1(int mask, int pattern)
{
	// L0 issuing condition is: (4x4 PF) AND (4x4 > thres)
	
	AliDebug(999,"=== Running TRU L0 algorithm version 1 ===");
	
	const Int_t xsize    = Int_t(fRegionSize->X());
	const Int_t ysize    = Int_t(fRegionSize->Y());
		
	Int_t **othr = new Int_t*[xsize];
	Int_t **buff = new Int_t*[xsize];
	Int_t **patt = new Int_t*[xsize];
	
	for (Int_t i = 0; i < xsize; i++) {
		buff[i] = new Int_t[ysize];
		patt[i] = new Int_t[ysize];
		othr[i] = new Int_t[ysize];
	}
	
	for (Int_t i = 0; i < xsize; i++) for (Int_t j = 0; j < ysize; j++) {
		othr[i][j] = 0;
		patt[i][j] = 0;
		buff[i][j] = 0;
	}
	
	// Time sliding window algorithm
	for (Int_t i = 0; i <= (kTimeBins - kTimeWindowSize); i++) {
		
		AliDebug(999,Form("----------- Time window: %d\n",i));
		
		for (int j = 0; j < xsize; j++) {		
			for (int k = 0; k < ysize; k++) {
				
//				if (
//					!(j % int(fSubRegionSize->X())) 
//					&& 
//					!(k % int(fSubRegionSize->Y())) 
//					&& 
//					(j + int(fPatchSize->X() * fSubRegionSize->X()) <= xsize)
//					&& 
//					(k + int(fPatchSize->Y() * fSubRegionSize->Y()) <= ysize)
//					) 
//				{
//					int sum = 0;
//					
//					for (int l = 0; l < int(fPatchSize->X() * fSubRegionSize->X()); l++) 
//						for (int m = 0; m < int(fPatchSize->Y() * fSubRegionSize->Y()); m++) sum += fRegion[j + l][k + m];
//					
//					if (sum > buff[j][k]) patt[j][k] |= 0x1;
//					
//					AliDebug(999,Form("----------- Patch (%2d,%2d) has sum %d while its whole time pattern is %x\n", j, k, sum, patt[j][k]));
//					
//					buff[j][k] = sum;
//					
//					if (sum > int(fDCSConfig->GetGTHRL0())) {
//						AliDebug(999,Form("----------- Patch (%2d,%2d) is over threshold\n", j, k));
//						othr[j][k] = sum;
//					}
//				}
				
				fRegion[j][k] = 0;
				for (Int_t l = i; l < i + kTimeWindowSize; l++) fRegion[j][k] += fADC[fMap[j][k]][l];	
			}
		}
		
		for (int j = 0; j <= int(fRegionSize->X() - fPatchSize->X() * fSubRegionSize->X()); j += int(fSubRegionSize->X())) {
			for (int k = 0; k <= int(fRegionSize->Y() - fPatchSize->Y() * fSubRegionSize->Y()); k += int(fSubRegionSize->Y())) {
					
				int sum = 0;
				
				for (int l = 0; l < int(fPatchSize->X() * fSubRegionSize->X()); l++) 
					for (int m = 0; m < int(fPatchSize->Y() * fSubRegionSize->Y()); m++) sum += fRegion[j + l][k + m];
				
				if (sum > buff[j][k]) patt[j][k] |= 0x1;
				
				if (sum > int(fDCSConfig->GetGTHRL0())) {
					AliDebug(999,Form("----------- Patch (%2d,%2d) is over threshold\n", j, k));
					
					othr[j][k] = sum;
				}
				
				AliDebug(999,Form("----------- Patch (%2d,%2d) has sum %d while its whole time pattern is %x\n", j, k, sum, patt[j][k]));
				
				buff[j][k] = sum;
				
        if (othr[j][k] && ((patt[j][k] & mask) == (pattern & mask))) {
					
					new((*fPatches)[fPatches->GetEntriesFast()]) AliEMCALTriggerPatch(j, k, othr[j][k], i);
					
//					AliDebug(999,Form("=== New L0 patch at (%2d,%2d) time: %2d",j, k, i));
					
					int sizeX = int(fPatchSize->X() * fSubRegionSize->X());					
					int sizeY = int(fPatchSize->Y() * fSubRegionSize->Y());
					
					for (int xx = 0; xx < sizeX; xx++) {
						for (int yy = 0; yy < sizeY; yy++) {
							((AliEMCALTriggerPatch*)fPatches->At(fPatches->GetEntriesFast() - 1))->SetPeak(xx, yy, sizeX, sizeY);
						}
					}
					
					AliEMCALTriggerPatch* p = (AliEMCALTriggerPatch*)fPatches->At(fPatches->GetEntriesFast() - 1);
					
					if (AliDebugLevel()) p->Print("");
				}
			}
		}
		
		if (fPatches->GetEntriesFast() && !fL0Time) {
			fL0Time = i;
			
//			break;
		} 
		
		for (int j = 0; j < xsize; j++) 	
			for (int k = 0; k < ysize; k++) patt[j][k] <<= 1;
	}
	
	for (Int_t x = 0; x < xsize; x++) {
		delete [] othr[x];
		delete [] patt[x];
		delete [] buff[x];
	}
	
	delete [] othr;
	delete [] patt;
	delete [] buff;
	
	return fPatches->GetEntriesFast();
}

//________________
void AliEMCALTriggerTRU::SetADC( Int_t channel, Int_t bin, Int_t sig )
{
  //Set ADC value
  if (channel > 95 || bin > 255) {
    AliError("TRU has 96 ADC channels and 256 bins only!");
  }
  else{ 
	if (((fDCSConfig->GetMaskReg(int(channel / 16)) >> (channel % 16)) & 0x1) == 0) fADC[channel][bin] = sig;
  }
}

//________________
void AliEMCALTriggerTRU::GetL0Region(const int time, Int_t arr[][4])
{
	Int_t r0 = time - fDCSConfig->GetRLBKSTU();
	
	if (r0 < 0) 
	{
		AliError(Form("TRU buffer not accessible! time: %d rollback: %d", time, fDCSConfig->GetRLBKSTU()));
		return;
	}
	
	for (Int_t i = 0; i < fRegionSize->X(); i++) 
	{
		for (Int_t j = 0; j < fRegionSize->Y(); j++) 
		{
			for (Int_t k = r0; k < r0 + kTimeWindowSize; k++)
			{
				arr[i][j] += fADC[fMap[i][j]][k];
			}
		}
	}
}

//________________
void AliEMCALTriggerTRU::SaveRegionADC(Int_t iTRU, Int_t iEvent)
{
	// O for STU Hw
	//
	gSystem->Exec(Form("mkdir -p Event%d",iEvent));
	
	ofstream outfile(Form("Event%d/data_TRU%d.txt",iEvent,iTRU),ios_base::trunc);
	
	for (Int_t i=0;i<96;i++) 
	{
		Int_t ietam = 23 - i/4;
	
		Int_t iphim =  3 - i%4;
		
		outfile << fRegion[ietam][iphim] << endl;
	}

	outfile.close();
}

//________________
void AliEMCALTriggerTRU::Reset()
{
	// Reset
	
	fPatches->Delete();
	
	ZeroRegion();
	
	for (Int_t i=0;i<96;i++) for (Int_t j=0;j<256;j++) fADC[i][j] = 0;
}

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