粒子数据和识别码
Particle的Python项目详细描述
粒子:PDG粒子数据和识别码
粒子为Particle Data Group(pdg)提供了一个pythonic接口。 粒子数据表和粒子识别码。
pdg定义了标准粒子标识(id)编号方案。 包提供了PDGID类,实现对这些pdg id的查询。 这些查询也可以通过模拟 C++接口。
Particle类将信息包装在pdg粒子数据表中,并 提供面向对象的界面和强大的搜索和查找实用程序。
当前版本的包反映了 heppid和heppdt版本3.04.01中定义的实用功能, 见http://lcgapp.cern.ch/project/simu/HepPDT/。
安装
像任何其他python包一样安装particle:
pip install particle
或者类似的(如果愿意,可以使用--user、virtualenv等)。
严格依赖性
- Python(2.7+,3.5+)
- importlib_resources backport如果使用python<;3.7
- attrs提供没有样板的类(类似于python 3.7中的数据类)
- hepunits为scikit hep包提供单元
变更日志
有关显著变化的历史,请参见changelog。
入门:pdgids
>>>fromparticleimportPDGID>>>>>>pid=PDGID(211)>>>pid<PDGID:211>>>>pid.is_mesonTrue>>>pid=PDGID(99999999)>>>pid<PDGID:99999999(is_valid==False)>
为了方便起见,PDGID类的所有属性都可用作独立函数:
>>>fromparticle.pdgidimportis_meson>>>>>>is_meson(211)True
pdgid文本为最常见的粒子提供(PDGIDclass)别名,名称易于识别。 例如:
>>>fromparticle.pdgidimportliteralsaslid>>>>>>lid.pi_plus<PDGID:211>>>>>>>fromparticle.pdgid.literalsimportLambda_b_0>>>Lambda_b_0<PDGID:5122>>>>Lambda_b_0.has_bottomTrue
您可以使用以下命令行快速显示pdgid信息:
$ python -m particle pdgid 323 <PDGID: 323> A None J 1.0 L 0 S 1 Z None abspid 323 charge 1.0 has_bottom False ...
入门:粒子
可以使用多种方法获取粒子。如果你知道pdgid号码 您可以直接获取粒子,也可以使用搜索:
>>>fromparticleimportParticle>>>Particle.from_pdgid(211)<Particle:name="pi+",pdgid=211,mass=139.57061±0.00024MeV>>>>>>>Particle.findall('pi')[0]<Particle:name="pi0",pdgid=111,mass=134.9770±0.0005MeV>
可以使用关键字参数搜索属性,其中包括 pdg_name,name,mass,width,charge,three_charge,anti_flag,rank, I,J,G,P,quarks,status, mass_upper、mass_lower、width_upper和width_lower。 您可以传递任何属性的可调用或完全匹配。 参数particle也可以设置为True/False, 限制对粒子或反粒子的搜索。 您还可以使用第一个位置自己构建搜索 参数,它接受给定粒子对象本身的可调用项。 如果第一个位置参数是字符串,则它将与 粒子的name。替代的.find()只需要一个 搜索返回的匹配项,如果多于或少于一个,则将引发错误 找到匹配项。
以下是可能的复杂搜索:
>>># Print out all particles with asymmetric decay width uncertainties>>>ps=Particle.findall(lambdap:p.width_lower!=p.width_upper)>>>forpinps:...print(p.name,p.pdgid,p.width_lower,p.width_upper)>>>>>># Find all antiparticles with 'Omega' in the name>>>Particle.findall('Omega',particle=False)# several found>>>>>># Find all antiparticles of name=='Omega'>>>Particle.findall(name='Omega',particle=False)# none found>>>>>># Find all antiparticles of pdg_name=='Omega'>>>Particle.findall(pdg_name='Omega',particle=False)# only 1, of course[<Particle:name="Omega~+",pdgid=-3334,mass=1672.5±0.3MeV>]>>>>>># Find all neutral beauty hadrons>>>Particle.findall(lambdap:p.pdgid.has_bottomandp.charge==0)>>>>>># Find all strange mesons with c*tau > 1 meter>>>fromhepunitsimportmeter>>>Particle.findall(lambdap:p.pdgid.is_mesonandp.pdgid.has_strangeandp.ctau>1*meter,particle=True)[<Particle:name="K(L)0",pdgid=130,mass=497.611±0.013MeV>,<Particle:name="K+",pdgid=321,mass=493.677±0.016MeV>]
一旦有了粒子,就可以访问任何属性以及几个方法。 虽然它们不是真正的属性,但是您可以访问is_name_barred和spin_type。 你也可以.invert()一个粒子。
有很多打印颗粒的选择: ^{TT33}$,^{TT34}$,^{TT35}$,^{TT36}$,笔记本中的HTML打印输出, 当然还有repr和str支持。
你也可以从粒子中得到.pdgid。 对粒子进行分类将把最低的abs(pdgid)放在第一位。
粒子文本为最常见的粒子提供(Particleclass)别名, 名字容易辨认。例如:
>>>fromparticle.particleimportliteralsaslp>>>lp.pi_plus<Particle:name="pi+",pdgid=211,mass=139.57061±0.00024MeV>>>>>>>fromparticle.particle.literalsimportLambda_b_0>>>Lambda_b_0<Particle:name="Lambda(b)0",pdgid=5122,mass=5619.60±0.17MeV>>>>Lambda_b_0.J0.5
可以使用命令行快速搜索粒子 (注意:可以使用/需要引号,但在Windows上只能使用双引号):
$ python -m particle search "K*0" <Particle: name="K*(892)0", pdgid=313, mass=895.55 ± 0.20 MeV> <Particle: name="K*(1680)0", pdgid=30313, mass=1718 ± 18 MeV> <Particle: name="K*(1410)0", pdgid=100313, mass=1421 ± 9 MeV>
如果通过搜索或给定pdgid号仅选择一个粒子,则可以看到有关 粒子:
$ python -m particle search 311 Name: K0 ID: 311 Latex: $K^{0}$ Mass=497.611 ± 0.013 MeV Width= -1.0 MeV Q (charge)=0 J (total angular)=0.0 P (space parity)= - C (charge parity)= ? I (isospin)=1/2 G (G-parity)= ? SpinType: SpinType.PseudoScalar Quarks: dS Antiparticle name: K~0 (antiparticle status: Barred)
高级:加载自定义表
如果需要,可以控制粒子数据表。可以使用t附加新的数据表他遵循语法:
>>>fromparticleimportParticle>>>Particle.load_table('new_particles.csv',append=True)
还可以使用append=False(默认值)完全替换粒子表。
高级:转换
可以使用particle.particle.convert中的实用程序转换和更新粒子表。这需要 pandas包,并且仅使用python 3进行测试。运行以下命令获得更多帮助:
$ python3 -m particle.particle.convert --help