11 from collections
import defaultdict
12 import modularAnalysis
as ma
13 from ROOT
import Belle2
17 """Generate a list of 10 electrons which have stupid momenta just to sort
18 them later. And then add one electron where all momentum components are
22 """We need to register the mc particles"""
25 self.
mcpmcp.registerInDataStore()
28 """And then we generate particles"""
31 p = self.
mcpmcp.appendNew()
34 p.setMomentum(random.randrange(1, 5), random.randrange(1, 5), random.randrange(1, 5))
36 p = self.
mcpmcp.appendNew()
39 p.setMomentum(math.nan, math.nan, math.nan)
43 """Check if the ranks are actually what we want"""
46 """Create particle list object"""
51 """And check all the ranks"""
55 einfo = defaultdict(list)
56 for p
in self.
plistplist:
61 names = [str(n)
for n
in p.getExtraInfoNames()]
63 einfo[n].append(p.getExtraInfo(n))
66 print(list(einfo.keys()))
67 assert 'M_rank' in einfo.keys(),
"Default name is not as expected"
75 px_value_ranks = {v: i
for i, v
in enumerate(sorted(set(px), reverse=
True,
76 key=
lambda v: -math.inf
if math.isnan(v)
else v), 1)}
77 py_value_ranks = {v: i
for i, v
in enumerate(sorted(set(py),
78 key=
lambda v: math.inf
if math.isnan(v)
else v), 1)}
82 for v, r
in zip(px, einfo[
"px_high_multi"]):
83 print(f
"Value: {v}, rank: {r}, should be: {px_value_ranks[v]}")
84 assert r == px_value_ranks[v],
"Rank is not correct"
86 for v, r
in zip(py, einfo[
"py_low_multi"]):
87 print(f
"Value: {v}, rank: {r}, should be: {py_value_ranks[v]}")
88 assert r == py_value_ranks[v],
"Rank is not correct"
94 simple_range = list(range(len(px)))
95 px_single_ranks = list(sorted(int(r) - 1
for r
in einfo[
"px_high_single"]))
96 assert simple_range == px_single_ranks,
"sorted ranks don't form a range from 1..n"
100 py_single_ranks = list(int(r) - 1
for r
in einfo[
"py_low_single"])
101 assert simple_range == py_single_ranks,
"ranks don't form a range from 1..n"
108 path.add_module(
"EventInfoSetter", evtNumList=10)
112 ma.fillParticleListFromMC(
"e-",
"", path=path)
114 ma.rankByHighest(
"e-",
"M", path=path)
115 ma.rankByHighest(
"e-",
"px", allowMultiRank=
False, outputVariable=
"px_high_single", path=path)
116 ma.rankByHighest(
"e-",
"px", allowMultiRank=
True, outputVariable=
"px_high_multi", path=path)
117 ma.rankByLowest(
"e-",
"py", allowMultiRank=
False, outputVariable=
"py_low_single", path=path)
118 ma.rankByLowest(
"e-",
"py", allowMultiRank=
True, outputVariable=
"py_low_multi", path=path)
127 """Check if 'numBest' works correctly"""
130 """Create particle list 'e-:numbest' object"""
135 """Check if 'e-:numBest' has the expected size"""
136 size = self.
plistplist.getListSize()
139 assert size <= numBest_value,
'numBest test failed: there are too many Particles in the list!'
143 ma.fillParticleListFromMC(
'e-:numBest',
'', path=path)
145 ma.rankByHighest(
'e-:numBest',
'p', numBest=numBest_value, path=path)
a (simplified) python wrapper for StoreArray.
a (simplified) python wrapper for StoreObjPtr.
plist
ParticleList object.
plist
particle list object