Skip to main content

Cython Based Fast FES Calculation Toolkit.

Project description

CyFES:GPU加速高性能数据透视工具

Hex.pm Hex.pm Hex.pm Hex.pm Hex.pm

介绍

这是一个使用Cython+CUDA+Python编写的高性能FES计算软件,可以用于加速数据透视的计算:

$$ E(x)=-kT\log\left(\frac{\sum_{j=1}^Ne^{\frac{V_j}{kT}}e^{-\frac{(x-n_j)^2}{2}}}{N\Pi_i\sqrt{2\pi}\sigma_i}\right) $$

安装

pip安装

本项目可以直接使用pip进行安装:

$ python3 -m pip install cyfes --user --upgrade -i https://pypi.org/simple

源码安装

首先将本仓库clone到本地:

$ git clone https://gitee.com/dechin/cy-fes.git && cd cy-fes/

然后直接运行setup.py进行安装:

$ python3 -m pip install .

安装测试

在本仓库的test路径下存放了一个测试用例,用于测试cyfes是否安装成功。用户可以直接简单的运行:

$ python3 tests/test_path_fes.py 
[0.00892185 0.         0.09578881 0.01997518]
[0.06397188 0.         0.09973657 0.04956698]
[0.04098002 0.10183226 0.03498954 0.        ]

若输出为多个数组,则表示安装成功。也可以使用单元测试运行,但是这需要在本地先安装pytest

$ python3 -m pip install pytest

然后直接在仓库的根目录下运行:

$ py.test
=================================== test session starts ====================================
platform linux -- Python 3.7.5, pytest-7.4.4, pluggy-1.2.0
rootdir: /home/cy-fes
collected 3 items                                                                          

tests/test_path_fes.py ...                                                           [100%]

==================================== 3 passed in 5.39s =====================================

没有报错,则表示安装成功。

使用方法

在安装成功后,可以直接在Python脚本中调用:

import numpy as np
from cyfes import PathFES
np.random.seed(0)

def test_path_fes():
    atoms = 4
    cvs = 10000
    crd = np.random.random((atoms, 3))
    cv = np.random.random((cvs, 3))
    bw = np.random.random(3)
    bias = np.random.random(cvs)-1

    fes = np.asarray(PathFES(crd, cv, bw, bias))
    print (fes)

if __name__ == '__main__':
    test_path_fes()

还可以使用命令行模式:

$ python3 -m cyfes --help
usage: __main__.py [-h] [-i I] [-ic IC] [-ib IB] [-s S] [-e E] [-g G] [-o O]
                   [-f32 F32] [-sigma SIGMA]

optional arguments:
  -h, --help    show this help message and exit
  -i I          Set the input record file path.
  -ic IC        Set the cv index of input record file. Default: 0,1,2
  -ib IB        Set the bias index of input record file. Default: 3
  -s S          CV length. Default: None
  -e E          Edge length. Default: 1.0
  -g G          Grid numbers. Default: 10,10,10
  -o O          Set the output FES file path.
  -f32 F32      Use float32. Default: false
  -sigma SIGMA  Sigma value when calculating FES. Default: 0.3

假如我们有一个三维的CV,那么最简单的运行方式为:

$ python3 -m cyfes -i /home/Data/xyz_bias.txt -o ./work_dir/z.cub

那么最后产生的文件内容为:

$ head -n 10 work_dir/z.cub
Generated by CyFES
Total	1000	grids
1	21.6622	19.8498	42.3652
10	6.40465	0	0
10	0	7.02147	0
10	0	0	6.33118
1	1.000000	53.6854	54.9571	74.0211
450	450	450	450	450	450	
450	450	450	450	450	450	
450	450	70.0855	70.848	450	450	

该cube格式的文件可以在支持的软件(如VMD)中进行可视化操作。

已知问题

  1. 使用numpy==1.22.2的版本中会出现ImportError: numpy.core.multiarray failed to import问题。解决方案:升级numpy版本:python3 -m pip install numpy --upgrade
  2. 执行python3 -m cyfes --help报错ModuleNotFoundError: No module named 'cyfes.wrapper',这是因为执行命令的目录下存在名为cyfes的文件夹,需要切换执行命令的位置。
  3. 使用cyfes出现Segmentation fault段错误问题,是因为找不到编译好的动态链接库文件,大概率是系统环境下权限不足,没有site路径的权限,可以使用如下脚本进行检查:
# check_dynamics.py
import os
import site
from pathlib import Path

site_path = Path(site.getsitepackages()[0])
site_file_path = site_path.parent.parent.parent / 'cyfes' / 'libcufes.so'
site_dynamics_path = str(site_file_path)

user_site_path = Path(site.USER_SITE)
user_file_path = user_site_path.parent.parent.parent / 'cyfes' / 'libcufes.so'
user_dynamics_path = str(user_file_path)

if not os.path.exists(site_dynamics_path) and not os.path.exists(user_dynamics_path):
    print ('Check dynamics complete, no libcufes.so file founded!')
else:
    print ('Installation of CyFES success!')

使用python3运行该脚本,即可判断动态链接库是否被正确安装。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

CyFES-2.6.tar.gz (346.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

CyFES-2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

CyFES-2.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

CyFES-2.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

CyFES-2.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

File details

Details for the file CyFES-2.6.tar.gz.

File metadata

  • Download URL: CyFES-2.6.tar.gz
  • Upload date:
  • Size: 346.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.5

File hashes

Hashes for CyFES-2.6.tar.gz
Algorithm Hash digest
SHA256 fef0e1c9d5752f5bea961a1f4f685b4c75d9cfee4f3aeb15d456bd7a7a90bb7c
MD5 61499ae8c89c5c6baae0c70a27357ad2
BLAKE2b-256 79016636fcfef2cf51c44aaa463b299646bbe9ef2532418c0c8fa0086bd7c3b0

See more details on using hashes here.

File details

Details for the file CyFES-2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for CyFES-2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1f33155bcce36fa3f6f2130d6847eb5c5e2a9ee7852b18ace5924359774cbe5f
MD5 fa35a0ca6260894b6ce49af82db5466b
BLAKE2b-256 d74704bae514dafcf52bae966342027d0c329b5b6d2a171c15930a321cbff145

See more details on using hashes here.

File details

Details for the file CyFES-2.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for CyFES-2.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 894aa0f4d2220dc9a97c7dd39ecbba0e084bf4cd1d88a7b66e46d56f57cec5cd
MD5 4e6b6b95ca68c040a851711ee90e3cfe
BLAKE2b-256 a00a73dcd89140e2a5cf2add1ba61c5630e3dfc1b5a3b85c92fe93b011f1979d

See more details on using hashes here.

File details

Details for the file CyFES-2.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for CyFES-2.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7c415953d1145360bf0fe128154a3f666fef3f073f2e3750533ae8a1cce666e8
MD5 ace1d95e5375453d2cd2cb68ec359b76
BLAKE2b-256 66fb9768ccaadc0b74816ca681b47bb8b78476096cd482ad99f252c098ab8984

See more details on using hashes here.

File details

Details for the file CyFES-2.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for CyFES-2.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5631af0e5907ce4ed3dd814293c88f972fda3b68ab514d8f4834273945d14482
MD5 b1a9a353309268f4c56fef26bc9ab433
BLAKE2b-256 e0c8c49178b1e48d0fd30b7a7b3c4a67e91fa36946da561f00a1fdd0d66e935b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page