2

次のコードを使用してデータベースからシーケンスを抽出しようとしています:

use strict;
use Bio::SearchIO; 
use Bio::DB::Fasta;


my ($file, $id, $start, $end) = ("secondround_merged_expanded.fasta","C7136661:0-107",1,10);
my $db = Bio::DB::Fasta->new($file);
my $seq = $db->seq($id, $start, $end);
print $seq,"\n";

C7136661:0-107ファイルのように、抽出しようとしているシーケンスのヘッダーは:です。

>C7047455:0-100
TATAATGCGAATATCGACATTCATTTGAACTGTTAAATCGGTAACATAAGCAGCACACCTGGGCAGATAGTAAAGGCATATGATAATAAGCTGGGGGCTA

ヘッダーをより標準的なもの ( など) に切り替えると、コードは正常に機能しますtest。私は、BioPerl が非標準の見出しを好まないと考えています。これを修正して、FASTA ファイルを再コーディングする必要がないようにする方法はありますか?

4

2 に答える 2

3

デフォルトでは、は、ヘッダー行の のBio::DB::Fasta直後にスペース以外のすべての文字を使用して、シーケンスのキーを形成します。>あなたの場合、これは のように見えます。C7047455:0-100これは、サブシーケンスの組み込みの省略形と同じです。here に記載されているように、代わりに$db->seq($id, $start, $stop)を使用できる$db->seq("$id:$start-$stop")ため、 への呼び出し$db->seq('C7136661:0-107')は を求めているように見えますが$db->seq('C7136661', 0, 107)、そのキーは存在しません。

データの内容を知る方法はありませんが、ヘッダーの最初の部分からコロンまでをキーとして使用するだけで十分な場合は、-makeidコールバックを使用してキーを変更できます。C7136661次に、シーケンスを取得するためだけに使用すると機能します。

このコードは示しています。.index動作に変化が見られる前に削除する必要があるキャッシュ ファイルが既に存在する可能性があることに注意してください。

use strict;
use warnings;

use Bio::DB::Fasta;

my ($file, $id, $start, $end) = qw(
  secondround_merged_expanded.fasta
  C7136661
  1 10
);

my $db = Bio::DB::Fasta->new($file, -makeid => \&makeid);

sub makeid {
  my ($head) = @_;
  $head =~ /^>([^:]+)/ or die qq(Invalid header "$head");
  $1;
}

my $seq = $db->seq($id, $start, $end);
print $seq, "\n";
于 2012-12-04T20:57:09.263 に答える