X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=ZDC%2FAliZDCReconstructor.cxx;h=336dce61f504caa8737832bf088a8f93205ea143;hp=82b655f72255d87918f15b1876f80b83c172b5e4;hb=e131628df21aa763c2cda607f12f544cbc6daa39;hpb=45b889f8d0dbf4f31c8445be8f390a943212663b diff --git a/ZDC/AliZDCReconstructor.cxx b/ZDC/AliZDCReconstructor.cxx index 82b655f7225..336dce61f50 100644 --- a/ZDC/AliZDCReconstructor.cxx +++ b/ZDC/AliZDCReconstructor.cxx @@ -41,6 +41,7 @@ #include "AliZDCReconstructor.h" #include "AliZDCPedestals.h" #include "AliZDCEnCalib.h" +#include "AliZDCSaturationCalib.h" #include "AliZDCTowerCalib.h" #include "AliZDCMBCalib.h" #include "AliZDCTDCCalib.h" @@ -59,6 +60,7 @@ AliZDCMBCalib *AliZDCReconstructor::fgMBCalibData=0; //calibration parameters f AliZDCReconstructor:: AliZDCReconstructor() : fPedData(GetPedestalData()), fEnCalibData(GetEnergyCalibData()), + fSatCalibData(GetSaturationCalibData()), fTowCalibData(GetTowerCalibData()), fTDCCalibData(GetTDCCalibData()), fRecoMode(0), @@ -68,8 +70,7 @@ AliZDCReconstructor:: AliZDCReconstructor() : fPedSubMode(0), fSignalThreshold(7), fMeanPhase(0), - fESDZDC(NULL) -{ + fESDZDC(NULL){ // **** Default constructor } @@ -81,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; @@ -117,6 +119,10 @@ void AliZDCReconstructor::Init() ||((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()); @@ -164,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()); @@ -626,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]; @@ -728,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]; @@ -761,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++){ @@ -924,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]; @@ -959,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++){ @@ -987,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]; @@ -1344,10 +1390,17 @@ void AliZDCReconstructor::FillZDCintoESD(TTree *clustersTree, AliESDEvent* esd) } Int_t tdcValues[32][4] = {{0,}}; - Float_t tdcCorrected[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]); } @@ -1359,12 +1412,14 @@ void AliZDCReconstructor::FillZDCintoESD(TTree *clustersTree, AliESDEvent* esd) 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; - // 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]); - + // 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]); + } } } } @@ -1435,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 {