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

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 	************** Class for ZDC reconstruction      **************      //
//                  Author: Chiara.Oppedisano@to.infn.it		     //
//                                                                           //
// NOTATIONS ADOPTED TO IDENTIFY DETECTORS (used in different ages!):	     //
//   (ZN1,ZP1) or (ZNC, ZPC) or RIGHT refers to side C (RB26)		     //
//   (ZN2,ZP2) or (ZNA, ZPA) or LEFT refers to side A (RB24)		     //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////


#include <TH2F.h>
#include <TH1D.h>
#include <TAxis.h>
#include <TMap.h>

#include "AliRawReader.h"
#include "AliESDEvent.h"
#include "AliESDZDC.h"
#include "AliZDCDigit.h"
#include "AliZDCRawStream.h"
#include "AliZDCReco.h"
#include "AliZDCReconstructor.h"
#include "AliZDCPedestals.h"
#include "AliZDCEnCalib.h"
#include "AliZDCSaturationCalib.h"
#include "AliZDCTowerCalib.h"
#include "AliZDCMBCalib.h"
#include "AliZDCTDCCalib.h"
#include "AliZDCRecoParam.h"
#include "AliZDCRecoParampp.h"
#include "AliZDCRecoParamPbPb.h"
#include "AliRunInfo.h"
#include "AliLHCClockPhase.h"


ClassImp(AliZDCReconstructor)
AliZDCRecoParam *AliZDCReconstructor::fgRecoParam=0;  //reconstruction parameters
AliZDCMBCalib *AliZDCReconstructor::fgMBCalibData=0;  //calibration parameters for A-A reconstruction

//_____________________________________________________________________________
AliZDCReconstructor:: AliZDCReconstructor() :
  fPedData(GetPedestalData()),
  fEnCalibData(GetEnergyCalibData()),
  fSatCalibData(GetSaturationCalibData()),
  fTowCalibData(GetTowerCalibData()),
  fTDCCalibData(GetTDCCalibData()),
  fRecoMode(0),
  fBeamEnergy(0.),
  fNRun(0),
  fIsCalibrationMB(kFALSE),
  fPedSubMode(0),
  fSignalThreshold(7),
  fMeanPhase(0),
  fESDZDC(NULL){
  // **** Default constructor
}


//_____________________________________________________________________________
AliZDCReconstructor::~AliZDCReconstructor()
{
// destructor
//   if(fgRecoParam)    delete fgRecoParam;
   if(fPedData)      delete fPedData;    
   if(fEnCalibData)  delete fEnCalibData;
   if(fSatCalibData)  delete fSatCalibData;
   if(fTowCalibData) delete fTowCalibData;
   if(fgMBCalibData) delete fgMBCalibData;
   if(fESDZDC)       delete fESDZDC;
}

//____________________________________________________________________________
void AliZDCReconstructor::Init()
{
  // Setting reconstruction parameters
    
  TString runType = GetRunInfo()->GetRunType();
  if((runType.CompareTo("CALIBRATION_MB")) == 0){
    fIsCalibrationMB = kTRUE;
  }
    
  TString beamType = GetRunInfo()->GetBeamType();
  // This is a temporary solution to allow reconstruction in tests without beam
  if(((beamType.CompareTo("UNKNOWN"))==0) && 
     ((runType.CompareTo("PHYSICS"))==0 || (runType.CompareTo("CALIBRATION_BC"))==0)){
    fRecoMode=1;
  }
  /*else if((beamType.CompareTo("UNKNOWN"))==0){
    AliError("\t UNKNOWN beam type\n");
    return;
  }*/
    
  fBeamEnergy = GetRunInfo()->GetBeamEnergy();
  if(fBeamEnergy<0.01){
     AliWarning(" Beam energy value missing -> setting it to 1380 GeV ");
     fBeamEnergy = 1380.;
  }
  
  if(((beamType.CompareTo("pp"))==0) || ((beamType.CompareTo("p-p"))==0)
     ||((beamType.CompareTo("PP"))==0) || ((beamType.CompareTo("P-P"))==0)){
    fRecoMode=1;
  }
  else if(((beamType.CompareTo("p-A"))==0) || ((beamType.CompareTo("A-p"))==0)
     ||((beamType.CompareTo("P-A"))==0) || ((beamType.CompareTo("A-P"))==0)){
    fRecoMode=1;
  }
  else if((beamType.CompareTo("A-A")) == 0 || (beamType.CompareTo("AA")) == 0){
    fRecoMode=2;
    if(!fgRecoParam) fgRecoParam = const_cast<AliZDCRecoParam*>(GetRecoParam());
    if(fgRecoParam){
      fgRecoParam->SetGlauberMCDist(fBeamEnergy);	
    } 
  }

  AliCDBEntry *entry = AliCDBManager::Instance()->Get("GRP/Calib/LHCClockPhase"); 
  if (!entry) AliFatal("LHC clock-phase shift is not found in OCDB !");
  else{
    AliLHCClockPhase *phaseLHC = (AliLHCClockPhase*)entry->GetObject();
    // 4/2/2011 According to A. Di Mauro BEAM1 measurement is more reliable 
    // than BEAM2 and therefore also than the average of the 2
    fMeanPhase = phaseLHC->GetMeanPhaseB1();
  }  
  if(fIsCalibrationMB==kFALSE)  
    AliInfo(Form("\n\n ***** ZDC reconstruction initialized for %s @ %1.0f + %1.0f GeV *****\n\n",
    	beamType.Data(), fBeamEnergy, fBeamEnergy));
  
  // if EMD calibration run NO ENERGY CALIBRATION should be performed
  // pp-like reconstruction must be performed (E cailb. coeff. = 1)
  if((runType.CompareTo("CALIBRATION_EMD")) == 0){
    fRecoMode=1; 
    fBeamEnergy = 1380.;
  }
  
  AliInfo(Form("\n   ZDC reconstruction mode %d (1 -> p-p, 2-> A-A)\n\n",fRecoMode));
  
  fESDZDC = new AliESDZDC();

}


//____________________________________________________________________________
void AliZDCReconstructor::Init(TString beamType, Float_t beamEnergy)
{
  // Setting reconstruction mode
  // Needed to work in the HLT framework
  
  fIsCalibrationMB = kFALSE;
     
  fBeamEnergy = beamEnergy;
  
  if(((beamType.CompareTo("pp"))==0) || ((beamType.CompareTo("p-p"))==0)
     ||((beamType.CompareTo("PP"))==0) || ((beamType.CompareTo("P-P"))==0)){
    fRecoMode=1;
  }
  else if(((beamType.CompareTo("p-A"))==0) || ((beamType.CompareTo("A-p"))==0)
     ||((beamType.CompareTo("P-A"))==0) || ((beamType.CompareTo("A-P"))==0)){
    fRecoMode=1;
  }
  else if((beamType.CompareTo("A-A")) == 0 || (beamType.CompareTo("AA")) == 0){
    fRecoMode=2;
    if(!fgRecoParam) fgRecoParam = const_cast<AliZDCRecoParam*>(GetRecoParam());
    if( fgRecoParam ) fgRecoParam->SetGlauberMCDist(fBeamEnergy);	
  }    

  AliCDBEntry *entry = AliCDBManager::Instance()->Get("GRP/Calib/LHCClockPhase"); 
  if (!entry) AliFatal("LHC clock-phase shift is not found in OCDB !");
  else{
    AliLHCClockPhase *phaseLHC = (AliLHCClockPhase*)entry->GetObject();
    fMeanPhase = phaseLHC->GetMeanPhase();
  }
  fESDZDC = new AliESDZDC();
  
  AliInfo(Form("\n\n ***** ZDC reconstruction initialized for %s @ %1.0f + %1.0f GeV *****\n\n",
    	beamType.Data(), fBeamEnergy, fBeamEnergy));
  
}

//_____________________________________________________________________________
void AliZDCReconstructor::Reconstruct(TTree* digitsTree, TTree* clustersTree) const
{
  // *** Local ZDC reconstruction for digits
  // Works on the current event
    
  // Retrieving calibration data  
  // Parameters for mean value pedestal subtraction
  int const kNch = 24;
  Float_t meanPed[2*kNch];    
  for(Int_t jj=0; jj<2*kNch; jj++) meanPed[jj] = fPedData->GetMeanPed(jj);
  // Parameters pedestal subtraction through correlation with out-of-time signals
  Float_t corrCoeff0[2*kNch], corrCoeff1[2*kNch];
  for(Int_t jj=0; jj<2*kNch; jj++){
     corrCoeff0[jj] = fPedData->GetPedCorrCoeff0(jj);
     corrCoeff1[jj] = fPedData->GetPedCorrCoeff1(jj);
  }

  // get digits
  AliZDCDigit digit;
  AliZDCDigit* pdigit = &digit;
  digitsTree->SetBranchAddress("ZDC", &pdigit);
  //printf("\n\t # of digits in tree: %d\n",(Int_t) digitsTree->GetEntries());

  // loop over digits
  Float_t tZN1Corr[10], tZP1Corr[10], tZN2Corr[10], tZP2Corr[10]; 
  for(Int_t i=0; i<10; i++) tZN1Corr[i] = tZP1Corr[i] = tZN2Corr[i] = tZP2Corr[i] = 0.;  
  Float_t dZEM1Corr[2]={0,0}, dZEM2Corr[2]={0,0}, sPMRef1[2]={0,0}, sPMRef2[2]={0,0}; 
  
  Int_t digNentries = digitsTree->GetEntries();
  Float_t ootDigi[kNch]; Int_t i=0;
  // -- Reading out-of-time signals (last kNch entries) for current event
  if(fPedSubMode==1){
    for(Int_t iDigit=kNch; iDigit<digNentries; iDigit++){
       if(i<=kNch) ootDigi[i-1] = digitsTree->GetEntry(iDigit);
       else AliWarning(" Can't read more out of time values: index>kNch !!!\n");
       i++;
    }
  }
  
  for(Int_t iDigit=0; iDigit<(digNentries/2); iDigit++) {
   digitsTree->GetEntry(iDigit);
   if (!pdigit) continue;
   //  
   Int_t det = digit.GetSector(0);
   Int_t quad = digit.GetSector(1);
   Int_t pedindex = -1;
   Float_t ped2SubHg=0., ped2SubLg=0.;
   if(quad!=5){
     if(det==1)      pedindex = quad;
     else if(det==2) pedindex = quad+5;
     else if(det==3) pedindex = quad+9;
     else if(det==4) pedindex = quad+12;
     else if(det==5) pedindex = quad+17;
   }
   else pedindex = (det-1)/3+22;
   //
   if(fPedSubMode==0){
     ped2SubHg = meanPed[pedindex];
     ped2SubLg = meanPed[pedindex+kNch];
   }
   else if(fPedSubMode==1){
     ped2SubHg = corrCoeff1[pedindex]*ootDigi[pedindex]+corrCoeff0[pedindex];
     ped2SubLg = corrCoeff1[pedindex+kNch]*ootDigi[pedindex+kNch]+corrCoeff0[pedindex+kNch];
   }
      
   if(quad != 5){ // ZDC (not reference PTMs!)
    if(det == 1){ // *** ZNC
       tZN1Corr[quad] = (Float_t) (digit.GetADCValue(0)-ped2SubHg);
       tZN1Corr[quad+5] = (Float_t) (digit.GetADCValue(1)-ped2SubLg);
    }
    else if(det == 2){ // *** ZP1
       tZP1Corr[quad] = (Float_t) (digit.GetADCValue(0)-ped2SubHg);
       tZP1Corr[quad+5] = (Float_t) (digit.GetADCValue(1)-ped2SubLg);
    }
    else if(det == 3){
       if(quad == 1){	    // *** ZEM1  
         dZEM1Corr[0] += (Float_t) (digit.GetADCValue(0)-ped2SubHg); 
         dZEM1Corr[1] += (Float_t) (digit.GetADCValue(1)-ped2SubLg); 
       }
       else if(quad == 2){  // *** ZEM2
         dZEM2Corr[0] += (Float_t) (digit.GetADCValue(0)-ped2SubHg); 
         dZEM2Corr[1] += (Float_t) (digit.GetADCValue(1)-ped2SubLg); 
       }
    }
    else if(det == 4){  // *** ZN2
       tZN2Corr[quad] = (Float_t) (digit.GetADCValue(0)-ped2SubHg);
       tZN2Corr[quad+5] = (Float_t) (digit.GetADCValue(1)-ped2SubLg);
   }
    else if(det == 5){  // *** ZP2 
       tZP2Corr[quad] = (Float_t) (digit.GetADCValue(0)-ped2SubHg);
       tZP2Corr[quad+5] = (Float_t) (digit.GetADCValue(1)-ped2SubLg);
    }
   }
   else{ // Reference PMs
     if(det == 1){
       sPMRef1[0] = (Float_t) (digit.GetADCValue(0)-ped2SubHg);
       sPMRef1[1] = (Float_t) (digit.GetADCValue(1)-ped2SubLg);
     }
     else if(det == 4){
       sPMRef2[0] = (Float_t) (digit.GetADCValue(0)-ped2SubHg);
       sPMRef2[1] = (Float_t) (digit.GetADCValue(1)-ped2SubLg);
     }
   }

   // Ch. debug
   /*printf("AliZDCReconstructor: digit #%d det %d quad %d pedHG %1.0f pedLG %1.0f\n",
   	 iDigit, det, quad, ped2SubHg, ped2SubLg);
   printf(" -> pedindex %d\n", pedindex);
   printf("   HGChain -> RawDig %d DigCorr %1.2f", 
   	digit.GetADCValue(0), digit.GetADCValue(0)-ped2SubHg); 
   printf("   LGChain -> RawDig %d DigCorr %1.2f\n", 
   	digit.GetADCValue(1), digit.GetADCValue(1)-ped2SubLg);*/ 
   
  }//digits loop
 
  UInt_t counts[32];
  Int_t  tdc[32][4];
  for(Int_t jj=0; jj<32; jj++){
    counts[jj]=0;
    for(Int_t ii=0; ii<4; ii++) tdc[jj][ii]=0;
  }
  
  Int_t  evQualityBlock[4] = {1,0,0,0};
  Int_t  triggerBlock[4] = {0,0,0,0};
  Int_t  chBlock[3] = {0,0,0};
  UInt_t puBits=0;
  
  // reconstruct the event
  if(fRecoMode==1)
    ReconstructEventpp(clustersTree, tZN1Corr, tZP1Corr, tZN2Corr, tZP2Corr, 
      dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, 
      kFALSE, counts, tdc,
      evQualityBlock,  triggerBlock,  chBlock, puBits);
  else if(fRecoMode==2)
    ReconstructEventPbPb(clustersTree, tZN1Corr, tZP1Corr, tZN2Corr, tZP2Corr, 
      dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, 
      kFALSE, counts, tdc,
      evQualityBlock,  triggerBlock,  chBlock, puBits);    
}

//_____________________________________________________________________________
void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const
{
  // *** ZDC raw data reconstruction
  // Works on the current event
  
  // Retrieving calibration data  
  // Parameters for pedestal subtraction
  int const kNch = 24;
  Float_t meanPed[2*kNch];    
  for(Int_t jj=0; jj<2*kNch; jj++) meanPed[jj] = fPedData->GetMeanPed(jj);
  // Parameters pedestal subtraction through correlation with out-of-time signals
  Float_t corrCoeff0[2*kNch], corrCoeff1[2*kNch];
  for(Int_t jj=0; jj<2*kNch; jj++){
     corrCoeff0[jj] =  fPedData->GetPedCorrCoeff0(jj);
     corrCoeff1[jj] =  fPedData->GetPedCorrCoeff1(jj);
     //printf("  %d   %1.4f  %1.4f\n", jj,corrCoeff0[jj],corrCoeff1[jj]);
  }

  Int_t adcZN1[5], adcZN1oot[5], adcZN1lg[5], adcZN1ootlg[5];
  Int_t adcZP1[5], adcZP1oot[5], adcZP1lg[5], adcZP1ootlg[5];
  Int_t adcZN2[5], adcZN2oot[5], adcZN2lg[5], adcZN2ootlg[5];
  Int_t adcZP2[5], adcZP2oot[5], adcZP2lg[5], adcZP2ootlg[5];
  Int_t adcZEM[2], adcZEMoot[2], adcZEMlg[2], adcZEMootlg[2];
  Int_t pmRef[2], pmRefoot[2], pmReflg[2], pmRefootlg[2];
  for(Int_t ich=0; ich<5; ich++){
    adcZN1[ich] = adcZN1oot[ich] = adcZN1lg[ich] = adcZN1ootlg[ich] = 0;
    adcZP1[ich] = adcZP1oot[ich] = adcZP1lg[ich] = adcZP1ootlg[ich] = 0;
    adcZN2[ich] = adcZN2oot[ich] = adcZN2lg[ich] = adcZN2ootlg[ich] = 0;
    adcZP2[ich] = adcZP2oot[ich] = adcZP2lg[ich] = adcZP2ootlg[ich] = 0;
    if(ich<2){
      adcZEM[ich] = adcZEMoot[ich] = adcZEMlg[ich] = adcZEMootlg[ich] = 0;
      pmRef[ich] = pmRefoot[ich] = pmReflg[ich] = pmRefootlg[ich] = 0;
    }
  }
  
  Float_t tZN1Corr[10], tZP1Corr[10], tZN2Corr[10], tZP2Corr[10]; 
  for(Int_t i=0; i<10; i++) tZN1Corr[i] = tZP1Corr[i] = tZN2Corr[i] = tZP2Corr[i] = 0.;
  Float_t dZEM1Corr[2]={0,0}, dZEM2Corr[2]={0,0}, sPMRef1[2]={0,0}, sPMRef2[2]={0,0}; 

  Bool_t isScalerOn=kFALSE;
  Int_t jsc=0, itdc=0, iprevtdc=-1, ihittdc=0;
  UInt_t scalerData[32];
  Int_t tdcData[32][4];	
  for(Int_t k=0; k<32; k++){
    scalerData[k]=0;
    for(Int_t i=0; i<4; i++) tdcData[k][i]=0;
  }
  
  
  Int_t  evQualityBlock[4] = {1,0,0,0};
  Int_t  triggerBlock[4] = {0,0,0,0};
  Int_t  chBlock[3] = {0,0,0};
  UInt_t puBits=0;

  Int_t kFirstADCGeo=0, kLastADCGeo=3, kScalerGeo=8, kZDCTDCGeo=4, kPUGeo=29;
  //Int_t kTrigScales=30, kTrigHistory=31;

  // loop over raw data
  //rawReader->Reset();
  AliZDCRawStream rawData(rawReader);
  while(rawData.Next()){
   
   // ***************************** Reading ADCs
   if((rawData.GetADCModule()>=kFirstADCGeo) && (rawData.GetADCModule()<=kLastADCGeo)){    
    //printf(" **** Reading ADC raw data from module %d **** \n",rawData.GetADCModule());
    //
    if((rawData.IsADCDataWord()) && (rawData.GetNChannelsOn()<48))    chBlock[0] = kTRUE;
    if((rawData.IsADCDataWord()) && (rawData.IsOverflow() == kTRUE))  chBlock[1] = kTRUE;
    if((rawData.IsADCDataWord()) && (rawData.IsUnderflow() == kTRUE)) chBlock[2] = kTRUE;
    if((rawData.IsADCDataWord()) && (rawData.IsADCEventGood() == kTRUE)) evQualityBlock[0] = kTRUE;
    
    if((rawData.IsADCDataWord()) && (rawData.IsUnderflow()==kFALSE) 
        && (rawData.IsOverflow()==kFALSE) && (rawData.IsADCEventGood()==kTRUE)){
     
      Int_t adcMod = rawData.GetADCModule();
      Int_t det = rawData.GetSector(0);
      Int_t quad = rawData.GetSector(1);
      Int_t gain = rawData.GetADCGain();
      Int_t pedindex=0;
      //
      // Mean pedestal value subtraction -------------------------------------------------------
      if(fPedSubMode == 0){
       //  **** Pb-Pb data taking 2010 -> subtracting some ch. from correlation ****
       // Not interested in o.o.t. signals (ADC modules 2, 3)
       //if(adcMod == 2 || adcMod == 3) continue;
       //  **** Pb-Pb data taking 2011 -> subtracting only ZEM from correlation ****
       if(det==3){
	 if(adcMod==0 || adcMod==1){
	   if(gain==0) adcZEM[quad-1] = rawData.GetADCValue();
           else adcZEMlg[quad-1] = rawData.GetADCValue();
	 }
	 else if(adcMod==2 || adcMod==3){ 
	   if(gain==0) adcZEMoot[quad-1] = rawData.GetADCValue();
           else adcZEMootlg[quad-1] = rawData.GetADCValue();
	 }
       }
       // When oot values are read the ADC modules 2, 3 can be skipped!!!
       if(adcMod == 2 || adcMod == 3) continue;
       
       // *************************************************************************
       if(quad != 5){ // ZDCs (not reference PTMs)
        if(det==1){    
          pedindex = quad;
          if(gain == 0) tZN1Corr[quad]  += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]); 
          else tZN1Corr[quad+5]  += (Float_t) (rawData.GetADCValue()-meanPed[pedindex+kNch]); 
        }
        else if(det==2){ 
          pedindex = quad+5;
          if(gain == 0) tZP1Corr[quad]  += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]); 
          else tZP1Corr[quad+5]  += (Float_t) (rawData.GetADCValue()-meanPed[pedindex+kNch]); 
        }
        /*else if(det == 3){ 
          pedindex = quad+9;
          if(quad==1){     
            if(gain == 0) dZEM1Corr[0] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]); 
            else dZEM1Corr[1] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex+kNch]); 
          }
          else if(quad==2){ 
            if(gain == 0) dZEM2Corr[0] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]); 
            else dZEM2Corr[1] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex+kNch]); 
          }
        }*/
        else if(det == 4){	 
          pedindex = quad+12;
          if(gain == 0) tZN2Corr[quad]  += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]); 
          else tZN2Corr[quad+5]  += (Float_t) (rawData.GetADCValue()-meanPed[pedindex+kNch]); 
        }
        else if(det == 5){
          pedindex = quad+17;
          if(gain == 0) tZP2Corr[quad]  += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]); 
          else tZP2Corr[quad+5]  += (Float_t) (rawData.GetADCValue()-meanPed[pedindex+kNch]); 
        }
       }
       else{ // reference PM
         pedindex = (det-1)/3 + 22;
         if(det == 1){
           if(gain==0) sPMRef1[0] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]);
	   else sPMRef1[1] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex+kNch]);
         }
         else if(det == 4){
           if(gain==0) sPMRef2[0] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]);
      	   else sPMRef2[1] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex+kNch]);
         }
       }
       // Ch. debug
       /*if(gain==0){
         printf(" AliZDCReconstructor: det %d quad %d res %d -> Pedestal[%d] %1.0f", 
           det,quad,gain, pedindex, meanPed[pedindex]);
         printf("   RawADC %d ADCCorr %1.0f\n", 
           rawData.GetADCValue(), rawData.GetADCValue()-meanPed[pedindex]);
       }*/ 
      }// mean pedestal subtraction
      // Pedestal subtraction from correlation ------------------------------------------------
      else if(fPedSubMode == 1){
       // In time signals
       if(adcMod==0 || adcMod==1){
         if(quad != 5){ // signals from ZDCs
           if(det == 1){
	     if(gain==0) adcZN1[quad] = rawData.GetADCValue();
             else adcZN1lg[quad] = rawData.GetADCValue();
	   }
	   else if(det == 2){
	     if(gain==0) adcZP1[quad] = rawData.GetADCValue();
             else adcZP1lg[quad] = rawData.GetADCValue();
	   }
	   else if(det == 3){
	     if(gain==0) adcZEM[quad-1] = rawData.GetADCValue();
             else adcZEMlg[quad-1] = rawData.GetADCValue();
	   }
	   else if(det == 4){
	     if(gain==0) adcZN2[quad] = rawData.GetADCValue();
             else adcZN2lg[quad] = rawData.GetADCValue();
	   }
	   else if(det == 5){
	     if(gain==0) adcZP2[quad] = rawData.GetADCValue();
             else adcZP2lg[quad] = rawData.GetADCValue();
	   }
	 }
	 else{ // signals from reference PM
	    if(gain==0) pmRef[quad-1] = rawData.GetADCValue();
            else pmReflg[quad-1] = rawData.GetADCValue();
	 }
       }
       // Out-of-time pedestals
       else if(adcMod==2 || adcMod==3){
         if(quad != 5){ // signals from ZDCs
           if(det == 1){
	     if(gain==0) adcZN1oot[quad] = rawData.GetADCValue();
             else adcZN1ootlg[quad] = rawData.GetADCValue();
	   }
	   else if(det == 2){
	     if(gain==0) adcZP1oot[quad] = rawData.GetADCValue();
             else adcZP1ootlg[quad] = rawData.GetADCValue();
	   }
	   else if(det == 3){
	     if(gain==0) adcZEMoot[quad-1] = rawData.GetADCValue();
             else adcZEMootlg[quad-1] = rawData.GetADCValue();
	   }
	   else if(det == 4){
	     if(gain==0) adcZN2oot[quad] = rawData.GetADCValue();
             else adcZN2ootlg[quad] = rawData.GetADCValue();
	   }
	   else if(det == 5){
	     if(gain==0) adcZP2oot[quad] = rawData.GetADCValue();
             else adcZP2ootlg[quad] = rawData.GetADCValue();
	   }
	 }
	 else{ // signals from reference PM
	    if(gain==0) pmRefoot[quad-1] = rawData.GetADCValue();
            else pmRefootlg[quad-1] = rawData.GetADCValue();
	 }
       }
      } // pedestal subtraction from correlation
      // Ch. debug
      /*printf("\t AliZDCReconstructor: det %d quad %d res %d -> Ped[%d] = %1.0f\n", 
        det,quad,gain, pedindex, meanPed[pedindex]);*/
    }//IsADCDataWord
   }// ADC DATA
   // ***************************** Reading Scaler
   else if(rawData.GetADCModule()==kScalerGeo){
     if(rawData.IsScalerWord()==kTRUE){
       isScalerOn = kTRUE;
       scalerData[jsc] = rawData.GetTriggerCount();
       // Ch. debug
       //printf("   Reconstructed VME Scaler: %d %d  ",jsc,scalerData[jsc]);
       //
       jsc++;
     }
   }// VME SCALER DATA
   // ***************************** Reading ZDC TDC
   else if(rawData.GetADCModule()==kZDCTDCGeo && rawData.IsZDCTDCDatum()==kTRUE){
       itdc = rawData.GetChannel(); 
       if(itdc==iprevtdc) ihittdc++;
       else ihittdc=0;
       iprevtdc=itdc;
       if(ihittdc<4) tdcData[itdc][ihittdc] = rawData.GetZDCTDCDatum();
       // Ch. debug
       //if(ihittdc==0) printf("   TDC%d %d  ",itdc, tdcData[itdc][ihittdc]);
   }// ZDC TDC DATA
   // ***************************** Reading PU
   else if(rawData.GetADCModule()==kPUGeo){
     puBits = rawData.GetDetectorPattern();
   }
    // ***************************** Reading trigger history
   else if(rawData.IstriggerHistoryWord()==kTRUE){
     triggerBlock[0] = rawData.IsCPTInputEMDTrigger();
     triggerBlock[1] = rawData.IsCPTInputSemiCentralTrigger();
     triggerBlock[2] = rawData.IsCPTInputCentralTrigger();
     triggerBlock[3] = rawData.IsCPTInputMBTrigger();
   }
  
  }//loop on raw data
  
  if(fPedSubMode==1){
    for(Int_t t=0; t<5; t++){
       tZN1Corr[t] = adcZN1[t] - (corrCoeff1[t]*adcZN1oot[t]+corrCoeff0[t]);
       tZN1Corr[t+5] = adcZN1lg[t] - (corrCoeff1[t+kNch]*adcZN1ootlg[t]+corrCoeff0[t+kNch]);
       //
       tZP1Corr[t] = adcZP1[t] - (corrCoeff1[t+5]*adcZP1oot[t]+corrCoeff0[t+5]);
       tZP1Corr[t+5] = adcZP1lg[t] - (corrCoeff1[t+5+kNch]*adcZP1ootlg[t]+corrCoeff0[t+5+kNch]);
       //
       tZN2Corr[t] = adcZN2[t] - (corrCoeff1[t+12]*adcZN2oot[t]+corrCoeff0[t+12]);
       tZN2Corr[t+5] = adcZN2lg[t] - (corrCoeff1[t+12+kNch]*adcZN2ootlg[t]+corrCoeff0[t+12+kNch]);
       //
       tZP2Corr[t] = adcZP2[t] - (corrCoeff1[t+17]*adcZP2oot[t]+corrCoeff0[t+17]);
       tZP2Corr[t+5] = adcZP2lg[t] - (corrCoeff1[t+17+kNch]*adcZP2ootlg[t]+corrCoeff0[t+17+kNch]);
    }
    dZEM1Corr[0] = adcZEM[0]   - (corrCoeff1[10]*adcZEMoot[0]+corrCoeff0[10]);
    dZEM1Corr[1] = adcZEMlg[0] - (corrCoeff1[10+kNch]*adcZEMootlg[0]+corrCoeff0[10+kNch]);
    dZEM2Corr[0] = adcZEM[1]   - (corrCoeff1[11]*adcZEMoot[1]+corrCoeff0[11]);
    dZEM2Corr[1] = adcZEMlg[1] - (corrCoeff1[11+kNch]*adcZEMootlg[1]+corrCoeff0[11+kNch]);
    //
    sPMRef1[0] = pmRef[0]   - (corrCoeff1[22]*pmRefoot[0]+corrCoeff0[22]);
    sPMRef1[1] = pmReflg[0] - (corrCoeff1[22+kNch]*pmRefootlg[0]+corrCoeff0[22+kNch]);
    sPMRef2[0] = pmRef[0]   - (corrCoeff1[23]*pmRefoot[1]+corrCoeff0[23]);
    sPMRef2[1] = pmReflg[0] - (corrCoeff1[23+kNch]*pmRefootlg[1]+corrCoeff0[23+kNch]);
  }
  if(fPedSubMode==0 && fRecoMode==2){
    //  **** Pb-Pb data taking 2011 -> subtracting some ch. from correlation ****
    //tZN1Corr[0] = adcZN1[0] - (corrCoeff1[0]*adcZN1oot[0]+corrCoeff0[0]);
    //tZN1Corr[5] = adcZN1lg[0] - (corrCoeff1[kNch]*adcZN1ootlg[0]+corrCoeff0[kNch]);
    // Ch. debug
    //printf(" adcZN1 %d  adcZN1oot %d tZN1Corr %1.2f \n", adcZN1[0],adcZN1oot[0],tZN1Corr[0]);
    //printf(" adcZN1lg %d  adcZN1ootlg %d tZN1Corrlg %1.2f \n", adcZN1lg[0],adcZN1ootlg[0],tZN1Corr[5]);
    //
    //tZP1Corr[2] = adcZP1[2] - (corrCoeff1[2+5]*adcZP1oot[2]+corrCoeff0[2+5]);
    //tZP1Corr[2+5] = adcZP1lg[2] - (corrCoeff1[2+5+kNch]*adcZP1ootlg[2]+corrCoeff0[2+5+kNch]);
    //
    dZEM1Corr[0] = adcZEM[0]   - (corrCoeff1[10]*adcZEMoot[0]+corrCoeff0[10]);
    dZEM1Corr[1] = adcZEMlg[0] - (corrCoeff1[10+kNch]*adcZEMootlg[0]+corrCoeff0[10+kNch]);
    dZEM2Corr[0] = adcZEM[1]   - (corrCoeff1[11]*adcZEMoot[1]+corrCoeff0[11]);
    dZEM2Corr[1] = adcZEMlg[1] - (corrCoeff1[11+kNch]*adcZEMootlg[1]+corrCoeff0[11+kNch]);
    // *************************************************************************
  }
  /*else if(fPedSubMode==0 && fRecoMode==1){
    //  **** p-p data taking 2011 -> temporary patch to overcome DA problem ****
    //
    dZEM1Corr[0] = adcZEM[0]   - meanPed[10];
    dZEM1Corr[1] = adcZEMlg[0] - meanPed[10+kNch];
    dZEM2Corr[0] = adcZEM[1]   - meanPed[11];
    dZEM2Corr[1] = adcZEMlg[1] - meanPed[11+kNch];
        // *************************************************************************
  }*/
    
  if(fRecoMode==1) // p-p data
    ReconstructEventpp(clustersTree, tZN1Corr, tZP1Corr, tZN2Corr, tZP2Corr, 
      dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, 
      isScalerOn, scalerData, tdcData,
      evQualityBlock, triggerBlock, chBlock, puBits);
  else if(fRecoMode==2) // Pb-Pb data
      ReconstructEventPbPb(clustersTree, tZN1Corr, tZP1Corr, tZN2Corr, tZP2Corr, 
      dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, 
      isScalerOn, scalerData,  tdcData,
      evQualityBlock, triggerBlock, chBlock, puBits);
}

//_____________________________________________________________________________
void AliZDCReconstructor::ReconstructEventpp(TTree *clustersTree, 
	const Float_t* const corrADCZN1, const Float_t* const corrADCZP1, 
	const Float_t* const corrADCZN2, const Float_t* const corrADCZP2,
	const Float_t* const corrADCZEM1, const Float_t* const corrADCZEM2,
	Float_t* sPMRef1, Float_t* sPMRef2, Bool_t isScalerOn, UInt_t* scaler, 
	Int_t tdcData[32][4], const Int_t* const evQualityBlock, 
	const Int_t* const triggerBlock, const Int_t* const chBlock, UInt_t puBits) const
{
  // ****************** Reconstruct one event ******************
  
  // CH. debug
  /*printf("\n*************************************************\n");
  printf(" ReconstructEventpp -> values after pedestal subtraction:\n");
  printf(" ADCZN1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	corrADCZN1[0],corrADCZN1[1],corrADCZN1[2],corrADCZN1[3],corrADCZN1[4]);
  printf(" ADCZP1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	corrADCZP1[0],corrADCZP1[1],corrADCZP1[2],corrADCZP1[3],corrADCZP1[4]);
  printf(" ADCZN2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	corrADCZN2[0],corrADCZN2[1],corrADCZN2[2],corrADCZN2[3],corrADCZN2[4]);
  printf(" ADCZP2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	corrADCZP2[0],corrADCZP2[1],corrADCZP2[2],corrADCZP2[3],corrADCZP2[4]);
  printf(" ADCZEM1 [%1.2f] ADCZEM2 [%1.2f] \n",corrADCZEM1[0],corrADCZEM2[0]);
  printf("*************************************************\n");*/
    
  // ---------------------- Setting reco flags for ESD
  UInt_t rFlags[32];
  for(Int_t ifl=0; ifl<32; ifl++) rFlags[ifl]=0;
  
  if(evQualityBlock[0] == 1) rFlags[31] = 0x0;
  else rFlags[31] = 0x1;
  //
  if(evQualityBlock[1] == 1) rFlags[30] = 0x1;
  if(evQualityBlock[2] == 1) rFlags[29] = 0x1;
  if(evQualityBlock[3] == 1) rFlags[28] = 0x1;

  if(triggerBlock[0] == 1) rFlags[27] = 0x1;
  if(triggerBlock[1] == 1) rFlags[26] = 0x1;
  if(triggerBlock[2] == 1) rFlags[25] = 0x1;
  if(triggerBlock[3] == 1) rFlags[24] = 0x1;
  
  if(chBlock[0] == 1) rFlags[18] = 0x1;
  if(chBlock[1] == 1) rFlags[17] = 0x1;
  if(chBlock[2] == 1) rFlags[16] = 0x1;
  
  
  rFlags[13] = puBits & 0x00000020;
  rFlags[12] = puBits & 0x00000010;
  rFlags[11] = puBits & 0x00000080;
  rFlags[10] = puBits & 0x00000040;
  rFlags[9]  = puBits & 0x00000020;
  rFlags[8]  = puBits & 0x00000010;
  
  if(corrADCZP1[0]>fSignalThreshold)  rFlags[5] = 0x1;
  if(corrADCZN1[0]>fSignalThreshold)  rFlags[4] = 0x1;
  if(corrADCZEM2[0]>fSignalThreshold) rFlags[3] = 0x1;
  if(corrADCZEM1[0]>fSignalThreshold) rFlags[2] = 0x1;
  if(corrADCZP2[0]>fSignalThreshold)  rFlags[1] = 0x1;
  if(corrADCZN2[0]>fSignalThreshold)  rFlags[0] = 0x1;

  UInt_t recoFlag = rFlags[31] << 31 | rFlags[30] << 30 | rFlags[29] << 29 | rFlags[28] << 28 |
             rFlags[27] << 27 | rFlags[26] << 26 | rFlags[25] << 25 | rFlags[24] << 24 |
	     0x0 << 23 | 0x0 << 22 | 0x0 << 21 | 0x0 << 20 |
	     0x0 << 19 | rFlags[18] << 18 |  rFlags[17] << 17 |  rFlags[16] << 16 |
	     0x0 << 15 | 0x0 << 14 | rFlags[13] << 13 | rFlags[12] << 12 | 
             rFlags[11] << 11 |rFlags[10] << 10 | rFlags[9] << 9 | rFlags[8] << 8 |
	     0x0 << 7 | 0x0 << 6 | rFlags[5] << 5 | rFlags[4] << 4 | 
	     rFlags[3] << 3 | rFlags[2] << 2 | rFlags[1] << 1 | rFlags[0];
  // --------------------------------------------------

  // ******	Retrieving calibration data 
  // --- Equalization coefficients ---------------------------------------------
  Float_t equalCoeffZN1[5], equalCoeffZP1[5], equalCoeffZN2[5], equalCoeffZP2[5];
  for(Int_t ji=0; ji<5; ji++){
     equalCoeffZN1[ji] = fTowCalibData->GetZN1EqualCoeff(ji);
     equalCoeffZP1[ji] = fTowCalibData->GetZP1EqualCoeff(ji); 
     equalCoeffZN2[ji] = fTowCalibData->GetZN2EqualCoeff(ji); 
     equalCoeffZP2[ji] = fTowCalibData->GetZP2EqualCoeff(ji); 
  }
  // --- Energy calibration factors ------------------------------------
  Float_t calibEne[6], calibSatZNA[4], calibSatZNC[4];
  // **** Energy calibration coefficient set to 1 
  // **** (no trivial way to calibrate in p-p runs)
  for(Int_t ij=0; ij<6; ij++) calibEne[ij] = fEnCalibData->GetEnCalib(ij);
  for(Int_t ij=0; ij<4; ij++){
    calibSatZNA[ij] = fSatCalibData->GetZNASatCalib(ij);
    calibSatZNC[ij] = fSatCalibData->GetZNCSatCalib(ij);
  }
  
  // ******	Equalization of detector responses
  Float_t equalTowZN1[10], equalTowZN2[10], equalTowZP1[10], equalTowZP2[10];
  for(Int_t gi=0; gi<10; gi++){
     if(gi<5){
       equalTowZN1[gi] = corrADCZN1[gi]*equalCoeffZN1[gi];
       equalTowZP1[gi] = corrADCZP1[gi]*equalCoeffZP1[gi];
       equalTowZN2[gi] = corrADCZN2[gi]*equalCoeffZN2[gi];
       equalTowZP2[gi] = corrADCZP2[gi]*equalCoeffZP2[gi];
     }
     else{
       equalTowZN1[gi] = corrADCZN1[gi]*equalCoeffZN1[gi-5];
       equalTowZP1[gi] = corrADCZP1[gi]*equalCoeffZP1[gi-5];
       equalTowZN2[gi] = corrADCZN2[gi]*equalCoeffZN2[gi-5];
       equalTowZP2[gi] = corrADCZP2[gi]*equalCoeffZP2[gi-5];
     }
  }
  // Ch. debug
  /*printf("\n ------------- EQUALIZATION -------------\n");
  printf(" ADCZN1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	equalTowZN1[0],equalTowZN1[1],equalTowZN1[2],equalTowZN1[3],equalTowZN1[4]);
  printf(" ADCZP1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	equalTowZP1[0],equalTowZP1[1],equalTowZP1[2],equalTowZP1[3],equalTowZP1[4]);
  printf(" ADCZN2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	equalTowZN2[0],equalTowZN2[1],equalTowZN2[2],equalTowZN2[3],equalTowZN2[4]);
  printf(" ADCZP2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	equalTowZP2[0],equalTowZP2[1],equalTowZP2[2],equalTowZP2[3],equalTowZP2[4]);
  printf(" ----------------------------------------\n");*/
  
  //  *** p-A RUN 2013 -> new calibration object
  //      to take into account saturation in ZN PMC
  //   -> 5th order pol. fun. to be applied BEFORE en. calibration 
  equalTowZN1[0] = equalTowZN1[0] + calibSatZNC[0]*equalTowZN1[0]*equalTowZN1[0] +
  	calibSatZNC[1]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0] +
	calibSatZNC[2]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0] +
	calibSatZNC[3]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0];
  equalTowZN2[0] = equalTowZN2[0] + calibSatZNA[0]*equalTowZN2[0]*equalTowZN2[0] +
  	calibSatZNA[1]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0] +
	calibSatZNA[2]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0] +
	calibSatZNA[3]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0];

  // Ch. debug
  /*printf("\n ------------- SATURATION CORRECTION -------------\n");
  printf(" ZNC PMC %1.2f\n", equalTowZN1[0]);
  printf(" ZNA PMC %1.2f\n", equalTowZN2[0]);
  printf(" ----------------------------------------\n");*/
  
  // ******	Summed response for hadronic calorimeter (SUMMED and then CALIBRATED!)
  Float_t calibSumZN1[]={0,0}, calibSumZN2[]={0,0}, calibSumZP1[]={0,0}, calibSumZP2[]={0,0};
  for(Int_t gi=0; gi<5; gi++){
       calibSumZN1[0] += equalTowZN1[gi];
       calibSumZP1[0] += equalTowZP1[gi];
       calibSumZN2[0] += equalTowZN2[gi];
       calibSumZP2[0] += equalTowZP2[gi];
       //
       calibSumZN1[1] += equalTowZN1[gi+5];
       calibSumZP1[1] += equalTowZP1[gi+5];
       calibSumZN2[1] += equalTowZN2[gi+5];
       calibSumZP2[1] += equalTowZP2[gi+5];
  }
  // High gain chain
  calibSumZN1[0] = calibSumZN1[0]*calibEne[0];
  calibSumZP1[0] = calibSumZP1[0]*calibEne[1];
  calibSumZN2[0] = calibSumZN2[0]*calibEne[2];
  calibSumZP2[0] = calibSumZP2[0]*calibEne[3];
  // Low gain chain
  calibSumZN1[1] = calibSumZN1[1]*calibEne[0];
  calibSumZP1[1] = calibSumZP1[1]*calibEne[1];
  calibSumZN2[1] = calibSumZN2[1]*calibEne[2];
  calibSumZP2[1] = calibSumZP2[1]*calibEne[3];
  
  // ******	Energy calibration of detector responses
  Float_t calibTowZN1[10], calibTowZN2[10], calibTowZP1[10], calibTowZP2[10];
  for(Int_t gi=0; gi<5; gi++){
     // High gain chain
     calibTowZN1[gi] = equalTowZN1[gi]*calibEne[0];
     calibTowZP1[gi] = equalTowZP1[gi]*calibEne[1];
     calibTowZN2[gi] = equalTowZN2[gi]*calibEne[2];
     calibTowZP2[gi] = equalTowZP2[gi]*calibEne[3];
     // Low gain chain
     calibTowZN1[gi+5] = equalTowZN1[gi+5]*calibEne[0];
     calibTowZP1[gi+5] = equalTowZP1[gi+5]*calibEne[1];
     calibTowZN2[gi+5] = equalTowZN2[gi+5]*calibEne[2];
     calibTowZP2[gi+5] = equalTowZP2[gi+5]*calibEne[3];
  }
  //
  Float_t calibZEM1[]={0,0}, calibZEM2[]={0,0};
  calibZEM1[0] = corrADCZEM1[0]*calibEne[4];
  calibZEM1[1] = corrADCZEM1[1]*calibEne[4];
  calibZEM2[0] = corrADCZEM2[0]*calibEne[5];
  calibZEM2[1] = corrADCZEM2[1]*calibEne[5];
  // Ch. debug
  /*printf("\n ------------- CALIBRATION -------------\n");
  printf(" ADCZN1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	calibTowZN1[0],calibTowZN1[1],calibTowZN1[2],calibTowZN1[3],calibTowZN1[4]);
  printf(" ADCZP1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	calibTowZP1[0],calibTowZP1[1],calibTowZP1[2],calibTowZP1[3],calibTowZP1[4]);
  printf(" ADCZN2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	calibTowZN2[0],calibTowZN2[1],calibTowZN2[2],calibTowZN2[3],calibTowZN2[4]);
  printf(" ADCZP2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	calibTowZP2[0],calibTowZP2[1],calibTowZP2[2],calibTowZP2[3],calibTowZP2[4]);
  printf(" ADCZEM1 [%1.2f] ADCZEM2 [%1.2f] \n",calibZEM1[0],calibZEM2[0]);
  printf(" ----------------------------------------\n");*/
  
  //  ******	No. of spectator and participants nucleons
  //  Variables calculated to comply with ESD structure
  //  *** N.B. -> They have a meaning only in Pb-Pb!!!!!!!!!!!!
  Int_t nDetSpecNLeft=0, nDetSpecPLeft=0, nDetSpecNRight=0, nDetSpecPRight=0;
  Int_t nGenSpec=0, nGenSpecLeft=0, nGenSpecRight=0;
  Int_t nPart=0, nPartTotLeft=0, nPartTotRight=0;
  Double_t impPar=0., impPar1=0., impPar2=0.;
  
  Bool_t energyFlag = kFALSE;
  // create the output tree
  AliZDCReco* reco = new AliZDCReco(calibSumZN1, calibSumZP1, calibSumZN2, calibSumZP2, 
  		   calibTowZN1, calibTowZP1, calibTowZN2, calibTowZP2, 
		   calibZEM1, calibZEM2, sPMRef1, sPMRef2,
		   nDetSpecNLeft, nDetSpecPLeft, nDetSpecNRight, nDetSpecPRight, 
		   nGenSpec, nGenSpecLeft, nGenSpecRight, 
		   nPart, nPartTotLeft, nPartTotRight, 
		   impPar, impPar1, impPar2,
		   recoFlag, energyFlag, isScalerOn, scaler, tdcData);
		  
  const Int_t kBufferSize = 4000;
  clustersTree->Branch("ZDC", "AliZDCReco", &reco, kBufferSize);
  // write the output tree
  clustersTree->Fill();
  delete reco;
}

//_____________________________________________________________________________
void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree, 
	const Float_t* const corrADCZN1, const Float_t* const corrADCZP1, 
	const Float_t* const corrADCZN2, const Float_t* const corrADCZP2,
	const Float_t* const corrADCZEM1, const Float_t* const corrADCZEM2,
	Float_t* sPMRef1, Float_t* sPMRef2, Bool_t isScalerOn, UInt_t* scaler, 
	Int_t tdcData[32][4], const Int_t* const evQualityBlock, 
	const Int_t* const triggerBlock, const Int_t* const chBlock, UInt_t puBits) const
{
  // ****************** Reconstruct one event ******************
  // ---------------------- Setting reco flags for ESD
  UInt_t rFlags[32];
  for(Int_t ifl=0; ifl<32; ifl++) rFlags[ifl]=0;
  
  if(evQualityBlock[0] == 1) rFlags[31] = 0x0;
  else rFlags[31] = 0x1;
  //
  if(evQualityBlock[1] == 1) rFlags[30] = 0x1;
  if(evQualityBlock[2] == 1) rFlags[29] = 0x1;
  if(evQualityBlock[3] == 1) rFlags[28] = 0x1;

  if(triggerBlock[0] == 1) rFlags[27] = 0x1;
  if(triggerBlock[1] == 1) rFlags[26] = 0x1;
  if(triggerBlock[2] == 1) rFlags[25] = 0x1;
  if(triggerBlock[3] == 1) rFlags[24] = 0x1;
  
  if(chBlock[0] == 1) rFlags[18] = 0x1;
  if(chBlock[1] == 1) rFlags[17] = 0x1;
  if(chBlock[2] == 1) rFlags[16] = 0x1;
  
  rFlags[13] = puBits & 0x00000020;
  rFlags[12] = puBits & 0x00000010;
  rFlags[11] = puBits & 0x00000080;
  rFlags[10] = puBits & 0x00000040;
  rFlags[9]  = puBits & 0x00000020;
  rFlags[8]  = puBits & 0x00000010;  
  
  if(corrADCZP1[0]>fSignalThreshold)  rFlags[5] = 0x1;
  if(corrADCZN1[0]>fSignalThreshold)  rFlags[4] = 0x1;
  if(corrADCZEM2[0]>fSignalThreshold) rFlags[3] = 0x1;
  if(corrADCZEM1[0]>fSignalThreshold) rFlags[2] = 0x1;
  if(corrADCZP2[0]>fSignalThreshold)  rFlags[1] = 0x1;
  if(corrADCZN2[0]>fSignalThreshold)  rFlags[0] = 0x1;

  UInt_t recoFlag = rFlags[31] << 31 | rFlags[30] << 30 | rFlags[29] << 29 | rFlags[28] << 28 |
             rFlags[27] << 27 | rFlags[26] << 26 | rFlags[25] << 25 | rFlags[24] << 24 |
	     0x0 << 23 | 0x0 << 22 | 0x0 << 21 | 0x0 << 20 |
	     0x0 << 19 | rFlags[18] << 18 |  rFlags[17] << 17 |  rFlags[16] << 16 |
	     0x0 << 15 | 0x0 << 14 | rFlags[13] << 13 | rFlags[12] << 12 | 
             rFlags[11] << 11 |rFlags[10] << 10 | rFlags[9] << 9 | rFlags[8] << 8 |
	     0x0 << 7 | 0x0 << 6 | rFlags[5] << 5 | rFlags[4] << 4 | 
	     rFlags[3] << 3 | rFlags[2] << 2 | rFlags[1] << 1 | rFlags[0];
  // --------------------------------------------------
  
  
  // CH. debug
/*  printf("\n*************************************************\n");
  printf(" ReconstructEventPbPb -> values after pedestal subtraction:\n");
  printf(" ADCZN1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	corrADCZN1[0],corrADCZN1[1],corrADCZN1[2],corrADCZN1[3],corrADCZN1[4]);
  printf(" ADCZP1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	corrADCZP1[0],corrADCZP1[1],corrADCZP1[2],corrADCZP1[3],corrADCZP1[4]);
  printf(" ADCZN2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	corrADCZN2[0],corrADCZN2[1],corrADCZN2[2],corrADCZN2[3],corrADCZN2[4]);
  printf(" ADCZP2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	corrADCZP2[0],corrADCZP2[1],corrADCZP2[2],corrADCZP2[3],corrADCZP2[4]);
  printf(" ADCZEM1 [%1.2f] ADCZEM2 [%1.2f] \n",corrADCZEM1[0],corrADCZEM2[0]);
  printf("*************************************************\n");
*/
  // ******	Retrieving calibration data 
  // --- Equalization coefficients ---------------------------------------------
  Float_t equalCoeffZN1[5], equalCoeffZP1[5], equalCoeffZN2[5], equalCoeffZP2[5];
  for(Int_t ji=0; ji<5; ji++){
     equalCoeffZN1[ji] = fTowCalibData->GetZN1EqualCoeff(ji);
     equalCoeffZP1[ji] = fTowCalibData->GetZP1EqualCoeff(ji); 
     equalCoeffZN2[ji] = fTowCalibData->GetZN2EqualCoeff(ji); 
     equalCoeffZP2[ji] = fTowCalibData->GetZP2EqualCoeff(ji); 
  }
  // --- Energy calibration factors ------------------------------------
  Float_t calibEne[6], calibSatZNA[4], calibSatZNC[4];
  // **** Energy calibration coefficient set to 1 
  // **** (no trivial way to calibrate in p-p runs)
  for(Int_t ij=0; ij<6; ij++) calibEne[ij] = fEnCalibData->GetEnCalib(ij);
  for(Int_t ij=0; ij<4; ij++){
    calibSatZNA[ij] = fSatCalibData->GetZNASatCalib(ij);
    calibSatZNC[ij] = fSatCalibData->GetZNCSatCalib(ij);
  }
  
  // ******	Equalization of detector responses
  Float_t equalTowZN1[10], equalTowZN2[10], equalTowZP1[10], equalTowZP2[10];
  for(Int_t gi=0; gi<10; gi++){
     if(gi<5){
       equalTowZN1[gi] = corrADCZN1[gi]*equalCoeffZN1[gi];
       equalTowZP1[gi] = corrADCZP1[gi]*equalCoeffZP1[gi];
       equalTowZN2[gi] = corrADCZN2[gi]*equalCoeffZN2[gi];
       equalTowZP2[gi] = corrADCZP2[gi]*equalCoeffZP2[gi];
     }
     else{
       equalTowZN1[gi] = corrADCZN1[gi]*equalCoeffZN1[gi-5];
       equalTowZP1[gi] = corrADCZP1[gi]*equalCoeffZP1[gi-5];
       equalTowZN2[gi] = corrADCZN2[gi]*equalCoeffZN2[gi-5];
       equalTowZP2[gi] = corrADCZP2[gi]*equalCoeffZP2[gi-5];
     }
  }
  
  // Ch. debug
/*  printf("\n ------------- EQUALIZATION -------------\n");
  printf(" ADCZN1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	equalTowZN1[0],equalTowZN1[1],equalTowZN1[2],equalTowZN1[3],equalTowZN1[4]);
  printf(" ADCZP1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	equalTowZP1[0],equalTowZP1[1],equalTowZP1[2],equalTowZP1[3],equalTowZP1[4]);
  printf(" ADCZN2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	equalTowZN2[0],equalTowZN2[1],equalTowZN2[2],equalTowZN2[3],equalTowZN2[4]);
  printf(" ADCZP2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	equalTowZP2[0],equalTowZP2[1],equalTowZP2[2],equalTowZP2[3],equalTowZP2[4]);
  printf(" ----------------------------------------\n");
*/
  
  //  *** p-A RUN 2013 -> new calibration object
  //      to take into account saturation in ZN PMC
  //   -> 5th order pol. fun. to be applied BEFORE en. calibration 
  equalTowZN1[0] = equalTowZN1[0] + calibSatZNC[0]*equalTowZN1[0]*equalTowZN1[0] +
  	calibSatZNC[1]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0] +
	calibSatZNC[2]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0] +
	calibSatZNC[3]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0];
  equalTowZN2[0] = equalTowZN2[0] + calibSatZNA[0]*equalTowZN2[0]*equalTowZN2[0] +
  	calibSatZNA[1]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0] +
	calibSatZNA[2]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0] +
	calibSatZNA[3]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0];
  
  // ******	Summed response for hadronic calorimeter (SUMMED and then CALIBRATED!)
  Float_t calibSumZN1[]={0,0}, calibSumZN2[]={0,0}, calibSumZP1[]={0,0}, calibSumZP2[]={0,0};
  for(Int_t gi=0; gi<5; gi++){
       calibSumZN1[0] += equalTowZN1[gi];
       calibSumZP1[0] += equalTowZP1[gi];
       calibSumZN2[0] += equalTowZN2[gi];
       calibSumZP2[0] += equalTowZP2[gi];
       //
       calibSumZN1[1] += equalTowZN1[gi+5];
       calibSumZP1[1] += equalTowZP1[gi+5];
       calibSumZN2[1] += equalTowZN2[gi+5];
       calibSumZP2[1] += equalTowZP2[gi+5];
  }
  //
  //fEnCalibData->Print("");
  
  // High gain chain
  calibSumZN1[0] = calibSumZN1[0]*calibEne[0]*8.;
  calibSumZP1[0] = calibSumZP1[0]*calibEne[1]*8.;
  calibSumZN2[0] = calibSumZN2[0]*calibEne[2]*8.;
  calibSumZP2[0] = calibSumZP2[0]*calibEne[3]*8.;
  // Low gain chain
  calibSumZN1[1] = calibSumZN1[1]*calibEne[0];
  calibSumZP1[1] = calibSumZP1[1]*calibEne[1];
  calibSumZN2[1] = calibSumZN2[1]*calibEne[2];
  calibSumZP2[1] = calibSumZP2[1]*calibEne[3];
  //
  Float_t calibZEM1[]={0,0}, calibZEM2[]={0,0};
  calibZEM1[0] = corrADCZEM1[0]*calibEne[4];
  calibZEM1[1] = corrADCZEM1[1]*calibEne[4];
  calibZEM2[0] = corrADCZEM2[0]*calibEne[5];
  calibZEM2[1] = corrADCZEM2[1]*calibEne[5];
    
  // ******	Energy calibration of detector responses
  Float_t calibTowZN1[10], calibTowZN2[10], calibTowZP1[10], calibTowZP2[10];
  for(Int_t gi=0; gi<5; gi++){
     // High gain chain
     calibTowZN1[gi] = equalTowZN1[gi]*2*calibEne[0]*8.;
     calibTowZP1[gi] = equalTowZP1[gi]*2*calibEne[1]*8.;
     calibTowZN2[gi] = equalTowZN2[gi]*2*calibEne[2]*8.;
     calibTowZP2[gi] = equalTowZP2[gi]*2*calibEne[3]*8.;
     // Low gain chain
     calibTowZN1[gi+5] = equalTowZN1[gi+5]*2*calibEne[0];
     calibTowZP1[gi+5] = equalTowZP1[gi+5]*2*calibEne[1];
     calibTowZN2[gi+5] = equalTowZN2[gi+5]*2*calibEne[2];
     calibTowZP2[gi+5] = equalTowZP2[gi+5]*2*calibEne[3];
  }

  // Ch. debug
/*  printf("\n ------------- CALIBRATION -------------\n");
  printf(" ADCZN1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	calibTowZN1[0],calibTowZN1[1],calibTowZN1[2],calibTowZN1[3],calibTowZN1[4]);
  printf(" ADCZP1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	calibTowZP1[0],calibTowZP1[1],calibTowZP1[2],calibTowZP1[3],calibTowZP1[4]);
  printf(" ADCZN2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	calibTowZN2[0],calibTowZN2[1],calibTowZN2[2],calibTowZN2[3],calibTowZN2[4]);
  printf(" ADCZP2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
  	calibTowZP2[0],calibTowZP2[1],calibTowZP2[2],calibTowZP2[3],calibTowZP2[4]);
  printf(" ADCZEM1 [%1.2f] ADCZEM2 [%1.2f] \n",calibZEM1[0],calibZEM2[0]);
  printf(" ----------------------------------------\n");
*/  
  //  ******	Number of detected spectator nucleons
  Int_t nDetSpecNLeft=0, nDetSpecPLeft=0, nDetSpecNRight=0, nDetSpecPRight=0;
  if(fBeamEnergy>0.01){
    nDetSpecNLeft = (Int_t) (calibSumZN1[0]/fBeamEnergy);
    nDetSpecPLeft = (Int_t) (calibSumZP1[0]/fBeamEnergy);
    nDetSpecNRight = (Int_t) (calibSumZN2[0]/fBeamEnergy);
    nDetSpecPRight = (Int_t) (calibSumZP2[0]/fBeamEnergy);
  }
  else AliWarning(" ATTENTION!!! fBeamEnergy=0 -> N_spec will be ZERO!!! \n");
  /*printf("\n\t AliZDCReconstructor -> fBeamEnergy %1.0f: nDetSpecNsideA %d, nDetSpecPsideA %d,"
    " nDetSpecNsideC %d, nDetSpecPsideC %d\n",fBeamEnergy,nDetSpecNLeft, nDetSpecPLeft, 
    nDetSpecNRight, nDetSpecPRight);*/
  
  Int_t nGenSpec=0, nGenSpecA=0, nGenSpecC=0;
  Int_t nPart=0, nPartA=0, nPartC=0;
  Double_t b=0., bA=0., bC=0.;
  
  if(fIsCalibrationMB == kFALSE){
   // ******   Reconstruction parameters ------------------ 
   if(!fgRecoParam) fgRecoParam = const_cast<AliZDCRecoParam*>(GetRecoParam());
   if(!fgRecoParam){  
     AliError("  RecoParam object not retrieved correctly: not reconstructing ZDC event!!!");
     return;
   }
   TH1D* hNpartDist = fgRecoParam->GethNpartDist();
   TH1D*   hbDist = fgRecoParam->GethbDist();	 
   Float_t  fClkCenter = fgRecoParam->GetClkCenter();
   if(!hNpartDist || !hbDist){  
      AliError("Something wrong in Glauber MC histos got from AliZDCREcoParamPbPb: NO EVENT RECO FOR ZDC DATA!!!\n\n");
      //return;
   }
   else{  
    if(!fgMBCalibData) fgMBCalibData = const_cast<AliZDCMBCalib*>(GetMBCalibData()); 
    TH2F *hZDCvsZEM  = fgMBCalibData->GethZDCvsZEM();
    TH2F *hZDCCvsZEM = fgMBCalibData->GethZDCCvsZEM();
    TH2F *hZDCAvsZEM = fgMBCalibData->GethZDCAvsZEM();
    //
    Double_t xHighEdge = hZDCvsZEM->GetXaxis()->GetXmax();
    Double_t origin = xHighEdge*fClkCenter;
    // Ch. debug
    //printf("\n\n  xHighEdge %1.2f, origin %1.4f \n", xHighEdge, origin);
    //
    // ====> Summed ZDC info (sideA+side C)
    TF1 *line = new TF1("line","[0]*x+[1]",0.,xHighEdge);
    Float_t y = (calibSumZN1[0]+calibSumZP1[0]+calibSumZN2[0]+calibSumZP2[0])/1000.;
    Float_t x = (calibZEM1[0]+calibZEM2[0])/1000.;
    line->SetParameter(0, y/(x-origin));
    line->SetParameter(1, -origin*y/(x-origin));
    // Ch. debug
    //printf("  ***************** Summed ZDC info (sideA+side C) \n");
    //printf("  E_{ZEM} %1.4f, E_{ZDC} %1.2f, TF1: %1.2f*x + %1.2f   ", x, y,y/(x-origin),-origin*y/(x-origin));
    //
    Double_t countPerc=0;
    Double_t xBinCenter=0, yBinCenter=0;
    for(Int_t nbinx=1; nbinx<=hZDCvsZEM->GetNbinsX(); nbinx++){
      for(Int_t nbiny=1; nbiny<=hZDCvsZEM->GetNbinsY(); nbiny++){
         xBinCenter = hZDCvsZEM->GetXaxis()->GetBinCenter(nbinx);
         yBinCenter = hZDCvsZEM->GetYaxis()->GetBinCenter(nbiny);
         //
	 if(line->GetParameter(0)>0){
           if(yBinCenter < (line->GetParameter(0)*xBinCenter + line->GetParameter(1))){
             countPerc += hZDCvsZEM->GetBinContent(nbinx,nbiny);
             // Ch. debug
             //printf(" xBinCenter  %1.3f, yBinCenter %1.0f,  countPerc %1.0f\n", 
	 	//xBinCenter, yBinCenter, countPerc);
           }
   	 }
   	 else{
   	   if(yBinCenter > (line->GetParameter(0)*xBinCenter + line->GetParameter(1))){
   	     countPerc += hZDCvsZEM->GetBinContent(nbinx,nbiny);
             // Ch. debug
             //printf(" xBinCenter  %1.3f, yBinCenter %1.0f,  countPerc %1.0f\n", 
	 	//xBinCenter, yBinCenter, countPerc);
   	   }
   	 }
      }
    }
    //
    Double_t xSecPerc = 0.;
    if(hZDCvsZEM->GetEntries()!=0){ 
      xSecPerc = countPerc/hZDCvsZEM->GetEntries();
    }
    else{
      AliWarning("  Histogram hZDCvsZEM from OCDB has no entries!!!");
    }
    // Ch. debug
    //printf("  xSecPerc %1.4f  \n", xSecPerc);

    // ====> side C
    TF1 *lineC = new TF1("lineC","[0]*x+[1]",0.,xHighEdge);
    Float_t yC = (calibSumZN1[0]+calibSumZP1[0])/1000.;
    lineC->SetParameter(0, yC/(x-origin));
    lineC->SetParameter(1, -origin*yC/(x-origin));
    // Ch. debug
    //printf("  ***************** Side C \n");
    //printf("  E_{ZEM} %1.4f, E_{ZDCC} %1.2f, TF1: %1.2f*x + %1.2f   ", x, yC,yC/(x-origin),-origin*yC/(x-origin));
    //
    Double_t countPercC=0;
    Double_t xBinCenterC=0, yBinCenterC=0;
    for(Int_t nbinx=1; nbinx<=hZDCCvsZEM->GetNbinsX(); nbinx++){
      for(Int_t nbiny=1; nbiny<=hZDCCvsZEM->GetNbinsY(); nbiny++){
    	 xBinCenterC = hZDCCvsZEM->GetXaxis()->GetBinCenter(nbinx);
    	 yBinCenterC = hZDCCvsZEM->GetYaxis()->GetBinCenter(nbiny);
    	 if(lineC->GetParameter(0)>0){
           if(yBinCenterC < (lineC->GetParameter(0)*xBinCenterC + lineC->GetParameter(1))){
             countPercC += hZDCCvsZEM->GetBinContent(nbinx,nbiny);
           }
    	 }
    	 else{
    	   if(yBinCenterC > (lineC->GetParameter(0)*xBinCenterC + lineC->GetParameter(1))){
    	     countPercC += hZDCCvsZEM->GetBinContent(nbinx,nbiny);
    	   }
    	 }
      }
    }
    //
    Double_t xSecPercC = 0.;
    if(hZDCCvsZEM->GetEntries()!=0){ 
      xSecPercC = countPercC/hZDCCvsZEM->GetEntries();
    }
    else{
      AliWarning("  Histogram hZDCCvsZEM from OCDB has no entries!!!");
    }
    // Ch. debug
    //printf("  xSecPercC %1.4f  \n", xSecPercC);
    
    // ====> side A
    TF1 *lineA = new TF1("lineA","[0]*x+[1]",0.,xHighEdge);
    Float_t yA = (calibSumZN2[0]+calibSumZP2[0])/1000.;
    lineA->SetParameter(0, yA/(x-origin));
    lineA->SetParameter(1, -origin*yA/(x-origin));
    //
    // Ch. debug
    //printf("  ***************** Side A \n");
    //printf("  E_{ZEM} %1.4f, E_{ZDCA} %1.2f, TF1: %1.2f*x + %1.2f   ", x, yA,yA/(x-origin),-origin*yA/(x-origin));
    //
    Double_t countPercA=0;
    Double_t xBinCenterA=0, yBinCenterA=0;
    for(Int_t nbinx=1; nbinx<=hZDCAvsZEM->GetNbinsX(); nbinx++){
      for(Int_t nbiny=1; nbiny<=hZDCAvsZEM->GetNbinsY(); nbiny++){
    	 xBinCenterA = hZDCAvsZEM->GetXaxis()->GetBinCenter(nbinx);
    	 yBinCenterA = hZDCAvsZEM->GetYaxis()->GetBinCenter(nbiny);
    	 if(lineA->GetParameter(0)>0){
           if(yBinCenterA < (lineA->GetParameter(0)*xBinCenterA + lineA->GetParameter(1))){
             countPercA += hZDCAvsZEM->GetBinContent(nbinx,nbiny);
           }
   	 }
   	 else{
   	   if(yBinCenterA > (lineA->GetParameter(0)*xBinCenterA + lineA->GetParameter(1))){
   	     countPercA += hZDCAvsZEM->GetBinContent(nbinx,nbiny);
   	   }
   	 }
      }
    }
    //
    Double_t xSecPercA = 0.;
    if(hZDCAvsZEM->GetEntries()!=0){ 
      xSecPercA = countPercA/hZDCAvsZEM->GetEntries();
    }
    else{
      AliWarning("  Histogram hZDCAvsZEM from OCDB has no entries!!!");
    }
    // Ch. debug
    //printf("  xSecPercA %1.4f  \n", xSecPercA);
    
    //  ******    Number of participants (from E_ZDC vs. E_ZEM correlation)
    Double_t nPartFrac=0., nPartFracC=0., nPartFracA=0.;
    for(Int_t npbin=1; npbin<hNpartDist->GetNbinsX(); npbin++){
      nPartFrac += (hNpartDist->GetBinContent(npbin))/(hNpartDist->GetEntries());
      if((1.-nPartFrac) < xSecPerc){
    	nPart = (Int_t) hNpartDist->GetBinLowEdge(npbin);
        // Ch. debug
        //printf("  ***************** Summed ZDC info (sideA+side C) \n");
        //printf("  nPartFrac %1.4f, nPart %d\n", nPartFrac, nPart);
    	break;
      }
    }
    if(nPart<0) nPart=0;
    //
    for(Int_t npbin=1; npbin<hNpartDist->GetNbinsX(); npbin++){
      nPartFracC += (hNpartDist->GetBinContent(npbin))/(hNpartDist->GetEntries());
      if((1.-nPartFracC) < xSecPercC){
    	nPartC = (Int_t) hNpartDist->GetBinLowEdge(npbin);
        // Ch. debug
        //printf("  ***************** Side C \n");
        //printf("  nPartFracC %1.4f, nPartC %d\n", nPartFracC, nPartC);
    	break;
    }
    }
    if(nPartC<0) nPartC=0;
    //
    for(Int_t npbin=1; npbin<hNpartDist->GetNbinsX(); npbin++){
      nPartFracA += (hNpartDist->GetBinContent(npbin))/(hNpartDist->GetEntries());
      if((1.-nPartFracA) < xSecPercA){
    	nPartA = (Int_t) hNpartDist->GetBinLowEdge(npbin);
        // Ch. debug
        //printf("  ***************** Side A \n");
        //printf("  nPartFracA %1.4f, nPartA %d\n\n", nPartFracA, nPartA);
        break;
      }
    }
    if(nPartA<0) nPartA=0;
    
    //  ******    Impact parameter (from E_ZDC vs. E_ZEM correlation)
    Double_t bFrac=0., bFracC=0., bFracA=0.;
    for(Int_t ibbin=1; ibbin<hbDist->GetNbinsX(); ibbin++){
      bFrac += (hbDist->GetBinContent(ibbin))/(hbDist->GetEntries());
      if(bFrac > xSecPerc){
   	b = hbDist->GetBinLowEdge(ibbin);
   	break;
      }
    }
    //
    for(Int_t ibbin=1; ibbin<hbDist->GetNbinsX(); ibbin++){
      bFracC += (hbDist->GetBinContent(ibbin))/(hbDist->GetEntries());
      if(bFracC > xSecPercC){
   	bC = hbDist->GetBinLowEdge(ibbin);
   	break;
      }
    }
    //
    for(Int_t ibbin=1; ibbin<hbDist->GetNbinsX(); ibbin++){
      bFracA += (hbDist->GetBinContent(ibbin))/(hbDist->GetEntries());
      if(bFracA > xSecPercA){
   	bA = hbDist->GetBinLowEdge(ibbin);
   	break;
      }
    }

    //  ******	Number of spectator nucleons 
    nGenSpec = 416 - nPart;
    nGenSpecC = 416 - nPartC;
    nGenSpecA = 416 - nPartA;
    if(nGenSpec>416) nGenSpec=416; if(nGenSpec<0) nGenSpec=0;
    if(nGenSpecC>416) nGenSpecC=416; if(nGenSpecC<0) nGenSpecC=0;
    if(nGenSpecA>416) nGenSpecA=416; if(nGenSpecA<0) nGenSpecA=0;    
    
    delete line; 
    delete lineC;  delete lineA;
   }
  } // ONLY IF fIsCalibrationMB==kFALSE
  
  Bool_t energyFlag = kTRUE;  
  AliZDCReco* reco = new AliZDCReco(calibSumZN1, calibSumZP1, calibSumZN2, calibSumZP2, 
  	  	  calibTowZN1, calibTowZP1, calibTowZN2, calibTowZP2, 
		  calibZEM1, calibZEM2, sPMRef1, sPMRef2,
		  nDetSpecNLeft, nDetSpecPLeft, nDetSpecNRight, nDetSpecPRight, 
		  nGenSpec, nGenSpecA, nGenSpecC, 
		  nPart, nPartA, nPartC, b, bA, bC,
		  recoFlag, energyFlag, isScalerOn, scaler, tdcData);
		    
  const Int_t kBufferSize = 4000;
  clustersTree->Branch("ZDC", "AliZDCReco", &reco, kBufferSize);
  //reco->Print("");
  // write the output tree
  clustersTree->Fill();
  delete reco;
}


//_____________________________________________________________________________
void AliZDCReconstructor::FillZDCintoESD(TTree *clustersTree, AliESDEvent* esd) const
{
  // fill energies and number of participants to the ESD

  // Retrieving TDC calibration data  
  // Parameters for TDC centering around zero
  int const knTDC = 6;
  Float_t tdcOffset[knTDC];
  for(Int_t jj=0; jj<knTDC; jj++) tdcOffset[jj] = fTDCCalibData->GetMeanTDC(jj);
  //fTDCCalibData->Print("");

  AliZDCReco reco;
  AliZDCReco* preco = &reco;
  clustersTree->SetBranchAddress("ZDC", &preco);
  clustersTree->GetEntry(0);
  //
  Float_t tZN1Ene[5], tZN2Ene[5], tZP1Ene[5], tZP2Ene[5];
  Float_t tZN1EneLR[5], tZN2EneLR[5], tZP1EneLR[5], tZP2EneLR[5];
  for(Int_t i=0; i<5; i++){
     tZN1Ene[i] = reco.GetZN1HREnTow(i);
     tZN2Ene[i] = reco.GetZN2HREnTow(i);
     tZP1Ene[i] = reco.GetZP1HREnTow(i);
     tZP2Ene[i] = reco.GetZP2HREnTow(i);
     //
     tZN1EneLR[i] = reco.GetZN1LREnTow(i);
     tZN2EneLR[i] = reco.GetZN2LREnTow(i);
     tZP1EneLR[i] = reco.GetZP1LREnTow(i);
     tZP2EneLR[i] = reco.GetZP2LREnTow(i);
  }
  //
  fESDZDC->SetZN1TowerEnergy(tZN1Ene);
  fESDZDC->SetZN2TowerEnergy(tZN2Ene);
  fESDZDC->SetZP1TowerEnergy(tZP1Ene);
  fESDZDC->SetZP2TowerEnergy(tZP2Ene);
  //
  fESDZDC->SetZN1TowerEnergyLR(tZN1EneLR);
  fESDZDC->SetZN2TowerEnergyLR(tZN2EneLR);
  fESDZDC->SetZP1TowerEnergyLR(tZP1EneLR);
  fESDZDC->SetZP2TowerEnergyLR(tZP2EneLR);
  // 
  Int_t nPart  = reco.GetNParticipants();
  Int_t nPartA = reco.GetNPartSideA();
  Int_t nPartC = reco.GetNPartSideC();
  Double_t b  = reco.GetImpParameter();
  Double_t bA = reco.GetImpParSideA();
  Double_t bC = reco.GetImpParSideC();
  UInt_t recoFlag = reco.GetRecoFlag();
  
  fESDZDC->SetZDC(reco.GetZN1HREnergy(), reco.GetZP1HREnergy(), 
  	reco.GetZEM1HRsignal(), reco.GetZEM2HRsignal(), 
	reco.GetZN2HREnergy(), reco.GetZP2HREnergy(), 
	nPart, nPartA, nPartC, b, bA, bC, recoFlag);
  
  // Writing ZDC scaler for cross section calculation
  // ONLY IF the scaler has been read during the event
  if(reco.IsScalerOn()==kTRUE){
    UInt_t counts[32];
    for(Int_t jk=0; jk<32; jk++) counts[jk] = reco.GetZDCScaler(jk);
    fESDZDC->SetZDCScaler(counts);
  }    
  
  Int_t tdcValues[32][4] = {{0,}}; 
  Float_t tdcCorrected[32][4] = {{9999.,}};
  for(Int_t jk=0; jk<32; jk++){
    for(Int_t lk=0; lk<4; lk++){
      tdcValues[jk][lk] = reco.GetZDCTDCData(jk, lk);
      //
      if(jk==8 && TMath::Abs(tdcValues[jk][lk])>1e-09)      fESDZDC->SetZEM1TDChit(kTRUE);
      else if(jk==9 && TMath::Abs(tdcValues[jk][lk])>1e-09) fESDZDC->SetZEM2TDChit(kTRUE);
      else if(jk==10 && TMath::Abs(tdcValues[jk][lk])>1e-09) fESDZDC->SetZNCTDChit(kTRUE);
      else if(jk==11 && TMath::Abs(tdcValues[jk][lk])>1e-09) fESDZDC->SetZPCTDChit(kTRUE);
      else if(jk==12 && TMath::Abs(tdcValues[jk][lk])>1e-09) fESDZDC->SetZNATDChit(kTRUE);
      else if(jk==13 && TMath::Abs(tdcValues[jk][lk])>1e-09) fESDZDC->SetZPATDChit(kTRUE);
      //Ch debug
      //if((jk>=8 && jk<=13 && lk==0) || jk==15) printf(" *** ZDC: tdc%d =  %d = %f ns \n",jk,tdcValues[jk][lk],0.025*tdcValues[jk][lk]);
    }
  }
  
  // Writing TDC data into ZDC ESDs
  // 4/2/2011 -> Subtracting L0 (tdcValues[15]) instead of ADC gate 
  // we try to keep the TDC oscillations as low as possible!
  for(Int_t jk=0; jk<32; jk++){
    for(Int_t lk=0; lk<4; lk++){
      if(tdcValues[jk][lk]!=0.){
        // Feb2013 _-> TDC correct entry is there ONLY IF tdc has a hit!
        if(TMath::Abs(tdcValues[jk][lk])>1e-09){
	   tdcCorrected[jk][lk] = 0.025*(tdcValues[jk][lk]-tdcValues[15][0])+fMeanPhase;
           // Sep 2011: TDC ch. from 8 to 13 centered around 0 using OCDB 
	   if(jk>=8 && jk<=13) tdcCorrected[jk][lk] =  tdcCorrected[jk][lk] - tdcOffset[jk-8];
	   //Ch. debug
	   //if(jk>=8 && jk<=13) printf(" *** tdcOffset%d %f  tdcCorr%d %f \n",jk,tdcOffset[jk-8],tdcCorrected[jk][lk]);
        }
      }
    }
  }

  fESDZDC->SetZDCTDCData(tdcValues);
  fESDZDC->SetZDCTDCCorrected(tdcCorrected);
  fESDZDC->AliESDZDC::SetBit(AliESDZDC::kCorrectedTDCFilled, reco.GetEnergyFlag());
  fESDZDC->AliESDZDC::SetBit(AliESDZDC::kEnergyCalibratedSignal, kTRUE);
  
  if(esd) esd->SetZDCData(fESDZDC);
}

//_____________________________________________________________________________
AliCDBStorage* AliZDCReconstructor::SetStorage(const char *uri) 
{
  // Setting the storage

  Bool_t deleteManager = kFALSE;
  
  AliCDBManager *manager = AliCDBManager::Instance();
  AliCDBStorage *defstorage = manager->GetDefaultStorage();
  
  if(!defstorage || !(defstorage->Contains("ZDC"))){ 
     AliWarning("No default storage set or default storage doesn't contain ZDC!");
     manager->SetDefaultStorage(uri);
     deleteManager = kTRUE;
  }
 
  AliCDBStorage *storage = manager->GetDefaultStorage();

  if(deleteManager){
    AliCDBManager::Instance()->UnsetDefaultStorage();
    defstorage = 0;   // the storage is killed by AliCDBManager::Instance()->Destroy()
  }

  return storage; 
}

//_____________________________________________________________________________
AliZDCPedestals* AliZDCReconstructor::GetPedestalData() const
{

  // Getting pedestal calibration object for ZDC set
  AliZDCPedestals *calibdata = 0x0;
  AliCDBEntry  *entry = AliCDBManager::Instance()->Get("ZDC/Calib/Pedestals");
  if(!entry) AliFatal("No calibration data loaded!");
  else{
    entry->SetOwner(kFALSE);

    calibdata = dynamic_cast<AliZDCPedestals*>  (entry->GetObject());
    if(!calibdata)  AliFatal("Wrong calibration object in calibration  file!");

  }
  return calibdata;
}

//_____________________________________________________________________________
AliZDCEnCalib* AliZDCReconstructor::GetEnergyCalibData() const
{

  // Getting energy and equalization calibration object for ZDC set
  AliZDCEnCalib *calibdata = 0x0;
  AliCDBEntry  *entry = AliCDBManager::Instance()->Get("ZDC/Calib/EnergyCalib");
  if(!entry) AliFatal("No calibration data loaded!");  
  else{
    entry->SetOwner(kFALSE);

    calibdata = dynamic_cast<AliZDCEnCalib*> (entry->GetObject());
    if(!calibdata)  AliFatal("Wrong calibration object in calibration  file!");
  }
  return calibdata;
}

//_____________________________________________________________________________
AliZDCSaturationCalib* AliZDCReconstructor::GetSaturationCalibData() const
{

  // Getting energy and equalization calibration object for ZDC set
  AliZDCSaturationCalib *calibdata = 0x0;
  AliCDBEntry  *entry = AliCDBManager::Instance()->Get("ZDC/Calib/SaturationCalib");
  if(!entry) AliFatal("No calibration data loaded!");  
  else{
    entry->SetOwner(kFALSE);

    calibdata = dynamic_cast<AliZDCSaturationCalib*> (entry->GetObject());
    if(!calibdata)  AliFatal("Wrong calibration object in calibration  file!");
  }
  return calibdata;
}

//_____________________________________________________________________________
AliZDCTowerCalib* AliZDCReconstructor::GetTowerCalibData() const
{

  // Getting energy and equalization calibration object for ZDC set
  AliZDCTowerCalib *calibdata = 0x0;
  AliCDBEntry  *entry = AliCDBManager::Instance()->Get("ZDC/Calib/TowerCalib");
  if(!entry) AliFatal("No calibration data loaded!");  
  else{
    entry->SetOwner(kFALSE);

    calibdata = dynamic_cast<AliZDCTowerCalib*> (entry->GetObject());
    if(!calibdata)  AliFatal("Wrong calibration object in calibration  file!");
  }
  return calibdata;
}

//_____________________________________________________________________________
AliZDCMBCalib* AliZDCReconstructor::GetMBCalibData() const
{

  // Getting energy and equalization calibration object for ZDC set
  AliZDCMBCalib *calibdata = 0x0;
  AliCDBEntry  *entry = AliCDBManager::Instance()->Get("ZDC/Calib/MBCalib");
  if(!entry) AliFatal("No calibration data loaded!");  
  else{
    entry->SetOwner(kFALSE);

    calibdata = dynamic_cast<AliZDCMBCalib*> (entry->GetObject());
    if(!calibdata)  AliFatal("Wrong calibration object in calibration  file!");
  }
  return calibdata;
}

//_____________________________________________________________________________
AliZDCTDCCalib* AliZDCReconstructor::GetTDCCalibData() const
{

  // Getting TDC object for ZDC 
  AliZDCTDCCalib *calibdata = 0x0;
  AliCDBEntry  *entry = AliCDBManager::Instance()->Get("ZDC/Calib/TDCCalib");
  if(!entry) AliFatal("No calibration data loaded!");  
  else{
    entry->SetOwner(kFALSE);

    calibdata = dynamic_cast<AliZDCTDCCalib*> (entry->GetObject());
    if(!calibdata)  AliFatal("Wrong calibration object in calibration  file!");

  }
  return calibdata;
}
 AliZDCReconstructor.cxx:1
 AliZDCReconstructor.cxx:2
 AliZDCReconstructor.cxx:3
 AliZDCReconstructor.cxx:4
 AliZDCReconstructor.cxx:5
 AliZDCReconstructor.cxx:6
 AliZDCReconstructor.cxx:7
 AliZDCReconstructor.cxx:8
 AliZDCReconstructor.cxx:9
 AliZDCReconstructor.cxx:10
 AliZDCReconstructor.cxx:11
 AliZDCReconstructor.cxx:12
 AliZDCReconstructor.cxx:13
 AliZDCReconstructor.cxx:14
 AliZDCReconstructor.cxx:15
 AliZDCReconstructor.cxx:16
 AliZDCReconstructor.cxx:17
 AliZDCReconstructor.cxx:18
 AliZDCReconstructor.cxx:19
 AliZDCReconstructor.cxx:20
 AliZDCReconstructor.cxx:21
 AliZDCReconstructor.cxx:22
 AliZDCReconstructor.cxx:23
 AliZDCReconstructor.cxx:24
 AliZDCReconstructor.cxx:25
 AliZDCReconstructor.cxx:26
 AliZDCReconstructor.cxx:27
 AliZDCReconstructor.cxx:28
 AliZDCReconstructor.cxx:29
 AliZDCReconstructor.cxx:30
 AliZDCReconstructor.cxx:31
 AliZDCReconstructor.cxx:32
 AliZDCReconstructor.cxx:33
 AliZDCReconstructor.cxx:34
 AliZDCReconstructor.cxx:35
 AliZDCReconstructor.cxx:36
 AliZDCReconstructor.cxx:37
 AliZDCReconstructor.cxx:38
 AliZDCReconstructor.cxx:39
 AliZDCReconstructor.cxx:40
 AliZDCReconstructor.cxx:41
 AliZDCReconstructor.cxx:42
 AliZDCReconstructor.cxx:43
 AliZDCReconstructor.cxx:44
 AliZDCReconstructor.cxx:45
 AliZDCReconstructor.cxx:46
 AliZDCReconstructor.cxx:47
 AliZDCReconstructor.cxx:48
 AliZDCReconstructor.cxx:49
 AliZDCReconstructor.cxx:50
 AliZDCReconstructor.cxx:51
 AliZDCReconstructor.cxx:52
 AliZDCReconstructor.cxx:53
 AliZDCReconstructor.cxx:54
 AliZDCReconstructor.cxx:55
 AliZDCReconstructor.cxx:56
 AliZDCReconstructor.cxx:57
 AliZDCReconstructor.cxx:58
 AliZDCReconstructor.cxx:59
 AliZDCReconstructor.cxx:60
 AliZDCReconstructor.cxx:61
 AliZDCReconstructor.cxx:62
 AliZDCReconstructor.cxx:63
 AliZDCReconstructor.cxx:64
 AliZDCReconstructor.cxx:65
 AliZDCReconstructor.cxx:66
 AliZDCReconstructor.cxx:67
 AliZDCReconstructor.cxx:68
 AliZDCReconstructor.cxx:69
 AliZDCReconstructor.cxx:70
 AliZDCReconstructor.cxx:71
 AliZDCReconstructor.cxx:72
 AliZDCReconstructor.cxx:73
 AliZDCReconstructor.cxx:74
 AliZDCReconstructor.cxx:75
 AliZDCReconstructor.cxx:76
 AliZDCReconstructor.cxx:77
 AliZDCReconstructor.cxx:78
 AliZDCReconstructor.cxx:79
 AliZDCReconstructor.cxx:80
 AliZDCReconstructor.cxx:81
 AliZDCReconstructor.cxx:82
 AliZDCReconstructor.cxx:83
 AliZDCReconstructor.cxx:84
 AliZDCReconstructor.cxx:85
 AliZDCReconstructor.cxx:86
 AliZDCReconstructor.cxx:87
 AliZDCReconstructor.cxx:88
 AliZDCReconstructor.cxx:89
 AliZDCReconstructor.cxx:90
 AliZDCReconstructor.cxx:91
 AliZDCReconstructor.cxx:92
 AliZDCReconstructor.cxx:93
 AliZDCReconstructor.cxx:94
 AliZDCReconstructor.cxx:95
 AliZDCReconstructor.cxx:96
 AliZDCReconstructor.cxx:97
 AliZDCReconstructor.cxx:98
 AliZDCReconstructor.cxx:99
 AliZDCReconstructor.cxx:100
 AliZDCReconstructor.cxx:101
 AliZDCReconstructor.cxx:102
 AliZDCReconstructor.cxx:103
 AliZDCReconstructor.cxx:104
 AliZDCReconstructor.cxx:105
 AliZDCReconstructor.cxx:106
 AliZDCReconstructor.cxx:107
 AliZDCReconstructor.cxx:108
 AliZDCReconstructor.cxx:109
 AliZDCReconstructor.cxx:110
 AliZDCReconstructor.cxx:111
 AliZDCReconstructor.cxx:112
 AliZDCReconstructor.cxx:113
 AliZDCReconstructor.cxx:114
 AliZDCReconstructor.cxx:115
 AliZDCReconstructor.cxx:116
 AliZDCReconstructor.cxx:117
 AliZDCReconstructor.cxx:118
 AliZDCReconstructor.cxx:119
 AliZDCReconstructor.cxx:120
 AliZDCReconstructor.cxx:121
 AliZDCReconstructor.cxx:122
 AliZDCReconstructor.cxx:123
 AliZDCReconstructor.cxx:124
 AliZDCReconstructor.cxx:125
 AliZDCReconstructor.cxx:126
 AliZDCReconstructor.cxx:127
 AliZDCReconstructor.cxx:128
 AliZDCReconstructor.cxx:129
 AliZDCReconstructor.cxx:130
 AliZDCReconstructor.cxx:131
 AliZDCReconstructor.cxx:132
 AliZDCReconstructor.cxx:133
 AliZDCReconstructor.cxx:134
 AliZDCReconstructor.cxx:135
 AliZDCReconstructor.cxx:136
 AliZDCReconstructor.cxx:137
 AliZDCReconstructor.cxx:138
 AliZDCReconstructor.cxx:139
 AliZDCReconstructor.cxx:140
 AliZDCReconstructor.cxx:141
 AliZDCReconstructor.cxx:142
 AliZDCReconstructor.cxx:143
 AliZDCReconstructor.cxx:144
 AliZDCReconstructor.cxx:145
 AliZDCReconstructor.cxx:146
 AliZDCReconstructor.cxx:147
 AliZDCReconstructor.cxx:148
 AliZDCReconstructor.cxx:149
 AliZDCReconstructor.cxx:150
 AliZDCReconstructor.cxx:151
 AliZDCReconstructor.cxx:152
 AliZDCReconstructor.cxx:153
 AliZDCReconstructor.cxx:154
 AliZDCReconstructor.cxx:155
 AliZDCReconstructor.cxx:156
 AliZDCReconstructor.cxx:157
 AliZDCReconstructor.cxx:158
 AliZDCReconstructor.cxx:159
 AliZDCReconstructor.cxx:160
 AliZDCReconstructor.cxx:161
 AliZDCReconstructor.cxx:162
 AliZDCReconstructor.cxx:163
 AliZDCReconstructor.cxx:164
 AliZDCReconstructor.cxx:165
 AliZDCReconstructor.cxx:166
 AliZDCReconstructor.cxx:167
 AliZDCReconstructor.cxx:168
 AliZDCReconstructor.cxx:169
 AliZDCReconstructor.cxx:170
 AliZDCReconstructor.cxx:171
 AliZDCReconstructor.cxx:172
 AliZDCReconstructor.cxx:173
 AliZDCReconstructor.cxx:174
 AliZDCReconstructor.cxx:175
 AliZDCReconstructor.cxx:176
 AliZDCReconstructor.cxx:177
 AliZDCReconstructor.cxx:178
 AliZDCReconstructor.cxx:179
 AliZDCReconstructor.cxx:180
 AliZDCReconstructor.cxx:181
 AliZDCReconstructor.cxx:182
 AliZDCReconstructor.cxx:183
 AliZDCReconstructor.cxx:184
 AliZDCReconstructor.cxx:185
 AliZDCReconstructor.cxx:186
 AliZDCReconstructor.cxx:187
 AliZDCReconstructor.cxx:188
 AliZDCReconstructor.cxx:189
 AliZDCReconstructor.cxx:190
 AliZDCReconstructor.cxx:191
 AliZDCReconstructor.cxx:192
 AliZDCReconstructor.cxx:193
 AliZDCReconstructor.cxx:194
 AliZDCReconstructor.cxx:195
 AliZDCReconstructor.cxx:196
 AliZDCReconstructor.cxx:197
 AliZDCReconstructor.cxx:198
 AliZDCReconstructor.cxx:199
 AliZDCReconstructor.cxx:200
 AliZDCReconstructor.cxx:201
 AliZDCReconstructor.cxx:202
 AliZDCReconstructor.cxx:203
 AliZDCReconstructor.cxx:204
 AliZDCReconstructor.cxx:205
 AliZDCReconstructor.cxx:206
 AliZDCReconstructor.cxx:207
 AliZDCReconstructor.cxx:208
 AliZDCReconstructor.cxx:209
 AliZDCReconstructor.cxx:210
 AliZDCReconstructor.cxx:211
 AliZDCReconstructor.cxx:212
 AliZDCReconstructor.cxx:213
 AliZDCReconstructor.cxx:214
 AliZDCReconstructor.cxx:215
 AliZDCReconstructor.cxx:216
 AliZDCReconstructor.cxx:217
 AliZDCReconstructor.cxx:218
 AliZDCReconstructor.cxx:219
 AliZDCReconstructor.cxx:220
 AliZDCReconstructor.cxx:221
 AliZDCReconstructor.cxx:222
 AliZDCReconstructor.cxx:223
 AliZDCReconstructor.cxx:224
 AliZDCReconstructor.cxx:225
 AliZDCReconstructor.cxx:226
 AliZDCReconstructor.cxx:227
 AliZDCReconstructor.cxx:228
 AliZDCReconstructor.cxx:229
 AliZDCReconstructor.cxx:230
 AliZDCReconstructor.cxx:231
 AliZDCReconstructor.cxx:232
 AliZDCReconstructor.cxx:233
 AliZDCReconstructor.cxx:234
 AliZDCReconstructor.cxx:235
 AliZDCReconstructor.cxx:236
 AliZDCReconstructor.cxx:237
 AliZDCReconstructor.cxx:238
 AliZDCReconstructor.cxx:239
 AliZDCReconstructor.cxx:240
 AliZDCReconstructor.cxx:241
 AliZDCReconstructor.cxx:242
 AliZDCReconstructor.cxx:243
 AliZDCReconstructor.cxx:244
 AliZDCReconstructor.cxx:245
 AliZDCReconstructor.cxx:246
 AliZDCReconstructor.cxx:247
 AliZDCReconstructor.cxx:248
 AliZDCReconstructor.cxx:249
 AliZDCReconstructor.cxx:250
 AliZDCReconstructor.cxx:251
 AliZDCReconstructor.cxx:252
 AliZDCReconstructor.cxx:253
 AliZDCReconstructor.cxx:254
 AliZDCReconstructor.cxx:255
 AliZDCReconstructor.cxx:256
 AliZDCReconstructor.cxx:257
 AliZDCReconstructor.cxx:258
 AliZDCReconstructor.cxx:259
 AliZDCReconstructor.cxx:260
 AliZDCReconstructor.cxx:261
 AliZDCReconstructor.cxx:262
 AliZDCReconstructor.cxx:263
 AliZDCReconstructor.cxx:264
 AliZDCReconstructor.cxx:265
 AliZDCReconstructor.cxx:266
 AliZDCReconstructor.cxx:267
 AliZDCReconstructor.cxx:268
 AliZDCReconstructor.cxx:269
 AliZDCReconstructor.cxx:270
 AliZDCReconstructor.cxx:271
 AliZDCReconstructor.cxx:272
 AliZDCReconstructor.cxx:273
 AliZDCReconstructor.cxx:274
 AliZDCReconstructor.cxx:275
 AliZDCReconstructor.cxx:276
 AliZDCReconstructor.cxx:277
 AliZDCReconstructor.cxx:278
 AliZDCReconstructor.cxx:279
 AliZDCReconstructor.cxx:280
 AliZDCReconstructor.cxx:281
 AliZDCReconstructor.cxx:282
 AliZDCReconstructor.cxx:283
 AliZDCReconstructor.cxx:284
 AliZDCReconstructor.cxx:285
 AliZDCReconstructor.cxx:286
 AliZDCReconstructor.cxx:287
 AliZDCReconstructor.cxx:288
 AliZDCReconstructor.cxx:289
 AliZDCReconstructor.cxx:290
 AliZDCReconstructor.cxx:291
 AliZDCReconstructor.cxx:292
 AliZDCReconstructor.cxx:293
 AliZDCReconstructor.cxx:294
 AliZDCReconstructor.cxx:295
 AliZDCReconstructor.cxx:296
 AliZDCReconstructor.cxx:297
 AliZDCReconstructor.cxx:298
 AliZDCReconstructor.cxx:299
 AliZDCReconstructor.cxx:300
 AliZDCReconstructor.cxx:301
 AliZDCReconstructor.cxx:302
 AliZDCReconstructor.cxx:303
 AliZDCReconstructor.cxx:304
 AliZDCReconstructor.cxx:305
 AliZDCReconstructor.cxx:306
 AliZDCReconstructor.cxx:307
 AliZDCReconstructor.cxx:308
 AliZDCReconstructor.cxx:309
 AliZDCReconstructor.cxx:310
 AliZDCReconstructor.cxx:311
 AliZDCReconstructor.cxx:312
 AliZDCReconstructor.cxx:313
 AliZDCReconstructor.cxx:314
 AliZDCReconstructor.cxx:315
 AliZDCReconstructor.cxx:316
 AliZDCReconstructor.cxx:317
 AliZDCReconstructor.cxx:318
 AliZDCReconstructor.cxx:319
 AliZDCReconstructor.cxx:320
 AliZDCReconstructor.cxx:321
 AliZDCReconstructor.cxx:322
 AliZDCReconstructor.cxx:323
 AliZDCReconstructor.cxx:324
 AliZDCReconstructor.cxx:325
 AliZDCReconstructor.cxx:326
 AliZDCReconstructor.cxx:327
 AliZDCReconstructor.cxx:328
 AliZDCReconstructor.cxx:329
 AliZDCReconstructor.cxx:330
 AliZDCReconstructor.cxx:331
 AliZDCReconstructor.cxx:332
 AliZDCReconstructor.cxx:333
 AliZDCReconstructor.cxx:334
 AliZDCReconstructor.cxx:335
 AliZDCReconstructor.cxx:336
 AliZDCReconstructor.cxx:337
 AliZDCReconstructor.cxx:338
 AliZDCReconstructor.cxx:339
 AliZDCReconstructor.cxx:340
 AliZDCReconstructor.cxx:341
 AliZDCReconstructor.cxx:342
 AliZDCReconstructor.cxx:343
 AliZDCReconstructor.cxx:344
 AliZDCReconstructor.cxx:345
 AliZDCReconstructor.cxx:346
 AliZDCReconstructor.cxx:347
 AliZDCReconstructor.cxx:348
 AliZDCReconstructor.cxx:349
 AliZDCReconstructor.cxx:350
 AliZDCReconstructor.cxx:351
 AliZDCReconstructor.cxx:352
 AliZDCReconstructor.cxx:353
 AliZDCReconstructor.cxx:354
 AliZDCReconstructor.cxx:355
 AliZDCReconstructor.cxx:356
 AliZDCReconstructor.cxx:357
 AliZDCReconstructor.cxx:358
 AliZDCReconstructor.cxx:359
 AliZDCReconstructor.cxx:360
 AliZDCReconstructor.cxx:361
 AliZDCReconstructor.cxx:362
 AliZDCReconstructor.cxx:363
 AliZDCReconstructor.cxx:364
 AliZDCReconstructor.cxx:365
 AliZDCReconstructor.cxx:366
 AliZDCReconstructor.cxx:367
 AliZDCReconstructor.cxx:368
 AliZDCReconstructor.cxx:369
 AliZDCReconstructor.cxx:370
 AliZDCReconstructor.cxx:371
 AliZDCReconstructor.cxx:372
 AliZDCReconstructor.cxx:373
 AliZDCReconstructor.cxx:374
 AliZDCReconstructor.cxx:375
 AliZDCReconstructor.cxx:376
 AliZDCReconstructor.cxx:377
 AliZDCReconstructor.cxx:378
 AliZDCReconstructor.cxx:379
 AliZDCReconstructor.cxx:380
 AliZDCReconstructor.cxx:381
 AliZDCReconstructor.cxx:382
 AliZDCReconstructor.cxx:383
 AliZDCReconstructor.cxx:384
 AliZDCReconstructor.cxx:385
 AliZDCReconstructor.cxx:386
 AliZDCReconstructor.cxx:387
 AliZDCReconstructor.cxx:388
 AliZDCReconstructor.cxx:389
 AliZDCReconstructor.cxx:390
 AliZDCReconstructor.cxx:391
 AliZDCReconstructor.cxx:392
 AliZDCReconstructor.cxx:393
 AliZDCReconstructor.cxx:394
 AliZDCReconstructor.cxx:395
 AliZDCReconstructor.cxx:396
 AliZDCReconstructor.cxx:397
 AliZDCReconstructor.cxx:398
 AliZDCReconstructor.cxx:399
 AliZDCReconstructor.cxx:400
 AliZDCReconstructor.cxx:401
 AliZDCReconstructor.cxx:402
 AliZDCReconstructor.cxx:403
 AliZDCReconstructor.cxx:404
 AliZDCReconstructor.cxx:405
 AliZDCReconstructor.cxx:406
 AliZDCReconstructor.cxx:407
 AliZDCReconstructor.cxx:408
 AliZDCReconstructor.cxx:409
 AliZDCReconstructor.cxx:410
 AliZDCReconstructor.cxx:411
 AliZDCReconstructor.cxx:412
 AliZDCReconstructor.cxx:413
 AliZDCReconstructor.cxx:414
 AliZDCReconstructor.cxx:415
 AliZDCReconstructor.cxx:416
 AliZDCReconstructor.cxx:417
 AliZDCReconstructor.cxx:418
 AliZDCReconstructor.cxx:419
 AliZDCReconstructor.cxx:420
 AliZDCReconstructor.cxx:421
 AliZDCReconstructor.cxx:422
 AliZDCReconstructor.cxx:423
 AliZDCReconstructor.cxx:424
 AliZDCReconstructor.cxx:425
 AliZDCReconstructor.cxx:426
 AliZDCReconstructor.cxx:427
 AliZDCReconstructor.cxx:428
 AliZDCReconstructor.cxx:429
 AliZDCReconstructor.cxx:430
 AliZDCReconstructor.cxx:431
 AliZDCReconstructor.cxx:432
 AliZDCReconstructor.cxx:433
 AliZDCReconstructor.cxx:434
 AliZDCReconstructor.cxx:435
 AliZDCReconstructor.cxx:436
 AliZDCReconstructor.cxx:437
 AliZDCReconstructor.cxx:438
 AliZDCReconstructor.cxx:439
 AliZDCReconstructor.cxx:440
 AliZDCReconstructor.cxx:441
 AliZDCReconstructor.cxx:442
 AliZDCReconstructor.cxx:443
 AliZDCReconstructor.cxx:444
 AliZDCReconstructor.cxx:445
 AliZDCReconstructor.cxx:446
 AliZDCReconstructor.cxx:447
 AliZDCReconstructor.cxx:448
 AliZDCReconstructor.cxx:449
 AliZDCReconstructor.cxx:450
 AliZDCReconstructor.cxx:451
 AliZDCReconstructor.cxx:452
 AliZDCReconstructor.cxx:453
 AliZDCReconstructor.cxx:454
 AliZDCReconstructor.cxx:455
 AliZDCReconstructor.cxx:456
 AliZDCReconstructor.cxx:457
 AliZDCReconstructor.cxx:458
 AliZDCReconstructor.cxx:459
 AliZDCReconstructor.cxx:460
 AliZDCReconstructor.cxx:461
 AliZDCReconstructor.cxx:462
 AliZDCReconstructor.cxx:463
 AliZDCReconstructor.cxx:464
 AliZDCReconstructor.cxx:465
 AliZDCReconstructor.cxx:466
 AliZDCReconstructor.cxx:467
 AliZDCReconstructor.cxx:468
 AliZDCReconstructor.cxx:469
 AliZDCReconstructor.cxx:470
 AliZDCReconstructor.cxx:471
 AliZDCReconstructor.cxx:472
 AliZDCReconstructor.cxx:473
 AliZDCReconstructor.cxx:474
 AliZDCReconstructor.cxx:475
 AliZDCReconstructor.cxx:476
 AliZDCReconstructor.cxx:477
 AliZDCReconstructor.cxx:478
 AliZDCReconstructor.cxx:479
 AliZDCReconstructor.cxx:480
 AliZDCReconstructor.cxx:481
 AliZDCReconstructor.cxx:482
 AliZDCReconstructor.cxx:483
 AliZDCReconstructor.cxx:484
 AliZDCReconstructor.cxx:485
 AliZDCReconstructor.cxx:486
 AliZDCReconstructor.cxx:487
 AliZDCReconstructor.cxx:488
 AliZDCReconstructor.cxx:489
 AliZDCReconstructor.cxx:490
 AliZDCReconstructor.cxx:491
 AliZDCReconstructor.cxx:492
 AliZDCReconstructor.cxx:493
 AliZDCReconstructor.cxx:494
 AliZDCReconstructor.cxx:495
 AliZDCReconstructor.cxx:496
 AliZDCReconstructor.cxx:497
 AliZDCReconstructor.cxx:498
 AliZDCReconstructor.cxx:499
 AliZDCReconstructor.cxx:500
 AliZDCReconstructor.cxx:501
 AliZDCReconstructor.cxx:502
 AliZDCReconstructor.cxx:503
 AliZDCReconstructor.cxx:504
 AliZDCReconstructor.cxx:505
 AliZDCReconstructor.cxx:506
 AliZDCReconstructor.cxx:507
 AliZDCReconstructor.cxx:508
 AliZDCReconstructor.cxx:509
 AliZDCReconstructor.cxx:510
 AliZDCReconstructor.cxx:511
 AliZDCReconstructor.cxx:512
 AliZDCReconstructor.cxx:513
 AliZDCReconstructor.cxx:514
 AliZDCReconstructor.cxx:515
 AliZDCReconstructor.cxx:516
 AliZDCReconstructor.cxx:517
 AliZDCReconstructor.cxx:518
 AliZDCReconstructor.cxx:519
 AliZDCReconstructor.cxx:520
 AliZDCReconstructor.cxx:521
 AliZDCReconstructor.cxx:522
 AliZDCReconstructor.cxx:523
 AliZDCReconstructor.cxx:524
 AliZDCReconstructor.cxx:525
 AliZDCReconstructor.cxx:526
 AliZDCReconstructor.cxx:527
 AliZDCReconstructor.cxx:528
 AliZDCReconstructor.cxx:529
 AliZDCReconstructor.cxx:530
 AliZDCReconstructor.cxx:531
 AliZDCReconstructor.cxx:532
 AliZDCReconstructor.cxx:533
 AliZDCReconstructor.cxx:534
 AliZDCReconstructor.cxx:535
 AliZDCReconstructor.cxx:536
 AliZDCReconstructor.cxx:537
 AliZDCReconstructor.cxx:538
 AliZDCReconstructor.cxx:539
 AliZDCReconstructor.cxx:540
 AliZDCReconstructor.cxx:541
 AliZDCReconstructor.cxx:542
 AliZDCReconstructor.cxx:543
 AliZDCReconstructor.cxx:544
 AliZDCReconstructor.cxx:545
 AliZDCReconstructor.cxx:546
 AliZDCReconstructor.cxx:547
 AliZDCReconstructor.cxx:548
 AliZDCReconstructor.cxx:549
 AliZDCReconstructor.cxx:550
 AliZDCReconstructor.cxx:551
 AliZDCReconstructor.cxx:552
 AliZDCReconstructor.cxx:553
 AliZDCReconstructor.cxx:554
 AliZDCReconstructor.cxx:555
 AliZDCReconstructor.cxx:556
 AliZDCReconstructor.cxx:557
 AliZDCReconstructor.cxx:558
 AliZDCReconstructor.cxx:559
 AliZDCReconstructor.cxx:560
 AliZDCReconstructor.cxx:561
 AliZDCReconstructor.cxx:562
 AliZDCReconstructor.cxx:563
 AliZDCReconstructor.cxx:564
 AliZDCReconstructor.cxx:565
 AliZDCReconstructor.cxx:566
 AliZDCReconstructor.cxx:567
 AliZDCReconstructor.cxx:568
 AliZDCReconstructor.cxx:569
 AliZDCReconstructor.cxx:570
 AliZDCReconstructor.cxx:571
 AliZDCReconstructor.cxx:572
 AliZDCReconstructor.cxx:573
 AliZDCReconstructor.cxx:574
 AliZDCReconstructor.cxx:575
 AliZDCReconstructor.cxx:576
 AliZDCReconstructor.cxx:577
 AliZDCReconstructor.cxx:578
 AliZDCReconstructor.cxx:579
 AliZDCReconstructor.cxx:580
 AliZDCReconstructor.cxx:581
 AliZDCReconstructor.cxx:582
 AliZDCReconstructor.cxx:583
 AliZDCReconstructor.cxx:584
 AliZDCReconstructor.cxx:585
 AliZDCReconstructor.cxx:586
 AliZDCReconstructor.cxx:587
 AliZDCReconstructor.cxx:588
 AliZDCReconstructor.cxx:589
 AliZDCReconstructor.cxx:590
 AliZDCReconstructor.cxx:591
 AliZDCReconstructor.cxx:592
 AliZDCReconstructor.cxx:593
 AliZDCReconstructor.cxx:594
 AliZDCReconstructor.cxx:595
 AliZDCReconstructor.cxx:596
 AliZDCReconstructor.cxx:597
 AliZDCReconstructor.cxx:598
 AliZDCReconstructor.cxx:599
 AliZDCReconstructor.cxx:600
 AliZDCReconstructor.cxx:601
 AliZDCReconstructor.cxx:602
 AliZDCReconstructor.cxx:603
 AliZDCReconstructor.cxx:604
 AliZDCReconstructor.cxx:605
 AliZDCReconstructor.cxx:606
 AliZDCReconstructor.cxx:607
 AliZDCReconstructor.cxx:608
 AliZDCReconstructor.cxx:609
 AliZDCReconstructor.cxx:610
 AliZDCReconstructor.cxx:611
 AliZDCReconstructor.cxx:612
 AliZDCReconstructor.cxx:613
 AliZDCReconstructor.cxx:614
 AliZDCReconstructor.cxx:615
 AliZDCReconstructor.cxx:616
 AliZDCReconstructor.cxx:617
 AliZDCReconstructor.cxx:618
 AliZDCReconstructor.cxx:619
 AliZDCReconstructor.cxx:620
 AliZDCReconstructor.cxx:621
 AliZDCReconstructor.cxx:622
 AliZDCReconstructor.cxx:623
 AliZDCReconstructor.cxx:624
 AliZDCReconstructor.cxx:625
 AliZDCReconstructor.cxx:626
 AliZDCReconstructor.cxx:627
 AliZDCReconstructor.cxx:628
 AliZDCReconstructor.cxx:629
 AliZDCReconstructor.cxx:630
 AliZDCReconstructor.cxx:631
 AliZDCReconstructor.cxx:632
 AliZDCReconstructor.cxx:633
 AliZDCReconstructor.cxx:634
 AliZDCReconstructor.cxx:635
 AliZDCReconstructor.cxx:636
 AliZDCReconstructor.cxx:637
 AliZDCReconstructor.cxx:638
 AliZDCReconstructor.cxx:639
 AliZDCReconstructor.cxx:640
 AliZDCReconstructor.cxx:641
 AliZDCReconstructor.cxx:642
 AliZDCReconstructor.cxx:643
 AliZDCReconstructor.cxx:644
 AliZDCReconstructor.cxx:645
 AliZDCReconstructor.cxx:646
 AliZDCReconstructor.cxx:647
 AliZDCReconstructor.cxx:648
 AliZDCReconstructor.cxx:649
 AliZDCReconstructor.cxx:650
 AliZDCReconstructor.cxx:651
 AliZDCReconstructor.cxx:652
 AliZDCReconstructor.cxx:653
 AliZDCReconstructor.cxx:654
 AliZDCReconstructor.cxx:655
 AliZDCReconstructor.cxx:656
 AliZDCReconstructor.cxx:657
 AliZDCReconstructor.cxx:658
 AliZDCReconstructor.cxx:659
 AliZDCReconstructor.cxx:660
 AliZDCReconstructor.cxx:661
 AliZDCReconstructor.cxx:662
 AliZDCReconstructor.cxx:663
 AliZDCReconstructor.cxx:664
 AliZDCReconstructor.cxx:665
 AliZDCReconstructor.cxx:666
 AliZDCReconstructor.cxx:667
 AliZDCReconstructor.cxx:668
 AliZDCReconstructor.cxx:669
 AliZDCReconstructor.cxx:670
 AliZDCReconstructor.cxx:671
 AliZDCReconstructor.cxx:672
 AliZDCReconstructor.cxx:673
 AliZDCReconstructor.cxx:674
 AliZDCReconstructor.cxx:675
 AliZDCReconstructor.cxx:676
 AliZDCReconstructor.cxx:677
 AliZDCReconstructor.cxx:678
 AliZDCReconstructor.cxx:679
 AliZDCReconstructor.cxx:680
 AliZDCReconstructor.cxx:681
 AliZDCReconstructor.cxx:682
 AliZDCReconstructor.cxx:683
 AliZDCReconstructor.cxx:684
 AliZDCReconstructor.cxx:685
 AliZDCReconstructor.cxx:686
 AliZDCReconstructor.cxx:687
 AliZDCReconstructor.cxx:688
 AliZDCReconstructor.cxx:689
 AliZDCReconstructor.cxx:690
 AliZDCReconstructor.cxx:691
 AliZDCReconstructor.cxx:692
 AliZDCReconstructor.cxx:693
 AliZDCReconstructor.cxx:694
 AliZDCReconstructor.cxx:695
 AliZDCReconstructor.cxx:696
 AliZDCReconstructor.cxx:697
 AliZDCReconstructor.cxx:698
 AliZDCReconstructor.cxx:699
 AliZDCReconstructor.cxx:700
 AliZDCReconstructor.cxx:701
 AliZDCReconstructor.cxx:702
 AliZDCReconstructor.cxx:703
 AliZDCReconstructor.cxx:704
 AliZDCReconstructor.cxx:705
 AliZDCReconstructor.cxx:706
 AliZDCReconstructor.cxx:707
 AliZDCReconstructor.cxx:708
 AliZDCReconstructor.cxx:709
 AliZDCReconstructor.cxx:710
 AliZDCReconstructor.cxx:711
 AliZDCReconstructor.cxx:712
 AliZDCReconstructor.cxx:713
 AliZDCReconstructor.cxx:714
 AliZDCReconstructor.cxx:715
 AliZDCReconstructor.cxx:716
 AliZDCReconstructor.cxx:717
 AliZDCReconstructor.cxx:718
 AliZDCReconstructor.cxx:719
 AliZDCReconstructor.cxx:720
 AliZDCReconstructor.cxx:721
 AliZDCReconstructor.cxx:722
 AliZDCReconstructor.cxx:723
 AliZDCReconstructor.cxx:724
 AliZDCReconstructor.cxx:725
 AliZDCReconstructor.cxx:726
 AliZDCReconstructor.cxx:727
 AliZDCReconstructor.cxx:728
 AliZDCReconstructor.cxx:729
 AliZDCReconstructor.cxx:730
 AliZDCReconstructor.cxx:731
 AliZDCReconstructor.cxx:732
 AliZDCReconstructor.cxx:733
 AliZDCReconstructor.cxx:734
 AliZDCReconstructor.cxx:735
 AliZDCReconstructor.cxx:736
 AliZDCReconstructor.cxx:737
 AliZDCReconstructor.cxx:738
 AliZDCReconstructor.cxx:739
 AliZDCReconstructor.cxx:740
 AliZDCReconstructor.cxx:741
 AliZDCReconstructor.cxx:742
 AliZDCReconstructor.cxx:743
 AliZDCReconstructor.cxx:744
 AliZDCReconstructor.cxx:745
 AliZDCReconstructor.cxx:746
 AliZDCReconstructor.cxx:747
 AliZDCReconstructor.cxx:748
 AliZDCReconstructor.cxx:749
 AliZDCReconstructor.cxx:750
 AliZDCReconstructor.cxx:751
 AliZDCReconstructor.cxx:752
 AliZDCReconstructor.cxx:753
 AliZDCReconstructor.cxx:754
 AliZDCReconstructor.cxx:755
 AliZDCReconstructor.cxx:756
 AliZDCReconstructor.cxx:757
 AliZDCReconstructor.cxx:758
 AliZDCReconstructor.cxx:759
 AliZDCReconstructor.cxx:760
 AliZDCReconstructor.cxx:761
 AliZDCReconstructor.cxx:762
 AliZDCReconstructor.cxx:763
 AliZDCReconstructor.cxx:764
 AliZDCReconstructor.cxx:765
 AliZDCReconstructor.cxx:766
 AliZDCReconstructor.cxx:767
 AliZDCReconstructor.cxx:768
 AliZDCReconstructor.cxx:769
 AliZDCReconstructor.cxx:770
 AliZDCReconstructor.cxx:771
 AliZDCReconstructor.cxx:772
 AliZDCReconstructor.cxx:773
 AliZDCReconstructor.cxx:774
 AliZDCReconstructor.cxx:775
 AliZDCReconstructor.cxx:776
 AliZDCReconstructor.cxx:777
 AliZDCReconstructor.cxx:778
 AliZDCReconstructor.cxx:779
 AliZDCReconstructor.cxx:780
 AliZDCReconstructor.cxx:781
 AliZDCReconstructor.cxx:782
 AliZDCReconstructor.cxx:783
 AliZDCReconstructor.cxx:784
 AliZDCReconstructor.cxx:785
 AliZDCReconstructor.cxx:786
 AliZDCReconstructor.cxx:787
 AliZDCReconstructor.cxx:788
 AliZDCReconstructor.cxx:789
 AliZDCReconstructor.cxx:790
 AliZDCReconstructor.cxx:791
 AliZDCReconstructor.cxx:792
 AliZDCReconstructor.cxx:793
 AliZDCReconstructor.cxx:794
 AliZDCReconstructor.cxx:795
 AliZDCReconstructor.cxx:796
 AliZDCReconstructor.cxx:797
 AliZDCReconstructor.cxx:798
 AliZDCReconstructor.cxx:799
 AliZDCReconstructor.cxx:800
 AliZDCReconstructor.cxx:801
 AliZDCReconstructor.cxx:802
 AliZDCReconstructor.cxx:803
 AliZDCReconstructor.cxx:804
 AliZDCReconstructor.cxx:805
 AliZDCReconstructor.cxx:806
 AliZDCReconstructor.cxx:807
 AliZDCReconstructor.cxx:808
 AliZDCReconstructor.cxx:809
 AliZDCReconstructor.cxx:810
 AliZDCReconstructor.cxx:811
 AliZDCReconstructor.cxx:812
 AliZDCReconstructor.cxx:813
 AliZDCReconstructor.cxx:814
 AliZDCReconstructor.cxx:815
 AliZDCReconstructor.cxx:816
 AliZDCReconstructor.cxx:817
 AliZDCReconstructor.cxx:818
 AliZDCReconstructor.cxx:819
 AliZDCReconstructor.cxx:820
 AliZDCReconstructor.cxx:821
 AliZDCReconstructor.cxx:822
 AliZDCReconstructor.cxx:823
 AliZDCReconstructor.cxx:824
 AliZDCReconstructor.cxx:825
 AliZDCReconstructor.cxx:826
 AliZDCReconstructor.cxx:827
 AliZDCReconstructor.cxx:828
 AliZDCReconstructor.cxx:829
 AliZDCReconstructor.cxx:830
 AliZDCReconstructor.cxx:831
 AliZDCReconstructor.cxx:832
 AliZDCReconstructor.cxx:833
 AliZDCReconstructor.cxx:834
 AliZDCReconstructor.cxx:835
 AliZDCReconstructor.cxx:836
 AliZDCReconstructor.cxx:837
 AliZDCReconstructor.cxx:838
 AliZDCReconstructor.cxx:839
 AliZDCReconstructor.cxx:840
 AliZDCReconstructor.cxx:841
 AliZDCReconstructor.cxx:842
 AliZDCReconstructor.cxx:843
 AliZDCReconstructor.cxx:844
 AliZDCReconstructor.cxx:845
 AliZDCReconstructor.cxx:846
 AliZDCReconstructor.cxx:847
 AliZDCReconstructor.cxx:848
 AliZDCReconstructor.cxx:849
 AliZDCReconstructor.cxx:850
 AliZDCReconstructor.cxx:851
 AliZDCReconstructor.cxx:852
 AliZDCReconstructor.cxx:853
 AliZDCReconstructor.cxx:854
 AliZDCReconstructor.cxx:855
 AliZDCReconstructor.cxx:856
 AliZDCReconstructor.cxx:857
 AliZDCReconstructor.cxx:858
 AliZDCReconstructor.cxx:859
 AliZDCReconstructor.cxx:860
 AliZDCReconstructor.cxx:861
 AliZDCReconstructor.cxx:862
 AliZDCReconstructor.cxx:863
 AliZDCReconstructor.cxx:864
 AliZDCReconstructor.cxx:865
 AliZDCReconstructor.cxx:866
 AliZDCReconstructor.cxx:867
 AliZDCReconstructor.cxx:868
 AliZDCReconstructor.cxx:869
 AliZDCReconstructor.cxx:870
 AliZDCReconstructor.cxx:871
 AliZDCReconstructor.cxx:872
 AliZDCReconstructor.cxx:873
 AliZDCReconstructor.cxx:874
 AliZDCReconstructor.cxx:875
 AliZDCReconstructor.cxx:876
 AliZDCReconstructor.cxx:877
 AliZDCReconstructor.cxx:878
 AliZDCReconstructor.cxx:879
 AliZDCReconstructor.cxx:880
 AliZDCReconstructor.cxx:881
 AliZDCReconstructor.cxx:882
 AliZDCReconstructor.cxx:883
 AliZDCReconstructor.cxx:884
 AliZDCReconstructor.cxx:885
 AliZDCReconstructor.cxx:886
 AliZDCReconstructor.cxx:887
 AliZDCReconstructor.cxx:888
 AliZDCReconstructor.cxx:889
 AliZDCReconstructor.cxx:890
 AliZDCReconstructor.cxx:891
 AliZDCReconstructor.cxx:892
 AliZDCReconstructor.cxx:893
 AliZDCReconstructor.cxx:894
 AliZDCReconstructor.cxx:895
 AliZDCReconstructor.cxx:896
 AliZDCReconstructor.cxx:897
 AliZDCReconstructor.cxx:898
 AliZDCReconstructor.cxx:899
 AliZDCReconstructor.cxx:900
 AliZDCReconstructor.cxx:901
 AliZDCReconstructor.cxx:902
 AliZDCReconstructor.cxx:903
 AliZDCReconstructor.cxx:904
 AliZDCReconstructor.cxx:905
 AliZDCReconstructor.cxx:906
 AliZDCReconstructor.cxx:907
 AliZDCReconstructor.cxx:908
 AliZDCReconstructor.cxx:909
 AliZDCReconstructor.cxx:910
 AliZDCReconstructor.cxx:911
 AliZDCReconstructor.cxx:912
 AliZDCReconstructor.cxx:913
 AliZDCReconstructor.cxx:914
 AliZDCReconstructor.cxx:915
 AliZDCReconstructor.cxx:916
 AliZDCReconstructor.cxx:917
 AliZDCReconstructor.cxx:918
 AliZDCReconstructor.cxx:919
 AliZDCReconstructor.cxx:920
 AliZDCReconstructor.cxx:921
 AliZDCReconstructor.cxx:922
 AliZDCReconstructor.cxx:923
 AliZDCReconstructor.cxx:924
 AliZDCReconstructor.cxx:925
 AliZDCReconstructor.cxx:926
 AliZDCReconstructor.cxx:927
 AliZDCReconstructor.cxx:928
 AliZDCReconstructor.cxx:929
 AliZDCReconstructor.cxx:930
 AliZDCReconstructor.cxx:931
 AliZDCReconstructor.cxx:932
 AliZDCReconstructor.cxx:933
 AliZDCReconstructor.cxx:934
 AliZDCReconstructor.cxx:935
 AliZDCReconstructor.cxx:936
 AliZDCReconstructor.cxx:937
 AliZDCReconstructor.cxx:938
 AliZDCReconstructor.cxx:939
 AliZDCReconstructor.cxx:940
 AliZDCReconstructor.cxx:941
 AliZDCReconstructor.cxx:942
 AliZDCReconstructor.cxx:943
 AliZDCReconstructor.cxx:944
 AliZDCReconstructor.cxx:945
 AliZDCReconstructor.cxx:946
 AliZDCReconstructor.cxx:947
 AliZDCReconstructor.cxx:948
 AliZDCReconstructor.cxx:949
 AliZDCReconstructor.cxx:950
 AliZDCReconstructor.cxx:951
 AliZDCReconstructor.cxx:952
 AliZDCReconstructor.cxx:953
 AliZDCReconstructor.cxx:954
 AliZDCReconstructor.cxx:955
 AliZDCReconstructor.cxx:956
 AliZDCReconstructor.cxx:957
 AliZDCReconstructor.cxx:958
 AliZDCReconstructor.cxx:959
 AliZDCReconstructor.cxx:960
 AliZDCReconstructor.cxx:961
 AliZDCReconstructor.cxx:962
 AliZDCReconstructor.cxx:963
 AliZDCReconstructor.cxx:964
 AliZDCReconstructor.cxx:965
 AliZDCReconstructor.cxx:966
 AliZDCReconstructor.cxx:967
 AliZDCReconstructor.cxx:968
 AliZDCReconstructor.cxx:969
 AliZDCReconstructor.cxx:970
 AliZDCReconstructor.cxx:971
 AliZDCReconstructor.cxx:972
 AliZDCReconstructor.cxx:973
 AliZDCReconstructor.cxx:974
 AliZDCReconstructor.cxx:975
 AliZDCReconstructor.cxx:976
 AliZDCReconstructor.cxx:977
 AliZDCReconstructor.cxx:978
 AliZDCReconstructor.cxx:979
 AliZDCReconstructor.cxx:980
 AliZDCReconstructor.cxx:981
 AliZDCReconstructor.cxx:982
 AliZDCReconstructor.cxx:983
 AliZDCReconstructor.cxx:984
 AliZDCReconstructor.cxx:985
 AliZDCReconstructor.cxx:986
 AliZDCReconstructor.cxx:987
 AliZDCReconstructor.cxx:988
 AliZDCReconstructor.cxx:989
 AliZDCReconstructor.cxx:990
 AliZDCReconstructor.cxx:991
 AliZDCReconstructor.cxx:992
 AliZDCReconstructor.cxx:993
 AliZDCReconstructor.cxx:994
 AliZDCReconstructor.cxx:995
 AliZDCReconstructor.cxx:996
 AliZDCReconstructor.cxx:997
 AliZDCReconstructor.cxx:998
 AliZDCReconstructor.cxx:999
 AliZDCReconstructor.cxx:1000
 AliZDCReconstructor.cxx:1001
 AliZDCReconstructor.cxx:1002
 AliZDCReconstructor.cxx:1003
 AliZDCReconstructor.cxx:1004
 AliZDCReconstructor.cxx:1005
 AliZDCReconstructor.cxx:1006
 AliZDCReconstructor.cxx:1007
 AliZDCReconstructor.cxx:1008
 AliZDCReconstructor.cxx:1009
 AliZDCReconstructor.cxx:1010
 AliZDCReconstructor.cxx:1011
 AliZDCReconstructor.cxx:1012
 AliZDCReconstructor.cxx:1013
 AliZDCReconstructor.cxx:1014
 AliZDCReconstructor.cxx:1015
 AliZDCReconstructor.cxx:1016
 AliZDCReconstructor.cxx:1017
 AliZDCReconstructor.cxx:1018
 AliZDCReconstructor.cxx:1019
 AliZDCReconstructor.cxx:1020
 AliZDCReconstructor.cxx:1021
 AliZDCReconstructor.cxx:1022
 AliZDCReconstructor.cxx:1023
 AliZDCReconstructor.cxx:1024
 AliZDCReconstructor.cxx:1025
 AliZDCReconstructor.cxx:1026
 AliZDCReconstructor.cxx:1027
 AliZDCReconstructor.cxx:1028
 AliZDCReconstructor.cxx:1029
 AliZDCReconstructor.cxx:1030
 AliZDCReconstructor.cxx:1031
 AliZDCReconstructor.cxx:1032
 AliZDCReconstructor.cxx:1033
 AliZDCReconstructor.cxx:1034
 AliZDCReconstructor.cxx:1035
 AliZDCReconstructor.cxx:1036
 AliZDCReconstructor.cxx:1037
 AliZDCReconstructor.cxx:1038
 AliZDCReconstructor.cxx:1039
 AliZDCReconstructor.cxx:1040
 AliZDCReconstructor.cxx:1041
 AliZDCReconstructor.cxx:1042
 AliZDCReconstructor.cxx:1043
 AliZDCReconstructor.cxx:1044
 AliZDCReconstructor.cxx:1045
 AliZDCReconstructor.cxx:1046
 AliZDCReconstructor.cxx:1047
 AliZDCReconstructor.cxx:1048
 AliZDCReconstructor.cxx:1049
 AliZDCReconstructor.cxx:1050
 AliZDCReconstructor.cxx:1051
 AliZDCReconstructor.cxx:1052
 AliZDCReconstructor.cxx:1053
 AliZDCReconstructor.cxx:1054
 AliZDCReconstructor.cxx:1055
 AliZDCReconstructor.cxx:1056
 AliZDCReconstructor.cxx:1057
 AliZDCReconstructor.cxx:1058
 AliZDCReconstructor.cxx:1059
 AliZDCReconstructor.cxx:1060
 AliZDCReconstructor.cxx:1061
 AliZDCReconstructor.cxx:1062
 AliZDCReconstructor.cxx:1063
 AliZDCReconstructor.cxx:1064
 AliZDCReconstructor.cxx:1065
 AliZDCReconstructor.cxx:1066
 AliZDCReconstructor.cxx:1067
 AliZDCReconstructor.cxx:1068
 AliZDCReconstructor.cxx:1069
 AliZDCReconstructor.cxx:1070
 AliZDCReconstructor.cxx:1071
 AliZDCReconstructor.cxx:1072
 AliZDCReconstructor.cxx:1073
 AliZDCReconstructor.cxx:1074
 AliZDCReconstructor.cxx:1075
 AliZDCReconstructor.cxx:1076
 AliZDCReconstructor.cxx:1077
 AliZDCReconstructor.cxx:1078
 AliZDCReconstructor.cxx:1079
 AliZDCReconstructor.cxx:1080
 AliZDCReconstructor.cxx:1081
 AliZDCReconstructor.cxx:1082
 AliZDCReconstructor.cxx:1083
 AliZDCReconstructor.cxx:1084
 AliZDCReconstructor.cxx:1085
 AliZDCReconstructor.cxx:1086
 AliZDCReconstructor.cxx:1087
 AliZDCReconstructor.cxx:1088
 AliZDCReconstructor.cxx:1089
 AliZDCReconstructor.cxx:1090
 AliZDCReconstructor.cxx:1091
 AliZDCReconstructor.cxx:1092
 AliZDCReconstructor.cxx:1093
 AliZDCReconstructor.cxx:1094
 AliZDCReconstructor.cxx:1095
 AliZDCReconstructor.cxx:1096
 AliZDCReconstructor.cxx:1097
 AliZDCReconstructor.cxx:1098
 AliZDCReconstructor.cxx:1099
 AliZDCReconstructor.cxx:1100
 AliZDCReconstructor.cxx:1101
 AliZDCReconstructor.cxx:1102
 AliZDCReconstructor.cxx:1103
 AliZDCReconstructor.cxx:1104
 AliZDCReconstructor.cxx:1105
 AliZDCReconstructor.cxx:1106
 AliZDCReconstructor.cxx:1107
 AliZDCReconstructor.cxx:1108
 AliZDCReconstructor.cxx:1109
 AliZDCReconstructor.cxx:1110
 AliZDCReconstructor.cxx:1111
 AliZDCReconstructor.cxx:1112
 AliZDCReconstructor.cxx:1113
 AliZDCReconstructor.cxx:1114
 AliZDCReconstructor.cxx:1115
 AliZDCReconstructor.cxx:1116
 AliZDCReconstructor.cxx:1117
 AliZDCReconstructor.cxx:1118
 AliZDCReconstructor.cxx:1119
 AliZDCReconstructor.cxx:1120
 AliZDCReconstructor.cxx:1121
 AliZDCReconstructor.cxx:1122
 AliZDCReconstructor.cxx:1123
 AliZDCReconstructor.cxx:1124
 AliZDCReconstructor.cxx:1125
 AliZDCReconstructor.cxx:1126
 AliZDCReconstructor.cxx:1127
 AliZDCReconstructor.cxx:1128
 AliZDCReconstructor.cxx:1129
 AliZDCReconstructor.cxx:1130
 AliZDCReconstructor.cxx:1131
 AliZDCReconstructor.cxx:1132
 AliZDCReconstructor.cxx:1133
 AliZDCReconstructor.cxx:1134
 AliZDCReconstructor.cxx:1135
 AliZDCReconstructor.cxx:1136
 AliZDCReconstructor.cxx:1137
 AliZDCReconstructor.cxx:1138
 AliZDCReconstructor.cxx:1139
 AliZDCReconstructor.cxx:1140
 AliZDCReconstructor.cxx:1141
 AliZDCReconstructor.cxx:1142
 AliZDCReconstructor.cxx:1143
 AliZDCReconstructor.cxx:1144
 AliZDCReconstructor.cxx:1145
 AliZDCReconstructor.cxx:1146
 AliZDCReconstructor.cxx:1147
 AliZDCReconstructor.cxx:1148
 AliZDCReconstructor.cxx:1149
 AliZDCReconstructor.cxx:1150
 AliZDCReconstructor.cxx:1151
 AliZDCReconstructor.cxx:1152
 AliZDCReconstructor.cxx:1153
 AliZDCReconstructor.cxx:1154
 AliZDCReconstructor.cxx:1155
 AliZDCReconstructor.cxx:1156
 AliZDCReconstructor.cxx:1157
 AliZDCReconstructor.cxx:1158
 AliZDCReconstructor.cxx:1159
 AliZDCReconstructor.cxx:1160
 AliZDCReconstructor.cxx:1161
 AliZDCReconstructor.cxx:1162
 AliZDCReconstructor.cxx:1163
 AliZDCReconstructor.cxx:1164
 AliZDCReconstructor.cxx:1165
 AliZDCReconstructor.cxx:1166
 AliZDCReconstructor.cxx:1167
 AliZDCReconstructor.cxx:1168
 AliZDCReconstructor.cxx:1169
 AliZDCReconstructor.cxx:1170
 AliZDCReconstructor.cxx:1171
 AliZDCReconstructor.cxx:1172
 AliZDCReconstructor.cxx:1173
 AliZDCReconstructor.cxx:1174
 AliZDCReconstructor.cxx:1175
 AliZDCReconstructor.cxx:1176
 AliZDCReconstructor.cxx:1177
 AliZDCReconstructor.cxx:1178
 AliZDCReconstructor.cxx:1179
 AliZDCReconstructor.cxx:1180
 AliZDCReconstructor.cxx:1181
 AliZDCReconstructor.cxx:1182
 AliZDCReconstructor.cxx:1183
 AliZDCReconstructor.cxx:1184
 AliZDCReconstructor.cxx:1185
 AliZDCReconstructor.cxx:1186
 AliZDCReconstructor.cxx:1187
 AliZDCReconstructor.cxx:1188
 AliZDCReconstructor.cxx:1189
 AliZDCReconstructor.cxx:1190
 AliZDCReconstructor.cxx:1191
 AliZDCReconstructor.cxx:1192
 AliZDCReconstructor.cxx:1193
 AliZDCReconstructor.cxx:1194
 AliZDCReconstructor.cxx:1195
 AliZDCReconstructor.cxx:1196
 AliZDCReconstructor.cxx:1197
 AliZDCReconstructor.cxx:1198
 AliZDCReconstructor.cxx:1199
 AliZDCReconstructor.cxx:1200
 AliZDCReconstructor.cxx:1201
 AliZDCReconstructor.cxx:1202
 AliZDCReconstructor.cxx:1203
 AliZDCReconstructor.cxx:1204
 AliZDCReconstructor.cxx:1205
 AliZDCReconstructor.cxx:1206
 AliZDCReconstructor.cxx:1207
 AliZDCReconstructor.cxx:1208
 AliZDCReconstructor.cxx:1209
 AliZDCReconstructor.cxx:1210
 AliZDCReconstructor.cxx:1211
 AliZDCReconstructor.cxx:1212
 AliZDCReconstructor.cxx:1213
 AliZDCReconstructor.cxx:1214
 AliZDCReconstructor.cxx:1215
 AliZDCReconstructor.cxx:1216
 AliZDCReconstructor.cxx:1217
 AliZDCReconstructor.cxx:1218
 AliZDCReconstructor.cxx:1219
 AliZDCReconstructor.cxx:1220
 AliZDCReconstructor.cxx:1221
 AliZDCReconstructor.cxx:1222
 AliZDCReconstructor.cxx:1223
 AliZDCReconstructor.cxx:1224
 AliZDCReconstructor.cxx:1225
 AliZDCReconstructor.cxx:1226
 AliZDCReconstructor.cxx:1227
 AliZDCReconstructor.cxx:1228
 AliZDCReconstructor.cxx:1229
 AliZDCReconstructor.cxx:1230
 AliZDCReconstructor.cxx:1231
 AliZDCReconstructor.cxx:1232
 AliZDCReconstructor.cxx:1233
 AliZDCReconstructor.cxx:1234
 AliZDCReconstructor.cxx:1235
 AliZDCReconstructor.cxx:1236
 AliZDCReconstructor.cxx:1237
 AliZDCReconstructor.cxx:1238
 AliZDCReconstructor.cxx:1239
 AliZDCReconstructor.cxx:1240
 AliZDCReconstructor.cxx:1241
 AliZDCReconstructor.cxx:1242
 AliZDCReconstructor.cxx:1243
 AliZDCReconstructor.cxx:1244
 AliZDCReconstructor.cxx:1245
 AliZDCReconstructor.cxx:1246
 AliZDCReconstructor.cxx:1247
 AliZDCReconstructor.cxx:1248
 AliZDCReconstructor.cxx:1249
 AliZDCReconstructor.cxx:1250
 AliZDCReconstructor.cxx:1251
 AliZDCReconstructor.cxx:1252
 AliZDCReconstructor.cxx:1253
 AliZDCReconstructor.cxx:1254
 AliZDCReconstructor.cxx:1255
 AliZDCReconstructor.cxx:1256
 AliZDCReconstructor.cxx:1257
 AliZDCReconstructor.cxx:1258
 AliZDCReconstructor.cxx:1259
 AliZDCReconstructor.cxx:1260
 AliZDCReconstructor.cxx:1261
 AliZDCReconstructor.cxx:1262
 AliZDCReconstructor.cxx:1263
 AliZDCReconstructor.cxx:1264
 AliZDCReconstructor.cxx:1265
 AliZDCReconstructor.cxx:1266
 AliZDCReconstructor.cxx:1267
 AliZDCReconstructor.cxx:1268
 AliZDCReconstructor.cxx:1269
 AliZDCReconstructor.cxx:1270
 AliZDCReconstructor.cxx:1271
 AliZDCReconstructor.cxx:1272
 AliZDCReconstructor.cxx:1273
 AliZDCReconstructor.cxx:1274
 AliZDCReconstructor.cxx:1275
 AliZDCReconstructor.cxx:1276
 AliZDCReconstructor.cxx:1277
 AliZDCReconstructor.cxx:1278
 AliZDCReconstructor.cxx:1279
 AliZDCReconstructor.cxx:1280
 AliZDCReconstructor.cxx:1281
 AliZDCReconstructor.cxx:1282
 AliZDCReconstructor.cxx:1283
 AliZDCReconstructor.cxx:1284
 AliZDCReconstructor.cxx:1285
 AliZDCReconstructor.cxx:1286
 AliZDCReconstructor.cxx:1287
 AliZDCReconstructor.cxx:1288
 AliZDCReconstructor.cxx:1289
 AliZDCReconstructor.cxx:1290
 AliZDCReconstructor.cxx:1291
 AliZDCReconstructor.cxx:1292
 AliZDCReconstructor.cxx:1293
 AliZDCReconstructor.cxx:1294
 AliZDCReconstructor.cxx:1295
 AliZDCReconstructor.cxx:1296
 AliZDCReconstructor.cxx:1297
 AliZDCReconstructor.cxx:1298
 AliZDCReconstructor.cxx:1299
 AliZDCReconstructor.cxx:1300
 AliZDCReconstructor.cxx:1301
 AliZDCReconstructor.cxx:1302
 AliZDCReconstructor.cxx:1303
 AliZDCReconstructor.cxx:1304
 AliZDCReconstructor.cxx:1305
 AliZDCReconstructor.cxx:1306
 AliZDCReconstructor.cxx:1307
 AliZDCReconstructor.cxx:1308
 AliZDCReconstructor.cxx:1309
 AliZDCReconstructor.cxx:1310
 AliZDCReconstructor.cxx:1311
 AliZDCReconstructor.cxx:1312
 AliZDCReconstructor.cxx:1313
 AliZDCReconstructor.cxx:1314
 AliZDCReconstructor.cxx:1315
 AliZDCReconstructor.cxx:1316
 AliZDCReconstructor.cxx:1317
 AliZDCReconstructor.cxx:1318
 AliZDCReconstructor.cxx:1319
 AliZDCReconstructor.cxx:1320
 AliZDCReconstructor.cxx:1321
 AliZDCReconstructor.cxx:1322
 AliZDCReconstructor.cxx:1323
 AliZDCReconstructor.cxx:1324
 AliZDCReconstructor.cxx:1325
 AliZDCReconstructor.cxx:1326
 AliZDCReconstructor.cxx:1327
 AliZDCReconstructor.cxx:1328
 AliZDCReconstructor.cxx:1329
 AliZDCReconstructor.cxx:1330
 AliZDCReconstructor.cxx:1331
 AliZDCReconstructor.cxx:1332
 AliZDCReconstructor.cxx:1333
 AliZDCReconstructor.cxx:1334
 AliZDCReconstructor.cxx:1335
 AliZDCReconstructor.cxx:1336
 AliZDCReconstructor.cxx:1337
 AliZDCReconstructor.cxx:1338
 AliZDCReconstructor.cxx:1339
 AliZDCReconstructor.cxx:1340
 AliZDCReconstructor.cxx:1341
 AliZDCReconstructor.cxx:1342
 AliZDCReconstructor.cxx:1343
 AliZDCReconstructor.cxx:1344
 AliZDCReconstructor.cxx:1345
 AliZDCReconstructor.cxx:1346
 AliZDCReconstructor.cxx:1347
 AliZDCReconstructor.cxx:1348
 AliZDCReconstructor.cxx:1349
 AliZDCReconstructor.cxx:1350
 AliZDCReconstructor.cxx:1351
 AliZDCReconstructor.cxx:1352
 AliZDCReconstructor.cxx:1353
 AliZDCReconstructor.cxx:1354
 AliZDCReconstructor.cxx:1355
 AliZDCReconstructor.cxx:1356
 AliZDCReconstructor.cxx:1357
 AliZDCReconstructor.cxx:1358
 AliZDCReconstructor.cxx:1359
 AliZDCReconstructor.cxx:1360
 AliZDCReconstructor.cxx:1361
 AliZDCReconstructor.cxx:1362
 AliZDCReconstructor.cxx:1363
 AliZDCReconstructor.cxx:1364
 AliZDCReconstructor.cxx:1365
 AliZDCReconstructor.cxx:1366
 AliZDCReconstructor.cxx:1367
 AliZDCReconstructor.cxx:1368
 AliZDCReconstructor.cxx:1369
 AliZDCReconstructor.cxx:1370
 AliZDCReconstructor.cxx:1371
 AliZDCReconstructor.cxx:1372
 AliZDCReconstructor.cxx:1373
 AliZDCReconstructor.cxx:1374
 AliZDCReconstructor.cxx:1375
 AliZDCReconstructor.cxx:1376
 AliZDCReconstructor.cxx:1377
 AliZDCReconstructor.cxx:1378
 AliZDCReconstructor.cxx:1379
 AliZDCReconstructor.cxx:1380
 AliZDCReconstructor.cxx:1381
 AliZDCReconstructor.cxx:1382
 AliZDCReconstructor.cxx:1383
 AliZDCReconstructor.cxx:1384
 AliZDCReconstructor.cxx:1385
 AliZDCReconstructor.cxx:1386
 AliZDCReconstructor.cxx:1387
 AliZDCReconstructor.cxx:1388
 AliZDCReconstructor.cxx:1389
 AliZDCReconstructor.cxx:1390
 AliZDCReconstructor.cxx:1391
 AliZDCReconstructor.cxx:1392
 AliZDCReconstructor.cxx:1393
 AliZDCReconstructor.cxx:1394
 AliZDCReconstructor.cxx:1395
 AliZDCReconstructor.cxx:1396
 AliZDCReconstructor.cxx:1397
 AliZDCReconstructor.cxx:1398
 AliZDCReconstructor.cxx:1399
 AliZDCReconstructor.cxx:1400
 AliZDCReconstructor.cxx:1401
 AliZDCReconstructor.cxx:1402
 AliZDCReconstructor.cxx:1403
 AliZDCReconstructor.cxx:1404
 AliZDCReconstructor.cxx:1405
 AliZDCReconstructor.cxx:1406
 AliZDCReconstructor.cxx:1407
 AliZDCReconstructor.cxx:1408
 AliZDCReconstructor.cxx:1409
 AliZDCReconstructor.cxx:1410
 AliZDCReconstructor.cxx:1411
 AliZDCReconstructor.cxx:1412
 AliZDCReconstructor.cxx:1413
 AliZDCReconstructor.cxx:1414
 AliZDCReconstructor.cxx:1415
 AliZDCReconstructor.cxx:1416
 AliZDCReconstructor.cxx:1417
 AliZDCReconstructor.cxx:1418
 AliZDCReconstructor.cxx:1419
 AliZDCReconstructor.cxx:1420
 AliZDCReconstructor.cxx:1421
 AliZDCReconstructor.cxx:1422
 AliZDCReconstructor.cxx:1423
 AliZDCReconstructor.cxx:1424
 AliZDCReconstructor.cxx:1425
 AliZDCReconstructor.cxx:1426
 AliZDCReconstructor.cxx:1427
 AliZDCReconstructor.cxx:1428
 AliZDCReconstructor.cxx:1429
 AliZDCReconstructor.cxx:1430
 AliZDCReconstructor.cxx:1431
 AliZDCReconstructor.cxx:1432
 AliZDCReconstructor.cxx:1433
 AliZDCReconstructor.cxx:1434
 AliZDCReconstructor.cxx:1435
 AliZDCReconstructor.cxx:1436
 AliZDCReconstructor.cxx:1437
 AliZDCReconstructor.cxx:1438
 AliZDCReconstructor.cxx:1439
 AliZDCReconstructor.cxx:1440
 AliZDCReconstructor.cxx:1441
 AliZDCReconstructor.cxx:1442
 AliZDCReconstructor.cxx:1443
 AliZDCReconstructor.cxx:1444
 AliZDCReconstructor.cxx:1445
 AliZDCReconstructor.cxx:1446
 AliZDCReconstructor.cxx:1447
 AliZDCReconstructor.cxx:1448
 AliZDCReconstructor.cxx:1449
 AliZDCReconstructor.cxx:1450
 AliZDCReconstructor.cxx:1451
 AliZDCReconstructor.cxx:1452
 AliZDCReconstructor.cxx:1453
 AliZDCReconstructor.cxx:1454
 AliZDCReconstructor.cxx:1455
 AliZDCReconstructor.cxx:1456
 AliZDCReconstructor.cxx:1457
 AliZDCReconstructor.cxx:1458
 AliZDCReconstructor.cxx:1459
 AliZDCReconstructor.cxx:1460
 AliZDCReconstructor.cxx:1461
 AliZDCReconstructor.cxx:1462
 AliZDCReconstructor.cxx:1463
 AliZDCReconstructor.cxx:1464
 AliZDCReconstructor.cxx:1465
 AliZDCReconstructor.cxx:1466
 AliZDCReconstructor.cxx:1467
 AliZDCReconstructor.cxx:1468
 AliZDCReconstructor.cxx:1469
 AliZDCReconstructor.cxx:1470
 AliZDCReconstructor.cxx:1471
 AliZDCReconstructor.cxx:1472
 AliZDCReconstructor.cxx:1473
 AliZDCReconstructor.cxx:1474
 AliZDCReconstructor.cxx:1475
 AliZDCReconstructor.cxx:1476
 AliZDCReconstructor.cxx:1477
 AliZDCReconstructor.cxx:1478
 AliZDCReconstructor.cxx:1479
 AliZDCReconstructor.cxx:1480
 AliZDCReconstructor.cxx:1481
 AliZDCReconstructor.cxx:1482
 AliZDCReconstructor.cxx:1483
 AliZDCReconstructor.cxx:1484
 AliZDCReconstructor.cxx:1485
 AliZDCReconstructor.cxx:1486
 AliZDCReconstructor.cxx:1487
 AliZDCReconstructor.cxx:1488
 AliZDCReconstructor.cxx:1489
 AliZDCReconstructor.cxx:1490
 AliZDCReconstructor.cxx:1491
 AliZDCReconstructor.cxx:1492
 AliZDCReconstructor.cxx:1493
 AliZDCReconstructor.cxx:1494
 AliZDCReconstructor.cxx:1495
 AliZDCReconstructor.cxx:1496
 AliZDCReconstructor.cxx:1497
 AliZDCReconstructor.cxx:1498
 AliZDCReconstructor.cxx:1499
 AliZDCReconstructor.cxx:1500
 AliZDCReconstructor.cxx:1501
 AliZDCReconstructor.cxx:1502
 AliZDCReconstructor.cxx:1503
 AliZDCReconstructor.cxx:1504
 AliZDCReconstructor.cxx:1505
 AliZDCReconstructor.cxx:1506
 AliZDCReconstructor.cxx:1507
 AliZDCReconstructor.cxx:1508
 AliZDCReconstructor.cxx:1509
 AliZDCReconstructor.cxx:1510
 AliZDCReconstructor.cxx:1511
 AliZDCReconstructor.cxx:1512
 AliZDCReconstructor.cxx:1513
 AliZDCReconstructor.cxx:1514
 AliZDCReconstructor.cxx:1515
 AliZDCReconstructor.cxx:1516
 AliZDCReconstructor.cxx:1517
 AliZDCReconstructor.cxx:1518
 AliZDCReconstructor.cxx:1519
 AliZDCReconstructor.cxx:1520
 AliZDCReconstructor.cxx:1521
 AliZDCReconstructor.cxx:1522
 AliZDCReconstructor.cxx:1523
 AliZDCReconstructor.cxx:1524
 AliZDCReconstructor.cxx:1525
 AliZDCReconstructor.cxx:1526
 AliZDCReconstructor.cxx:1527
 AliZDCReconstructor.cxx:1528
 AliZDCReconstructor.cxx:1529
 AliZDCReconstructor.cxx:1530
 AliZDCReconstructor.cxx:1531
 AliZDCReconstructor.cxx:1532
 AliZDCReconstructor.cxx:1533
 AliZDCReconstructor.cxx:1534
 AliZDCReconstructor.cxx:1535
 AliZDCReconstructor.cxx:1536
 AliZDCReconstructor.cxx:1537
 AliZDCReconstructor.cxx:1538
 AliZDCReconstructor.cxx:1539
 AliZDCReconstructor.cxx:1540
 AliZDCReconstructor.cxx:1541
 AliZDCReconstructor.cxx:1542
 AliZDCReconstructor.cxx:1543
 AliZDCReconstructor.cxx:1544
 AliZDCReconstructor.cxx:1545
 AliZDCReconstructor.cxx:1546
 AliZDCReconstructor.cxx:1547
 AliZDCReconstructor.cxx:1548
 AliZDCReconstructor.cxx:1549
 AliZDCReconstructor.cxx:1550
 AliZDCReconstructor.cxx:1551
 AliZDCReconstructor.cxx:1552
 AliZDCReconstructor.cxx:1553
 AliZDCReconstructor.cxx:1554
 AliZDCReconstructor.cxx:1555
 AliZDCReconstructor.cxx:1556
 AliZDCReconstructor.cxx:1557