4 from collections
import defaultdict
5 import modularAnalysis
as anal
6 from ROOT
import Belle2
10 """Generate a list of 10 electrons which have stupid momenta just to sort
11 them later. And then add one electron where all momentum components are
15 """We need to register the mc particles"""
18 self.
mcp.registerInDataStore()
21 """And then we generate particles"""
24 p = self.
mcp.appendNew()
27 p.setMomentum(random.randrange(1, 5), random.randrange(1, 5), random.randrange(1, 5))
29 p = self.
mcp.appendNew()
32 p.setMomentum(math.nan, math.nan, math.nan)
36 """Check if the ranks are actually what we want"""
39 """Create particle list object"""
44 """And check all the ranks"""
48 einfo = defaultdict(list)
52 names = p.getExtraInfoNames()
54 einfo[n].append(p.getExtraInfo(n))
57 print(list(einfo.keys()))
58 assert 'M_rank' in einfo.keys(),
"Default name is not as expected"
66 px_value_ranks = {v: i
for i, v
in enumerate(sorted(set(px), reverse=
True,
67 key=
lambda v: -math.inf
if math.isnan(v)
else v), 1)}
68 py_value_ranks = {v: i
for i, v
in enumerate(sorted(set(py),
69 key=
lambda v: math.inf
if math.isnan(v)
else v), 1)}
73 for v, r
in zip(px, einfo[
"px_high_multi"]):
74 print(f
"Value: {v}, rank: {r}, should be: {px_value_ranks[v]}")
75 assert r == px_value_ranks[v],
"Rank is not correct"
77 for v, r
in zip(py, einfo[
"py_low_multi"]):
78 print(f
"Value: {v}, rank: {r}, should be: {py_value_ranks[v]}")
79 assert r == py_value_ranks[v],
"Rank is not correct"
85 simple_range = list(range(len(px)))
86 px_single_ranks = list(sorted(int(r) - 1
for r
in einfo[
"px_high_single"]))
87 assert simple_range == px_single_ranks,
"sorted ranks don't form a range from 1..n"
91 py_single_ranks = list(int(r) - 1
for r
in einfo[
"py_low_single"])
92 assert simple_range == py_single_ranks,
"ranks don't form a range from 1..n"
99 path.add_module(
"EventInfoSetter", evtNumList=10)
103 anal.fillParticleListFromMC(
"e-",
"", path=path)
105 anal.rankByHighest(
"e-",
"M", path=path)
106 anal.rankByHighest(
"e-",
"px", allowMultiRank=
False, outputVariable=
"px_high_single", path=path)
107 anal.rankByHighest(
"e-",
"px", allowMultiRank=
True, outputVariable=
"px_high_multi", path=path)
108 anal.rankByLowest(
"e-",
"py", allowMultiRank=
False, outputVariable=
"py_low_single", path=path)
109 anal.rankByLowest(
"e-",
"py", allowMultiRank=
True, outputVariable=
"py_low_multi", path=path)
118 """Check if 'numBest' works correctly"""
121 """Create particle list 'e-:numbest' object"""
126 """Check if 'e-:numBest' has the expected size"""
127 size = self.
plist.getListSize()
130 assert size <= numBest_value,
'numBest test failed: there are too many Particles in the list!'
134 anal.fillParticleListFromMC(
'e-:numBest',
'', path=path)
136 anal.rankByHighest(
'e-:numBest',
'M', numBest=numBest_value, path=path)