diff options
author | BonfaceKilz | 2021-09-28 11:21:07 +0300 |
---|---|---|
committer | GitHub | 2021-09-28 11:21:07 +0300 |
commit | 674dc56b9df38e7cf1bbc65a2fc6bf3cc16f7231 (patch) | |
tree | f35b34525843542aca50c4f22c6b62ca59d1a057 /gn3/computations | |
parent | 0cbb6ecde0315b7d6f021cb17406f5e5197e8a05 (diff) | |
parent | 16235188d4ee2ad21a667832baf6cbbea6d8856a (diff) | |
download | genenetwork3-674dc56b9df38e7cf1bbc65a2fc6bf3cc16f7231.tar.gz |
Merge pull request #38 from genenetwork/feature/wgcna_analysis
script for wgcna analysis
Diffstat (limited to 'gn3/computations')
-rw-r--r-- | gn3/computations/wgcna.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py new file mode 100644 index 0000000..fd508fa --- /dev/null +++ b/gn3/computations/wgcna.py @@ -0,0 +1,51 @@ +"""module contains code to preprocess and call wgcna script""" + +import os +import json +import uuid +from gn3.settings import TMPDIR + +from gn3.commands import run_cmd + + +def dump_wgcna_data(request_data: dict): + """function to dump request data to json file""" + filename = f"{str(uuid.uuid4())}.json" + + temp_file_path = os.path.join(TMPDIR, filename) + + with open(temp_file_path, "w") as output_file: + json.dump(request_data, output_file) + + return temp_file_path + + +def compose_wgcna_cmd(rscript_path: str, temp_file_path: str): + """function to componse wgcna cmd""" + # (todo):issue relative paths to abs paths + cmd = f"Rscript ./scripts/{rscript_path} {temp_file_path}" + return cmd + + +def call_wgcna_script(rscript_path: str, request_data: dict): + """function to call wgcna script""" + generated_file = dump_wgcna_data(request_data) + cmd = compose_wgcna_cmd(rscript_path, generated_file) + + try: + + run_cmd_results = run_cmd(cmd) + + with open(generated_file, "r") as outputfile: + + if run_cmd_results["code"] != 0: + return run_cmd_results + return { + "data": json.load(outputfile), + **run_cmd_results + } + except FileNotFoundError: + # relook at handling errors gn3 + return { + "output": "output file not found" + } |