tools
This commit is contained in:
+69
-3
@@ -3,6 +3,8 @@ import random
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
from Bio import SeqIO
|
||||||
|
from Bio.SeqUtils import GC
|
||||||
|
|
||||||
from Simple_Drawing.settings import BASE_DIR
|
from Simple_Drawing.settings import BASE_DIR
|
||||||
|
|
||||||
@@ -338,7 +340,7 @@ class="layui-input" style="height: 25px; width:80px;margin-top: 6px">
|
|||||||
for d in self.Basics[title]:
|
for d in self.Basics[title]:
|
||||||
parameter = ChartParameter(d)
|
parameter = ChartParameter(d)
|
||||||
|
|
||||||
if parameter.input_type in ["rgb","hex",'color_name']:
|
if parameter.input_type in ["rgb", "hex", 'color_name']:
|
||||||
code += f"""{parameter.name}:{parameter.name},
|
code += f"""{parameter.name}:{parameter.name},
|
||||||
"""
|
"""
|
||||||
else:
|
else:
|
||||||
@@ -349,7 +351,7 @@ class="layui-input" style="height: 25px; width:80px;margin-top: 6px">
|
|||||||
for d in self.Senior[title]:
|
for d in self.Senior[title]:
|
||||||
parameter = ChartParameter(d)
|
parameter = ChartParameter(d)
|
||||||
print(parameter.input_type)
|
print(parameter.input_type)
|
||||||
if parameter.input_type in ["rgb", "hex",'color_name']:
|
if parameter.input_type in ["rgb", "hex", 'color_name']:
|
||||||
code += f"""{parameter.name}:{parameter.name},
|
code += f"""{parameter.name}:{parameter.name},
|
||||||
"""
|
"""
|
||||||
else:
|
else:
|
||||||
@@ -381,7 +383,7 @@ class="layui-input" style="height: 25px; width:80px;margin-top: 6px">
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
""" % (i, random_color(), fl,i)
|
""" % (i, random_color(), fl, i)
|
||||||
|
|
||||||
return code
|
return code
|
||||||
|
|
||||||
@@ -404,4 +406,68 @@ Treemap = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Basics(object):
|
||||||
|
def __init__(self, file_path, args):
|
||||||
|
self.args = args
|
||||||
|
self.file_path = file_path
|
||||||
|
self.out_file = []
|
||||||
|
self.f = SeqIO.parse(file_path, "fasta") # 读取多条序列
|
||||||
|
|
||||||
|
def Sequence_cleaning(self):
|
||||||
|
f = self.f
|
||||||
|
temp = []
|
||||||
|
for i in f:
|
||||||
|
temp.append(f">{i.id}\n{str(i.seq)}")
|
||||||
|
self.out_file.append(["Sequence_cleaning", temp])
|
||||||
|
|
||||||
|
def Sequence_length(self):
|
||||||
|
f = self.f
|
||||||
|
temp = []
|
||||||
|
for i in f:
|
||||||
|
temp.append(f"{i.id}\t{len(i)}")
|
||||||
|
self.out_file.append(["Sequence_length", temp])
|
||||||
|
|
||||||
|
def GC_content(self):
|
||||||
|
f = self.f
|
||||||
|
temp = []
|
||||||
|
for i in f:
|
||||||
|
CONTENT = GC(str(i.seq))
|
||||||
|
temp.append(f"{i.id}\t{CONTENT}")
|
||||||
|
self.out_file.append(["GC_content", temp])
|
||||||
|
|
||||||
|
def Sequence_flip(self):
|
||||||
|
f = self.f
|
||||||
|
temp = []
|
||||||
|
for i in f:
|
||||||
|
temp.append(f">{i.id}\n{str(i.reverse_complement().seq)}")
|
||||||
|
self.out_file.append(["Sequence_flip", temp])
|
||||||
|
|
||||||
|
def Reverse_complementarity(self):
|
||||||
|
f = self.f
|
||||||
|
temp = []
|
||||||
|
for i in f:
|
||||||
|
temp.append(f">{i.id}\n{str(i.complement().seq)}")
|
||||||
|
self.out_file.append(["Reverse_complementarity", temp])
|
||||||
|
|
||||||
|
# def Codon_preference(self):
|
||||||
|
# f = self.f
|
||||||
|
# temp = []
|
||||||
|
# for i in f:
|
||||||
|
# temp.append(f">{i.id}\n{str(i.complement().seq)}")
|
||||||
|
# self.out_file.append({"Reverse_complementarity": temp})
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
for i in self.args.keys():
|
||||||
|
if self.args[i] == "YES":
|
||||||
|
eval(f"self.{self.args[i]}")()
|
||||||
|
|
||||||
|
data = ""
|
||||||
|
for i in self.out_file:
|
||||||
|
for j in i:
|
||||||
|
data += f"\n{'-' * 15}\n{j[0]}\n"
|
||||||
|
data += "\n".join(i[1])
|
||||||
|
|
||||||
|
with open(self.file_path, "w") as f:
|
||||||
|
f.write(data)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|||||||
@@ -7,7 +7,5 @@ urlpatterns = [
|
|||||||
path('down', views.download),
|
path('down', views.download),
|
||||||
url("(.*\.html$)", views.out_page),
|
url("(.*\.html$)", views.out_page),
|
||||||
url('up_file', views.up_file),
|
url('up_file', views.up_file),
|
||||||
url('tools$', views.tools),
|
|
||||||
url('tools$', views.tools),
|
|
||||||
url('(.*)_run', views.chart_run),
|
url('(.*)_run', views.chart_run),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -122,19 +122,3 @@ def chart_run(request, get_chart_sort):
|
|||||||
return JsonResponse({"img": f"/static/img_eg/show_chart/{file_id}_{k}.png"})
|
return JsonResponse({"img": f"/static/img_eg/show_chart/{file_id}_{k}.png"})
|
||||||
|
|
||||||
|
|
||||||
def tools(request):
|
|
||||||
file = request.FILES.get("file", None) # 标题
|
|
||||||
mg = request.POST.get('mg', None)
|
|
||||||
data = ""
|
|
||||||
if file is None and mg is None:
|
|
||||||
return JsonResponse({"http": "内容为空"})
|
|
||||||
if file is None:
|
|
||||||
data = 反向互补序列(mg)
|
|
||||||
else:
|
|
||||||
p = file.read()
|
|
||||||
p.decode(encoding='utf-8')
|
|
||||||
data = 反向互补序列(p.decode(encoding='utf-8'))
|
|
||||||
|
|
||||||
file_path, file_id = path_out("tools")
|
|
||||||
keep_file(data, file_path, ui=1)
|
|
||||||
return JsonResponse({"work_id": file_id})
|
|
||||||
@@ -123,6 +123,7 @@
|
|||||||
var form = layui.form;
|
var form = layui.form;
|
||||||
var url_up = "{{ url }}"
|
var url_up = "{{ url }}"
|
||||||
var upload = layui.upload
|
var upload = layui.upload
|
||||||
|
var element = layui.element
|
||||||
|
|
||||||
|
|
||||||
// 页面跳转加载函数
|
// 页面跳转加载函数
|
||||||
@@ -164,6 +165,7 @@
|
|||||||
temp = $('#main_show')
|
temp = $('#main_show')
|
||||||
temp.empty()
|
temp.empty()
|
||||||
temp.append(String.raw`{% include 'tools/Basics.html' %}`)
|
temp.append(String.raw`{% include 'tools/Basics.html' %}`)
|
||||||
|
basics_run()
|
||||||
form.render();
|
form.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,6 +174,7 @@
|
|||||||
temp = $('#main_show')
|
temp = $('#main_show')
|
||||||
temp.empty()
|
temp.empty()
|
||||||
temp.append(String.raw`{% include 'tools/pfam.html' %}`)
|
temp.append(String.raw`{% include 'tools/pfam.html' %}`)
|
||||||
|
pfam_run()
|
||||||
form.render();
|
form.render();
|
||||||
|
|
||||||
|
|
||||||
@@ -183,6 +186,7 @@
|
|||||||
temp = $('#main_show')
|
temp = $('#main_show')
|
||||||
temp.empty()
|
temp.empty()
|
||||||
temp.append(String.raw`{% include 'tools/Differential_expression_analysis.html' %}`)
|
temp.append(String.raw`{% include 'tools/Differential_expression_analysis.html' %}`)
|
||||||
|
Differential_expression_analysis_run()
|
||||||
form.render();
|
form.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,6 +342,124 @@
|
|||||||
;
|
;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function pfam_run() {
|
||||||
|
layui.use(['upload'], function () {
|
||||||
|
var $ = layui.jquery
|
||||||
|
, layer = layui.layer;
|
||||||
|
upload.render({
|
||||||
|
elem: '#select_pfam'
|
||||||
|
, url: url_up + '/tools/' + "pfam"
|
||||||
|
, auto: false
|
||||||
|
, accept: 'file'
|
||||||
|
, data: {
|
||||||
|
csrfmiddlewaretoken: '{{ csrf_token }}',
|
||||||
|
b_dom: document.getElementById("b_dom").value,
|
||||||
|
b_seq: document.getElementById("b_seq").value,
|
||||||
|
e_dom: document.getElementById("e_dom").value,
|
||||||
|
e_seq: document.getElementById("e_seq").value,
|
||||||
|
align: document.getElementById("align").value,
|
||||||
|
clan_overlap: document.getElementById("clan_overlap").value,
|
||||||
|
}
|
||||||
|
, before: function (obj) { //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
|
||||||
|
layer.load(1); //上传loading
|
||||||
|
}
|
||||||
|
, bindAction: '#pfam_run'
|
||||||
|
, done: function (res, index) {
|
||||||
|
layer.closeAll('loading'); //关闭loading
|
||||||
|
ab = '<a href= "' + url_up + '/chart/down?file_id=' + res.id + "&file_downlode_type=txt&ee=1" + '">' + ' <button type="button" class="layui-btn">downlode</button></a>'
|
||||||
|
$("#down").append(ab)
|
||||||
|
}
|
||||||
|
, error: function (index, upload) {
|
||||||
|
layer.closeAll('loading'); //关闭loading
|
||||||
|
}
|
||||||
|
})
|
||||||
|
;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function Differential_expression_analysis_run() {
|
||||||
|
|
||||||
|
var uploadListIns = upload.render({
|
||||||
|
elem: '#testList'
|
||||||
|
, elemList: $('#demoList') //列表元素对象
|
||||||
|
, url: url_up + '/tools/' + "Differential_expression_analysis" //此处用的是第三方的 http 请求演示,实际使用时改成您自己的上传接口即可。
|
||||||
|
, accept: 'file'
|
||||||
|
, multiple: true
|
||||||
|
, number: 10
|
||||||
|
, auto: false
|
||||||
|
, bindAction: '#testListAction'
|
||||||
|
, choose: function (obj) {
|
||||||
|
var that = this;
|
||||||
|
var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
|
||||||
|
//读取本地文件
|
||||||
|
obj.preview(function (index, file, result) {
|
||||||
|
var tr = $(['<tr id="upload-' + index + '">'
|
||||||
|
, '<td>' + file.name + '</td>'
|
||||||
|
, '<td>' + (file.size / 1014).toFixed(1) + 'kb</td>'
|
||||||
|
, '<td><div class="layui-progress" lay-filter="progress-demo-' + index + '"><div class="layui-progress-bar" lay-percent=""></div></div></td>'
|
||||||
|
, '<td>'
|
||||||
|
, '<button class="layui-btn layui-btn-xs demo-reload layui-hide">Re</button>'
|
||||||
|
, '<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">del</button>'
|
||||||
|
, '</td>'
|
||||||
|
, '</tr>'].join(''));
|
||||||
|
|
||||||
|
//单个重传
|
||||||
|
tr.find('.demo-reload').on('click', function () {
|
||||||
|
obj.upload(index, file);
|
||||||
|
});
|
||||||
|
|
||||||
|
//删除
|
||||||
|
tr.find('.demo-delete').on('click', function () {
|
||||||
|
delete files[index]; //删除对应的文件
|
||||||
|
tr.remove();
|
||||||
|
uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
|
||||||
|
});
|
||||||
|
|
||||||
|
that.elemList.append(tr);
|
||||||
|
element.render('progress'); //渲染新加的进度条组件
|
||||||
|
});
|
||||||
|
}
|
||||||
|
, data: {
|
||||||
|
csrfmiddlewaretoken: '{{ csrf_token }}',
|
||||||
|
{#b_dom: document.getElementById("b_dom").value,#}
|
||||||
|
{#b_seq: document.getElementById("b_seq").value,#}
|
||||||
|
{#e_dom: document.getElementById("e_dom").value,#}
|
||||||
|
{#e_seq: document.getElementById("e_seq").value,#}
|
||||||
|
{#align: document.getElementById("align").value,#}
|
||||||
|
{#clan_overlap: document.getElementById("clan_overlap").value,#}
|
||||||
|
}
|
||||||
|
|
||||||
|
, done: function (res, index, upload) { //成功的回调
|
||||||
|
var that = this;
|
||||||
|
//if(res.code == 0){ //上传成功
|
||||||
|
var tr = that.elemList.find('tr#upload-' + index)
|
||||||
|
, tds = tr.children();
|
||||||
|
tds.eq(3).html(''); //清空操作
|
||||||
|
delete this.files[index]; //删除文件队列已经上传成功的文件
|
||||||
|
return;
|
||||||
|
//}
|
||||||
|
this.error(index, upload);
|
||||||
|
}
|
||||||
|
, allDone: function (obj) { //多文件上传完毕后的状态回调
|
||||||
|
console.log(obj)
|
||||||
|
}
|
||||||
|
, error: function (index, upload) { //错误回调
|
||||||
|
var that = this;
|
||||||
|
var tr = that.elemList.find('tr#upload-' + index)
|
||||||
|
, tds = tr.children();
|
||||||
|
tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
|
||||||
|
}
|
||||||
|
, progress: function (n, elem, e, index) {
|
||||||
|
element.progress('progress-demo-' + index, n + '%');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+17
-17
@@ -9,7 +9,7 @@
|
|||||||
<ul class="layui-tab-title">
|
<ul class="layui-tab-title">
|
||||||
|
|
||||||
{# 选项卡#}
|
{# 选项卡#}
|
||||||
<li>orf</li>
|
<li>Basics</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="layui-tab-content" style="height: 100px;">
|
<div class="layui-tab-content" style="height: 100px;">
|
||||||
<form class="layui-form" action="">
|
<form class="layui-form" action="">
|
||||||
@@ -69,22 +69,22 @@
|
|||||||
</div> <!-- 开关-默认关 -->
|
</div> <!-- 开关-默认关 -->
|
||||||
|
|
||||||
|
|
||||||
<div class="layui-form-item">
|
{# <div class="layui-form-item">#}
|
||||||
<label class="layui-form-label">Codon preference</label>
|
{# <label class="layui-form-label">Codon preference</label>#}
|
||||||
<div class="layui-input-block">
|
{# <div class="layui-input-block">#}
|
||||||
<input type="checkbox" id="Codon_preference" name="close" lay-skin="switch"
|
{# <input type="checkbox" id="Codon_preference" name="close" lay-skin="switch"#}
|
||||||
lay-text="ON|OFF">
|
{# lay-text="ON|OFF">#}
|
||||||
</div>
|
{# </div>#}
|
||||||
</div> <!-- 开关-默认关 -->
|
{# </div> <!-- 开关-默认关 -->#}
|
||||||
|
{##}
|
||||||
|
{##}
|
||||||
<div class="layui-form-item">
|
{# <div class="layui-form-item">#}
|
||||||
<label class="layui-form-label">Codon frequency</label>
|
{# <label class="layui-form-label">Codon frequency</label>#}
|
||||||
<div class="layui-input-block">
|
{# <div class="layui-input-block">#}
|
||||||
<input type="checkbox" id="Codon_frequency" name="close" lay-skin="switch"
|
{# <input type="checkbox" id="Codon_frequency" name="close" lay-skin="switch"#}
|
||||||
lay-text="ON|OFF">
|
{# lay-text="ON|OFF">#}
|
||||||
</div>
|
{# </div>#}
|
||||||
</div> <!-- 开关-默认关 -->
|
{# </div> <!-- 开关-默认关 -->#}
|
||||||
|
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
|
|
||||||
|
|||||||
@@ -1,52 +1,84 @@
|
|||||||
<div class='layui-row' style="margin: 50px">
|
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
|
||||||
<div class='layui-col-md9'>
|
|
||||||
<h1 style="font-size: 50px">Differential expression analysis</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
<div class="layui-panel">
|
||||||
|
<div style="padding: 20px 30px;">
|
||||||
|
|
||||||
|
|
||||||
<div class='layui-row' style="margin-top: 80px; margin-left: 80px">
|
{# 选项#}
|
||||||
|
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
|
||||||
|
<ul class="layui-tab-title">
|
||||||
|
|
||||||
<div class='layui-col-md9 layui-form-pane'>
|
{# 选项卡#}
|
||||||
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
|
<li>Differential expression analysis</li>
|
||||||
<legend>counts文件</legend>
|
</ul>
|
||||||
</fieldset>
|
<div class="layui-tab-content" style="height: 100px;">
|
||||||
<div class="layui-btn-container" style="display: inline-block">
|
<form class="layui-form" action="">
|
||||||
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
|
|
||||||
|
<div class="layui-upload">
|
||||||
|
<button type="button" class="layui-btn layui-btn-normal" id="testList">选择多文件</button>
|
||||||
|
<div class="layui-upload-list" style="max-width: 1000px;">
|
||||||
|
<table class="layui-table">
|
||||||
|
<colgroup>
|
||||||
|
<col>
|
||||||
|
<col width="150">
|
||||||
|
<col width="260">
|
||||||
|
<col width="150">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>name</th>
|
||||||
|
<th>size</th>
|
||||||
|
<th>Upload progress</th>
|
||||||
|
<th>operation</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="demoList"></tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="down">
|
||||||
|
<button type="button" class="layui-btn" id="testListAction">run</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class='layui-row' style="margin-left: 80px">
|
|
||||||
<div class='layui-col-md9'>
|
|
||||||
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
|
|
||||||
<legend>分组文件</legend>
|
|
||||||
</fieldset>
|
|
||||||
<div class="layui-btn-container">
|
|
||||||
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='layui-row' style="margin-left: 80px">
|
|
||||||
<div class='layui-col-md9'>
|
|
||||||
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
|
|
||||||
<legend>对比文件</legend>
|
|
||||||
</fieldset>
|
|
||||||
<div class="layui-btn-container">
|
|
||||||
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='layui-row' style="margin-left:80px; margin-top: 20px">
|
|
||||||
<div class='layui-col-md9'>
|
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
|
||||||
<div class="layui-btn-container">
|
<div class="layui-panel">
|
||||||
<button type="button" class="layui-btn" id="run">RUN</button>
|
<div style="padding: 20px 30px;">
|
||||||
|
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
|
||||||
|
<ul class="layui-tab-title">
|
||||||
|
<li class="layui-this">function</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="layui-tab-content">
|
||||||
|
<div class="layui-tab-item layui-show">
|
||||||
|
<div style="margin-left: 30px;">
|
||||||
|
<p style="font-size: 20px">
|
||||||
|
|
||||||
|
Group file suffix is group<br>
|
||||||
|
The suffix of the statistics file is con<br>
|
||||||
|
The suffix of the comparison file is TXT<br>
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
+130
-53
@@ -1,67 +1,144 @@
|
|||||||
<div class='layui-row' style="margin: 50px">
|
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
|
||||||
<div class='layui-col-md9'>
|
|
||||||
<h1 style="font-size: 50px">GO 富集</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
<div class="layui-panel">
|
||||||
|
<div style="padding: 20px 30px;">
|
||||||
|
|
||||||
|
|
||||||
<div class='layui-row' style="margin-top: 80px; margin-left: 80px">
|
{# 选项#}
|
||||||
|
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
|
||||||
|
<ul class="layui-tab-title">
|
||||||
|
|
||||||
<div class='layui-col-md9 layui-form-pane'>
|
{# 选项卡#}
|
||||||
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
|
<li>GO</li>
|
||||||
<legend>数据库文件</legend>
|
</ul>
|
||||||
</fieldset>
|
<div class="layui-tab-content" style="height: 100px;">
|
||||||
<div class="layui-btn-container" style="display: inline-block">
|
<form class="layui-form" action="">
|
||||||
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
<div class="layui-form-item">
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class='layui-row' style="margin-left: 80px">
|
<div class="layui-btn-container">
|
||||||
<div class='layui-col-md9'>
|
|
||||||
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
|
|
||||||
<legend>差异表达文件</legend>
|
|
||||||
</fieldset>
|
|
||||||
<div class="layui-btn-container">
|
|
||||||
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
<button type="button" class="layui-btn layui-btn-normal" id="select_orf">select file
|
||||||
</div>
|
</button>
|
||||||
<div class='layui-row' style="margin-left:80px; margin-top: 20px">
|
|
||||||
<div class='layui-col-md9'>
|
</div>
|
||||||
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
|
</div>
|
||||||
<legend>参数</legend>
|
|
||||||
</fieldset>
|
<div class="layui-form-item">
|
||||||
<div class="layui-form-item layui-form layui-form-pane" pane>
|
<label class="layui-form-label">begin</label>
|
||||||
<label class="layui-form-label">logFC阈值</label>
|
<div class="layui-input-inline">
|
||||||
<div class="layui-input-inline">
|
<input type="text" name="username" id="begin" lay-verify="number" placeholder="请输入"
|
||||||
<input type="text" name="logFC" id="logFC" lay-verify="required" placeholder="请输入" autocomplete="off"
|
autocomplete="off" class="layui-input">
|
||||||
class="layui-input">
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<label class="layui-form-label">FDR阈值</label>
|
|
||||||
<div class="layui-input-inline">
|
<div class="layui-form-item">
|
||||||
<input type="text" name="FDR" id="FDR" lay-verify="required" placeholder="请输入" autocomplete="off"
|
<label class="layui-form-label">end</label>
|
||||||
class="layui-input">
|
<div class="layui-input-inline">
|
||||||
</div>
|
<input type="text" name="username" id="end" lay-verify="number" placeholder="请输入"
|
||||||
<label class="layui-form-label">GO分类</label>
|
autocomplete="off" class="layui-input">
|
||||||
<div class="layui-input-inline">
|
</div>
|
||||||
<select name="GO_s">
|
</div>
|
||||||
<option value="BP" selected>BP</option>
|
|
||||||
<option value="CC">CC</option>
|
<div class="layui-form-item">
|
||||||
<option value="MF" selected>MF</option>
|
<label class="layui-form-label">Cyclotype</label>
|
||||||
<option value="ALL">ALL</option>
|
<div class="layui-input-block">
|
||||||
</select>
|
<input type="checkbox" id="Cyclotype" name="close" lay-skin="switch" lay-text="ON|OFF">
|
||||||
|
</div>
|
||||||
|
</div> <!-- 开关-默认关 -->
|
||||||
|
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">Codons</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<select name="interest" id="Codons" lay-filter="aihao">
|
||||||
|
<option value="0" selected="">0</option>
|
||||||
|
<option value="1">1</option>
|
||||||
|
<option value="2">2</option>
|
||||||
|
<option value="3">3</option>
|
||||||
|
<option value="4">4</option>
|
||||||
|
<option value="5">5</option>
|
||||||
|
<option value="6">6</option>
|
||||||
|
<option value="7">7</option>
|
||||||
|
<option value="8">8</option>
|
||||||
|
<option value="9">9</option>
|
||||||
|
<option value="10">10</option>
|
||||||
|
<option value="11">11</option>
|
||||||
|
<option value="12">12</option>
|
||||||
|
<option value="13">13</option>
|
||||||
|
<option value="14">14</option>
|
||||||
|
<option value="15">15</option>
|
||||||
|
<option value="16">16</option>
|
||||||
|
<option value="17">17</option>
|
||||||
|
<option value="18">18</option>
|
||||||
|
<option value="19">19</option>
|
||||||
|
<option value="20">20</option>
|
||||||
|
<option value="21">21</option>
|
||||||
|
<option value="22">22</option>
|
||||||
|
<option value="23">23</option>
|
||||||
|
<option value="24">24</option>
|
||||||
|
<option value="25">25</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div> <!-- 单行选择框 -->
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">outfmt</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<select name="interest" id="outfmt" lay-filter="aihao">
|
||||||
|
<option value="0" selected="">0</option>
|
||||||
|
<option value="1">1</option>
|
||||||
|
<option value="2">2</option>
|
||||||
|
<option value="3">3</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div> <!-- 单行选择框 -->
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
|
||||||
|
<div class="layui-btn-container">
|
||||||
|
|
||||||
|
<div id="down">
|
||||||
|
|
||||||
|
<button type="button" class="layui-btn" id="orf_run">run</button>
|
||||||
|
{# <button type="button" class="layui-btn" id="gen_to_fa_down">downlode</button>#}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='layui-row' style="margin-left:80px; margin-top: 20px">
|
</div>
|
||||||
<div class='layui-col-md9'>
|
|
||||||
<div class="layui-btn-container">
|
|
||||||
<button type="button" class="layui-btn" id="run">RUN</button>
|
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
|
||||||
|
<div class="layui-panel">
|
||||||
|
<div style="padding: 20px 30px;">
|
||||||
|
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
|
||||||
|
<ul class="layui-tab-title">
|
||||||
|
<li class="layui-this">function</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="layui-tab-content">
|
||||||
|
<div class="layui-tab-item layui-show">
|
||||||
|
<div style="margin-left: 30px;">
|
||||||
|
<p style="font-size: 20px">Convert standard gff format files to standard gtf
|
||||||
|
format</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
+116
-22
@@ -1,34 +1,128 @@
|
|||||||
<div class='layui-row' style="margin: 50px">
|
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
|
||||||
<div class='layui-col-md3'>
|
|
||||||
<h1 style="font-size: 50px">Pfam</h1>
|
|
||||||
</div>
|
|
||||||
<div class='layui-col-md9'>
|
|
||||||
|
|
||||||
</div>
|
<div class="layui-panel">
|
||||||
|
<div style="padding: 20px 30px;">
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class='layui-row' style="margin-top: 80px; margin-left: 80px">
|
{# 选项#}
|
||||||
|
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
|
||||||
|
<ul class="layui-tab-title">
|
||||||
|
|
||||||
<div class='layui-col-md9 layui-form-pane'>
|
{# 选项卡#}
|
||||||
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
|
<li>pfam</li>
|
||||||
<legend>fasta文件</legend>
|
</ul>
|
||||||
</fieldset>
|
<div class="layui-tab-content" style="height: 100px;">
|
||||||
<div class="layui-btn-container" style="display: inline-block">
|
<form class="layui-form" action="">
|
||||||
<button type="button" class="layui-btn layui-btn-normal" id="select_file">选择文件</button>
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
|
||||||
|
<div class="layui-btn-container">
|
||||||
|
|
||||||
|
<button type="button" class="layui-btn layui-btn-normal" id="select_pfam">select file
|
||||||
|
</button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">clan_overlap</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="username" id="clan_overlap" placeholder="请输入"
|
||||||
|
autocomplete="off" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">align</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="username" id="align" placeholder="请输入"
|
||||||
|
autocomplete="off" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">e_seq</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="username" id="e_seq" placeholder="请输入"
|
||||||
|
autocomplete="off" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">e_dom</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="username" id="e_dom" placeholder="请输入"
|
||||||
|
autocomplete="off" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">b_seq</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="username" id="b_seq" placeholder="请输入"
|
||||||
|
autocomplete="off" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">b_dom</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input type="text" name="username" id="b_dom" placeholder="请输入"
|
||||||
|
autocomplete="off" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
|
||||||
|
<div class="layui-btn-container">
|
||||||
|
|
||||||
|
<div id="down">
|
||||||
|
|
||||||
|
<button type="button" class="layui-btn" id="pfam_run">run</button>
|
||||||
|
{# <button type="button" class="layui-btn" id="gen_to_fa_down">downlode</button>#}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="layui-bg-gray" style="float: left; padding: 30px; width:45%">
|
||||||
|
<div class="layui-panel">
|
||||||
|
<div style="padding: 20px 30px;">
|
||||||
|
<div class="layui-tab layui-tab-brief " lay-filter="docDemoTabBrief" style="width: 100%; height: 1000px">
|
||||||
|
<ul class="layui-tab-title">
|
||||||
|
<li class="layui-this">function</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="layui-tab-content">
|
||||||
|
<div class="layui-tab-item layui-show">
|
||||||
|
<div style="margin-left: 30px;">
|
||||||
|
<p style="font-size: 20px">Convert standard gff format files to standard gtf
|
||||||
|
format</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class='layui-row' style="margin-left:80px; margin-top: 20px">
|
|
||||||
<div class='layui-col-md9'>
|
|
||||||
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
|
|
||||||
<legend>运行</legend>
|
|
||||||
</fieldset>
|
|
||||||
<div class="layui-btn-container">
|
|
||||||
<button type="button" class="layui-btn" id="run">RUN</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -6,5 +6,9 @@ urlpatterns = [
|
|||||||
url("(.*\.html$)", views.out_page),
|
url("(.*\.html$)", views.out_page),
|
||||||
url("gen_to_fa", views.gen_to_fa),
|
url("gen_to_fa", views.gen_to_fa),
|
||||||
url("gff_to_gtf", views.gff_to_gtf),
|
url("gff_to_gtf", views.gff_to_gtf),
|
||||||
url("blast", views.blast)
|
url("blast", views.blast),
|
||||||
|
url("orf", views.orf),
|
||||||
|
url("basics", views.basics),
|
||||||
|
url("pfam", views.pfam),
|
||||||
|
url("Differential_expression_analysis", views.Differential_expression_analysis)
|
||||||
]
|
]
|
||||||
|
|||||||
+64
-11
@@ -1,9 +1,10 @@
|
|||||||
import os, time
|
import os
|
||||||
|
|
||||||
|
from Bio import SeqIO
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
|
||||||
from chart import tools
|
from chart import tools
|
||||||
from Bio import SeqIO
|
|
||||||
|
|
||||||
|
|
||||||
def out_page(request, page):
|
def out_page(request, page):
|
||||||
@@ -43,15 +44,6 @@ def gff_to_gtf(request):
|
|||||||
return JsonResponse(data)
|
return JsonResponse(data)
|
||||||
|
|
||||||
|
|
||||||
def gff_to_gtf(request):
|
|
||||||
file = request.FILES.get("file")
|
|
||||||
file_path, file_id = tools.path_out("chart")
|
|
||||||
tools.keep_file(file, file_path)
|
|
||||||
data = {"id": file_id}
|
|
||||||
os.system(f"{tools.tools_path}/gffread {file_path} -T -o {file_path}.gtf")
|
|
||||||
return JsonResponse(data)
|
|
||||||
|
|
||||||
|
|
||||||
def orf(request):
|
def orf(request):
|
||||||
file = request.FILES.get("file", None)
|
file = request.FILES.get("file", None)
|
||||||
begin = request.POST.get("begin", None)
|
begin = request.POST.get("begin", None)
|
||||||
@@ -66,3 +58,64 @@ def orf(request):
|
|||||||
os.system(
|
os.system(
|
||||||
f"{tools.tools_path}/ORFfinder {file_path} -b {begin} -e {end} -c {'t' if Cyclotype == 'YES' else 'f'} -g {Codons} -outfmt {outfmt} -out {file_path}.txt")
|
f"{tools.tools_path}/ORFfinder {file_path} -b {begin} -e {end} -c {'t' if Cyclotype == 'YES' else 'f'} -g {Codons} -outfmt {outfmt} -out {file_path}.txt")
|
||||||
return JsonResponse(data)
|
return JsonResponse(data)
|
||||||
|
|
||||||
|
|
||||||
|
def basics(request):
|
||||||
|
file = request.FILES.get("file", None)
|
||||||
|
# Sequence_cleaning = request.POST.get("Sequence_cleaning", None) # 序列清洗
|
||||||
|
# Sequence_length = request.POST.get("Sequence_length", None) # 序列长度
|
||||||
|
# GC_content = request.POST.get("GC_content", None) # GC含量
|
||||||
|
# Sequence_flip = request.POST.get("Sequence_flip", None) # 序列翻转
|
||||||
|
# Reverse_complementarity = request.POST.get("Reverse_complementarity", None) # 反向互补
|
||||||
|
# Codon_preference = request.POST.get("Codon_preference", None) # 密码子偏好性
|
||||||
|
# Codon_frequency = request.POST.get("Codon_frequency", None) # 密码子频率
|
||||||
|
file_path, file_id = tools.path_out("chart")
|
||||||
|
tools.keep_file(file, file_path)
|
||||||
|
|
||||||
|
josn = {}
|
||||||
|
for i in request.GET.lists():
|
||||||
|
if i[0] not in ['_', 'file', 'k']:
|
||||||
|
josn[i[0]] = i[1][0]
|
||||||
|
|
||||||
|
data = {"id": file_id}
|
||||||
|
|
||||||
|
tools.Basics(file_path, josn)
|
||||||
|
|
||||||
|
return JsonResponse(data)
|
||||||
|
|
||||||
|
|
||||||
|
def pfam(request):
|
||||||
|
file = request.FILES.get("file", None)
|
||||||
|
b_dom = request.POST.get("b_dom", None)
|
||||||
|
b_seq = request.POST.get("b_seq", None)
|
||||||
|
e_dom = request.POST.get("e_dom", None)
|
||||||
|
e_seq = request.POST.get("e_seq", None)
|
||||||
|
align = request.POST.get("align", None)
|
||||||
|
clan_overlap = request.POST.get("clan_overlap", None)
|
||||||
|
|
||||||
|
file_path, file_id = tools.path_out("chart")
|
||||||
|
tools.keep_file(file, file_path)
|
||||||
|
data = {"id": file_id}
|
||||||
|
os.system(
|
||||||
|
f"{tools.tools_path}/pfam_scan.pl -fasta {file_path} -b_dom {b_dom} -b_seq {b_seq} -e_dom {e_dom} -e_seq {e_seq} -align {align} -clan_overlap {clan_overlap} -dir {tools.tools_path}/db/ -out {file_path}.txt")
|
||||||
|
|
||||||
|
return JsonResponse(data)
|
||||||
|
|
||||||
|
|
||||||
|
def Differential_expression_analysis(request):
|
||||||
|
if request.method == 'POST':
|
||||||
|
files = request.FILES.getlist('files')
|
||||||
|
|
||||||
|
file_path, file_id = tools.path_out("chart")
|
||||||
|
for f in files:
|
||||||
|
ty = (f.name).split(".")[-1]
|
||||||
|
destination = open('%s/%s' % (file_path, ty), 'wb')
|
||||||
|
for chunk in f.chunks():
|
||||||
|
destination.write(chunk)
|
||||||
|
|
||||||
|
destination.close()
|
||||||
|
|
||||||
|
file_path, file_id = tools.path_out("chart")
|
||||||
|
data = {"id": file_id}
|
||||||
|
|
||||||
|
return JsonResponse(data)
|
||||||
|
|||||||
Reference in New Issue
Block a user