这是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.a
和 srwlpy.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.gz
和 fftw-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>/gcc
和 CXX=<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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ce3e688b6f14b4995728cc42ebd2b6d9c93bebd83322911b50821ca13984c89c |
|
MD5 | a45a7bfcb5058eeca4848e942e8455fa |
|
BLAKE2b-256 | 71c9351e37d33d85e75ff4c010a66a1d89b6d7baec9365575e5f90c67740f38a |
srwpy-4.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4d4b2c582c40bf1c1bf33100df4de055d5ba5e89b1fd20963a1dbdc353a12290 |
|
MD5 | 7535a96e9e1f4202d3f9c35b9dd69ec1 |
|
BLAKE2b-256 | 503c3c8d587a58b3b305a2bcf9bd016480cc17a1eb4fd2afc058ab9d5e3754f4 |
srwpy-4.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2420626539d296b9cadec95e029b1f8effcc90c4aa12520e84901e4fdda0c7ae |
|
MD5 | 245bb866829e0f015bc189b2f8c7a4eb |
|
BLAKE2b-256 | 43cff7920cd2e6ba89465cd43aee8a7728832faf5b3de67aa3a411f3bee69169 |
srwpy-4.1.0-cp311-cp311-macosx_10_15_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c73377ef46d7e5f53cd4ff8649f2a08afe33d0eb1449f57bef43b6760fa1ccc9 |
|
MD5 | 5a4b1f83d381c30c4fb5c7ad93c0534b |
|
BLAKE2b-256 | 9ef0e19300ac17517c44d4c3200b3ea0c0e66a59b4921e073abeec0a6cdc9e3f |
srwpy-4.1.0-cp310-cp310-win_amd64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 48fefff9da73825e8d8e8dee691994a38a78258ce3486477a6ecf1fce01cc54b |
|
MD5 | dbcc4edabab4d5ee6b8ea5a678985158 |
|
BLAKE2b-256 | e4798ef04eb9a9d272651d5378f31acb4381ca539a4b72d45579da7215dced21 |
srwpy-4.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e5ea924e0272b0e59939029d25a744151a3bf43242fde8c344647d79482bc42a |
|
MD5 | 587d647fcc49de70473e98a53e87c17a |
|
BLAKE2b-256 | 8a675b347bff5714659058101c11a1e4d3cda5bf192daaab071e33c53e939b38 |
srwpy-4.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e7f3999d18fad49fa7050dcc86f910b1a0ecc09de92e2a36f4f20c879dc30646 |
|
MD5 | e5a71db948e4e6e0e6c745995d783c21 |
|
BLAKE2b-256 | b6699b0a9152086e9d4e4708a870731cfe4a8866c4aeb43eddd9c2b5c9b94b21 |
srwpy-4.1.0-cp310-cp310-macosx_10_15_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1474f3dca3ed57e001e6323b91c5af8278a28a34cd9ce6c5a7ea4b9b14305108 |
|
MD5 | fd1b351f173d69142c81f4920965c944 |
|
BLAKE2b-256 | ce2104dbe11341e24eadbcee0313d1bee9fa2a13bdbc5fa6991e9a6d8748a377 |
srwpy-4.1.0-cp39-cp39-win_amd64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5d22c29e7a47a062aeb105cdd77d769bb37be0b0f990886b9d08d23c33cbb152 |
|
MD5 | 0315df8ad0a75333e9b42cc09d3c08da |
|
BLAKE2b-256 | 9c8550495c0f6f4b0aa7e964617a4492b3e3cf35ae101e83906926e8a527e3f0 |
srwpy-4.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f35aa629b98f224ec8e3a429c5f178df63cb60e1616df6188cf98c5c6456190b |
|
MD5 | eff8242c8411a23557716d5fef67cdce |
|
BLAKE2b-256 | 9b17575559d3b90ee02b29e63affdcb37862b7d5d792601d89d9a674b15a01a4 |
srwpy-4.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6e653c92e85a47166ce0188cf3f898be021c3b24644c78deaaab1a1edbfb3797 |
|
MD5 | 84d6191e1a1bbaffacc6266f435232bc |
|
BLAKE2b-256 | ea86743dd030ba042de16db30d94923dd2945aed69195d4694c4bddc29931353 |
srwpy-4.1.0-cp39-cp39-macosx_10_15_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2c03684d6636a6dbefd185775638e27369d84403281d5236d97833da2b61f05e |
|
MD5 | 149335f1fbfc92ba70d16d5bee5098fd |
|
BLAKE2b-256 | 559f56103b1c356e52876048192b9d5882ce57276f615c9934afb0c91cd8ce50 |
srwpy-4.1.0-cp38-cp38-win_amd64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | de4d7f31cd1a2a85c0c7ec3e937e1fa656eab71c6983c7f36242faff7280fc69 |
|
MD5 | af6f457b753e0878e4ce206f4daf45db |
|
BLAKE2b-256 | 3544f6ae34616b586079c08cb62d329d9de03479104ec015aa9c0b431be09180 |
哈希值 用于 srwpy-4.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 97de13573a444c070d300d8ad839aa999447deb0aa030c041b5a4b94e2a6dd8f |
|
MD5 | d880b2b65a92dc7749b424346f7a88ec |
|
BLAKE2b-256 | d1c853316404975c596a846a51cba83c0f35fc7454aeab24be2ccb1a8af1b783 |
哈希值 用于 srwpy-4.1.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d131afb8f29a4e2f2a399e8bbf00c7a56898e05f899ab0d1cb28eb519575bd70 |
|
MD5 | ddd84fe0efeb6f7662481a134ef67ba2 |
|
BLAKE2b-256 | 8c913776a58f66d3a6851ab80dd3ea8da91ba91d23b3a9fa908a034e2f5179d2 |
哈希值 用于 srwpy-4.1.0-cp38-cp38-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7a05cd521618bb29b7a9f7c0e270f77dc4c913c65b8735867bd8e90be2eab387 |
|
MD5 | 5c0ac43599835f09ce6faa291004ecce |
|
BLAKE2b-256 | 0bd3955d321d663683541acccd52457f80ee129bc1b34e3f1a1fb3b4eaf0d951 |