From 6c3edf38ecc6549bc2cdf3893067d64a0a8e0ba3 Mon Sep 17 00:00:00 2001
From: zsloan
Date: Wed, 31 May 2017 16:01:21 +0000
Subject: Added various tool options to correlation results page and improved
table appearance for mRNA assay data sets (still need to improve it for
others)
Fixed minor logic issue in trait.py
---
wqflask/base/trait.py | 2 ++
1 file changed, 2 insertions(+)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index e22a51e4..33a4efe9 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -206,6 +206,8 @@ class GeneralTrait(object):
formatted = self.description
if self.probe_target_description:
formatted += "; " + self.probe_target_description
+ else:
+ formatted = "Not available"
elif self.dataset.type == 'Publish':
if self.confidential:
formatted = self.pre_publication_description
--
cgit v1.2.3
From be458ca49557b93d2e5b8a0407d42f0a2fe9673f Mon Sep 17 00:00:00 2001
From: zsloan
Date: Fri, 9 Jun 2017 17:19:36 +0000
Subject: - Changed the way the genofile is set so different genofiles can be
selected for mapping - Now shows error page for Correlation Matrix if traits
aren't all from the same group (later need to make it check for shared
samples, since different groups may contain some of the same samples -
Mapping results page now displays the genofile in the information section -
Only show Interval Analyst if species is mouse or rat (previously it would
show a blank table for other species) - Network Graph now only shows links in
a node's info if the relevant information (for example geneid) exists, and
the label changes depending on the type of data set - Other minor changes to
the appearance of the Network Graph menu (less white space, plus clickable
descriptions for a couple options) - Improved Correlations Results page to
shorten Description and Authors cell content for Phenotype traits (to keep
table width manageable) - Changed the glossary links for LRS and Additive
Effect columns for Gene Global Search - Improved appearance for Phenotype
Global Search results - Temporarily removed Mapping options/features that
don't work from the trait page
---
wqflask/base/data_set.py | 7 +-
.../wqflask/correlation_matrix/show_corr_matrix.py | 163 +++++++++++----------
.../wqflask/marker_regression/marker_regression.py | 11 +-
.../marker_regression/marker_regression_gn1.py | 2 +
wqflask/wqflask/network_graph/network_graph.py | 22 ++-
wqflask/wqflask/static/new/css/network_graph.css | 1 -
.../wqflask/static/new/javascript/network_graph.js | 16 +-
wqflask/wqflask/templates/correlation_matrix.html | 16 +-
wqflask/wqflask/templates/correlation_page.html | 13 +-
wqflask/wqflask/templates/empty_collection.html | 15 --
wqflask/wqflask/templates/gsearch_gene.html | 12 +-
wqflask/wqflask/templates/gsearch_pheno.html | 76 +++++-----
.../wqflask/templates/marker_regression_gn1.html | 13 +-
wqflask/wqflask/templates/network_graph.html | 23 ++-
.../templates/show_trait_mapping_tools.html | 26 +---
15 files changed, 213 insertions(+), 203 deletions(-)
delete mode 100644 wqflask/wqflask/templates/empty_collection.html
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 4959457a..dbdbb51c 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -169,7 +169,7 @@ def mescape(*items):
class Markers(object):
"""Todo: Build in cacheing so it saves us reading the same file more than once"""
def __init__(self, name):
- json_data_fh = open(locate(name + '.json','genotype/json'))
+ json_data_fh = open(locate(name + ".json",'genotype/json'))
try:
markers = json.load(json_data_fh)
except:
@@ -334,7 +334,10 @@ class DatasetGroup(object):
else:
marker_class = Markers
- self.markers = marker_class(self.name)
+ if self.genofile:
+ self.markers = marker_class(self.genofile[:-5])
+ else:
+ self.markers = marker_class(self.name)
def get_f1_parent_strains(self):
try:
diff --git a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
index 95a5f6a6..b34beb7b 100644
--- a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
+++ b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
@@ -72,7 +72,14 @@ class CorrelationMatrix(object):
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
@@ -81,100 +88,102 @@ class CorrelationMatrix(object):
if sample not in self.all_sample_list:
self.all_sample_list.append(sample)
- 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)
+ 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
- if len(this_trait_vals) < len(self.trait_list): #Shouldn't do PCA if there are more traits than observations/samples
- return False
+ 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.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning)
+ if len(this_trait_vals) < len(self.trait_list): #Shouldn't do PCA if there are more traits than observations/samples
+ return False
- self.corr_results = []
- self.pca_corr_results = []
- self.trait_data_array = []
- for trait_db in self.trait_list:
- this_trait = trait_db[0]
- this_db = trait_db[1]
+ self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning)
- this_db_samples = this_db.group.all_samples_ordered()
- this_sample_data = this_trait.data
+ self.corr_results = []
+ self.pca_corr_results = []
+ self.trait_data_array = []
+ for trait_db in self.trait_list:
+ this_trait = trait_db[0]
+ this_db = trait_db[1]
- this_trait_vals = []
- for index, sample in enumerate(this_db_samples):
- if (sample in this_sample_data):
- sample_value = this_sample_data[sample].value
- this_trait_vals.append(sample_value)
- self.trait_data_array.append(this_trait_vals)
-
- corr_result_row = []
- pca_corr_result_row = []
- is_spearman = False #ZS: To determine if it's above or below the diagonal
- for target in self.trait_list:
- target_trait = target[0]
- target_db = target[1]
- target_samples = target_db.group.all_samples_ordered()
- target_sample_data = target_trait.data
+ this_db_samples = this_db.group.all_samples_ordered()
+ this_sample_data = this_trait.data
this_trait_vals = []
- target_vals = []
- for index, sample in enumerate(target_samples):
- if (sample in this_sample_data) and (sample in target_sample_data):
+ for index, sample in enumerate(this_db_samples):
+ if (sample in this_sample_data):
sample_value = this_sample_data[sample].value
- target_sample_value = target_sample_data[sample].value
this_trait_vals.append(sample_value)
- target_vals.append(target_sample_value)
-
- this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals)
-
- if num_overlap < self.lowest_overlap:
- self.lowest_overlap = num_overlap
- if num_overlap == 0:
- corr_result_row.append([target_trait, 0, num_overlap])
- pca_corr_result_row.append(0)
- else:
- pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals)
- if is_spearman == False:
- sample_r, sample_p = pearson_r, pearson_p
- if sample_r == 1:
- is_spearman = True
+ self.trait_data_array.append(this_trait_vals)
+
+ corr_result_row = []
+ pca_corr_result_row = []
+ is_spearman = False #ZS: To determine if it's above or below the diagonal
+ for target in self.trait_list:
+ target_trait = target[0]
+ target_db = target[1]
+ target_samples = target_db.group.all_samples_ordered()
+ target_sample_data = target_trait.data
+
+ this_trait_vals = []
+ target_vals = []
+ for index, sample in enumerate(target_samples):
+ if (sample in this_sample_data) and (sample in target_sample_data):
+ sample_value = this_sample_data[sample].value
+ target_sample_value = target_sample_data[sample].value
+ this_trait_vals.append(sample_value)
+ target_vals.append(target_sample_value)
+
+ this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals)
+
+ if num_overlap < self.lowest_overlap:
+ self.lowest_overlap = num_overlap
+ if num_overlap == 0:
+ corr_result_row.append([target_trait, 0, num_overlap])
+ pca_corr_result_row.append(0)
else:
- sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals)
-
- corr_result_row.append([target_trait, sample_r, num_overlap])
- pca_corr_result_row.append(pearson_r)
+ pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals)
+ if is_spearman == False:
+ sample_r, sample_p = pearson_r, pearson_p
+ if sample_r == 1:
+ is_spearman = True
+ else:
+ sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals)
- self.corr_results.append(corr_result_row)
- self.pca_corr_results.append(pca_corr_result_row)
+ corr_result_row.append([target_trait, sample_r, num_overlap])
+ pca_corr_result_row.append(pearson_r)
- corr_result_eigen = la.eigenvectors(numarray.array(self.pca_corr_results))
- corr_eigen_value, corr_eigen_vectors = sortEigenVectors(corr_result_eigen)
+ self.corr_results.append(corr_result_row)
+ self.pca_corr_results.append(pca_corr_result_row)
- groups = []
- for sample in self.all_sample_list:
- groups.append(1)
+ corr_result_eigen = la.eigenvectors(numarray.array(self.pca_corr_results))
+ corr_eigen_value, corr_eigen_vectors = sortEigenVectors(corr_result_eigen)
- pca = self.calculate_pca(range(len(self.traits)), corr_eigen_value, corr_eigen_vectors)
+ groups = []
+ for sample in self.all_sample_list:
+ groups.append(1)
- self.loadings_array = self.process_loadings()
+ pca = self.calculate_pca(range(len(self.traits)), corr_eigen_value, corr_eigen_vectors)
- self.js_data = dict(traits = [trait.name for trait in self.traits],
- groups = groups,
- cols = range(len(self.traits)),
- rows = range(len(self.traits)),
- samples = self.all_sample_list,
- sample_data = self.sample_data,)
- # corr_results = [result[1] for result in result_row for result_row in self.corr_results])
+ self.loadings_array = self.process_loadings()
+ self.js_data = dict(traits = [trait.name for trait in self.traits],
+ groups = groups,
+ cols = range(len(self.traits)),
+ rows = range(len(self.traits)),
+ samples = self.all_sample_list,
+ sample_data = self.sample_data,)
+ # corr_results = [result[1] for result in result_row for result_row in self.corr_results])
def get_trait_db_obs(self, trait_db_list):
diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py
index 8882c515..60424468 100644
--- a/wqflask/wqflask/marker_regression/marker_regression.py
+++ b/wqflask/wqflask/marker_regression/marker_regression.py
@@ -148,6 +148,10 @@ class MarkerRegression(object):
self.showGenes = "ON"
self.viewLegend = "ON"
+ if 'genofile' in start_vars:
+ if start_vars['genofile'] != "":
+ self.genofile_string = start_vars['genofile']
+ self.dataset.group.genofile = self.genofile_string.split(":")[0]
self.dataset.group.get_markers()
if self.mapping_method == "gemma":
self.score_type = "-log(p)"
@@ -162,11 +166,10 @@ class MarkerRegression(object):
self.mapping_scale = "morgan"
self.control_marker = start_vars['control_marker']
self.do_control = start_vars['do_control']
- self.dataset.group.genofile = start_vars['genofile']
self.method = start_vars['mapmethod_rqtl_geno']
self.model = start_vars['mapmodel_rqtl_geno']
- if start_vars['pair_scan'] == "true":
- self.pair_scan = True
+ #if start_vars['pair_scan'] == "true":
+ # self.pair_scan = True
if self.permCheck and self.num_perm > 0:
self.perm_output, self.suggestive, self.significant, results = rqtl_mapping.run_rqtl_geno(self.vals, self.dataset, self.method, self.model, self.permCheck, self.num_perm, self.do_control, self.control_marker, self.manhattan_plot, self.pair_scan)
else:
@@ -198,7 +201,6 @@ class MarkerRegression(object):
self.control_marker = start_vars['control_marker']
self.do_control = start_vars['do_control']
- self.dataset.group.genofile = start_vars['genofile']
logger.info("Running qtlreaper")
results, self.json_data, self.perm_output, self.suggestive, self.significant, self.bootstrap_results = qtlreaper_mapping.gen_reaper_results(self.this_trait,
self.dataset,
@@ -217,7 +219,6 @@ class MarkerRegression(object):
#results = self.run_plink()
elif self.mapping_method == "pylmm":
logger.debug("RUNNING PYLMM")
- self.dataset.group.genofile = start_vars['genofile']
if self.num_perm > 0:
self.run_permutations(str(temp_uuid))
results = self.gen_data(str(temp_uuid))
diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/marker_regression_gn1.py
index 82a44796..d99ac074 100644
--- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py
+++ b/wqflask/wqflask/marker_regression/marker_regression_gn1.py
@@ -171,6 +171,8 @@ class MarkerRegression(object):
self.dataset = start_vars['dataset']
self.this_trait = start_vars['this_trait']
self.species = start_vars['species']
+ if 'genofile_string' in start_vars:
+ self.genofile_string = start_vars['genofile_string']
#Needing for form submission when doing single chr mapping or remapping after changing options
self.samples = start_vars['samples']
diff --git a/wqflask/wqflask/network_graph/network_graph.py b/wqflask/wqflask/network_graph/network_graph.py
index cebe5c03..4ce6c48d 100644
--- a/wqflask/wqflask/network_graph/network_graph.py
+++ b/wqflask/wqflask/network_graph/network_graph.py
@@ -181,12 +181,21 @@ class NetworkGraph(object):
self.edges_list.append(edge_dict)
- node_dict = { 'data' : {'id' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
- 'label' : this_trait.name,
- 'symbol' : this_trait.symbol,
- 'geneid' : this_trait.geneid,
- 'omim' : this_trait.omim,
- 'max_corr' : max_corr } }
+ if trait_db[1].type == "ProbeSet":
+ node_dict = { 'data' : {'id' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
+ 'label' : this_trait.symbol,
+ 'symbol' : this_trait.symbol,
+ 'geneid' : this_trait.geneid,
+ 'omim' : this_trait.omim,
+ 'max_corr' : max_corr } }
+ elif trait_db[1].type == "Publish":
+ node_dict = { 'data' : {'id' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
+ 'label' : this_trait.name,
+ 'max_corr' : max_corr } }
+ else:
+ node_dict = { 'data' : {'id' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
+ 'label' : this_trait.name,
+ 'max_corr' : max_corr } }
self.nodes_list.append(node_dict)
#self.network_data['dataSchema'] = {'nodes' : [{'name' : "label" , 'type' : "string"}],
@@ -211,7 +220,6 @@ class NetworkGraph(object):
# corr_results = [result[1] for result in result_row for result_row in self.corr_results])
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):
diff --git a/wqflask/wqflask/static/new/css/network_graph.css b/wqflask/wqflask/static/new/css/network_graph.css
index 1cba546a..1a0bafeb 100644
--- a/wqflask/wqflask/static/new/css/network_graph.css
+++ b/wqflask/wqflask/static/new/css/network_graph.css
@@ -14,7 +14,6 @@
position: relative;
float: left;
width: 18.5em;
- padding: 1em 1em 1em 1em;
background: #fff url('/static/new/images/a1.gif') top right repeat-y;
}
diff --git a/wqflask/wqflask/static/new/javascript/network_graph.js b/wqflask/wqflask/static/new/javascript/network_graph.js
index d1afd47c..731acf1a 100644
--- a/wqflask/wqflask/static/new/javascript/network_graph.js
+++ b/wqflask/wqflask/static/new/javascript/network_graph.js
@@ -12,7 +12,7 @@ window.onload=function() {
selector: 'node',
style: {
'background-color': '#666',
- 'label': 'data(symbol)',
+ 'label': 'data(label )',
'font-size': 10
}
},
@@ -81,10 +81,18 @@ window.onload=function() {
function create_qtips(cy){
cy.nodes().qtip({
content: function(){
+ qtip_content = ''
gn_link = ''+''+this.data().id +''+'
'
- ncbi_link = 'NCBI'+'
'
- omim_link = 'OMIM'+'
'
- qtip_content = gn_link + ncbi_link + omim_link
+ qtip_content += gn_link
+ if (typeof(this.data().geneid) !== 'undefined'){
+ ncbi_link = 'NCBI'+'
'
+ qtip_content += ncbi_link
+ }
+ if (typeof(this.data().omim) !== 'undefined'){
+ omim_link = 'OMIM'+'
'
+ qtip_content += omim_link
+ }
+ //qtip_content = gn_link + ncbi_link + omim_link
return qtip_content
//return ''+''+this.data().id +''+''
},
diff --git a/wqflask/wqflask/templates/correlation_matrix.html b/wqflask/wqflask/templates/correlation_matrix.html
index eb675568..ab793d58 100644
--- a/wqflask/wqflask/templates/correlation_matrix.html
+++ b/wqflask/wqflask/templates/correlation_matrix.html
@@ -64,21 +64,15 @@
Factor Loadings Plot
-
-
+
Factor Loadings Table
-
- | Factor 1 | -Factor 2 | - {% if trait_list|length > 2 %}Factor 3 | {% endif %} - +Factor 1 | +Factor 2 | + {% if trait_list|length > 2 %}Factor 3 | {% endif %}Description | Location | Mean | -Max LRS ? | +Max LRS | Max LRS Location | -Additive ? | +Additive Effect | @@ -80,9 +80,9 @@Description | Location | Mean | -Max LRS ? | -Max LRS Location | -Additive ? | +Max LRS | +Max LRS Location | +Additive Effect |
---|