6 个版本 (重大更改)
0.4.0 | 2023 年 4 月 6 日 |
---|---|
0.3.0 | 2023 年 3 月 19 日 |
0.2.0 | 2023 年 3 月 9 日 |
0.1.2 | 2023 年 3 月 7 日 |
0.0.0 | 2023 年 2 月 28 日 |
#311 in 生物学
在 simpleaf 中使用
40KB
543 行
seq_geom_xform
此 crate 包含库和程序,以帮助处理具有不同“片段几何形状”的测序库。此 crate 正在积极开发中,因此 欢迎提出建议和反馈。虽然我们旨在使此库和工具尽可能通用,但开发是由我们支持单细胞测序数据中最常见的几何形状的主要用例驱动的。
此 crate 的目标是消耗测序库和一个 序列片段几何形状描述规范,然后根据该描述解析库。具体来说,此工具在拥有“复杂”几何形状(即某些序列片段的位置或长度(UMI 或细胞条形码)不固定的几何形状)并且需要将库转换为编码等效信息的“简单”几何形状(即所有序列片段都在固定且已知的位置且长度精确已知的几何形状)时非常有用。
在这个领域(以及相关领域)已经进行了大量工作,并且还在继续进行。例如,fgbio工具中引入的ReadStructures
定义了一种类似但不同的语法,用于通过段来传达读段的结构。随着测序协议的数量和复杂性的增加,以及序列以越来越复杂的方式用于编码技术信息,开发了诸如UMI tools
之类的工具,其中一部分功能是提取测序读数中的复杂条形码和UMI信息。相关的工具是umis
,它是随着单细胞测序的流行和不同技术的发展而开发的,旨在能够从读数本身提取技术信息,并将其放置在易于解析的格式中,如读数标题或注释。类似(但通常更有限)的功能也被直接集成到几个用于执行单细胞预处理的工具中,如alevin
(和alevin-fry
),kallisto|bustools
,STARsolo
(实际上实现了处理“简单”和更“复杂”几何形状的能力),zUMIs
和UniverSC
。对于需要处理某些段的可选或条件处理的更复杂协议,生成一次性脚本(如在splitp
和启发它的perl脚本SPLITseq
中所做的那样)并不罕见。当然,人们希望统一和简化这些描述和任务中的可统一和简化的部分,并泛化可能需要泛化的部分。这种愿望导致了如fuzzysplit
之类的工具——一个用于描述、解析和从测序读数中提取通用模式的工具——以及当前工具(seq_geom_xform
)和最近的工作splitcode
。
上面的描述并不是对解决该问题的所有方法或工具的全面概述,而是要传达有很多工作,一些专门针对该特定问题,而另一些则间接地解决它,这些工作已经进行了很长时间。然而,如果您认为有具体的相关工作可以补充上述描述或增强对该问题研究历史的理解,请与我们联系。
基本用法
Transform/normalize complex single-cell fragment geometries into simple geometries.
Usage: seq_xformer [OPTIONS] --geom <GEOM> --out1 <OUT1> --out2 <OUT2>
Options:
-g, --geom <GEOM> Expected input read geometry specification
-1, --read1 <READ1> read 1 files, comma delimited
-2, --read2 <READ2> read 2 files, comma delimited
-o, --out1 <OUT1> where output r1 should be written (currently uncompressed)
-w, --out2 <OUT2> where output r2 should be written (currently uncompressed)
-h, --help Print help
-V, --version Print version
seq_xformer
程序接受一个 序列片段几何描述规范 和一对输入库(即一个或多个配对端文件)作为输入。然后,它将转换后的序列写入指定的输出文件 --out1
和 --out2
。这些可以是磁盘上的常规文件,或者,如果您愿意,它们可以是您为某些接收程序读取而设置的 fifos
。seq_xformer
工具以流式处理方式工作,因此将读取对,转换并直接写入输出。
规范化
在 seq_xformer
的上下文中,复杂几何形状的规范化包括将可变长度段转换为固定长度段,确定可变位置段的位置和内容(通常由锚序列确定),并输出一个转换后的序列,其中每个序列段都位于一个固定且已知的位置,并且具有单个、固定的长度。此外,非功能序列组件(例如,锚序列或其他填充)将被删除。
可变长度段的转换
如果输入库包含可变长度段(例如,具有不同最小和最大可能长度的段),则 seq_xformer
有一个特定的策略将这些转换为固定长度段。具体来说,这是通过填充可变长度段,以确保不同长度的填充段不会发生冲突来完成的。例如,假设我们有一个构成细胞条形码一部分的段,并且该段长度在 8 到 10 之间。也就是说,当我们看到这个段时,它的长度总是至少 8,永远不会超过 10。
在这种情况下,seq_xformer
将输入中的可变长度段转换为输出中的固定长度段,长度为 11(最大长度 + 1)。这是通过以下填充策略完成的。如果观察到的输入段是最大长度(此处为 10),则在将其写入输出之前,将其附加一个 A
。如果观察到的段长度为 9,则附加 AC
。如果观察到的段长度为 8,则附加 AAG
。在这里,您可以看到,由于这些段都使用不同长度的核苷酸字符串进行填充,它们最终在输出中都具有固定的长度(在本例中为 11)。此外,由于观察到的不同长度的输入段在最后一个字符中具有不同的填充序列,因此具有不同初始长度的段在结构上不能发生冲突。目前,seq_xformer
支持长度最多变化 4 个碱基的段。一般策略更具可扩展性(即如果输出长度是最大输入长度 + 2,那么可变长度窗口可以加倍等)。然而,此长度限制仅对“每件”执行强制。因此,例如,如果细胞条形码被拆分为两个单独的段,那么每个段可以有长度变化最多 4 个核苷酸。
依赖关系
~12–22MB
~316K SLoC