aboutsummaryrefslogtreecommitdiff
path: root/wqflask
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask')
-rw-r--r--wqflask/base/trait.py26
-rw-r--r--wqflask/utility/corr_result_helpers.py2
-rw-r--r--wqflask/wqflask/comparison_bar_chart/__init__.py0
-rw-r--r--wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py118
-rw-r--r--wqflask/wqflask/gsearch.py58
-rw-r--r--wqflask/wqflask/marker_regression/marker_regression_gn1.py76
-rw-r--r--wqflask/wqflask/static/new/javascript/comparison_bar_chart.js25
-rw-r--r--wqflask/wqflask/static/new/javascript/dataset_menu_structure.json52
-rw-r--r--wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js491
-rw-r--r--wqflask/wqflask/static/new/javascript/draw_probability_plot.js2
-rw-r--r--wqflask/wqflask/static/new/javascript/get_traits_from_collection.js92
-rw-r--r--wqflask/wqflask/static/new/javascript/plotly_probability_plot.js13
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait.js26
-rw-r--r--wqflask/wqflask/templates/collections/add.html32
-rw-r--r--wqflask/wqflask/templates/collections/list.html1
-rw-r--r--wqflask/wqflask/templates/collections/view.html25
-rw-r--r--wqflask/wqflask/templates/comparison_bar_chart.html39
-rw-r--r--wqflask/wqflask/templates/corr_scatterplot.html348
-rw-r--r--wqflask/wqflask/templates/correlation_matrix.html4
-rw-r--r--wqflask/wqflask/templates/gsearch_gene.html20
-rw-r--r--wqflask/wqflask/templates/gsearch_pheno.html16
-rw-r--r--wqflask/wqflask/templates/show_trait_edit_data.html1
-rw-r--r--wqflask/wqflask/templates/show_trait_mapping_tools.html10
-rw-r--r--wqflask/wqflask/user_manager.py19
-rw-r--r--wqflask/wqflask/views.py22
25 files changed, 1034 insertions, 484 deletions
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index b71dacf6..3daf9ea9 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -18,7 +18,7 @@ import simplejson as json
from MySQLdb import escape_string as escape
from pprint import pformat as pf
-from flask import Flask, g, request
+from flask import Flask, g, request, url_for
from utility.logger import getLogger
logger = getLogger(__name__ )
@@ -176,13 +176,23 @@ def get_sample_data():
trait_ob = GeneralTrait(name=trait, dataset_name=dataset)
- return json.dumps([trait, {key: value.value for key, value in trait_ob.data.iteritems() }])
-
- #jsonable_sample_data = {}
- #for sample in trait_ob.data.iteritems():
- # jsonable_sample_data[sample] = trait_ob.data[sample].value
- #
- #return jsonable_sample_data
+ trait_dict = {}
+ trait_dict['name'] = trait
+ trait_dict['db'] = dataset
+ trait_dict['type'] = trait_ob.dataset.type
+ trait_dict['group'] = trait_ob.dataset.group.name
+ trait_dict['tissue'] = trait_ob.dataset.tissue
+ trait_dict['species'] = trait_ob.dataset.group.species
+ trait_dict['url'] = url_for('show_trait_page', trait_id = trait, dataset = dataset)
+ trait_dict['description'] = trait_ob.description_display
+ if trait_ob.dataset.type == "ProbeSet":
+ trait_dict['symbol'] = trait_ob.symbol
+ trait_dict['location'] = trait_ob.location_repr
+ elif trait_ob.dataset.type == "Publish":
+ trait_dict['pubmed_link'] = trait_ob.pubmed_link
+ trait_dict['pubmed_text'] = trait_ob.pubmed_text
+
+ return json.dumps([trait_dict, {key: value.value for key, value in trait_ob.data.iteritems() }])
def jsonable(trait):
"""Return a dict suitable for using as json
diff --git a/wqflask/utility/corr_result_helpers.py b/wqflask/utility/corr_result_helpers.py
index ef644d85..b543c589 100644
--- a/wqflask/utility/corr_result_helpers.py
+++ b/wqflask/utility/corr_result_helpers.py
@@ -15,7 +15,7 @@ def normalize_values(a_values, b_values):
a_new = []
b_new = []
for counter in range(min_length):
- if a_values[counter] and b_values[counter]:
+ if (a_values[counter] or a_values[counter] == 0) and (b_values[counter] or b_values[counter] == 0):
a_new.append(a_values[counter])
b_new.append(b_values[counter])
diff --git a/wqflask/wqflask/comparison_bar_chart/__init__.py b/wqflask/wqflask/comparison_bar_chart/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/wqflask/comparison_bar_chart/__init__.py
diff --git a/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py b/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
new file mode 100644
index 00000000..b9e6f450
--- /dev/null
+++ b/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
@@ -0,0 +1,118 @@
+## Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License
+# as published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU Affero General Public License for more details.
+#
+# This program is available from Source Forge: at GeneNetwork Project
+# (sourceforge.net/projects/genenetwork/).
+#
+# Contact Dr. Robert W. Williams at rwilliams@uthsc.edu
+#
+#
+# This module is used by GeneNetwork project (www.genenetwork.org)
+
+from __future__ import absolute_import, print_function, division
+
+import sys
+# sys.path.append(".") Never do this in a webserver!
+
+import string
+import cPickle
+import os
+import time
+import pp
+import math
+import collections
+import resource
+
+
+from pprint import pformat as pf
+
+from htmlgen import HTMLgen2 as HT
+import reaper
+
+from base.trait import GeneralTrait
+from base import data_set
+from utility import webqtlUtil, helper_functions, corr_result_helpers
+from db import webqtlDatabaseFunction
+import utility.webqtlUtil #this is for parallel computing only.
+from wqflask.correlation import correlation_functions
+from utility.benchmark import Bench
+
+from MySQLdb import escape_string as escape
+
+from pprint import pformat as pf
+
+from flask import Flask, g
+
+
+class ComparisonBarChart(object):
+
+ def __init__(self, start_vars):
+ trait_db_list = [trait.strip() for trait in start_vars['trait_list'].split(',')]
+
+ helper_functions.get_trait_db_obs(self, trait_db_list)
+
+ self.all_sample_list = []
+ self.traits = []
+ self.insufficient_shared_samples = False
+ this_group = self.trait_list[0][1].group.name #ZS: Getting initial group name before verifying all traits are in the same group in the following loop
+ for trait_db in self.trait_list:
+
+ if trait_db[1].group.name != this_group:
+ self.insufficient_shared_samples = True
+ break
+ else:
+ this_group = trait_db[1].group.name
+ this_trait = trait_db[0]
+ self.traits.append(this_trait)
+
+ this_sample_data = this_trait.data
+
+ for sample in this_sample_data:
+ if sample not in self.all_sample_list:
+ self.all_sample_list.append(sample)
+
+ if self.insufficient_shared_samples:
+ pass
+ else:
+ self.sample_data = []
+ for trait_db in self.trait_list:
+ this_trait = trait_db[0]
+ this_sample_data = this_trait.data
+
+ this_trait_vals = []
+ for sample in self.all_sample_list:
+ if sample in this_sample_data:
+ this_trait_vals.append(this_sample_data[sample].value)
+ else:
+ this_trait_vals.append('')
+ self.sample_data.append(this_trait_vals)
+
+ self.js_data = dict(traits = [trait.name for trait in self.traits],
+ samples = self.all_sample_list,
+ sample_data = self.sample_data,)
+
+ def get_trait_db_obs(self, trait_db_list):
+
+ self.trait_list = []
+ for i, trait_db in enumerate(trait_db_list):
+ if i == (len(trait_db_list) - 1):
+ break
+ trait_name, dataset_name = trait_db.split(":")
+ #print("dataset_name:", dataset_name)
+ dataset_ob = data_set.create_dataset(dataset_name)
+ trait_ob = GeneralTrait(dataset=dataset_ob,
+ name=trait_name,
+ cellid=None)
+ self.trait_list.append((trait_ob, dataset_ob))
+
+ #print("trait_list:", self.trait_list)
+
diff --git a/wqflask/wqflask/gsearch.py b/wqflask/wqflask/gsearch.py
index fe1e17d2..37eb46cb 100644
--- a/wqflask/wqflask/gsearch.py
+++ b/wqflask/wqflask/gsearch.py
@@ -5,6 +5,8 @@ from base.data_set import create_dataset
from base.trait import GeneralTrait
from db import webqtlDatabaseFunction
+from base import webqtlConfig
+
from utility.type_checking import is_float, is_int, is_str, get_float, get_int, get_string
from utility.benchmark import Bench
@@ -57,10 +59,29 @@ class GSearch(object):
self.trait_list = []
with Bench("Creating trait objects"):
for line in re:
- dataset = create_dataset(line[3], "ProbeSet", get_samplelist=False)
- trait_id = line[4]
+ this_trait = {}
+ this_trait['name'] = line[4]
+ this_trait['dataset'] = 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['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]
+ this_trait['LRS_score_repr'] = "N/A"
+ if line[10] != "" and line[10] != None:
+ this_trait['LRS_score_repr'] = '%3.1f' % line[10]
+ this_trait['additive'] = "N/A"
+ if line[13] != "":
+ this_trait['additive'] = line[13]
+
+ #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=True, get_sample_info=False)
+ #this_trait = GeneralTrait(dataset=dataset, name=trait_id, get_qtl_info=False, get_sample_info=False)
self.trait_list.append(this_trait)
elif self.type == "phenotype":
@@ -73,8 +94,8 @@ class GSearch(object):
Phenotype.`Post_publication_description`,
Publication.`Authors`,
Publication.`Year`,
+ Publication.`PubMed_ID`,
PublishXRef.`LRS`,
- PublishXRef.`Locus`,
PublishXRef.`additive`
FROM Species,InbredSet,PublishFreeze,PublishXRef,Phenotype,Publication
WHERE PublishXRef.`InbredSetId`=InbredSet.`Id`
@@ -100,7 +121,30 @@ class GSearch(object):
self.trait_list = []
with Bench("Creating trait objects"):
for line in re:
- dataset = create_dataset(line[2], "Publish")
- trait_id = line[3]
- this_trait = GeneralTrait(dataset=dataset, name=trait_id, get_qtl_info=True, get_sample_info=False)
+ this_trait = {}
+ this_trait['name'] = line[3]
+ this_trait['dataset'] = line[2]
+ this_trait['species'] = line[0]
+ this_trait['group'] = line[1]
+ this_trait['description'] = line[4]
+ this_trait['authors'] = line[5]
+ this_trait['year'] = line[6]
+ if this_trait['year'].isdigit():
+ this_trait['pubmed_text'] = this_trait['year']
+ else:
+ this_trait['pubmed_text'] = "N/A"
+ if line[7] != "" and line[7] != None:
+ this_trait['pubmed_link'] = webqtlConfig.PUBMEDLINK_URL % line[7]
+ else:
+ this_trait['pubmed_link'] = "N/A"
+ this_trait['LRS_score_repr'] = "N/A"
+ if line[8] != "" and line[8] != None:
+ this_trait['LRS_score_repr'] = '%3.1f' % line[8]
+ this_trait['additive'] = "N/A"
+ if line[9] != "":
+ this_trait['additive'] = line[9]
+
+ #dataset = create_dataset(line[2], "Publish")
+ #trait_id = line[3]
+ #this_trait = GeneralTrait(dataset=dataset, name=trait_id, get_qtl_info=True, get_sample_info=False)
self.trait_list.append(this_trait)
diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py
index 40402597..94145bb3 100644
--- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py
+++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py
@@ -68,12 +68,10 @@ class MarkerRegression(object):
# ** GENES **********
BAND_SPACING = 4
- #ENSEMBL_BAND_Y = UCSC_BAND_Y + UCSC_BAND_HEIGHT + BAND_SPACING
- UCSC_BAND_HEIGHT = 10
- ENSEMBL_BAND_HEIGHT = 10
- WEBQTL_BAND_HEIGHT = 10
+ BAND_HEIGHT = 10
+ BAND_HEIGHT = 10
+ BAND_HEIGHT = 10
- #GENE_START_Y = ENSEMBL_BAND_Y + ENSEMBL_BAND_HEIGHT + BAND_SPACING
NUM_GENE_ROWS = 10
EACH_GENE_HEIGHT = 6 # number of pixels tall, for each gene to display
EACH_GENE_ARROW_WIDTH = 5
@@ -124,6 +122,10 @@ class MarkerRegression(object):
CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR = pid.HexColor(0xFCE9E9)
CLICKABLE_WEBQTL_TEXT_COLOR = pid.HexColor(0x912828)
+ CLICKABLE_PHENOGEN_REGION_COLOR = pid.HexColor(0xA2FB94)
+ CLICKABLE_PHENOGEN_REGION_OUTLINE_COLOR = pid.HexColor(0xCEFEC7)
+ CLICKABLE_PHENOGEN_TEXT_COLOR = pid.HexColor(0x1FD504)
+
CLICKABLE_UCSC_REGION_COLOR = pid.HexColor(0xDDDDEE)
CLICKABLE_UCSC_REGION_OUTLINE_COLOR = pid.HexColor(0xEDEDFF)
CLICKABLE_UCSC_TEXT_COLOR = pid.HexColor(0x333366)
@@ -498,7 +500,10 @@ class MarkerRegression(object):
#Drawing Area Height
drawAreaHeight = plotHeight
if self.plotScale == 'physic' and self.selectedChr > -1:
- drawAreaHeight -= self.ENSEMBL_BAND_HEIGHT + self.UCSC_BAND_HEIGHT+ self.WEBQTL_BAND_HEIGHT + 3*self.BAND_SPACING+ 10*zoom
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ drawAreaHeight -= 4*self.BAND_HEIGHT + 4*self.BAND_SPACING+ 10*zoom
+ else:
+ drawAreaHeight -= 3*self.BAND_HEIGHT + 3*self.BAND_SPACING+ 10*zoom
if self.geneChecked:
drawAreaHeight -= self.NUM_GENE_ROWS*self.EACH_GENE_HEIGHT + 3*self.BAND_SPACING + 10*zoom
else:
@@ -1023,7 +1028,10 @@ class MarkerRegression(object):
#Draw Genes
geneYLocation = yPaddingTop + (gIndex % self.NUM_GENE_ROWS) * self.EACH_GENE_HEIGHT*zoom
- geneYLocation += self.UCSC_BAND_HEIGHT + self.BAND_SPACING + self.ENSEMBL_BAND_HEIGHT + self.BAND_SPACING + self.WEBQTL_BAND_HEIGHT + self.BAND_SPACING
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ geneYLocation += 4*self.BAND_HEIGHT + 4*self.BAND_SPACING
+ else:
+ geneYLocation += 3*self.BAND_HEIGHT + 3*self.BAND_SPACING
#draw the detail view
if self.endMb - self.startMb <= self.DRAW_DETAIL_MB and geneEndPix - geneStartPix > self.EACH_GENE_ARROW_SPACING * 3:
@@ -1217,7 +1225,10 @@ class MarkerRegression(object):
#Draw Genes
geneYLocation = yPaddingTop + self.NUM_GENE_ROWS * (self.EACH_GENE_HEIGHT)*zoom
- geneYLocation += self.UCSC_BAND_HEIGHT + self.BAND_SPACING + self.ENSEMBL_BAND_HEIGHT + self.BAND_SPACING + self.WEBQTL_BAND_HEIGHT + self.BAND_SPACING
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ geneYLocation += 4*self.BAND_HEIGHT + 4*self.BAND_SPACING
+ else:
+ geneYLocation += 3*self.BAND_HEIGHT + 3*self.BAND_SPACING
if self.genotype[0][i].name != " - " :
@@ -1335,49 +1346,70 @@ class MarkerRegression(object):
i = 0
paddingTop = yTopOffset
- ucscPaddingTop = paddingTop + self.WEBQTL_BAND_HEIGHT + self.BAND_SPACING
- ensemblPaddingTop = ucscPaddingTop + self.UCSC_BAND_HEIGHT + self.BAND_SPACING
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ phenogenPaddingTop = paddingTop + (self.BAND_HEIGHT + self.BAND_SPACING)
+ ucscPaddingTop = paddingTop + 2*(self.BAND_HEIGHT + self.BAND_SPACING)
+ ensemblPaddingTop = paddingTop + 3*(self.BAND_HEIGHT + self.BAND_SPACING)
+ else:
+ ucscPaddingTop = paddingTop + (self.BAND_HEIGHT + self.BAND_SPACING)
+ ensemblPaddingTop = paddingTop + 2*(self.BAND_HEIGHT + self.BAND_SPACING)
if zoom == 1:
for pixel in range(xLeftOffset, xLeftOffset + plotWidth, pixelStep):
calBase = self.kONE_MILLION*(startMb + (endMb-startMb)*(pixel-xLeftOffset-0.0)/plotWidth)
+ if pixel == (xLeftOffset + pixelStep*2):
+ logger.debug("CALBASE:", calBase)
+ logger.debug("FLANKING:", flankingWidthInBases)
xBrowse1 = pixel
xBrowse2 = min(xLeftOffset + plotWidth, (pixel + pixelStep - 1))
- WEBQTL_COORDS = "%d, %d, %d, %d" % (xBrowse1, paddingTop, xBrowse2, (paddingTop+self.WEBQTL_BAND_HEIGHT))
+ WEBQTL_COORDS = "%d, %d, %d, %d" % (xBrowse1, paddingTop, xBrowse2, (paddingTop+self.BAND_HEIGHT))
WEBQTL_HREF = "javascript:rangeView('%s', %f, %f)" % (self.selectedChr - 1, max(0, (calBase-webqtlZoomWidth))/1000000.0, (calBase+webqtlZoomWidth)/1000000.0)
WEBQTL_TITLE = "Click to view this section of the genome in WebQTL"
gifmap.areas.append(HT.Area(shape='rect',coords=WEBQTL_COORDS,href=WEBQTL_HREF, title=WEBQTL_TITLE))
- canvas.drawRect(xBrowse1, paddingTop, xBrowse2, (paddingTop + self.WEBQTL_BAND_HEIGHT), edgeColor=self.CLICKABLE_WEBQTL_REGION_COLOR, fillColor=self.CLICKABLE_WEBQTL_REGION_COLOR)
- canvas.drawLine(xBrowse1, paddingTop, xBrowse1, (paddingTop + self.WEBQTL_BAND_HEIGHT), color=self.CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR)
+ canvas.drawRect(xBrowse1, paddingTop, xBrowse2, (paddingTop + self.BAND_HEIGHT), edgeColor=self.CLICKABLE_WEBQTL_REGION_COLOR, fillColor=self.CLICKABLE_WEBQTL_REGION_COLOR)
+ canvas.drawLine(xBrowse1, paddingTop, xBrowse1, (paddingTop + self.BAND_HEIGHT), color=self.CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR)
+
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ PHENOGEN_COORDS = "%d, %d, %d, %d" % (xBrowse1, phenogenPaddingTop, xBrowse2, (phenogenPaddingTop+self.BAND_HEIGHT))
+ if self.dataset.group.species == "mouse":
+ PHENOGEN_HREF = "https://phenogen.ucdenver.edu/PhenoGen/gene.jsp?speciesCB=Mm&auto=Y&geneTxt=chr%s:%d-%d&genomeVer=mm10" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
+ else:
+ PHENOGEN_HREF = "https://phenogen.ucdenver.edu/PhenoGen/gene.jsp?speciesCB=Mm&auto=Y&geneTxt=chr%s:%d-%d&genomeVer=mm10" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
+ PHENOGEN_TITLE = "Click to view this section of the genome in PhenoGen"
+ gifmap.areas.append(HT.Area(shape='rect',coords=PHENOGEN_COORDS,href=PHENOGEN_HREF, title=PHENOGEN_TITLE))
+ canvas.drawRect(xBrowse1, phenogenPaddingTop, xBrowse2, (phenogenPaddingTop+self.BAND_HEIGHT), edgeColor=self.CLICKABLE_PHENOGEN_REGION_COLOR, fillColor=self.CLICKABLE_PHENOGEN_REGION_COLOR)
+ canvas.drawLine(xBrowse1, phenogenPaddingTop, xBrowse1, (phenogenPaddingTop+self.BAND_HEIGHT), color=self.CLICKABLE_PHENOGEN_REGION_OUTLINE_COLOR)
- UCSC_COORDS = "%d, %d, %d, %d" %(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.UCSC_BAND_HEIGHT))
+ UCSC_COORDS = "%d, %d, %d, %d" %(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.BAND_HEIGHT))
if self.dataset.group.species == "mouse":
UCSC_HREF = "http://genome.ucsc.edu/cgi-bin/hgTracks?db=%s&position=chr%s:%d-%d&hgt.customText=%s/snp/chr%s" % (self._ucscDb, self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases, webqtlConfig.PORTADDR, self.selectedChr)
else:
UCSC_HREF = "http://genome.ucsc.edu/cgi-bin/hgTracks?db=%s&position=chr%s:%d-%d" % (self._ucscDb, self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
UCSC_TITLE = "Click to view this section of the genome in the UCSC Genome Browser"
gifmap.areas.append(HT.Area(shape='rect',coords=UCSC_COORDS,href=UCSC_HREF, title=UCSC_TITLE))
- canvas.drawRect(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.UCSC_BAND_HEIGHT), edgeColor=self.CLICKABLE_UCSC_REGION_COLOR, fillColor=self.CLICKABLE_UCSC_REGION_COLOR)
- canvas.drawLine(xBrowse1, ucscPaddingTop, xBrowse1, (ucscPaddingTop+self.UCSC_BAND_HEIGHT), color=self.CLICKABLE_UCSC_REGION_OUTLINE_COLOR)
+ canvas.drawRect(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.BAND_HEIGHT), edgeColor=self.CLICKABLE_UCSC_REGION_COLOR, fillColor=self.CLICKABLE_UCSC_REGION_COLOR)
+ canvas.drawLine(xBrowse1, ucscPaddingTop, xBrowse1, (ucscPaddingTop+self.BAND_HEIGHT), color=self.CLICKABLE_UCSC_REGION_OUTLINE_COLOR)
- ENSEMBL_COORDS = "%d, %d, %d, %d" %(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.ENSEMBL_BAND_HEIGHT))
+ ENSEMBL_COORDS = "%d, %d, %d, %d" %(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.BAND_HEIGHT))
if self.dataset.group.species == "mouse":
ENSEMBL_HREF = "http://www.ensembl.org/Mus_musculus/contigview?highlight=&chr=%s&vc_start=%d&vc_end=%d&x=35&y=12" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
else:
ENSEMBL_HREF = "http://www.ensembl.org/Rattus_norvegicus/contigview?chr=%s&start=%d&end=%d" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
ENSEMBL_TITLE = "Click to view this section of the genome in the Ensembl Genome Browser"
gifmap.areas.append(HT.Area(shape='rect',coords=ENSEMBL_COORDS,href=ENSEMBL_HREF, title=ENSEMBL_TITLE))
- canvas.drawRect(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.ENSEMBL_BAND_HEIGHT), edgeColor=self.CLICKABLE_ENSEMBL_REGION_COLOR, fillColor=self.CLICKABLE_ENSEMBL_REGION_COLOR)
- canvas.drawLine(xBrowse1, ensemblPaddingTop, xBrowse1, (ensemblPaddingTop+self.ENSEMBL_BAND_HEIGHT), color=self.CLICKABLE_ENSEMBL_REGION_OUTLINE_COLOR)
+ canvas.drawRect(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.BAND_HEIGHT), edgeColor=self.CLICKABLE_ENSEMBL_REGION_COLOR, fillColor=self.CLICKABLE_ENSEMBL_REGION_COLOR)
+ canvas.drawLine(xBrowse1, ensemblPaddingTop, xBrowse1, (ensemblPaddingTop+self.BAND_HEIGHT), color=self.CLICKABLE_ENSEMBL_REGION_OUTLINE_COLOR)
# end for
- canvas.drawString("Click to view the corresponding section of the genome in an 8x expanded WebQTL map", (xLeftOffset + 10), paddingTop + self.WEBQTL_BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_WEBQTL_TEXT_COLOR)
- canvas.drawString("Click to view the corresponding section of the genome in the UCSC Genome Browser", (xLeftOffset + 10), ucscPaddingTop + self.UCSC_BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_UCSC_TEXT_COLOR)
- canvas.drawString("Click to view the corresponding section of the genome in the Ensembl Genome Browser", (xLeftOffset+10), ensemblPaddingTop + self.ENSEMBL_BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_ENSEMBL_TEXT_COLOR)
+ canvas.drawString("Click to view the corresponding section of the genome in an 8x expanded WebQTL map", (xLeftOffset + 10), paddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_WEBQTL_TEXT_COLOR)
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ canvas.drawString("Click to view the corresponding section of the genome in PhenoGen", (xLeftOffset + 10), phenogenPaddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_PHENOGEN_TEXT_COLOR)
+ canvas.drawString("Click to view the corresponding section of the genome in the UCSC Genome Browser", (xLeftOffset + 10), ucscPaddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_UCSC_TEXT_COLOR)
+ canvas.drawString("Click to view the corresponding section of the genome in the Ensembl Genome Browser", (xLeftOffset+10), ensemblPaddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_ENSEMBL_TEXT_COLOR)
#draw the gray text
chrFont = pid.Font(ttf="verdana", size=26*zoom, bold=1)
diff --git a/wqflask/wqflask/static/new/javascript/comparison_bar_chart.js b/wqflask/wqflask/static/new/javascript/comparison_bar_chart.js
new file mode 100644
index 00000000..5e73807c
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/comparison_bar_chart.js
@@ -0,0 +1,25 @@
+generate_traces = function() {
+ traces = [];
+ for (i = 0, _len = js_data.traits.length; i < _len; i++) {
+ this_trace = {
+ x: js_data.samples,
+ y: js_data.sample_data[i],
+ name: js_data.traits[i],
+ type: 'bar',
+ bargap: 20
+ }
+
+ traces.push(this_trace)
+ }
+
+ return traces
+}
+
+create_bar_chart = function() {
+ var data = generate_traces()
+ var layout = {barmode: 'group', bargap: 5};
+
+ Plotly.newPlot('comp_bar_chart', data, layout);
+}
+
+create_bar_chart(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json b/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json
index c605329b..81185136 100644
--- a/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json
+++ b/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json
@@ -1751,7 +1751,7 @@
],
"Phenotypes": [
[
- "None",
+ "651",
"B6D2RIPublish",
"B6D2RI Published Phenotypes"
]
@@ -2616,6 +2616,16 @@
"EPFL/LISP BXD CD+HFD Liver Affy Mouse Gene 1.0 ST (Apr13) RMA Exon Level"
],
[
+ "849",
+ "EPFLMouseLiverCDEx0413",
+ "EPFL/LISP BXD CD Liver Affy Mouse Gene 1.0 ST (Apr13) RMA Exon Level"
+ ],
+ [
+ "848",
+ "EPFLMouseLiverHFCEx0413",
+ "EPFL/LISP BXD HFC Liver Affy Mouse Gene 1.0 ST (Apr13) RMA Exon Level"
+ ],
+ [
"700",
"UTHSC-VGX_MmBXDHepatocytesRMA1014",
"UT-VGX Hepatocytes Affy Mouse Gene 1.0 ST Gene Level (Oct14) RMA"
@@ -2783,7 +2793,7 @@
],
"Phenotypes": [
[
- "None",
+ "602",
"BXDPublish",
"BXD Published Phenotypes"
]
@@ -3030,6 +3040,18 @@
"842",
"UTHSC-BXD-Liv-0917",
"UTHSC BXD Liver Affy Clariom S GeneLevel Main (Sep17) RMA **"
+ ],
+ [
+ "850",
+ "UTHSC-BXD-Liv-0818",
+ "UTHSC BXD Liver Affy Clariom S GeneLevel Main (Aug18) RMA **"
+ ]
+ ],
+ "Phenotypes": [
+ [
+ "None",
+ "BXD-HarvestedPublish",
+ "BXD-Harvested Published Phenotypes"
]
]
},
@@ -3638,7 +3660,7 @@
"HSNIH-Palmer": {
"Phenotypes": [
[
- "None",
+ "652",
"HSNIH-PalmerPublish",
"HSNIH-Palmer Published Phenotypes"
]
@@ -3892,11 +3914,11 @@
],
[
"AKXD",
- "AKXD"
+ "AKXD RI Family"
],
[
"AXBXA",
- "AXB/BXA"
+ "AXB/BXA RI Family"
],
[
"B6BTBRF2",
@@ -3931,10 +3953,6 @@
"BHF2 (Apoe Null) UCLA"
],
[
- "BXD",
- "BXD"
- ],
- [
"B6D2RI",
"BXD Aged"
],
@@ -3947,12 +3965,16 @@
"BXD NIA Longevity Study"
],
[
+ "BXD",
+ "BXD RI Family"
+ ],
+ [
"BXD300",
"BXD300"
],
[
"BXH",
- "BXH"
+ "BXH RI Family"
],
[
"CTB6F2",
@@ -3976,7 +3998,7 @@
],
[
"CXB",
- "CXB"
+ "CXB RI Family (strain means)"
],
[
"D2GM",
@@ -4000,11 +4022,11 @@
],
[
"LXS",
- "LXS"
+ "ILSXISS (LXS) RI Family (strain means)"
],
[
"MDP",
- "Mouse Diversity Panel"
+ "Mouse Diversity Panel (strain means)"
],
[
"NZBXFVB-N2",
@@ -5114,6 +5136,10 @@
],
"BXD-Harvested": [
[
+ "Phenotypes",
+ "Phenotypes"
+ ],
+ [
"Liver mRNA",
"Liver mRNA"
]
diff --git a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js b/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
index c290cdfe..57dae378 100644
--- a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
+++ b/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
@@ -1,75 +1,80 @@
-// http://gn2-lei.genenetwork.org/corr_scatter_plot2?dataset_1=HC_M2_0606_P&dataset_2=HC_M2_0606_P&dataset_3=HC_M2_0606_P&trait_1=1427571_at&trait_2=1457022_at&trait_3=1427571_at
-
var chart;
var srchart;
+var layout = {
+ height: 700,
+ width: 800,
+ margin: {
+ l: 60,
+ r: 30,
+ t: 80,
+ b: 50
+ },
+ xaxis: {
+ title: js_data.trait_1,
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ },
+ yaxis: {
+ title: js_data.trait_2,
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ }
+}
+
+cofactor1_dict = {}
+ranked_cofactor1_dict = {}
+cofactor1_values = []
+ranked_cofactor1_values = []
+cofactor2_dict = {}
+ranked_cofactor2_dict = {}
+
function drawg() {
- //
- chart = nv.models.scatterChart();
- //
- chart.showLegend(false);
- chart.duration(300);
- //chart.color(d3.scale.category10().range());
- chart.pointRange([0, 400]);
- chart.pointDomain([0, 10]);
- //
- chart.xAxis.axisLabel(js_data.trait_1);
- chart.xAxis.axisLabelDistance(11);
- chart.yAxis.axisLabel(js_data.trait_2);
- chart.yAxis.axisLabelDistance(11);
- //
- xmin = d3.min(js_data.data[0]);
- xmax = d3.max(js_data.data[0]);
- xrange = xmax - xmin;
- ymin = d3.min(js_data.data[1]);
- ymax = d3.max(js_data.data[1]);
- yrange = ymax - ymin;
- chart.xDomain([xmin - xrange/10, xmax + xrange/10]);
- chart.yDomain([ymin - yrange/10, ymax + yrange/10]);
- chart.xAxis.tickFormat(d3.format(checkformat(xrange)));
- chart.yAxis.tickFormat(d3.format(checkformat(yrange)));
- //
- chart.tooltip.contentGenerator(function (obj) {
- return tiptext(obj);
- });
+ x_values = []
+ y_values = []
+ sample_names = []
+ for (j = 0; j < js_data.data[0].length; j++) {
+ x_values.push(js_data.data[0][j])
+ y_values.push(js_data.data[1][j])
+ sample_names.push(js_data.indIDs[j])
+ }
+
+ var trace = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: sample_names
+ }
+
+ Plotly.newPlot('scatterplot2', [trace], layout)
+
}
function srdrawg() {
- //
- srchart = nv.models.scatterChart();
- //
- srchart.showLegend(false);
- srchart.duration(300);
- srchart.color(d3.scale.category10().range());
- srchart.pointRange([0, 400]);
- srchart.pointDomain([0, 10]);
- //
- srchart.xAxis.axisLabel(js_data.trait_1);
- srchart.xAxis.axisLabelDistance(11);
- srchart.yAxis.axisLabel(js_data.trait_2);
- srchart.yAxis.axisLabelDistance(11);
- //
- xmin = d3.min(js_data.rdata[0]);
- xmax = d3.max(js_data.rdata[0]);
- xrange = xmax - xmin;
- ymin = d3.min(js_data.rdata[1]);
- ymax = d3.max(js_data.rdata[1]);
- yrange = ymax - ymin;
- srchart.xDomain([0, xmax + xrange/10]);
- srchart.yDomain([0, ymax + yrange/10]);
- srchart.xAxis.tickFormat(d3.format(checkformat(xrange)));
- srchart.yAxis.tickFormat(d3.format(checkformat(yrange)));
- //
- srchart.tooltip.contentGenerator(function (obj) {
- return tiptext(obj);
- });
-}
+ x_values = []
+ y_values = []
+ sample_names = []
+ for (j = 0; j < js_data.rdata[0].length; j++) {
+ x_values.push(js_data.rdata[0][j])
+ y_values.push(js_data.rdata[1][j])
+ sample_names.push(js_data.indIDs[j])
+ }
-function tiptext(obj) {
- return '<b style="font-size: 18px">' + obj.point.name + " (" + obj.point.x + ', ' + obj.point.y + ')</b>';
+ var trace = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: sample_names
+ }
+
+ Plotly.newPlot('srscatterplot2', [trace], layout)
}
-function getdata(size, shape) {
+function getdata() {
var data = [];
data.push({
values: [],
@@ -79,37 +84,91 @@ function getdata(size, shape) {
sizemin = 1;
sizemax = 50;
- if ('vals_3' in js_data) {
- datamin = d3.min(js_data.vals_3);
- datamax = d3.max(js_data.vals_3);
- colormin = $("#cocolorfrom").val();
- colormax = $("#cocolorto").val();
- compute = d3.interpolate(colormin, colormax);
- linear = d3.scale.linear().domain([datamin, datamax]).range([0,1]);
+
+ if ($('input[name=cofactor1_vals]').val()){
+ just_vals = []
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=cofactor1_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ just_vals.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = parseFloat(val_sample_pairs[i].split(":")[1])
+ }
+
+ cofactor1_dict = val_sample_dict
+ cofactor1_values = just_vals
+ }
+
+ if ($('input[name=cofactor2_vals]').val()){
+ vals_3 = [];
+ samples_3 = [];
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=cofactor2_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples_3.push(val_sample_pairs[i].split(":")[0])
+ vals_3.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = val_sample_pairs[i].split(":")[1]
+ }
+ datamin = d3.min(vals_3);
+ datamax = d3.max(vals_3);
+
+ cofactor2_dict = val_sample_dict
}
+ x_values = []
+ y_values = []
+ sample_names = []
+ sizes = []
+
for (j = 0; j < js_data.data[0].length; j++) {
- if ('trait3' in js_data) {
- if (js_data.indIDs[j] in js_data.trait3) {
- datav = js_data.trait3[js_data.indIDs[j]].value;
- // size = (sizemax - sizemin) * (datav - datamin) / (datamax - datamin) + sizemin;
+ if ($('input[name=cofactor2_vals]').val()){
+ if (samples_3.indexOf(js_data.indIDs[j])) {
+ datav = vals_3[j]
sizev = map1to2(datamin, datamax, sizemin, sizemax, datav);
}
} else {
datav = 0;
- sizev = sizemin;
+ sizev = 10;
}
+
+ x_values.push(js_data.data[0][j])
+ y_values.push(js_data.data[1][j])
+ sample_names.push(js_data.indIDs[j])
+ sizes.push(sizev)
+
data[0].values.push({
+ type: "normal",
x: js_data.data[0][j],
y: js_data.data[1][j],
name: js_data.indIDs[j],
size: sizev,
- shape: shape,
v3: datav
});
}
- console.log(data);
- return data;
+
+ point_text = []
+ for (j = 0; j < sample_names.length; j++) {
+ this_text = ""
+ this_text += sample_names[j]
+ if (sample_names[j] in cofactor1_dict){
+ this_text += "<br>Cofactor 1: " + cofactor1_dict[sample_names[j]]
+ }
+ if (sample_names[j] in cofactor2_dict){
+ this_text += "<br>Cofactor 2: " + cofactor2_dict[sample_names[j]]
+ }
+ point_text.push(this_text)
+ }
+
+ var trace = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: point_text,
+ marker: {
+ size: sizes
+ }
+ }
+
+ return [trace];
}
function map1to2 (min1, max1, min2, max2, v1) {
@@ -117,167 +176,223 @@ function map1to2 (min1, max1, min2, max2, v1) {
return v2;
}
-function srgetdata(size, shape) {
+function srgetdata() {
var data = [];
data.push({
values: [],
slope: js_data.srslope,
intercept: js_data.srintercept
});
+
+ sizemin = 1;
+ sizemax = 50;
+
+ x_values = []
+ y_values = []
+ sample_names = []
+ sizes = []
+
+ if ($('input[name=ranked_cofactor1_vals]').val()){
+ just_vals = []
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=ranked_cofactor1_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ just_vals.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = parseFloat(val_sample_pairs[i].split(":")[1])
+ }
+
+ ranked_cofactor1_dict = val_sample_dict
+ ranked_cofactor1_values = just_vals
+ }
+
+ if ($('input[name=ranked_cofactor2_vals]').val()){
+ vals_3 = []
+ samples_3 = [];
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=ranked_cofactor2_vals]').val().split(",")
+ for (i=0; i<val_sample_pairs.length; i++){
+ samples_3.push(val_sample_pairs[i].split(":")[0])
+ vals_3.push(val_sample_pairs[i].split(":")[1])
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = val_sample_pairs[i].split(":")[1]
+ }
+ datamin = d3.min(vals_3);
+ datamax = d3.max(vals_3);
+
+ ranked_cofactor2_dict = val_sample_dict
+ }
+
for (j = 0; j < js_data.rdata[0].length; j++) {
- if (js_data.indIDs[j] in js_data.trait3) {
- size = js_data.trait3[js_data.indIDs[j]].value;
- //console.log("yes "+js_data.indIDs[j]+", "+size);
+ if ($('input[name=ranked_cofactor2_vals]').val()){
+ if (samples_3.indexOf(js_data.indIDs[j])) {
+ datav = vals_3[j]
+ sizev = map1to2(datamin, datamax, sizemin, sizemax, datav);
+ }
} else {
- //console.log("no "+js_data.indIDs[j]);
+ sizev = 10;
}
+
+ x_values.push(js_data.rdata[0][j])
+ y_values.push(js_data.rdata[1][j])
+ sample_names.push(js_data.indIDs[j])
+ sizes.push(sizev)
+
data[0].values.push({
+ type: "ranked",
x: js_data.rdata[0][j],
y: js_data.rdata[1][j],
name: js_data.indIDs[j],
- size: size,
- shape: shape
+ size: sizev,
});
}
- return data;
-}
-
-function checkformat(range) {
- cell = range / 10.0;
- if (cell >= 1) {
- return ",r";
- } else {
- cell = -Math.log(cell);
- n = cell.toString().split(".")[0].length;
- return ",.0" + n + "f";
+
+ point_text = []
+ for (j = 0; j < sample_names.length; j++) {
+ this_text = ""
+ this_text += sample_names[j]
+ if (sample_names[j] in ranked_cofactor1_dict){
+ this_text += "<br>Cofactor 1: " + ranked_cofactor1_dict[sample_names[j]]
+ }
+ if (sample_names[j] in ranked_cofactor2_dict){
+ this_text += "<br>Cofactor 2: " + ranked_cofactor2_dict[sample_names[j]]
+ }
+ point_text.push(this_text)
+ }
+
+ var trace = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: point_text,
+ marker: {
+ size: sizes
+ }
}
-}
-function chartupdate() {
- //
- var labelcolor = $("#labelcolor").val();
- $(".nvd3 .nv-axis.nv-x text").css("fill", labelcolor);
- $(".nvd3 .nv-axis.nv-y text").css("fill", labelcolor);
- //
- var labelfont = $("#labelfont").val();
- $(".nvd3 .nv-axis.nv-x text").css("font-size", labelfont);
- $(".nvd3 .nv-axis.nv-y text").css("font-size", labelfont);
- //
- var numbercolor = $("#numbercolor").val();
- $("g.tick text").css("fill", numbercolor);
- //
- var numberfont = $("#numberfont").val();
- $("g.tick text").css("font-size", numberfont);
- //
- var axiscolor = $("#axiscolor").val();
- $(".nv-x .nv-axis g path.domain").css("stroke", axiscolor);
- $(".nv-y .nv-axis g path.domain").css("stroke", axiscolor);
- //
- var axiswidth = $("#axiswidth").val();
- $(".nv-x .nv-axis g path.domain").css("stroke-width", axiswidth);
- $(".nv-y .nv-axis g path.domain").css("stroke-width", axiswidth);
- //
- var linecolor = $("#linecolor").val();
- $("line.nv-regLine").css("stroke", linecolor);
- //
- var linewidth = $("#linewidth").val();
- $("line.nv-regLine").css("stroke-width", linewidth);
- //
- var markcolor = $("#markcolor").val();
- $(".nvd3 g path").css("fill", markcolor);
+ return [trace];
}
function chartupdatewh() {
- //
var width = $("#width").val();
- $("#scatterplot2 svg").css("width", width);
- $("#srscatterplot2 svg").css("width", width);
- //
var height = $("#height").val();
- $("#scatterplot2 svg").css("height", height);
- $("#srscatterplot2 svg").css("height", height);
- //
- window.dispatchEvent(new Event('resize'));
+
+ width_height_update = {
+ height: height,
+ width: width
+ }
+
+ Plotly.newPlot('scatterplot2', getdata(), layout)
+ Plotly.relayout('scatterplot2', width_height_update)
+ Plotly.newPlot('srscatterplot2', srgetdata(), layout)
+ Plotly.relayout('srscatterplot2', width_height_update)
}
- function colorer(d) {
- datamin = d3.min(js_data.vals_3);
- datamax = d3.max(js_data.vals_3);
- //colormin = d3.rgb(255,0,0);
- //colormax = d3.rgb(0,255,0);
+function colorer(d) {
+ datamin = d3.min(cofactor1_values);
+ datamax = d3.max(cofactor1_values);
colormin = $("#cocolorfrom").val();
colormax = $("#cocolorto").val();
- console.log("colormin: "+colormin);
- console.log("colormax: "+colormax);
+ compute = d3.interpolate(colormin, colormax);
+ linear = d3.scale.linear().domain([datamin, datamax]).range([0,1]);
+
+ this_sample = d.tx.split("<br>")[0]
+
+ c = compute(linear(cofactor1_dict[this_sample]));
+
+ return c;
+}
+
+function ranked_colorer(d) {
+ datamin = d3.min(ranked_cofactor1_values);
+ datamax = d3.max(ranked_cofactor1_values);
+ colormin = $("#cocolorfrom").val();
+ colormax = $("#cocolorto").val();
compute = d3.interpolate(colormin, colormax);
linear = d3.scale.linear().domain([datamin, datamax]).range([0,1]);
- //console.log(d[0].x);
- c= compute(linear(d[0].x));
- //console.log(c);
- return c;
- }
+
+ this_sample = d.tx.split("<br>")[0]
+
+ c= compute(linear(ranked_cofactor1_dict[this_sample]));
+
+ return c;
+}
function chartupdatedata() {
- //
var size = $("#marksize").val();
var shape = $("#markshape").val();
- //
- d3.select('#scatterplot2 svg').datum(getdata(size, shape)).call(chart);
- d3.select('#srscatterplot2 svg').datum(nv.log(srgetdata(size, shape))).call(srchart);
- //
- d3.selectAll('.nv-point')
- .attr({
- 'stroke': colorer,
- 'fill': colorer
- });
- //
- nv.utils.windowResize(chart.update);
- nv.utils.windowResize(srchart.update);
-}
-function savesvg(svgEl, name) {
- svgEl.setAttribute("xmlns", "http://www.w3.org/2000/svg");
- var svgData = svgEl.outerHTML;
- var preface = '<?xml version="1.0" standalone="no"?>\r\n';
- preface += '<?xml-stylesheet type="text/css" href="http://cdnjs.cloudflare.com/ajax/libs/nvd3/1.8.5/nv.d3.min.css"?>\r\n';
- var svgBlob = new Blob([preface, svgData], {type:"image/svg+xml;charset=utf-8"});
- var svgUrl = URL.createObjectURL(svgBlob);
- var downloadLink = document.createElement("a");
- downloadLink.href = svgUrl;
- downloadLink.download = name;
- document.body.appendChild(downloadLink);
- downloadLink.click();
- document.body.removeChild(downloadLink);
-}
+ var pearson_title_update = {
+ title: "Pearson Correlation Scatterplot"
+ }
+ var spearman_title_update = {
+ title: "Spearman Rank Correlation Scatterplot"
+ }
-function saveassvg_pcs() {
- savesvg($("#svg_pcs")[0], "Pearson Correlation Scatterplot.svg");
-}
+ Plotly.newPlot('scatterplot2', getdata(), layout)
+ Plotly.relayout('scatterplot2', pearson_title_update)
+ Plotly.newPlot('srscatterplot2', srgetdata(), layout)
+ Plotly.relayout('srscatterplot2', spearman_title_update)
-function saveassvg_srcs() {
- savesvg($("#svg_srcs")[0], "Spearman Rank Correlation Scatterplot.svg");
+ if ($('input[name=cofactor1_vals]').val()){
+ d3.select('#scatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': colorer,
+ 'fill': colorer
+ });
+ d3.select('#srscatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': ranked_colorer,
+ 'fill': ranked_colorer
+ });
+ }
}
drawg();
srdrawg();
-$(".chartupdate").change(function () {
- chartupdate();
-});
-
$(".chartupdatewh").change(function () {
chartupdatewh();
- chartupdate();
});
$(".chartupdatedata").change(function () {
chartupdatedata();
- chartupdate();
});
+$(".cofactor1_type").change(function () {
+ console.log("cofactor1 type:", $(".cofactor1_type").val())
+ if ($(".cofactor1_type").val() == "color"){
+ $(".cofactor2_type").val("size")
+ } else {
+ $(".cofactor2_type").val("color")
+ }
+});
+
+open_covariate_selection = function() {
+ return $('#collections_holder').load('/collections/list #collections_list', (function(_this) {
+ return function() {
+ $.colorbox({
+ inline: true,
+ href: "#collections_holder",
+ onComplete: function(){
+ $.getScript("/static/new/javascript/get_traits_from_collection.js");
+ }
+ });
+ return $('a.collection_name').attr('onClick', 'return false');
+ };
+ })(this));
+};
+
$(document).ready(function(){
chartupdatedata();
- chartupdate();
+
+ $('#select_cofactor1').click(function () {
+ $('input[name=selecting_which_cofactor]').val("1");
+ open_covariate_selection();
+ });
+
+ $('#select_cofactor2').click(function () {
+ $('input[name=selecting_which_cofactor]').val("2");
+ open_covariate_selection();
+ });
});
diff --git a/wqflask/wqflask/static/new/javascript/draw_probability_plot.js b/wqflask/wqflask/static/new/javascript/draw_probability_plot.js
index f23dad0c..3d756303 100644
--- a/wqflask/wqflask/static/new/javascript/draw_probability_plot.js
+++ b/wqflask/wqflask/static/new/javascript/draw_probability_plot.js
@@ -26,7 +26,7 @@
redraw_prob_plot = function(samples, sample_group) {
var container, h, margin, totalh, totalw, w;
h = 600;
- w = 600;
+ w = 500;
margin = {
left: 60,
top: 40,
diff --git a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
index 4abb0735..8a79627a 100644
--- a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
+++ b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
@@ -4,7 +4,7 @@ var add_trait_data, assemble_into_json, back_to_collections, collection_click, c
console.log("before get_traits_from_collection");
-collection_list = null;
+//collection_list = null;
this_trait_data = null;
@@ -15,7 +15,6 @@ collection_click = function() {
console.log("Clicking on:", $(this));
this_collection_url = $(this).find('.collection_name').prop("href");
this_collection_url += "&json";
- console.log("this_collection_url", this_collection_url);
collection_list = $("#collections_holder").html();
return $.ajax({
dataType: "json",
@@ -42,7 +41,6 @@ submit_click = function() {
success: add_trait_data
});
});
- console.log("SELECTED_TRAITS IS:", selected_traits);
trait_names = [];
samples = $('input[name=allsamples]').val().split(" ");
all_vals = [];
@@ -117,7 +115,6 @@ trait_click = function() {
trait = $(this).parent().find('.trait').text();
dataset = $(this).parent().find('.dataset').text();
this_trait_url = "/trait/get_sample_data?trait=" + trait + "&dataset=" + dataset;
- console.log("this_trait_url", this_trait_url);
$.ajax({
dataType: "json",
url: this_trait_url,
@@ -134,28 +131,84 @@ add_trait_data = function(trait_data, textStatus, jqXHR) {
return console.log("selected_traits:", selected_traits);
};
+populate_cofactor_info = function(trait_info) {
+ if ($('input[name=selecting_which_cofactor]').val() == "1"){
+ $('#cofactor1_trait_link').attr("href", trait_info['url'])
+ if (trait_info['type'] == "ProbeSet"){
+ $('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['tissue'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor1_description').text("[" + trait_info['symbol'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
+ } else {
+ $('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor1_description').html('<a href=\"' + trait_info['pubmed_link'] + '\">PubMed: ' + trait_info['pubmed_text'] + '</a><br>' + trait_info['description'])
+ }
+ $('#select_cofactor1').text("Change Cofactor 1");
+ $('#cofactor1_info_container').css("display", "inline");
+ $('#cofactor2_button').css("display", "inline");
+ } else {
+ $('#cofactor2_trait_link').attr("href", trait_info['url'])
+ if (trait_info['type'] == "ProbeSet"){
+ $('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['tissue'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor2_description').text("[" + trait_info['symbol'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
+ } else {
+ $('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor2_description').html('<a href=\"' + trait_info['pubmed_link'] + '\">PubMed: ' + trait_info['pubmed_text'] + '</a><br>' + trait_info['description'])
+ }
+ $('#select_cofactor2').text("Change Cofactor 2");
+ $('#cofactor2_info_container').css("display", "inline");
+ }
+}
+
get_trait_data = function(trait_data, textStatus, jqXHR) {
var sample, samples, this_trait_vals, trait_sample_data, vals, _i, _len;
- console.log("trait:", trait_data[0]);
trait_sample_data = trait_data[1];
- console.log("trait_sample_data:", trait_sample_data);
- samples = $('input[name=allsamples]').val().split(" ");
+ if ( $('input[name=allsamples]').length ) {
+ samples = $('input[name=allsamples]').val().split(" ");
+ } else {
+ samples = js_data.indIDs
+ }
+ sample_vals = [];
vals = [];
for (_i = 0, _len = samples.length; _i < _len; _i++) {
sample = samples[_i];
- if (__indexOf.call(Object.keys(trait_sample_data), sample) >= 0) {
- vals.push(parseFloat(trait_sample_data[sample]));
+ if (sample in trait_sample_data) {
+ sample_vals.push(sample + ":" + parseFloat(trait_sample_data[sample]))
+ vals.push(parseFloat(trait_sample_data[sample]))
} else {
- vals.push(null);
+ sample_vals.push(null)
+ vals.push(null)
}
}
- if ($('input[name=samples]').length < 1) {
- $('#hidden_inputs').append('<input type="hidden" name="samples" value="[' + samples.toString() + ']" />');
+ if ( $('input[name=allsamples]').length ) {
+ if ($('input[name=samples]').length < 1) {
+ $('#hidden_inputs').append('<input type="hidden" name="samples" value="[' + samples.toString() + ']" />');
+ }
+ $('#hidden_inputs').append('<input type="hidden" name="vals" value="[' + vals.toString() + ']" />');
+ this_trait_vals = get_this_trait_vals(samples);
+ return color_by_trait(trait_sample_data);
+ } else{
+ populate_cofactor_info(trait_data[0])
+ sorted = vals.slice().sort(function(a,b){return a-b})
+ ranks = vals.slice().map(function(v){ return sorted.indexOf(v)+1 });
+ sample_ranks = []
+ for (_i = 0; _i < samples.length; _i++){
+ if (samples[_i] in trait_sample_data){
+ sample_ranks.push(samples[_i] + ":" + ranks[_i])
+ } else {
+ sample_ranks.push(null)
+ }
+ }
+
+ if ($('input[name=selecting_which_cofactor]').val() == "1"){
+ $('input[name=cofactor1_vals]').val(sample_vals)
+ $('input[name=ranked_cofactor1_vals]').val(sample_ranks)
+ } else {
+ $('input[name=cofactor2_vals]').val(sample_vals)
+ $('input[name=ranked_cofactor2_vals]').val(sample_ranks)
+ }
+ chartupdatedata();
+ chartupdate();
+ return false
}
- $('#hidden_inputs').append('<input type="hidden" name="vals" value="[' + vals.toString() + ']" />');
- this_trait_vals = get_this_trait_vals(samples);
- console.log("THE LENGTH IS:", $('input[name=vals]').length);
- return color_by_trait(trait_sample_data);
};
get_this_trait_vals = function(samples) {
@@ -215,14 +268,17 @@ process_traits = function(trait_data, textStatus, jqXHR) {
}
the_html += "</tbody>";
the_html += "</table>";
+ the_html += "<div id=\"collection_list_html\" style=\"display: none;\">"
+ the_html += collection_list
+ the_html += "</div>"
the_html += "<script type='text/javascript' src='/static/new/javascript/get_traits_from_collection.js'></script>"
$("#collections_holder").html(the_html);
return $('#collections_holder').colorbox.resize();
};
back_to_collections = function() {
- console.log("collection_list:", collection_list);
- $("#collections_holder").html(collection_list);
+ collection_list_html = $('#collection_list_html').html()
+ $("#collections_holder").html(collection_list_html);
$(document).on("click", ".collection_line", collection_click);
return $('#collections_holder').colorbox.resize();
};
diff --git a/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js b/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js
index 49fd53b1..97d768c8 100644
--- a/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js
+++ b/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js
@@ -25,7 +25,7 @@
redraw_prob_plot = function(samples, sample_group) {
var container, h, margin, totalh, totalw, w;
- h = 600;
+ h = 370;
w = 600;
margin = {
left: 60,
@@ -71,11 +71,11 @@
})();
//ZS: 0.1 indicates buffer, increase to increase buffer
y_domain = [sorted_values[0] - (sorted_values.slice(-1)[0] - sorted_values[0])*0.1, sorted_values.slice(-1)[0] + (sorted_values.slice(-1)[0] - sorted_values[0])*0.1]
- sw_result = ShapiroWilkW(sorted_values);
- W = sw_result.w.toFixed(3);
- pvalue = sw_result.p.toFixed(3);
- pvalue_str = pvalue > 0.05 ? pvalue.toString() : "<span style='color:red'>" + pvalue + "</span>";
- test_str = "Shapiro-Wilk test statistic is " + W + " (p = " + pvalue_str + ")";
+ //sw_result = ShapiroWilkW(sorted_values);
+ //W = sw_result.w.toFixed(3);
+ //pvalue = sw_result.p.toFixed(3);
+ //pvalue_str = pvalue > 0.05 ? pvalue.toString() : "<span style='color:red'>" + pvalue + "</span>";
+ //test_str = "Shapiro-Wilk test statistic is " + W + " (p = " + pvalue_str + ")";
z_scores = get_z_scores(sorted_values.length);
//ZS: 0.1 indicates buffer, increase to increase buffer
x_domain = [z_scores[0] - (z_scores.slice(-1)[0] - z_scores[0])*0.1, z_scores.slice(-1)[0] + (z_scores.slice(-1)[0] - z_scores[0])*0.1]
@@ -106,7 +106,6 @@
};
};
data = [make_data('samples_primary'), make_data('samples_other'), make_data('samples_all')];
- console.log("THE DATA IS:", data);
x_values = {}
y_values = {}
point_names = {}
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js
index 5e2ecc33..e9dd3c9d 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait.js
@@ -247,6 +247,9 @@
}
root.bar_data[0]['x'] = trait_samples
Plotly.newPlot('bar_chart', root.bar_data, root.bar_layout);
+ Plotly.relayout('bar_chart', {
+ 'yaxis.autorange': true
+ });
};
redraw_box_plot = function() {
@@ -564,7 +567,7 @@
log_normalize_data = function() {
return $('.trait_value_input').each((function(_this) {
return function(_index, element) {
- current_value = $(element).data("value");
+ current_value = parseFloat($(element).data("value")) + 1;
if(isNaN(current_value)) {
return current_value
} else {
@@ -575,6 +578,20 @@
})(this));
};
+ sqrt_normalize_data = function() {
+ return $('.trait_value_input').each((function(_this) {
+ return function(_index, element) {
+ current_value = parseFloat($(element).data("value")) + 1;
+ if(isNaN(current_value)) {
+ return current_value
+ } else {
+ $(element).val(Math.sqrt(current_value).toFixed(3));
+ return Math.sqrt(current_value).toFixed(3)
+ }
+ };
+ })(this));
+ };
+
qnorm_data = function() {
return $('.trait_value_input').each((function(_this) {
return function(_index, element) {
@@ -596,6 +613,12 @@
$('input[name="transform"]').val("log2")
}
}
+ else if ($('#norm_method option:selected').val() == 'sqrt'){
+ if ($('input[name="transform"]').val() != "sqrt") {
+ sqrt_normalize_data()
+ $('input[name="transform"]').val("sqrt")
+ }
+ }
else if ($('#norm_method option:selected').val() == 'qnorm'){
if ($('input[name="transform"]').val() != "qnorm") {
qnorm_data()
@@ -866,6 +889,7 @@
max_y_val = Math.max(...positive_error_vals)
if (min_y_val == 0) {
+ range_top = max_y_val + Math.abs(max_y_val)*0.1
range_bottom = 0;
} else {
range_top = max_y_val + Math.abs(max_y_val)*0.1
diff --git a/wqflask/wqflask/templates/collections/add.html b/wqflask/wqflask/templates/collections/add.html
index d45aa015..603947f4 100644
--- a/wqflask/wqflask/templates/collections/add.html
+++ b/wqflask/wqflask/templates/collections/add.html
@@ -1,36 +1,38 @@
<div id="myModal">
<div class="modal-header">
- <h3>Add to collection</h3>
- <p>You have two choices: Create and name a collection,
- or add the traits to an existing collection.</p>
+ <h2>Define or Add to Collection</h2>
+ <p>You have two choices: Name a new collection
+ or add to an existing collection.</p>
</div>
- <div class="modal-body">
+ <div class="modal-body" style="margin-left: 20px;">
<form action="/collections/new" data-validate="parsley" id="add_form">
<input type="hidden" name="traits" value="{{ traits }}" />
<fieldset>
- <legend>Create a new named collection</legend>
- <label>New collection name</label>
- <input type="text" name="new_collection" placeholder="Name of new collection..."
- data-trigger="change" data-minlength="5" data-maxlength="50">
- <span class="help-block">Type the name of the new collection.</span>
+ <legend>1. Create a new collection</legend>
+ <div style="margin-left: 20px;">
+ <!--<label>Collection name:</label>-->
+ <input type="text" name="new_collection" placeholder=" Name of new collection..."
+ data-trigger="change" data-minlength="5" data-maxlength="50" style="width: 100%">
+ <button type="submit" name="create_new" class="btn btn-primary" style="margin-top: 20px;">Create collection</button>
{% if uc is not defined %}
<span class="help-block" style="color:red;">This collection will be saved to this computer for 5 days.</span>
{% endif %}
- <button type="submit" name="create_new" class="btn">Create and add traits</button>
+ </div>
</fieldset>
<hr />
<fieldset>
- <legend>Or add to an existing collection</legend>
- <label>Existing collection name</label>
-
+ <legend>2. Add to an existing collection</legend>
+ <div style="margin-left: 20px;">
+ <!--<label>Existing collection name:</label>-->
<select name="existing_collection" class="form-control">
+ <option selected disabled>Select Collection</option>
{% for col in collections %}
<option value="{{ col.id }}:{{ col.name }}">{{ col.name }}</option>
{% endfor %}
</select>
<br />
-
- <button type="submit" name="add_to_existing" class="btn">Add to existing collection</button>
+ <button type="submit" name="add_to_existing" class="btn btn-primary">Add to existing collection</button>
+ </div>
</fieldset>
</form>
</div>
diff --git a/wqflask/wqflask/templates/collections/list.html b/wqflask/wqflask/templates/collections/list.html
index 11c33673..64d5a676 100644
--- a/wqflask/wqflask/templates/collections/list.html
+++ b/wqflask/wqflask/templates/collections/list.html
@@ -3,7 +3,6 @@
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
<link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.bootstrap.css" />
{% endblock %}
{% block content %}
diff --git a/wqflask/wqflask/templates/collections/view.html b/wqflask/wqflask/templates/collections/view.html
index cae03b4a..864299a2 100644
--- a/wqflask/wqflask/templates/collections/view.html
+++ b/wqflask/wqflask/templates/collections/view.html
@@ -29,10 +29,6 @@
{{ this_trait.name }}:{{ this_trait.dataset.name }},
{% endfor %}" >
- <button id="delete" class="btn btn-danger submit_special" data-url="/collections/delete" title="Delete this collection" >
- Delete this collection
- </button>
-
<button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" >
Correlation Matrix
@@ -58,6 +54,15 @@
Heatmap
</button>
+ <button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" >
+ Comparison Bar Chart
+ </button>
+
+
+ <button id="delete" class="btn btn-danger submit_special" style="margin-left: 15px;" data-url="/collections/delete" title="Delete this collection" >
+ Delete Collection
+ </button>
+
</form>
</div>
@@ -66,8 +71,8 @@
<button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
<button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
<button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
- <button class="btn" id="add" disabled="disabled"><i class="icon-plus-sign"></i> Add Record to Other Collection</button>
- <button class="btn" id="remove" disabled="disabled"><i class="icon-minus-sign"></i> Remove Record</button>
+ <button class="btn btn-danger" id="remove" disabled="disabled"><i class="icon-minus-sign"></i> Delete From Collection</button>
+ <button class="btn" id="add" disabled="disabled"><i class="icon-plus-sign"></i> Copy Record to Other Collection</button>
<br />
<br />
<form id="export_form" method="POST" action="/export_traits_csv">
@@ -246,6 +251,14 @@
url = $(this).data("url")
return submit_special(url)
});
+ $("#comp_bar_chart").on("click", function() {
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ $("#trait_list").val(traits)
+ url = $(this).data("url")
+ return submit_special(url)
+ });
});
</script>
diff --git a/wqflask/wqflask/templates/comparison_bar_chart.html b/wqflask/wqflask/templates/comparison_bar_chart.html
new file mode 100644
index 00000000..033ff0a4
--- /dev/null
+++ b/wqflask/wqflask/templates/comparison_bar_chart.html
@@ -0,0 +1,39 @@
+{% extends "base.html" %}
+{% block title %}Comparison Bar Chart{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
+{% endblock %}
+{% block content %} <!-- Start of body -->
+
+ {{ header("Comparison Bar Chart") }}
+
+ <div class="container">
+ <div>
+ <h3>
+ The following is a grouped bar chart with the sample values for each selected trait.
+ </h3>
+ </div>
+ <div id="chart_container">
+ <div id="comp_bar_chart"></div>
+ </div>
+
+ </div>
+
+ <!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script>
+ js_data = {{ js_data | safe }}
+ </script>
+
+ <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
+ <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/comparison_bar_chart.js"></script>
+
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/corr_scatterplot.html b/wqflask/wqflask/templates/corr_scatterplot.html
index e0f017c2..6451fda5 100644
--- a/wqflask/wqflask/templates/corr_scatterplot.html
+++ b/wqflask/wqflask/templates/corr_scatterplot.html
@@ -12,124 +12,74 @@
<div class="container-fluid">
- <h2>Correlation Scatterplot</h2>
+ <input type="hidden" name="cofactor1_vals"></input>
+ <input type="hidden" name="ranked_cofactor1_vals"></input>
+ <input type="hidden" name="cofactor2_vals"></input>
+ <input type="hidden" name="ranked_cofactor2_vals"></input>
+ <input type="hidden" name="selecting_which_cofactor"></input>
- <div style="margin-left: 0px;">
- {% if trait_1.dataset.type == "ProbeSet" %}
- <div>
- X axis:
- <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
- {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.tissue + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
- </a>
- </div>
- <div>
- [{{trait_1.symbol}} on {{trait_1.location_repr}} Mb]
- {{trait_1.description_display}}
- </div>
- {% elif trait_1.dataset.type == "Publish" %}
- <div>
- X axis:
- <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
- {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
- </a>
- </div>
- <div>
- <a href="{{trait_1.pubmed_link}}">PubMed: {{trait_1.pubmed_text}}</a>
- {{trait_1.description_display}}
- </div>
- {% endif %}
+ <h2>Correlation Scatterplot</h2>
- <br/>
+ <table class="table">
+ <tr>
+ <td style="vertical-align: middle;">Width <input class="chartupdatewh" id="width" type="text" value="800" style="width: 44px; height: 22px;"> px</td>
+ <td style="vertical-align: middle;">Height <input class="chartupdatewh" id="height" type="text" value="700" style="width: 44px; height: 22px;"> px</td>
+ </tr>
+ </table>
- {% if trait_2.dataset.type == "ProbeSet" %}
- <div>
- Y axis:
- <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
- {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.tissue + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
- </a>
- </div>
- <div>
- [{{trait_2.symbol}} on {{trait_2.location_repr}} Mb]
- {{trait_2.description_display}}
- </div>
- {% elif trait_2.dataset.type == "Publish" %}
- <div>
- Y axis:
- <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
- {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
- </a>
- </div>
- <div>
- <a href="{{trait_2.pubmed_link}}">PubMed: {{trait_2.pubmed_text}}</a>
- {{trait_2.description_display}}
+ <div>
+ <button type="button" class="btn btn-default" id="select_cofactor1">
+ Select Cofactor 1
+ </button>
+<!--
+ <select class="cofactor1_type">
+ <option value="color">Color</option>
+ <option value="size">Size</option>
+ </select>
+-->
+ <div id="cofactor2_button" style="margin-left: 10px; display: none;">
+ <button type="button" class="btn btn-default" id="select_cofactor2">
+ Add a Second Cofactor?
+ </button>
+<!--
+ <select class="cofactor2_type">
+ <option value="color">Color</option>
+ <option value="size" selected="selected">Size</option>
+ </select>
+-->
</div>
- {% endif %}
-
- <br/>
+ </div>
+ <div id="collections_holder_wrapper" style="display:none;">
+ <div id="collections_holder"></div>
+ </div>
+ <br/>
- {% if trait_3 %}
- {% if trait_3.dataset.type == "ProbeSet" %}
+ <div id="cofactor1_info_container" style="margin-left: 0px; display: none;">
<div>
- Cofactor:
- <a href="{{url_for('show_trait_page', trait_id = trait_3.name, dataset = trait_3.dataset.name)}}">
- {{trait_3.dataset.group.species + " " + trait_3.dataset.group.name + " " + trait_3.dataset.tissue + " " + trait_3.dataset.name + ": " + trait_3.name|string}}
- </a>
+ <b>Cofactor 1</b>: <a id="cofactor1_trait_link" href="#"></a>
</div>
- <div>
- [{{trait_3.symbol}} on {{trait_3.location_repr}} Mb]
- {{trait_3.description_display}}
+ <div id="cofactor1_description"></div>
+ <br>
+ <div style="margin-bottom: 10px;">
+ <b>Cofactor 1 Color Range:</b>
+ <input class="chartupdatedata" id="cocolorfrom" type="color" value="#D9D9D9">
+ <input class="chartupdatedata" id="cocolorto" type="color" value="#000000">
</div>
- {% elif trait_3.dataset.type == "Publish" %}
+ </div>
+
+ <div id="cofactor2_info_container" style="margin-left: 0px; display: none;">
+ <hr>
<div>
- Cofactor:
- <a href="{{url_for('show_trait_page', trait_id = trait_3.name, dataset = trait_3.dataset.name)}}">
- {{trait_3.dataset.group.species + " " + trait_3.dataset.group.name + " " + trait_3.dataset.name + ": " + trait_3.name|string}}
- </a>
+ <b>Cofactor 2</b>: <a id="cofactor2_trait_link" href="#"></a>
</div>
- <div>
- <a href="{{trait_3.pubmed_link}}">PubMed: {{trait_3.pubmed_text}}</a>
- {{trait_3.description_display}}
+ <div id="cofactor2_description"></div>
+ <br>
+ <div style="margin-bottom: 20px;">
+ <b>Cofactor 2 corresponds to point radius</b>
</div>
- {% endif %}
- {% endif %}
-
- <input class="chartupdatedata" id="cocolorfrom" type="color" value="#000000">
- <input class="chartupdatedata" id="cocolorto" type="color" value="#000000">
-
+ <br>
</div>
- <br>
-
- <table class="table">
- <tr>
- <td style="vertical-align: middle;">Width <input class="chartupdatewh" id="width" type="text" value="1000" style="width: 44px; height: 22px;"> px</td>
- <td style="vertical-align: middle;">Height <input class="chartupdatewh" id="height" type="text" value="800" style="width: 44px; height: 22px;"> px</td>
- </tr>
- </table>
-
- <table class="table">
- <tr>
- <td style="vertical-align: middle;">Label
- <input class="chartupdate" id="labelcolor" type="color" value="#000000">
- <input class="chartupdate" id="labelfont" type="text" value="16" style="width: 44px; height: 22px;"> px
- </td>
- <td style="vertical-align: middle;">Number
- <input class="chartupdate" id="numbercolor" type="color" value="#000000">
- <input class="chartupdate" id="numberfont" type="text" value="16" style="width: 44px; height: 22px;"> px
- </td>
- <td style="vertical-align: middle;">Axis
- <input class="chartupdate" id="axiscolor" type="color" value="#000000">
- <input class="chartupdate" id="axiswidth" type="text" value="2" style="width: 44px; height: 22px;"> px
- </td>
- <td style="vertical-align: middle;">Line
- <input class="chartupdate" id="linecolor" type="color" value="#8fbbda">
- <input class="chartupdate" id="linewidth" type="text" value="1" style="width: 44px; height: 22px;"> px
- </td>
- </tr>
- </table>
-
- <br>
-
<ul class="nav nav-tabs">
<li class="active">
<a href="#tp1" data-toggle="tab">Pearson</a>
@@ -143,17 +93,11 @@
<div class="tab-pane active" id="tp1">
<br>
- <div>
- <a id="a_svg_pcs" href="#" onclick="javascript:saveassvg_pcs();" class="btn btn-primary">Save as SVG</a>
- </div>
- <div style="width: 1000px; text-align: center;">
- <h2>Pearson Correlation Scatterplot</h2>
- </div>
- <div id="scatterplot2">
- <svg id="svg_pcs" style="width: 1000px; height: 800px; margin-left: 10px;"></svg>
- </div>
+ <div id="scatterplot2"></div>
<br>
- <table class="table table-hover table-striped table-bordered" style="width: 200px; margin-left: 80px; text-align: right;">
+ <div class="row" style="width: 70%;">
+ <div class="col-xs-3">
+ <table class="table table-hover table-striped table-bordered" style="width: 80%; margin-left: 60px; text-align: right;">
<thead>
<tr><th style="text-align: right;">Statistic</th><th style="text-align: right;">Value</th></tr>
</thead>
@@ -187,53 +131,147 @@
</tr>
</tbody>
</table>
- </div>
-
- <div class="tab-pane" id="tp2">
+ </div>
+ <div class="col-xs-9">
+ {% if trait_1.dataset.type == "ProbeSet" %}
+ <div>
+ X axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
+ {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.tissue + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
+ </a>
+ </div>
+ <div>
+ [{{trait_1.symbol}} on {{trait_1.location_repr}} Mb]
+ {{trait_1.description_display}}
+ </div>
+ {% elif trait_1.dataset.type == "Publish" %}
+ <div>
+ X axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
+ {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
+ </a>
+ </div>
+ <div>
+ <a href="{{trait_1.pubmed_link}}">PubMed: {{trait_1.pubmed_text}}</a>
+ {{trait_1.description_display}}
+ </div>
+ {% endif %}
- <br>
+ <br/>
- <div>
- <a id="a_svg_srcs" href="#" onclick="javascript:saveassvg_srcs();" class="btn btn-primary">Save as SVG</a>
- </div>
- <div style="width: 1000px; text-align: center;">
- <h2>Spearman Rank Correlation Scatterplot</h2>
+ {% if trait_2.dataset.type == "ProbeSet" %}
+ <div>
+ Y axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
+ {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.tissue + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
+ </a>
+ </div>
+ <div>
+ [{{trait_2.symbol}} on {{trait_2.location_repr}} Mb]
+ {{trait_2.description_display}}
+ </div>
+ {% elif trait_2.dataset.type == "Publish" %}
+ <div>
+ Y axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
+ {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
+ </a>
+ </div>
+ <div>
+ <a href="{{trait_2.pubmed_link}}">PubMed: {{trait_2.pubmed_text}}</a>
+ {{trait_2.description_display}}
+ </div>
+ {% endif %}
</div>
- <div id="srscatterplot2">
- <svg id="svg_srcs" style="width: 1000px; height: 800px; margin-left: 10px;"></svg>
</div>
+ </div>
+ <div class="tab-pane" id="tp2">
+ <br>
+ <div id="srscatterplot2"></div>
<br>
+ <div class="row" style="width: 70%;">
+ <div class="col-xs-3">
+ <table class="table table-hover table-striped table-bordered" style="width: 80%; margin-left: 60px; text-align: right;">
+ <thead>
+ <tr><th style="text-align: right;">Statistic</th><th style="text-align: right;">Value</th></tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Number</td>
+ <td>{{jsdata.num_overlap}}</td>
+ </tr>
+ <tr>
+ <td>Slope</td>
+ <td>{{'%0.3f' % jsdata.srslope}}</td>
+ </tr>
+ <tr>
+ <td>Intercept</td>
+ <td>{{'%0.3f' % jsdata.srintercept}}</td>
+ </tr>
+ <tr>
+ <td>r value</td>
+ <td>{{'%0.3f' % jsdata.srr_value}}</td>
+ </tr>
+ <tr>
+ <td>P value</td>
+ <td>{% if jsdata.srp_value < 0.001 %}{{'%0.3e' % jsdata.srp_value}}{% else %}{{'%0.3f' % jsdata.srp_value}}{% endif %}</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="col-xs-9">
+ {% if trait_1.dataset.type == "ProbeSet" %}
+ <div>
+ X axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
+ {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.tissue + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
+ </a>
+ </div>
+ <div>
+ [{{trait_1.symbol}} on {{trait_1.location_repr}} Mb]
+ {{trait_1.description_display}}
+ </div>
+ {% elif trait_1.dataset.type == "Publish" %}
+ <div>
+ X axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
+ {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
+ </a>
+ </div>
+ <div>
+ <a href="{{trait_1.pubmed_link}}">PubMed: {{trait_1.pubmed_text}}</a>
+ {{trait_1.description_display}}
+ </div>
+ {% endif %}
- <table class="table table-hover table-striped table-bordered" style="width: 200px; margin-left: 80px; text-align: right;">
- <thead>
- <tr><th style="text-align: right;">Statistic</th><th style="text-align: right;">Value</th></tr>
- </thead>
- <tbody>
- <tr>
- <td>Number</td>
- <td>{{jsdata.num_overlap}}</td>
- </tr>
- <tr>
- <td>Slope</td>
- <td>{{'%0.3f' % jsdata.srslope}}</td>
- </tr>
- <tr>
- <td>Intercept</td>
- <td>{{'%0.3f' % jsdata.srintercept}}</td>
- </tr>
- <tr>
- <td>r value</td>
- <td>{{'%0.3f' % jsdata.srr_value}}</td>
- </tr>
- <tr>
- <td>P value</td>
- <td>{% if jsdata.srp_value < 0.001 %}{{'%0.3e' % jsdata.srp_value}}{% else %}{{'%0.3f' % jsdata.srp_value}}{% endif %}</td>
- </tr>
- </tbody>
- </table>
- </div>
+ <br/>
+ {% if trait_2.dataset.type == "ProbeSet" %}
+ <div>
+ Y axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
+ {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.tissue + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
+ </a>
+ </div>
+ <div>
+ [{{trait_2.symbol}} on {{trait_2.location_repr}} Mb]
+ {{trait_2.description_display}}
+ </div>
+ {% elif trait_2.dataset.type == "Publish" %}
+ <div>
+ Y axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
+ {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
+ </a>
+ </div>
+ <div>
+ <a href="{{trait_2.pubmed_link}}">PubMed: {{trait_2.pubmed_text}}</a>
+ {{trait_2.description_display}}
+ </div>
+ {% endif %}
+ </div>
+ </div>
</div>
</div>
@@ -250,5 +288,7 @@
<script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/colorbrewer.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/get_traits_from_collection.js"></script>
+ <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/draw_corr_scatterplot.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/correlation_matrix.html b/wqflask/wqflask/templates/correlation_matrix.html
index c4668e05..e4fd3136 100644
--- a/wqflask/wqflask/templates/correlation_matrix.html
+++ b/wqflask/wqflask/templates/correlation_matrix.html
@@ -1,8 +1,6 @@
{% extends "base.html" %}
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/corr_matrix.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
@@ -107,8 +105,6 @@
<script type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
<script type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/js_external/chroma.js"></script>
diff --git a/wqflask/wqflask/templates/gsearch_gene.html b/wqflask/wqflask/templates/gsearch_gene.html
index 6f2ad0b8..0612bfcc 100644
--- a/wqflask/wqflask/templates/gsearch_gene.html
+++ b/wqflask/wqflask/templates/gsearch_gene.html
@@ -43,26 +43,24 @@
<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"><img style="width: 15px; height: 15px;" src="/static/new/images/question_mark.jpg"></a></th>
- <th data-export="Max LRS Location">Max LRS Location</th>
<th data-export="Additive Effect">Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank"><img style="width: 15px; height: 15px;" src="/static/new/images/question_mark.jpg"></a></th>
</tr>
</thead>
<tbody>
{% for this_trait in trait_list %}
- <tr id="trait:{{ this_trait.name }}:{{ this_trait.dataset.name }}">
- <td align="center" style="padding-right: 0px; padding-left: 5px;"><input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}"></td>
+ <tr id="trait:{{ this_trait.name }}:{{ this_trait.dataset }}">
+ <td align="center" style="padding-right: 0px; padding-left: 5px;"><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.name)}}">{{ this_trait.name }}</a></td>
- <td data-export="{{ this_trait.dataset.group.species }}">{{ this_trait.dataset.group.species }}</td>
- <td data-export="{{ this_trait.dataset.group.name }}">{{ this_trait.dataset.group.name }}</td>
- <td data-export="{{ this_trait.dataset.tissue }}">{{ this_trait.dataset.tissue }}</td>
- <td data-export="{{ this_trait.dataset.name }}">{{ this_trait.dataset.name }}</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_display }}">{{ this_trait.description_display }}</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="{{ this_trait.LRS_location_repr }}" align="right">{{ this_trait.LRS_location_repr }}</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 %}
@@ -81,7 +79,6 @@
<th>Location</th>
<th>Mean</th>
<th data-export="Max LRS">Max LRS <a href="http://genenetwork.org//glossary.html#LRS" target="_blank"><img style="width: 15px; height: 15px;" src="/static/new/images/question_mark.jpg"></a></th>
- <th data-export="LRS Location">Max LRS Location</th>
<th data-export="Additive Effect">Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank"><img style="width: 15px; height: 15px;" src="/static/new/images/question_mark.jpg"></a></th>
</tr>
</tfoot>
@@ -142,7 +139,6 @@
{ "type": "natural", "width": "7%" },
{ "type": "natural", "width": "4%" },
{ "type": "natural", "width": "5%" },
- { "type": "natural", "width": "7%" },
{ "type": "natural", "width": "5%" }
],
"columnDefs": [
diff --git a/wqflask/wqflask/templates/gsearch_pheno.html b/wqflask/wqflask/templates/gsearch_pheno.html
index 7a8ca07b..c2cbdadd 100644
--- a/wqflask/wqflask/templates/gsearch_pheno.html
+++ b/wqflask/wqflask/templates/gsearch_pheno.html
@@ -40,23 +40,21 @@
<th data-export="Authors">Authors</th>
<th data-export="Year">Year</th>
<th data-export="Max LRS">Max LRS <a href="http://genenetwork.org//glossary.html#LRS" target="_blank"><img style="width: 15px; height: 15px;" src="/static/new/images/question_mark.jpg"></a></th>
- <th data-export="LRS Location">Max LRS Location</th>
<th data-export="Additive Effect">Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank"><img style="width: 15px; height: 15px;" src="/static/new/images/question_mark.jpg"></a></th>
</tr>
</thead>
<tbody>
{% for this_trait in trait_list %}
- <tr id="trait:{{ this_trait.name }}:{{ this_trait.dataset.name }}">
- <td align="center" style="padding-right: 0px; padding-left: 5px;"><input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}"></td>
+ <tr id="trait:{{ this_trait.name }}:{{ this_trait.dataset }}">
+ <td align="center" style="padding-right: 0px; padding-left: 5px;"><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.dataset.group.species }}">{{ this_trait.dataset.group.species }}</td>
- <td data-export="{{ this_trait.dataset.group.name }}">{{ this_trait.dataset.group.name }}</td>
- <td data-export="{{ this_trait.name }}"><a href="{{ url_for('show_trait_page', trait_id = this_trait.name, dataset = this_trait.dataset.name)}}">{{ this_trait.name }}</a></td>
- <td data-export="{{ this_trait.description_display }}">{{ this_trait.description_display }}</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.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.description }}">{{ this_trait.description }}</td>
<td data-export="{{ this_trait.authors }}">{{ this_trait.authors }}</td>
<td data-export="{{ this_trait.pubmed_text }}" data-order="{{ this_trait.pubmed_text }}"><a href="{{ this_trait.pubmed_link }}">{{ this_trait.pubmed_text }}</a></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="{{ this_trait.LRS_location_repr }}" align="right">{{ this_trait.LRS_location_repr }}</td>
<td data-export="{% if this_trait.additive != "" %}{{ this_trait.additive }}{% else %}N/A{% endif %}" align="right">{% if this_trait.additive != "" %}{{ this_trait.additive }}{% else %}N/A{% endif %}</td>
</tr>
{% endfor %}
@@ -72,7 +70,6 @@
<th>Authors</th>
<th>Year</th>
<th data-export="Max LRS">Max LRS <a href="http://genenetwork.org//glossary.html#LRS" target="_blank"><img style="width: 15px; height: 15px;" src="/static/new/images/question_mark.jpg"></a></th>
- <th data-export="LRS Location">Max LRS Location</th>
<th data-export="Additive Effect">Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank"><img style="width: 15px; height: 15px;" src="/static/new/images/question_mark.jpg"></a></th>
</tr>
</tfoot>
@@ -135,7 +132,6 @@
{ "type": "natural", "width": "25%"},
{ "type": "natural" },
{ "type": "natural", "width": "8%"},
- { "type": "natural", "width": "12%"},
{ "type": "natural" }
],
"columnDefs": [
diff --git a/wqflask/wqflask/templates/show_trait_edit_data.html b/wqflask/wqflask/templates/show_trait_edit_data.html
index 482d1d88..ac2f1078 100644
--- a/wqflask/wqflask/templates/show_trait_edit_data.html
+++ b/wqflask/wqflask/templates/show_trait_edit_data.html
@@ -56,6 +56,7 @@
<select id="norm_method" class="select optional span2">
<option value="log2">Log2</option>
<option value="qnorm">Quantile</option>
+ <option value="sqrt">Square Root</option>
</select>
</div>
<!--
diff --git a/wqflask/wqflask/templates/show_trait_mapping_tools.html b/wqflask/wqflask/templates/show_trait_mapping_tools.html
index a54b595b..495a266e 100644
--- a/wqflask/wqflask/templates/show_trait_mapping_tools.html
+++ b/wqflask/wqflask/templates/show_trait_mapping_tools.html
@@ -14,9 +14,11 @@
<li>
<a href="#rqtl_geno" data-toggle="tab">R/qtl</a>
</li>
+<!--
<li>
<a href="#pylmm" data-toggle="tab">pyLMM</a>
</li>
+-->
{% endif %}
{% for mapping_method in dataset.group.mapping_names %}
{% if mapping_method == "GEMMA" %}
@@ -74,6 +76,12 @@
{% if g.user_session.logged_in %}
{% if g.user_session.num_collections < 1 %}
No collections available. Please add traits to a collection to use them as covariates.
+ {% else %}
+ <div style="margin-bottom: 10px;" class="btn-group" role="group">
+ <button type="button" id="select_covariates" class="btn btn-default">Select</button>
+ <button type="button" id="remove_covariates" class="btn btn-default">Remove</button>
+ </div>
+ <textarea rows="3" cols="20" readonly placeholder="No covariates selected" style="overflow-y: scroll; resize: none;" class="selected_covariates"></textarea>
{% endif %}
{% elif g.cookie_session.display_num_collections() == "" %}
No collections available. Please add traits to a collection to use them as covariates.
@@ -330,8 +338,10 @@
<dd>Interval mapping is a process in which the statistical significance of a hypothetical QTL is evaluated at regular points across a chromosome, even in the absence of explicit genotype data at those points.</dd>
<dt>R/qtl</dt>
<dd>R/qtl is an extensible, interactive environment for mapping quantitative trait loci (QTL) in experimental crosses.</dd>
+<!--
<dt>pyLMM</dt>
<dd>pyLMM is a fast and lightweight linear mixed-model (LMM) solver for use in genome-wide association studies (GWAS).</dd>
+-->
{% endif %}
</dl>
</div>
diff --git a/wqflask/wqflask/user_manager.py b/wqflask/wqflask/user_manager.py
index 830c7864..d6f39e83 100644
--- a/wqflask/wqflask/user_manager.py
+++ b/wqflask/wqflask/user_manager.py
@@ -49,7 +49,7 @@ def timestamp():
class AnonUser(object):
"""Anonymous user handling"""
- cookie_name = 'anon_user_v8'
+ cookie_name = 'anon_user_v1'
def __init__(self):
self.cookie = request.cookies.get(self.cookie_name)
@@ -60,23 +60,10 @@ class AnonUser(object):
else:
logger.debug("CREATING NEW ANON COOKIE")
self.anon_id, self.cookie = create_signed_cookie()
+ res = flask.make_response()
+ res.set_cookie(self.cookie_name, self.cookie)
self.key = "anon_collection:v1:{}".format(self.anon_id)
- #ZS: This was originally the commented out function below
- # For some reason I don't yet understand the commented out code works on production,
- # but wouldn't set cookies for staging and my branch. The new code (using @app.after_request) seems to work.
- @app.after_request
- def set_cookie(response):
- if self.cookie:
- pass
- else:
- response.set_cookie(self.cookie_name, self.cookie)
- return response
-
- #@after.after_this_request
- #def set_cookie(response):
- # response.set_cookie(self.cookie_name, self.cookie)
-
def add_collection(self, new_collection):
collection_dict = dict(name = new_collection.name,
created_timestamp = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 2089f9de..ae333e73 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -43,6 +43,7 @@ from base.data_set import DataSet # Used by YAML in marker_regression
from wqflask.show_trait import show_trait
from wqflask.show_trait import export_trait_data
from wqflask.heatmap import heatmap
+from wqflask.comparison_bar_chart import comparison_bar_chart
from wqflask.marker_regression import marker_regression
from wqflask.marker_regression import marker_regression_gn1
from wqflask.network_graph import network_graph
@@ -464,6 +465,27 @@ def heatmap_page():
return rendered_template
+@app.route("/comparison_bar_chart", methods=('POST',))
+def comp_bar_chart_page():
+ logger.info("In comp bar chart, request.form is:", pf(request.form))
+ logger.info(request.url)
+
+ start_vars = request.form
+
+ traits = [trait.strip() for trait in start_vars['trait_list'].split(',')]
+ if traits[0] != "":
+ template_vars = comparison_bar_chart.ComparisonBarChart(request.form)
+ template_vars.js_data = json.dumps(template_vars.js_data,
+ default=json_default_handler,
+ indent=" ")
+
+ result = template_vars.__dict__
+ rendered_template = render_template("comparison_bar_chart.html", **result)
+ else:
+ rendered_template = render_template("empty_collection.html", **{'tool':'Comparison Bar Chart'})
+
+ return rendered_template
+
@app.route("/mapping_results_container")
def mapping_results_container_page():
return render_template("mapping_results_container.html")