私は転写表現を計算したいので、bamファイルのすべての読み込みの数を取得する必要があります。私の現在の手順は、全体のトランスクリプトを行って、Bio :: DB :: Samを使ってそれにマップされた読み込みを取得することです。結果は、read_nameをキー(10文字)として、number_of_mappingsを値(整数)としてハッシュに格納されます。Bio :: DB :: Sam - bamファイルのすべての読み込みのマッピング数を取得
use Bio::DB:Sam;
use strict;
my %global_read_occurrences;
sub getGlobalReadOccurrences {
my ($ids, $bam_file) = @_;
$sam = Bio::DB::Sam -> new (-bam => $bam_file);
foreach my $id (@{$ids}){
my $alignments = $sam -> get_features_by_location(-seq_id => $transcript_id, -iterator => 1);
while (my $alignment = $alignments -> next_seq){
my $read_name = $alignment -> query -> name;
if (exists($global_read_occurrences{$read_name})){
$global_read_occurrences{$read_name}++;
}
else {
$global_read_occurrences{$read_name} = 1;
}
}
}
}
私の質問に: は、私が直接読み取りあたりのグローバルマッピングの数を取得することができますし、どこに行く必要はありません、他の可能性があります。ここ
は、私が使用していたコードですすべての転写物の上に?私はBio :: DB :: Samに$ sam - > getNumberOfMappings($ read_name)のようなサブを見つけることができませんでした。
マップされた読み込み数が5,000万を超えるバムファイルを使用しているため、ハッシュに膨大なメモリリソース(時には約40 GB)が必要になることがあります。これは実際に可能なのでしょうか?そして、より少ないmemでデータを格納する他の可能性はありますか?
ありがとうございます!