<!DOCTYPE html> <html> <body> <H2>This webpage is used for Blast in several fungi database</H2> <p> Choose a protein in S288C Histidine synthesis pathway </p> <form action = "http://10.122.210.253/cgi-bin/huarui_cgi_v3.py" method = "post" target = "_blank"> <input type = "radio" name = "Gene" value = "His1" checked='checked'/> His1 <input type = "radio" name = "Gene" value = "His2" /> His2 <input type = "radio" name = "Gene" value = "His3" /> His3 <input type = "radio" name = "Gene" value = "His4" /> His4 <input type = "radio" name = "Gene" value = "His5" /> His5 <input type = "radio" name = "Gene" value = "His6" /> His6 <input type = "radio" name = "Gene" value = "His7" /> His7 <input type = "radio" name = "Gene" value = "Mis1" /> Mis1 <input type = "radio" name = "Gene" value = "Others" /> Others <br> <br> <label for="fname">Please input your gene name: </label> <input type="text" name="fname"><br><br> <p><label for="seqtext">Paste the sequence below</label></p> <textarea id="w3review" name="seqtext" rows="4" cols="50"></textarea> <br> <br> <p>Choose fungi database</p> <input type="checkbox" name="Db1" value="Allprot"> <label for="Db1"> All database</label><br> <input type="checkbox" name="Db2" value="Calbicans"> <label for="Db2"><i> C. albicans</i></label><br> <input type="checkbox" name="Db3" value="Cglabrata"> <label for="Db3"><i> C. glabrata</i></label><br> <input type="checkbox" name="Db4" value="Egossypii"> <label for="Db4"><i> E. gossypii</i></label><br> <input type="checkbox" name="Db5" value="Klactis"> <label for="Db5"><i> K. lactis</i></label><br> <br> <br> <input type = "submit" value = "Run Blast" /> </form> <br> </body> </html>
The output webpage is like this:
Choose a protein in S288C Histidine synthesis pathway
We also need another cgi code for blasting in the server.
#!/usr/bin/python3
#derf 9/22/2022
#THE IMPORT STUFF SECTION
import cgi, cgitb
import sys
import subprocess
import os
form = cgi.FieldStorage()
if form.getvalue('Gene'):
gene_var = form.getvalue('Gene')
if form.getvalue('fname'):
fname_var = form.getvalue('fname')
if form.getvalue('seqtext'):
seq_var = form.getvalue('seqtext')
if form.getvalue('Db1'):
Db1_var = form.getvalue('Db1')
else:
Db1_var = "No"
if form.getvalue('Db2'):
Db2_var = form.getvalue('Db2')
else:
Db2_var = "No"
if form.getvalue('Db3'):
Db3_var = form.getvalue('Db3')
else:
Db3_var = "No"
if form.getvalue('Db4'):
Db4_var = form.getvalue('Db4')
else:
Db4_var = "No"
if form.getvalue('Db5'):
Db5_var = form.getvalue('Db5')
else:
Db5_var = "No"
def blastp_outfmt7(seq, pro_db_name):
cmdd = ("/usr/bin/blastp -query " + seq + " -db " + pro_db_name + " -outfmt 7")
pss = subprocess.Popen(cmdd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = str(pss.communicate()[0], 'ascii').split('\n')
return output
#end def blastp_outfmt7
def run_seqret(other_name, seq):
cmdd = '/usr/bin/echo \">' + other_name + '\" >/lib/cgi-bin/tempfile1 ; /usr/bin/echo \"'
+ seq + '\" >> /lib/cgi-bin/tempfile1'
pss = subprocess.Popen(cmdd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = str(pss.communicate()[0], 'ascii').split('\n')
return "/lib/cgi-bin/tempfile1"
#end def run_seqret
if gene_var == 'Others':
file_name = run_seqret(fname_var, seq_var)
gene_var = fname_var
else:
file_name = "/home/huarui/Protein/" + gene_var
#THE CGI SECTION
print ("Content-type:text/html\n\n")
print ('<html>')
print ('<head>')
print ('<title>blastp</title>')
print('</head>')
print('<style>')
print('table,th,td{border:1px solid black}')
print('</style>')
print ('<body>')
print ('<h2>Protein blast in fungi protein database</h2>')
print ('<br>')
for k in [Db1_var, Db2_var, Db3_var, Db4_var, Db5_var]:
if k == "No":
continue
print ('<p>Blast search of', gene_var , 'compared to protein database',k, ':</p><br><br>')
prodata_name = "/home/huarui/Protein/fungi_db/" + k
blastresult = blastp_outfmt7(file_name, prodata_name) #run blast
print('<table>')
for i in range(3):
print('<tr><td colspan = "12">', blastresult[i],'</td></tr>')
print('<tr>')
print('<tr><td colspan = "12">', blastresult[4],'</td></tr>')
print('<th>query acc.ver</th>')
print('<th>subject acc.ver</th>')
print('<th>% identity</th>')
print('<th>alignment length</th>')
print('<th>mismatches</th>')
print('<th>gap opens</th>')
print('<th>q.start</th>')
print('<th>q.end</th>')
print('<th>s.start</th>')
print('<th>s.end</th>')
print('<th>evalue</th>')
print('<th>bit score</th>')
print('</tr>')
for i in range (5,len(blastresult)-2):
print('<tr>')
CURR_line = blastresult[i].split("\t")
for j in range(12):
print('<td>',CURR_line[j],'</td>')
print ('</tr>')
print('</table>')
print('<br>')
print('<br>')
print ('<br>')
print ('</body>')
print ('</html>')
Note: we need use code
sudo chmod a+w < foldername>to change the mode of the file to make sure we can make new file in folder cgi-bin!
If we select His1 and database C. albicans, E. gossypii, then the results will be like this:
Blast search of His1 compared to protein database Calbicans :
| # BLASTP 2.12.0+ | |||||||||||
| # Query: HIS1 YER055C SGDID:S000000857 | |||||||||||
| # Database: /home/huarui/Protein/fungi_db/Calbicans | |||||||||||
| # 4 hits found | query acc.ver | subject acc.ver | % identity | alignment length | mismatches | gap opens | q.start | q.end | s.start | s.end | evalue | bit score |
|---|---|---|---|---|---|---|---|---|---|---|---|
| HIS1 | XP_721934.1 | 60.526 | 304 | 107 | 4 | 1 | 297 | 1 | 298 | 5.63e-131 | 372 |
| HIS1 | XP_712929.2 | 51.852 | 27 | 12 | 1 | 223 | 248 | 148 | 174 | 1.1 | 28.5 |
| HIS1 | XP_713344.1 | 39.535 | 43 | 24 | 1 | 199 | 239 | 355 | 397 | 1.5 | 28.5 |
| HIS1 | XP_722193.2 | 31.373 | 51 | 31 | 2 | 126 | 174 | 377 | 425 | 3.3 | 27.3 |
Blast search of His1 compared to protein database Egossypii :
| # BLASTP 2.12.0+ | |||||||||||
| # Query: HIS1 YER055C SGDID:S000000857 | |||||||||||
| # Database: /home/huarui/Protein/fungi_db/Egossypii | |||||||||||
| # 5 hits found | query acc.ver | subject acc.ver | % identity | alignment length | mismatches | gap opens | q.start | q.end | s.start | s.end | evalue | bit score |
|---|---|---|---|---|---|---|---|---|---|---|---|
| HIS1 | NP_984015.1 | 73.064 | 297 | 80 | 0 | 1 | 297 | 1 | 297 | 2.12e-162 | 451 |
| HIS1 | NP_984602.1 | 27.273 | 99 | 62 | 4 | 161 | 249 | 52 | 150 | 0.44 | 29.3 |
| HIS1 | NP_984995.1 | 34.483 | 29 | 19 | 0 | 80 | 108 | 135 | 163 | 3.2 | 26.9 |
| HIS1 | NP_984930.1 | 33.333 | 45 | 26 | 1 | 115 | 159 | 605 | 645 | 4.1 | 26.6 |
| HIS1 | NP_982470.1 | 33.333 | 33 | 22 | 0 | 56 | 88 | 332 | 364 | 8.6 | 25.8 |