view oases_optimiser.py @ 2:ab37eb09b4ca draft default tip

planemo upload for repository https://github.com/ARTbio/tools-artbio/tree/main/tools/oases commit d5a2de4b4c556e028fc5ef7ffcc7c2d0cf31c5ec
author artbio
date Mon, 12 Feb 2024 23:55:39 +0000
parents f7dd852c8f4c
children
line wrap: on
line source

#!/usr/bin/env python

"""
VelvetOptimiser Wrapper
refactored using the adaptation of
Konrad Paszkiewicz	University of Exeter, UK.

"""
import os
import subprocess
import sys


def stop_err(msg):
    sys.stderr.write("%s\n" % msg)
    sys.exit()


def oases_optimiser(starthash, endhash, input):
    '''
    Replaces call to oases_optimiser.sh. For all k-mers between
    starthash and endhash run velvet and oases.
    '''
    for i in range(starthash, endhash, 2):
        cmd1 = "velveth outputFolder_{0} {0} {1} && ".format(i, input)
        cmd2 = "velvetg outputFolder_{0} -read_trkg yes && ".format(i)
        cmd3 = "oases outputFolder_{0}".format(i)
        proc = subprocess.call(args=cmd1 + cmd2 + cmd3, shell=True,
                               stdout=sys.stdout, stderr=sys.stdout)
        if not proc == 0:
            print("Oases failed at k-mer %s, skipping" % i)
            continue
    cmd4 = "velveth MergedAssemblyFolder 27 -long\
            outputFolder_*/transcripts.fa && "
    cmd5 = "velvetg MergedAssemblyFolder -read_trkg yes -conserveLong yes && "
    cmd6 = "oases MergedAssemblyFolder -merge yes"
    proc = subprocess.call(args=cmd4 + cmd5 + cmd6, shell=True,
                           stdout=sys.stdout, stderr=sys.stdout)
    if not proc == 0:
        raise Exception("Oases could not merge assembly")


def __main__():
    starthash = int(sys.argv[1])
    endhash = int(sys.argv[2])
    input = sys.argv[3]
    transcripts = sys.argv[4]
    try:
        oases_optimiser(starthash, endhash, input)
    except Exception as e:
        stop_err('Error running oases_optimiser.py\n' + str(e))
    with open(transcripts, 'w') as out:
        transcript_path = os.path.join('MergedAssemblyFolder',
                                       'transcripts.fa')
        for line in open(transcript_path):
            out.write("%s" % (line))


if __name__ == "__main__":
    __main__()