1 个不稳定版本

0.1.0 2023年7月31日

#279生物学

MPL-2.0 OR GPL-3.0-only

215KB
3.5K SLoC

readfish-tools

readfish 运行的输出分析用的 Python/rust 包装器。可以与 readfish summarise 一起使用。总体目标是分析 PAF、BAM 或一系列 FASTQ 文件。此工具接受 readfish TOML 文件,PAF 文件的测序摘要输出

目前只能使用 readfish_tools.demultiplex_paf 函数或 ReadfishSummary 类来分析 PAF 文件。下面将分别描述这两种用法。

文档

要构建 rust 文档并查看它 -

cargo doc --no-deps --document-private-items --open

Python 文档在规划中。

安装/构建

它应该在 X64 或 Arm/arch64 上编译。

:::warning ⚡ 注意,如果使用测试依赖项安装(在 conda env yaml 中是默认的),将安装 mappy_rs,它目前与 Arm/aarch64 不兼容。 ::

git clone https://github.com/Adoni5/readfish-tools
cd readfish-tools
# conda (HAS test dependencies)
mamba env install -f readfish_tools_test.yml
# or via pip, without test dependencies
pip install -e .

使用方法

可以作为 Summary 类导入,该类可以进行处理,也可以作为一个一次性函数导入,该函数消耗给定文件中的所有记录。每种方法都有不同的限制。

Summary 类

from readfish_tools import ReadfishSummary

rfs = ReadfishSummary()
rfs.with_toml_conf(<TOML_FILE>)
rfs.parse_paf_from_iter(<iterable of tuple of (pafline, (read_id, channel number, Optional[barcode name]))>)
rfs.print_summary()

首先需要初始化该类。该类有设置配置 TOML 文件的方法。还有一个设置测序摘要文件路径的方法,但目前尚未实现。

因此,目前成功使用该类的唯一方法是确保提供的迭代器提供包含元数据的额外元组,作为元组的第二个元素,PAF 记录作为第一个元素。

例如,一个有效的元组迭代器可能如下所示

iter([("read123  100 0   100 +   contig123   300 0   300 200 200 50  ch=1", ("read123", 1, None))])
# or if barcoded
iter([("read123  100 0   100 +   contig123   300 0   300 200 200 50  ch=1", ("read123", 1, "barcode01"))])

可以多次调用 parse_paf_from_iter 方法,解析多个文件,或分块解析单个文件。还可以多次调用 print_summary 方法,打印的摘要将代表在调用时解析的数据。

print_summary 将输出到 stdout,并使用 prettytable.rs 包创建的表格打印摘要。

在路线图中有一个函数可以返回可操作的 ConditionSummaryContigSumary 类,这些类可以用 Python 进行操作。

一次性函数

from readfish_tools import summarise_paf
summarise_paf(<TOML_PATH>, <PAF_FILE_PATH>, <SEQUENCING_SUMMARY_PATH>)
# Summarised table
#+---------------------------+-------------+----------------+--------------+-------------+------------+-----------+-----------+-----------+------------+
#| Condition                 | Total reads | # Off-target   | # On-target  | Total Yield | Off Target | On Target | Mean read | On target | Off target |
#|                           |             | reads          | reads        |             |  Yield     |  yield    |  length   | Mean read | Mean read  |
#|                           |             |                |              |             |            |           |           |  length   |  length    |
#+---------------------------+-------------+----------------+--------------+-------------+------------+-----------+-----------+-----------+------------+
#| barcode05_NA12878_tst-170 | 4,236       | 4,210 (99.39%) | 26 (0.61%)   | 3.90 Mb     | 3.79 Mb    | 111.62 Kb | 969 b     | 4.29 Kb   | 885 b      |
#+---------------------------+-------------+----------------+--------------+-------------+------------+-----------+-----------+-----------+------------+
#+----------------+---------------+-------------+-----------+-------------+-----------+--------------+-----------+-----------+------------+
#| Condition Name | barcode05_NA12878_tst-170   |           |             |           |              |           |           |            |
#+----------------+---------------+-------------+-----------+-------------+-----------+--------------+-----------+-----------+------------+
#| Contig         | Contig Length | Read count  | Yield     | Mean        | On Target | Off          | Mean read | On target | Off target |
#|                |               |             |           | Read Length |  Reads    | Target Reads |  length   | Mean read | Mean read  |
#|                |               |             |           |             |           |              |           |  length   |  length    |
#+----------------+---------------+-------------+-----------+-------------+-----------+--------------+-----------+-----------+------------+
#| chr1           | 248,956,422   | 352         | 335.21 Kb | 944 b       | 0         | 352          | 944 b     | 0 b       | 944 b      |
#+----------------+---------------+-------------+-----------+-------------+-----------+--------------+-----------+-----------+------------+
#...

summarise_paf 函数接受 3 个参数,分别是 toml_filepaf_file,以及可选的 sequencing_summary,它们分别对应文件路径。目前,如果我们没有在 PAF 标签中找到针对通道(ch)和可选的条形码(ba)的 自定义 标签,则需要一个测序总结文件。

限制

目前,如果提供了测序总结文件,则填充 100,000 行的记录缓冲区。如果正在分析的 PAF 记录未在此缓冲区中找到,则缓冲区会沿着文件滚动,当读取新行时删除最旧的行。因此,如果正在分析的 PAF 文件不是按照读取时的顺序(有 100,000 个读取的余地)排序,则分析将无法正常工作,并且会跳过一些读取。这很可能是在条形码运行时出现的问题。

测试

要运行 Rust 集成、单元和文档测试

cargo test

Python 测试

pip install -e .[tests]
pytest -sv

路线图

V0.0.2 #2

更精细的总结打印。

  • 打印输出更多的字段。
  • 给定条件的比较。
  • 更好地组织统计数据。
  • 输出 CSV 文件。
  • 没有统计数据选项。
  • 接受 PAf 记录的迭代器,而不是整个文件。
  • Python 文档

变更日志

V0.0.1 - 从 PAF 记录的自定义标签(ba, ch)或从测序总结文件中获取,打印出基本的统计数据。

依赖关系

~14–24MB
~307K SLoC