hmmsearch寻找目标序列以及去除假阳性步骤

在以往通用的hmmsearch中,经过一轮hmmsearch(round1)和hmmbuild之后再进行hmmsearch(round2),这样产生的结果round2比round1数量多了一倍,而且假阳性居多,并且e值最显著的序列也有可能是假阳性的错误序列(intreproscan可检查),因此在进行hmmsearch的时候,需要严格的过滤,尤其是在round2过程中,但是考虑到e值最显著的序列也有可能是假阳性结果,那么round2再怎么过滤也无济于事,只能说明是query出了问题。所以关键步骤在于round2的时候使用的query,既然常规操作产生了假阳性,那么在round2的时候就应该舍弃掉冗余序列进行hmmsearch,接下来按照此思路进行实践,看看最后结果如何:

通用的hmmsearch流程代码(翻车代码,作为参考):

hmmsearch --tblout $i.pk --cut_tc PF00~.hmm.gz $i.pep.fa > $i

grep -v "#" $i.pk | cut -d " " -f1 > $i.ID.txt

perl extract_seq_by_ID.cgi $i.ID.txt $i.pep.fa > $i.ugt.fa

clustalw2 -INFILE=line.fa -TYPE=PROTEIN -OUTFILE=align.aln

python covert.py

hmmbuild --amino new.hmm align.sto

hmmsearch --tblout $i.e.pk -E 0.01 new.hmm $i.pep.fa > $i

grep -v "#" $i.e.pk | cut -d " " -f1 > $i.e.ID.txt

perl extract_seq_by_ID.cgi $i.e.ID.txt $i.pep.fa > $i.e.fa

产生的结果$i.e.fa文件,将序列随机挑选去interproscan验证,发现假阳性居多,因此检测版本重点关注在构建hmm文件的query序列上,原版本将round1的整个序列进行构建,验证版本使用domina的序列,也就是round1结果的部分序列,最后查看结果,并验证假阳性。

修改过后的代码(OK版本):

hmmsearch --domtblout $i_round1_hmm.out --cut_tc 03hmmFile/PF00~.hmm $i.pep.fa > $i_round1

###主要区别在这各部分,将domina提出,而不是整个序列用于下游分析
grep -v '#' $i_round1_hmm.out | awk 'BEGIN{OFS="\t"} $7 < 1e-10 {print $1,$18,$19}' | sort | uniq > $i_domin.bed

seqtk subseq $i.pep.fa $i_domin.bed > $i_domin.fa
###变动部分结束,后面流程一样

cat domin1.fa domin2.fa domin3.fa > combine_domain.fa
###如果有多个数据的话可以合并domina

clustalw2 -INFILE=$i_domain.fa -TYPE=PROTEIN -OUTFILE=domain_align.aln

hmmbuild --amino domain_align.hmm domain_align.aln

hmmsearch --domtblout $i_round2_hmm.out -E 0.01 domain_align.hmm $i.pep.fa > $i_round2

最后拿到的结果文件中可以将目标$i_round2_hmm.out中的第一列target_name拿去与已知数据库或者interproscan或者NCBI进行验证,看是否是目标基因。
————————————————————————————
代码只展示关键步骤,不做流程化处理,搬运时注意替换路径、文件名等~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容