about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-10-05 06:04:52 +0300
committerFrederick Muriuki Muriithi2022-10-05 06:04:52 +0300
commitfb4aa5d0a3a33f980b754cac3e69b8cbd63e3855 (patch)
tree6a28a1d361c0f8c72b169c4076f3be98ea7d1ef2
parent6f5f94d2d59f2f558697b455f0e4b732e5e958e3 (diff)
downloadgenenetwork2-fb4aa5d0a3a33f980b754cac3e69b8cbd63e3855.tar.gz
Bug: Check for compatible datasets for a correlation type
-rw-r--r--wqflask/wqflask/correlation/exceptions.py12
-rw-r--r--wqflask/wqflask/correlation/rust_correlation.py13
2 files changed, 25 insertions, 0 deletions
diff --git a/wqflask/wqflask/correlation/exceptions.py b/wqflask/wqflask/correlation/exceptions.py
new file mode 100644
index 00000000..8e9c8516
--- /dev/null
+++ b/wqflask/wqflask/correlation/exceptions.py
@@ -0,0 +1,12 @@
+"""Correlation-Specific Exceptions"""
+
+class WrongCorrelationType(Exception):
+    """Raised when a correlation is requested for incompatible datasets."""
+
+    def __init__(self, trait, target_dataset, corr_method):
+        message = (
+            f"It is not possible to compute the '{corr_method}' correlations "
+            f"between trait '{trait.name}' and the data in the "
+            f"'{target_dataset.fullname}' dataset. "
+            "Please try again after selecting another type of correlation.")
+        super().__init__(message)
diff --git a/wqflask/wqflask/correlation/rust_correlation.py b/wqflask/wqflask/correlation/rust_correlation.py
index 51e24cd9..df030e72 100644
--- a/wqflask/wqflask/correlation/rust_correlation.py
+++ b/wqflask/wqflask/correlation/rust_correlation.py
@@ -17,6 +17,8 @@ from gn3.computations.rust_correlation import get_sample_corr_data
 from gn3.computations.rust_correlation import parse_tissue_corr_data
 from gn3.db_utils import database_connector
 
+from wqflask.correlation.exceptions import WrongCorrelationType
+
 
 def query_probes_metadata(dataset, trait_list):
     """query traits metadata in bulk for probeset"""
@@ -267,12 +269,20 @@ def __compute_sample_corr__(
         target_data, list(sample_data.values()), method, ",", corr_type,
         n_top)
 
+def __datasets_compatible_p__(trait_dataset, target_dataset, corr_method):
+    return not (
+        corr_method in ("tissue", "Tissue r", "Literature r", "lit")
+        and (trait_dataset.type == "ProbeSet" and
+             target_dataset.type in ("Publish", "Geno")))
 
 def __compute_tissue_corr__(
         start_vars: dict, corr_type: str, method: str, n_top: int,
         target_trait_info: tuple):
     """Compute the tissue correlations"""
     (this_dataset, this_trait, target_dataset, sample_data) = target_trait_info
+    if not __datasets_compatible_p__(this_dataset, target_dataset, corr_type):
+        raise WrongCorrelationType(this_trait, target_dataset, corr_type)
+
     trait_symbol_dict = target_dataset.retrieve_genes("Symbol")
     corr_result_tissue_vals_dict = get_trait_symbol_and_tissue_values(
         symbol_list=list(trait_symbol_dict.values()))
@@ -294,6 +304,9 @@ def __compute_lit_corr__(
         target_trait_info: tuple):
     """Compute the literature correlations"""
     (this_dataset, this_trait, target_dataset, sample_data) = target_trait_info
+    if not __datasets_compatible_p__(this_dataset, target_dataset, corr_type):
+        raise WrongCorrelationType(this_trait, target_dataset, corr_type)
+
     target_dataset_type = target_dataset.type
     this_dataset_type = this_dataset.type
     (this_trait_geneid, geneid_dict, species) = do_lit_correlation(