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

//_________________________________________________________________________
// This is a Class that makes SDigits out of Hits
// A Summable Digits is the sum of all hits originating 
// from one in one tower of the EMCAL 
// A threshold for assignment of the primary to SDigit is applied 
//
// JLK 26-Jun-2008 Added explanation:
// SDigits need to hold the energy sum of the hits, but AliEMCALDigit
// can (should) only store amplitude.  Therefore, the SDigit energy is
// "digitized" before being stored and must be "calibrated" back to an
// energy before SDigits are summed to form true Digits
//
// SDigits are written to TreeS, branch "EMCAL"
// AliEMCALSDigitizer with all current parameters is written 
// to TreeS branch "AliEMCALSDigitizer".
// Both branches have the same title. If necessary one can produce 
// another set of SDigits with different parameters. Two versions
// can be distunguished using titles of the branches.
// User case:
// root [0] AliEMCALSDigitizer * s = new AliEMCALSDigitizer("galice.root")
// Warning in <TDatabasePDG::TDatabasePDG>: object already instantiated
// root [1] s->Digitize()
//             // Makes SDigitis for all events stored in galice.root
// root [2] s->SetPedestalParameter(0.001)
//             // One can change parameters of digitization
// root [3] s->SetSDigitsBranch("Redestal 0.001")
//             // and write them into the new branch
// root [4] s->Digitize("deb all tim")
//             // available parameters:
//             deb - print # of produced SDigitis
//             deb all  - print # and list of produced SDigits
//             tim - print benchmarking information
//
//*-- Author : Sahal Yacoob (LBL)
// based on  : AliPHOSSDigitzer 
//////////////////////////////////////////////////////////////////////////////

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

// --- Standard library ---
#include "stdlib.h"

// --- AliRoot header files ---
#include "AliLog.h"
#include "AliRunLoader.h"
#include "AliStack.h"
#include "AliEMCALDigit.h"
#include "AliEMCALLoader.h"
#include "AliEMCALHit.h"
#include "AliEMCALSDigitizer.h"
#include "AliEMCALGeometry.h"
#include "AliEMCALSimParam.h"

ClassImp(AliEMCALSDigitizer)
           
//____________________________________________________________________________ 
AliEMCALSDigitizer::AliEMCALSDigitizer()
  : TNamed("",""),
    fA(0.),fB(0.),fECPrimThreshold(0.),
    fDefaultInit(kTRUE),
    fEventFolderName(0),
    fInit(0),
    fSDigitsInRun(0),
    fFirstEvent(0),
    fLastEvent(0),
    fSampling(0.),
	fHits(0)
{
  // ctor
  InitParameters();
}

//____________________________________________________________________________ 
AliEMCALSDigitizer::AliEMCALSDigitizer(const char * alirunFileName, 
				       const char * eventFolderName)
  : TNamed("EMCALSDigitizer", alirunFileName),
    fA(0.),fB(0.),fECPrimThreshold(0.),
    fDefaultInit(kFALSE),
    fEventFolderName(eventFolderName),
    fInit(0),
    fSDigitsInRun(0),
    fFirstEvent(0),
    fLastEvent(0),
    fSampling(0.),
    fHits(0)
{
  // ctor
  Init();
  InitParameters() ; 

}


//____________________________________________________________________________ 
AliEMCALSDigitizer::AliEMCALSDigitizer(const AliEMCALSDigitizer & sd) 
  : TNamed(sd.GetName(),sd.GetTitle()),
    fA(sd.fA),
    fB(sd.fB),
    fECPrimThreshold(sd.fECPrimThreshold),
    fDefaultInit(sd.fDefaultInit),
    fEventFolderName(sd.fEventFolderName),
    fInit(sd.fInit),
    fSDigitsInRun(sd.fSDigitsInRun),
    fFirstEvent(sd.fFirstEvent),
    fLastEvent(sd.fLastEvent),
    fSampling(sd.fSampling),
    fHits(0)
{
  //cpy ctor 
}

//_____________________________________________________________________
AliEMCALSDigitizer& AliEMCALSDigitizer::operator = (const AliEMCALSDigitizer& source)
{ // assignment operator; use copy ctor
  if (&source == this) return *this;

  new (this) AliEMCALSDigitizer(source);
  return *this;
}

//____________________________________________________________________________ 
AliEMCALSDigitizer::~AliEMCALSDigitizer() {
  //dtor
	
  if(fHits){
	  fHits->Clear();
	  delete fHits;
  }
}

//____________________________________________________________________________ 
void AliEMCALSDigitizer::Init(){
  // Initialization: open root-file, allocate arrays for hits and sdigits
  // 
  // Initialization can not be done in the default constructor
  //============================================================= YS
  //  The initialisation is now done by the getter

  fInit = kTRUE; 
   
  AliEMCALLoader *emcalLoader = dynamic_cast<AliEMCALLoader*>(AliRunLoader::Instance()->GetDetectorLoader("EMCAL"));

  if ( emcalLoader == 0 ) {
    Fatal("Init", "Could not obtain the AliEMCALLoader");
    return ;
  } 
  
}

//____________________________________________________________________________ 
void AliEMCALSDigitizer::InitParameters()
{
  //initialize parameters for sdigitization

  const AliEMCALGeometry * geom = AliEMCALGeometry::GetInstance();
  if (geom->GetSampling() == 0.) {
    Fatal("InitParameters", "Sampling factor not set !") ; 
  }

  // Get the parameters from the OCDB via the loader
  AliRunLoader *rl = AliRunLoader::Instance();
  AliEMCALLoader *emcalLoader = dynamic_cast<AliEMCALLoader*>(rl->GetDetectorLoader("EMCAL"));
  AliEMCALSimParam * simParam = 0x0;
  if(emcalLoader) simParam = emcalLoader->SimulationParameters();
	
  if(!simParam){
	simParam = AliEMCALSimParam::GetInstance();
	AliWarning("Simulation Parameters not available in OCDB?");
  }
	
  //
  //JLK 26-Jun-2008 THIS SHOULD HAVE BEEN EXPLAINED AGES AGO:
  //
  //In order to be able to store SDigit Energy info into
  //AliEMCALDigit, we need to convert it temporarily to an ADC amplitude
  //and later when summing SDigits to form digits, convert it back to
  //energy.  These fA and fB parameters accomplish this through the
  //Digitize() and Calibrate() methods
  //
  // Initializes parameters
  fA         = simParam->GetA(); //0;
  fB         = simParam->GetB(); //1.e+6;  // Changed 24 Apr 2007. Dynamic range now 2 TeV
  fSampling  = geom->GetSampling();

  // threshold for deposit energy of hit
  fECPrimThreshold  = simParam->GetECPrimaryThreshold();//0.05;// GeV // 22-may-07 was 0// 24-nov-04 - was 1.e-6;
  
  AliDebug(2,Form("Print: \n------------------- %s -------------\n",GetName()));
  AliDebug(2,Form("   fInit                                 %i\n", int(fInit)));
  AliDebug(2,Form("   fFirstEvent                           %i\n", fFirstEvent));
  AliDebug(2,Form("   fLastEvent                            %i\n", fLastEvent));
  AliDebug(2,Form("   Writing SDigits to branch with title  %s\n", fEventFolderName.Data()));
  AliDebug(2,Form("   with digitization parameters       A = %f\n", fA));
  AliDebug(2,Form("                                      B = %f\n", fB));
  AliDebug(2,Form("   Threshold for EC Primary assignment  = %f\n", fECPrimThreshold));
  AliDebug(2,Form("   Sampling                             = %f\n", fSampling));
  AliDebug(2,Form("---------------------------------------------------\n"));

}

//____________________________________________________________________________
void AliEMCALSDigitizer::Digitize(Option_t *option) 
{ 
	// Collects all hit of the same tower into digits
	TString o(option); o.ToUpper();
	if (strstr(option, "print") ) {
		
		AliDebug(2,Form("Print: \n------------------- %s -------------\n",GetName()));
		AliDebug(2,Form("   fInit                                 %i\n", int(fInit)));
		AliDebug(2,Form("   fFirstEvent                           %i\n", fFirstEvent));
		AliDebug(2,Form("   fLastEvent                            %i\n", fLastEvent));
		AliDebug(2,Form("   Writing SDigits to branch with title  %s\n", fEventFolderName.Data()));
		AliDebug(2,Form("   with digitization parameters       A = %f\n", fA));
		AliDebug(2,Form("                                      B = %f\n", fB));
		AliDebug(2,Form("   Threshold for EC Primary assignment  = %f\n", fECPrimThreshold));
		AliDebug(2,Form("   Sampling                             = %f\n", fSampling));
		AliDebug(2,Form("---------------------------------------------------\n"));
		
		return ; 
	}
	
	
	if(strstr(option,"tim"))
		gBenchmark->Start("EMCALSDigitizer");
	
	AliRunLoader *rl = AliRunLoader::Instance();
	AliEMCALLoader *emcalLoader = dynamic_cast<AliEMCALLoader*>(rl->GetDetectorLoader("EMCAL"));
	
	if (!fInit) { // to prevent overwrite existing file
	  AliError( Form("Give a version name different from %s", fEventFolderName.Data()) ) ;
	  return ;
	}
	
	if (fLastEvent == -1) 
		fLastEvent = rl->GetNumberOfEvents() - 1 ;
	else {
		fLastEvent = TMath::Min(fLastEvent, rl->GetNumberOfEvents()-1);
	}
	Int_t nEvents   = fLastEvent - fFirstEvent + 1;
	
	Float_t energy=0.; // de * fSampling - 23-nov-04
	rl->LoadKinematics();
	rl->LoadHits("EMCAL");
  
  Int_t ievent;
	for (ievent = fFirstEvent; ievent <= fLastEvent; ievent++) {
		rl->GetEvent(ievent);
		TTree * treeS = emcalLoader->TreeS();
		if ( !treeS ) { 
			emcalLoader->MakeSDigitsContainer();
			treeS = emcalLoader->TreeS();
		}
    
		TClonesArray * sdigits = emcalLoader->SDigits() ;
		sdigits->Clear("C");
		
		Int_t nSdigits = 0 ;
		Int_t iHit, iTrack, iSDigit;
		
		AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance(); 
		
		TTree *treeH = emcalLoader->TreeH();	
		if (treeH) {
			Int_t nTrack = treeH->GetEntries();  // TreeH has array of hits for every primary
			TBranch * branchH = treeH->GetBranch("EMCAL");
			//if(fHits)fHits->Clear();
			branchH->SetAddress(&fHits);
			for (iTrack = 0; iTrack < nTrack; iTrack++) {
				branchH->GetEntry(iTrack); 
        
        if(fHits){
          
          Int_t nHit = fHits->GetEntriesFast();
          for(iHit = 0; iHit< nHit;iHit++){
            
            AliEMCALHit * hit = dynamic_cast<AliEMCALHit*>(fHits->At(iHit)) ;
            AliEMCALDigit * curSDigit = 0 ;
            AliEMCALDigit * sdigit = 0 ;
            Bool_t newsdigit = kTRUE; 
            
            // hit->GetId() - Absolute Id number EMCAL segment
            if(hit){
              if(geom->CheckAbsCellId(hit->GetId())) { // was IsInECA(hit->GetId())
                energy = hit->GetEnergy() * fSampling; // 23-nov-04
                if(energy >  fECPrimThreshold )
                  // Assign primary number only if deposited energy is significant
                  curSDigit =  new AliEMCALDigit(hit->GetPrimary(),
                                                 hit->GetIparent(), hit->GetId(), 
                                                 Digitize(energy), hit->GetTime(),kFALSE,
                                                 -1, 0,0,energy ) ;
                else
                  curSDigit =  new AliEMCALDigit(-1, 
                                                 -1,
                                                 hit->GetId(), 
                                                 Digitize(energy), hit->GetTime(),kFALSE,
                                                 -1, 0,0,energy ) ;
              } else {
                Warning("Digitize"," abs id %i is bad \n", hit->GetId());
                newsdigit = kFALSE;
                curSDigit = 0;
              }
              
              if(curSDigit != 0){
                for(Int_t check= 0; check < nSdigits ; check++) {
                  sdigit = dynamic_cast<AliEMCALDigit *>(sdigits->At(check)) ;
                  if(sdigit){
                    if( sdigit->GetId() == curSDigit->GetId()) { // Are we in the same ECAL tower ?              
                      *sdigit = *sdigit + *curSDigit;
                      newsdigit = kFALSE;
                    }
                  }// sdigit exists
                  else {
                    AliWarning("Sdigit do not exist");
                    newsdigit = kFALSE;  
                  }// sdigit does not exist
                }//sdigit loop
              }// currsdigit exists
              
              if (newsdigit) {
                new((*sdigits)[nSdigits])  AliEMCALDigit(*curSDigit);
                nSdigits++ ;  
              }
              delete curSDigit ;
              
            }// hit exists
            else AliFatal("Hit is NULL!");
            
          }  // loop over all hits (hit = deposited energy/entering particle)
          
        }//fHits is not NULL
        else AliFatal("fHit is NULL!");
        
				sdigits->Sort() ;
				
				nSdigits = sdigits->GetEntriesFast() ;
				fSDigitsInRun += nSdigits ;  
				
				for (iSDigit = 0 ; iSDigit < sdigits->GetEntriesFast() ; iSDigit++) { 
					AliEMCALDigit * sdigit = dynamic_cast<AliEMCALDigit *>(sdigits->At(iSDigit)) ;
					if(sdigit)sdigit->SetIndexInList(iSDigit) ;
          else AliFatal("sdigit is NULL!");
				}	
				if(fHits)fHits->Clear();
			}//track loop
		}// tree exists
		
		// Now write SDigits    
		
		Int_t bufferSize = 32000 ;    
		TBranch * sdigitsBranch = treeS->GetBranch("EMCAL");
		if (sdigitsBranch)
			sdigitsBranch->SetAddress(&sdigits);
		else
			treeS->Branch("EMCAL",&sdigits,bufferSize);
		
		treeS->Fill();
		
		emcalLoader->WriteSDigits("OVERWRITE");
		
		//NEXT - SDigitizer
		//emcalLoader->WriteSDigitizer("OVERWRITE");  // why in event cycle ?
		
		if(strstr(option,"deb"))
			PrintSDigits(option) ;  
	}
	
	Unload();
		
	if(strstr(option,"tim")){
		gBenchmark->Stop("EMCALSDigitizer"); 
		printf("\n Digitize: took %f seconds for SDigitizing %f seconds per event\n", 
           gBenchmark->GetCpuTime("EMCALSDigitizer"), gBenchmark->GetCpuTime("EMCALSDigitizer")/nEvents ) ; 
	}
}

//__________________________________________________________________
Float_t AliEMCALSDigitizer::Digitize(Float_t energy)const {
  // Digitize the energy
  //
  //JLK 26-Jun-2008 EXPLANATION LONG OVERDUE:
  //
  //We have to digitize the SDigit energy so that it can be stored in
  //AliEMCALDigit, which has only an ADC amplitude member and
  //(rightly) no energy member.  This method converts the energy to an
  //integer which can be re-converted back to an energy with the
  //Calibrate(energy) method when it is time to create Digits from SDigits 
  //
  Double_t aSignal = fA + energy*fB;
  if (TMath::Abs(aSignal)>2147483647.0) { 
    //PH 2147483647 is the max. integer
    //PH This apparently is a problem which needs investigation
    AliWarning(Form("Too big or too small energy %f",aSignal));
    aSignal = TMath::Sign((Double_t)2147483647,aSignal);
  }

  return (Float_t ) aSignal;
}

//__________________________________________________________________
Float_t AliEMCALSDigitizer::Calibrate(Float_t amp)const {
  //
  // Convert the amplitude back to energy in GeV
  //
  //JLK 26-Jun-2008 EXPLANATION LONG OVERDUE:
  //
  //We have to digitize the SDigit energy with the method Digitize() 
  //so that it can be stored in AliEMCALDigit, which has only an ADC 
  //amplitude member and (rightly) no energy member.  This method is
  //just the reverse of Digitize(): it converts the stored amplitude 
  //back to an energy value in GeV so that the SDigit energies can be 
  //summed before adding noise and creating digits out of them
  //
  return (Float_t)(amp - fA)/fB;

}
 

//__________________________________________________________________
void AliEMCALSDigitizer::Print1(Option_t * option)
{
  Print(); 
  PrintSDigits(option);
}

//__________________________________________________________________
void AliEMCALSDigitizer::Print(Option_t *option) const
{ 
  // Prints parameters of SDigitizer
  printf("Print: \n------------------- %s ------------- option %s\n", GetName() , option) ; 
  printf("   fInit                                 %i\n", int(fInit));
  printf("   fFirstEvent                           %i\n", fFirstEvent);
  printf("   fLastEvent                            %i\n", fLastEvent);
  printf("   Writing SDigits to branch with title  %s\n", fEventFolderName.Data()) ;
  printf("   with digitization parameters       A = %f\n", fA) ; 
  printf("                                      B = %f\n", fB) ;
  printf("   Threshold for EC Primary assignment  = %f\n", fECPrimThreshold)  ;
  printf("   Sampling                             = %f\n", fSampling);
  printf("---------------------------------------------------\n") ;
}

//__________________________________________________________________
Bool_t AliEMCALSDigitizer::operator==( AliEMCALSDigitizer const &sd )const
{
  // Equal operator.
  // SDititizers are equal if their pedestal, slope and threshold are equal
  if( (fA==sd.fA)&&(fB==sd.fB)&&
      (fECPrimThreshold==sd.fECPrimThreshold))
    return kTRUE ;
  else
    return kFALSE ;
}
//__________________________________________________________________
void AliEMCALSDigitizer::PrintSDigits(Option_t * option)
{
  //Prints list of digits produced at the current pass of AliEMCALDigitizer
  
  AliEMCALLoader *rl = dynamic_cast<AliEMCALLoader*>(AliRunLoader::Instance()->GetDetectorLoader("EMCAL"));
  if(rl){
    const TClonesArray * sdigits = rl->SDigits() ; 
    
    printf("\n") ;  
    printf("event %i", rl->GetRunLoader()->GetEventNumber());
    printf(" Number of entries in SDigits list %i", sdigits->GetEntriesFast()); 
    if(strstr(option,"all")||strstr(option,"EMC")){
      
      //loop over digits
      AliEMCALDigit * digit;
      printf("\n   Id  Amplitude    Time          Index Nprim: Primaries list \n") ;    
      Int_t   index = 0;
      Float_t isum  = 0.;
      const Int_t bufferSize = 8192;
      char * tempo = new char[bufferSize]; 
      for (index = 0 ; index < sdigits->GetEntries() ; index++) {
        digit = dynamic_cast<AliEMCALDigit *>( sdigits->At(index) ) ;
        if(digit){
          snprintf(tempo, bufferSize,"\n%6d  %8f    %6.5e %4d      %2d :",
                  digit->GetId(), digit->GetAmplitude(), digit->GetTime(), digit->GetIndexInList(), digit->GetNprimary()) ;  
          printf("%s",tempo);
          isum += digit->GetAmplitude();
          
          Int_t iprimary;
          for (iprimary=0; iprimary<digit->GetNprimary(); iprimary++) {
            snprintf(tempo,bufferSize, "%d ",digit->GetPrimary(iprimary+1) ) ; 
            printf("%s",tempo); 
          }  
        } //sdigit exists
        else AliFatal("SDigit is NULL!");
      }//loop
      delete [] tempo ;
      printf("\n** Sum %2.3f : %10.3f GeV/c **\n ", isum, Calibrate(isum));
    } else printf("\n");
  }
  else AliFatal("EMCALLoader is NULL!");
}

//____________________________________________________________________________ 
void AliEMCALSDigitizer::Unload() const
{
  // Unload Hits and SDigits from the folder
  AliEMCALLoader *rl = dynamic_cast<AliEMCALLoader*>(AliRunLoader::Instance()->GetDetectorLoader("EMCAL"));
  if(rl){
    rl->UnloadHits() ; 
    rl->UnloadSDigits() ;
  }
  else AliFatal("EMCALLoader is NULL!");
}

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