PYTHIA和NumPy之间的接口
项目描述
numpythia 已有一段时间没有积极维护。这主要是因为出现了新的替代品,这些替代品既更快又更灵活。例如
官方Pythia 8 (SWIG)绑定可通过Conda获取。
impy项目实现了用于宇宙射线和高能粒子物理学的流行事件生成器的通用用户界面。
numpythia:PYTHIA和NumPy之间的接口
numpythia提供了一个接口,使您可以将事件生成为包含粒子四动量的NumPy数组。默认情况下,numpythia仅依赖于NumPy,并构建了PYTHIA和HepMC源代码的内部副本。
独立安装
简单地使用内置的PYTHIA和HepMC
pip install -v numpythia
您就可以开始了!
支持构建外部PYTHIA的支持在愿望清单中。
请注意,如果您使用的是MacOSX系统,则安装可能需要设置环境变量,具体说明请参见此处。
严格依赖关系
入门
>>> from numpythia import Pythia, hepmc_write, hepmc_read
>>> from numpythia import STATUS, HAS_END_VERTEX, ABS_PDG_ID
>>> from numpythia.testcmnd import get_cmnd
>>> from numpy.testing import assert_array_equal
>>> pythia = Pythia(get_cmnd('w'), random_state=1)
>>> selection = ((STATUS == 1) & ~HAS_END_VERTEX &
(ABS_PDG_ID != 12) & (ABS_PDG_ID != 14) & (ABS_PDG_ID != 16))
>>> # generate events while writing to ascii hepmc
>>> for event in hepmc_write('events.hepmc', pythia(events=1)):
>>> array1 = event.all(selection)
>>> # read the same event back from ascii hepmc
>>> for event in hepmc_read('events.hepmc'):
>>> array2 = event.all(selection)
>>> assert_array_equal(array1, array2)
True
任何粒子信息数组的dtype为
np.dtype([('E', 'f8'), ('px', 'f8'), ('py', 'f8'), ('pz', 'f8'), ('pt', 'f8'),
('mass', 'f8'), ('rap', 'f8'), ('eta', 'f8'), ('theta', 'f8'),
('phi', 'f8'), ('prodx', 'f8'), ('prody', 'f8'), ('prodz', 'f8'),
('prodt', 'f8'), ('pdgid', 'i4'), ('status', 'i4')])
有关喷射聚类,请参阅pyjet。
教程
设置PYTHIA
可以通过三种方式传递PYTHIA设置:通过构造函数的**kwargs参数Pythia(…, **kwargs)
>>> pythia = Pythia(..., Beams_eCM=13000.)
或作为字典
>>> pythia = Pythia(..., params={'Beams:eCM': 13000.})
或通过Python命令文件
>>> pythia = Pythia(config='path/to/config.cmd')
完整的设置列表可以在PYTHIA主页上找到。
请注意,如果使用kwargs,则设置名称中的“:”被替换为“_”。kwargs优先于params,它们都优先于config。示例配置文件可以在numpythia.testcmnd目录下找到。
生成事件
要生成事件,请执行
>>> events = pythia(events=100)
>>> events
<generator at 0x10cf06f78>
其中events是一个包含所有生成的粒子的GenEvent生成器。
生成的粒子可以通过all、first和last方法访问,它们有两个可选参数selection和return_hepmc。Selection是一个过滤器或过滤器的组合,通过位运算应用于事件中的粒子(如入门示例所示)。可用的过滤器包括
STATUS, PDG_ID, ABS_PDG_ID, HAS_END_VERTEX, HAS_PRODUCTION_VERTEX,
HAS_SAME_PDG_ID_DAUGHTER, IS_STABLE, IS_BEAM
当使用all时,return_hepmc默认设置为False
>>> for e in events:
>>> array = e.all(selection)
返回一个描述如上所述的粒子数组。当使用first和last时,return_hepmc默认设置为True
>>> for e in events:
>>> gen_part_f = e.first(selection)
>>> gen_part_l = e.last(selection)
返回一个GenParticle。
生成的粒子
GenParticle是HepMC::GenParticle的numpythia接口,具有以下属性
pid, status, e, px, py, pz, pt, eta, phi, mass, theta, rap
GenParticle还具有以下方法:parents、children、ancestors、descendants和siblings,它们都有之前描述的两个可选参数selection和return_hepmc。例如
>>> for e in events:
>>> w = e.last((ABS_PDG_ID == 24) & HAS_END_VERTEX))
>>> w.children()
array([(240.60708981, 115.76101664, 126.16766767, -169.03439984, 171.22760682, 0.5, -0.87228439, -0.87228739, 2.34974894, 0.82838703, 0., 0., 0., 0., 3, 23),
( 52.59241372, 9.21296404, 50.77873929, -10.01763001, 51.60774235, 1.5, -0.19283178, -0.19291222, 1.76252302, 1.39131523, 0., 0., 0., 0., -4, 23)],
dtype=[('E', '<f8'), ('px', '<f8'), ('py', '<f8'), ('pz', '<f8'), ('pT', '<f8'), ('mass', '<f8'), ('rap', '<f8'), ('eta', '<f8'), ('theta', '<f8'), ('phi', '<f8'), ('prodx', '<f8'), ('prody', '<f8'), ('prodz', '<f8'), ('prodt', '<f8'), ('pdgid', '<i4'), ('status', '<i4')])