具有可定义度分布的合成生化反应网络。
项目描述
獾
SBbadger是一个 Python 库,用于生成符合用户定义的度分布的合成、定向反应网络。
文档
https://SBbadger.readthedocs.io
快速开始
安装
受支持的 Python 版本为 3.7、3.8 和 3.9。Python 依赖项包括 numpy、scipy、antimony、matplotlib 和 pydot。pydot 的另一个依赖项是系统安装 Graphviz 或通过 conda 安装 pydot。
可以使用 pip 安装 SBbadger:
$ pip install SBbadger
简单示例
在最简单的情况下,SBbadger 可以使用 Python 解释器中的以下命令生成一个 10 种随机网络:
>>> from SBbadger import generate
>>> generate.models()
Windows 用户请注意。目前,上述内容不适用于脚本文件中的窗口。要在脚本文件中使用 windows 上的包,您必须使用:
from SBbadger import generate
if __name__ == "__main__":
generate.models()
这将在未来的版本中修复。
在这种情况下,SBbadger 将从 4 种可能的反应类型中随机选择反应,并从 10 种反应中随机选择这些反应的反应物和产物。可能的反应类型有:
| 反应类型 | 默认概率 | 例子 |
|---|---|---|
| UNI-UNI | 0.35 | A -> B |
| BI-UNI | 0.3 | A + B -> C |
| UNI-BI | 0.3 | A -> B + C |
| BI-BI | 0.05 | A + B -> C + D |
默认反应概率是可调整的。另请注意,在一个反应中可以多次选择相同的物质,例如 A + A -> B 是一个有效的反应。反应将继续添加到网络中,直到所有 10 个物种都包括在内。下面是一个示例网络的描述和一个描述相关模型的锑字符串:
var S0, S1, S9
ext S2, S3, S4, S5, S6, S7, S8
J0: S8 -> S0; kc0*S8
J1: S6 -> S5 + S0; kc1*S6
J2: S2 + S1 -> S9; kc2*S2*S1
J3: S7 -> S1 + S5; kc3*S7
J4: S9 + S0 -> S1 + S4; kc4*S9*S0
J5: S6 -> S3; kc5*S6
kc0 = 0.10285116762815472
kc1 = 65.21087405102236
kc2 = 34.220083386257116
kc3 = 11.526991028714853
kc4 = 0.15553486234310213
kc5 = 4.977089372937806
S2 = 4.759074353180305
S3 = 1.666194306431944
S4 = 7.110932299198714
S5 = 6.803821600602985
S6 = 9.329699040726386
S7 = 7.7760175494627735
S8 = 9.74931761300573
S0 = 3.431293190721635
S1 = 5.5106455586766545
S9 = 7.631625970757748
var和ext分别表示浮动和边界物种。默认速率定律是质量作用,所有参数从对数均匀分布中随机选择,范围从 0.001 到 100。初始条件从均匀分布中随机选择,范围从 0 到 10。默认情况下,反应是不可逆的.
扩展示例
现在假设我们要创建许多模型,并具有更多定义的属性。下面的 python 脚本将做到这一点。
from SBbadger import generate
from scipy.stats import zipf
def in_dist(k):
return k ** (-2)
def out_dist(k):
return zipf.pmf(k, 3)
if __name__ == "__main__":
generate.models(
group_name="extended_example",
n_models=10,
n_species=100,
in_dist=in_dist,
out_dist=out_dist,
min_freq=1.0,
n_cpus=4
)
定义了两个分布函数,in_dist和out_dist,分别用于入边和出边分布,其中k是度数。两者都是幂律函数。SBbadger 将对这些函数进行离散化、截断和重新规范化。请注意,它in_dist是明确定义的,但out_dist它是 Scipy 函数的包装器zipf。其他参数的简短描述如下:
group_name: 附加到所有文件和将存放这些文件的目录的名称。n_models:要生产的模型数量。n_species:每个模型的节点/物种数。min_freq:每个 bin 中节点的最小预期频率。此参数与物种数量一起用于确定在何处截断分布。n_cpus:并行运行的核心数。请注意,if __name__ == "__main__":在 Windows 上使用多处理是必需的。
在上面的例子中,将生产 10 个模型,每个模型有 100 个物种;入边和出边分布都遵循幂律,但指数不同;分布将被截断,使得每个度数 bin 的最小预期节点数为 1;模型将被分成 4 组并行处理。以下是生成的分布和网络的示例。