about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexanderKabui2022-11-07 20:23:40 +0300
committerAlexanderKabui2022-11-09 01:15:39 +0300
commite41eec3edf37ca2ac7859b29f22c52579df94a7d (patch)
tree32af1fb109b523b3724441aa021d1fc876c59215
parentc1ea9ec4854ed5d133c5843dd8369db6b09be10c (diff)
downloadgenenetwork2-e41eec3edf37ca2ac7859b29f22c52579df94a7d.tar.gz
init code refactoring
-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']