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

/* $Id$ */

//_________________________________________________________________________
//  EMCAL digit: 
//      A Digit is the sum of the energy lost in an EMCAL Tower
//      It also stores information on Primary, and enterring particle
//      tracknumbers Digits are created using AliEMCALSDigitizer, followed
//      by AliEMCALDigitizer 
//
//*-- Author: Sahal Yacoob (LBL)
// based on : AliPHOSDigit
//__________________________________________________________________________

// --- ROOT system ---
#include <Riostream.h>
#include <TMath.h>

// --- Standard library ---

// --- AliRoot header files ---

#include "AliEMCALDigit.h"
#include "AliEMCALGeometry.h"
#include "AliLog.h" 

using std::cout;
using std::endl;
ClassImp(AliEMCALDigit)

//____________________________________________________________________________
AliEMCALDigit::AliEMCALDigit() :  
AliDigitNew(), 
  fAmpFloat(0.),
  fNSamples(0),
  fSamples(0x0),
  fNSamplesHG(0),
  fSamplesHG(0x0),
  fNprimary(0),
  fNMaxPrimary(5),
  fPrimary(0x0),
  fDEPrimary(0x0),
  fNiparent(0),
  fNMaxiparent(5), 
  fIparent(0x0),
  fDEParent(0x0),
  fMaxIter(0),
  fTime(0.), 
  fTimeR(0.),
  fChi2(0.),
  fNDF(0),
  fDigitType(kUnknown),
  fAmpCalib(-1)
{
  // default ctor 

  // Need to initialise for reading old files
  fPrimary   = new Int_t[fNMaxPrimary] ;
  fDEPrimary = new Float_t[fNMaxPrimary] ;
  fIparent   = new Int_t[fNMaxiparent] ; 
  fDEParent  = new Float_t[fNMaxiparent] ; 
  for ( Int_t i = 0; i < fNMaxPrimary ; i++) {
    fPrimary[i]    = -1 ;
    fDEPrimary[i]  = 0 ;
  } 

  for ( Int_t i = 0; i < fNMaxiparent ; i++) {
    fIparent[i]  = -1 ;
    fDEParent[i] = 0 ;
  }
}

//____________________________________________________________________________
AliEMCALDigit::AliEMCALDigit(Int_t primary, Int_t iparent, Int_t id, Float_t digEnergy, Float_t time, Int_t type, Int_t index, Float_t chi2, Int_t ndf, Float_t dE) 
  : AliDigitNew(),
    fAmpFloat(digEnergy),
    fNSamples(0),
    fSamples(0x0),
    fNSamplesHG(0),
    fSamplesHG(0x0),
    fNprimary(0),
    fNMaxPrimary(25),
    fPrimary(0x0),
    fDEPrimary(0x0),
    fNiparent(0),
    fNMaxiparent(150),
    fIparent(0x0),
    fDEParent(0x0),
    fMaxIter(5),
    fTime(time),
    fTimeR(time),
    fChi2(chi2),
    fNDF(ndf),
    fDigitType(type),
    fAmpCalib(-1)
{  
  // ctor with all data 

  // data memebrs of the base class (AliNewDigit)
  fAmp         = 0;
  fId          = id ;
  fIndexInList = index ; 

  // data member  
  fPrimary   = new Int_t[fNMaxPrimary] ;
  fDEPrimary = new Float_t[fNMaxPrimary] ;
  fIparent   = new Int_t[fNMaxiparent] ; 
  fDEParent  = new Float_t[fNMaxiparent] ; 
  if( primary != -1){
    fNprimary    = 1 ; 
    fPrimary[0]  = primary ;  
    fDEPrimary[0] = dE ;  
    fNiparent   = 1 ;
    fIparent[0] = iparent ;    
    fDEParent[0] = dE ;  
  }
  else{  //If the contribution of this primary smaller than fDigitThreshold (AliEMCALv1)
    fNprimary    = 0 ; 
    fPrimary[0]  = -1 ;
    fDEPrimary[0]  = 0 ;
    fNiparent   = 0 ;
    fIparent[0] = -1 ;  
    fDEParent[0]  = 0 ;  
  }
  Int_t i ;
  for ( i = 1; i < fNMaxPrimary ; i++) {
    fPrimary[i]  = -1 ; 
    fDEPrimary[i]  = 0 ;
  } 

  for ( i = 1; i< fNMaxiparent ; i++) {
    fIparent[i] = -1 ;  
    fDEParent[i] = 0 ;
  }  
}

//____________________________________________________________________________
AliEMCALDigit::AliEMCALDigit(const AliEMCALDigit & digit) 
  : AliDigitNew(digit),
    fAmpFloat(digit.fAmpFloat),	
    fNSamples(digit.fNSamples),
    fSamples(),
    fNSamplesHG(digit.fNSamplesHG),
    fSamplesHG(),
    fNprimary(digit.fNprimary),
    fNMaxPrimary(digit.fNMaxPrimary),
    fPrimary(),
    fDEPrimary(),
    fNiparent(digit.fNiparent),
    fNMaxiparent(digit.fNMaxiparent),
    fIparent(),
    fDEParent(),
    fMaxIter(digit.fMaxIter),
    fTime(digit.fTime),
    fTimeR(digit.fTimeR), 
    fChi2(digit.fChi2), 
    fNDF(digit.fNDF),
    fDigitType(digit.fDigitType),
    fAmpCalib(digit.fAmpCalib)
{
  // copy ctor
  // data memebrs of the base class (AliNewDigit)
  fAmp         = digit.fAmp ;
  fId          = digit.fId;
  fIndexInList = digit.fIndexInList ; 

  // data members  
  if (fSamples )   delete [] fSamples ;   fSamples   = NULL ;
  if (fSamplesHG ) delete [] fSamplesHG ; fSamplesHG = NULL ;
  if (fPrimary  )  delete [] fPrimary ;   fPrimary   = NULL ;
  if (fDEPrimary)  delete [] fDEPrimary ; fDEPrimary = NULL ;
  if (fIparent )   delete [] fIparent ;   fIparent   = NULL ;
  if (fDEParent)   delete [] fDEParent ;  fDEParent  = NULL ;

  if (fNSamples){
    fSamples     = new Int_t[fNSamples]; 
    for (Int_t i=0; i < digit.fNSamples; i++) fSamples[i] = digit.fSamples[i];
  }
  
  if (fNSamplesHG){
    fSamplesHG   = new Int_t[fNSamplesHG]; 
    for (Int_t i=0; i < digit.fNSamplesHG; i++) fSamplesHG[i] = digit.fSamplesHG[i];
  }
  
 
  if (fNMaxPrimary){
    fPrimary   = new Int_t  [fNMaxPrimary] ;  
    fDEPrimary = new Float_t[fNMaxPrimary] ;
    for ( Int_t i = 0; i < fNMaxPrimary ; i++) {
      fPrimary[i]   = digit.fPrimary[i] ;
      fDEPrimary[i] = digit.fDEPrimary[i] ;
    }
  }
  
  if (fNMaxiparent){
    fIparent  = new Int_t  [fNMaxiparent] ;
    fDEParent = new Float_t[fNMaxiparent] ;
    for (Int_t j = 0; j< fNMaxiparent ; j++) {
    fIparent[j]  = digit.fIparent[j] ;
    fDEParent[j] = digit.fDEParent[j] ;
    }
  }  
 
}

//____________________________________________________________________________
AliEMCALDigit::~AliEMCALDigit() 
{
  // Delete array of primaries if any

  if (fSamples )   delete [] fSamples ;   fSamples   = NULL ;
  if (fSamplesHG ) delete [] fSamplesHG ; fSamplesHG = NULL ;
  if (fPrimary  )  delete [] fPrimary ;   fPrimary   = NULL ;
  if (fDEPrimary)  delete [] fDEPrimary ; fDEPrimary = NULL ;
  if (fIparent )   delete [] fIparent ;   fIparent   = NULL ;
  if (fDEParent)   delete [] fDEParent ;  fDEParent  = NULL ;

}


//____________________________________________________________________________
void AliEMCALDigit::Clear(const Option_t*) 
{
  // Delete array of primaries if any
  if (fSamples )   delete [] fSamples ;   fSamples   = NULL ;
  if (fSamplesHG ) delete [] fSamplesHG ; fSamplesHG = NULL ;
  if (fPrimary  )  delete [] fPrimary ;   fPrimary   = NULL ;
  if (fDEPrimary)  delete [] fDEPrimary ; fDEPrimary = NULL ;
  if (fIparent )   delete [] fIparent ;   fIparent   = NULL ;
  if (fDEParent)   delete [] fDEParent ;  fDEParent  = NULL ;

}

//____________________________________________________________________________
Int_t AliEMCALDigit::Compare(const TObject * obj) const
{
  // Compares two digits with respect to its Id
  // to sort according increasing Id

  Int_t rv = 2 ;

  AliEMCALDigit * digit = (AliEMCALDigit *)obj ; 

  Int_t iddiff = fId - digit->GetId() ; 

  if ( iddiff > 0 ) 
    rv = 1 ;
  else if ( iddiff < 0 )
    rv = -1 ; 
  else
    rv = 0 ;
  
  return rv ; 

}

//____________________________________________________________________________
Float_t AliEMCALDigit::GetEta() const
{ 
  //return pseudorapidity for this digit
  // should be change in EMCALGeometry - 19-nov-04
  Float_t eta=-10., phi=-10.;
  Int_t id = GetId();
  const AliEMCALGeometry *g = AliEMCALGeometry::GetInstance();
  g->EtaPhiFromIndex(id,eta,phi);
  return eta ;
}

//____________________________________________________________________________
Float_t AliEMCALDigit::GetPhi() const
{ 
  //return phi coordinate of digit
  // should be change in EMCALGeometry - 19-nov-04
  Float_t eta=-10., phi=-10.;
  Int_t id = GetId();
  const AliEMCALGeometry *g = AliEMCALGeometry::GetInstance();
  g->EtaPhiFromIndex(id,eta,phi);
  return phi ;
}

//____________________________________________________________________________
Bool_t AliEMCALDigit::GetFALTROSample(const Int_t iSample, Int_t& timeBin, Int_t& amp) const
{
	//Get FALTRO sample in time bin iSample
	if (iSample >= fNSamples || iSample < 0 || fDigitType==kTrigger) return kFALSE;
	
	amp     =  fSamples[iSample] & 0xFFF;
	timeBin = (fSamples[iSample] >> 12) & 0xFF;
	
	return kTRUE;
}
//____________________________________________________________________________
Bool_t AliEMCALDigit::GetALTROSampleLG(const Int_t iSample, Int_t& timeBin, Int_t& amp) const
{
	//Get Low Gain ALTRO sample in time bin iSample
	if (iSample >= fNSamples || iSample < 0 || fDigitType==kLG) return kFALSE;
	
	amp     =  fSamples[iSample] & 0xFFF;
	timeBin = (fSamples[iSample] >> 12) & 0xFF;
	
	return kTRUE;
}

//____________________________________________________________________________
void AliEMCALDigit::SetALTROSamplesLG(const Int_t nSamples, Int_t *samples)
{
    //Set array of ALTRO samples, Low Gain or FALTRO 
	fNSamples = nSamples;
	fSamples  = new Int_t[fNSamples]; 
	for (Int_t i=0; i < fNSamples; i++) fSamples[i] = samples[i];
}

//____________________________________________________________________________
void AliEMCALDigit::SetALTROSamplesHG(const Int_t nSamples, Int_t *samples)
{
	//Set array of ALTRO samples, High Gain.
	fNSamplesHG = nSamples;
	fSamplesHG  = new Int_t[fNSamplesHG]; 
	for (Int_t i=0; i < fNSamplesHG; i++) fSamplesHG[i] = samples[i];
}


//____________________________________________________________________________
Bool_t AliEMCALDigit::GetALTROSampleHG(const Int_t iSample, Int_t& timeBin, Int_t& amp) const
{
	//Get High Gain ALTRO sample in time bin iSample
	if (iSample >= fNSamplesHG || iSample < 0 || fDigitType==kHG) return kFALSE;
	
	amp     =  fSamplesHG[iSample] & 0xFFF;
	timeBin = (fSamplesHG[iSample] >> 12) & 0xFF;
	
	return kTRUE;
}


//____________________________________________________________________________
Int_t AliEMCALDigit::GetPrimary(Int_t index) const
{
  // retrieves the primary particle number given its index in the list 
  if ( (index <= fNprimary) && (index > 0)){
    return fPrimary[index-1] ;
  } 

  return -1 ; 
}

//____________________________________________________________________________
Float_t AliEMCALDigit::GetDEPrimary(Int_t index) const
{
  // retrieves the primary particle energy contribution 
  // given its index in the list 
  if ( (index <= fNprimary) && (index > 0)){
    return fDEPrimary[index-1] ;
  } 

  return 0 ; 
  
}

//____________________________________________________________________________
Int_t AliEMCALDigit::GetIparent(Int_t index) const
{
  // retrieves the primary particle number given its index in the list 
  if ( index <= fNiparent && index > 0){
    return fIparent[index-1] ;
  } 

  return -1 ; 
  
}

//____________________________________________________________________________
Float_t AliEMCALDigit::GetDEParent(Int_t index) const
{
  // retrieves the parent particle energy contribution 
  // given its index in the list 
  if ( (index <= fNiparent) && (index > 0)){
    return fDEParent[index-1] ;
  } 

  return 0; 
}

//____________________________________________________________________________
void AliEMCALDigit::ShiftPrimary(Int_t shift){
  //shifts primary number to BIG offset, to separate primary in different TreeK
  Int_t index  ;
  for(index = 0; index <fNprimary; index++ ){
    fPrimary[index] = fPrimary[index]+ shift * 10000000   ;}
  for(index =0; index <fNiparent; index++){
    fIparent[index] = fIparent[index] + shift * 10000000 ;}
}


//____________________________________________________________________________
AliEMCALDigit& AliEMCALDigit::operator= (const AliEMCALDigit &digit)
{
  // assignment operator
  
  if(&digit == this) return *this;
  
  fAmpFloat    = digit.fAmpFloat;	
  fNSamples    = digit.fNSamples;
  fNSamplesHG  = digit.fNSamplesHG;
  fNprimary    = digit.fNprimary;
  fNMaxPrimary = digit.fNMaxPrimary;
  fNiparent    = digit.fNiparent;
  fNMaxiparent = digit.fNMaxiparent;
  fMaxIter     = digit.fMaxIter;
  fTime        = digit.fTime;
  fTimeR       = digit.fTimeR; 
  fChi2        = digit.fChi2; 
  fNDF         = digit.fNDF;
  fDigitType   = digit.fDigitType;
  fAmpCalib    = digit.fAmpCalib;
  fAmp         = digit.fAmp ;
  fId          = digit.fId;
  fIndexInList = digit.fIndexInList ; 
  
  // data members  
  if (fSamples )   delete [] fSamples ;   fSamples   = NULL ;
  if (fSamplesHG ) delete [] fSamplesHG ; fSamplesHG = NULL ;
  if (fPrimary  )  delete [] fPrimary ;   fPrimary   = NULL ;
  if (fDEPrimary)  delete [] fDEPrimary ; fDEPrimary = NULL ;
  if (fIparent )   delete [] fIparent ;   fIparent   = NULL ;
  if (fDEParent)   delete [] fDEParent ;  fDEParent  = NULL ;
  
  if (fNSamples){
    fSamples     = new Int_t[fNSamples]; 
    for (Int_t i=0; i < digit.fNSamples; i++) fSamples[i] = digit.fSamples[i];
  }
  
  if (fNSamplesHG){
    fSamplesHG   = new Int_t[fNSamplesHG]; 
    for (Int_t i=0; i < digit.fNSamplesHG; i++) fSamplesHG[i] = digit.fSamplesHG[i];
  }
  
  
  if (fNMaxPrimary){
    fPrimary   = new Int_t  [fNMaxPrimary] ;  
    fDEPrimary = new Float_t[fNMaxPrimary] ;
    for ( Int_t i = 0; i < fNMaxPrimary ; i++) {
      fPrimary[i]   = digit.fPrimary[i] ;
      fDEPrimary[i] = digit.fDEPrimary[i] ;
    }
  }
  
  if (fNMaxiparent){
    fIparent  = new Int_t  [fNMaxiparent] ;
    fDEParent = new Float_t[fNMaxiparent] ;
    for (Int_t j = 0; j< fNMaxiparent ; j++) {
      fIparent[j]  = digit.fIparent[j] ;
      fDEParent[j] = digit.fDEParent[j] ;
    }
  }  
  
  return *this;
  
}  

//____________________________________________________________________________
Bool_t AliEMCALDigit::operator==(AliEMCALDigit const & digit) const 
{
  // Two digits are equal if they have the same Id
  
  if ( fId == digit.fId ) 
    return kTRUE ;
  else 
    return kFALSE ;
}
 
//____________________________________________________________________________
AliEMCALDigit AliEMCALDigit::operator+(const AliEMCALDigit &digit) 
{
  // Adds the amplitude of digits and completes the list of primary particles
  // if amplitude is larger than 
  
  fAmpFloat += digit.fAmpFloat ;
  for (Int_t i=0; i < fNSamples  ; i++) fSamples[i]   += digit.fSamples[i];
  for (Int_t i=0; i < fNSamplesHG; i++) fSamplesHG[i] += digit.fSamplesHG[i];
  
  fAmp    += digit.fAmp ;
  if(fTime > digit.fTime)
    fTime = digit.fTime ;
  if (digit.fTimeR < fTimeR)
    fTimeR = digit.fTimeR ; 
  
  Int_t max1 = fNprimary ; 
  Int_t max2 = fNiparent ;  
  Int_t index ; 
  for (index = 0 ; index < digit.fNprimary  ; index++){
    Bool_t newPrim = kTRUE ;
    Int_t old ;
    for ( old = 0 ; (old < max1) && newPrim; old++) { //already have this primary?
      if(fPrimary[old] == digit.fPrimary[index]) {
        newPrim = kFALSE;
        fDEPrimary[old] += digit.fDEPrimary[index];
      }
    }
    if (newPrim) {
      if(max1<fNMaxPrimary){ 
        fPrimary[max1] = digit.fPrimary[index] ; 
        fDEPrimary[max1] = digit.fDEPrimary[index] ; 
        fNprimary++ ;
        max1++;
      }
      if(fNprimary==fNMaxPrimary) {
        
        TString mess = " NMaxPrimary  =  " ; 
        mess += fNMaxPrimary ; 
        mess += " is too small" ; 
        AliFatal(mess.Data()) ; 
        
      }
    }
  }
  
  for (index = 0 ; index < digit.fNiparent ; index++){
    Bool_t newParent = kTRUE ;
    Int_t old ;
    for ( old = 0 ; (old < max2) && newParent; old++) { //already have this primary?
      if(fIparent[old] == digit.fIparent[index]) {
        newParent = kFALSE;
        fDEParent[old] += digit.fDEParent[index];
      }
    }
    if(newParent){
      if(max2<fNMaxiparent) { 
        fIparent[max2] = digit.fIparent[index] ; 
        fDEParent[max2] = digit.fDEParent[index] ; 
        fNiparent++ ;
        max2++;
      }
      if(fNiparent==fNMaxiparent) {
        
        TString mess = " NMaxiparent  =  " ; 
        mess += fNMaxiparent ; 
        mess += " is too small" ; 
        AliFatal(mess.Data()) ; 
        
      }
    }
  }
  
  return *this ;
}

//____________________________________________________________________________
AliEMCALDigit AliEMCALDigit::operator*(Float_t factor) 
{
  // Multiplies the amplitude by a factor
  
  //Float_t tempo = static_cast<Float_t>(fAmp) ; 
  //tempo *= factor ; 
  //fAmp = static_cast<Int_t>(TMath::Floor(tempo)) ; 
	
  fAmpFloat *= factor;
  for (Int_t i=0; i < fNSamples  ; i++) fSamples[i]   = Int_t(factor*fSamples[i]);
  for (Int_t i=0; i < fNSamplesHG; i++) fSamplesHG[i] = Int_t(factor*fSamplesHG[i]);

  for(Int_t i=0; i < fNprimary; i++) 
    fDEPrimary[i] *= factor;
  for(Int_t i=0; i < fNiparent; i++) 
    fDEParent[i] *= factor;

  return *this ;
}

//____________________________________________________________________________
ostream& operator << ( ostream& out , const AliEMCALDigit & digit)
{
  // Prints the data of the digit
  
  out << "ID " << digit.fId << " Energy = " << digit.fAmp <<  " Time = " << digit.fTime << endl ; 
  for(Int_t i=0;i<digit.fNprimary;i++) 
    out << "Primary " << i+1 << " = " << digit.fPrimary[i] 
	<< " : DE " << digit.fDEPrimary[i] << endl ;
   
  for(Int_t j=0;j<digit.fNiparent;j++)
    out << "Iparent " << j+1 << " = " << digit.fIparent[j] 
	<< " : DE " << digit.fDEParent[j] << endl ;
  out << "Position in list = " << digit.fIndexInList << endl ; 
  return out ;
}

//____________________________________________________________________________
void AliEMCALDigit::Print(const Option_t* /*opt*/) const
{
    //Print
	printf("===\nDigit id: %4d / Energy %2.3f ; Time %e ; Time samples %d ; Chi2 %2.3f, NDF %d, Type? %d \n",
		   fId, fAmpFloat,fTime, fNSamples, fChi2, fNDF, fDigitType);
	if(fDigitType==kTrigger){
		printf("FALTRO: ");
		for (Int_t i=0; i < GetNFALTROSamples(); i++) 
		{
			Int_t timeBin, amp;
			GetFALTROSample(i, timeBin, amp);
			printf(" (%d,%d) ",timeBin,amp);
		}
		printf("\n");
	}//trigger
	else{
		printf("ALTRO, Low Gain: ");
		for (Int_t i=0; i < GetNALTROSamplesLG(); i++) 
		{
			Int_t timeBin, amp;
			GetALTROSampleLG(i, timeBin, amp);
			printf(" (%d,%d) ",timeBin,amp);
		}
		printf("\n");
		printf("ALTRO, High Gain: ");
		for (Int_t i=0; i < GetNALTROSamplesHG(); i++) 
		{
			Int_t timeBin, amp;
			GetALTROSampleHG(i, timeBin, amp);
			printf(" (%d,%d) ",timeBin,amp);
		}
		printf("\n");
	}//trigger
	
}



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