2from __future__
import annotations
4from DQDefects
import DEFECT_IOV
5from functools
import reduce
7from typing
import Mapping
11 self.
name = defect_iov.channel
21 raise RuntimeError(
"bad_evaluator should never be called")
30 from operator
import truth, not_
38 def _populate(self, defect_logics: Mapping[str, DefectLogic]) ->
None:
40 Populate the dependencies with logic objects, and the primary defects.
43 if name
in defect_logics]
47 if c
not in defect_logics)
49 def evaluate_full(self, states: Mapping[str, DEFECT_IOV]) -> DEFECT_IOV:
51 Evaluate this defect logic for a point in time.
56 from operator
import not_
57 inputs = [(op, states[c])
for op, c
in self.
operations if c
in states
if states[c]]
59 uninverted = [_
for _
in self.
inverting if _
not in states
or not states[_]]
60 if not inputs
and not uninverted:
62 return DEFECT_IOV(
None,
None, self.
name,
63 present =
reduce(bool.__or__, (op(i.present)
for op, i
in inputs),
False)
or len(uninverted),
64 recoverable=
reduce(bool.__and__, (
not not i.recoverable
for op, i
in inputs
65 if op(i.present)),
False),
67 comment=
" ".join(sorted([((
'!' if op == not_
else '') + i.channel)
for op, i
in inputs
if op(i.present)]
68 +[
'!'+_
for _
in uninverted]))
73 Evaluate this defect logic for a point in time.
78 inputs = [(op, states[c])
for op, c
in self.
operations if c
in states
and states[c]]
80 uninverted = [_
for _
in self.
inverting if _
not in states
or not states[_]]
81 if not inputs
and not uninverted:
83 return DEFECT_IOV(
None,
None, self.
name,
84 present =
reduce(bool.__or__, (op(i.present)
for op, i
in inputs),
False)
or len(uninverted),
static void reduce(HepMC::GenEvent *ge, HepMC::GenParticle *gp)
Remove an unwanted particle from the event, collapsing the graph structure consistently.
DEFECT_IOV evaluate_full(self, Mapping[str, DEFECT_IOV] states)
DEFECT_IOV bad_evaluator(self, states)
DEFECT_IOV evaluate_partial(self, Mapping[str, DEFECT_IOV] states)
None _populate(self, Mapping[str, DefectLogic] defect_logics)
None set_evaluation(self, bool full)
None __init__(self, defect_iov)
None _operations_parse(self)
bool add(const std::string &hname, TKey *tobj)