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

/*
 
 
EMCal trigger electronics manager L0/L1
can handle both simulated digits and raw data
Author: R. GUERNANE LPSC Grenoble CNRS/IN2P3
*/

#include "AliEMCALTriggerElectronics.h"
#include "AliEMCALTriggerTRU.h"
#include "AliEMCALTriggerSTU.h"
#include "AliEMCALGeometry.h"
#include "AliRunLoader.h"
#include "AliEMCAL.h" 
#include "AliRun.h" 
#include "AliEMCALTriggerDCSConfig.h"
#include "AliEMCALTriggerData.h"
#include "AliEMCALDigit.h"
#include "AliCaloRawStreamV3.h"
#include "AliEMCALTriggerSTURawStream.h"
#include "AliEMCALDigit.h"
#include "AliEMCALTriggerRawDigit.h"
#include "AliEMCALTriggerPatch.h"
#include "AliEMCALTriggerSTUDCSConfig.h"

#include <TVector2.h>

namespace
{
	const Int_t kNTRU = 32; // TODO: kNTRU should be set to / replaced by  fGeometry->GetNTotalTRU() (total number of TRU for a given geom)  after adding 1 STU for DCAL
}

ClassImp(AliEMCALTriggerElectronics)

//__________________
AliEMCALTriggerElectronics::AliEMCALTriggerElectronics(const AliEMCALTriggerDCSConfig *dcsConf) : TObject(),
fTRU(new TClonesArray("AliEMCALTriggerTRU",32)),
fSTU(0x0),
fGeometry(0)
{
	// Ctor
	
	TVector2 rSize;
	
	rSize.Set( 24.,  4. );
	
	AliRunLoader *rl = AliRunLoader::Instance();
	if (rl->GetAliRun() && rl->GetAliRun()->GetDetector("EMCAL")) {
		AliEMCAL *emcal = dynamic_cast<AliEMCAL*>(rl->GetAliRun()->GetDetector("EMCAL"));
		if (emcal) fGeometry = emcal->GetGeometry();
	}
	
	if (!fGeometry) {		
		fGeometry =  AliEMCALGeometry::GetInstance(AliEMCALGeometry::GetDefaultGeometryName());
		AliError("Cannot access geometry, create a new default one!");
	}
	
	// 32 TRUs
	for (Int_t i = 0; i < kNTRU; i++) {
                if(i>=(fGeometry->GetNTotalTRU())) continue; //  i <= kNTRU < 62. Prevents fTRU to go out of bonds with EMCALFirstYEARV1 of EMCALCompleteV1 (NTRU<32) TODO: fix the logic
		AliEMCALTriggerTRUDCSConfig *truConf = dcsConf->GetTRUDCSConfig(fGeometry->GetOnlineIndexFromTRUIndex(i));
		if (truConf) new ((*fTRU)[i]) AliEMCALTriggerTRU(truConf, rSize, i % 2);
	}
	
	rSize.Set( 48., 64. );
	
	// 1 STU
	AliEMCALTriggerSTUDCSConfig* stuConf = dcsConf->GetSTUDCSConfig();
	fSTU = new AliEMCALTriggerSTU(stuConf, rSize);
	
	TString str = "map";
	for (Int_t i = 0; i < kNTRU; i++) {
		AliEMCALTriggerTRU *iTRU = static_cast<AliEMCALTriggerTRU*>(fTRU->At(i));
		if (!iTRU) continue;

		fSTU->Build(str,
					i,
					iTRU->Map(),
					iTRU->RegionSize() 
					);
	}
}

//________________
AliEMCALTriggerElectronics::~AliEMCALTriggerElectronics()
{
	// Dtor
	
	fTRU->Delete();
 	delete fSTU;
}

//__________________
void AliEMCALTriggerElectronics::Digits2Trigger(TClonesArray* digits, const Int_t V0M[], AliEMCALTriggerData* data)
{
	// Digits to trigger
	
	Int_t pos, px, py, id; 
	
	Int_t region[48][64], posMap[48][64];
	for (Int_t i = 0; i < 48; i++) for (Int_t j = 0; j < 64; j++) 
	{
		region[i][j] =  0;
		posMap[i][j] = -1;
	}
	
	for (Int_t i = 0; i < digits->GetEntriesFast(); i++)
	{
		AliEMCALTriggerRawDigit* digit = (AliEMCALTriggerRawDigit*)digits->At(i);
		
		id = digit->GetId();
		
		Int_t iTRU, iADC;
		
		Bool_t isOK1 = fGeometry->GetTRUFromAbsFastORIndex(id, iTRU, iADC);
		
		if (!isOK1) continue;

		for (Int_t j = 0; j < digit->GetNSamples(); j++)
		{
			Int_t time, amp;
			Bool_t isOK2 = digit->GetTimeSample(j, time, amp);
			
			if (isOK1 && isOK2 && amp) {
				AliDebug(999, Form("=== TRU# %2d ADC# %2d time# %2d signal %d ===", iTRU, iADC, time, amp));
  				if(iTRU>32) continue; // kNTRU < iTRU < 62. Prevents fTRU to go out of bonds with DCAL TODO: add STU for DCAL and fix the logic 
				AliEMCALTriggerTRU * etr = (static_cast<AliEMCALTriggerTRU*>(fTRU->At(iTRU)));
				if (etr) {
				  if (data->GetMode())
				    etr->SetADC(iADC, time, 4 * amp);
				  else
				    etr->SetADC(iADC, time,     amp);
				}
			}
		}
		
		if (fGeometry->GetPositionInEMCALFromAbsFastORIndex(id, px, py)) posMap[px][py] = i;
	}

	Int_t iL0 = 0;

	Int_t timeL0[kNTRU] = {0}, timeL0min = 999;
	
	for (Int_t i = 0; i < kNTRU; i++) 
	{
		AliEMCALTriggerTRU *iTRU = static_cast<AliEMCALTriggerTRU*>(fTRU->At(i));
		if (!iTRU) continue;
		
		AliDebug(999, Form("===========< TRU %2d >============", i));
		
		if (iTRU->L0()) // L0 recomputation: *ALWAYS* done from FALTRO
		{
			iL0++;
			
			timeL0[i] = iTRU->GetL0Time();
			
			if (!timeL0[i]) AliWarning(Form("TRU# %d has 0 trigger time",i));
			
			if (timeL0[i] < timeL0min) timeL0min = timeL0[i];
			
			data->SetL0Trigger(0, i, 1); // TRU# i has issued a L0
		}
		else
			data->SetL0Trigger(0, i, 0);
	}

	AliDebug(999, Form("=== %2d TRU (out of %2d) has issued a L0 / Min L0 time: %d", iL0, fTRU->GetEntriesFast(), timeL0min));
	
	AliEMCALTriggerRawDigit* dig = 0x0;
	
	if (iL0 && (!data->GetMode() || !fSTU->GetDCSConfig()->GetRawData())) 
	{
		// Update digits after L0 calculation
		for (Int_t i = 0; i < kNTRU; i++)
		{
			AliEMCALTriggerTRU *iTRU = static_cast<AliEMCALTriggerTRU*>(fTRU->At(i));
			if (!iTRU) continue;
			
			Int_t reg[24][4];
			for (int j = 0; j < 24; j++) for (int k = 0; k < 4; k++) reg[j][k] = 0;
					
			iTRU->GetL0Region(timeL0min, reg);
			
			for (int j = 0; j < iTRU->RegionSize()->X(); j++)
			{
				for (int k = 0; k < iTRU->RegionSize()->Y(); k++)
				{
					if (reg[j][k]
						&& 
						fGeometry->GetAbsFastORIndexFromPositionInTRU(i, j, k, id)
						&&
						fGeometry->GetPositionInEMCALFromAbsFastORIndex(id, px, py))
					{
						pos = posMap[px][py];
									
						if (pos == -1)
						{
							// Add a new digit
							posMap[px][py] = digits->GetEntriesFast();

							new((*digits)[digits->GetEntriesFast()]) AliEMCALTriggerRawDigit(id, 0x0, 0);
										
							dig = (AliEMCALTriggerRawDigit*)digits->At(digits->GetEntriesFast() - 1);							
						}
						else
						{
							dig = (AliEMCALTriggerRawDigit*)digits->At(pos);
						}
						
						// 14b to 12b STU time sums
						reg[j][k] >>= 2; 
						
						dig->SetL1TimeSum(reg[j][k]);
					}
				}
			}
		}
	}

	if (iL0 && !data->GetMode())
	{
		for (Int_t i = 0; i < kNTRU; i++)
		{
			AliEMCALTriggerTRU *iTRU = static_cast<AliEMCALTriggerTRU*>(fTRU->At(i));
			if (!iTRU) continue;
			
			AliDebug(999, Form("=== TRU# %2d found %d patches", i, (iTRU->Patches()).GetEntriesFast()));
			
			TIter next(&iTRU->Patches());
			while (AliEMCALTriggerPatch* p = (AliEMCALTriggerPatch*)next())
			{
				p->Position(px, py);
			
				// Local 2 Global
				if (fGeometry->GetAbsFastORIndexFromPositionInTRU(i, px, py, id) 
					&& 
					fGeometry->GetPositionInEMCALFromAbsFastORIndex(id, px, py)) p->SetPosition(px, py);
				
				if (AliDebugLevel()) p->Print("");
				
				Int_t peaks = p->Peaks();
								
				Int_t sizeX = (Int_t) ((iTRU->PatchSize())->X() * (iTRU->SubRegionSize())->X());
				Int_t sizeY = (Int_t) ((iTRU->PatchSize())->Y() * (iTRU->SubRegionSize())->Y());
					
				for (Int_t j = 0; j < sizeX * sizeY; j++)
				{
					if (peaks & (1 << j))
					{
						pos = posMap[px + j % sizeX][py + j / sizeX];
							
						if (pos == -1) {
							// Add a new digit
							posMap[px + j % sizeX][py + j / sizeX] = digits->GetEntriesFast();

							new((*digits)[digits->GetEntriesFast()]) AliEMCALTriggerRawDigit(id, 0x0, 0);
								
							dig = (AliEMCALTriggerRawDigit*)digits->At(digits->GetEntriesFast() - 1);							
						} else {
							dig = (AliEMCALTriggerRawDigit*)digits->At(pos);
						}
							
						dig->SetL0Time(p->Time());
					}
				}
					
				pos = posMap[px][py];
					
				if (pos == -1) {
					// Add a new digit
					posMap[px][py] = digits->GetEntriesFast();

					new((*digits)[digits->GetEntriesFast()]) AliEMCALTriggerRawDigit(id, 0x0, 0);
						
					dig = (AliEMCALTriggerRawDigit*)digits->At(digits->GetEntriesFast() - 1);
					
				}
				else
				{
					dig = (AliEMCALTriggerRawDigit*)digits->At(pos);
				}
					
				dig->SetTriggerBit(kL0, 0);
			}
		}
	}
	
	// Prepare STU for L1 calculation
	for (int i = 0; i < (fSTU->RegionSize())->X(); i++) {
		for (int j = 0; j < (fSTU->RegionSize())->Y(); j++) {
			
			pos = posMap[i][j];
		
			if (pos >= 0) {
				
				AliEMCALTriggerRawDigit *digit = (AliEMCALTriggerRawDigit*)digits->At(pos);
		
				if (digit->GetL1TimeSum() > -1) region[i][j] = digit->GetL1TimeSum();
			}
		}
	}
	
	AliDebug(999,"==================== STU  ====================");
	if (AliDebugLevel() >= 999) fSTU->Scan();
	AliDebug(999,"==============================================");
	
	fSTU->SetRegion(region);
	
	if (data->GetMode()) 
	{
		for (int ithr = 0; ithr < 2; ithr++) {
			AliDebug(999, Form(" THR %d / EGA %d / EJE %d", ithr, data->GetL1GammaThreshold(ithr), data->GetL1JetThreshold(ithr)));
							   
			fSTU->SetThreshold(kL1GammaHigh + ithr, data->GetL1GammaThreshold(ithr));
			fSTU->SetThreshold(kL1JetHigh + ithr, data->GetL1JetThreshold(  ithr));
		}
	}
	else
	{
		for (int ithr = 0; ithr < 2; ithr++) {
			//
			fSTU->ComputeThFromV0(kL1GammaHigh + ithr, V0M); 
			data->SetL1GammaThreshold(ithr, fSTU->GetThreshold(kL1GammaHigh + ithr));
			
			fSTU->ComputeThFromV0(kL1JetHigh + ithr,   V0M);
			data->SetL1JetThreshold(ithr, fSTU->GetThreshold(kL1JetHigh + ithr)  );
			
			AliDebug(999, Form("STU THR %d EGA %d EJE %d", ithr, fSTU->GetThreshold(kL1GammaHigh + ithr), fSTU->GetThreshold(kL1JetHigh + ithr)));
		}
	}

	for (int ithr = 0; ithr < 2; ithr++) {
		//
		fSTU->Reset();
		
		fSTU->L1(kL1GammaHigh + ithr);
		
		TIterator* nP = 0x0;
		
		nP = (fSTU->Patches()).MakeIterator();
		
		AliDebug(999, Form("=== STU found %d gamma patches", (fSTU->Patches()).GetEntriesFast()));
		
		while (AliEMCALTriggerPatch* p = (AliEMCALTriggerPatch*)nP->Next()) 
		{			
			p->Position(px, py);
			
			if (AliDebugLevel()) p->Print("");
			
			if (fGeometry->GetAbsFastORIndexFromPositionInEMCAL(px, py, id))
			{
				if (posMap[px][py] == -1)
				{
					posMap[px][py] = digits->GetEntriesFast();
					
					// Add a new digit
					new((*digits)[digits->GetEntriesFast()]) AliEMCALTriggerRawDigit(id, 0x0, 0);
					
					dig = (AliEMCALTriggerRawDigit*)digits->At(digits->GetEntriesFast() - 1);
				} 
				else
				{
					dig = (AliEMCALTriggerRawDigit*)digits->At(posMap[px][py]);								
				}
				
				if (AliDebugLevel()) dig->Print("");
				
				dig->SetTriggerBit(kL1GammaHigh + ithr, 0);
			}
		}
		
		fSTU->Reset();
		
		fSTU->L1(kL1JetHigh + ithr);
		
		nP = (fSTU->Patches()).MakeIterator();
		
		AliDebug(999, Form("=== STU found %d jet patches", (fSTU->Patches()).GetEntriesFast()));
		
		while (AliEMCALTriggerPatch* p = (AliEMCALTriggerPatch*)nP->Next()) 
		{			
			p->Position(px, py);
			
			if (AliDebugLevel()) p->Print("");
			
			if (fGeometry->GetAbsFastORIndexFromPositionInEMCAL(px, py, id))
			{
				if (posMap[px][py] == -1)
				{
					posMap[px][py] = digits->GetEntriesFast();
					
					// Add a new digit
					new((*digits)[digits->GetEntriesFast()]) AliEMCALTriggerRawDigit(id, 0x0, 0);
					
					dig = (AliEMCALTriggerRawDigit*)digits->At(digits->GetEntriesFast() - 1);
				} 
				else
				{
					dig = (AliEMCALTriggerRawDigit*)digits->At(posMap[px][py]);
				}
				
				if (AliDebugLevel()) dig->Print("");
				
				dig->SetTriggerBit(kL1JetHigh + ithr, 0);
			}
		}
	}
	
	// Now reset the electronics for a fresh start with next event
	Reset();
}

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