一、說明
下載紅箭頭指向的文件
下載之后發現文件結果如下
一個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ㄒ)/~~
