ATLAS Offline Software
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-2024 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 "CxxUtils/concepts.h"
30 #include "Gaudi/Property.h"
31 #include <string>
32 #include <sstream>
33 #include <type_traits>
34 
35 
36 namespace Gaudi {
37 namespace Parsers {
38 
39 
40 // Unused, because we override fromString() below, but required
41 // in order to compile the overridden fromString() from Gaudi.
42 template <unsigned int N>
43 StatusCode parse (CaloRec::Array<N>&, const std::string&)
44 {
45  return StatusCode::FAILURE;
46 }
47 
48 
49 }} // namespace Gaudi::Parsers
50 
51 
52 namespace CaloUtils {
53 
54 
61 {
62 public:
63  const EventContext& ctx() const { return m_ctx; }
64 
66  const EventContext& ctx)
68  m_ctx (ctx)
69  {
70  }
72  const EventContext& m_ctx;
73 };
74 
75 
76 
81 {
82 public:
84  virtual ~IToolConstant() = default;
85 
87  virtual std::string name() const = 0;
88 
90  virtual bool setFromJO() const = 0;
91 };
92 
93 
94 //***********************************************************************
95 
96 
103 {
104 public:
106 
107 
114  ToolWithConstantsImpl (const std::string& toolName,
115  const std::string& prefix,
117 
118 
123 
124 
130  Context context (const EventContext& ctx) const;
131 
132 
137  void addConstant (IToolConstant* c);
138 
139 
146  void writeConstants (std::ostream& stream,
147  const std::string& name,
148  const EventContext& ctx) const;
149 
150 
159  StatusCode
160  mergeConstants (const std::string& typeName,
161  int toolVersion,
162  Context& myctx,
163  bool isDummy,
164  CaloRec::ToolConstants& out) const;
165 
166 
168  std::string m_toolName;
169 
171  // Note: Held by a reference, not by value.
172  // This comes from a property of the owning tool, and is not set
173  // until we run initialize() on that tool.
174  const std::string& m_prefix;
175 
178 
181 
183  std::vector<IToolConstant*> m_declaredConstants;
184 };
185 
186 
187 //***********************************************************************
188 
189 
195 template <class T>
196  // Must be able to initialize a T with fromArrayrep
197  // Doesn't actaully work like this, though, as there's a conflict
198  // with the friend declaration below.
199  //ATH_REQUIRES( requires (T t, const CxxUtils::Arrayrep& rep) { { CxxUtils::fromArrayrep (rep, t); } } )
201  : public IToolConstant
202 {
203 public:
206 
207 
214  template <class OWNER>
215  ToolConstant (OWNER* owner,
216  const std::string& name,
217  const std::string& doc = "");
218 
219 
230  template <class OWNER>
231  ToolConstant (OWNER* owner,
232  const std::string& name,
233  const char* doc);
234 
235 
245  template <class OWNER,
246  typename U = T,
247  typename = std::enable_if_t<std::is_arithmetic_v<U> > >
248  ToolConstant (OWNER* owner,
249  const std::string& name,
250  const T& deflt,
251  const std::string& doc = "");
252 
253 
258  T operator() (const Context& c) const;
259 
260 
266  T operator()() const;
267 
268 
272  virtual std::string name() const override;
273 
274 
278  virtual bool setFromJO() const override;
279 
280 
281 private:
286  class CProperty
287  : public Gaudi::Property<T>
288  {
289  public:
296  CProperty (const std::string& name,
297  const std::string& doc,
299 
300 
308  CProperty (const std::string& name,
309  const std::string& doc,
311  const T& deflt);
312 
313 
314  // To be able to assign to this wrapper.
315  using Gaudi::Property<T>::operator=;
316 
317 
321  virtual std::string toString() const override;
322 
323 
328  virtual void toStream( std::ostream& out ) const override;
329 
330 
335  virtual StatusCode fromString( const std::string& value ) override;
336 
337 
340 
342  bool m_setFromJO = false;
343 
345  bool m_hasDefault = false;
346  };
347 
348 
350  CProperty m_prop;
351 
354 };
355 
356 
357 //***************************************************************************
358 
359 
435 #define ATH_TWC_REQUIRES ATH_REQUIRES( requires (BASE& b, Gaudi::Property<int>& p) { { b.declareProperty(p) }; } )
436 template <class BASE>
439  : public extends<BASE, IToolWithConstants>
440 {
441 public:
444 
445 
447  using extends<BASE, IToolWithConstants>::extends;
448 
449 
452 
453 
455  template <class T>
457 
458 
462  virtual StatusCode initialize() override;
463 
464 
470  Context context (const EventContext& ctx) const;
471 
472 
479  virtual void writeConstants (std::ostream& stream,
480  const std::string& name,
481  const EventContext& ctx) const;
482 
483 
490  const EventContext& ctx) const override;
491 
492 
505  virtual int toolVersion() const;
506 
507 
518  virtual const std::string& toolType() const;
519 
520 
521 private:
522  // Make this a friend so it can access m_impl.
523  template <class T>
525 
528  { this, "DBHandleKey", "", "" };
529 
531  StringProperty m_prefix
532  { this, "prefix", "", "" };
533 
536 
541  { this, "order", 0 };
542 
554  {this, "isDummy", false };
555 };
556 
557 
558 } // namespace CaloUtils
559 
560 
562 
563 
564 #undef ATH_TWC_REQUIRES
565 
566 
567 #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:177
CaloUtils::ToolWithConstants::base_class
ToolWithConstants base_class
Shorthand for derived classes.
Definition: ToolWithConstants.h:443
CaloUtils::ToolConstant::CProperty::m_hasDefault
bool m_hasDefault
Does this constant have a default?
Definition: ToolWithConstants.h:345
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:353
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:339
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:63
CaloUtils::ToolWithConstantsImpl::m_toolName
std::string m_toolName
Name of the owning tool.
Definition: ToolWithConstants.h:168
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
athena.value
value
Definition: athena.py:122
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:103
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:350
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.
ATH_TWC_REQUIRES
#define ATH_TWC_REQUIRES
Hold constants for a tool.
Definition: ToolWithConstants.h:435
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:138
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:342
CaloUtils::ToolConstantsContext::ToolConstantsContext
ToolConstantsContext(const CaloRec::ToolConstants *constants, const EventContext &ctx)
Definition: ToolWithConstants.h:65
CaloUtils::ToolWithConstantsImpl::m_declaredConstants
std::vector< IToolConstant * > m_declaredConstants
All constants declared to this tool.
Definition: ToolWithConstants.h:183
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:81
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
CaloUtils::ToolWithConstants::m_impl
ToolWithConstantsImpl m_impl
Internal implementation object.
Definition: ToolWithConstants.h:535
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 >
concepts.h
Compatibility helpers for using some pieces of C++20 concepts with older compilers.
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:554
CaloUtils::ToolWithConstants::m_DBHandle
SG::ReadCondHandleKey< CaloRec::ToolConstants > m_DBHandle
Handle to a ToolConstants conditions object.
Definition: ToolWithConstants.h:528
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:541
CaloUtils::ToolConstant::operator()
T operator()() const
Retrieve the value of a constant.
CaloUtils::ToolConstantsContext
Context object for retrieving ToolConstant values.
Definition: ToolWithConstants.h:61
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
Definition: ToolWithConstants.h:440
CaloUtils::ToolConstantsContext::m_constants
const CaloRec::ToolConstants * m_constants
Definition: ToolWithConstants.h:71
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:532
CaloUtils::ToolWithConstantsImpl::m_DBHandle
SG::ReadCondHandleKey< CaloRec::ToolConstants > & m_DBHandle
Handle to a ToolConstants conditions object.
Definition: ToolWithConstants.h:180
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:202
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:72
CaloUtils::ToolWithConstantsImpl::m_prefix
const std::string & m_prefix
The prefix of this constant in COOL.
Definition: ToolWithConstants.h:174
CaloUtils::ToolConstant::CProperty
Internal wrapper for Gaudi::Property.
Definition: ToolWithConstants.h:288