#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)
{
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& )
{
Fatal("operator =", "assignment operator not implemented");
return *this;
}
AliVZEROReconstructor::~AliVZEROReconstructor()
{
if(fESDVZERO)
delete fESDVZERO;
if(fESDVZEROfriend)
delete fESDVZEROfriend;
if(fDigitsArray)
delete fDigitsArray;
}
void AliVZEROReconstructor::Init()
{
fESDVZERO = new AliESDVZERO;
fESDVZEROfriend = new AliESDVZEROfriend;
GetCollisionMode();
}
void AliVZEROReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const
{
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);
Short_t chargeADC[AliVZEROdigit::kNClocks];
for(Int_t iClock=0; iClock < AliVZEROdigit::kNClocks; ++iClock) {
chargeADC[iClock] = rawStream.GetPedestal(iChannel,iClock);
}
Bool_t integrator = rawStream.GetIntegratorFlag(iChannel,AliVZEROdigit::kNClocks/2);
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));
}
Int_t board = AliVZEROCalibData::GetBoardNumber(offlineCh);
Float_t time = rawStream.GetTime(iChannel)*fCalibData->GetTimeResolution(board);
Float_t width = rawStream.GetWidth(iChannel)*fCalibData->GetWidthResolution(board);
if(!fCalibData->IsChannelDead(iChannel)){
new ((*fDigitsArray)[fDigitsArray->GetEntriesFast()])
AliVZEROdigit(offlineCh, time,
width,integrator,
chargeADC);
}
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));
}
}
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));
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* ,
AliESDEvent* esd) const
{
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!");
}
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;
}
}
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();
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];
}
}
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);
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());
}
}
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);
{
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)
{
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;
}
return storage;
}
void AliVZEROReconstructor::GetCollisionMode()
{
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
{
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
{
if (time < 1e-6) return kInvalidTime;
if (i < 32) time -= kV0CDelayCables;
time -= fTimeOffset[i];
if (adc < 1e-6) return time;
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