hpstr
The Heavy Photon Search Toolkit for Reconstruction (hpstr) provides an interface to physics data from the HPS experiment saved in the LCIO format and converts it into an ROOT based format.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ParameterSet.cxx
Go to the documentation of this file.
1
2#include "ParameterSet.h"
3
4void ParameterSet::insert(const std::string& name, int value) {
5 elements_[name] = Element(value);
6}
7
8int ParameterSet::getInteger(const std::string& name) const {
9 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
10 if (ptr == elements_.end()) {
11 throw std::runtime_error("[ Parameter Not Found ]: Integer parameter '" + name + "' not found");
12 }
13 if (ptr->second.et_ != et_Integer) {
14 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not an integer");
15 }
16 return ptr->second.intval_;
17}
18
19int ParameterSet::getInteger(const std::string& name, int defaultValue) const {
20 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
21 if (ptr == elements_.end()) {
22 return defaultValue;
23 }
24 if (ptr->second.et_ != et_Integer) {
25 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not an integer");
26 }
27 return ptr->second.intval_;
28}
29
30void ParameterSet::insert(const std::string& name, double value) {
31 elements_[name] = Element(value);
32}
33
34double ParameterSet::getDouble(const std::string& name) const {
35 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
36 if (ptr == elements_.end()) {
37 throw std::runtime_error("[ Parameter Not Found ]: Double parameter '" + name + "' not found");
38 }
39 if (ptr->second.et_ != et_Double) {
40 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not a double");
41 }
42 return ptr->second.doubleval_;
43}
44
45double ParameterSet::getDouble(const std::string& name, double defaultValue) const {
46 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
47 if (ptr == elements_.end()) {
48 return defaultValue;
49 }
50 if (ptr->second.et_ != et_Double) {
51 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not a double");
52 }
53 return ptr->second.doubleval_;
54}
55
56void ParameterSet::insert(const std::string& name, const std::string& value) {
57 elements_[name] = Element(value);
58}
59
60const std::string& ParameterSet::getString(const std::string& name) const {
61 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
62 if (ptr == elements_.end()) {
63 throw std::runtime_error("[ Parameter Not Found ]: String parameter '" + name + "' not found");
64 }
65 if (ptr->second.et_ != et_String) {
66 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not a string");
67 }
68 return ptr->second.strval_;
69}
70
71const std::string& ParameterSet::getString(const std::string& name, const std::string& defaultValue) const {
72 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
73 if (ptr == elements_.end()) {
74 return defaultValue;
75 }
76 if (ptr->second.et_ != et_String) {
77 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not a string");
78 }
79 return ptr->second.strval_;
80}
81
82/* --------------- Vectors of integers ------------------------*/
83ParameterSet::Element::Element(const std::vector<int>& inval) :
84 et_{ParameterSet::et_VInteger}, ivecVal_(inval) {
85 }
86
87void ParameterSet::insert(const std::string& name, const std::vector<int>& values) {
88 elements_[name] = Element(values);
89}
90
91const std::vector<int>& ParameterSet::getVInteger(const std::string& name) const {
92 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
93 if (ptr == elements_.end()) {
94 throw std::runtime_error("[ Parameter Not Found ]: Parameter '" + name + "' not found");
95 }
96 if (ptr->second.et_ != et_VInteger) {
97 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not a vector of integers");
98 }
99 return ptr->second.ivecVal_;
100}
101
102const std::vector<int>& ParameterSet::getVInteger(const std::string& name, const std::vector<int>& defaultValue) const {
103 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
104 if (ptr == elements_.end()) {
105 return defaultValue;
106 }
107 if (ptr->second.et_ != et_VInteger) {
108 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not a vector of integers");
109 }
110 return ptr->second.ivecVal_;
111}
112
113/* --------------- Vectors of doubles ------------------------*/
114ParameterSet::Element::Element(const std::vector<double>& inval) :
115 et_ { ParameterSet::et_VDouble }, dvecVal_(inval) {
116 }
117
118void ParameterSet::insert(const std::string& name, const std::vector<double>& values) {
119 elements_[name] = Element(values);
120}
121
122const std::vector<double>& ParameterSet::getVDouble(const std::string& name) const {
123 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
124 if (ptr == elements_.end()) {
125 throw std::runtime_error("[ Parameter Not Found ]: Parameter '" + name + "' not found");
126 }
127 if (ptr->second.et_ != et_VDouble) {
128 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not a vector of doubles");
129 }
130 return ptr->second.dvecVal_;
131}
132
133const std::vector<double>& ParameterSet::getVDouble(const std::string& name, const std::vector<double>& defaultValue) const {
134 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
135 if (ptr == elements_.end()) {
136 return defaultValue;
137 }
138 if (ptr->second.et_ != et_VDouble) {
139 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not a vector of doubles");
140 }
141 return ptr->second.dvecVal_;
142}
143
144/* --------------- Vectors of strings ------------------------*/
145ParameterSet::Element::Element(const std::vector<std::string>& inval) :
146 et_{ParameterSet::et_VString}, svecVal_(inval) {
147 }
148
149void ParameterSet::insert(const std::string& name, const std::vector<std::string>& values) {
150 elements_[name] = Element(values);
151}
152
153const std::vector<std::string>& ParameterSet::getVString(const std::string& name) const {
154 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
155 if (ptr == elements_.end()) {
156 throw std::runtime_error("[ Parameter Not Found ]: Parameter '" + name + "' not found");
157 }
158 if (ptr->second.et_ != et_VString) {
159 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not a vector of strings");
160 }
161 return ptr->second.svecVal_;
162}
163
164const std::vector<std::string>& ParameterSet::getVString(const std::string& name, const std::vector<std::string>& defaultValue) const {
165 std::map<std::string, Element>::const_iterator ptr = elements_.find(name);
166 if (ptr == elements_.end()) {
167 return defaultValue;
168 }
169 if (ptr->second.et_ != et_VString) {
170 throw std::runtime_error("[ Parameter Type Error ]: Parameter '" + name + "' is not a vector of strings");
171 }
172 return ptr->second.svecVal_;
173}
Class which contains parameters passed to a Processor.
description
const std::vector< int > & getVInteger(const std::string &name) const
Get a vector of integers by name or throw an exception if not available, or not the right type.
const std::vector< double > & getVDouble(const std::string &name) const
Get a vector of doubles by name or throw an exception if not available, or not the right type.
const std::string & getString(const std::string &name) const
const std::vector< std::string > & getVString(const std::string &name) const
Get a vector of strings by name or throw an exception if not available, or not the right type.
void insert(const std::string &name, int value)
Add an integer to the ParameterSet.
std::map< std::string, Element > elements_
double getDouble(const std::string &name) const
Get a double by name or throw an exception if not available, or not the right type.
int getInteger(const std::string &name) const
Get an integer by name or throw an exception if not available, or not the right type.
Backing data structure containing parameter values.