美文网首页群体遗传学
MISA+Primer3设计SSR引物(四):perl脚本提取S

MISA+Primer3设计SSR引物(四):perl脚本提取S

作者: 学生信的大叔 | 来源:发表于2021-11-30 10:13 被阅读0次

广告时间:如果觉得这篇文章对你有用,可以看下我的资料介绍,关注下。

背景

有时会需要针对整个基因组seqs.fa设计SSR引物,但是由于p3_in.pl 脚本提取序列的特点,每个SSR位点都会将整个序列存储一次,就连基因组稍小的拟南芥都需要超大的硬盘空间(测试的时候一条染色体序列没测试完,文件实在太大了,时间也有点久)。

有推文是利用misa.pl 文件提取SSR位点左右延长150bp 的bed文件,然后将SSR位点及侧翼序列用bedtools提取出来 bed.seqs.fa。再用MISA+Primer3的标准流程对bed.seqs.fa 文件进行SSR位点搜索与引物设计。这样,大大缩减了p3_in.pl 文件大小,节省了硬盘空间。

这里我写了个perl 脚本bug,以提取SSR位点及侧翼。

碎碎念

但是这样的方式(就常用的参数100bp-300bp产物长度,100bp内SSR视为复合SSR而言),提取150bp侧翼序列,可能会在额外的50bp处提取到重复的SSR位点,并可能涉及处100bp+的产物。所以,个人不建议用这个方法来统计SSR位点与引物设计成功率的问题。只是设计引物还是没问题的,注意先e-PCR验证即可。

脚本与使用

脚本需要指定seqs.fa.msia 文件和侧翼长度,侧翼长度可以不指定,默认150 bp。结果文件是一个四列的bed文件seqs.fa.bed

perl exact_bed.pl <seqs.fa.misa> <flank length(int,default:150)>

seqs.fa.bed 第一列为原序列ID;第二列、第三列为SSR及侧翼两端start和end,且考虑到了不超过原序列的边界;第四列是seqs.fa.msia 中前两列组合作为唯一name。

实际上使用了seqs.fa.misaseqs.fa 文件,不过其中seqs.fa 在参数中不直接体现,且需要两个文件位于同文件中(还是按原脚本的习惯写的)。

打印到屏幕的内容,第二列是考虑了序列起始长度后对第一列的矫正,第四列是考虑了序列总长度后对第三列的矫正(结果文件seqs.fa.bed 是考虑了序列长度的)。

有人可能注意到了,既然使用了seqs.fa 辅助产生bed文件,那为什么不直接提取出序列呢?因为……我现在还不会写。所以,还必需配合bedtools来跑流程。

下面是perl bug:(对于一个新手来说,听说写脚本和写bug是一样的)

#!/usr/bin/perl -w
# Program name: exact_bed.pl
## Description: creates a bed format file for fasta exactraction based on seqs.fa and seqs.fa.misa
## Usage: perl exact_bed.pl <seqs.fa.misa> <flank length(int,default:150)>

if (@ARGV == 0)
  {
  open (IN,"<$0");
  while (<IN>) {if (/^\#\# (.*)/) {$message .= "$1\n"}};
  close (IN);
  die $message;
  };

# Check if help is required #

if ($ARGV[0] =~ /-help|-h/i)
  {
  open (IN,"<$0");
  while (<IN>) {if (/^\#\#\#(.*)/) {$message .= "$1\n"}};
  close (IN);
  die $message;
  };

#open seqs.fa.misa
open (IN,"<$ARGV[0]") ||die ("\nError: Couldn't open misa.pl results file (*.misa) !\n\n");
#open seqs.fa
my $filename = $ARGV[0];
$filename =~ s/\.misa//;
open (FA, "<$filename") || die ("\nError: Couldn't open source file containing original FASTA sequences !\n\n");

#$filename = basename "$ARGV[1]";
#$filename =~ s/\.misa//;
#create output file: bed file
open (OUT, ">$filename.bed")|| die("\n$filename.bed Couldn't create! \n");

undef $/;
$in = <IN>;
study $in;

$/=">";

while(<FA>){
    next unless (my ($id,$seq) = /(.*?)\n(.*)/s);
   # print $id, "\n";
    $seq =~ s/[\d\s]//g;
    chomp $seq;
    my $fa_len = length($seq)-1;  #整理获取序列长度
   # print "$id\t$fa_len\n";
    while ($in =~ /$id\t(\d+)\t\S+\t\S+\t\d+\t(\d+)\t(\d+)/g){
        my ($ssr_nr,$start,$end) = ($1,$2,$3);
        my $flank = $ARGV[1]||150;
        my $margin_left=$2-$flank-1;
       print $margin_left,"\t";
        if ($margin_left < 0){
            $margin_left = 0;
        }else{
            $margin_left=$2-$flank-1;
        };
       print $margin_left,"\t";
        my $margin_right = $3+$flank-1;
        print $margin_right,"\t";
        if ($margin_right > $fa_len){
            $margin_right = $fa_len;
        }else{
            $margin_right = $3+$flank-1;
        };
        print $margin_right,"\n";
    print OUT "$id\t$margin_left\t$margin_right\t$id"."_$ssr_nr\n";
    }
}
close(IN);
close(FA);
close(OUT);
print "DONE: SSRs bed of $filename !\n";

参考:

小麦misa+primer3设计SSR引物,并用e-PCR进行筛选 :https://www.jianshu.com/p/d9a9b0f3f09f

相关文章

网友评论

    本文标题:MISA+Primer3设计SSR引物(四):perl脚本提取S

    本文链接:https://www.haomeiwen.com/subject/rozrxrtx.html