我一直使用模块use Bio::DB::Fasta来访问fasta文件(文档位置:https://metacpan.org/pod/Bio::DB::Fasta#OBJECT-METHODS)。我发现这比使用Samtools从fasta文件中提取位置要快得多。但是,我想知道如果查询包含的位置超过了fasta的最大长度,会发生什么。
今天,在一个查询中,我尝试访问fasta中的一个位置,它超出了fasta中的最大位置。但是,在这种情况下,该方法没有给出错误。我的fasta文件包含0/1个基数,返回的输出是"1“。我想知道这是不是一个错误,或者实际上它给出了一个有效的输出,但是错误的位置。我尝试查看文档,但找不到有关错误代码的任何信息。
我的代码如下:
use strict;
use warnings;
use Bio::DB::Fasta;
my $maskFile = "1KG_maskfile.fa";
my $db = Bio::DB::Fasta->new($maskFile);
my $chrom = "chr1";
my $start = 300240548;
my $end = 300240548;
my $query = "$chrom:$start-$end";
my $seq = $db->seq($query, $start, $end); # also tried $seq = $db->seq($query);
print $seq, "\n";注:在1KG_maskfile.fa中,最大位置为249224750 (按字符数计算,不包括header)。
发布于 2014-02-05 23:53:09
我看到here.The有两个问题,第一个问题是你没有正确地格式化查询ID,除非你在Fasta头中有开始/结束的位置(这将是奇怪的)。要按区域获取您想要的序列,只需指定特定的ID和坐标,即
my $seq = $db->seq('chr1', 25000, 27000);你提到的另一个问题看起来像是一个bug。我不认为有任何明确的检查,如果开始/停止位置超出实际序列长度。我刚刚测试了它,这个方法无声无息地失败了。在该代码中有许多其他格式检查,这可能是一件好事,报告为错误。
https://stackoverflow.com/questions/21565943
复制相似问题