Blast在windows下的使用過程


  一、說明

  Blast,全稱Basic Local Alignment Search Tool,即"基於局部比對算法的搜索工具",由Altschul等人於1990年發布。Blast能夠實現比較兩段核酸或者蛋白序列之間的同源性的功能,它能夠快速的找到兩段序列之間的同源序列並對比對區域進行打分以確定同源性的高低。
  Blast簡單來說,是一個完整的程序包,調用該程序包的命令來判斷兩個字符串的相似程度。
  二、下載
  所有的有關blast的文章都會說去ncbi的官網下載( ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/2.9.0/)直接去這吧,在鏡像網站直接下載。(通常文章都是說用conta下載,conta還需要下載新的軟件。我們只是要在程序中調用blast,如果再去下載這個軟件的話太麻煩了)。

 

下載紅箭頭指向的文件

下載之后發現文件結果如下

 

 一個bin,一個doc,一個卸載程序,但是點開bin之后就懵了。bin中幾乎一半都是exe文件,但是這些exe文件沒有一個是打開這個程序的,都只是些命令程序。

 在用戶環境中添加blastdb值與path值

 

 

 

因為沒辦法直接使用,因此只能去cmd中用命令調用。

 

2.1在c盤下建立三個包

 

 移動到blast有bin的包下,輸入blastn -version來看是否安裝成功

2.2創建db

 

 這個最后一個出問題了,它提示我File nr does not exist,然而我的nr文件是存在的。后來發現nr必須有文件后綴。(nr.fasta是要建成數據庫的文件)

(建庫命令:makeblastdb -in nr.fasta -dbtype prot -title "nr" -out NR)

 

 2.3建好庫后測試

 到這一步基本上在win下已經能夠正常的調用blast來運行代碼了。這些處理結果和輸入參數看不明白,也不用看明白。

到這一步其實是有問題的,正常的話應該輸出一個txt文件來顯示結果。我又將兩個比對文件放在ncbi的官網上試着比對了一下,發現這兩個文件有問題,沒法比對成功。

 沒辦法只好再去找兩個fasta的文件

方法:

1.https://www.ncbi.nlm.nih.gov/

 

 

 

 

 

 

 

 

 

 

 

 將序列復制到文本中,將擴展名改為fasta類型。

如果只是測試軟件能不能用,建議將得到的fasta文件建庫,然后再用這個fasta文件與數據庫對比。測試比較快。

 

 三、使用blast

1.建庫命令makeblastdb -in nr.fasta -dbtype prot -title "nr" -out NR

-in 建庫的fasta文件

-dbtype 數據庫類型 (-prot 蛋白質類型 -nucl 核苷酸類型)

-out 數據庫名

2.查詢 

查詢需要cd到要查詢的fasta文件的路徑下,調用查詢命令blastp -query test2.fasta -db C:\Blast\db\test2.fasta -outfmt 6 -out "C:\Blast\test.blastp@iedb.txt" -evalue 0.00001 -max_target_seqs 5 -num_threads 8

-out "C:\Blast\test.blastp@iedb.txt" 輸出類型可以添加路徑名

輸出txt文件的內容以-outfmt的類型為准,具體參數含義在模塊四中

-outfmt 6 輸出的txt文件中的各個信息為

Query_id  Subject_id %_identity  alignment_length    mismatches gap_openings   q. start   q. end    s. start    s. end    e-value   bit_score

 

 

四、常用的blast命令

 

二、格式化數據庫
基本運行指令
formatdb -i DBfile1 -p (T/F) -o (T/F)
-i:輸入需要格式化序列庫的絕對路徑,序列庫一般一般使用的是fasta文件。

-o [T/F]:判斷是否分析序列名並建立序列名索引。“T”表示建立序列名索引,“F” 表示不建立序列名索引。默認值為F。

-p [T/F]:選擇建庫的類型,“T”表示建立的是蛋白質數據庫,“F”表示建立的是核酸數據庫,缺省值為T。

java代碼
Process process = Runtime.getRuntime.eexec("formatdb -i DBFile -p T -o T");

process.waitFor(); //等待命令執行結束,獲取執行結果

程序運行結束后,如果建立的是核酸庫,-o為F時,會輸出**.nhr,**.nin,**.nsp文件,-o為T時,還會多輸出**.hsd,**.nsi,**.nni和**.nnd文件。類似的,當建立的是蛋白質也會輸出相應的文件:[-o F]--**.phr,**.pin,**.psq;[-o T]--**.psd,**.psi,**.pni,**.pnd。


三、在數據庫中查詢相應序列並返回結果
1.基本運行指令:

blastp -query test2.fasta -db C:\\Blast\\db\\test2.fasta -outfmt 6 -out \"C:\\Blast\\testblastp@iedb.txt\"
(文件名字最好加路徑,否則得到的txt文件是在java項目的文件下方)
-evalue 0.00001 -max_target_seqs 5 -num_threads 8

  


2.blast主程序blastall
程序的輸入文件是query序列(-i參數)庫文件(-d)
選擇(-p)和輸出文件(-o)有用戶絕定
-p有五種取值:百度查找
3.-e參數
篩選適當的比對結果,指定一個參數,選出比這個參數大的期望值
4. -F (T/F)參數
用來屏蔽簡單重復和低復雜度序列的。
T:程序在比對過程中會屏蔽掉query中的簡單重復和低復雜度序列
F:不會屏蔽
缺省值(默認值)為“T”。
5.-m參數
設定輸出格式,供選擇為0~11之間的整數。默認0.
6.-v,-b參數
-v 默認值500,規定輸出中的每一個query的比對列表最多顯示subject的個數
-b 默認250,規定輸出中每個query最多顯示與多少subject的比對條形圖
7. -T 參數
用於決定是否輸出html格式的比對結果。
9.-W參數
指定坐比對的字的長度。

四、java程序中調用blast

java調用命令行代碼

唯一一個小點是需要多行調用命令行命令

在命令行中,如果調用多條命令,在兩個命令之間加上&

如 

 

 但是在java中,需要有cmd /c (執行完命令行后關閉命令框),cmd /k(執行完命令行后不關閉命令框)

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;


public class blast {
    public static void main(String[] args) {

        Runtime run = Runtime.getRuntime();
        try {

            Process process = run.exec("cmd /k C: && cd C:\\Blast && blastp -query test2.fasta -db C:\\Blast\\db\\test2.fasta -outfmt 5 -out \"C:\\Blast\\test.blastp@iedb.xml\" -evalue 0.00001 -max_target_seqs 5 -num_threads 8 " );
            InputStream input = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            String szline;
            while ((szline = reader.readLine())!= null) {
                System.out.println(szline);
            }
            reader.close();
            process.waitFor();
            process.destroy();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  

 至此,blast的下載,使用,調用三個部分基本上結束了。

接下來就需要將獲得的文件可視化。

之前導出的格式是由 -outfmt 5獲得的,然而這個輸出的是xml文件,在網上也找不到相應的將xml文件轉成能看懂形式的教程文章。不過我找到了一個blastxml插件,有大佬會的話希望能教一下。

鏈接如下http://hackage.haskell.org/package/blastxml

既然-outfmt的輸出格式有許多那可以曲線救國換其他的用。

-outfmt 6 得到的格式為txt文件,對應blast中的m8.

 

 每一列的對應數據解釋為:

Query_id   Subject_id   %_identity alignment_length   mismatches   gap_openings  q. start  q. end   s. start   s. end   e-value  bit_score

Query id:查詢序列ID標識
Subject id:比對上的目標序列ID標識
% identity:序列比對的一致性百分比
alignment length:符合比對的比對區域的長度
mismatches:比對區域的錯配數
gap openings:比對區域的gap數目
q. start:比對區域在查詢序列(Query id)上的起始位點
q. end:比對區域在查詢序列(Query id)上的終止位點
s. start:比對區域在目標序列(Subject id)上的起始位點
s. end:比對區域在目標序列(Subject id)上的終止位點
e-value:比對結果的期望值,將比對序列隨機打亂重新組合,和數據庫進行比對,如果功能越保守,則該值越低;該E值越高說明比對的高得分值是由GC區域,重復序列導致的。對於判斷同源性是非常有意義的幾個參數。
bit score:比對結果的bit score值

(引用鏈接http://www.mamicode.com/info-detail-2420033.html

再然后用java代碼調用

public static void main(String[] args) {
        ArrayList<String> arrayList = toArray("C:\\Blast\\test.blastp@iedb.txt");
        for(String str:arrayList){
            System.out.println(str);
        }
    }
    public static ArrayList<String> toArray(String name){
        ArrayList<String> arrayList = new ArrayList<>();
        try {
            FileReader fr = new FileReader(name);
            BufferedReader bf = new BufferedReader(fr);
            String str;
            while ((str = bf.readLine())!=null){
                arrayList.add(str);
            }
            bf.close();
            fr.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return arrayList;
    }

  

 

 

 至此,blast從windows下載,建庫,指令,對比,顯示就都結束了。剩下的就只剩另一個同學導入項目中了。

但是老師還有兩個文件要用...../(ㄒoㄒ)/~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM