ATLAS Offline Software
Loading...
Searching...
No Matches
python.variable.DCSC_Variable Class Reference
Inheritance diagram for python.variable.DCSC_Variable:
Collaboration diagram for python.variable.DCSC_Variable:

Public Types

typedef HLT::TypeInformation::for_each_type_c< typenameEDMLIST::map, my_functor, my_result<>, my_arg< HLT::TypeInformation::get_cont, CONTAINER > >::type result

Public Member Functions

 __init__ (self, folder_name, evaluator, **kwargs)
 __hash__ (self)
 __repr__ (self)
 read (self, query_range, folder_base, folder_name)
 print_time_info (self, iovs)
 map_input_channels (self, iovs)
 quantize (self, lbtime, iovs)
 make_good_iov (self, iov)
 make_good_iovs (self, iovs)
 calculate_good_iovs (self, lbtime, subdetector)

Public Attributes

str input_db = 'COOLOFL_DCS/CONDBR2'
 folder_name = folder_name
 evaluator = evaluator
dict fetch_args = {}
list input_hashes = []
 subdetector = subdetector
 iovs = iovs

Static Public Attributes

bool is_global = False
bool is_config_variable = False
bool timewise_folder = True

Detailed Description

Class which encapsulates logic behind an input variable.

This class is responsible for:

* Reading data from COOL / CoraCOOL
* Evaluating the 'good' state of a variable once read from the database
* Quantizing the state from time-based intervals of validity to lumiblock

It is subclassed for configuration variables and "global" variables.

Definition at line 32 of file variable.py.

Member Typedef Documentation

◆ result

Definition at line 90 of file EDM_MasterSearch.h.

Constructor & Destructor Documentation

◆ __init__()

python.variable.DCSC_Variable.__init__ ( self,
folder_name,
evaluator,
** kwargs )

Definition at line 50 of file variable.py.

50 def __init__(self, folder_name, evaluator, **kwargs):
51 if not hasattr(self, 'input_db'):
52 self.input_db = 'COOLOFL_DCS/CONDBR2'
53 self.folder_name = folder_name
54 self.evaluator = evaluator
55 if not hasattr(self, "fetch_args"):
56 self.fetch_args = {}
57 self.__dict__.update(kwargs)
58 self.input_hashes = []
59

Member Function Documentation

◆ __hash__()

python.variable.DCSC_Variable.__hash__ ( self)
Useful for verifying if input variables have changed.

Definition at line 60 of file variable.py.

60 def __hash__(self):
61 """
62 Useful for verifying if input variables have changed.
63 """
64 # Consider the fact that hash((hash(x), hash(y))) == hash((x, y)) where
65 # x and y are tuples.
66 return hash(tuple(self.input_hashes))
67

◆ __repr__()

python.variable.DCSC_Variable.__repr__ ( self)

Definition at line 68 of file variable.py.

68 def __repr__(self):
69 return "<DCSCVariable %s>" % self.folder_name
70

◆ calculate_good_iovs()

python.variable.DCSC_Variable.calculate_good_iovs ( self,
lbtime,
subdetector )
Calculate LB-wise "good" states

Definition at line 179 of file variable.py.

179 def calculate_good_iovs(self, lbtime, subdetector):
180 """
181 Calculate LB-wise "good" states
182 """
183
184 self.subdetector = subdetector
185
186 if self.timewise_folder:
187 query_range = RANGEIOV_VAL(lbtime.first.since, lbtime.last.until)
188 else:
189 a, b = lbtime.first, lbtime.last
190 query_range = RANGEIOV_VAL(RunLumi(a.Run, a.LumiBlock),
191 RunLumi(b.Run, b.LumiBlock))
192
193 # Read the database
194 iovs = self.read(query_range, subdetector.folder_base, self.folder_name)
195 #iovs.pprint()
196
197 # Decide the states of the input iovs
198 iovs = self.make_good_iovs(iovs)
199 #iovs.pprint()
200
201 # Apply a mapping for input channels if necessary
202 # This only does something for variables that require additional mapping
203 # i.e., if the channel numbers for different DCS variables don't match up
204 iovs = self.map_input_channels(iovs)
205
206 if self.timewise_folder and not config.opts.timewise:
207 # we might already know the defect mapping
208 with timer("Quantize %s (%i iovs over %i lbs)" %
209 (self.folder_name, len(iovs), len(lbtime))):
210 # Quantize to luminosity block
211 iovs = self.quantize(lbtime, iovs)
212 #iovs.pprint()
213
214 # Debug printout of problematic channels
215 # DQUtils messes with the logging and isEnabledFor doesn't work
216 #if log.isEnabledFor(logging.DEBUG):
217 #log.verbose("Bad input channels for %s:", self.folder_name)
218 #log.verbose("= [%r]", ", ".join(str(i.channel) for i in iovs if not i.good))
219
220 self.iovs = iovs
221
222 return self
223

◆ make_good_iov()

python.variable.DCSC_Variable.make_good_iov ( self,
iov )
Determine if one input iov is good.

Reimplemented in python.subdetectors.tile.Tile_NoHighVoltage, and python.variable.DCSC_Global_Variable.

Definition at line 164 of file variable.py.

164 def make_good_iov(self, iov):
165 """
166 Determine if one input iov is good.
167 """
168 giov = GoodIOV(iov.since, iov.until, iov.channel, self.evaluator(iov))
169 giov._orig_iov = iov
170 return giov
171

◆ make_good_iovs()

python.variable.DCSC_Variable.make_good_iovs ( self,
iovs )
Determine whether each iov signifies a good or bad state.

Reimplemented in python.subdetectors.sct.DCSC_Variable_SCT_Config, and python.subdetectors.tile.Tile_NoHighVoltage.

Definition at line 172 of file variable.py.

172 def make_good_iovs(self, iovs):
173 """
174 Determine whether each iov signifies a good or bad state.
175 """
176 make_good_iov = self.make_good_iov
177 return IOVSet(make_good_iov(iov) for iov in iovs)
178

◆ map_input_channels()

python.variable.DCSC_Variable.map_input_channels ( self,
iovs )
By default, do nothing. Overloaded by DCSC_Variable_With_Mapping.

Reimplemented in python.variable.DCSC_Variable_With_Mapping.

Definition at line 141 of file variable.py.

141 def map_input_channels(self, iovs):
142 """
143 By default, do nothing. Overloaded by DCSC_Variable_With_Mapping.
144 """
145 return iovs
146

◆ print_time_info()

python.variable.DCSC_Variable.print_time_info ( self,
iovs )
Logs the first and last insertion times of the IoVs, and their ranges.

Definition at line 124 of file variable.py.

124 def print_time_info(self, iovs):
125 """
126 Logs the first and last insertion times of the IoVs, and their ranges.
127 """
128 first_value, last_value = iovs.range_iov
129
130 log.info("Times for %s:", self)
131 log.info(" IoV : (first)%26s (last)%26s",
132 first_value.date, last_value.date)
133
134 if not hasattr(iovs.first, "insertion_time"):
135 log.info("Insertion time not available")
136 else:
137 insertion_times = [iov.insertion_time for iov in iovs]
138 log.info(" Insertion: (first)%26s (last)%26s",
139 min(insertion_times), max(insertion_times))
140
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41

◆ quantize()

python.variable.DCSC_Variable.quantize ( self,
lbtime,
iovs )
Quantize "good state" timewise-iovs to lumiblocks.
OUT_OF_CONFIG gets priority over BAD if BAD and OUT_OF_CONFIG overlap
the same lumiblock.

Reimplemented in python.variable.DCSC_Defect_Global_Variable, and python.variable.DCSC_Global_Variable.

Definition at line 147 of file variable.py.

147 def quantize(self, lbtime, iovs):
148 """
149 Quantize "good state" timewise-iovs to lumiblocks.
150 OUT_OF_CONFIG gets priority over BAD if BAD and OUT_OF_CONFIG overlap
151 the same lumiblock.
152 """
153 IOVSet = iovs.empty
154 iovs = [iovs_ for c, iovs_ in sorted(iovs.by_channel.items())]
155
156 def quantizer (iovs):
157 return min(i.good for i in iovs) if iovs else None
158
159 result = quantize_iovs_slow_mc(lbtime, iovs, quantizer)
160 return IOVSet(GoodIOV(*iov)
161 for iovs in result
162 for iov in iovs if iov[0].run == iov[1].run)
163

◆ read()

python.variable.DCSC_Variable.read ( self,
query_range,
folder_base,
folder_name )
Read the relevant data from COOL for this variable

Definition at line 71 of file variable.py.

71 def read(self, query_range, folder_base, folder_name):
72 """
73 Read the relevant data from COOL for this variable
74 """
75 if folder_name.startswith("/"):
76 folder_path = folder_name
77 else:
78 # For relative folders prepend the folder_base
79 folder_path = "/".join((folder_base, folder_name))
80
81 log.info("Querying COOL folder %s", folder_path)
82
83 if config.opts.check_input_time:
84 self.fetch_args["with_time"] = True
85
86 # Massage DB access
87 if '/' in self.input_db:
88 newdbstring = self.input_db.rsplit('/', 1)[0]
89 else:
90 newdbstring = self.input_db
91 if config.opts.input_database.startswith('sqlite'):
92 self.fetch_args['database'] = config.opts.input_database
93 else:
94 self.fetch_args['database'] = ('%s/%s' % (newdbstring, config.opts.input_database))
95 if self.fetch_args:
96 log.debug("Fetching with args: %r", self.fetch_args)
97
98 iovs = fetch_iovs(folder_path, *query_range, **self.fetch_args)
99
100 # Prints even when not doing debug.
101 # TODO: fix this. Might be broken in DQUtils.logger
102 #if log.isEnabledFor(logging.DEBUG):
103 # log.debug("Dumping input IOVs:")
104 # for iov in iovs:
105 # print iov
106
107 #Remove Old TGC Chambers
108 original_length=len(list(iovs))
109 if folder_path=='/TGC/DCS/PSHVCHSTATE':
110 for i in range(original_length-1, -1, -1):
111 if list(iovs)[i].channel in range(5504,5552) or list(iovs)[i].channel in range(7362,7411):
112 iovs.pop(i)
113
114 if config.opts.check_input_time:
115 self.print_time_info(iovs)
116
117 if log.isEnabledFor(logging.INFO):
118 input_hash = hash(iovs)
119 self.input_hashes.append(input_hash)
120 log.info(" -> Input hash: % 09x (len=%i)", input_hash, len(iovs))
121
122 return iovs
123
IovVectorMap_t read(const Folder &theFolder, const SelectionCriterion &choice, const unsigned int limit=10)

Member Data Documentation

◆ evaluator

python.variable.DCSC_Variable.evaluator = evaluator

Definition at line 54 of file variable.py.

◆ fetch_args

python.variable.DCSC_Variable.fetch_args = {}

Definition at line 56 of file variable.py.

◆ folder_name

python.variable.DCSC_Variable.folder_name = folder_name

Definition at line 53 of file variable.py.

◆ input_db

str python.variable.DCSC_Variable.input_db = 'COOLOFL_DCS/CONDBR2'

Definition at line 52 of file variable.py.

◆ input_hashes

python.variable.DCSC_Variable.input_hashes = []

Definition at line 58 of file variable.py.

◆ iovs

python.variable.DCSC_Variable.iovs = iovs

Definition at line 220 of file variable.py.

◆ is_config_variable

bool python.variable.DCSC_Variable.is_config_variable = False
static

Definition at line 47 of file variable.py.

◆ is_global

bool python.variable.DCSC_Variable.is_global = False
static

Definition at line 46 of file variable.py.

◆ subdetector

python.variable.DCSC_Variable.subdetector = subdetector

Definition at line 184 of file variable.py.

◆ timewise_folder

bool python.variable.DCSC_Variable.timewise_folder = True
static

Definition at line 48 of file variable.py.


The documentation for this class was generated from the following file: