ATLAS Offline Software
Loading...
Searching...
No Matches
configurable.py
Go to the documentation of this file.
1# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
2
3from AthenaCommon import Logging
4from ..parameters import Parameter, Registry
5
6
7logger = Logging.logging.getLogger("PowhegControl")
8
9
11 """! Class for any process which can be configured.
12
13 @author James Robinson <james.robinson@cern.ch>
14 """
15
16 def __init__(self):
17 """! Constructor."""
18
19 self.parameters = []
20
21 def add_keyword(self, keyword, value=None, name=None, frozen=None, hidden=None, description=None, **kwargs):
22 """! Register configurable parameter that is exposed to the user.
23
24 @param keyword Powheg keyword that gets written to the runcard.
25 @param value Value of the parameter.
26 @param name Configurable parameter name exposed to the user.
27 @param hidden True if this parameter should be hidden from the user.
28 @param frozen True if this parameter cannot be changed.
29 @param description Description for the run card.
30 @param parameter Name used in the run card if different.
31 """
32 # Retrieve default settings from registry overriding if requested
33 defaults = Registry().get_defaults(keyword)
34 if value == defaults["value"] and value is not None and (hidden is not True):
35 if keyword not in ["ebeam1", "ebeam2"]:
36 logger.debug("Unnecessarily setting parameter {} to {} which is its default value!".format(keyword, value))
37 value = [value, defaults["value"]][value is None]
38 name = [name, defaults["name"]][name is None]
39 description = [description, defaults["description"]][description is None]
40 hidden = [hidden, defaults["hidden"]][hidden is None]
41 frozen = [frozen, defaults["frozen"]][frozen is None]
42 if keyword in [p.keyword for p in self.parameters]:
43 raise AttributeError("Keyword '{}' has already been defined for this process".format(keyword))
44 self.parameters.append(Parameter(keyword, name=name, value=value, frozen=frozen, hidden=hidden, description=description, **kwargs))
45
46 def expose(self):
47 """! Add all names to the interface of this object."""
48 for parameter in self.parameters:
49 setattr(self, parameter.name, parameter.value)
50
51 def has_keyword(self, keyword):
52 return (len(list(self.parameters_by_keyword(keyword))) > 0)
53
54 def has_parameter(self, parameter):
55 return (len(list(self.parameters_by_name(parameter))) > 0)
56
57 def parameters_by_keyword(self, keyword):
58 """! Retrieve all parameters that use a given keyword.
59
60 @param keyword Powheg keyword that gets written to the runcard.
61 """
62 return [p for p in self.parameters if p.keyword == keyword]
63
64 def parameters_by_name(self, name):
65 """! Retrieve all parameters that use a given name.
66
67 @param name Configurable parameter name exposed to the user.
68 """
69 return [p for p in self.parameters if p.name == name]
Class to store information about a single Powheg parameter.
Definition parameter.py:6
Class to store information about Powheg parameters.
Definition registry.py:9
Class for any process which can be configured.
add_keyword(self, keyword, value=None, name=None, frozen=None, hidden=None, description=None, **kwargs)
Register configurable parameter that is exposed to the user.
expose(self)
Add all names to the interface of this object.
parameters_by_name(self, name)
Retrieve all parameters that use a given name.
parameters_by_keyword(self, keyword)
Retrieve all parameters that use a given keyword.
list parameters
List of available parameters.