5 Check reading and writing of evt.pdl files as well as errors when creating new particles.
8 - the ROOT.TDatabasePDG instance is in fact an EvtGenDatabasePDG
9 - reading a pdl file raises a warning if it's not the original one
10 - creating a particle which already exists is forbidden
11 - creating particles with whitespace in the name is forbidden
12 - writing an evt.pdl results in the same output as the original pdl, except for
13 whitespace and additionally defined particles
17 from tempfile
import NamedTemporaryFile
25 db = ROOT.TDatabasePDG.Instance()
27 db.AddParticle(
"e-",
"electron", 0,
False, 0, 0,
"duplicate", 11, 0, 0, 0, 0, 0, 0)
29 db.AddParticle(
"invalid name",
"invalid name", 0,
False, 0, 0,
"custom", 2345, 0, 0, 0, 0, 0, 0)
36 default_evtpdl = basf2.find_file(os.path.join(
"data",
"framework",
"particledb",
"evt.pdl"))
39 with NamedTemporaryFile()
as tempfile:
41 db.WriteEvtGenTable(tempfile.name)
44 with open(default_evtpdl)
as default:
45 old_lines = [x.split()
for x
in default
if x[0] !=
'*' and not x.startswith(
"end")]
46 with open(tempfile.name)
as changed:
47 new_lines = [x.split()
for x
in changed
if x[0] !=
'*' and not x.startswith(
"end")]
49 if len(old_lines) != len(new_lines):
50 basf2.B2ERROR(
"Different number of lines when writing pdl file")
54 types = [str]*4 + [int, float, float, float, int, int, float, int]
56 for old, new
in zip(old_lines, new_lines):
58 if len(old) != len(new):
59 basf2.B2ERROR(
"Number of field different between old and new:",
63 elif len(new) < len(types):
64 basf2.B2ERROR(
"Not enough fields", old=old, new=new)
68 if not all(t(o) == t(n)
for t, o, n
in zip(types, old, new)):
69 basf2.B2ERROR(
"Particles differ", old=old, new=new)
72 with NamedTemporaryFile()
as tempfile2:
74 db.AddParticle(
"testparticle",
"testparticle", 1,
False, 2, 3,
"custom", 10001, 4, 5, 6, 7, 8, 9)
79 db.WriteEvtGenTable(tempfile2.name)
81 subprocess.call([
"diff",
"--old-line-format=- %L",
"--new-line-format=+ %L",
82 "--unchanged-line-format=", tempfile.name, tempfile2.name])
84 db.ReadEvtGenTable(
"/no/such/file/(I hope)")
88 print(
"now we should have zero entries: ", db.ParticleList().GetEntries())
89 print(
"so reread default file...")
91 print(
"number of entries is now", db.ParticleList().GetEntries()
and "positive" or "zero")