aboutsummaryrefslogtreecommitdiff
path: root/gn3
diff options
context:
space:
mode:
Diffstat (limited to 'gn3')
-rw-r--r--gn3/computations/rust_correlation.py46
1 files changed, 44 insertions, 2 deletions
diff --git a/gn3/computations/rust_correlation.py b/gn3/computations/rust_correlation.py
index e739382..926e6fe 100644
--- a/gn3/computations/rust_correlation.py
+++ b/gn3/computations/rust_correlation.py
@@ -1,15 +1,57 @@
import subprocess
+import json
+from gn3.computations.qtlreaper import create_output_directory
+from gn3.random import random_string
from gn3.settings import CORRELATION_COMMAND
from gn3.settings import TMPDIR
-def run_correlation(file_name: str, outputdir: str = TMPDIR):
+def generate_input_files(dataset: list[str], output_dir: str = TMPDIR):
+ """function generates outputfiles and inputfiles"""
- command_list = [CORRELATION_COMMAND, file_name, outputdir]
+ tmpdir = create_output_directory(f"{output_dir}/correlation")
+
+ tmp_file = os.path.join(tmpdir, f"/{random_string(10)}.txt")
+
+ with open(tmp_file, "w") as file_writer:
+ file_writer.write("\n".join(dataset))
+
+ return (tmp_dir, tmp_file)
+
+
+def generate_json_file(**kwargs):
+ """generating json input file required by cargo"""
+
+ (tmp_dir, tmp_file) = generate_json_file(kwargs.get("dataset"))
+
+ tmp_json_file = os.path.join(tmp_dir, f"/{random_string(10)}.json")
+
+ correlation_args = {
+ "method": kwargs.get("method", "pearson"),
+ "file_path": tmp_file,
+ "x_vals": kwargs.get("x_vals"),
+ "file_delimiter": kwargs.get("delimiter", ",")
+ }
+
+ with open(tmp_json_file, "w") as outputfile:
+ json.dump(correlation_args, outputfile)
+
+ return tmp_json_file
+
+
+def run_correlation(dataset, trait_vals: list[str], method: str, delimiter: str):
+ """entry function to call rust correlation"""
+
+ generate_json_file = generate_json_file(
+ {"method": method, "delimiter": delimiter, "x_vals": trait_vals})
+
+ command_list = [CORRELATION_COMMAND, generate_json_file, outputdir]
results = subprocess.run(command_list, check=True)
+ # handle errors
+
return results