aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/correlation/show_corr_results.py113
1 files changed, 98 insertions, 15 deletions
diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py
index d3e50972..ab8781cb 100644
--- a/wqflask/wqflask/correlation/show_corr_results.py
+++ b/wqflask/wqflask/correlation/show_corr_results.py
@@ -74,6 +74,95 @@ def set_template_vars(start_vars, correlation_data):
return correlation_data
+def generate_table_metadata(all_traits, dataset_metadata, dataset_obj):
+
+ def __fetch_trait_data__(trait, dataset_obj):
+ target_trait_ob = create_trait(dataset=dataset_obj,
+ name=trait,
+ get_qtl_info=True)
+ return jsonable(target_trait_ob, dataset_obj)
+
+ metadata = [__fetch_trait_data__(trait, dataset_obj) for
+ trait in (all_traits ^ dataset_metadata.keys())]
+ return (dataset_metadata | ({trait["name"]: trait for trait in metadata}))
+
+
+def populate_table(dataset_metadata,target_dataset,corr_results):
+ def __populate_trait__(idx, target_trait, target_dataset):
+ results_dict = {}
+ results_dict['index'] = idx + 1 #
+ results_dict['trait_id'] = target_trait['name']
+ results_dict['dataset'] = target_dataset['name']
+ results_dict['hmac'] = hmac.data_hmac(
+ '{}:{}'.format(target_trait['name'], target_dataset['name']))
+ results_dict['sample_r'] = f"{float(trait.get('corr_coefficient',0.0)):.3f}"
+ results_dict['num_overlap'] = trait.get('num_overlap', 0)
+ results_dict['sample_p'] = f"{float(trait.get('p_value',0)):.3e}"
+ if target_dataset['type'] == "ProbeSet":
+ results_dict['symbol'] = target_trait['symbol']
+ results_dict['description'] = "N/A"
+ results_dict['location'] = target_trait['location']
+ results_dict['mean'] = "N/A"
+ results_dict['additive'] = "N/A"
+ if target_trait['description']:
+ results_dict['description'] = target_trait['description']
+ if target_trait['mean']:
+ results_dict['mean'] = f"{float(target_trait['mean']):.3f}"
+ try:
+ results_dict['lod_score'] = f"{float(target_trait['lrs_score']) / 4.61:.1f}"
+ except:
+ results_dict['lod_score'] = "N/A"
+ results_dict['lrs_location'] = target_trait['lrs_location']
+ if target_trait['additive']:
+ results_dict['additive'] = f"{float(target_trait['additive']):.3f}"
+ results_dict['lit_corr'] = "--"
+ results_dict['tissue_corr'] = "--"
+ results_dict['tissue_pvalue'] = "--"
+ if this_dataset['type'] == "ProbeSet":
+ if 'lit_corr' in trait:
+ results_dict['lit_corr'] = f"{float(trait['lit_corr']):.3f}"
+ if 'tissue_corr' in trait:
+ results_dict['tissue_corr'] = f"{float(trait['tissue_corr']):.3f}"
+ results_dict['tissue_pvalue'] = f"{float(trait['tissue_p_val']):.3e}"
+ elif target_dataset['type'] == "Publish":
+ results_dict['abbreviation_display'] = "N/A"
+ results_dict['description'] = "N/A"
+ results_dict['mean'] = "N/A"
+ results_dict['authors_display'] = "N/A"
+ results_dict['additive'] = "N/A"
+ results_dict['pubmed_link'] = "N/A"
+ results_dict['pubmed_text'] = target_trait["pubmed_text"]
+
+ if target_trait["abbreviation"]:
+ results_dict = target_trait['abbreviation']
+
+ if target_trait["description"] == target_trait['description']:
+ results_dict['description'] = target_trait['description']
+
+ if target_trait["mean"]:
+ results_dict['mean'] = f"{float(target_trait['mean']):.3f}"
+
+ if target_trait["authors"]:
+ authors_list = target_trait['authors'].split(',')
+ results_dict['authors_display'] = ", ".join(
+ authors_list[:6]) + ", et al." if len(authors_list) > 6 else target_trait['authors']
+
+ if "pubmed_id" in target_trait:
+ results_dict['pubmed_link'] = target_trait['pubmed_link']
+ results_dict['pubmed_text'] = target_trait['pubmed_text']
+ try:
+ results_dict["lod_score"] = f"{float(target_trait['lrs_score']) / 4.61:.1f}"
+ except ValueError:
+ results_dict['lod_score'] = "N/A"
+ else:
+ results_dict['lrs_location'] = target_trait['lrs_location']
+
+ return results_dict
+
+ return [__populate_trait__(idx, target_trait, target_dataset)
+ for (idx, target_trait) in enumerate(corr_results)]
+
+
def correlation_json_for_table(start_vars, correlation_data, this_trait, this_dataset, target_dataset_ob):
"""Return JSON data for use with the DataTable in the correlation result page
@@ -87,12 +176,12 @@ def correlation_json_for_table(start_vars, correlation_data, this_trait, this_da
this_dataset = correlation_data['this_dataset']
target_dataset = target_dataset_ob.as_dict()
- corr_results = correlation_data['correlation_results']
results_list = []
- new_traits_metadata = {}
-
- dataset_metadata = correlation_data["traits_metadata"]
+ dataset_metadata = generate_table_metadata({name for trait in corr_results
+ for (name, _val) in trait.items()},
+ correlation_data["traits_metadata"],
+ target_dataset_ob)
min_expr = get_float(start_vars, 'min_expr')
p_range_lower = get_float(start_vars, 'p_range_lower', -1.0)
@@ -100,7 +189,7 @@ def correlation_json_for_table(start_vars, correlation_data, this_trait, this_da
if ('loc_chr' in start_vars and
'min_loc_mb' in start_vars and
- 'max_loc_mb' in start_vars):
+ 'max_loc_mb' in start_vars):
location_chr = get_string(start_vars, 'loc_chr')
min_location_mb = get_int(start_vars, 'min_loc_mb')
@@ -113,15 +202,8 @@ def correlation_json_for_table(start_vars, correlation_data, this_trait, this_da
trait = trait_dict[trait_name]
target_trait = dataset_metadata.get(trait_name)
- if target_trait is None:
- target_trait_ob = create_trait(dataset=target_dataset_ob,
- name=trait_name,
- get_qtl_info=True)
- target_trait = jsonable(target_trait_ob, target_dataset_ob)
- new_traits_metadata[trait_name] = target_trait
-
- if (float(trait.get('corr_coefficient',0.0)) >= p_range_lower and
- float(trait.get('corr_coefficient',0.0)) <= p_range_upper):
+ if (float(trait.get('corr_coefficient', 0.0)) >= p_range_lower and
+ float(trait.get('corr_coefficient', 0.0)) <= p_range_upper):
if (target_dataset['type'] == "ProbeSet" or target_dataset['type'] == "Publish") and bool(target_trait['mean']):
if (min_expr != None) and (float(target_trait['mean']) < min_expr):
@@ -146,6 +228,7 @@ def correlation_json_for_table(start_vars, correlation_data, this_trait, this_da
else:
continue
+
results_dict = {}
results_dict['index'] = i + 1
results_dict['trait_id'] = target_trait['name']
@@ -153,7 +236,7 @@ def correlation_json_for_table(start_vars, correlation_data, this_trait, this_da
results_dict['hmac'] = hmac.data_hmac(
'{}:{}'.format(target_trait['name'], target_dataset['name']))
results_dict['sample_r'] = f"{float(trait.get('corr_coefficient',0.0)):.3f}"
- results_dict['num_overlap'] = trait.get('num_overlap',0)
+ results_dict['num_overlap'] = trait.get('num_overlap', 0)
results_dict['sample_p'] = f"{float(trait.get('p_value',0)):.3e}"
if target_dataset['type'] == "ProbeSet":
results_dict['symbol'] = target_trait['symbol']