diff options
-rw-r--r-- | wqflask/wqflask/gsearch.py | 35 | ||||
-rw-r--r-- | wqflask/wqflask/static/new/css/show_trait.css | 4 | ||||
-rw-r--r-- | wqflask/wqflask/templates/gsearch_gene.html | 217 | ||||
-rw-r--r-- | wqflask/wqflask/templates/show_trait_details.html | 12 | ||||
-rw-r--r-- | wqflask/wqflask/templates/snp_browser.html | 2 |
5 files changed, 163 insertions, 107 deletions
diff --git a/wqflask/wqflask/gsearch.py b/wqflask/wqflask/gsearch.py index 94965507..99dd087d 100644 --- a/wqflask/wqflask/gsearch.py +++ b/wqflask/wqflask/gsearch.py @@ -7,6 +7,8 @@ from db import webqtlDatabaseFunction from base import webqtlConfig +from wqflask import user_manager + from utility.type_checking import is_float, is_int, is_str, get_float, get_int, get_string from utility.benchmark import Bench @@ -30,6 +32,7 @@ class GSearch(object): InbredSet.`Name` AS inbredset_name, Tissue.`Name` AS tissue_name, ProbeSetFreeze.Name AS probesetfreeze_name, + ProbeSetFreeze.FullName AS probesetfreeze_fullname, ProbeSet.Name AS probeset_name, ProbeSet.Symbol AS probeset_symbol, ProbeSet.`description` AS probeset_description, @@ -58,30 +61,38 @@ class GSearch(object): re = g.db.execute(sql).fetchall() self.trait_list = [] with Bench("Creating trait objects"): - for line in re: + for i, line in enumerate(re): this_trait = {} - this_trait['name'] = line[4] + this_trait['index'] = i + 1 + this_trait['name'] = line[5] this_trait['dataset'] = line[3] + this_trait['dataset_fullname'] = line[4] + this_trait['hmac'] = user_manager.data_hmac('{}:{}'.format(line[4], line[3])) this_trait['species'] = line[0] this_trait['group'] = line[1] this_trait['tissue'] = line[2] - this_trait['symbol'] = line[5] - this_trait['description'] = line[6] + this_trait['symbol'] = line[6] + this_trait['description'] = line[7] this_trait['location_repr'] = 'N/A' - if (line[7] != "NULL" and line[7] != "") and (line[8] != 0): - this_trait['location_repr'] = 'Chr%s: %.6f' % (line[7], float(line[8])) - this_trait['mean'] = line[9] + if (line[8] != "NULL" and line[8] != "") and (line[9] != 0): + this_trait['location_repr'] = 'Chr%s: %.6f' % (line[8], float(line[9])) + this_trait['mean'] = round(line[10], 3) this_trait['LRS_score_repr'] = "N/A" - if line[10] != "" and line[10] != None: - this_trait['LRS_score_repr'] = '%3.1f' % line[10] + if line[11] != "" and line[11] != None: + this_trait['LRS_score_repr'] = round(line[10], 1) this_trait['additive'] = "N/A" - if line[13] != "": - this_trait['additive'] = line[13] + if line[14] != "" and line[14] != None: + this_trait['additive'] = round(line[14], 3) #dataset = create_dataset(line[3], "ProbeSet", get_samplelist=False) #trait_id = line[4] #with Bench("Building trait object"): - #this_trait = GeneralTrait(dataset=dataset, name=trait_id, get_qtl_info=False, get_sample_info=False) + trait_ob = GeneralTrait(dataset_name=this_trait['dataset'], name=this_trait['name'], get_qtl_info=True, get_sample_info=False) + max_lrs_text = "N/A" + if trait_ob.locus_chr != "" and trait_ob.locus_mb != "": + max_lrs_text = "Chr" + str(trait_ob.locus_chr) + ": " + str(trait_ob.locus_mb) + this_trait['max_lrs_text'] = max_lrs_text + self.trait_list.append(this_trait) elif self.type == "phenotype": diff --git a/wqflask/wqflask/static/new/css/show_trait.css b/wqflask/wqflask/static/new/css/show_trait.css index 59901404..09d5e1e3 100644 --- a/wqflask/wqflask/static/new/css/show_trait.css +++ b/wqflask/wqflask/static/new/css/show_trait.css @@ -14,7 +14,7 @@ div.sample_group { left: 100px; } -table.dataTable thead th{ +table.dataTable thead th, table.dataTable tfoot th{ border-right: 1px solid white; color: white; background-color: #369; @@ -27,7 +27,7 @@ table.dataTable thead .sorting_desc { background-image: url("../packages/DataTables/images/sort_desc_disabled.png"); } -table.dataTable thead th { +table.dataTable thead th, table.dataTable tfoot { padding: 4px 18px 4px 10px; } diff --git a/wqflask/wqflask/templates/gsearch_gene.html b/wqflask/wqflask/templates/gsearch_gene.html index ff5c56f1..5433f2c5 100644 --- a/wqflask/wqflask/templates/gsearch_gene.html +++ b/wqflask/wqflask/templates/gsearch_gene.html @@ -7,7 +7,7 @@ {% block content %} <!-- Start of body --> - <div class="container"> + <div class="container" style="width: 2000px;"> <p>You searched for {{ terms }}.</p> <p>To study a record, click on its Record ID below.<br />Check records below and click Add button to add to selection.</p> @@ -30,59 +30,9 @@ <br /> <div style="width: 100%;"> <table id="trait_table" class="table-hover table-striped cell-border" style="float: left;"> - <thead> - <tr> - <th></th> - <th data-export="Index">Index</th> - <th data-export="Record">Record ID</th> - <th data-export="Species">Species</th> - <th data-export="Group">Group</th> - <th data-export="Tissue">Tissue</th> - <th data-export="Dataset">Dataset</th> - <th data-export="Symbol">Symbol</th> - <th data-export="Description">Description</th> - <th data-export="Location">Location</th> - <th data-export="Mean">Mean</th> - <th data-export="Max LRS">Max LRS <a href="http://genenetwork.org//glossary.html#LRS" target="_blank" style="color: white;"><sup>?</sup></a></th> - <th data-export="Additive Effect">Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank" style="color: white;"><sup>?</sup></a></th> - </tr> - </thead> <tbody> - {% for this_trait in trait_list %} - <tr id="trait:{{ this_trait.name }}:{{ this_trait.dataset }}"> - <td align="center" style="padding: 0px;"><input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset)) }}"></td> - <td align="right" data-export="{{ loop.index }}">{{ loop.index }}</td> - <td data-export="{{ this_trait.name }}"><a href="{{ url_for('show_trait_page', trait_id = this_trait.name, dataset = this_trait.dataset)}}">{{ this_trait.name }}</a></td> - <td data-export="{{ this_trait.species }}">{{ this_trait.species }}</td> - <td data-export="{{ this_trait.group }}">{{ this_trait.group }}</td> - <td data-export="{{ this_trait.tissue }}">{{ this_trait.tissue }}</td> - <td data-export="{{ this_trait.dataset }}">{{ this_trait.dataset }}</td> - <td data-export="{{ this_trait.symbol }}">{{ this_trait.symbol }}</td> - <td data-export="{{ this_trait.description }}">{{ this_trait.description }}</td> - <td data-export="{{ this_trait.location_repr }}" align="right">{{ this_trait.location_repr }}</td> - <td data-export="{{ '%0.3f' % this_trait.mean|float }}" align="right">{{ '%0.3f' % this_trait.mean|float }}</td> - <td data-export="{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}" align="right">{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}</td> - <td data-export="{% if this_trait.additive != "" %}{{ '%0.3f' % this_trait.additive|float }}{% else %}N/A{% endif %}" align="right">{% if this_trait.additive != "" %}{{ '%0.3f' % this_trait.additive|float }}{% else %}N/A{% endif %}</td> - </tr> - {% endfor %} + <td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td> </tbody> - <tfoot> - <tr> - <th></th> - <th>Index</th> - <th>Record ID</th> - <th>Species</th> - <th>Group</th> - <th>Tissue</th> - <th>Dataset</th> - <th>Symbol</th> - <th>Description</th> - <th>Location</th> - <th>Mean</th> - <th data-export="Max LRS">Max LRS <a href="http://genenetwork.org//glossary.html#LRS" target="_blank" style="color: white;"><sup>?</sup></a></th> - <th data-export="Additive Effect">Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank" style="color: white;"><sup>?</sup></a></th> - </tr> - </tfoot> </table> </div> </div> @@ -100,7 +50,11 @@ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script> <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colReorder.js"></script> <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colResize.js"></script> - + + <script type='text/javascript'> + var the_rows = {{ trait_list|safe }}; + </script> + <script type="text/javascript" charset="utf-8"> $.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col ) { @@ -119,49 +73,138 @@ console.time("Creating table"); $('#trait_table').DataTable( { - "createdRow": function ( row, data, index ) { + 'createdRow': function ( row, data, index ) { + $('td', row).eq(0).attr("style", "text-align: center; padding: 4px 10px 2px 10px;"); + $('td', row).eq(1).attr("align", "right"); + $('td', row).slice(10,14).attr("align", "right"); $('td', row).eq(8).attr('title', $('td', row).eq(8).text()); - if ($('td', row).eq(8).text().length > 50) { - $('td', row).eq(8).text($('td', row).eq(8).text().substring(0, 50)); + if ($('td', row).eq(8).text().length > 45) { + $('td', row).eq(8).text($('td', row).eq(8).text().substring(0, 45)); $('td', row).eq(8).text($('td', row).eq(8).text() + '...') } + $('td', row).eq(5).attr('title', $('td', row).eq(5).text()); + if ($('td', row).eq(5).text().length > 25) { + $('td', row).eq(5).text($('td', row).eq(5).text().substring(0, 25)); + $('td', row).eq(5).text($('td', row).eq(5).text() + '...') + } + $('td', row).eq(6).attr('title', $('td', row).eq(6).text()); + if ($('td', row).eq(6).text().length > 35) { + $('td', row).eq(6).text($('td', row).eq(6).text().substring(0, 35)); + $('td', row).eq(6).text($('td', row).eq(6).text() + '...') + } }, - "paging": false, - "columns": [ - { "orderDataType": "dom-checkbox" }, - { "type": "natural", "width": "3%" }, - { "type": "natural", "width": "6%" }, - { "type": "natural", "width": "8%" }, - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural" }, - { "type": "natural", "width": "7%" }, - { "type": "natural", "width": "4%" }, - { "type": "natural", "width": "5%" }, - { "type": "natural", "width": "5%" } - ], - "columnDefs": [ + 'data': the_rows, + 'columns': [ + { + 'data': null, + 'orderDataType': "dom-checkbox", + 'render': function(data, type, row, meta) { + return '<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + data.hmac + '">' + } + }, + { + 'title': "Index", + 'type': "natural", + 'data': "index" + }, + { + 'title': "Record ID", + 'type': "natural", + 'data': null, + 'render': function(data, type, row, meta) { + return '<a href="/show_trait?trait_id=' + data.name + '&dataset=' + data.dataset + '">' + data.name + '</a>' + } + }, + { + 'title': "Species", + 'type': "natural", + 'data': "species" + }, + { + 'title': "Group", + 'type': "natural", + 'data': "group" + }, + { + 'title': "Tissue", + 'type': "natural", + 'data': "tissue" + }, + { + 'title': "Dataset", + 'type': "natural", + 'data': "dataset_fullname" + }, + { + 'title': "Symbol", + 'type': "natural", + 'data': "symbol" + }, + { + 'title': "Description", + 'type': "natural", + 'data': "description" + }, + { + 'title': "Location", + 'type': "natural", + 'data': "location_repr" + }, { - "targets": 0, - "orderable": false, - "orderDataType": "dom-checkbox" + 'title': "Mean", + 'type': "natural", + 'data': "mean" + }, + { + 'title': "Max LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>", + 'type': "natural", + 'data': "LRS_score_repr" + }, + { + 'title': "Max LRS Location", + 'type': "natural", + 'data': "max_lrs_text" + }, + { + 'title': "Additive Effect<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>", + 'type': "natural", + 'data': "additive" } ], - "order": [[1, "asc" ]], - "sDom": "tir", - "autoWidth": false, - "deferRender": true, - "bSortClasses": false, - "scrollY": "600px", - "scrollCollapse": true, - "scroller": true, - "scrollX": true, - "paging": false, - "orderClasses": true + 'order': [[1, "asc" ]], + 'sDom': "tir", + 'autoWidth': true, + 'deferRender': true, + 'paging': false, + 'orderClasses': true, + 'processing': true, + 'language': { + 'loadingRecords': ' ', + 'processing': 'Loading...' + } } ); + $('#trait_table').append( + '<tfoot>' + + '<tr>' + + '<th></th>' + + '<th>Index</th>' + + '<th>Record ID</th>' + + '<th>Species</th> ' + + '<th>Group</th>' + + '<th>Tissue</th>' + + '<th>Dataset</th>' + + '<th>Symbol</th>' + + '<th>Description</th>' + + '<th>Location</th>' + + '<th>Mean</th>' + + '<th>Max LRS <a href="http://genenetwork.org//glossary.html#LRS" target="_blank" style="color: white;"><sup>?</sup></a></th>' + + '<th>Max LRS Location</th>' + + '<th>Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank" style="color: white;"><sup>?</sup></a></th>' + + '</tr>' + + '</tfoot>' + ); + console.timeEnd("Creating table"); }); diff --git a/wqflask/wqflask/templates/show_trait_details.html b/wqflask/wqflask/templates/show_trait_details.html index 96675306..566ea7ca 100644 --- a/wqflask/wqflask/templates/show_trait_details.html +++ b/wqflask/wqflask/templates/show_trait_details.html @@ -112,25 +112,27 @@ </a> {% if this_trait.dataset.type == 'ProbeSet' %} {% if this_trait.symbol != None %} - <a href="http://www.genenetwork.org/webqtl/main.py?cmd=sch&gene={{ this_trait.symbol }}&alias=1&species={{ dataset.group.species }}"> + <a target="_blank" href="http://www.genenetwork.org/webqtl/main.py?cmd=sch&gene={{ this_trait.symbol }}&alias=1&species={{ dataset.group.species }}"> <button type="button" class="btn btn-default" title="Find similar expression data">Find</button> </a> {% endif %} {% if UCSC_BLAT_URL != "" %} - <a href="{{ UCSC_BLAT_URL }}"> + <a target="_blank" href="{{ UCSC_BLAT_URL }}"> <button type="button" class="btn btn-default" title="Check probe locations at UCSC">Verify</button> </a> {% endif %} {% if this_trait.symbol != None %} - <a href="http://genenetwork.org/webqtl/main.py?FormID=geneWiki&symbol={{ this_trait.symbol }}"> + <a target="_blank" href="http://genenetwork.org/webqtl/main.py?FormID=geneWiki&symbol={{ this_trait.symbol }}"> <button type="button" class="btn btn-default" title="Write or review comments about this gene">GeneWiki</button> </a> - <a href="http://genenetwork.org/webqtl/main.py?FormID=SnpBrowserResultPage&submitStatus=1&diffAlleles=True&customStrain=True&geneName={{ this_trait.symbol }}"> + {% if dataset.group.species == "mouse" or dataset.group.species == "rat" %} + <a href="./snp_browser?first_run=true&species={{ dataset.group.species }}&gene_name={{ this_trait.symbol }}&limit_strains=on"> <button type="button" class="btn btn-default" title="View SNPs and Indels">SNPs</button> </a> {% endif %} + {% endif %} {% if show_probes == "True" %} - <a href="http://genenetwork.org/webqtl/main.py?FormID=showProbeInfo&database={{ this_trait.dataset.name }}&ProbeSetID={{ this_trait.name }}&CellID={{ this_trait.cellid }}&RISet={{ dataset.group.name }}&incparentsf1=ON"> + <a target="_blank" href="http://genenetwork.org/webqtl/main.py?FormID=showProbeInfo&database={{ this_trait.dataset.name }}&ProbeSetID={{ this_trait.name }}&CellID={{ this_trait.cellid }}&RISet={{ dataset.group.name }}&incparentsf1=ON"> <button type="button" class="btn btn-default" title="Check sequence of probes">Probes</button> </a> {% endif %} diff --git a/wqflask/wqflask/templates/snp_browser.html b/wqflask/wqflask/templates/snp_browser.html index 8ae763fa..87cbab84 100644 --- a/wqflask/wqflask/templates/snp_browser.html +++ b/wqflask/wqflask/templates/snp_browser.html @@ -183,7 +183,7 @@ <div style="margin-top: 20px;"> {% if filtered_results is defined %} {% if filtered_results|length > limit_number %} - There are more than 5000 results. Consider limiting your search to a smaller range. + There are more than 10000 results. Consider limiting your search to a smaller range. {% else %} <table class="dataTable cell-border nowrap" id="results_table" style="float: left;"> <thead> |