0

我一直在使用模块使用 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(基于字符数,不包括标题)。

4

1 回答 1

0

我在这里看到两个问题。第一个是您没有正确格式化查询 ID,除非您在 Fasta 标头中有开始/结束位置(这很奇怪)。要按区域获取您想要的序列,只需指定特定的 ID 和坐标,即

my $seq = $db->seq('chr1', 25000, 27000);

您提到的另一个问题看起来像一个错误。如果开始/停止位置超出实际序列长度,我认为没有任何明确的检查。我刚刚对其进行了测试,该方法默默地失败了。该代码中还有许多其他格式检查,这可能是作为错误报告的一件好事。

于 2014-02-05T15:53:09.403 回答