Mercurial > repos > rmarenco > hubarchivecreator
diff BigBed.py @ 24:fcc1021bd496 draft
planemo upload for repository https://github.com/goeckslab/hub-archive-creator commit 93e2e2fb59f99677425104a80c17f665fa7b2b4a-dirty
author | yating-l |
---|---|
date | Wed, 31 May 2017 11:35:16 -0400 |
parents | |
children | df42241d3731 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BigBed.py Wed May 31 11:35:16 2017 -0400 @@ -0,0 +1,79 @@ +#!/usr/bin/python + +import os +import shutil +from subprocess import Popen, PIPE +import re + +# Internal dependencies +from Datatype import Datatype + +class BigBed(Datatype): + """ Configurations for creating the bigBed evidence track """ + + def __init__(self, input_bigbed_path, data_bigbed): + super(BigBed, self).__init__() + + self.track = None + + self.input_bigbed_path = input_bigbed_path + self.name_bigbed = data_bigbed["name"] + self.priority = data_bigbed["order_index"] + self.track_color = data_bigbed["track_color"] + self.group_name = data_bigbed["group_name"] + + track_name = "".join((self.name_bigbed, ".bigbed")) + if data_bigbed["long_label"]: + self.long_label = data_bigbed["long_label"] + else: + self.long_label = self.name_bigbed + + bigbed_file_path = os.path.join(self.myTrackFolderPath, track_name) + + track_type = self.determine_track_type(input_bigbed_path) + + shutil.copy(self.input_bigbed_path, bigbed_file_path) + + # Create the Track Object + self.createTrack(file_path=track_name, + track_name=track_name, + long_label=self.long_label, + track_type=track_type, + visibility='hide', + priority=self.priority, + track_file=bigbed_file_path, + track_color=self.track_color, + group_name=self.group_name) + + print "- BigBed %s created" % self.name_bigbed + + + def determine_track_type(self, bb_file): + """ + Determine the number of standard and extra fields using bigBedSummary + + Implementation of reading from stdout is based on a Stackoverflow post: + http://stackoverflow.com/questions/2715847/python-read-streaming-input-from-subprocess-communicate + + :param bb_file: path to a bigBed file + + :returns: the bigBed track type + """ + + cmd_ph = Popen(["bigBedSummary", "-fields", bb_file, "stdout"], + stdout=PIPE, bufsize=1) + + pattern = r"(\d+) bed definition fields, (\d+) total fields" + + with cmd_ph.stdout: + for line in iter(cmd_ph.stdout.readline, b''): + match = re.match(pattern, line) + + if match: + extra_mark = "." if match.group(1) == match.group(2) else "+" + bed_type = "bigBed %s %s" % (match.group(1), extra_mark) + break + + cmd_ph.wait() + + return bed_type