2. Bio::DB::Fasta
读取各类格式的序列的模块。
3. Bio::SearchIO
读取各类blast结果的模块。
4. Bio::Search::Tiling::MapTiling
重叠blast结果中,同一个subject 序列的多个HSP的模块。
实例
1. Parallel::ForkManager
my $pm = new Parallel::ForkManager(4); #建立object,选择需要的thread 数量,此处为4个
...
while(<FILE>){
$pm->start and next; #在循环中开始产生threads
....
$pm->finish; #threads结束
}
$pm->wait_all_children;#循环所有threads结束后开始后续步骤
Tips:
1.
Thread数量为0时为调试模式,相当于没有此模块,便于调试程序。
2.
因为多线程返回结果不同时,循环内部如果有类似打印信息的命令,其打印顺序会混乱.
2. Bio::DB::Fasta
#建立一个序列的database,再把序列提到一个hash里
my $db= Bio::DB::Fasta->new($seq_file)->get_PrimarySeq_stream;
my %seq;
while( my $seq = $db->next_seq ) {
my $data=$seq->seq($seq);
$data =~ s/\n//g;
my $id=$seq->id;
$seq{$id}=$data;
}
3. Bio::SearchIO
my $blio = Bio::SearchIO->new( -format => 'blast',
-file => $file _path);#有多种格式可以选择,blast 通吃m0, m8等格式
while(my $result = $blio->next_result){
my $query_name=$result->query_name;#query 序列id
my @hits=$result->hits;#所有hit,per subject gene
...
}
4. Bio::Search::Tiling::MapTiling
# $result为例子3中的Bio::SearchIO的object
foreach my $hit ($result->hits){
my $tiling = Bio::Search::Tiling::MapTiling->new($hit);#为每一个hit建立object
my $ident = $tiling->identities('query','exact');#用exact方法计算per gene的identity,共有est, exact..等等3个方法
...
}
Tips:
1.
exact方法最耗时,同时是最精确的. est次之,那个fast的方法,结果相差甚远.
2.
exact和est方法需要“比对图例”,m0格式。而默认blastall会给出最多500个“tab分隔结果”,250个比对图例,需要调整-b和-v两个参数使二者一致。
tab分隔结果:
Score E
Sequences producing significant alignments: (bits) Value
Thhalv10000734m|PACid:20179467 2474 0.0
Thhalv10000744m|PACid:20202590 1316 0.0
比对图例:
>Thhalv10000734m|PACid:20179467
Length = 1358
Score = 2474 bits (6411), Expect = 0.0, Method: Compositional matrix adjust.
Identities = 1210/1342 (90%), Positives = 1210/1342 (90%)
Query: 1 MASTPQFLLDDQTDEDFFDKLVDDXXXXXXXXXXXXXKELKFDDGSDSDDAKAFANXXXX 60
MASTPQFLLDDQTDEDFFDKLVDD KELKFDDGSDSDDAKAFAN
Sbjct: 1 MASTPQFLLDDQTDEDFFDKLVDDSFSPSEAHASSSAKELKFDDGSDSDDAKAFANLSLV 60
...