diff Datatype.py @ 0:f493979f1408 draft default tip

planemo upload for repository https://github.com/Yating-L/hubarchivecreator-test commit 48b59e91e2dcc2e97735ee35d587960cbfbce932-dirty
author yating-l
date Wed, 21 Dec 2016 12:13:04 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Datatype.py	Wed Dec 21 12:13:04 2016 -0500
@@ -0,0 +1,115 @@
+#!/usr/bin/python
+# -*- coding: utf8 -*-
+
+"""
+Super Class of the managed datatype
+"""
+
+import os
+import tempfile
+
+from util import subtools
+from Track import Track
+from TrackDb import TrackDb
+
+
+class Datatype(object):
+
+    twoBitFile = None
+
+    input_fasta_file = None
+    extra_files_path = None
+    tool_directory = None
+
+    mySpecieFolderPath = None
+    myTrackFolderPath = None
+
+    twoBitFile = None
+    chromSizesFile = None
+
+    track = None
+
+    def __init__(self):
+
+        not_init_message = "The {0} is not initialized." \
+                           "Did you use pre_init static method first?"
+        if Datatype.input_fasta_file is None:
+            raise TypeError(not_init_message.format('reference genome'))
+        if Datatype.extra_files_path is None:
+            raise TypeError(not_init_message.format('track Hub path'))
+        if Datatype.tool_directory is None:
+            raise TypeError(not_init_message.format('tool directory'))
+
+    @staticmethod
+    def pre_init(reference_genome, two_bit_path, chrom_sizes_file,
+                 extra_files_path, tool_directory, specie_folder, tracks_folder):
+        Datatype.extra_files_path = extra_files_path
+        Datatype.tool_directory = tool_directory
+
+        # TODO: All this should be in TrackHub and not in Datatype
+        Datatype.mySpecieFolderPath = specie_folder
+        Datatype.myTrackFolderPath = tracks_folder
+
+        Datatype.input_fasta_file = reference_genome
+
+        # 2bit file creation from input fasta
+        Datatype.twoBitFile = two_bit_path
+        Datatype.chromSizesFile = chrom_sizes_file
+
+    @staticmethod
+    def get_largest_scaffold_name(self):
+        # We can get the biggest scaffold here, with chromSizesFile
+        with open(Datatype.chromSizesFile.name, 'r') as chrom_sizes:
+            # TODO: Check if exists
+            return chrom_sizes.readline().split()[0]
+
+    # TODO: Rename for PEP8
+    def getShortName( self, name_to_shortify ):
+        # Slice to get from Long label the short label
+        short_label_slice = slice(0, 15)
+
+        return name_to_shortify[short_label_slice]
+
+    # TODO: Better handle parameters, use heritance mecanism
+    # TODO: Use default parameters for some, like visibility
+    def createTrack(self,
+                    file_path=None,
+                    track_name=None, long_label=None, thick_draw_item='off',
+                    short_label=None, track_type=None, visibility=None, priority=None,
+                    track_file=None, track_color='#000000', group_name="Default"):
+
+        # TODO: Remove the hardcoded "tracks" by the value used as variable from myTrackFolderPath
+        data_url = "tracks/%s" % file_path
+
+        if not short_label:
+            short_label = self.getShortName(long_label)
+
+        # Replace '_' by ' ', to invert the sanitization mecanism
+        # TODO: Find a better way to manage the sanitization of file path
+        long_label = long_label.replace("_", " ")
+        short_label = short_label.replace("_", " ")
+
+        #TODO: Check if rgb or hexa
+        # Convert hexa to rgb array
+        hexa_without_sharp = track_color.lstrip('#')
+        rgb_array = [int(hexa_without_sharp[i:i+2], 16) for i in (0, 2, 4)]
+        rgb_ucsc = ','.join(map(str, rgb_array))
+
+        track_db = TrackDb(
+                trackName=track_name,
+                longLabel=long_label,
+                shortLabel=short_label,
+                trackDataURL=data_url,
+                trackType=track_type,
+                visibility=visibility,
+                thickDrawItem=thick_draw_item,
+                priority=priority,
+                track_color=rgb_ucsc,
+                group_name=group_name
+        )
+
+        # Return the Bam Track Object
+        self.track = Track(
+                trackFile=track_file,
+                trackDb=track_db,
+        )