X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=ZDC%2FAliZDCReconstructor.cxx;h=336dce61f504caa8737832bf088a8f93205ea143;hp=3dabdc20f3402d0ff4eac1c130688f9dfc34f0c6;hb=e131628df21aa763c2cda607f12f544cbc6daa39;hpb=ae7346df6685d33e3c526f4a88f52ba3fb23708f diff --git a/ZDC/AliZDCReconstructor.cxx b/ZDC/AliZDCReconstructor.cxx index 3dabdc20f34..336dce61f50 100644 --- a/ZDC/AliZDCReconstructor.cxx +++ b/ZDC/AliZDCReconstructor.cxx @@ -41,8 +41,10 @@ #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" @@ -58,7 +60,9 @@ AliZDCMBCalib *AliZDCReconstructor::fgMBCalibData=0; //calibration parameters f AliZDCReconstructor:: AliZDCReconstructor() : fPedData(GetPedestalData()), fEnCalibData(GetEnergyCalibData()), + fSatCalibData(GetSaturationCalibData()), fTowCalibData(GetTowerCalibData()), + fTDCCalibData(GetTDCCalibData()), fRecoMode(0), fBeamEnergy(0.), fNRun(0), @@ -66,8 +70,7 @@ AliZDCReconstructor:: AliZDCReconstructor() : fPedSubMode(0), fSignalThreshold(7), fMeanPhase(0), - fESDZDC(NULL) -{ + fESDZDC(NULL){ // **** Default constructor } @@ -79,6 +82,7 @@ AliZDCReconstructor::~AliZDCReconstructor() // 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; @@ -106,12 +110,19 @@ void AliZDCReconstructor::Init() }*/ fBeamEnergy = GetRunInfo()->GetBeamEnergy(); - if(fBeamEnergy<0.01) AliWarning(" Beam energy value missing -> E_beam = 0"); - + 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(GetRecoParam()); @@ -128,8 +139,8 @@ void AliZDCReconstructor::Init() fMeanPhase = phaseLHC->GetMeanPhaseB1(); if(fIsCalibrationMB==kFALSE) - printf("\n\n ***** ZDC reconstruction initialized for %s @ %1.0f + %1.0f GeV *****\n\n", - beamType.Data(), fBeamEnergy, fBeamEnergy); + 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) @@ -138,6 +149,8 @@ void AliZDCReconstructor::Init() fBeamEnergy = 1380.; } + AliInfo(Form("\n ZDC reconstruction mode %d (1 -> p-p, 2-> A-A)\n\n",fRecoMode)); + fESDZDC = new AliESDZDC(); } @@ -157,6 +170,10 @@ void AliZDCReconstructor::Init(TString beamType, Float_t beamEnergy) ||((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(GetRecoParam()); @@ -170,8 +187,8 @@ void AliZDCReconstructor::Init(TString beamType, Float_t beamEnergy) fESDZDC = new AliESDZDC(); - printf("\n\n ***** ZDC reconstruction initialized for %s @ %1.0f + %1.0f GeV *****\n\n", - beamType.Data(), fBeamEnergy, fBeamEnergy); + AliInfo(Form("\n\n ***** ZDC reconstruction initialized for %s @ %1.0f + %1.0f GeV *****\n\n", + beamType.Data(), fBeamEnergy, fBeamEnergy)); } @@ -248,56 +265,38 @@ void AliZDCReconstructor::Reconstruct(TTree* digitsTree, TTree* clustersTree) co if(det == 1){ // *** ZNC tZN1Corr[quad] = (Float_t) (digit.GetADCValue(0)-ped2SubHg); tZN1Corr[quad+5] = (Float_t) (digit.GetADCValue(1)-ped2SubLg); - if(tZN1Corr[quad]<0.) tZN1Corr[quad] = 0.; - if(tZN1Corr[quad+5]<0.) tZN1Corr[quad+5] = 0.; } else if(det == 2){ // *** ZP1 tZP1Corr[quad] = (Float_t) (digit.GetADCValue(0)-ped2SubHg); tZP1Corr[quad+5] = (Float_t) (digit.GetADCValue(1)-ped2SubLg); - if(tZP1Corr[quad]<0.) tZP1Corr[quad] = 0.; - if(tZP1Corr[quad+5]<0.) tZP1Corr[quad+5] = 0.; } else if(det == 3){ if(quad == 1){ // *** ZEM1 dZEM1Corr[0] += (Float_t) (digit.GetADCValue(0)-ped2SubHg); dZEM1Corr[1] += (Float_t) (digit.GetADCValue(1)-ped2SubLg); - if(dZEM1Corr[0]<0.) dZEM1Corr[0] = 0.; - if(dZEM1Corr[1]<0.) dZEM1Corr[1] = 0.; } else if(quad == 2){ // *** ZEM2 dZEM2Corr[0] += (Float_t) (digit.GetADCValue(0)-ped2SubHg); dZEM2Corr[1] += (Float_t) (digit.GetADCValue(1)-ped2SubLg); - if(dZEM2Corr[0]<0.) dZEM2Corr[0] = 0.; - if(dZEM2Corr[1]<0.) dZEM2Corr[1] = 0.; } } else if(det == 4){ // *** ZN2 tZN2Corr[quad] = (Float_t) (digit.GetADCValue(0)-ped2SubHg); tZN2Corr[quad+5] = (Float_t) (digit.GetADCValue(1)-ped2SubLg); - if(tZN2Corr[quad]<0.) tZN2Corr[quad] = 0.; - if(tZN2Corr[quad+5]<0.) tZN2Corr[quad+5] = 0.; } else if(det == 5){ // *** ZP2 tZP2Corr[quad] = (Float_t) (digit.GetADCValue(0)-ped2SubHg); tZP2Corr[quad+5] = (Float_t) (digit.GetADCValue(1)-ped2SubLg); - if(tZP2Corr[quad]<0.) tZP2Corr[quad] = 0.; - if(tZP2Corr[quad+5]<0.) tZP2Corr[quad+5] = 0.; } } else{ // Reference PMs if(det == 1){ sPMRef1[0] = (Float_t) (digit.GetADCValue(0)-ped2SubHg); sPMRef1[1] = (Float_t) (digit.GetADCValue(1)-ped2SubLg); - // Ch. debug - if(sPMRef1[0]<0.) sPMRef1[0] = 0.; - if(sPMRef2[1]<0.) sPMRef1[1] = 0.; } else if(det == 4){ sPMRef2[0] = (Float_t) (digit.GetADCValue(0)-ped2SubHg); sPMRef2[1] = (Float_t) (digit.GetADCValue(1)-ped2SubLg); - // Ch. debug - if(sPMRef2[0]<0.) sPMRef2[0] = 0.; - if(sPMRef2[1]<0.) sPMRef2[1] = 0.; } } @@ -426,26 +425,15 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr // **** 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; - if(((det==1 && quad==0) || (det==3))){ - if(det == 1){ - if(adcMod==0 || adcMod==1){ - if(gain==0) adcZN1[quad] = rawData.GetADCValue(); - else adcZN1lg[quad] = rawData.GetADCValue(); - } - else if(adcMod==2 || adcMod==3){ - if(gain==0) adcZN1oot[quad] = rawData.GetADCValue(); - else adcZN1ootlg[quad] = rawData.GetADCValue(); - } + // **** 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(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(); - } + 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!!! @@ -453,7 +441,7 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr // ************************************************************************* if(quad != 5){ // ZDCs (not reference PTMs) - if(det==1 && quad!=0){ + 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]); @@ -572,7 +560,7 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr }// ADC DATA // ***************************** Reading Scaler else if(rawData.GetADCModule()==kScalerGeo){ - if(rawData.IsScalerWord()==kTRUE && rawData.IsScEventGood()==kTRUE){ + if(rawData.IsScalerWord()==kTRUE){ isScalerOn = kTRUE; scalerData[jsc] = rawData.GetTriggerCount(); // Ch. debug @@ -587,9 +575,9 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr if(itdc==iprevtdc) ihittdc++; else ihittdc=0; iprevtdc=itdc; - tdcData[itdc][ihittdc] = rawData.GetZDCTDCDatum(); + if(ihittdc<4) tdcData[itdc][ihittdc] = rawData.GetZDCTDCDatum(); // Ch. debug - //printf(" Reconstructed TDC[%d, %d] %d ",itdc, ihittdc, tdcData[itdc][ihittdc]); + //if(ihittdc==0) printf(" TDC%d %d ",itdc, tdcData[itdc][ihittdc]); }// ZDC TDC DATA // ***************************** Reading PU else if(rawData.GetADCModule()==kPUGeo){ @@ -630,9 +618,9 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr sPMRef2[1] = pmReflg[0] - (corrCoeff1[23+kNch]*pmRefootlg[1]+corrCoeff0[23+kNch]); } if(fPedSubMode==0 && fRecoMode==2){ - // **** Pb-Pb data taking 2010 -> 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]); + // **** 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]); @@ -648,8 +636,6 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr } else if(fPedSubMode==0 && fRecoMode==1){ // **** p-p data taking 2011 -> temporary patch to overcome DA problem **** - tZN1Corr[0] = adcZN1[0] - meanPed[0]; - tZN1Corr[5] = adcZN1lg[0] - meanPed[kNch]; // dZEM1Corr[0] = adcZEM[0] - meanPed[10]; dZEM1Corr[1] = adcZEMlg[0] - meanPed[10+kNch]; @@ -750,10 +736,14 @@ void AliZDCReconstructor::ReconstructEventpp(TTree *clustersTree, equalCoeffZP2[ji] = fTowCalibData->GetZP2EqualCoeff(ji); } // --- Energy calibration factors ------------------------------------ - Float_t calibEne[6]; + 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]; @@ -783,6 +773,24 @@ void AliZDCReconstructor::ReconstructEventpp(TTree *clustersTree, 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++){ @@ -946,10 +954,14 @@ void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree, equalCoeffZP2[ji] = fTowCalibData->GetZP2EqualCoeff(ji); } // --- Energy calibration factors ------------------------------------ - Float_t calibEne[6]; - // The energy calibration object already takes into account of E_beam - // -> the value from the OCDB can be directly used (Jul 2010) + 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]; @@ -981,6 +993,18 @@ void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree, 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++){ @@ -1009,9 +1033,9 @@ void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree, calibSumZP2[1] = calibSumZP2[1]*calibEne[3]; // Float_t sumZEM[]={0,0}, calibZEM1[]={0,0}, calibZEM2[]={0,0}; - calibZEM1[0] = corrADCZEM1[0]*calibEne[4]*8.; + calibZEM1[0] = corrADCZEM1[0]*calibEne[4]; calibZEM1[1] = corrADCZEM1[1]*calibEne[4]; - calibZEM2[0] = corrADCZEM2[0]*calibEne[5]*8.; + calibZEM2[0] = corrADCZEM2[0]*calibEne[5]; calibZEM2[1] = corrADCZEM2[1]*calibEne[5]; for(Int_t k=0; k<2; k++) sumZEM[k] = calibZEM1[k] + calibZEM2[k]; @@ -1061,20 +1085,20 @@ void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree, Double_t b=0., bA=0., bC=0.; if(fIsCalibrationMB == kFALSE){ - // ****** Reconstruction parameters ------------------ - if(!fgRecoParam) fgRecoParam = const_cast(GetRecoParam()); - if(!fgRecoParam){ - AliError(" RecoParam object not retrieved correctly: not reconstructing 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; - } - + // ****** Reconstruction parameters ------------------ + if(!fgRecoParam) fgRecoParam = const_cast(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(GetMBCalibData()); TH2F *hZDCvsZEM = fgMBCalibData->GethZDCvsZEM(); TH2F *hZDCCvsZEM = fgMBCalibData->GethZDCCvsZEM(); @@ -1282,7 +1306,7 @@ void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree, delete line; delete lineC; delete lineA; - + } } // ONLY IF fIsCalibrationMB==kFALSE Bool_t energyFlag = kTRUE; @@ -1308,6 +1332,13 @@ void AliZDCReconstructor::FillZDCintoESD(TTree *clustersTree, AliESDEvent* esd) { // 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; jjGetMeanTDC(jj); + //fTDCCalibData->Print(""); + AliZDCReco reco; AliZDCReco* preco = &reco; clustersTree->SetBranchAddress("ZDC", &preco); @@ -1358,21 +1389,41 @@ void AliZDCReconstructor::FillZDCintoESD(TTree *clustersTree, AliESDEvent* esd) fESDZDC->SetZDCScaler(counts); } - // Writing TDC data into ZDC ESDs - Int_t tdcValues[32][4]; - Float_t tdcCorrected[32][4]; + 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.) tdcCorrected[jk][lk] = 0.025*(tdcValues[jk][lk]-tdcValues[15][0])+fMeanPhase; + 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()); @@ -1439,6 +1490,22 @@ AliZDCEnCalib* AliZDCReconstructor::GetEnergyCalibData() const return calibdata; } +//_____________________________________________________________________________ +AliZDCSaturationCalib* AliZDCReconstructor::GetSaturationCalibData() const +{ + + // Getting energy and equalization calibration object for ZDC set + + AliCDBEntry *entry = AliCDBManager::Instance()->Get("ZDC/Calib/SaturationCalib"); + if(!entry) AliFatal("No calibration data loaded!"); + entry->SetOwner(kFALSE); + + AliZDCSaturationCalib *calibdata = dynamic_cast (entry->GetObject()); + if(!calibdata) AliFatal("Wrong calibration object in calibration file!"); + + return calibdata; +} + //_____________________________________________________________________________ AliZDCTowerCalib* AliZDCReconstructor::GetTowerCalibData() const { @@ -1470,3 +1537,19 @@ AliZDCMBCalib* AliZDCReconstructor::GetMBCalibData() const return calibdata; } + +//_____________________________________________________________________________ +AliZDCTDCCalib* AliZDCReconstructor::GetTDCCalibData() const +{ + + // Getting TDC object for ZDC + + AliCDBEntry *entry = AliCDBManager::Instance()->Get("ZDC/Calib/TDCCalib"); + if(!entry) AliFatal("No calibration data loaded!"); + entry->SetOwner(kFALSE); + + AliZDCTDCCalib *calibdata = dynamic_cast (entry->GetObject()); + if(!calibdata) AliFatal("Wrong calibration object in calibration file!"); + + return calibdata; +}