From 9e05925bee566433064203d186027bee36a0a227 Mon Sep 17 00:00:00 2001 From: hristov Date: Thu, 2 Dec 2010 12:34:13 +0000 Subject: [PATCH] #75811 ZDC: changes to be ported to the release --- STEER/AliESDZDC.cxx | 26 ++++++++--- STEER/AliESDZDC.h | 15 ++++--- ZDC/AliZDCQAChecker.cxx | 8 ++-- ZDC/AliZDCQADataMakerRec.cxx | 18 ++++---- ZDC/AliZDCReco.cxx | 4 +- ZDC/AliZDCReco.h | 8 ++-- ZDC/AliZDCReconstructor.cxx | 87 +++++++++++++++++++++++++----------- ZDC/AliZDCReconstructor.h | 19 ++++---- ZDC/CheckAlienZDCESD.C | 2 +- 9 files changed, 122 insertions(+), 65 deletions(-) diff --git a/STEER/AliESDZDC.cxx b/STEER/AliESDZDC.cxx index a2e8230cefc..aff13643568 100644 --- a/STEER/AliESDZDC.cxx +++ b/STEER/AliESDZDC.cxx @@ -55,7 +55,11 @@ AliESDZDC::AliESDZDC() : } for(Int_t i=0; i<32; i++){ fVMEScaler[i]=0; - for(Int_t y=0; y<4; y++) fZDCTDCData[i][y]=0; + for(Int_t y=0; y<4; y++){ + fZDCTDCData[i][y]=0.; + fZNCTime[y]=0.; + fZNATime[y]=0.; + } } } @@ -93,7 +97,11 @@ AliESDZDC::AliESDZDC(const AliESDZDC& zdc) : } for(Int_t i=0; i<32; i++){ fVMEScaler[i] = zdc.fVMEScaler[i]; - for(Int_t y=0; y<4; y++) fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y]; + for(Int_t y=0; y<4; y++){ + fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y]; + fZNCTime[y] = zdc.fZNCTime[y]; + fZNATime[y] = zdc.fZNATime[y]; + } } } @@ -135,7 +143,11 @@ AliESDZDC& AliESDZDC::operator=(const AliESDZDC&zdc) fESDQuality = zdc.fESDQuality; for(Int_t i=0; i<32; i++){ fVMEScaler[i] = zdc.fVMEScaler[i]; - for(Int_t y=0; y<4; y++) fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y]; + for(Int_t y=0; y<4; y++){ + fZDCTDCData[i][y] = zdc.fZDCTDCData[i][y]; + fZNCTime[y] = zdc.fZNCTime[y]; + fZNATime[y] = zdc.fZNATime[y]; + } } } return *this; @@ -184,7 +196,11 @@ void AliESDZDC::Reset() fESDQuality=0; for(Int_t i=0; i<32; i++){ fVMEScaler[i] = 0; - for(Int_t y=0; y<4; y++) fZDCTDCData[i][y] = 0; + for(Int_t y=0; y<4; y++){ + fZDCTDCData[i][y] = 0.; + fZNCTime[y] = 0.; + fZNATime[y] = 0.; + } } } @@ -250,7 +266,7 @@ Bool_t AliESDZDC::GetZNCentroidInPbPb(Float_t beamEne, Double_t centrZNC[2], Dou fZNCCentrCoord[0] = fZNCCentrCoord[1] = 999.; } if(denZNA!=0){ - Float_t nSpecnA = fZDCN1Energy/beamEne; + Float_t nSpecnA = fZDCN2Energy/beamEne; cZNA = 1.89358-0.71262/(nSpecnA+0.71789); fZNACentrCoord[0] = cZNA*numXZNA/denZNA; fZNACentrCoord[1] = cZNA*numYZNA/denZNA; diff --git a/STEER/AliESDZDC.h b/STEER/AliESDZDC.h index 57350327f93..ed37ff3bd9d 100644 --- a/STEER/AliESDZDC.h +++ b/STEER/AliESDZDC.h @@ -84,15 +84,18 @@ public: UInt_t GetZDCScaler(Int_t i) const {return fVMEScaler[i];} const UInt_t* GetZDCScaler() const {return fVMEScaler;} - Int_t GetZDCTDCData(Int_t i, Int_t j) const {return fZDCTDCData[i][j];} + Float_t GetZDCTDCData(Int_t i, Int_t j) const {return fZDCTDCData[i][j];} void SetZDCScaler(const UInt_t count[32]) {for(Int_t k=0; k<32; k++) fVMEScaler[k] = count[k];} - void SetZDCTDC(const Int_t values[32][4]) + void SetZDCTDC(const Float_t values[32][4]) {for(Int_t k=0; k<32; k++) for(Int_t j=0; j<4; j++) fZDCTDCData[k][j] = values[k][j];} + void SetZNCTime(const Float_t val[4]) {for(int k=0; k<4; k++) fZNCTime[k] = val[k];} + void SetZNATime(const Float_t val[4]) {for(int k=0; k<4; k++) fZNATime[k] = val[k];} + void Reset(); void Print(const Option_t *opt=0) const; @@ -121,10 +124,12 @@ private: Double32_t fZNACentrCoord[2]; // Coordinates of the centroid over ZNC Double32_t fZNCCentrCoord[2]; // Coordinates of the centroid over ZNA UInt_t fESDQuality; // flags from reconstruction - UInt_t fVMEScaler[32]; // counts from VME scaler - Int_t fZDCTDCData[32][4]; // ZDC TDC data + UInt_t fVMEScaler[32]; // counts from VME scaler + Float_t fZDCTDCData[32][4];// ZDC TDC data + Float_t fZNCTime[4]; // ZNC corrected TDC data + Float_t fZNATime[4]; // ZNA corrected TDC data - ClassDef(AliESDZDC,14) + ClassDef(AliESDZDC,15) }; #endif diff --git a/ZDC/AliZDCQAChecker.cxx b/ZDC/AliZDCQAChecker.cxx index e7e64e0363f..e01bbbaca9a 100644 --- a/ZDC/AliZDCQAChecker.cxx +++ b/ZDC/AliZDCQAChecker.cxx @@ -675,7 +675,7 @@ void AliZDCQAChecker::Check(Double_t * test, AliQAv1::ALITASK_t index, TObjArra } // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff if(irecHisto==11){ - if(TMath::Abs(meanZNC)>1.e-10){ + if((TMath::Abs(meanZNC)>1.e-10) && (pmCZNC>1.e-10)){ if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)1.e-10){ + if((TMath::Abs(meanZNA)>1.e-10) && (pmCZNA>1.e-10)){ if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)1.e-10){ + if((TMath::Abs(meanZPC)>1.e-10) && (pmCZPC>1.e-10)){ if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)1.e-10){ + if((TMath::Abs(meanZPA)>1.e-10) && (pmCZPA>1.e-10)){ if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)GetRunType(); if((runType.CompareTo("CALIBRATION_MB")) == 0){ fIsCalibrationMB = kTRUE; @@ -103,6 +104,9 @@ void AliZDCReconstructor::Init() AliError("\t UNKNOWN beam type\n"); return; }*/ + + fBeamEnergy = GetRunInfo()->GetBeamEnergy(); + if(fBeamEnergy<0.01) AliWarning(" Beam energy value missing -> E_beam = 0"); if(((beamType.CompareTo("pp"))==0) || ((beamType.CompareTo("p-p"))==0) ||((beamType.CompareTo("PP"))==0) || ((beamType.CompareTo("P-P"))==0)){ @@ -110,10 +114,16 @@ void AliZDCReconstructor::Init() } else if((beamType.CompareTo("A-A")) == 0 || (beamType.CompareTo("AA")) == 0){ fRecoMode=2; + if(!fgRecoParam) fgRecoParam = const_cast(GetRecoParam()); + if(fgRecoParam){ + fgRecoParam->SetGlauberMCDist(fBeamEnergy); + } } - - fBeamEnergy = GetRunInfo()->GetBeamEnergy(); - if(fBeamEnergy<0.01) AliWarning(" Beam energy value missing -> E_beam = 0"); + + AliCDBEntry *entry = AliCDBManager::Instance()->Get("GRP/Calib/LHCClockPhase"); + if (!entry) AliFatal("LHC clock-phase shift is not found in OCDB !"); + AliLHCClockPhase *phaseLHC = (AliLHCClockPhase*)entry->GetObject(); + fMeanPhase = phaseLHC->GetMeanPhase(); if(fIsCalibrationMB==kFALSE) printf("\n\n ***** ZDC reconstruction initialized for %s @ %1.0f + %1.0f GeV *****\n\n", @@ -123,6 +133,7 @@ void AliZDCReconstructor::Init() // pp-like reconstruction must be performed (E cailb. coeff. = 1) if((runType.CompareTo("CALIBRATION_EMD")) == 0){ fRecoMode=1; + fBeamEnergy = 1380.; } fESDZDC = new AliESDZDC(); @@ -149,6 +160,11 @@ void AliZDCReconstructor::Init(TString beamType, Float_t beamEnergy) if(!fgRecoParam) fgRecoParam = const_cast(GetRecoParam()); if( fgRecoParam ) fgRecoParam->SetGlauberMCDist(fBeamEnergy); } + + AliCDBEntry *entry = AliCDBManager::Instance()->Get("GRP/Calib/LHCClockPhase"); + if (!entry) AliFatal("LHC clock-phase shift is not found in OCDB !"); + AliLHCClockPhase *phaseLHC = (AliLHCClockPhase*)entry->GetObject(); + fMeanPhase = phaseLHC->GetMeanPhase(); fESDZDC = new AliESDZDC(); @@ -295,10 +311,10 @@ void AliZDCReconstructor::Reconstruct(TTree* digitsTree, TTree* clustersTree) co }//digits loop UInt_t counts[32]; - Int_t tdc[32][4]; + Float_t tdc[32][4]; for(Int_t jj=0; jj<32; jj++){ counts[jj]=0; - for(Int_t ii=0; ii<4; ii++) tdc[jj][ii]=0; + for(Int_t ii=0; ii<4; ii++) tdc[jj][ii]=0.; } Int_t evQualityBlock[4] = {1,0,0,0}; @@ -364,12 +380,13 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr Bool_t isScalerOn=kFALSE; Int_t jsc=0, itdc=0, iprevtdc=-1, ihittdc=0; UInt_t scalerData[32]; - Int_t tdcData[32][4]; + Float_t tdcData[32][4]; for(Int_t k=0; k<32; k++){ scalerData[k]=0; - for(Int_t i=0; i<4; i++) tdcData[k][i]=0; + for(Int_t i=0; i<4; i++) tdcData[k][i]=0.; } + Int_t evQualityBlock[4] = {1,0,0,0}; Int_t triggerBlock[4] = {0,0,0,0}; Int_t chBlock[3] = {0,0,0}; @@ -544,7 +561,7 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr iprevtdc=itdc; tdcData[itdc][ihittdc] = rawData.GetZDCTDCDatum(); // Ch. debug - printf(" Reconstructed TDC[%d, %d] %d ",itdc, ihittdc, tdcData[itdc][ihittdc]); + //printf(" Reconstructed TDC[%d, %d] %d ",itdc, ihittdc, tdcData[itdc][ihittdc]); }// ZDC TDC DATA // ***************************** Reading PU else if(rawData.GetADCModule()==kPUGeo){ @@ -635,7 +652,7 @@ void AliZDCReconstructor::ReconstructEventpp(TTree *clustersTree, const Float_t* const corrADCZN2, const Float_t* const corrADCZP2, const Float_t* const corrADCZEM1, const Float_t* const corrADCZEM2, Float_t* sPMRef1, Float_t* sPMRef2, Bool_t isScalerOn, UInt_t* scaler, - Int_t tdcData[32][4], const Int_t* const evQualityBlock, + Float_t tdcData[32][4], const Int_t* const evQualityBlock, const Int_t* const triggerBlock, const Int_t* const chBlock, UInt_t puBits) const { // ****************** Reconstruct one event ****************** @@ -831,7 +848,7 @@ void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree, const Float_t* const corrADCZN2, const Float_t* const corrADCZP2, const Float_t* const corrADCZEM1, const Float_t* const corrADCZEM2, Float_t* sPMRef1, Float_t* sPMRef2, Bool_t isScalerOn, UInt_t* scaler, - Int_t tdcData[32][4], const Int_t* const evQualityBlock, + Float_t tdcData[32][4], const Int_t* const evQualityBlock, const Int_t* const triggerBlock, const Int_t* const chBlock, UInt_t puBits) const { // ****************** Reconstruct one event ****************** @@ -1020,23 +1037,26 @@ void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree, if(fIsCalibrationMB == kFALSE){ // ****** Reconstruction parameters ------------------ - if(!fgMBCalibData) fgMBCalibData = const_cast(GetMBCalibData()); - if(!fgRecoParam){ - fgRecoParam = const_cast(GetRecoParam()); - if(!fgRecoParam) return; - fgRecoParam->SetGlauberMCDist(fBeamEnergy); + 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; } + if(!fgMBCalibData) fgMBCalibData = const_cast(GetMBCalibData()); TH2F *hZDCvsZEM = fgMBCalibData->GethZDCvsZEM(); TH2F *hZDCCvsZEM = fgMBCalibData->GethZDCCvsZEM(); TH2F *hZDCAvsZEM = fgMBCalibData->GethZDCAvsZEM(); // - TH1D *hNpartDist = fgRecoParam->GethNpartDist(); - TH1D *hbDist = fgRecoParam->GethbDist(); - Float_t clkCenter = fgRecoParam->GetClkCenter(); - // Double_t xHighEdge = hZDCvsZEM->GetXaxis()->GetXmax(); - Double_t origin = xHighEdge*clkCenter; + Double_t origin = xHighEdge*fClkCenter; // Ch. debug //printf("\n\n xHighEdge %1.2f, origin %1.4f \n", xHighEdge, origin); // @@ -1310,15 +1330,30 @@ void AliZDCReconstructor::FillZDCintoESD(TTree *clustersTree, AliESDEvent* esd) UInt_t counts[32]; for(Int_t jk=0; jk<32; jk++) counts[jk] = reco.GetZDCScaler(jk); fESDZDC->SetZDCScaler(counts); - } + } // Writing TDC data into ZDC ESDs - Int_t tdcValues[32][4]; + Float_t tdcValues[32][4]; + Float_t zncTime[4]={0.,0.,0.,0.}, znaTime[4]={0.,0.,0.,0.}; for(Int_t jk=0; jk<32; jk++){ - for(Int_t lk=0; lk<4; lk++) tdcValues[jk][lk] = reco.GetZDCTDCData(jk, lk); + Int_t indc=0, inda=0; + for(Int_t lk=0; lk<4; lk++){ + tdcValues[jk][lk] = 0.025*reco.GetZDCTDCData(jk, lk); + if((jk==10) && (tdcValues[jk][lk]!=0)){ + zncTime[indc] = tdcValues[jk][lk]-tdcValues[14][0]+fMeanPhase; + indc++; + } + else if((jk==12) && (tdcValues[jk][lk]!=0)){ + znaTime[inda] = tdcValues[jk][lk]-tdcValues[14][0]+fMeanPhase; + inda++; + } + } } fESDZDC->SetZDCTDC(tdcValues); + fESDZDC->SetZNCTime(zncTime); + fESDZDC->SetZNATime(znaTime); + if(esd) esd->SetZDCData(fESDZDC); } diff --git a/ZDC/AliZDCReconstructor.h b/ZDC/AliZDCReconstructor.h index d226b4dae18..bba587f9a61 100644 --- a/ZDC/AliZDCReconstructor.h +++ b/ZDC/AliZDCReconstructor.h @@ -81,14 +81,14 @@ private: const Float_t* const corrADCZN2, const Float_t* const corrADCZP2, const Float_t* const corrADCZEM1, const Float_t* const corrADCZEM2, Float_t* sPMRef1, Float_t* sPMRef2, Bool_t isScalerOn, UInt_t* scaler, - Int_t tdcData[32][4], const Int_t* const evQualityBlock, + Float_t tdcData[32][4], const Int_t* const evQualityBlock, const Int_t* const triggerBlock, const Int_t* const chBlock, UInt_t puBits) const; void ReconstructEventPbPb(TTree *clustersTree, const Float_t* const corrADCZN1, const Float_t* const corrADCZP1, const Float_t* const corrADCZN2, const Float_t* const corrADCZP2, const Float_t* const corrADCZEM1, const Float_t* const corrADCZEM2, Float_t* sPMRef1, Float_t* sPMRef2, Bool_t isScalerOn, UInt_t* scaler, - Int_t tdcData[32][4], const Int_t* const evQualityBlock, + Float_t tdcData[32][4], const Int_t* const evQualityBlock, const Int_t* const triggerBlock, const Int_t* const chBlock, UInt_t puBits) const; static AliZDCRecoParam *fgRecoParam; // reconstruction parameters @@ -98,16 +98,17 @@ private: AliZDCEnCalib *fEnCalibData; //! energy calibration data AliZDCTowerCalib *fTowCalibData; //! equalization calibration data - Int_t fRecoMode; // =1->p-p, =2->A-A - Float_t fBeamEnergy; // beam energy - Int_t fNRun; // Run Number (from raw data) - Bool_t fIsCalibrationMB; // true if run type = "CALIBRATION_MB" - Int_t fPedSubMode; // =0->mean values, =1->from correlations - Float_t fSignalThreshold; // Threshold value for "triggering" in p-p + Int_t fRecoMode; // =1->p-p, =2->A-A + Float_t fBeamEnergy; // beam energy + Int_t fNRun; // Run Number (from raw data) + Bool_t fIsCalibrationMB; // true if run type = "CALIBRATION_MB" + Int_t fPedSubMode; // =0->mean values, =1->from correlations + Float_t fSignalThreshold; // Threshold value for "triggering" in p-p + Double_t fMeanPhase; // LHC clock phase AliESDZDC* fESDZDC; // ESD output object - ClassDef(AliZDCReconstructor, 11) // class for the ZDC reconstruction + ClassDef(AliZDCReconstructor, 12) // class for the ZDC reconstruction }; #endif diff --git a/ZDC/CheckAlienZDCESD.C b/ZDC/CheckAlienZDCESD.C index 1111b21dd40..de5153101b6 100644 --- a/ZDC/CheckAlienZDCESD.C +++ b/ZDC/CheckAlienZDCESD.C @@ -250,7 +250,7 @@ void CheckAlienZDCESD(Int_t year=2010, const char* period="10f", */ Float_t tdcData[32][4]; for(Int_t isc=0; isc<32; isc++){ - for(Int_t i=0; i<4; i++) tdcData[isc][i] = 0.025*esdZDC->GetZDCTDCData(isc, i); + for(Int_t i=0; i<4; i++) tdcData[isc][i] = esdZDC->GetZDCTDCData(isc, i); } for(Int_t itdc=0; itdc<32; itdc++){ for(Int_t j=0; j<4; j++){ -- 2.43.0