7#include "Framework/RunHeader.h"
50 else if (ecal_geometry_ !=
nullptr &&
54 "Attempting to run a single job with multiple geometries " +
59 EXCEPTION_RAISE(
"GeometryException",
60 "EcalGeometryProvider unable to get the name of the "
61 "detector from the RunHeader.");
73 const std::string& name,
const std::string& tagname,
77 ldmx::EcalGeometry::CONDITIONS_OBJECT_NAME, tagname, parameters,
80 parameters.
get<std::vector<framework::config::Parameters>>(
"geometries");
85 if (ecal_geometry_)
delete ecal_geometry_;
89std::pair<const framework::ConditionsObject*, framework::ConditionsIOV>
91 static const std::string keyname(
"detectors_valid");
93 if (!ecal_geometry_) {
96 if (!pver.exists(keyname)) {
97 ldmx_log(warn) <<
"No parameter " << keyname
98 <<
" found one of the detector vesrsions.";
103 std::vector<std::string> dets_valid =
104 pver.get<std::vector<std::string>>(keyname);
105 for (
auto detregex : dets_valid) {
106 std::string regex(detregex);
107 if (regex.empty())
continue;
108 if (regex[0] !=
'^') regex.insert(0, 1,
'^');
109 if (regex.back() !=
'$') regex +=
'$';
113 regcomp(®, regex.c_str(), REG_EXTENDED | REG_ICASE | REG_NOSUB);
116 regerror(rv, ®, err, 1024);
119 "Invalid detector regular expression : '" + regex +
"' " + err);
128 if (ecal_geometry_)
break;
130 if (!ecal_geometry_) {
131 EXCEPTION_RAISE(
"GeometryException",
"Unable to create EcalGeometry");
135 return std::make_pair(
Base class for provider of conditions information like pedestals, gains, electronics maps,...
#define DECLARE_CONDITIONS_PROVIDER(CLASS)
Macro which allows the framework to construct a producer given its name during configuration.
Class that translates raw positions of ECal module hits into cells in a hexagonal readout.
be configured to load conditions objects from CSV files.
virtual ~EcalGeometryProvider()
Destructor.
EcalGeometryProvider(const std::string &name, const std::string &tagname, const framework::config::Parameters ¶meters, framework::Process &process)
Class constructor.
virtual std::pair< const framework::ConditionsObject *, framework::ConditionsIOV > getCondition(const ldmx::EventHeader &context)
Provides access to the EcalGeometry or EcalTriggerGeometry.
std::string detector_geometry_
Geometry as last used.
std::vector< framework::config::Parameters > geometries_
parameters for the various geometry versions we can support
virtual void releaseConditionsObject(const framework::ConditionsObject *co)
Take no action on release, as the object is permanently owned by the Provider.
virtual void onNewRun(ldmx::RunHeader &rh)
Callback for the ConditionsObjectProvider to take any necessary action when the processing of events ...
Class which defines the run/event/type range for which a given condition is valid,...
Base class for all providers of conditions objects.
const Process & process() const
Get the process handle.
Base class for all conditions objects, very simple.
Class which represents the process under execution.
Class encapsulating parameters for configuring a processor.
const T & get(const std::string &name) const
Retrieve the parameter of the given name.
Translation between real-space positions and cell IDs within the ECal.
All classes in the ldmx-sw project use this namespace.