about summary refs log tree commit diff
path: root/gn3/computations
diff options
context:
space:
mode:
Diffstat (limited to 'gn3/computations')
-rw-r--r--gn3/computations/gemma.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/gn3/computations/gemma.py b/gn3/computations/gemma.py
index ae04c40..5741692 100644
--- a/gn3/computations/gemma.py
+++ b/gn3/computations/gemma.py
@@ -5,8 +5,11 @@ import string
 
 from base64 import b64encode
 from hashlib import md5
+from typing import Dict
 from typing import List
+from typing import Optional
 from typing import ValuesView
+from gn3.commands import compose_gemma_cmd
 
 def generate_random_n_string(n_length: int) -> str:
     """Generate a random string that is N chars long"""
@@ -50,3 +53,26 @@ def do_paths_exist(paths: ValuesView) -> bool:
         if not os.path.isfile(path):
             return False
     return True
+
+
+def generate_gemma_computation_cmd(gemma_cmd: str,
+                                   gemma_kwargs: Dict[str, str],
+                                   output_file: str) -> Optional[str]:
+    """Create a higher order function that generates a command"""
+    geno_filename = gemma_kwargs.get("geno_filename", "")
+    trait_filename = gemma_kwargs.get("trait_filename")
+    ext, snps_filename = geno_filename.partition(".")[-1], ""
+    if geno_filename:
+        snps_filename = geno_filename.replace(f".{ext}", "")
+        snps_filename += f"_snps.{ext}"
+    _kwargs = {"g": geno_filename, "p": trait_filename}
+    if gemma_kwargs.get("covar_filename"):
+        _kwargs["a"] = gemma_kwargs.get("covar_filename")
+    if not do_paths_exist(_kwargs.values()):  # Prevents injection!
+        return None
+    if _kwargs.get("lmm"):
+        _kwargs["lmm"] = gemma_kwargs.get("lmm")
+    return compose_gemma_cmd(gemma_wrapper_cmd=gemma_cmd,
+                             gemma_kwargs=_kwargs,
+                             gemma_args=["-gk", ">",
+                                         output_file])