84 ROOT.gSystem.Load(
'libdqm_core.so')
85 cppyy.include(
"dqm_core/AlgorithmManager.h")
88 #include <dqm_core/AlgorithmManager.h>
89 std::pair<std::vector<std::string>, std::vector<std::string>> get_lib_algs() {
90 std::vector<std::string> rv1;
91 std::vector<std::string> rv2;
92 for (const auto& p : dqm_core::AlgorithmManager::instance().getAlgorithmMap()) {
93 rv1.push_back(p.first);
95 for (const auto& p : dqm_core::AlgorithmManager::instance().getSummaryMakerMap()) {
96 rv2.push_back(p.first);
98 return std::move(std::make_pair(rv1, rv2));
105 AlgorithmNameInterpreter().visit(tree)
106 except ValueError
as e:
109 libs = {_.children[0].value
for _
in tree.find_data(
'libname')}
110 compalgs = {_.children[0].value
for _
in tree.find_data(
'compalgname')}
114 if ROOT.gSystem.Load(lib) < 0:
116 print(f
'ERROR: Library {lib} defined by a libname clause cannot be found. Referenced by:')
117 for alg
in tree.find_data(
'algorithmblock'):
118 alibname = alg.find_data(
'libname')
119 if alibname
and lib
in {_.children[0].value
for _
in alibname}:
120 print(
list(alg.find_data(
'algorithmname'))[0].children[0].value)
123 libalgos, libsummaries = ROOT.get_lib_algs()
126 for alg
in tree.find_data(
'compalgblock'):
127 subalglist = [_
for _
in alg.children
if _.data ==
'subalglist']
128 for tok
in subalglist[0].children:
129 if tok.value
not in libalgos:
130 algname =
list(alg.find_data(
'compalgname'))[0].children[0].value
131 print(f
'ERROR: composite algorithm {algname} references {tok.value} which is not a known algorithm')
136 instsummaries =
set()
137 for alg
in tree.find_data(
'algorithmblock'):
139 algname = [_.children[0].value
for _
in alg.children
if isinstance(_, lark.Tree)
and _.data ==
"algorithmname"][0]
140 algrealname = [_.children[0].value
for _
in alg.children
if isinstance(_, lark.Tree)
and _.data ==
"realname"][0]
141 if algrealname
in libalgos:
142 instalgos.add(algname)
143 elif algrealname
in libsummaries:
144 instsummaries.add(algname)
145 elif algrealname
in compalgs:
146 instalgos.add(algname)
148 print(f
'ERROR: undefined base algorithm {algrealname} for {algname}')
150 except Exception
as e:
151 print(
'??? problem processing', alg, e)
154 for ref
in tree.find_data(
'algorefstatement'):
155 nodealg = ref.children[0].children[0].value
156 if nodealg
not in instsummaries:
157 print(f
'ERROR: an output is specifying algorithm = {nodealg} which is not a known summary algorithm')
161 for ref
in list(tree.find_data(
'dirblock')) +
list(tree.find_data(
'histblock')):
162 nodealg = [_
for _
in ref.children
if _.data ==
'algorithmreference']
164 nodealgname = nodealg[0].children[0].value
165 if nodealgname
not in instalgos:
166 refname = [_
for _
in ref.children
if _.data
in (
'histname',
'dirname')][0].children[0].value
167 print(f
'ERROR: a dir/hist is specifying algorthm = {nodealgname} which is not a known histogram algorithm. Referenced by {refname}')