美文网首页群体遗传学
MISA+Primer3设计SSR引物(三):批量化运行的可接续

MISA+Primer3设计SSR引物(三):批量化运行的可接续

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

    原计划本次内容是按自己思路修改的msia脚本写一个shell脚本,但是看我推文的大部分都是搜索过来的,看到这篇推文大部分还是打算学这个流程的。所以,本次流程的脚本还是在原misa脚本基础上书写。以我改的msia脚本为基础的shell脚本放在最后一部分,不做介绍。

    另外,我不建议用我前面的教程去做科研任务,学习下脚本应该就可以了。

    另外,我不建议用我前面的教程去做科研任务,学习下脚本应该就可以了。

    另外,我不建议用我前面的教程去做科研任务,学习下脚本应该就可以了。

    本教程不直接提供脚本,不过你看看参考部分,可能会有惊喜!

    本教程shell脚本分为几个部分

    用到的知识点;基础msia流程;可接续的shell脚本;以我改的misa脚本教程为基础的shell脚本;致谢;参考

    知识点介绍

    知识点一:
    sh -c "字符串":在脚本里重新调用一个shell,来解析被当成字符串的命令。

    知识点二:

    if 语句中

    -a 表示逻辑 "与";-o 表示逻辑 "或"; ! 表示逻辑 "非"; 三种逻辑顺序级别由高到底:! > -a > -o

    -f 表示文件存在;-d 表示文件夹存在;

    知识点三:

    子函数书写形式之一:

    function misa_check(){
      command
    }
    #其内输入参数可用$1,$2…等表示
    

    知识点四:

    流程的可接续写法:

    • 参考了我之前的推文“Trinotate 半自动快速安装与部署”提到的Build_Trinotate_Boilerplate_SQLite_db.pl 脚本。不过这里是创建了一个文件夹作为标志文件,如果标志性文件夹存在,则不运行;如果标志性文件夹不存在,则运行该程序。

    • 由于需要批量运行,这里的每个输入数据都会创建不同的标志性文件夹存放路径,除非你不同的数据非要用同一个文件名。
      运行结束后删除标志性文件,此时再次运行不会接续,而是重新开始运行。

    if [ -d "$1" ]
    
      then
    
       echo "$1 exist!" && sleep 1s && break
    
      else
    
       sh -c "$2" && mkdir -p __tmp_${FASTA}/$1
    
       echo -e "DONE: $2 !"
    
     fi
    

    基础MISA流程

    primer3设置文件见参考文章部分

    FASTA=test.fasta
    perl  misa.pl  ${FASTA}
    perl  p3_in.pl  ${FASTA}.misa
    #引物设计时间会很久
    ./primer3-2.3.5/src/primer3_core -default_version=1 -p3_settings_file=my_default_settings.txt.txt -output=${FASTA}.p3out  ${FASTA}.p3in
    perl p3_out.pl  ${FASTA}.p3in  ${FASTA}.misa
    

    可接续的shell脚本

    • 脚本需要修改“全局设置”的3个地方:

      变量FASTA:输入数据(可输入文件改为$1 ,用顺序传参的方式可以批量运行该脚本了 )

      变量PRIMER3_CORE: 可执行程序primer3_core 位置

      primer3的配置文件 : my_default_settings.txt

    • 脚本分为三个部分

      变量设置部分;

      对象检查部分;

      程序运行部分

    • 如果你修改下面脚本部分时无法运行,可以尝试注释掉set -euo pipefail 行。

    #!usr/bin/env sh
    set -euo pipefail
    
    ##Description: My pipline for misa v1.0 and primer3 2.3.5 of linux platform
    ##用法:以下文件需要放到该shell脚本同文件夹下
    ##      需要将fasta文件, primer3的配置文件 放到与shell脚本同文件夹下;
    ##      misa.pl, p3_in.pl, p3_out.pl等脚本 放到与shell脚本同文件夹下;
    ##      然后修改全局变量位置即可。
    
    ###-------------------------------------------
    ###全局设置
    ###-------------------------------------------
    FASTA=./test/test.fa #文件位置
    PRIMER3_CORE=./primer3-2.3.5/src/primer3_core  #primer3_core位置
    PRIMER3_SETTING=./my_default_settings.txt
    #记得修改 my_default_settings.txt
    ###-------------------------------------------
    ###输入输出对象检查
    ###-------------------------------------------
    # check the scripts, input file and output path
    ## check the scripts
    ### -a 表示逻辑 "与";-o 表示逻辑 "或"; ! 表示逻辑 "非"; 三种逻辑顺序级别由高到底:! > -a > -o 
    ### -f 表示文件存在;-d 表示文件夹存在;
    if [ -f  "misa.pl"   -a -f  "p3_in.pl"  -a -f   "p3_out.pl" ]   #-e表示文件存在,-a 表示逻辑 "与"
    then
        echo -e "the misa scripts is ready!\n" && sleep 1s
    else
        echo -e "the misa scripts not found!\n"
        exit 1
    fi
    
    ## check the fasta file!
    if [ -f $FASTA ]
    then
        echo -e "input file: $FASTA is ready!\n" && sleep 1s
        sleep 1s 
    else
        echo "input file: $FASTA not found!"
        exit 1
    fi
    
    function misa_check(){
       if [ -d "$1" ]
       then
          echo "$1 exist!" && sleep 1s && break
       else
          sh -c "$2" && mkdir -p __tmp_${FASTA}/$1
          echo -e "DONE: $2 !"
       fi
    }
    misa_check   misa.pl.ok "perl  misa.pl  ${FASTA} >  /dev/null 2>&1"
    misa_check  p3_in.pl.ok "perl  p3_in.pl  ${FASTA}.misa"
    misa_check  primer3.ok  "./primer3-2.3.5/src/primer3_core -default_version=1 -p3_settings_file=${PRIMER3_SETTING} -output=${FASTA}.p3out  ${FASTA}.p3in"
    misa_check p3_out.pl.ok  "perl  p3_out.pl  ${FASTA}.p3out ${FASTA}.misa"
    rm -rf __tmp_${FASTA}
    echo "DONE:SSRs searching and primers designing of ${FASTA}!"
    

    以我改的misa脚本教程为基础的shell脚本(该流程初学者不建议看,容易晕)

    #!usr/bin/env sh
    set -euo pipefail
    ###-------------------------------------------
    ###全局设置
    ###-------------------------------------------
    ## 记得修改 my_default_settings.txt
    ##path of programme
    MISA_PATH=./misa
    PRIMER3_CORE=primer3_core
    PRIMER3_SETTING=my_default_settings.txt
    ##input file
    FASTA=./fasta/test.fa
    ##output path
    RESULT_PATH=./results/
    
    
    ## every result
    filename=$(basename $FASTA)
    EVERY_RESULT=$RESULT_PATH/$filename
    mkdir -p $RESULT_PATH/$filename
    
    ###-------------------------------------------
    ###输入输出对象检查
    ###-------------------------------------------
    # check the scripts, input file and output path
    ## check the scripts
    if [ -f  "$MISA_PATH/misa.pl"   -a -f  "$MISA_PATH/p3_in.pl"  -a -f   "$MISA_PATH/p3_out.pl" -a  ]   #-e表示文件存在,-a 表示逻辑 "与"
    then
        echo -e "the misa scripts is ready!\n" && sleep 1s
        sleep 1s
    else
        echo -e "the misa scripts not found!\n"
        exit 1
    fi
    
    ## check the fasta file!
    if [ -f $FASTA ]
    then
        echo -e "input file: $FASTA is ready!\n" && sleep 1s
        sleep 1s 
    else
        echo "input file: $FASTA not found!"
        exit 1
    fi
    
    if [ -f  ${PRIMER3_SETTING} ]
    then
        echo -e "input file: ${PRIMER3_SETTING} is ready!\n" && sleep 1s
        sleep 1s 
    else
        echo "input file: ${PRIMER3_SETTING} not found!"
        exit 1
    fi
    
    ## check the output path
    if [ -d $EVERY_RESULT ]
    then
        echo -e "output path: $EVERY_RESULT is ready!\n"  && sleep 1s
    else
        echo "output path: $EVERY_RESULT not found!"
        exit 1
    fi
    
    ###-------------------------------------------
    ###运行程序
    ###-------------------------------------------
    # SSRs searching and primers designing
    function misa_check(){
       if [ -d "$1" ]
       then
          echo "$1 exist!" && sleep 1s && break
       else
          sh -c "$2" && mkdir -p __tmp_${FASTA}/$1
          echo -e "DONE: $2 !"
       fi
    }
    
    misa_check misa.pl.ok "perl ${MISA_PATH}/misa.pl ${MISA_PATH}/misa.ini $FASTA ${EVERY_RESULT} > /dev/null 2>&1 " #输出到黑洞
    misa_check p3_in.pl.ok "perl ${MISA_PATH}/p3_in.pl   ${EVERY_RESULT}/${filename}.misa  ${FASTA}  ${EVERY_RESULT} > primer3_parameters_${filename}.txt"
    misa_check primer3.ok "$PRIMER3_CORE -default_version=1 -p3_settings_file=${PRIMER3_SETTING} -output=${EVERY_RESULT}/${filename}.p3out ${EVERY_RESULT}/${filename}.p3in"
    misa_check p3_out.pl.ok  "perl ${MISA_PATH}/p3_out.pl ${EVERY_RESULT}/${filename}.p3out ${EVERY_RESULT}/${filename}.misa ${EVERY_RESULT}"
    rm -rf __temp_${filename}
    echo "SSRs searching and primers designing of $filename have been completed!"
    
    

    致谢

    感谢生信技能树的司徒老师的答疑;感谢福建农林的史同学让我发现了新的问题。

    参考

    1. primer3设计引物详解 http://www.chenlianfu.com/?p=284

    2. 使用Misa结合Primer3来批量设计SSR引物 http://www.chenlianfu.com/?p=255

    3. SSR (misa + primer3 ) 设计SSR引物 https://blog.csdn.net/wt141643/article/details/113878893

    4. 《Bioinformatics Data Skills》之编写与运行鲁棒的bash脚本 https://www.jianshu.com/p/6bf09e8da73f

    相关文章

      网友评论

        本文标题:MISA+Primer3设计SSR引物(三):批量化运行的可接续

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