Python 将ABI文件(sanger)中的“N”替换为“A”、“C”、“G”或“T”

Python 将ABI文件(sanger)中的“N”替换为“A”、“C”、“G”或“T”,python,parsing,bioinformatics,Python,Parsing,Bioinformatics,我的主要问题是设法用色谱图中峰值最高的碱基替换未分配的核苷酸'N'。我正试图以pythonic的方式解析ABI文件,因此我安装了abifpy模块: from abifpy import Trace chrom=Trace("10F8_POL3.ab1") chrom.data['tracepeaks'] 这样做会给我每个位置的所有最高峰值,但我不知道哪个基A、C、G或t与每个峰值匹配。有人能帮我吗 我从未使用过您提到的python库,但我曾经不得不用java编写自己的abi解析器。您必须从ab

我的主要问题是设法用色谱图中峰值最高的碱基替换未分配的核苷酸'N'。我正试图以pythonic的方式解析ABI文件,因此我安装了abifpy模块:

from abifpy import Trace
chrom=Trace("10F8_POL3.ab1")
chrom.data['tracepeaks']

这样做会给我每个位置的所有最高峰值,但我不知道哪个基A、C、G或t与每个峰值匹配。有人能帮我吗

我从未使用过您提到的python库,但我曾经不得不用java编写自己的abi解析器。您必须从abi文件中获取原始通道数据。有4个通道:一个用于A、C、G和T

警告-我不确定您的库将把这些ABI密钥标记映射到什么,因此您必须查看库的文档。我也有很长一段时间没有做任何与桑格有关的事情了,所以我可能有点生疏了

我相信通道可以是任意顺序的,因此您必须首先从名为FWO_的FILTER WHEEL order标签获取顺序

一旦获得通道顺序,就必须获得列出每个通道位置的通道数据。我认为这个标签叫做数据。这将返回许多数组。我认为ABI有很多额外的频道,除了测序机或操作员之外,没有人关心其他东西。我认为你关心的频道或9-12频道

因此,例如,如果A的通道数据首先来自FWO_uu标记,那么它将位于第9个通道或偏移量8f中,您将返回一个数组

一旦获得了A、C、G和T通道数据及其在每个时间点的位置,您就可以看到哪个通道在峰值偏移处的值最高

希望有帮助

祝你好运

更新

看看python代码,它看起来像FWO映射到baseorder,我猜通道数据是raw1、raw2、raw3和raw4

更新2以解决对评论的回答

为什么raw1和其他数组比序列长? 原始通道数据中的值是每个测量时间点的位置。如果将这些值绘制为y值,将阵列中的偏移量绘制为x值,您将看到具有峰值和谷值的波形。 peaks数组只是basecaller确定为峰值的原始数据中的x个位置。通常,1000bp的桑格读数将有1000个峰值和大约15000个原始位置

我是唯一一个试图修复桑格测序系统序列的人,这是一件很平常的事。 重新对sanger数据进行基本调用是一件常见的事情。总的来说,它比只取最高点的位置要复杂得多。有质量问题和不正确的峰,这是由于染料斑点、肩样和混合样品造成的

有几个basecaller,包括phred、kbBaseCaller,我认为它们来自ABI。还有塞莱拉的追踪器,我认为这是最好的。然而,我认为它很难建造。我四处寻找源代码,我认为这是一个好运气,让它启动并运行

我想我的观点是,这是一个已解决的问题,所以除了尝试学习格式如何工作和解决玩具问题外,最好让做信号处理的人来解决

1/为什么通道数据是具有负值的数组?2/为什么包含最高峰值的“tracepeaks”数组长度与序列长度匹配,但通道数据不匹配

位置数据中应该只有正值。每个位置应该是无符号的2字节,因此最大值为65536我猜您使用的库将它们作为有符号值返回。我在上面的1中回答了另一部分


你可以发布chrom.data['tracepeaks']的输出吗?你也可以问chrome.data['tracepeaks']输出:>>>chrom.data['tracepeaks']2,12,20,30,35,52,70,82,92,99,114,138,145,152,174,188,205,218,227,239,252,264,279,289,300,311,321,331,344,352,361,373,385,395,408,419,431,非常感谢你,多亏了你,我对图书馆的了解加深了!我确实找回了4个频道和它们的顺序。问题是:如果通道数据给出每个位置色谱图的所有峰,为什么raw1和其他数组比序列长?我的意思是序列长度应该与每个碱基每个位置的峰数相匹配,不是吗?此外,这个问题可能有点离题,但我必须问:我是唯一一个试图修复Sanger测序操作系统序列的人吗?这是一件普通的事吗?我的意思是:通过查看色谱图上的最高峰来替换“N”个未分配的碱基是正确的,或者不应该这样做,因为如果碱基不能被识别=>这意味着碱基调用失败,色谱图可能是错误的?我在序列方面是新手。你有什么想法吗:1/为什么通道数据是一个具有负值的数组?2/为什么包含最高峰值的“tracepeaks”数组长度与序列长度匹配,但c
频道数据不可用?更新答案以回答您的其他问题谢谢DKATZEL