ATLAS Offline Software
JESCalibStep.cxx
Go to the documentation of this file.
1 
3 /*
4  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 // EtaMassJESCalibStep.cxx
8 // Implementation file for class EtaMassJESCalibStep
9 // Author: Max Swiatlowski <mswiatlo@cern.ch>
11 
14 
15 #include "TFile.h"
16 
18 
20  : asg::AsgTool( name ){ }
21 
22 
24  ATH_MSG_DEBUG ("Initializing " << name() << " Use spline="<<m_useSpline);
25 
26  ATH_MSG_DEBUG("Reading from " << m_jetInScale << " and writing to " << m_jetOutScale);
27 
28  if(! m_useSpline){
29  if(!readMCJESFromText()) {
30  ATH_MSG_ERROR("Problem when reading constant file : "<< m_constantFileName);
31  return StatusCode::FAILURE;
32  }
33  } else { // use spline
34  if(!readMCJESFromHists()) {
35  ATH_MSG_ERROR("Problem when reading constant file : "<< m_histoFileName);
36  return StatusCode::FAILURE;
37  }
38  }
39 
40  ATH_CHECK( m_vartoolE.retrieve() );
41  ATH_CHECK( m_vartoolEta.retrieve() );
42 
43  return StatusCode::SUCCESS;
44 }
45 
47  ATH_MSG_DEBUG("Calibrating jet collection.");
48 
49 
51 
52  for(xAOD::Jet* jet: jets){
53 
54  const xAOD::JetFourMom_t jetStartP4 = jet->getAttribute<xAOD::JetFourMom_t>(m_jetInScale);
55  jet->setJetP4(jetStartP4);
56 
57  // Extract the maximum energy, and store in the context
59  double varE {m_vartoolE->getValue(*jet,jc)};
60  double varEta {m_vartoolEta->getValue(*jet,jc)};
61  double Emax = getEmaxJES(varEta);
62 
63  // Extract JES from the text handling tool
64  double jesCorrection = getJES(varE, varEta, Emax);
65  int ieta=getEtaBin(varEta);
66 
67 
68  xAOD::JetFourMom_t calibP4 = jetStartP4 * jesCorrection;
69 
70 
71  const float etaCorr = calibP4.eta() + getEtaCorr(jesCorrection*varE, varEta) ; //m_textTool_Eta->getValue(*jet, jc);
72  ATH_MSG_DEBUG("eta = "<<etaCorr);
73 
74  // Apply the eta correction, use TLV from ROOT to do some math for us
75  TLorentzVector TLVjet;
76  TLVjet.SetPtEtaPhiM( calibP4.P()/cosh(etaCorr), etaCorr, calibP4.phi(), calibP4.M() );
77  calibP4.SetPxPyPzE( TLVjet.Px(), TLVjet.Py(), TLVjet.Pz(), TLVjet.E() );
78  ATH_MSG_DEBUG("JES = "<<jesCorrection << " e="<<varE << " eta="<<jetStartP4.Eta()<< " ieta="<< ieta << " post_pt= ="<< calibP4.Pt() << " etaCorr="<< etaCorr);
79 
80  // Set the decorations of this scale
81  jesScaleMomAcc.setAttribute(*jet, calibP4);
82  jet->setJetP4(calibP4);
83  }
84 
85  return StatusCode::SUCCESS;
86 }
87 
88 
90 {
91  // Open the input file
92  std::string local_path=static_cast<std::string> (m_constantFileName);
94  if(fileName=="") return false;
95 
96  TEnv config(fileName.c_str());
97 
98  std::string jetAlgo=static_cast<std::string> (m_jetAlgo);
99 
100  std::vector<double> etaBins = VectorizeD(config.GetValue("JES.EtaBins","")," ");
101  if (etaBins.size()==0){ // default binning
102  for (int i=0;i<=90; i++)
103  etaBins.push_back(0.1*i-4.5);
104  }
105 
106  ATH_MSG_DEBUG("Number eta bins: " << etaBins.size());
107 
108  m_etaBinAxis = new TAxis(etaBins.size()-1,&etaBins[0]);// this is to search for eta bin
109 
110  for (uint ieta=0; ieta<etaBins.size()-1; ++ieta)
111  {
112  TString key=Form("JES.%s_Bin%d",jetAlgo.c_str(),ieta);
113  ATH_MSG_VERBOSE("reading: " << key << " = "<< config.GetValue(key,""));
114  std::vector<double> params = VectorizeD(config.GetValue(key,"")," ");
115  m_nPar = params.size();
116  ATH_MSG_VERBOSE("Number of parameters: " << m_nPar);
117  for (uint ipar=0;ipar<m_nPar;++ipar) m_JESFactors[ieta][ipar] = params[ipar];
118  if(m_lowPtExtrap > 0) {
119  //Calculate the slope of the response curve at the minPt for each eta bin
120  //Used in the GetLowPtJES method when Pt < minPt
121  const double *factors = m_JESFactors[ieta];
122  double Ecutoff = m_minPt_JES*cosh(etaBins[ieta]);
123  const double Rcutoff = getLogPolN(factors,Ecutoff);
124  const double Slope = getLogPolNSlope(factors,Ecutoff);
125  if(Slope > Rcutoff/Ecutoff) ATH_MSG_FATAL("Slope of calibration curve at minimum ET is too steep for the JES factors of etabin " << ieta << ", eta = " << etaBins[ieta] );
126 
127  m_JES_MinPt_E[ieta] = Ecutoff;
128  m_JES_MinPt_R[ieta] = Rcutoff;
129  m_JES_MinPt_Slopes[ieta] = Slope;
130 
131  //Calculate the parameters for a 2nd order polynomial extension to the calibration curve below minimum ET
132  //Used in the GetLowPtJES method when Pt < minPt
133  if(m_lowPtExtrap == 2) {
134  ATH_MSG_ERROR("LowPtJESExtrapolationMethod==2 not supported yet");
135  return false;
136  }
137  }
138 
139 
140  key=Form("EtaCorr.%s_Bin%d",jetAlgo.c_str(),ieta);
141  ATH_MSG_VERBOSE("reading: " << key << " = "<< config.GetValue(key,""));
142  params = VectorizeD(config.GetValue(key,"")," ");
143  m_nPar = params.size();
144  ATH_MSG_VERBOSE("Number of parameters: " << m_nPar);
145  for (uint ipar=0;ipar<m_nPar;++ipar) m_etaCorrFactors[ieta][ipar] = params[ipar];
146 
147  key=Form("EmaxJES.%s_Bin%d",jetAlgo.c_str(),ieta);
148  ATH_MSG_VERBOSE("reading: " << key << " = "<< config.GetValue(key,""));
149  params = VectorizeD(config.GetValue(key,"")," ");
150  m_energyFreezeJES[ieta] = params[0];
151  }
152  return true;
153 }
154 
155 
156 
158 {
159  // Open the input file
160  std::string local_path=static_cast<std::string> (m_constantFileName);
162 
163  TEnv config(fileName.c_str());
164  if(fileName=="") return false;
165 
166  std::string jetAlgo=static_cast<std::string> (m_jetAlgo);
167 
168  std::vector<double> etaBins = VectorizeD(config.GetValue("JES.EtaBins","")," ");
169  if (etaBins.size()==0){ // default binning
170  for (int i=0;i<=90; i++)
171  etaBins.push_back(0.1*i-4.5);
172  }
173 
174  ATH_MSG_DEBUG("Number eta bins: " << etaBins.size());
175 
176  m_etaBinAxis = new TAxis(etaBins.size()-1,&etaBins[0]);// this is to search for eta bin
177 
178  std::string calibHistFile = PathResolverFindCalibFile(m_histoFileName);
179  loadSplineHists(calibHistFile, "etaJes");
180 
181  //Protections for high order extrapolation methods at low Et (Et < _minPt_JES)
182  if(m_lowPtExtrap != 1) {
183  ATH_MSG_ERROR("Only linear extrapolations are supported for p-splines currently. Please change the config file to reflect this");
184  return false;
185  }
186 
187  for (uint ieta=0;ieta<etaBins.size()-1;++ieta) {
188  //Calculate the slope of the response curve at the minPt for each eta bin
189  //Used in the GetLowPtJES method when Pt < minPt
190  double Ecutoff= m_minPt_JES*cosh(etaBins[ieta]);
191  const double Rcutoff = getSplineCorr(ieta, Ecutoff);
192  const double Slope = getSplineSlope(ieta, Ecutoff);
193  if(Slope > Rcutoff/Ecutoff) ATH_MSG_WARNING("Slope of calibration curve at minimum ET is too steep for the JES factors of etabin " << ieta << ", eta = " << etaBins[ieta] );
194 
195  m_JES_MinPt_E[ieta] = Ecutoff;
196  m_JES_MinPt_R[ieta] = Rcutoff;
197  m_JES_MinPt_Slopes[ieta] = Slope;
198 
199  TString key=Form("EmaxJES.%s_Bin%d",jetAlgo.c_str(),ieta);
200  ATH_MSG_VERBOSE("reading: " << key << " = "<< config.GetValue(key,""));
201  std::vector<double> params = VectorizeD(config.GetValue(key,"")," ");
202  m_energyFreezeJES[ieta] = params[0];
203 
204  key=Form("EtaCorr.%s_Bin%d",jetAlgo.c_str(),ieta);
205  ATH_MSG_VERBOSE("reading: " << key << " = "<< config.GetValue(key,""));
206  params = VectorizeD(config.GetValue(key,"")," ");
207  m_nPar = params.size();
208  ATH_MSG_VERBOSE("Number of parameters: " << m_nPar);
209  for (uint ipar=0;ipar<m_nPar;++ipar) m_etaCorrFactors[ieta][ipar] = params[ipar];
210 
211 
212  }
213  return true;
214 }
215 
216 
217 double EtaMassJESCalibStep::getJES(const double X, const double Y, const double Emax) const
218 {
219 
220  if ( X/cosh(Y) < m_minPt_JES ) { // WARNING !! Won't work if X is actually pT
221  double R = getLowPtJES(X,Y);
222  return 1.0/R;
223  }
224 
225  double JES_R;
226  int binEta = getEtaBin(Y);
227  const double *factors = m_JESFactors[binEta];
228 
229 
230  double E = X;
231  if( m_freezeJESatHighE && (E>Emax) && (Emax!=-1)) {
232  E = Emax;
233  }
234 
235  double R = 1.;
236 
237  if(m_useSpline){
238  R = getSplineCorr(binEta, E);
239  return 1.0/R;
240  } else {
241  R = getLogPolN(factors,E);
242  }
243 
244  JES_R = 1/R;
245 
246  return JES_R;
247 }
248 
249 
250 double EtaMassJESCalibStep::getLowPtJES(double E_uncorr, double eta_det) const {
251  int ieta = getEtaBin(eta_det);
252  double R=1;
253  // This correspond to m_lowPtExtrap == 0 in the old EtaJESCorrection tool. Not supporting other cases yet.
254  if (m_lowPtExtrap == 0) {
255  const double *factors = m_JESFactors[ieta];
256  double E = m_minPt_JES*cosh(eta_det);
257  R= getLogPolN(factors,E);
258  } if (m_lowPtExtrap == 1) {
259  double Ecutoff = m_JES_MinPt_E[ieta];
260  double Rcutoff = m_JES_MinPt_R[ieta];
261  double slope = m_JES_MinPt_Slopes[ieta];
262  R = slope*(E_uncorr-Ecutoff)+Rcutoff;
263  }
264  else ATH_MSG_WARNING("Incorrect specification of low Pt JES extrapolation, please check the value of the LowPtJESExtrapolationMethod config flag.");
265 
266  return R;
267 }
268 
269 
270 double EtaMassJESCalibStep::getEtaCorr( double X, double Y) const
271 {
272  int binEta = getEtaBin(Y);
273  const double *factors = m_etaCorrFactors[binEta];
274 
275  if ( X < m_minPt_EtaCorr*cosh(Y) )
276  X = m_minPt_EtaCorr*cosh(Y);
278 
279  double eta_corr = getLogPolN(factors,X);
280 
281  return -eta_corr;
282 }
283 
284 double EtaMassJESCalibStep::getEmaxJES(const double Y) const
285 {
286  int binEta = getEtaBin(Y);
287  double emaxJES = m_energyFreezeJES[binEta];
288 
289  return emaxJES;
290 }
291 
292 double EtaMassJESCalibStep::getLogPolN(const double *factors, double x) const
293 {
294  double y=0;
295  for ( uint i=0; i<m_nPar; ++i )
296  y += factors[i]*TMath::Power(log(x),Int_t(i));
297  return y;
298 }
299 
300 
301 
302 int EtaMassJESCalibStep::getEtaBin(double eta_det) const
303 {
304  int bin = std::as_const(m_etaBinAxis)->FindBin(eta_det);
305  if (bin<=0) return 0;
306  if (bin>m_etaBinAxis->GetNbins()) return bin-2; // overflow
307  return bin-1;
308 }
309 
310 double EtaMassJESCalibStep::getLogPolNSlope(const double *factors, double x) const {
311  double y=0;
312  const double inv_x = 1. / x;
313  for ( uint i=0; i<m_nPar; ++i )
314  y += i*factors[i]*TMath::Power(log(x),Int_t(i-1))*inv_x;
315  return y;
316 }
317 
318 
319 void EtaMassJESCalibStep::loadSplineHists(const std::string & fileName, const std::string &etajes_name)
320 {
321  std::unique_ptr<TFile> tmpF(TFile::Open( fileName.c_str() ));
322  TList *etajes_l = static_cast<TList*>( tmpF->Get(etajes_name.c_str()));
323 
324  m_etajesFactors.resize( etajes_l->GetSize() );
325  if(etajes_l->GetSize() != m_etaBinAxis->GetNbins()+1){
326  ATH_MSG_WARNING("Do not have the correct number of eta bins for " << fileName << "\t" << etajes_name << "\t" << etajes_l->GetSize() );
327  }
328 
329  for(int i=0 ; i<m_etaBinAxis->GetNbins(); i++){
330  auto *pTH1 = dynamic_cast<TH1*>(etajes_l->At(i));
331  if (not pTH1) continue;
332  m_etajesFactors[i].reset(pTH1);
333  m_etajesFactors[i]->SetDirectory(nullptr);
334  }
335  tmpF->Close();
336 }
337 
338 
339 double EtaMassJESCalibStep::getSplineSlope(const int ieta, const double minE) const {
340  // Don't want to use interpolation here, so instead just use the values at the bin centers near the cutoff
341  int minBin = m_etajesFactors[ieta]->FindBin(minE);
342 
343  double rFirst = m_etajesFactors[ ieta ]->GetBinContent(minBin);
344  double rSecond = m_etajesFactors[ ieta ]->GetBinContent(minBin+1);
345  double binWidth = m_etajesFactors[ ieta ]->GetBinCenter(minBin+1) - m_etajesFactors[ ieta ]->GetBinCenter(minBin);
346  double slope = (rSecond - rFirst) / binWidth;
347 
348  return slope;
349 }
350 
351 
352 double EtaMassJESCalibStep::getSplineCorr(const int etaBin, double E) const {
353  double R = m_etajesFactors[ etaBin ]->Interpolate(E);
354  return R;
355 }
EtaMassJESCalibStep::initialize
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition: JESCalibStep.cxx:23
EtaMassJESCalibStep::m_etaBinAxis
TAxis * m_etaBinAxis
Definition: JESCalibStep.h:100
EtaMassJESCalibStep::getEtaBin
int getEtaBin(double eta_det) const
Definition: JESCalibStep.cxx:302
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
EtaMassJESCalibStep::m_nPar
unsigned int m_nPar
Definition: JESCalibStep.h:89
EtaMassJESCalibStep::m_JES_MinPt_R
double m_JES_MinPt_R[s_nEtaBins]
Definition: JESCalibStep.h:97
JetHelper::JetContext
Class JetContext Designed to read AOD information related to the event, N vertices,...
Definition: JetContext.h:24
EtaMassJESCalibStep::m_jetInScale
Gaudi::Property< std::string > m_jetInScale
Definition: JESCalibStep.h:64
EtaMassJESCalibStep::m_etaCorrFactors
double m_etaCorrFactors[s_nEtaBins][s_nParMax]
Definition: JESCalibStep.h:93
xAOD::JetAttributeAccessor::AccessorWrapper::setAttribute
void setAttribute(SG::AuxElement &p, const TYPE &v) const
Definition: JetAccessors.h:54
EtaMassJESCalibStep::EtaMassJESCalibStep
EtaMassJESCalibStep(const std::string &name="EtaMassJESCalibStep")
Definition: JESCalibStep.cxx:19
python.base_data.config
config
Definition: base_data.py:20
ConvertOldUJHistosToNewHistos.etaBins
list etaBins
Definition: ConvertOldUJHistosToNewHistos.py:145
EtaMassJESCalibStep::m_energyFreezeJES
double m_energyFreezeJES[s_nEtaBins]
Definition: JESCalibStep.h:94
asg
Definition: DataHandleTestTool.h:28
bin
Definition: BinsDiffFromStripMedian.h:43
defineDB.jets
jets
Definition: JetTagCalibration/share/defineDB.py:24
EtaMassJESCalibStep::getLowPtJES
double getLowPtJES(double E_uncorr, double eta_det) const
deal with low pt jets
Definition: JESCalibStep.cxx:250
EtaMassJESCalibStep::getEtaCorr
double getEtaCorr(double X, double Y=0) const
return Eta correction
Definition: JESCalibStep.cxx:270
Trk::binEta
@ binEta
Definition: BinningType.h:54
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
x
#define x
binWidth
void binWidth(TH1 *h)
Definition: listroot.cxx:80
EtaMassJESCalibStep::m_jetAlgo
Gaudi::Property< std::string > m_jetAlgo
jet collection to be calibrated
Definition: JESCalibStep.h:71
EtaMassJESCalibStep::m_lowPtExtrap
Gaudi::Property< float > m_lowPtExtrap
Definition: JESCalibStep.h:74
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
Monitored::X
@ X
Definition: HistogramFillerUtils.h:24
EtaMassJESCalibStep::m_JESFactors
double m_JESFactors[s_nEtaBins][s_nParMax]
Definition: JESCalibStep.h:92
JESCalibStep.h
EtaMassJESCalibStep::loadSplineHists
void loadSplineHists(const std::string &fileName, const std::string &etajes_name)
Definition: JESCalibStep.cxx:319
EtaMassJESCalibStep::calibrate
virtual StatusCode calibrate(xAOD::JetContainer &) const override
Apply calibration to a jet container.
Definition: JESCalibStep.cxx:46
EtaMassJESCalibStep::getSplineCorr
double getSplineCorr(const int etaBin, double E) const
Definition: JESCalibStep.cxx:352
EtaMassJESCalibStep::m_JES_MinPt_E
double m_JES_MinPt_E[s_nEtaBins]
Definition: JESCalibStep.h:96
uint
unsigned int uint
Definition: LArOFPhaseFill.cxx:20
xAOD::etaBin
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap etaBin
Definition: L2StandAloneMuon_v1.cxx:149
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
EtaMassJESCalibStep::getJES
double getJES(const double X, const double Y=0, const double Emax=-1) const
return MCJES calibration factor
Definition: JESCalibStep.cxx:217
EtaMassJESCalibStep::getLogPolNSlope
double getLogPolNSlope(const double *factors, double x) const
Definition: JESCalibStep.cxx:310
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
EtaMassJESCalibStep::m_JES_MinPt_Slopes
double m_JES_MinPt_Slopes[s_nEtaBins]
Definition: JESCalibStep.h:95
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
EtaMassJESCalibStep::m_minPt_JES
Gaudi::Property< float > m_minPt_JES
Definition: JESCalibStep.h:72
EtaMassJESCalibStep::m_vartoolEta
ToolHandle< JetHelper::IVarTool > m_vartoolEta
interface for xAOD::jet variable to be defined by user, this must correspond to jet Eta in currect ve...
Definition: JESCalibStep.h:86
AnalysisUtils::Delta::R
double R(const INavigable4Momentum *p1, const double v_eta, const double v_phi)
Definition: AnalysisMisc.h:49
EtaMassJESCalibStep::m_maxE_EtaCorr
Gaudi::Property< float > m_maxE_EtaCorr
Definition: JESCalibStep.h:78
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
EtaMassJESCalibStep::readMCJESFromHists
bool readMCJESFromHists()
Definition: JESCalibStep.cxx:157
Monitored::Y
@ Y
Definition: HistogramFillerUtils.h:24
EtaMassJESCalibStep::m_vartoolE
ToolHandle< JetHelper::IVarTool > m_vartoolE
Definition: JESCalibStep.h:84
xAOD::JetFourMom_t
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
Definition: JetTypes.h:17
EtaMassJESCalibStep::getLogPolN
double getLogPolN(const double *factors, double x) const
Definition: JESCalibStep.cxx:292
PathResolver.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
VP1PartSpect::E
@ E
Definition: VP1PartSpectFlags.h:21
EtaMassJESCalibStep::readMCJESFromText
bool readMCJESFromText()
Definition: JESCalibStep.cxx:89
EtaMassJESCalibStep::m_jetOutScale
Gaudi::Property< std::string > m_jetOutScale
Definition: JESCalibStep.h:66
EtaMassJESCalibStep::m_minPt_EtaCorr
Gaudi::Property< float > m_minPt_EtaCorr
Definition: JESCalibStep.h:77
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:283
EtaMassJESCalibStep::m_histoFileName
Gaudi::Property< std::string > m_histoFileName
Definition: JESCalibStep.h:80
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
y
#define y
GlobalVariables.Emax
Emax
Definition: GlobalVariables.py:184
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::JetAttributeAccessor::AccessorWrapper< xAOD::JetFourMom_t >
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
EtaMassJESCalibStep::m_useSpline
Gaudi::Property< bool > m_useSpline
Definition: JESCalibStep.h:81
EtaMassJESCalibStep::getEmaxJES
double getEmaxJES(const double Y) const
return Emax
Definition: JESCalibStep.cxx:284
JetCalibUtils::VectorizeD
VecD VectorizeD(const TString &str, const TString &sep=" ")
Definition: JetCalibUtils.cxx:25
jobOptions.fileName
fileName
Definition: jobOptions.SuperChic_ALP2.py:39
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
EtaMassJESCalibStep::getSplineSlope
double getSplineSlope(const int ieta, const double minE) const
Definition: JESCalibStep.cxx:339
EtaMassJESCalibStep::m_constantFileName
Gaudi::Property< std::string > m_constantFileName
name of the text file
Definition: JESCalibStep.h:69
EtaMassJESCalibStep::m_etajesFactors
std::vector< std::unique_ptr< TH1 > > m_etajesFactors
Definition: JESCalibStep.h:102
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
EtaMassJESCalibStep::m_freezeJESatHighE
Gaudi::Property< bool > m_freezeJESatHighE
Definition: JESCalibStep.h:73