戳蓝字“ 同步辐射光源”关注我们哦!
摘要:FELPY 是一个基于 SRW/WPG 的 Python 库,为自由电子激光(FEL)和同步辐射光源的束线设计提供了简单直观的 API 接口。本文将介绍 FELPY 的核心功能、使用方法和实际应用案例。
一、背景介绍
同步辐射光源与自由电子激光
同步辐射光源和自由电子激光(FEL)是现代科学研究的重要工具,广泛应用于物理、化学、生物、材料科学等领域。
主要特点:
模拟挑战
在束线设计和优化过程中,研究人员面临以下挑战:
- 复杂的物理模型 - 需要精确模拟电子束、辐射场和光学元件的相互作用
FELPY 应运而生
FELPY(Free Electron Laser Python)是一个开源 Python 库,旨在简化 FEL 和同步辐射的模拟工作流程。
二、FELPY 核心功能
1. 基于 SRW/WPG
FELPY 扩展了 SRW(Synchrotron Radiation Workshop) 和 WPG(Wave Propagation Gateway) 的功能:
from felpy import SRWSim# 创建 SRW 模拟对象sim = SRWSim( electron_beam_energy=10.0, # GeV undulator_period=0.032, # m undulator_length=3.0# m)
2. 直观的 API 设计
传统方式:
# SRW 原生代码(复杂)import srwlibsrw_mag = srwlib.SRWLMag()srw_mag.SetSRWLPPrm(...)# ... 大量配置代码
FELPY 方式:
# FELPY 代码(简洁)from felpy import Undulatorund = Undulator(period=0.032, length=3.0)
3. 主要模块
三、安装与配置
环境要求
- Python >= 3.8- NumPy >= 1.20- SciPy >= 1.7- SRW/WPG (可选,用于高级功能)
安装步骤
方式 1:pip 安装(推荐)
pip install felpy
方式 2:源码安装
git clone https://github.com/twguest/FELpy.gitcd FELpypip install -e .
验证安装
import felpyprint(f"FELPY 版本:{felpy.__version__}")
四、使用方法
案例 1:简单波荡器辐射计算
from felpy import Undulator, ElectronBeam, SRWSim# 1. 设置电子束参数beam = ElectronBeam( energy=10.0, # GeV current=1000, # A energy_spread=0.001# relative)# 2. 设置波荡器参数und = Undulator( period=0.032, # m length=3.0, # m K=3.5# K 值)# 3. 创建模拟对象sim = SRWSim(electron_beam=beam, undulator=und)# 4. 计算辐射谱spectrum = sim.calc_spectrum( energy_range=(100, 10000), # eV n_points=1000)# 5. 可视化结果spectrum.plot()
案例 2:束线传输模拟
from felpy import Beamline, Lens, Aperture# 创建束线bl = Beamline()# 添加光学元件bl.add_element(Lens(focal_length=1.0, position=10.0))bl.add_element(Aperture(size=0.001, position=15.0))bl.add_element(Lens(focal_length=0.5, position=20.0))# 传输计算beam_profile = bl.propagate( initial_beam=sim.source, energy=8000# eV)# 显示结果beam_profile.show_intensity()
案例 3:参数扫描优化
import numpy as npfrom felpy import ParameterScan# 定义扫描参数scan_params = {'undulator_K': np.linspace(3.0, 4.0, 20),'electron_energy': np.linspace(9.5, 10.5, 10)}# 执行扫描scan = ParameterScan(sim, scan_params)results = scan.run( metric='peak_brightness', parallel=True# 并行计算)# 分析最优参数optimal = results.find_optimum()print(f"最优 K 值:{optimal['undulator_K']}")print(f"最优能量:{optimal['electron_energy']} GeV")
五、实际应用案例
案例 1:上海光源 BL02U 束线优化
背景: 上海光源 BL02U 光束线需要优化聚焦系统,提高实验站的光子通量。
方法:
结果:
案例 2:欧洲 XFEL 波荡器设计
背景: 欧洲 XFEL 需要设计新型变极化波荡器。
方法:
结果:
- 发表 Physical Review Accelerators and Beams 论文
案例 3:瑞士光源 SLS 2.0 升级
背景: SLS 2.0 升级项目需要评估新储存环参数对束线性能的影响。
方法:
结果:
六、优势与特点
1. 学习曲线平缓
对比传统软件:
2. Python 生态集成
# 与科学计算库无缝集成import numpy as npimport matplotlib.pyplot as pltfrom felpy import SRWSim# 直接使用 NumPy 数组energies = np.logspace(1, 4, 1000)spectrum = sim.calc_spectrum(energies)# 使用 Matplotlib 可视化plt.loglog(energies, spectrum.intensity)plt.show()
3. 交互式工作流
# Jupyter Notebook 中的交互式模拟from ipywidgets import interact@interact(K=(2.0, 5.0, 0.1))defplot_spectrum(K=3.5): und.K = K spectrum = sim.calc_spectrum() spectrum.plot()
4. 并行计算支持
# 多核并行加速from multiprocessing import Pooldefcalc_brightness(K_value): und.K = K_valuereturn sim.calc_brightness()with Pool(8) as p: results = p.map(calc_brightness, K_values)
七、局限性与展望
当前局限
未来发展方向
- GPU 加速 - 利用 CUDA 加速波前传播计算
八、总结
FELPY 作为同步辐射和自由电子激光模拟的 Python 工具,具有以下核心价值:
✅ 简化工作流程 - 从复杂的配置代码到直观的 API 调用✅ 降低学习门槛 - Python 语法友好,易于上手✅ 提高开发效率 - 快速原型设计和参数优化✅ 促进协作共享 - 开源社区支持,代码可复用
对于同步辐射光源的用户和束线科学家,FELPY 是一个值得掌握的强大工具。
参考资料
- FELPY 官方文档:https://felpy.readthedocs.io/
- SRW 官方文档:https://github.com/ochubar/SRW
- WPG 项目:https://github.com/twguest/WPG
- Physical Review Accelerators and Beams, Vol.25, 2022
作者: 小丹 🐼日期: 2026-03-07公众号: 同步辐射光源标签: #FELPY #同步辐射 #自由电子激光 #Python #科学计算
本文基于 FELPY 官方文档和实际应用案例编写,如需引用请注明出处。