diff util/subtools.py @ 1:fb5e60d4d18a draft

planemo upload for repository https://github.com/goeckslab/hub-archive-creator commit 64cfc08088d11f6818c1b4e5514ef9e67969eaff-dirty
author rmarenco
date Wed, 13 Jul 2016 13:36:37 -0400
parents
children acc233161f50
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/util/subtools.py	Wed Jul 13 13:36:37 2016 -0400
@@ -0,0 +1,159 @@
+#!/usr/bin/python
+# -*- coding: utf8 -*-
+
+"""
+This class handles the subprocess calls of the different tools used
+in HubArchiveCreator
+"""
+
+import os
+import subprocess
+
+
+def _handleExceptionAndCheckCall(array_call, **kwargs):
+    """
+    This class handle exceptions and call the tool.
+    It maps the signature of subprocess.check_call:
+    See https://docs.python.org/2/library/subprocess.html#subprocess.check_call
+    """
+    stdin = kwargs.get('stdin')
+    stdout = kwargs.get('stdout')
+    stderr = kwargs.get('stderr')
+    shell = kwargs.get('shell')
+    try:
+        p = subprocess.check_call(array_call, stdin=stdin, stdout=stdout, stderr=stderr, shell=shell)
+    except subprocess.CalledProcessError:
+        raise
+    return p
+
+
+def twoBitInfo(two_bit_file_name, two_bit_info_file):
+    """
+    Call twoBitInfo and write the result into twoBit_info_file
+    :param two_bit_file_name:
+    :param two_bit_info_file:
+    :return the subprocess.check_call return object:
+    """
+    array_call = ['twoBitInfo', two_bit_file_name, two_bit_info_file]
+    p = _handleExceptionAndCheckCall(array_call)
+    return p
+
+
+def faToTwoBit(fasta_file_name, mySpecieFolder):
+    """
+    This function call faToTwoBit UCSC tool, and return the twoBitFile
+    :param fasta_file_name:
+    :param mySpecieFolder:
+    :return:
+    """
+    baseNameFasta = os.path.basename(fasta_file_name)
+    suffixTwoBit, extensionTwoBit = os.path.splitext(baseNameFasta)
+    nameTwoBit = suffixTwoBit + '.2bit'
+
+    with open(os.path.join(mySpecieFolder, nameTwoBit), 'w') as twoBitFile:
+        array_call = ['faToTwoBit', fasta_file_name, twoBitFile.name]
+        _handleExceptionAndCheckCall(array_call)
+
+    return twoBitFile
+
+
+def gtfToGenePred(input_gtf_file_name, gene_pred_file_name):
+    """
+    Call gtfToGenePred and write the result into gene_pred_file_name
+    :param input_gtf_file_name:
+    :param gene_pred_file_name:
+    :return:
+    """
+    array_call = ['gtfToGenePred', input_gtf_file_name, gene_pred_file_name]
+    p = _handleExceptionAndCheckCall(array_call)
+    return p
+
+
+def gff3ToGenePred(input_gff3_file_name, gene_pred_file_name):
+    """
+    Call gff3ToGenePred and write the result into gene_pred_file_name
+    :param input_gff3_file_name:
+    :param gene_pred_file_name:
+    :return:
+    """
+    array_call = ['gff3ToGenePred', input_gff3_file_name, gene_pred_file_name]
+    p = _handleExceptionAndCheckCall(array_call)
+    return p
+
+
+def genePredToBed(gene_pred_file_name, unsorted_bed_file_name):
+    """
+    Call genePredToBed and write the result into unsorted_bed_file_name
+    :param gene_pred_file_name:
+    :param unsorted_bed_file_name:
+    :return:
+    """
+    array_call = ['genePredToBed', gene_pred_file_name, unsorted_bed_file_name]
+    p = _handleExceptionAndCheckCall(array_call)
+    return p
+
+
+def sort(unsorted_bed_file_name, sorted_bed_file_name):
+    """
+    Call sort with -k1,1 -k2,2n on unsorted_bed_file_name and write the result into sorted_bed_file_name
+    :param unsorted_bed_file_name:
+    :param sorted_bed_file_name:
+    :return:
+    """
+    array_call = ['sort', '-k', '1,1', '-k', '2,2n', unsorted_bed_file_name, '-o', sorted_bed_file_name]
+    p = _handleExceptionAndCheckCall(array_call)
+    return p
+
+
+def sortChromSizes(two_bit_info_file_name, chrom_sizes_file_name):
+    """
+    Call sort with -k2rn on two_bit_info_file_name and write the result into chrom_sizes_file_name
+    :param two_bit_info_file_name:
+    :param chrom_sizes_file_name:
+    :return:
+    """
+    array_call = ['sort', '-k2rn', two_bit_info_file_name, '-o', chrom_sizes_file_name]
+    p = _handleExceptionAndCheckCall(array_call)
+    return p
+
+
+def bedToBigBed(sorted_bed_file_name, chrom_sizes_file_name, big_bed_file_name, typeOption=None, autoSql=None):
+    """
+    Call bedToBigBed on sorted_bed_file_name, using chrom_sizes_file_name and write the result into big_bed_file_name
+    :param sorted_bed_file_name:
+    :param chrom_sizes_file_name:
+    :param big_bed_file_name:
+    :return:
+    """
+    array_call = ['bedToBigBed', sorted_bed_file_name, chrom_sizes_file_name, big_bed_file_name]
+    if typeOption:
+        array_call.append(typeOption)
+    if autoSql:
+        array_call.append(autoSql)
+
+    p = _handleExceptionAndCheckCall(array_call)
+    return p
+
+
+def sortBam(input_bam_file_name, output_sorted_bam_name):
+    """
+    Call samtools on input_bam_file_name and output the result in output_sorted_bam_name
+    :param input_bam_file_name:
+    :param output_sorted_bam_name:
+    :return:
+    """
+    array_call = ['samtools', 'sort', input_bam_file_name, '-o', output_sorted_bam_name]
+    p = _handleExceptionAndCheckCall(array_call)
+    return p
+
+
+def createBamIndex(input_sorted_bam_file_name, output_name_index_name):
+    """
+    Call `samtools index` on imput_sorted_bam_file_name and output the result in output_name_index_name
+    :param input_sorted_bam_file_name:
+    :param output_name_index_name:
+    :return:
+    """
+    array_call = ['samtools', 'index', input_sorted_bam_file_name, output_name_index_name]
+    p = _handleExceptionAndCheckCall(array_call)
+    return p