아래는 pdb파일(protein set/ peptide set)으로부터 blastSearch를 위한 local database를 생성하는 기초 작업 과정이다.
① pdb to fasta 변환
② fasta 병합
cat *.fasta > merged.fasta
③ makeblastDB
makeblastdb -in merged.fasta -dbtype prot -out prot_db
④ query 생성
> seq1
AAWRVLSSIEQKSNEEGSEEKGPEVREYREKVETELQGVCDTVLGLLDSHLIKEAGDAES
RVFYLKMKGDYYRYLAEVATGDDKKRIIDSARSAYQEAMDISKKEMPPTNPIRLGLALNF
SVFHYEIANSPEEAISLAKTTFDEAMADLHTLSEDSYKDSTLIMQLLRDNLTLWT
⑤ qeury 실행 및 result.txt 확인
blastp -query [쿼리파일] -db [데이터베이스파일] -out [결과파일]
blastp -query query.fasta -db prot_db -out result.txt
위 기초 작업 중 ④,⑤ 을 웹 페이지로 구현 및 분자 구조 페이지(complex)와 링크하고자 한다.
import subprocess
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def blast_search():
# 1:POST요청만 처리
if request.method == 'POST':
sequence = request.form.get('sequence')
result = run_blast_search(sequence)
return render_template('main.html', blast_results=result)
# 2:POST요청이 없거나 GET요청인 경우
return render_template('main.html')
# BlastSearch 수행
def run_blast_search(sequence):
with open('query.fasta', 'w') as file:
file.write(f'>query\n{sequence}')
subprocess.run(['blastp', '-query', 'query.fasta', '-db', 'prot_db', '-out', 'result.txt'])
with open('result.txt', 'r') as file:
result = file.read()
return result
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Blast Search</title>
</head>
<body>
<form action="/" method="post">
<label for="sequenceID">Sequence</label>
<!-- input field -->
<input type="text" name="sequence" id="sequenceID" />
<button type="submit">Search</button>
</form>
{% if blast_results %}
<h2>Blast Search Results</h2>
<pre>{{ blast_results }}</pre>
{% endif %}
</body>
</html>