我想计算转录表达式,因此我需要获取 bam 文件中所有读取的映射数量。我目前的程序是使用 Bio::DB::Sam 获取整体转录本并获取映射到其上的读数。结果存储在以 read_name 作为键(10 个字母)和 number_of_mappings 作为值(整数)的哈希中。
这是我正在使用的代码:
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);
我正在使用具有超过 5000 万个映射读取的 bam 文件,因此哈希将需要大量内存资源(有时大约 40 GB)这实际上可能还是来自其他地方?还有其他方法可以用更少的内存来存储数据吗?
非常感谢!