X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=VZERO%2FAliVZEROReconstructor.cxx;h=cace640eb51ffabb757a451ec363ffa043e05f6a;hb=ab6650a3f604a1ad9870486a8e4103d93dc7017c;hp=76b4f24afe1ff9a7b5e7ea859137488dc973e7ab;hpb=7905581c7910821a5e51443d825dadf55d02f3de;p=u%2Fmrichter%2FAliRoot.git diff --git a/VZERO/AliVZEROReconstructor.cxx b/VZERO/AliVZEROReconstructor.cxx index 76b4f24afe1..cace640eb51 100644 --- a/VZERO/AliVZEROReconstructor.cxx +++ b/VZERO/AliVZEROReconstructor.cxx @@ -42,6 +42,7 @@ #include "AliVZEROCalibData.h" #include "AliRunInfo.h" #include "AliCTPTimeParams.h" +#include "AliLHCClockPhase.h" ClassImp(AliVZEROReconstructor) @@ -52,6 +53,7 @@ AliVZEROReconstructor:: AliVZEROReconstructor(): AliReconstructor(), fESDVZEROfriend(0x0), fCalibData(NULL), fTimeSlewing(NULL), + fSaturationCorr(NULL), fCollisionMode(0), fBeamEnergy(0.), fDigitsArray(0) @@ -79,15 +81,24 @@ AliVZEROReconstructor:: AliVZEROReconstructor(): AliReconstructor(), 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->GetTriggerCountOffset(board)- - (Float_t)fCalibData->GetRollOver(board))*25.0+ + fTimeOffset[i] = (((Float_t)fCalibData->GetRollOver(board)- + (Float_t)fCalibData->GetTriggerCountOffset(board))*25.0+ fCalibData->GetTimeOffset(i)- - l1Delay+ + 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(); } @@ -106,8 +117,11 @@ AliVZEROReconstructor::~AliVZEROReconstructor() { // destructor - delete fESDVZERO; + if(fESDVZERO) + delete fESDVZERO; + if(fESDVZEROfriend) delete fESDVZEROfriend; + if(fDigitsArray) delete fDigitsArray; } @@ -185,7 +199,10 @@ void AliVZEROReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digits 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 @@ -327,23 +344,26 @@ void AliVZEROReconstructor::FillESD(TTree* digitsTree, TTree* /*clustersTree*/, time[pmNumber] = CorrectLeadingTime(pmNumber,digit->Time(),adc[pmNumber]); width[pmNumber] = digit->Width(); - if (adc[pmNumber] > 0) AliDebug(1,Form("PM = %d ADC = %f TDC %f (%f) Int %d (%d %d %d %d %d) %f %f %f %f %d %d",pmNumber, adc[pmNumber], - digit->Time(),time[pmNumber], - integrator, - digit->ChargeADC(8),digit->ChargeADC(9),digit->ChargeADC(10), - digit->ChargeADC(11),digit->ChargeADC(12), - fCalibData->GetPedestal(pmNumber),fCalibData->GetSigma(pmNumber), - fCalibData->GetPedestal(pmNumber+64),fCalibData->GetSigma(pmNumber+64), - aBBflag[pmNumber],aBGflag[pmNumber])); - - mult[pmNumber] = adc[pmNumber]*fCalibData->GetMIPperADC(pmNumber); + if (adc[pmNumber] > 0) { + AliDebug(1,Form("PM = %d ADC = %f TDC %f (%f) Int %d (%d %d %d %d %d) %f %f %f %f %d %d",pmNumber, adc[pmNumber], + digit->Time(),time[pmNumber], + integrator, + digit->ChargeADC(8),digit->ChargeADC(9),digit->ChargeADC(10), + digit->ChargeADC(11),digit->ChargeADC(12), + 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->SetBBFlag(pmNumber,iEv,aBBflag[pmNumber]); - fESDVZEROfriend->SetBGFlag(pmNumber,iEv,aBGflag[pmNumber]); } fESDVZEROfriend->SetTime(pmNumber,digit->Time()); fESDVZEROfriend->SetWidth(pmNumber,digit->Width()); @@ -359,10 +379,12 @@ void AliVZEROReconstructor::FillESD(TTree* digitsTree, TTree* /*clustersTree*/, 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); } @@ -470,7 +492,7 @@ Float_t AliVZEROReconstructor::CorrectLeadingTime(Int_t i, Float_t time, Float_t if (adc < 1e-6) return time; // Slewing correction - Float_t thr = fCalibData->GetDiscriThr(i); + Float_t thr = fCalibData->GetCalibDiscriThr(i,kTRUE); time -= fTimeSlewing->Eval(adc/thr); return time;