comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:f493979f1408
1 #!/usr/bin/python
2 # -*- coding: utf8 -*-
3
4 """
5 Super Class of the managed datatype
6 """
7
8 import os
9 import tempfile
10
11 from util import subtools
12 from Track import Track
13 from TrackDb import TrackDb
14
15
16 class Datatype(object):
17
18 twoBitFile = None
19
20 input_fasta_file = None
21 extra_files_path = None
22 tool_directory = None
23
24 mySpecieFolderPath = None
25 myTrackFolderPath = None
26
27 twoBitFile = None
28 chromSizesFile = None
29
30 track = None
31
32 def __init__(self):
33
34 not_init_message = "The {0} is not initialized." \
35 "Did you use pre_init static method first?"
36 if Datatype.input_fasta_file is None:
37 raise TypeError(not_init_message.format('reference genome'))
38 if Datatype.extra_files_path is None:
39 raise TypeError(not_init_message.format('track Hub path'))
40 if Datatype.tool_directory is None:
41 raise TypeError(not_init_message.format('tool directory'))
42
43 @staticmethod
44 def pre_init(reference_genome, two_bit_path, chrom_sizes_file,
45 extra_files_path, tool_directory, specie_folder, tracks_folder):
46 Datatype.extra_files_path = extra_files_path
47 Datatype.tool_directory = tool_directory
48
49 # TODO: All this should be in TrackHub and not in Datatype
50 Datatype.mySpecieFolderPath = specie_folder
51 Datatype.myTrackFolderPath = tracks_folder
52
53 Datatype.input_fasta_file = reference_genome
54
55 # 2bit file creation from input fasta
56 Datatype.twoBitFile = two_bit_path
57 Datatype.chromSizesFile = chrom_sizes_file
58
59 @staticmethod
60 def get_largest_scaffold_name(self):
61 # We can get the biggest scaffold here, with chromSizesFile
62 with open(Datatype.chromSizesFile.name, 'r') as chrom_sizes:
63 # TODO: Check if exists
64 return chrom_sizes.readline().split()[0]
65
66 # TODO: Rename for PEP8
67 def getShortName( self, name_to_shortify ):
68 # Slice to get from Long label the short label
69 short_label_slice = slice(0, 15)
70
71 return name_to_shortify[short_label_slice]
72
73 # TODO: Better handle parameters, use heritance mecanism
74 # TODO: Use default parameters for some, like visibility
75 def createTrack(self,
76 file_path=None,
77 track_name=None, long_label=None, thick_draw_item='off',
78 short_label=None, track_type=None, visibility=None, priority=None,
79 track_file=None, track_color='#000000', group_name="Default"):
80
81 # TODO: Remove the hardcoded "tracks" by the value used as variable from myTrackFolderPath
82 data_url = "tracks/%s" % file_path
83
84 if not short_label:
85 short_label = self.getShortName(long_label)
86
87 # Replace '_' by ' ', to invert the sanitization mecanism
88 # TODO: Find a better way to manage the sanitization of file path
89 long_label = long_label.replace("_", " ")
90 short_label = short_label.replace("_", " ")
91
92 #TODO: Check if rgb or hexa
93 # Convert hexa to rgb array
94 hexa_without_sharp = track_color.lstrip('#')
95 rgb_array = [int(hexa_without_sharp[i:i+2], 16) for i in (0, 2, 4)]
96 rgb_ucsc = ','.join(map(str, rgb_array))
97
98 track_db = TrackDb(
99 trackName=track_name,
100 longLabel=long_label,
101 shortLabel=short_label,
102 trackDataURL=data_url,
103 trackType=track_type,
104 visibility=visibility,
105 thickDrawItem=thick_draw_item,
106 priority=priority,
107 track_color=rgb_ucsc,
108 group_name=group_name
109 )
110
111 # Return the Bam Track Object
112 self.track = Track(
113 trackFile=track_file,
114 trackDb=track_db,
115 )