ROOT logo
/**************************************************************************
 * Copyright(c) 2007, 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 class produces PHOS digits of one event
//using AliPHOSRawFitter. 
//
//   For example:
//   TClonesArray *digits = new TClonesArray("AliPHOSDigit",100);
//   AliRawReader* rawReader = new AliRawReaderDate("2006run2211.raw");
//   AliPHOSRawDecoder dc(rawReader);
//   while (rawReader->NextEvent()) {
//     AliPHOSRawDigiProducer producer;
//     producer.MakeDigits(digits,&dc);
//   }

// Author: Boris Polichtchouk

// --- ROOT system ---
#include "TClonesArray.h"

// --- AliRoot header files ---
#include "AliPHOSRawDigiProducer.h"
#include "AliPHOSRawFitterv0.h"
#include "AliPHOSGeometry.h"
#include "AliPHOSDigit.h"
#include "AliPHOSCalibData.h"
#include "AliPHOSPulseGenerator.h"
#include "AliCaloRawStreamV3.h"
#include "AliLog.h"

ClassImp(AliPHOSRawDigiProducer)

AliPHOSCalibData * AliPHOSRawDigiProducer::fgCalibData  = 0 ; 

//--------------------------------------------------------------------------------------
AliPHOSRawDigiProducer::AliPHOSRawDigiProducer():
  TObject(),
  fEmcMinE(0.),
  fCpvMinE(0.),
  fSampleQualityCut(1.),
  fSampleToSec(0.),
  fEmcCrystals(0),
  fGeom(0),
  fPulseGenerator(0),
  fRawReader(0),
  fRawStream(0),
  fADCValuesLG(0),
  fADCValuesHG(0)
{
  // Default constructor

  fGeom=AliPHOSGeometry::GetInstance() ;
  if(!fGeom) fGeom = AliPHOSGeometry::GetInstance("IHEP");

  fEmcCrystals=fGeom->GetNCristalsInModule()*fGeom->GetNModules() ;
  fPulseGenerator = new AliPHOSPulseGenerator();
  GetCalibrationParameters() ; 

}
//--------------------------------------------------------------------------------------
AliPHOSRawDigiProducer::AliPHOSRawDigiProducer(AliRawReader *rawReader,
					       AliAltroMapping **mapping):
  TObject(),
  fEmcMinE(0.),
  fCpvMinE(0.),
  fSampleQualityCut(1.),
  fSampleToSec(0.),
  fEmcCrystals(0),
  fGeom(0),
  fPulseGenerator(0),
  fRawReader(rawReader),
  fRawStream(0),
  fADCValuesLG(0),
  fADCValuesHG(0)
{
  // Default constructor

  fGeom=AliPHOSGeometry::GetInstance() ;
  if(!fGeom) fGeom = AliPHOSGeometry::GetInstance("IHEP");

  fEmcCrystals=fGeom->GetNCristalsInModule()*fGeom->GetNModules() ;
  fPulseGenerator = new AliPHOSPulseGenerator();
  GetCalibrationParameters() ; 

  fRawStream = new AliCaloRawStreamV3(rawReader,"PHOS",mapping);

}
//--------------------------------------------------------------------------------------
AliPHOSRawDigiProducer::AliPHOSRawDigiProducer(const AliPHOSRawDigiProducer &dp):
  TObject(),
  fEmcMinE(0.),
  fCpvMinE(0.),
  fSampleQualityCut(1.),
  fSampleToSec(0.),
  fEmcCrystals(0),
  fGeom(0),
  fPulseGenerator(0),
  fRawReader(0),
  fRawStream(0),
  fADCValuesLG(0),
  fADCValuesHG(0)

{                                                          
  // Copy constructor

  fEmcMinE = dp.fEmcMinE ;
  fCpvMinE = dp.fCpvMinE ;
  fSampleQualityCut = dp.fSampleQualityCut;
  fSampleToSec = dp.fSampleToSec ;
  fEmcCrystals = dp.fEmcCrystals ;
  fPulseGenerator = new AliPHOSPulseGenerator();
  fGeom = dp.fGeom ;
}
//--------------------------------------------------------------------------------------
AliPHOSRawDigiProducer& AliPHOSRawDigiProducer::operator= (const AliPHOSRawDigiProducer &dp)
{
  // Assign operator

  if(&dp == this) return *this;

  fEmcMinE = dp.fEmcMinE ;
  fCpvMinE = dp.fCpvMinE ;
  fSampleQualityCut = dp.fSampleQualityCut ;
  fSampleToSec = dp.fSampleToSec ;
  fEmcCrystals = dp.fEmcCrystals ;
  fGeom = dp.fGeom ;
  if(fPulseGenerator) delete fPulseGenerator ;
  fPulseGenerator = new AliPHOSPulseGenerator();
  return  *this;
} 
//--------------------------------------------------------------------------------------
AliPHOSRawDigiProducer::~AliPHOSRawDigiProducer()
{
  // Destructor
  if(fPulseGenerator) delete fPulseGenerator ;
  fPulseGenerator=0 ;
  delete fRawStream;
  delete [] fADCValuesLG;
  delete [] fADCValuesHG;
}
//--------------------------------------------------------------------------------------
void AliPHOSRawDigiProducer::MakeDigits(TClonesArray *digits, AliPHOSRawFitterv0* fitter) 
{
  // Create a temporary array of LG digits and then make digits from raw data

  TClonesArray *tmpLG = new TClonesArray("AliPHOSDigit",10000) ;
  MakeDigits(digits, tmpLG, fitter);
  tmpLG->Delete();
  delete tmpLG;
}
//--------------------------------------------------------------------------------------
void AliPHOSRawDigiProducer::MakeDigits(TClonesArray *digits, TClonesArray *tmpDigLG, AliPHOSRawFitterv0* fitter) 
{
  //Makes the job.
  //TClonesArray *digits, *tmpDigLG and raw data fitter should be provided by calling function.

  digits->Clear();
 
  Int_t iDigit=0 ;
  Int_t relId[4], absId=-1, caloFlag=-1;
  
  const Double_t baseLine=1. ; //Minimal energy of digit in ADC ch. 

  //Calculate conversion coeff. from Sample time step to seconds
  //If OCDB contains negative or zero value - use one from RCU trailer
  //Negative value in OCDB is used only for simulation of raw digits
  if(fgCalibData->GetSampleTimeStep()>0.)
    fSampleToSec=fgCalibData->GetSampleTimeStep() ;
  else
    fSampleToSec=fRawStream->GetTSample() ;
  
  // Clear a temporary array for LowGain digits
  tmpDigLG->Clear();
  Int_t ilgDigit=0 ;

  //Let fitter subtract pedestals in case of ZS
  fitter->SetCalibData(fgCalibData) ;
  
  while (fRawStream->NextDDL()) {
    while (fRawStream->NextChannel()) {
      relId[0] = 5 - fRawStream->GetModule() ; // counts from 1 to 5
      relId[1] = 0;
      relId[2] = fRawStream->GetCellX()  + 1; // counts from 1 to 64
      relId[3] = fRawStream->GetCellZ()  + 1; // counts from 1 to 56
      caloFlag = fRawStream->GetCaloFlag();   // 0=LG, 1=HG, 2=TRU
      
      if(caloFlag!=0 && caloFlag!=1) continue; //TRU data!
      
      fitter->SetChannelGeo(relId[0],relId[2],relId[3],caloFlag);

      if(fitter->GetAmpOffset()==0 && fitter->GetAmpThreshold()==0) {
	short value = fRawStream->GetAltroCFG1();
	bool ZeroSuppressionEnabled = (value >> 15) & 0x1;
	if(ZeroSuppressionEnabled) {
	  short offset = (value >> 10) & 0xf;
	  short threshold = value & 0x3ff;
	  fitter->SubtractPedestals(kFALSE);
	  fitter->SetAmpOffset(offset);
	  fitter->SetAmpThreshold(threshold);
	}
      }
      
      fGeom->RelToAbsNumbering(relId, absId);
      
      fitter->SetNBunches(0);
      Int_t sigStart =0 ;
      Int_t sigLength=0 ;
      while (fRawStream->NextBunch()) { //Take the first in time bunch
	const UShort_t *sig = fRawStream->GetSignals();
	sigStart  = fRawStream->GetStartTimeBin();
	sigLength = fRawStream->GetBunchLength();
	fitter->Eval(sig,sigStart,sigLength);
	if      (caloFlag == AliCaloRawStreamV3::kLowGain) {
	  delete [] fADCValuesLG;
	  fADCValuesLG = new Int_t[sigLength];
	  for (Int_t i=0; i<sigLength; i++)
	    fADCValuesLG[sigLength-i-1] = sig[i];
	}
	else if (caloFlag == AliCaloRawStreamV3::kHighGain) {
	  delete [] fADCValuesHG;
	  fADCValuesHG = new Int_t[sigLength];
	  for (Int_t i=0; i<sigLength; i++)
	    fADCValuesHG[sigLength-i-1] = sig[i];
	}
      } // End of NextBunch()

      
      Double_t energy = fitter->GetEnergy() ; 
      Double_t time   = fitter->GetTime() ;
      if(energy<=baseLine) //in ADC channels
	continue ;

      //remove digits with bad shape. Fitter should calculate quality so that 
      //in default case quality [0,1], while larger values of quality mean somehow 
      //corrupted samples, 999 means obviously corrupted sample.
      //It is difficult to fit samples with overflow (even setting cut on overflow values)
      //because too few points are left to fit. So we do not evaluate samples with overflow

      if(fitter->GetSignalQuality() > fSampleQualityCut && !(fitter->IsOverflow()))
	continue ;
      
      energy = CalibrateE(energy,relId,!caloFlag) ;

      //convert time from sample bin units to s
      time*=fSampleToSec ;
//CalibrateT moved to Clusterizer
//      time = CalibrateT(time,relId,!caloFlag) ;
      // subtract RCU L1 phase (L1Phase is in seconds) w.r.t. L0:
      //Very strange behaviour of electronics, but cross-checkes several times...
      if( fRawStream->GetL1Phase()<55.*1.e-9 ) //for phase=0,25,50
        time -= fRawStream->GetL1Phase();
      else //for phase 75
        time += 25.*1.e-9 ;
      
      if(energy <= 0.) 
	continue;
      
      if (caloFlag == AliCaloRawStreamV3::kLowGain) {
	new((*tmpDigLG)[ilgDigit]) AliPHOSDigit(-1,absId,(Float_t)energy,(Float_t)time);
	if (sigLength>0 && fADCValuesLG!=0)
	  static_cast<AliPHOSDigit*>(tmpDigLG->At(ilgDigit))->SetALTROSamplesLG(sigLength,fADCValuesLG);
	ilgDigit++ ; 
      }
      else if (caloFlag == AliCaloRawStreamV3::kHighGain) {
	if(fitter->IsOverflow()) //Keep this digit to replace it by Low Gain later.
	  //If there is no LogGain it wil be removed by cut on Min E
	  new((*digits)[iDigit]) AliPHOSDigit(-1,absId,-1.f,(Float_t)time);
	else
	  new((*digits)[iDigit]) AliPHOSDigit(-1,absId,(Float_t)energy,(Float_t)time);
	if (sigLength>0 && fADCValuesHG!=0)
	  static_cast<AliPHOSDigit*>(digits->At(iDigit))->SetALTROSamplesHG(sigLength,fADCValuesHG);
	iDigit++;
      }
    } // End of NextChannel()

    //Now scan created LG and HG digits and keep only those which appeared in both lists 
    //replace energy of HighGain digits only if there is overflow
    //negative energy (overflow)
    digits->Sort() ;
    tmpDigLG->Sort() ;
    Int_t iLG = 0;
    Int_t nLG1 = tmpDigLG->GetEntriesFast()-1 ;
    
    for(Int_t iDig=0 ; iDig < digits->GetEntriesFast() ; iDig++) { 
      AliPHOSDigit * digHG = dynamic_cast<AliPHOSDigit*>(digits->At(iDig)) ;
      if (!digHG) continue;
      AliPHOSDigit * digLG = dynamic_cast<AliPHOSDigit*>(tmpDigLG->At(iLG)) ;
      while(digLG && iLG<nLG1 && digHG->GetId()> digLG->GetId()){
	iLG++ ;
	digLG = dynamic_cast<AliPHOSDigit*>(tmpDigLG->At(iLG)) ;
      }
      absId=digHG->GetId() ;
      fGeom->AbsToRelNumbering(absId,relId) ;
 
      if(digLG && digHG->GetId() == digLG->GetId()){ //we found pair
	if(digHG->GetEnergy()<0.){ //This is overflow in HG
	  digHG->SetTime(digLG->GetTime()) ;
	  digHG->SetEnergy(digLG->GetEnergy()) ;
	  digHG->SetLG(kTRUE) ;
	}
      }
      else{ //no pair - remove
	if(digHG->GetEnergy()<0.) //no pair, in saturation
	  digits->RemoveAt(iDig) ;                                                          
      }
    }
  } // End of NextDDL()

  CleanDigits(digits) ;
  
}
//____________________________________________________________________________
Double_t AliPHOSRawDigiProducer::CalibrateE(Double_t amp, Int_t* relId, Bool_t isLowGain)
{
  // Convert EMC LG amplitude to HG (multipli by ~16)
  // Calibration parameters are taken from calibration data base 
  if(fgCalibData){ 
    Int_t   module = relId[0];  
    Int_t   column = relId[3];
    Int_t   row    = relId[2];
    if(relId[1]==0) { // this is EMC 
      if(isLowGain){
        amp*= fgCalibData->GetHighLowRatioEmc(module,column,row);
      }
      return amp ;         
    }         
  }          
  return 0;        
}
//____________________________________________________________________________
Double_t AliPHOSRawDigiProducer::CalibrateT(Double_t time, Int_t * relId, Bool_t /* isLowGain */)
{
  //Calibrate time
  if(fgCalibData){
    Int_t   module = relId[0];
    Int_t   column = relId[3];
    Int_t   row    = relId[2];
    if(relId[1]==0) { // this is EMC
      time += fgCalibData->GetTimeShiftEmc(module,column,row);                   
      return time ;             
    }
  }
 
  return -999.;
}
//____________________________________________________________________________
void AliPHOSRawDigiProducer::CleanDigits(TClonesArray * digits)
{
  // remove digits with amplitudes below threshold.
  // remove digits in bad channels
  // sort digits with icreasing AbsId
  
  //remove digits in bad map and below threshold
  Bool_t isBadMap = 0 ;
  if(fgCalibData->GetNumOfEmcBadChannels()){
    isBadMap=1 ;
  }
  
  for(Int_t i=0; i<digits->GetEntriesFast(); i++){
    AliPHOSDigit * digit = static_cast<AliPHOSDigit*>(digits->At(i)) ;
    if(!digit)
      continue  ;
    if ( (IsInEMC(digit) && digit->GetEnergy() < fEmcMinE) ||
	 (IsInCPV(digit) && digit->GetEnergy() < fCpvMinE) ){
      digits->RemoveAt(i) ;
      continue ;
    }
    if(isBadMap){ //check bad map now
      Int_t relid[4] ;
      fGeom->AbsToRelNumbering(digit->GetId(), relid) ; 
      if(fgCalibData->IsBadChannelEmc(relid[0],relid[3],relid[2])){
	digits->RemoveAt(i) ;
      }
    }
  }

  //Compress, sort and set indexes
  digits->Compress() ;
//  digits->Sort(); already sorted earlier
  for (Int_t i = 0 ; i < digits->GetEntriesFast() ; i++) { 
    AliPHOSDigit *digit = static_cast<AliPHOSDigit*>( digits->At(i) ) ; 
    digit->SetIndexInList(i) ;     
  }
}
//____________________________________________________________________________
Bool_t AliPHOSRawDigiProducer::IsInEMC(AliPHOSDigit * digit) const
{
  // Tells if (true) or not (false) the digit is in a PHOS-EMC module
  return digit->GetId() <= fEmcCrystals ;

}

//____________________________________________________________________________
Bool_t AliPHOSRawDigiProducer::IsInCPV(AliPHOSDigit * digit) const
{
  // Tells if (true) or not (false) the digit is in a PHOS-CPV module
  return digit->GetId() > fEmcCrystals ;
}
//____________________________________________________________________________
void AliPHOSRawDigiProducer::GetCalibrationParameters() 
{
  // Set calibration parameters:
  // if calibration database exists, they are read from database,
  // otherwise, reconstruction stops in the constructor of AliPHOSCalibData
  //
  // It is a user responsilibity to open CDB before reconstruction, for example: 
  // AliCDBStorage* storage = AliCDBManager::Instance()->GetStorage("local://CalibDB");

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