分档序列通过GC内容读取

时间:2010-12-15 14:34:55

标签: bioinformatics sequences fasta

我想“bin”(分成单独的文件)多fasta核苷酸序列文件(例如Roche-454运行~500,000读取平均读取长度250bp)。我希望这些垃圾箱基于每次读取的GC内容。 结果输出将是8个multi-fasta文件:

< 20%GC含量

21-30%GC含量

GC含量为31-40%

41-50%GC含量

51-60%GC含量

61-70%GC含量

71-80%GC含量

> 80%GC内容

有没有人知道这样做的脚本或程序? 如果没有,有人可以建议如何根据GC内容对多个fasta文件进行排序(我可以将其拆分为相关的垃圾箱)吗?

3 个答案:

答案 0 :(得分:2)

在R / Bioconductor中,任务将是(a)加载适当的库(b)读取fasta文件(c)计算核苷酸用量和gc%(d)将数据切割成箱子和(e)输出原件数据到单独的文件中。

## load
library(ShortRead)
## input
fa = readFasta("/path/to/fasta.fasta")
## gc content. 'abc' is a matrix, [, c("G", "C")] selects two columns
abc = alphabetFrequency(sread(fa), baseOnly=TRUE)
gc = rowSums(abc[,c("G", "C")]) / rowSums(abc)
## cut gc content into bins, with breaks at seq(0, 1, .2)
bin = cut(gc, seq(0, 1, .2))
## output, [bin==lvl] selects the reads whose 'bin' value is lvl
for (lvl in levels(bin)) {
    fileName = sprintf("%s.fasta", lvl)
    writeFasta(fa[bin==lvl], file=fileName)
}

要使用R / Bioconductor,请参阅http://bioconductor.org/install。所示大小的454数据的内存要求也不算太差,这里的脚本速度相当快(例如,对于260k读取数据为7s)。

答案 1 :(得分:1)

我建议使用Python和Biopython或Perl和Bioperl来读取FASTA文件。有一个脚本可以计算Bioperl here中序列的C含量,Biopython有一个function for it。然后只需将每个序列的GC内容存储在字典或散列中,然后浏览每个序列,将它们写入文件,具体取决于GC内容的高度。

您需要更具体的帮助吗?

答案 2 :(得分:0)

如果我正确理解了这个问题,你需要类似下面的内容(Python):

def GC(seq): # determine the GC content
    s = seq.upper()
    return 100.0 * (s.count('G') + s.count('C')) / len(s)

def bin(gc): # get the number of the 'bin' for this value of GC content
    if gc < 20: return 1
    elif gc > 80: return 8
    else:
        return int(gc/10)

然后,您只需要读取文件中的条目,计算GC内容,找到正确的bin并将条目写入相应的文件。以下示例使用我们在实验室中使用的Python package实现此目的:

from pyteomics import fasta

def split_to_bin_files(multifile):
"""Reads a file and writes the entries to appropriate 'bin' files.
`multifile` must be a filename (str)"""

    for entry in fasta.read(multifile):
        fasta.write((entry,), (multifile+'_bin_'+
                    str(bin(GC(entry[1])))))

然后您只需将其称为split_to_bin_files('mybig.fasta')