Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ToolWithConstants.h
Go to the documentation of this file.
1 // This file's extension implies that it's C, but it's really -*- C++ -*-.
2 /*
3  * Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration.
4  */
18 #ifndef CALOUTILS_TOOLWITHCONSTANTS_H
19 #define CALOUTILS_TOOLWITHCONSTANTS_H
20 
21 
22 #include "CaloUtils/exceptions.h"
29 #include "Gaudi/Property.h"
30 #include <string>
31 #include <sstream>
32 #include <type_traits>
33 
34 
35 namespace Gaudi {
36 namespace Parsers {
37 
38 
39 // Unused, because we override fromString() below, but required
40 // in order to compile the overridden fromString() from Gaudi.
41 template <unsigned int N>
42 StatusCode parse (CaloRec::Array<N>&, const std::string&)
43 {
44  return StatusCode::FAILURE;
45 }
46 
47 
48 }} // namespace Gaudi::Parsers
49 
50 
51 namespace CaloUtils {
52 
53 
60 {
61 public:
62  const EventContext& ctx() const { return m_ctx; }
63 
65  const EventContext& ctx)
67  m_ctx (ctx)
68  {
69  }
71  const EventContext& m_ctx;
72 };
73 
74 
75 
80 {
81 public:
83  virtual ~IToolConstant() = default;
84 
86  virtual std::string name() const = 0;
87 
89  virtual bool setFromJO() const = 0;
90 };
91 
92 
93 //***********************************************************************
94 
95 
102 {
103 public:
105 
106 
113  ToolWithConstantsImpl (const std::string& toolName,
114  const std::string& prefix,
116 
117 
122 
123 
129  Context context (const EventContext& ctx) const;
130 
131 
136  void addConstant (IToolConstant* c);
137 
138 
145  void writeConstants (std::ostream& stream,
146  const std::string& name,
147  const EventContext& ctx) const;
148 
149 
158  StatusCode
159  mergeConstants (const std::string& typeName,
160  int toolVersion,
161  Context& myctx,
162  bool isDummy,
163  CaloRec::ToolConstants& out) const;
164 
165 
167  std::string m_toolName;
168 
170  // Note: Held by a reference, not by value.
171  // This comes from a property of the owning tool, and is not set
172  // until we run initialize() on that tool.
173  const std::string& m_prefix;
174 
177 
180 
182  std::vector<IToolConstant*> m_declaredConstants;
183 };
184 
185 
186 //***********************************************************************
187 
188 
194 template <CxxUtils::FromArrayrep T>
195  // Must be able to initialize a T with fromArrayrep
196  // Doesn't actaully work like this, though, as there's a conflict
197  // with the friend declaration below.
199  : public IToolConstant
200 {
201 public:
204 
205 
212  template <class OWNER>
213  ToolConstant (OWNER* owner,
214  const std::string& name,
215  const std::string& doc = "");
216 
217 
228  template <class OWNER>
229  ToolConstant (OWNER* owner,
230  const std::string& name,
231  const char* doc);
232 
233 
243  template <class OWNER,
244  typename U = T,
245  typename = std::enable_if_t<std::is_arithmetic_v<U> > >
246  ToolConstant (OWNER* owner,
247  const std::string& name,
248  const T& deflt,
249  const std::string& doc = "");
250 
251 
256  T operator() (const Context& c) const;
257 
258 
264  T operator()() const;
265 
266 
270  virtual std::string name() const override;
271 
272 
276  virtual bool setFromJO() const override;
277 
278 
279 private:
284  class CProperty
285  : public Gaudi::Property<T>
286  {
287  public:
294  CProperty (const std::string& name,
295  const std::string& doc,
297 
298 
306  CProperty (const std::string& name,
307  const std::string& doc,
309  const T& deflt);
310 
311 
312  // To be able to assign to this wrapper.
313  using Gaudi::Property<T>::operator=;
314 
315 
319  virtual std::string toString() const override;
320 
321 
326  virtual void toStream( std::ostream& out ) const override;
327 
328 
333  virtual StatusCode fromString( const std::string& value ) override;
334 
335 
338 
340  bool m_setFromJO = false;
341 
343  bool m_hasDefault = false;
344  };
345 
346 
348  CProperty m_prop;
349 
352 };
353 
354 
355 //***************************************************************************
356 
357 
361 template <class T>
362 concept HasProperties =
363  requires (T& c, Gaudi::Property<int>& p)
364  {
365  { c.declareProperty(p) };
366  };
367 
368 
444 template <HasProperties BASE>
446  : public extends<BASE, IToolWithConstants>
447 {
448 public:
451 
452 
454  using extends<BASE, IToolWithConstants>::extends;
455 
456 
459 
460 
462  template <CxxUtils::FromArrayrep T>
464 
465 
469  virtual StatusCode initialize() override;
470 
471 
477  Context context (const EventContext& ctx) const;
478 
479 
486  virtual void writeConstants (std::ostream& stream,
487  const std::string& name,
488  const EventContext& ctx) const;
489 
490 
497  const EventContext& ctx) const override;
498 
499 
512  virtual int toolVersion() const;
513 
514 
525  virtual const std::string& toolType() const;
526 
527 
528 private:
529  // Make this a friend so it can access m_impl.
530  template <CxxUtils::FromArrayrep T>
532 
535  { this, "DBHandleKey", "", "" };
536 
538  StringProperty m_prefix
539  { this, "prefix", "", "" };
540 
543 
548  { this, "order", 0 };
549 
561  {this, "isDummy", false };
562 };
563 
564 
565 } // namespace CaloUtils
566 
567 
569 
570 
571 #undef ATH_TWC_REQUIRES
572 
573 
574 #endif // not CALOUTILS_TOOLWITHCONSTANTS_H
exceptions.h
Exceptions that can be thrown from CaloUtils.
CaloUtils::ToolWithConstantsImpl::m_constants
CaloRec::ToolConstants m_constants
For settings made from JO.
Definition: ToolWithConstants.h:176
CaloUtils::ToolWithConstants::base_class
ToolWithConstants base_class
Shorthand for derived classes.
Definition: ToolWithConstants.h:450
CaloUtils::ToolConstant::CProperty::m_hasDefault
bool m_hasDefault
Does this constant have a default?
Definition: ToolWithConstants.h:343
CaloUtils::IToolConstant::name
virtual std::string name() const =0
The name of the constant.
CaloUtils::ToolWithConstantsImpl::addConstant
void addConstant(IToolConstant *c)
Add a new constant to the tool.
Definition: ToolWithConstants.cxx:66
CaloUtils::ToolConstant::setFromJO
virtual bool setFromJO() const override
Was this constant set through job options?
Gaudi::Parsers::parse
StatusCode parse(std::tuple< Tup... > &tup, const Gaudi::Parsers::InputData &input)
Definition: CaloGPUClusterAndCellDataMonitorOptions.h:284
AthCheckMacros.h
ToolConstants.h
Container for the tool constants managed by ToolWithConstants.
CaloUtils::ToolConstant::m_toolVersion
int m_toolVersion
Version of the owning tool.
Definition: ToolWithConstants.h:351
CaloUtils::ToolWithConstantsImpl::mergeConstants
StatusCode mergeConstants(const std::string &typeName, int toolVersion, Context &myctx, bool isDummy, CaloRec::ToolConstants &out) const
Merge our constants into out with the proper prefix.
Definition: ToolWithConstants.cxx:101
CaloUtils
Definition: ToolWithConstantsTestTool.h:21
CaloUtils::ToolConstant::CProperty::m_impl
ToolWithConstantsImpl & m_impl
Reference to implementation object.
Definition: ToolWithConstants.h:337
CaloUtils::IToolConstant::setFromJO
virtual bool setFromJO() const =0
True if this constant was initialized from job options.
CaloUtils::ToolWithConstants::mergeConstants
virtual StatusCode mergeConstants(CaloRec::ToolConstants &out, const EventContext &ctx) const override
Merge our constants into out with the proper prefix.
CaloUtils::ToolConstantsContext::ctx
const EventContext & ctx() const
Definition: ToolWithConstants.h:62
CaloUtils::HasProperties
concept HasProperties
Concept to test if a class has Gaudi properties.
Definition: ToolWithConstants.h:362
CaloUtils::ToolWithConstantsImpl::m_toolName
std::string m_toolName
Name of the owning tool.
Definition: ToolWithConstants.h:167
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
athena.value
value
Definition: athena.py:124
requires
requires requires()
This specialization is used for classes deriving from DataObject.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:68
CaloUtils::ToolWithConstants::writeConstants
virtual void writeConstants(std::ostream &stream, const std::string &name, const EventContext &ctx) const
Dump method (for debugging)
CaloUtils::ToolWithConstantsImpl
Internal implementation object.
Definition: ToolWithConstants.h:102
AthenaPoolTestWrite.stream
string stream
Definition: AthenaPoolTestWrite.py:12
CaloUtils::ToolConstant::CProperty::fromString
virtual StatusCode fromString(const std::string &value) override
Initialize this propery's value from a string.
ReadCondHandle.h
CaloUtils::ToolConstant::m_prop
CProperty m_prop
Internal Property instance, for getting JO settings from Gaudi.
Definition: ToolWithConstants.h:348
CaloUtils::ToolWithConstants::initialize
virtual StatusCode initialize() override
Initialize method.
CaloUtils::ToolConstant::ToolConstant
ToolConstant(OWNER *owner, const std::string &name, const char *doc)
Declare a constant with no default.
CaloUtils::ToolConstant::name
virtual std::string name() const override
Return the name of this constant.
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
CaloUtils::ToolConstant::ToolConstant
ToolConstant(OWNER *owner, const std::string &name, const std::string &doc="")
Declare a constant with no default.
CxxUtils::Array
Read-only multidimensional array.
Definition: Control/CxxUtils/CxxUtils/Array.h:135
CaloUtils::ToolConstant::CProperty::toStream
virtual void toStream(std::ostream &out) const override
Print the value of this property to a stream.
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
CaloUtils::ToolWithConstants::toolVersion
virtual int toolVersion() const
Return the version number for this tool.
CaloUtils::ToolConstant::CProperty::m_setFromJO
bool m_setFromJO
Has this constant been set from JO?
Definition: ToolWithConstants.h:340
CaloUtils::ToolConstantsContext::ToolConstantsContext
ToolConstantsContext(const CaloRec::ToolConstants *constants, const EventContext &ctx)
Definition: ToolWithConstants.h:64
CaloUtils::ToolWithConstantsImpl::m_declaredConstants
std::vector< IToolConstant * > m_declaredConstants
All constants declared to this tool.
Definition: ToolWithConstants.h:182
ReadCondHandleKey.h
CaloUtils::ToolWithConstantsImpl::context
Context context(const EventContext &ctx) const
Create a Context object.
Definition: ToolWithConstants.cxx:51
CaloUtils::IToolConstant
Internal interface for dealing with a collection of ToolConstants.
Definition: ToolWithConstants.h:80
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
CaloUtils::ToolWithConstants::m_impl
ToolWithConstantsImpl m_impl
Internal implementation object.
Definition: ToolWithConstants.h:542
errorcheck.h
Helpers for checking error return status codes and reporting errors.
CaloUtils::IToolConstant::~IToolConstant
virtual ~IToolConstant()=default
Virtual destructor.
CaloUtils::ToolWithConstants::context
Context context(const EventContext &ctx) const
Create a Context object.
CaloUtils::ToolWithConstants::toolType
virtual const std::string & toolType() const
Return the name of the type of this tool.
ToolWithConstants.icc
SG::ReadCondHandleKey< CaloRec::ToolConstants >
impl
Definition: CaloGPUClusterAndCellDataMonitorOptions.h:46
CaloRec::ToolConstants
Container for the tool constants managed by ToolWithConstants.
Definition: ToolConstants.h:32
CaloUtils::ToolConstant::CProperty::CProperty
CProperty(const std::string &name, const std::string &doc, ToolWithConstantsImpl &impl)
Constructor, no default value.
CaloUtils::ToolWithConstants::m_isdummy
Constant< bool > m_isdummy
If true, then this is a dummy tool that should not be executed.
Definition: ToolWithConstants.h:561
CaloUtils::ToolWithConstants::m_DBHandle
SG::ReadCondHandleKey< CaloRec::ToolConstants > m_DBHandle
Handle to a ToolConstants conditions object.
Definition: ToolWithConstants.h:535
constants
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:1
IToolWithConstants.h
Abstact interface for ToolWithConstants.
CaloUtils::ToolWithConstants::m_order
Constant< int > m_order
Used to fix the ordering of tools when we're initializing from COOL based on a hierarchical tag.
Definition: ToolWithConstants.h:548
CaloUtils::ToolConstant::operator()
T operator()() const
Retrieve the value of a constant.
CaloUtils::ToolConstantsContext
Context object for retrieving ToolConstant values.
Definition: ToolWithConstants.h:60
Gaudi
=============================================================================
Definition: CaloGPUClusterAndCellDataMonitorOptions.h:273
ReadCalibFromCool.typeName
typeName
Definition: ReadCalibFromCool.py:477
CaloUtils::ToolWithConstantsImpl::writeConstants
void writeConstants(std::ostream &stream, const std::string &name, const EventContext &ctx) const
Dump method (for debugging)
Definition: ToolWithConstants.cxx:78
CaloUtils::ToolWithConstants
Hold constants for a tool.
Definition: ToolWithConstants.h:447
CaloUtils::ToolConstantsContext::m_constants
const CaloRec::ToolConstants * m_constants
Definition: ToolWithConstants.h:70
CaloUtils::ToolConstant::CProperty::toString
virtual std::string toString() const override
Return the value of this property as a string.
CaloUtils::ToolWithConstantsImpl::ToolWithConstantsImpl
ToolWithConstantsImpl(const std::string &toolName, const std::string &prefix, SG::ReadCondHandleKey< CaloRec::ToolConstants > &DBHandle)
Constructor.
Definition: ToolWithConstants.cxx:25
CaloUtils::ToolWithConstants::m_prefix
StringProperty m_prefix
Prefix for finding our constants within the ToolConstants object.
Definition: ToolWithConstants.h:539
CaloUtils::ToolWithConstantsImpl::m_DBHandle
SG::ReadCondHandleKey< CaloRec::ToolConstants > & m_DBHandle
Handle to a ToolConstants conditions object.
Definition: ToolWithConstants.h:179
CaloUtils::ToolConstant::ToolConstant
ToolConstant(OWNER *owner, const std::string &name, const T &deflt, const std::string &doc="")
Declare a constant with a default.
CaloUtils::ToolConstant
Constant of a ToolWithConstants.
Definition: ToolWithConstants.h:200
python.compressB64.c
def c
Definition: compressB64.py:93
CaloUtils::ToolConstant::CProperty::CProperty
CProperty(const std::string &name, const std::string &doc, ToolWithConstantsImpl &impl, const T &deflt)
Constructor, with default value.
CaloUtils::ToolWithConstantsImpl::initialize
StatusCode initialize()
Initialize.
Definition: ToolWithConstants.cxx:38
CaloUtils::ToolConstantsContext::m_ctx
const EventContext & m_ctx
Definition: ToolWithConstants.h:71
CaloUtils::ToolWithConstantsImpl::m_prefix
const std::string & m_prefix
The prefix of this constant in COOL.
Definition: ToolWithConstants.h:173
CaloUtils::ToolConstant::CProperty
Internal wrapper for Gaudi::Property.
Definition: ToolWithConstants.h:286