view STACKS_procrad.py @ 0:d6ba40f6c824

first commit
author cmonjeau
date Mon, 24 Aug 2015 09:29:12 +0000
parents
children c9e10e0d6c10
line wrap: on
line source

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import os
import re
import tempfile
import subprocess
import glob
import shutil
import argparse
from os.path import basename
import zipfile
import tarfile
import gzip
from stacks import *


def __main__():

    # arguments recuperation

    parser = argparse.ArgumentParser()
    parser.add_argument('--input_type')
    parser.add_argument('--input_enzyme')
    parser.add_argument('--input_single')
    parser.add_argument('--input_paired1')
    parser.add_argument('--input_paired2')
    parser.add_argument('--inputype')
    parser.add_argument('--sample_name')
    parser.add_argument('--barcode')
    parser.add_argument('--output_choice')
    parser.add_argument('--output_archive')
    parser.add_argument('--enzyme1')
    parser.add_argument('--enzyme2')
    parser.add_argument('--outype')
    parser.add_argument('--qualitenc')
    parser.add_argument('-D', action='store_true')
    parser.add_argument('-t')
    parser.add_argument('-q', action='store_true')
    parser.add_argument('--activate_advanced_options')
    parser.add_argument('-r', action='store_true')
    parser.add_argument('-w', default='0.15')
    parser.add_argument('-s', default='10')
    parser.add_argument('-c', action='store_true')
    parser.add_argument('--inline_null', action='store_true')
    parser.add_argument('--index_null', action='store_true')
    parser.add_argument('--inline_inline', action='store_true')
    parser.add_argument('--index_index', action='store_true')
    parser.add_argument('--inline_index', action='store_true')
    parser.add_argument('--index_inline', action='store_true')
    parser.add_argument('--logfile')
    options = parser.parse_args()

    # create the working dir
    os.mkdir('inputs')
    os.mkdir('job_outputs')
    os.mkdir('galaxy_outputs')

    cmd_line = []
    cmd_line.append('process_radtags')
    cmd_line.extend(['-p', 'inputs'])
    cmd_line.extend(['-i', options.inputype])
    cmd_line.extend(['-b', options.barcode])

    # parse config files and create symlink into the temp dir

    if options.input_type == 'single':

        # load the config file
        input_single = options.input_single

        # parse the input_file to extract filenames and filepaths
        tab_files = galaxy_config_to_tabfiles(input_single)

        # create symlink into the temp dir
        create_symlinks_from_tabfiles(tab_files, 'inputs')
    else:

        # load config files
        input_paired1 = options.input_paired1
        input_paired2 = options.input_paired2

        # parse the input_file to extract filenames and filepaths

        tab_files_paired1 = galaxy_config_to_tabfiles(input_paired1)
        tab_files_paired2 = galaxy_config_to_tabfiles(input_paired2)

        # create symlinks into the temp dir

        create_symlinks_from_tabfiles(tab_files_paired1, 'inputs')
        create_symlinks_from_tabfiles(tab_files_paired2, 'inputs')

        cmd_line.append('-P')

    # test nb enzyme
    if options.input_enzyme == '1':
        cmd_line.extend(['-e', options.enzyme1])

    if options.input_enzyme == '2':
        cmd_line.extend(['---renz_1', options.enzyme1, '--renz_2', options.enzyme2])

    # quality
    cmd_line.extend(['-E', options.qualitenc])

    # outputs
    cmd_line.extend(['-o', 'job_outputs/'])
    cmd_line.extend(['-y', options.outype])
    
    # test capture discards
    if options.D:
        cmd_line.append('-D')
    
    # optional options
    if options.activate_advanced_options == "true":

        if options.q:
            cmd_line.append('-q')
        if options.r:
            cmd_line.append('-r')
        
        cmd_line.extend(['-w', options.w, '-s', options.s])
        
        if options.c:
            cmd_line.append('-c')
        if options.t != '-1':
            cmd_line.extend(['-t', options.t])
        if options.inline_null:
            cmd_line.append('--inline_null')
        if options.index_null:
            cmd_line.append('--index_null')
        if options.inline_inline:
            cmd_line.append('--inline_inline')
        if options.index_index:
            cmd_line.append('--index_index')
        if options.inline_index:
            cmd_line.append('--inline_index')
        if options.index_inline:
            cmd_line.append('--index_inline')

    print '[CMD_LINE] : ' + ' '.join(cmd_line)

    p = subprocess.call(cmd_line)

    # postprocesses

    try:
        shutil.move('job_outputs/process_radtags.log', options.logfile)
    except:
        sys.stderr.write('Error in process_radtags execution; Please read the additional output (stdout)\n')
        sys.exit(1)        

    if options.discard_file:
        discards_file_name = glob.glob('job_outputs/*.discards')[0]
        shutil.move(discards_file_name, options.discard_file)

    # manage outputs names

    change_outputs_procrad_name(os.getcwd() + '/job_outputs', options.sample_name)

    # generate additional output archive file

    if options.output_choice != '1':
        generate_additional_archive_file(os.getcwd() + '/job_outputs', options.output_archive)

    # if user has not choose the only zip archive

    if options.output_choice != '3':
        list_files = glob.glob('job_outputs/*')
        for i in list_files:
            shutil.move(i, 'galaxy_outputs')


if __name__ == '__main__':
    __main__()