跳转到主要内容

这是SRW for Python

项目描述

同步辐射工作坊(SRW)

SRW是一种用于计算由相对论电子在任意配置的磁场中产生的同步辐射(SR)的详细特性的物理光学计算机代码,并用于模拟辐射波前通过束线光学系统的传播。

使用频域近场方法进行SR计算,通常使用基于傅里叶光学的方法进行波前传播模拟。该代码能够模拟稳态和频率/时间依赖性条件下完全和部分相干辐射传播。具有这些特性,该代码已经在红外、紫外、软X射线和硬X射线光谱范围的大量应用中证明了其效用,例如分析新同步辐射源的光谱性能、优化用户束线、开发新的光学元件、源和束线诊断,甚至基于SR的实验的完整模拟。除了SR应用外,该代码还可以有效地用于涉及传统激光和其他源的多种模拟。提供与Python和IGOR Pro(WaveMetrics)接口的SRW版本,以及带有C API的跨平台库。

在以下写作中,假设SRW_Dev是完整SRW目录的绝对路径(例如,在从存储库下载后获得)。

I. 使用预编译的SRW库和客户端/绑定

SRW的最后一个“清洁”版本(用于IGOR Pro和Python)可以在SRW_Dev/env/release中找到,特别是

  • 可以在SRW_Dev/env/release/install中找到安装程序(压缩包的安装程序);
  • 仅适用于Windows的IGOR Pro的SRW解包文件夹为:SRW_Dev/env/release/srw_igor
    此文件夹包含ReadMe.txt文件,其中包含一般“启动”说明;IGOR Pro版本的详细文档可以在SRW_Dev/env/release/srw_igor/SRW Help/SRW Help.ifn文件中找到(在IGOR格式笔记本格式中);
  • 适用于Windows和Linux的Python的SRW解包文件夹为:SRW_Dev/env/release/srw_python;此文件夹包含ReadMe.txt文件,其中包含一般“启动”说明。

Python 和 IGOR Pro 的最新预发布版和当前工作版本 SRW 可以在以下位置找到: SRW_Dev/env/work

可以使用包含在 Python 和 IGOR Pro 版本的 SRW 中的示例来测试预编译的 SRW 库和客户端/绑定(请参见下面不同平台上的“检查示例”部分)。

II. 在 Windows 上编译和测试 SRW 库及其 Python 和 IGOR Pro 绑定

II.1. 使用 MS Visual C++ 编译 SRW 库和 Python 绑定

II.1.1

Microsoft Visual C++ 2015(或更高版本)解决方案文件(SRW.sln),其中包含 4 个项目

  • SRW 库(文件 SRWLIB.vcxproj),
  • SRW Python 客户端/绑定(文件 SRWLClientPython.vcxproj),
  • SRW IGOR Pro 客户端/绑定(文件 SRWLClientIgor.vcxproj),
  • SRW C 示例客户端(文件 SRWLClientC.vcxproj),可以在 SRW_Dev/cpp/vc 中找到。

SRWLClientPython 项目文件允许编译 srwlpy.pyd 共享库,即 Python 2.7 或/和 3.x(64 位或 32 位)的 SRW;SRWLClientIgor 允许编译 SRW.xop 共享库,即 IGOR Pro 的 SRW(仅限 32 位)。可以使用免费的 Microsoft Visual Studio Community 2015(或更高版本)。

要编译支持基于 OpenMP 的并行计算(例如,用于 XFEL 应用)的 SRW 库

  • 在 Visual C++ 配置管理器中,选择 SRWLIB 项目的“Release_omp”版本,然后在“x64”解决方案平台下重新编译 SRWLIB 和 SRWLClientPython,以生成支持基于 OpenMP 的并行计算的 64 位 Python SRW。
  • 请注意,“Release_omp”版本的 SRWLIB 项目与标准版本只有一些差异:在配置属性 -> C/C++ -> 预处理器 -> 预处理器定义中添加了“_WITH_OMP”预处理器定义,在配置属性 -> C/C++ -> 语言 -> Open MP 支持中将“Open MP 支持”选项设置为“是 (/openmp)”,并且链接使用了较旧的 FFTW 库版本(FFTW 2.5),而正常的编译/链接使用的是 FFTW 3.8。

II.2. 检查示例

II.2.1

可以使用例如“IDLE”(Python 本机 GUI)测试 Python 的 SRW 示例。为此,启动此应用程序(例如,从 Windows 开始菜单),在其中打开一个示例文件,例如 SRW_Dev\env\work\srw_python\SRWLIB_Example01.py,并从 IDLE 中运行它。

或者,可以从 Windows 命令提示符中执行示例脚本,例如在 SRW_Dev\env\work\srw_python 目录内。为了方便,在测试之前可能需要将正确的 python.exe 文件路径指定到 Windows 系统的 PATH 变量中。

II.2.2

可以从 IGOR Pro 的“SRWE”和“SRWP”菜单,“帮助”子菜单中测试 IGOR Pro 的 SRW 示例。

III. 在 Linux 上编译和测试 SRW 库及其 Python 绑定

III.1. 编译 SRW 库和 Python 绑定

这可以通过使用 Python “setuptools” 模块(请参见下面的 III.1.1 部分)或不用它(请参见 III.1.2 部分)来实现。

III.1.1. 使用 Python “setuptools” 模块编译

确保您想使用的 Python 版本的“setuptools”模块已正确安装和配置。如果这样做,编译和安装很简单

cd SRW_Dev
make all

要编译支持基于 OpenMP 的并行计算(例如,用于 XFEL 应用)的 SRW 库,请在“make all”后添加“MODE=omp”

make all MODE=omp

这将编译 libsrw.asrwlpy.so,并将 srwlpy.so 复制到 SRW_Dev/env/work/srw_python/

III.1.2. 不使用 “setuptools” 编译

III.1.2.1. 下载和编译 fftw-2.1.5 或/和 fftw-3.3.8 库,如 SRW 所需

确保文件 fftw-3.3.8.tar.gzfftw-2.1.5.tar.gz 位于 SRW_Dev/ext_lib 目录中(如果需要,可以从 FFTW 网站下载这些文件,可能是 http://www.fftw.org/download.html)。
执行以下操作来编译 fftw-3.3.8,以使用单精度数,这对于 SRW 中大多数基于 FFT 的操作是必需的

cd SRW_Dev/ext_lib
tar -zxvf fftw-3.3.8.tar.gz
cd fftw-3.3.8
./configure --enable-float --with-pic

手动(使用编辑器)将 -fPIC 选项添加到 Makefile 中的 CFLAGS

make -j8 && cp .libs/libfftw3f.a ../

执行以下操作来编译 fftw-3.3.8,以使用双精度数,这对于 SRW 中一些基于 FFT 的操作是必需的

cd SRW_Dev/ext_lib
tar -zxvf fftw-3.3.8.tar.gz
cd fftw-3.3.8
./configure --with-pic

手动(使用编辑器)将 -fPIC 选项添加到 Makefile 中的 CFLAGS

make -j8 && cp .libs/libfftw3.a ../

按照以下步骤编译 fftw-2.1.5,以便使用 SRW 中支持基于 OpenMP 的并行计算所需的单精度数

cd SRW_Dev/ext_lib
tar -zxvf fftw-2.1.5.tar.gz
cd fftw-2.1.5
./configure --enable-float --with-pic

手动(使用编辑器)将 -fPIC 选项添加到 Makefile 中的 CFLAGS

make -j8 && cp fftw/.libs/libfftw.a ../

III.1.2.2. 编译 SRW 库和 Python 绑定

cd SRW_Dev/cpp/gcc

确保已安装 Python 3.3 或更高版本(或 Python 2.7)。
SRW_Dev/cpp/gcc/Makefile 中,修改/更正 PYPATH 和 PYFLAGS 变量,即指定 Python 头文件和库文件的路径。根据 Linux 环境,可能还需要修改要使用的编译器的名称,例如:

CC  = gcc
CXX = g++
#CC  = cc
#CXX = c++

然后执行以下操作

rm libsrw.a
make all

为了以支持基于 OpenMP 的并行计算(例如用于 XFEL 应用)的模式编译 SRW 库,请在 "make all" 后添加 "MODE=omp"。

make all MODE=omp

然后将 srwlpy.so 复制到 SRW_Dev/env/work/srw_python/

cp srwlpy.so ../../env/work/srw_python/

III.2. 检查示例

确保 Python 3.x(或 2.7)的路径已添加到 PATH 变量,并将 "srw_python" 添加到 PYTHONPATH 变量中

export PATH="$PATH:<absolute path to Python 3.x>" # this is not necessary if you install python using the distro's package manager
export PYTHONPAH="$PYTHONPATH:SRW_Dev/env/work/srw_python/" #temporary solution

echo "export PYTHONPATH=$PYTHONPATH:SRW_Dev/env/work/srw_python/" >> ~/.bashrc #permanent solution for a single user

设置 PYTHONPATH 允许从任何目录导入 srwlpy 模块。示例测试最好在 srw_python 目录中进行。

cd SRW_Dev/env/work/srw_python
python SRWLIB_ExampleXX.py

IV. 在 Mac OSX 上编译和测试 SRW 库及其 Python 绑定

尝试按照 III 节(描述在 Linux 上编译和测试 SRW 的选项)中所述的步骤进行。

我们被告知,在 SRW_Dev/cpp/gcc/Makefile 中进行以下修改后,III.1.1 中描述的操作在 OSX 10.14.5 上成功编译
按照以下方式更改 CXX 变量

#CXX = c++
CXX = g++ -stdlib=libc++ -mmacosx-version-min=10.9

确保显式使用 C++ 编译器(CXX)来编译所有 *.cpp 文件,例如:

%.o: $(SH_SRC_PARSE_DIR)/%.cpp
    $(CXX) $(CFLAGS) -c $<

可能还需要将 CC 变量设置与 CXX 相同(?)

#CC = cc
CC = g++ -stdlib=libc++ -mmacosx-version-min=10.9

我们之前被告知,在 SRW_Dev/cpp/gcc/Makefile 中进行以下修改后,III.1.2.2 中描述的操作使用 Xcode 10.1 提供的 gcc/g++ 成功编译

CC  = gcc
CXX = g++
#CC  = cc
#CXX = c++
...
PYPATH=/Library/Frameworks/Python.framework/Versions/3.6
PYFLAGS=-I$(PYPATH)/include/python3.6m -I$(PYPATH)/include/python3.6m -L$(PYPATH)/lib/python3.6/config-3.6m-darwin -lpython3.6m -ldl

例如,可以通过从命令行执行以下操作来获取正确的路径和标志

python3-config --includes --ldflags

并删除 "-framework" 选项

使用 Xcode 的早期版本,以下操作已报告成功,包括安装 "macports" 和获取整个 gcc 工具链

sudo port install gcc47

修改 SRW_Dev/cpp/gcc/Makefile,使 CC=<path to macports>/gccCXX=<path to macports>/g++,然后按照 III.1.2.2 中所述进行编译。

V. 在 Windows 和 Linux(通过 CMake/Pip)上编译和测试 SRW 库及其 Python 绑定

在 Visual Studio 开发者命令行/Linux 终端中运行以下操作

cmake -B build
cmake --build build -j

可以通过在 Visual Studio 开发者命令行/Linux 终端中运行以下操作来获取包的 pip 可安装版本

cd env/python
pip install -e .

VI. SRW 的 GPU 加速

SRW 通过 CUDA 支持对某些例程的 GPU 加速。编译带有 GPU 加速的 SRW 需要 CUDA HPC SDK 或 CUDA Toolkit。要在 Linux 上编译,请在 SRW 基目录中运行以下命令:

MODE=cuda make

要在 Windows 上编译,请确保已安装 CUDA Toolkit v12.4,在 Visual Studio 中打开 SRW 解决方案,将 SRWLIB 项目的目标设置为 _cuda 变体,并更新库和包含路径。您可能还需要将以下 DLL 从 HPC SDK 或 CUDA Toolkit 安装复制到 env/python/srwpy 目录中,以解决 "DLL load failed while importing srwlpy" 错误

  • cufft64_11.dll

SRW 项目作者和贡献者

O. Chubar(ESRF - SOLEIL - BNL)
P. Elleaume(ESRF)
J. Chavanne(ESRF)
R. Celestre(ESRF)
P. Dumas(SOLEIL)
O. Marcouille(SOLEIL)
L. Samoylova(E-XFEL)
A. Buzmakov(E-XFEL)
G. Geloni(E-XFEL)
I. Agapov(E-XFEL)
J. Sutter(DIAMOND)
D. Laundy(DIAMOND)
A. He(BNL)
R. Coles(BNL)
R. Li(BNL)
M. Rakitin(BNL)
H. Goel(SBU - BNL)
N. Canestrari(ESRF - BNL)
A. Suvorov(BNL)
R. Reininger(ANL)
X. Shi(ANL)
R. Lindberg(ANL)
L. Rebuffi(ELETTRA - ANL)
D. Bruhwiler(RadiaSoft LLC)
R. Nagler(RadiaSoft LLC)
P. Moeller(RadiaSoft LLC)
纳什 (RadiaSoft LLC)

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

此版本没有提供源代码分发文件。请参阅生成分发存档教程

构建分发

srwpy-4.1.0-cp311-cp311-win_amd64.whl (37.1 MB 查看哈希值)

上传时间 CPython 3.11 Windows x86-64

srwpy-4.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.8 MB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ x86-64

srwpy-4.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (36.6 MB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ i686

srwpy-4.1.0-cp311-cp311-macosx_10_15_x86_64.whl (36.4 MB 查看哈希值)

上传时间 CPython 3.11 macOS 10.15+ x86-64

srwpy-4.1.0-cp310-cp310-win_amd64.whl (37.1 MB 查看哈希值)

上传时间 CPython 3.10 Windows x86-64

srwpy-4.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.8 MB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ x86-64

srwpy-4.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (36.6 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ i686

srwpy-4.1.0-cp310-cp310-macosx_10_15_x86_64.whl (36.4 MB 查看哈希值)

上传于 CPython 3.10 macOS 10.15+ x86-64

srwpy-4.1.0-cp39-cp39-win_amd64.whl (37.1 MB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

srwpy-4.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.8 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

srwpy-4.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (36.6 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ i686

srwpy-4.1.0-cp39-cp39-macosx_10_15_x86_64.whl (36.4 MB 查看哈希值)

上传于 CPython 3.9 macOS 10.15+ x86-64

srwpy-4.1.0-cp38-cp38-win_amd64.whl (37.1 MB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

srwpy-4.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.8 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

srwpy-4.1.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (36.6 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ i686

srwpy-4.1.0-cp38-cp38-macosx_10_15_x86_64.whl (36.4 MB 查看哈希值)

上传于 CPython 3.8 macOS 10.15+ x86-64

支持者