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 VZERO reconstruction                                           //
///                                                                          //
///////////////////////////////////////////////////////////////////////////////

#include <TH1F.h>
#include <TF1.h>
#include <TParameter.h>

#include "AliRunLoader.h"
#include "AliRawReader.h"
#include "AliGRPObject.h"
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBEntry.h"
#include "AliVZEROReconstructor.h"
#include "AliVZERORawStream.h"
#include "AliVZEROConst.h"
#include "AliESDEvent.h"
#include "AliVZEROTriggerMask.h"
#include "AliESDfriend.h"
#include "AliESDVZEROfriend.h"
#include "AliVZEROdigit.h"
#include "AliVZEROCalibData.h"
#include "AliRunInfo.h"
#include "AliCTPTimeParams.h"
#include "AliLHCClockPhase.h"

ClassImp(AliVZEROReconstructor)

//_____________________________________________________________________________
AliVZEROReconstructor:: AliVZEROReconstructor(): AliReconstructor(),
                        fESDVZERO(0x0),
                        fESD(0x0),
                        fESDVZEROfriend(0x0),
                        fCalibData(NULL),
                        fTriggerData(NULL),
                        fTimeSlewing(NULL),
                        fSaturationCorr(NULL),
                        fEqFactors(NULL),
                        fCollisionMode(0),
                        fBeamEnergy(0.),
                        fDigitsArray(0)
{
  // Default constructor  
  // Get calibration data
  
  fCalibData = GetCalibData();

  AliCDBEntry *entry = AliCDBManager::Instance()->Get("GRP/CTP/CTPtiming");
  if (!entry) AliFatal("CTP timing parameters are not found in OCDB !");
  AliCTPTimeParams *ctpParams = (AliCTPTimeParams*)entry->GetObject();
  Float_t l1Delay = (Float_t)ctpParams->GetDelayL1L0()*25.0;

  AliCDBEntry *entry1 = AliCDBManager::Instance()->Get("GRP/CTP/TimeAlign");
  if (!entry1) AliFatal("CTP time-alignment is not found in OCDB !");
  AliCTPTimeParams *ctpTimeAlign = (AliCTPTimeParams*)entry1->GetObject();
  l1Delay += ((Float_t)ctpTimeAlign->GetDelayL1L0()*25.0);

  AliCDBEntry *entry2 = AliCDBManager::Instance()->Get("VZERO/Calib/TimeDelays");
  if (!entry2) AliFatal("VZERO time delays are not found in OCDB !");
  TH1F *delays = (TH1F*)entry2->GetObject();

  AliCDBEntry *entry3 = AliCDBManager::Instance()->Get("VZERO/Calib/TimeSlewing");
  if (!entry3) AliFatal("VZERO time slewing function is not found in OCDB !");
  fTimeSlewing = (TF1*)entry3->GetObject();

  AliCDBEntry *entry4 = AliCDBManager::Instance()->Get("GRP/Calib/LHCClockPhase");
  if (!entry4) AliFatal("LHC clock-phase shift is not found in OCDB !");
  AliLHCClockPhase *phase = (AliLHCClockPhase*)entry4->GetObject();

  for(Int_t i = 0 ; i < 64; ++i) {
    Int_t board = AliVZEROCalibData::GetBoardNumber(i);
    fTimeOffset[i] = (((Float_t)fCalibData->GetRollOver(board)-
		       (Float_t)fCalibData->GetTriggerCountOffset(board))*25.0+
		       fCalibData->GetTimeOffset(i)-
		       l1Delay-
		       phase->GetMeanPhase()+
		       delays->GetBinContent(i+1)+
		       kV0Offset);
  }

  AliCDBEntry *entry5 =  AliCDBManager::Instance()->Get("VZERO/Calib/Saturation");
  if (!entry5) AliFatal("Saturation entry is not found in OCDB !");
  fSaturationCorr = (TObjArray*)entry5->GetObject();

  AliCDBEntry *entry6 = AliCDBManager::Instance()->Get("VZERO/Trigger/Data");
  if (!entry6) AliFatal("VZERO trigger config data is not found in OCDB !");
  fTriggerData = (AliVZEROTriggerData*)entry6->GetObject();

  AliCDBEntry *entry7 = AliCDBManager::Instance()->Get("VZERO/Calib/EqualizationFactors");
  if (!entry7) AliFatal("VZERO equalization factors are not found in OCDB !");
  fEqFactors = (TH1F*)entry7->GetObject();
}


//_____________________________________________________________________________
AliVZEROReconstructor& AliVZEROReconstructor::operator = 
  (const AliVZEROReconstructor& /*reconstructor*/)
{
// assignment operator

  Fatal("operator =", "assignment operator not implemented");
  return *this;
}

//_____________________________________________________________________________
AliVZEROReconstructor::~AliVZEROReconstructor()
{
// destructor

  if(fESDVZERO)
    delete fESDVZERO;
  if(fESDVZEROfriend)
   delete fESDVZEROfriend;
  if(fDigitsArray)
   delete fDigitsArray;
}

//_____________________________________________________________________________
void AliVZEROReconstructor::Init()
{
// initializer

  fESDVZERO  = new AliESDVZERO;
  fESDVZEROfriend = new AliESDVZEROfriend;
  
  GetCollisionMode();  // fCollisionMode =1 for Pb-Pb simulated data
}

//______________________________________________________________________
void AliVZEROReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const
{
// converts RAW to digits 

  if (!digitsTree) {
    AliError("No digits tree!");
    return;
  }

  if (!fDigitsArray)
    fDigitsArray = new TClonesArray("AliVZEROdigit", 64);
  digitsTree->Branch("VZERODigit", &fDigitsArray);

  fESDVZEROfriend->Reset();

  rawReader->Reset();
  AliVZERORawStream rawStream(rawReader);
  if (rawStream.Next()) { 

    Int_t aBBflagsV0A = 0;
    Int_t aBBflagsV0C = 0;
    Int_t aBGflagsV0A = 0;
    Int_t aBGflagsV0C = 0;

    for(Int_t iChannel=0; iChannel < 64; ++iChannel) {
      Int_t offlineCh = rawStream.GetOfflineChannel(iChannel);
      // ADC charge samples
      Short_t chargeADC[AliVZEROdigit::kNClocks];
      for(Int_t iClock=0; iClock < AliVZEROdigit::kNClocks; ++iClock) {
	chargeADC[iClock] = rawStream.GetPedestal(iChannel,iClock);
      }
      // Integrator flag
      Bool_t integrator = rawStream.GetIntegratorFlag(iChannel,AliVZEROdigit::kNClocks/2);
      // Beam-beam and beam-gas flags
      if(offlineCh<32) {
	if (rawStream.GetBBFlag(iChannel,AliVZEROdigit::kNClocks/2)) aBBflagsV0C |= (1 << offlineCh);
	if (rawStream.GetBGFlag(iChannel,AliVZEROdigit::kNClocks/2)) aBGflagsV0C |= (1 << offlineCh);
      } else {
	if (rawStream.GetBBFlag(iChannel,AliVZEROdigit::kNClocks/2)) aBBflagsV0A |= (1 << (offlineCh-32));
	if (rawStream.GetBGFlag(iChannel,AliVZEROdigit::kNClocks/2)) aBGflagsV0A |= (1 << (offlineCh-32));
      }
      // HPTDC data (leading time and width)
      Int_t board = AliVZEROCalibData::GetBoardNumber(offlineCh);
      Float_t time = rawStream.GetTime(iChannel)*fCalibData->GetTimeResolution(board);
      Float_t width = rawStream.GetWidth(iChannel)*fCalibData->GetWidthResolution(board);
      // Add a digit
      if(!fCalibData->IsChannelDead(iChannel)){
	  new ((*fDigitsArray)[fDigitsArray->GetEntriesFast()])
	    AliVZEROdigit(offlineCh, time,
			  width,integrator,
			  chargeADC);
      }

      // Filling the part of esd friend object that is available only for raw data
      fESDVZEROfriend->SetBBScalers(offlineCh,rawStream.GetBBScalers(iChannel));
      fESDVZEROfriend->SetBGScalers(offlineCh,rawStream.GetBGScalers(iChannel));
      for (Int_t iBunch = 0; iBunch < AliESDVZEROfriend::kNBunches; iBunch++) {
	fESDVZEROfriend->SetChargeMB(offlineCh,iBunch,rawStream.GetChargeMB(iChannel,iBunch));
	fESDVZEROfriend->SetIntMBFlag(offlineCh,iBunch,rawStream.GetIntMBFlag(iChannel,iBunch));
	fESDVZEROfriend->SetBBMBFlag(offlineCh,iBunch,rawStream.GetBBMBFlag(iChannel,iBunch));
	fESDVZEROfriend->SetBGMBFlag(offlineCh,iBunch,rawStream.GetBGMBFlag(iChannel,iBunch));
      }
      for (Int_t iEv = 0; iEv < AliESDVZEROfriend::kNEvOfInt; iEv++) {
	  fESDVZEROfriend->SetBBFlag(offlineCh,iEv,rawStream.GetBBFlag(iChannel,iEv));
	  fESDVZEROfriend->SetBGFlag(offlineCh,iEv,rawStream.GetBGFlag(iChannel,iEv));
      }
    }  

    // Filling the global part of esd friend object that is available only for raw data
    rawStream.FillTriggerBits(fTriggerData);
    fESDVZEROfriend->SetTriggerInputs(rawStream.GetTriggerInputs());
    fESDVZEROfriend->SetTriggerInputsMask(rawStream.GetTriggerInputsMask());

    for(Int_t iScaler = 0; iScaler < AliESDVZEROfriend::kNScalers; iScaler++)
      fESDVZEROfriend->SetTriggerScalers(iScaler,rawStream.GetTriggerScalers(iScaler));

    for(Int_t iBunch = 0; iBunch < AliESDVZEROfriend::kNBunches; iBunch++)
      fESDVZEROfriend->SetBunchNumbersMB(iBunch,rawStream.GetBunchNumbersMB(iBunch));
     
    // Store the BB and BG flags in the digits tree (user info)
    digitsTree->GetUserInfo()->Add(new TParameter<int>("BBflagsV0A",aBBflagsV0A));
    digitsTree->GetUserInfo()->Add(new TParameter<int>("BBflagsV0C",aBBflagsV0C));
    digitsTree->GetUserInfo()->Add(new TParameter<int>("BGflagsV0A",aBGflagsV0A));
    digitsTree->GetUserInfo()->Add(new TParameter<int>("BGflagsV0C",aBGflagsV0C));

    UShort_t chargeA,chargeC;
    rawStream.CalculateChargeForCentrTriggers(fTriggerData,chargeA,chargeC);
    digitsTree->GetUserInfo()->Add(new TParameter<int>("ChargeA",(Int_t)chargeA));
    digitsTree->GetUserInfo()->Add(new TParameter<int>("ChargeC",(Int_t)chargeC));
    digitsTree->GetUserInfo()->Add(new TParameter<int>("TriggerInputs",(Int_t)rawStream.GetTriggerInputs()));

    digitsTree->Fill();
  }

  fDigitsArray->Clear();
}      

//______________________________________________________________________
void AliVZEROReconstructor::FillESD(TTree* digitsTree, TTree* /*clustersTree*/,
				    AliESDEvent* esd) const
{
// fills multiplicities to the ESD - pedestal is now subtracted
    
  if (!digitsTree) {
      AliError("No digits tree!");
      return;
  }

  TBranch* digitBranch = digitsTree->GetBranch("VZERODigit");
  digitBranch->SetAddress(&fDigitsArray);

  Float_t   mult[64];  
  Float_t    adc[64]; 
  Float_t   time[64]; 
  Float_t  width[64];
  Bool_t aBBflag[64];
  Bool_t aBGflag[64];
   
  for (Int_t i=0; i<64; i++){
       adc[i]    = 0.0;
       mult[i]   = 0.0;
       time[i]   = kInvalidTime;
       width[i]  = 0.0;
       aBBflag[i] = kFALSE;
       aBGflag[i] = kFALSE;
  }
     
  Int_t aBBflagsV0A = 0;
  Int_t aBBflagsV0C = 0;
  Int_t aBGflagsV0A = 0;
  Int_t aBGflagsV0C = 0;

  if (digitsTree->GetUserInfo()->FindObject("BBflagsV0A")) {
    aBBflagsV0A = ((TParameter<int>*)digitsTree->GetUserInfo()->FindObject("BBflagsV0A"))->GetVal();
  }
  else {
    if (esd && (esd->GetEventType() == 7))
      AliWarning("V0A beam-beam flags not found in digits tree UserInfo!");
  }

  if (digitsTree->GetUserInfo()->FindObject("BBflagsV0C")) {
    aBBflagsV0C = ((TParameter<int>*)digitsTree->GetUserInfo()->FindObject("BBflagsV0C"))->GetVal();
  }
  else {
    if (esd && (esd->GetEventType() == 7))
      AliWarning("V0C beam-beam flags not found in digits tree UserInfo!");
  }

  if (digitsTree->GetUserInfo()->FindObject("BGflagsV0A")) {
    aBGflagsV0A = ((TParameter<int>*)digitsTree->GetUserInfo()->FindObject("BGflagsV0A"))->GetVal();
  }
  else {
    if (esd && (esd->GetEventType() == 7))
      AliWarning("V0A beam-gas flags not found in digits tree UserInfo!");
  }

  if (digitsTree->GetUserInfo()->FindObject("BGflagsV0C")) {
    aBGflagsV0C = ((TParameter<int>*)digitsTree->GetUserInfo()->FindObject("BGflagsV0C"))->GetVal();
  }
  else {
    if (esd && (esd->GetEventType() == 7))
      AliWarning("V0C beam-gas flags not found in digits tree UserInfo!");
  }

  // Beam-beam and beam-gas flags (hardware)
  for (Int_t iChannel = 0; iChannel < 64; ++iChannel) {
    if(iChannel < 32) {
      aBBflag[iChannel] = (aBBflagsV0C >> iChannel) & 0x1;
      aBGflag[iChannel] = (aBGflagsV0C >> iChannel) & 0x1;
    }
    else {
      aBBflag[iChannel] = (aBBflagsV0A >> (iChannel-32)) & 0x1;
      aBGflag[iChannel] = (aBGflagsV0A >> (iChannel-32)) & 0x1;
    }
  }

  // Fill the trigger charges and bits
  UShort_t chargeA = 0;
  UShort_t chargeC = 0;
  UShort_t triggerInputs = 0;
  if (digitsTree->GetUserInfo()->FindObject("ChargeA")) {
    chargeA = (UShort_t)(((TParameter<int>*)digitsTree->GetUserInfo()->FindObject("ChargeA"))->GetVal());
  }
  else {
    if (esd && (esd->GetEventType() == 7))
      AliWarning("V0A trigger charge not found in digits tree UserInfo!");
  }

  if (digitsTree->GetUserInfo()->FindObject("ChargeC")) {
    chargeC = (UShort_t)(((TParameter<int>*)digitsTree->GetUserInfo()->FindObject("ChargeC"))->GetVal());
  }
  else {
    if (esd && (esd->GetEventType() == 7))
      AliWarning("V0C trigger charge not found in digits tree UserInfo!");
  }

  if (digitsTree->GetUserInfo()->FindObject("TriggerInputs")) {
    triggerInputs = (UShort_t)(((TParameter<int>*)digitsTree->GetUserInfo()->FindObject("TriggerInputs"))->GetVal());
  }
  else {
    if (esd && (esd->GetEventType() == 7))
      AliWarning("V0C trigger charge not found in digits tree UserInfo!");
  }

  fESDVZERO->SetTriggerChargeA(chargeA);
  fESDVZERO->SetTriggerChargeC(chargeC);
  fESDVZERO->SetTriggerBits(triggerInputs);
  fESDVZERO->SetBit(AliESDVZERO::kTriggerChargeBitsFilled,kTRUE);

  Int_t nEntries = (Int_t)digitsTree->GetEntries();
  for (Int_t e=0; e<nEntries; e++) {
    digitsTree->GetEvent(e);

    Int_t nDigits = fDigitsArray->GetEntriesFast();
    
    for (Int_t d=0; d<nDigits; d++) {    
        AliVZEROdigit* digit = (AliVZEROdigit*) fDigitsArray->At(d);      
        Int_t  pmNumber = digit->PMNumber();

        // Pedestal retrieval and suppression
	Bool_t integrator = digit->Integrator();
        Float_t maxadc = 0;
        Int_t imax = -1;
        Float_t adcPedSub[AliVZEROdigit::kNClocks];
        for(Int_t iClock=0; iClock < AliVZEROdigit::kNClocks; ++iClock) {
	  Short_t charge = digit->ChargeADC(iClock);
	  Bool_t iIntegrator = (iClock%2 == 0) ? integrator : !integrator;
	  Int_t k = pmNumber + 64*iIntegrator;
	  adcPedSub[iClock] = (Float_t)charge - fCalibData->GetPedestal(k);
	  if(adcPedSub[iClock] <= GetRecoParam()->GetNSigmaPed()*fCalibData->GetSigma(k)) {
	    adcPedSub[iClock] = 0;
	    continue;
	  }
	  if(iClock < GetRecoParam()->GetStartClock() || iClock > GetRecoParam()->GetEndClock()) continue;
	  if(adcPedSub[iClock] > maxadc) {
	    maxadc = adcPedSub[iClock];
	    imax   = iClock;
	  }
	}

	if (imax != -1) {
	  Int_t start = imax - GetRecoParam()->GetNPreClocks();
	  if (start < 0) start = 0;
	  Int_t end = imax + GetRecoParam()->GetNPostClocks();
	  if (end > 20) end = 20;
	  for(Int_t iClock = start; iClock <= end; iClock++) {
	    adc[pmNumber] += adcPedSub[iClock];
	  }
	}

	// HPTDC leading time and width
	// Correction for slewing and various time delays
        time[pmNumber]  =  CorrectLeadingTime(pmNumber,digit->Time(),adc[pmNumber]);
	width[pmNumber] =  digit->Width();

	if (adc[pmNumber] > 0) {
	  AliDebug(1,Form("PM = %d ADC = %.2f (%.2f) TDC %.2f (%.2f)   Int %d (%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d)    %.2f %.2f   %.2f %.2f    %d %d",pmNumber, adc[pmNumber],
		       digit->ChargeADC(11)+digit->ChargeADC(10)+digit->ChargeADC(9)+digit->ChargeADC(8)+
		       digit->ChargeADC(7)+digit->ChargeADC(6)+digit->ChargeADC(5)+digit->ChargeADC(4)-
		       4.*fCalibData->GetPedestal(pmNumber)-4.*fCalibData->GetPedestal(pmNumber+64),
			  digit->Time(),time[pmNumber],
			  integrator,
		          digit->ChargeADC(0),digit->ChargeADC(1),digit->ChargeADC(2),digit->ChargeADC(3),digit->ChargeADC(4),digit->ChargeADC(5),digit->ChargeADC(6),digit->ChargeADC(7),
			  digit->ChargeADC(8),digit->ChargeADC(9),digit->ChargeADC(10),
			  digit->ChargeADC(11),digit->ChargeADC(12),
		          digit->ChargeADC(13),digit->ChargeADC(14),digit->ChargeADC(15),digit->ChargeADC(16),digit->ChargeADC(17),digit->ChargeADC(18),digit->ChargeADC(19),digit->ChargeADC(20),
			  fCalibData->GetPedestal(pmNumber),fCalibData->GetSigma(pmNumber),
			  fCalibData->GetPedestal(pmNumber+64),fCalibData->GetSigma(pmNumber+64),
			  aBBflag[pmNumber],aBGflag[pmNumber]));
	    };

	TF1 *saturationFunc = (TF1*)fSaturationCorr->UncheckedAt(pmNumber);
	if (!saturationFunc) AliFatal(Form("Saturation correction for channel %d is not found!",pmNumber));
	AliDebug(1,Form("Saturation PM=%d   %f %f",pmNumber,adc[pmNumber],saturationFunc->Eval(adc[pmNumber])));
	mult[pmNumber] = saturationFunc->Eval(adc[pmNumber])*fCalibData->GetMIPperADC(pmNumber);

	// Fill ESD friend object
	for (Int_t iEv = 0; iEv < AliESDVZEROfriend::kNEvOfInt; iEv++) {
	  fESDVZEROfriend->SetPedestal(pmNumber,iEv,(Float_t)digit->ChargeADC(iEv));
	  fESDVZEROfriend->SetIntegratorFlag(pmNumber,iEv,(iEv%2 == 0) ? integrator : !integrator);
	}
	fESDVZEROfriend->SetTime(pmNumber,digit->Time());
	fESDVZEROfriend->SetWidth(pmNumber,digit->Width());

    } // end of loop over digits
  } // end of loop over events in digits tree
         
  fESDVZERO->SetBit(AliESDVZERO::kCorrectedLeadingTime,kTRUE);
  fESDVZERO->SetMultiplicity(mult);
  fESDVZERO->SetADC(adc);
  fESDVZERO->SetTime(time);
  fESDVZERO->SetWidth(width);
  fESDVZERO->SetBit(AliESDVZERO::kOnlineBitsFilled,kTRUE);
  fESDVZERO->SetBBFlag(aBBflag);
  fESDVZERO->SetBGFlag(aBGflag);
  fESDVZERO->SetBit(AliESDVZERO::kCorrectedForSaturation,kTRUE);

  // now fill the V0 decision and channel flags
  {
    AliVZEROTriggerMask triggerMask;
    triggerMask.SetRecoParam(GetRecoParam());
    triggerMask.FillMasks(fESDVZERO, fCalibData, fTimeSlewing);
  }

  if (esd) { 
     AliDebug(1, Form("Writing VZERO data to ESD tree"));
     esd->SetVZEROData(fESDVZERO);
     const AliESDRun *esdRun = esd->GetESDRun();
     if (esdRun) {
       Float_t factors[64];
       Float_t factorSum = 0;
       for(Int_t i = 0; i < 64; ++i) {
	 factors[i] = fEqFactors->GetBinContent(i+1)*fCalibData->GetMIPperADC(i);
	 factorSum += factors[i];
       }
       for(Int_t i = 0; i < 64; ++i) factors[i] *= (64./factorSum);
       
       esd->SetVZEROEqFactors(factors);
     }
     else
       AliError("AliESDRun object is not available! Cannot write the equalization factors!");
  }

  if (esd) {
     AliESDfriend *fr = (AliESDfriend*)esd->FindListObject("AliESDfriend");
     if (fr) {
        AliDebug(1, Form("Writing VZERO friend data to ESD tree"));
        fr->SetVZEROfriend(fESDVZEROfriend);
    }
  }

  fDigitsArray->Clear();
}

//_____________________________________________________________________________
AliCDBStorage* AliVZEROReconstructor::SetStorage(const char *uri) 
{
// Sets the storage  

  Bool_t deleteManager = kFALSE;
  
  AliCDBManager *manager = AliCDBManager::Instance();
  AliCDBStorage *defstorage = manager->GetDefaultStorage();
  
  if(!defstorage || !(defstorage->Contains("VZERO"))){ 
     AliWarning("No default storage set or default storage doesn't contain VZERO!");
     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; 
}

//____________________________________________________________________________
void AliVZEROReconstructor::GetCollisionMode()
{
  // Retrieval of collision mode 

  TString beamType = GetRunInfo()->GetBeamType();
  if(beamType==AliGRPObject::GetInvalidString()){
     AliError("VZERO cannot retrieve beam type");
     return;
  }

  if( (beamType.CompareTo("P-P") ==0)  || (beamType.CompareTo("p-p") ==0) ){
    fCollisionMode=0;
  }
  else if( (beamType.CompareTo("Pb-Pb") ==0)  || (beamType.CompareTo("A-A") ==0) ){
    fCollisionMode=1;
  }
    
  fBeamEnergy = GetRunInfo()->GetBeamEnergy();
  if(fBeamEnergy==AliGRPObject::GetInvalidFloat()) {
     AliError("Missing value for the beam energy ! Using 0");
     fBeamEnergy = 0.;
  }
  
  AliDebug(1,Form("\n ++++++ Beam type and collision mode retrieved as %s %d @ %1.3f GeV ++++++\n\n",beamType.Data(), fCollisionMode, fBeamEnergy));

}

//_____________________________________________________________________________
AliVZEROCalibData* AliVZEROReconstructor::GetCalibData() const
{
  // Gets calibration object for VZERO set

  AliCDBManager *man = AliCDBManager::Instance();

  AliCDBEntry *entry=0;

  entry = man->Get("VZERO/Calib/Data");

  AliVZEROCalibData *calibdata = 0;

  if (entry) calibdata = (AliVZEROCalibData*) entry->GetObject();
  if (!calibdata)  AliFatal("No calibration data from calibration database !");

  return calibdata;
}

Float_t AliVZEROReconstructor::CorrectLeadingTime(Int_t i, Float_t time, Float_t adc) const
{
  // Correct the leading time
  // for slewing effect and
  // misalignment of the channels
  if (time < 1e-6) return kInvalidTime;

  // Channel alignment and general offset subtraction
  if (i < 32) time -= kV0CDelayCables;
  time -= fTimeOffset[i];

  // In case of pathological signals
  if (adc < 1e-6) return time;

  // Slewing correction
  Float_t thr = fCalibData->GetCalibDiscriThr(i,kTRUE);
  time -= fTimeSlewing->Eval(adc/thr);

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