the canonical implementation of ISystematicsSvc
More...
#include <SystematicsSvc.h>
|
| Gaudi::Property< std::vector< std::string > > | m_systematicsList {this, "systematicsList", {}, "the list of systematics to run"} |
| | the names of the systematics to request
|
| Gaudi::Property< std::string > | m_systematicsRegex {this, "systematicsRegex", "(.*)", "systematics filter regex"} |
| | the regular expression for filterinf systematics
|
| Gaudi::Property< float > | m_sigmaRecommended {this, "sigmaRecommended", 0, "the sigma with which to run recommended systematics"} |
| | load all recommended systematics at the given number of sigmas
|
| Gaudi::Property< std::string > | m_nominalSystematicsName {this, "nominalSystematicsName", "NOSYS", "the name to use for the nominal systematic (instead of the empty string)"} |
| | nominal systematics name
|
| SystematicSet m_affectingSystematics | ATLAS_THREAD_SAFE |
| | the list of affecting systematics
|
| SystematicSet m_recommendedSystematics | ATLAS_THREAD_SAFE |
| | the list of recommended systematics
|
| std::unordered_map< std::string, CP::SystematicSet > m_objectSystematics | ATLAS_THREAD_SAFE |
| | the list of per-object systematics
|
| std::unordered_map< std::string, CP::SystematicSet > m_decorSystematics | ATLAS_THREAD_SAFE |
| | the list of per-object-and-decoration systematics
|
| std::unordered_map< std::string, std::string > m_copies | ATLAS_THREAD_SAFE |
| | the map of registered copies
|
| std::mutex | m_systematicsMutex |
| | a mutex for accessing the above mutable members
|
the canonical implementation of ISystematicsSvc
Definition at line 23 of file SystematicsSvc.h.
◆ addSystematics()
Definition at line 96 of file SystematicsSvc.cxx.
99 {
101
102 for (const CP::SystematicVariation& mysys : recommended)
103 {
104 if (affecting.
find (mysys) == affecting.
end())
105 {
106 ANA_MSG_ERROR (
"systematic is only registered as recommended, not affecting: " << mysys);
107 return StatusCode::FAILURE;
108 }
109 }
110
111 m_affectingSystematics.insert (affecting);
112 m_recommendedSystematics.insert (recommended);
113 return StatusCode::SUCCESS;
114 }
const_iterator end() const
description: const iterator to the end of the set
iterator find(const SystematicVariation &sys) const
description: find an element in the set
std::mutex m_systematicsMutex
a mutex for accessing the above mutable members
◆ finalize()
| StatusCode CP::SystematicsSvc::finalize |
( |
| ) |
|
|
overridevirtual |
Definition at line 289 of file SystematicsSvc.cxx.
291 {
294 }
295 else{
296 for (const CP::SystematicVariation& mysys : m_affectingSystematics)
297 {
298
299
300
301 if (m_recommendedSystematics.find (mysys) == m_recommendedSystematics.end())
303 else
305 }
306
311 }
312 }
313 }
314 return StatusCode::SUCCESS;
315 }
virtual std::vector< CP::SystematicSet > makeSystematicsVector() const override
Gaudi::Property< std::vector< std::string > > m_systematicsList
the names of the systematics to request
Gaudi::Property< std::string > m_systematicsRegex
the regular expression for filterinf systematics
◆ getCopySource()
| std::string CP::SystematicsSvc::getCopySource |
( |
const std::string & | toName | ) |
const |
|
overridevirtual |
Definition at line 210 of file SystematicsSvc.cxx.
212 {
214 auto iter = m_copies.find (toName);
215 if (iter == m_copies.end())
216 return "";
217 else
219 }
◆ getDecorSystematics()
| CP::SystematicSet CP::SystematicsSvc::getDecorSystematics |
( |
const std::string & | objectName, |
|
|
const std::string & | decorName ) const |
|
overridevirtual |
Definition at line 151 of file SystematicsSvc.cxx.
154 {
155 const std::string
name = objectName +
"." + decorName;
157 auto iter = m_decorSystematics.find (
name);
158 if (iter != m_decorSystematics.end())
160 auto jter = m_copies.find (objectName);
161 if (jter != m_copies.end())
162 {
163 const std::string& copyName = jter->second;
164 lock.unlock();
166 }
167 return CP::SystematicSet ();
168 }
virtual CP::SystematicSet getDecorSystematics(const std::string &objectName, const std::string &decorName) const override
◆ getObjectDecorations()
| std::vector< std::string > CP::SystematicsSvc::getObjectDecorations |
( |
const std::string & | name | ) |
const |
|
overridevirtual |
Definition at line 223 of file SystematicsSvc.cxx.
225 {
226 std::vector<std::string>
result;
228
229
231 if (iter != m_copies.end())
232 {
233 const std::string copyName =
iter->second;
234 lock.unlock();
236 lock.lock();
237 }
238
239
241 for (const auto& entry : m_decorSystematics)
242 {
243 if (
entry.first.compare(0,
prefix.size(), prefix) == 0)
244 {
245 std::string decor =
entry.first.substr(
prefix.size());
247 result.push_back (std::move(decor));
248 }
249 }
251 }
virtual std::vector< std::string > getObjectDecorations(const std::string &name) const override
◆ getObjectSystematics()
| CP::SystematicSet CP::SystematicsSvc::getObjectSystematics |
( |
const std::string & | name | ) |
const |
|
overridevirtual |
Definition at line 118 of file SystematicsSvc.cxx.
120 {
122 auto iter = m_objectSystematics.find (
name);
123 if (iter != m_objectSystematics.end())
125 else
126 return CP::SystematicSet ();
127 }
◆ initialize()
| StatusCode CP::SystematicsSvc::initialize |
( |
| ) |
|
|
overridevirtual |
Definition at line 30 of file SystematicsSvc.cxx.
32 {
35 {
37 return StatusCode::FAILURE;
38 }
39
41 {
43 {
44 ANA_MSG_ERROR (
"can't specify both sigmaRecommended and systematicsList");
45 return StatusCode::FAILURE;
46 }
47 }
48 return StatusCode::SUCCESS;
49 }
Gaudi::Property< float > m_sigmaRecommended
load all recommended systematics at the given number of sigmas
◆ makeSystematicsName()
| StatusCode CP::SystematicsSvc::makeSystematicsName |
( |
std::string & | result, |
|
|
const std::string & | name, |
|
|
const CP::SystematicSet & | sys ) const |
|
overridevirtual |
Definition at line 255 of file SystematicsSvc.cxx.
259 {
261 {
262 ANA_MSG_ERROR (
"not allowed to make systematic name for empty string");
263 return StatusCode::FAILURE;
264 }
265
267
268 const auto sysSplit =
result.find (
"%SYS%");
269 if (sysSplit == std::string::npos)
270 {
272 {
273 ANA_MSG_ERROR (
"can't set systematics on name without \"%SYS%\": \"" <<
name <<
"\" sys=" <<
sys.name());
274 return StatusCode::FAILURE;
275 }
276 } else
277 {
281 result.replace (sysSplit, 5, sysName);
282 }
283
284 return StatusCode::SUCCESS;
285 }
Gaudi::Property< std::string > m_nominalSystematicsName
nominal systematics name
◆ makeSystematicsVector()
Definition at line 53 of file SystematicsSvc.cxx.
55 {
57 std::vector<CP::SystematicSet> systematicsVector;
58
60 {
62
63 CP::MakeSystematicsVector
sys;
65 sys.calc (m_recommendedSystematics);
66
68 for (
const CP::SystematicSet& mysys :
sys.result(
""))
69 {
70 if (!regex_match (mysys.name(), expr))
71 {
73 } else {
75 systematicsVector.push_back (mysys);
76 }
77 }
79 {
80
81
82
83 systematicsVector.push_back (CP::SystematicSet ());
84 } else
85 {
87 systematicsVector.push_back (CP::SystematicSet (sysName));
88 }
89
90 assert (!systematicsVector.empty());
91 return systematicsVector;
92 }
◆ registerCopy()
| StatusCode CP::SystematicsSvc::registerCopy |
( |
const std::string & | fromName, |
|
|
const std::string & | toName ) const |
|
overridevirtual |
Definition at line 194 of file SystematicsSvc.cxx.
197 {
199 auto emplace_result = m_copies.try_emplace (toName, fromName);
200 if (emplace_result.second == false)
201 {
202 ANA_MSG_ERROR (
"duplicate copy registered for name " << toName);
203 return StatusCode::FAILURE;
204 }
205 return StatusCode::SUCCESS;
206 }
◆ setDecorSystematics()
| StatusCode CP::SystematicsSvc::setDecorSystematics |
( |
const std::string & | objectName, |
|
|
const std::string & | decorName, |
|
|
const CP::SystematicSet & | systematics ) const |
|
overridevirtual |
Definition at line 172 of file SystematicsSvc.cxx.
176 {
177 const std::string
name = objectName +
"." + decorName;
180 for (
const CP::SystematicVariation& mysys :
systematics)
181 {
182 if (m_affectingSystematics.find (mysys) == m_affectingSystematics.end())
183 {
184 ANA_MSG_ERROR (
"systematic is set as object systematic, but not affecting: " << mysys);
185 return StatusCode::FAILURE;
186 }
187 }
188 m_decorSystematics[
name] = std::move (mysystematics);
189 return StatusCode::SUCCESS;
190 }
static const std::vector< std::string > systematics
◆ setObjectSystematics()
| StatusCode CP::SystematicsSvc::setObjectSystematics |
( |
const std::string & | name, |
|
|
const CP::SystematicSet & | systematics ) const |
|
overridevirtual |
Definition at line 131 of file SystematicsSvc.cxx.
134 {
137 for (
const CP::SystematicVariation& mysys :
systematics)
138 {
139 if (m_affectingSystematics.find (mysys) == m_affectingSystematics.end())
140 {
141 ANA_MSG_ERROR (
"systematic is set as object systematic, but not affecting: " << mysys);
142 return StatusCode::FAILURE;
143 }
144 }
145 m_objectSystematics[
name] = std::move (mysystematics);
146 return StatusCode::SUCCESS;
147 }
◆ ATLAS_THREAD_SAFE [1/5]
| SystematicSet m_affectingSystematics CP::SystematicsSvc::ATLAS_THREAD_SAFE |
|
mutableprivate |
◆ ATLAS_THREAD_SAFE [2/5]
| SystematicSet m_recommendedSystematics CP::SystematicsSvc::ATLAS_THREAD_SAFE |
|
mutableprivate |
◆ ATLAS_THREAD_SAFE [3/5]
| std::unordered_map<std::string,CP::SystematicSet> m_objectSystematics CP::SystematicsSvc::ATLAS_THREAD_SAFE |
|
mutableprivate |
◆ ATLAS_THREAD_SAFE [4/5]
| std::unordered_map<std::string,CP::SystematicSet> m_decorSystematics CP::SystematicsSvc::ATLAS_THREAD_SAFE |
|
mutableprivate |
the list of per-object-and-decoration systematics
Definition at line 105 of file SystematicsSvc.h.
◆ ATLAS_THREAD_SAFE [5/5]
| std::unordered_map<std::string,std::string> m_copies CP::SystematicsSvc::ATLAS_THREAD_SAFE |
|
mutableprivate |
◆ m_nominalSystematicsName
| Gaudi::Property<std::string> CP::SystematicsSvc::m_nominalSystematicsName {this, "nominalSystematicsName", "NOSYS", "the name to use for the nominal systematic (instead of the empty string)"} |
|
private |
nominal systematics name
Definition at line 88 of file SystematicsSvc.h.
88{this, "nominalSystematicsName", "NOSYS", "the name to use for the nominal systematic (instead of the empty string)"};
◆ m_sigmaRecommended
| Gaudi::Property<float> CP::SystematicsSvc::m_sigmaRecommended {this, "sigmaRecommended", 0, "the sigma with which to run recommended systematics"} |
|
private |
load all recommended systematics at the given number of sigmas
The idea here is that this allows to run a simple analysis by itself without having to generate the list of systematics manually.
Definition at line 84 of file SystematicsSvc.h.
84{this, "sigmaRecommended", 0, "the sigma with which to run recommended systematics"};
◆ m_systematicsList
| Gaudi::Property<std::vector<std::string> > CP::SystematicsSvc::m_systematicsList {this, "systematicsList", {}, "the list of systematics to run"} |
|
private |
the names of the systematics to request
Definition at line 71 of file SystematicsSvc.h.
71{this, "systematicsList", {}, "the list of systematics to run"};
◆ m_systematicsMutex
| std::mutex CP::SystematicsSvc::m_systematicsMutex |
|
mutableprivate |
a mutex for accessing the above mutable members
Definition at line 113 of file SystematicsSvc.h.
◆ m_systematicsRegex
| Gaudi::Property<std::string> CP::SystematicsSvc::m_systematicsRegex {this, "systematicsRegex", "(.*)", "systematics filter regex"} |
|
private |
the regular expression for filterinf systematics
Definition at line 75 of file SystematicsSvc.h.
75{this, "systematicsRegex", "(.*)", "systematics filter regex"};
The documentation for this class was generated from the following files: