#!/usr/bin/env python2.7
#(c) 2013-2014 by Authors
#This file is a part of Ragout program.
#Released under the BSD license (see LICENSE file)
"""
A script for automatic testing
"""
from __future__ import print_function
import os
import subprocess
import shutil
TESTS = {"ecoli" : {"recipe" : "examples/E.Coli/ecoli.rcp",
"coords" : "examples/E.Coli/mg1655.coords",
"max_errors" : 0,
"max_errors_refine" : 0,
"min_contigs" : 78,
"min_contigs_refine" : 145,
"max_scaffolds" : 1,
"outdir" : "ecoli-test",
"scaf_pref" : "mg1655_scaffolds"},
#"helicobacter" : {"recipe" : "examples/H.Pylori/helicobacter.rcp",
# "coords" : "examples/H.Pylori/SJM180.coords",
# "max_errors" : 0,
# "max_errors_refine" : 0,
# "min_contigs" : 45,
# "min_contigs_refine" : 126,
# "max_scaffolds" : 1,
# "outdir" : "helicobacter-test"},
"cholerae" : {"recipe" : "examples/V.Cholerae/cholerae.rcp",
"coords" : "examples/V.Cholerae/h1.coords",
"max_errors" : 0,
"max_errors_refine" : 16,
"min_contigs" : 169,
"min_contigs_refine" : 719,
"max_scaffolds" : 4,
"outdir" : "cholerae-test",
"scaf_pref" : "h1_scaffolds"},
"aureus" : {"recipe" : "examples/S.Aureus/aureus.rcp",
"coords" : "examples/S.Aureus/usa300.coords",
"max_errors" : 0,
"max_errors_refine" : 2,
"min_contigs" : 89,
"min_contigs_refine" : 164,
"max_scaffolds" : 1,
"outdir" : "aureus-test",
"scaf_pref" : "usa_scaffolds"}}
TEST_DIR = "test-dir"
RAGOUT_EXEC = "ragout.py"
VERIFY_EXEC = os.path.join("scripts", "verify-order.py")
def test_environment():
if not os.path.isfile(RAGOUT_EXEC):
raise RuntimeError("File \"{0}\" was not found".format(RAGOUT_EXEC))
if not os.path.isfile(VERIFY_EXEC):
raise RuntimeError("File \"{0}\" was not found".format(VERIFY_EXEC))
def run_test(parameters):
outdir = os.path.join(TEST_DIR, parameters["outdir"])
cmd = ["python2.7", "ragout.py", parameters["recipe"],
"--outdir", outdir, "--debug"]
print("Running:", " ".join(cmd), "\n")
subprocess.check_call(cmd)
links_simple = os.path.join(outdir, parameters["scaf_pref"] + ".links")
links_simple_out = links_simple + "_verify"
#checking before refinement
cmd = ["python2.7", VERIFY_EXEC, parameters["coords"], links_simple]
print("Running:", " ".join(cmd), "\n")
subprocess.check_call(cmd, stdout=open(links_simple_out, "w"))
with open(links_simple_out, "r") as f:
for line in f:
if line.startswith("Total miss-ordered: "):
value = int(line.strip()[20:])
print("Errors:", value)
if value > parameters["max_errors"]:
raise RuntimeError("Too many miss-ordered contigs")
if line.startswith("Total contigs: "):
value = int(line.strip()[15:])
print("Contigs:", value)
if value < parameters["min_contigs"]:
raise RuntimeError("Too few contigs")
if line.startswith("Total scaffolds: "):
value = int(line.strip()[17:])
print("Scaffolds:", value)
if value > parameters["max_scaffolds"]:
raise RuntimeError("Too many scaffolds")
#checking after refinement
cmd = ["python2.7", "ragout.py", parameters["recipe"],
"--outdir", outdir, "--debug", "--refine"]
print("Running:", " ".join(cmd), "\n")
subprocess.check_call(cmd)
cmd = ["python2.7", VERIFY_EXEC, parameters["coords"], links_simple]
print("Running:", " ".join(cmd), "\n")
subprocess.check_call(cmd, stdout=open(links_simple_out, "w"))
with open(links_simple_out, "r") as f:
for line in f:
if line.startswith("Total miss-ordered: "):
value = int(line.strip()[20:])
print("Errors:", value)
if value > parameters["max_errors_refine"]:
raise RuntimeError("Too many miss-ordered contigs")
if line.startswith("Total contigs: "):
value = int(line.strip()[15:])
print("Contigs:", value)
if value < parameters["min_contigs_refine"]:
raise RuntimeError("Too few contigs")
if line.startswith("Total scaffolds: "):
value = int(line.strip()[17:])
print("Scaffolds:", value)
if value > parameters["max_scaffolds"]:
raise RuntimeError("Too many scaffolds")
def main():
test_environment()
if os.path.isdir(TEST_DIR):
shutil.rmtree(TEST_DIR)
os.mkdir(TEST_DIR)
for name, params in TESTS.items():
print("\n********Running test:", name, "********\n")
run_test(params)
print("\n********All tests were succesfully completed********")
#shutil.rmtree(TEST_DIR)
if __name__ == "__main__":
main()