Mercurial > repos > yating-l > jbrowsearchivecreator
comparison TrackHub.py @ 39:4a69515eed63 draft
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit 91271a6c0d39c923f0d460b2979247baa297286b-dirty
author | yating-l |
---|---|
date | Fri, 13 Apr 2018 18:21:35 -0400 |
parents | d17f629f5486 |
children | b1553f2a4942 |
comparison
equal
deleted
inserted
replaced
38:d17f629f5486 | 39:4a69515eed63 |
---|---|
15 from util import santitizer | 15 from util import santitizer |
16 | 16 |
17 | 17 |
18 class TrackHub: | 18 class TrackHub: |
19 def __init__(self, inputFastaFile, outputFile, extra_files_path, tool_directory, trackType): | 19 def __init__(self, inputFastaFile, outputFile, extra_files_path, tool_directory, trackType): |
20 | |
21 self.rootAssemblyHub = None | |
22 | 20 |
23 self.mySpecieFolderPath = None | 21 self.mySpecieFolderPath = None |
24 | 22 |
25 # Store intermediate files, will be removed if not in debug mode | 23 # Store intermediate files, will be removed if not in debug mode |
26 self.myTracksFolderPath = None | 24 self.myTracksFolderPath = None |
25 | |
26 # Store interval files and their tabix index | |
27 self.myFinalTracksFolderPath = None | |
27 | 28 |
28 # Store binary files: Bam, BigWig | 29 # Store binary files: Bam, BigWig |
29 self.myBinaryFolderPath = None | 30 self.myBinaryFolderPath = None |
30 | 31 |
31 self.tool_directory = tool_directory | 32 self.tool_directory = tool_directory |
36 self.outputFile = outputFile | 37 self.outputFile = outputFile |
37 self.chromSizesFile = None | 38 self.chromSizesFile = None |
38 | 39 |
39 | 40 |
40 # Set all the missing variables of this class, and create physically the folders/files | 41 # Set all the missing variables of this class, and create physically the folders/files |
41 self.rootAssemblyHub = self.__createAssemblyHub__(extra_files_path=extra_files_path) | 42 self.__createAssemblyHub__(extra_files_path=extra_files_path) |
42 # Init the Datatype | 43 # Init the Datatype |
43 Datatype.pre_init(self.reference_genome, self.chromSizesFile, | 44 Datatype.pre_init(self.reference_genome, self.chromSizesFile, |
44 self.extra_files_path, self.tool_directory, | 45 self.extra_files_path, self.tool_directory, |
45 self.mySpecieFolderPath, self.myTracksFolderPath, self.myFinalTracksFolderPath, self.myBinaryFolderPath, self.trackType) | 46 self.mySpecieFolderPath, self.myTracksFolderPath, self.myBinaryFolderPath, self.trackType) |
46 | 47 |
47 self._prepareRefseq() | 48 self._prepareRefseq() |
48 self.trackList = os.path.join(self.mySpecieFolderPath, "trackList.json") | 49 self.trackList = os.path.join(self.mySpecieFolderPath, "trackList.json") |
49 self._createTrackList() | 50 self._createTrackList() |
50 | 51 if Datatype.trackType == 'HTMLFeatures': |
51 self.myTrackStyle = TrackStyles(self.tool_directory, self.mySpecieFolderPath, self.trackList) | 52 self.myTrackStyle = TrackStyles(self.tool_directory, self.mySpecieFolderPath, self.trackList) |
52 #self.cssFolderPath = os.path.join(self.mySpecieFolderPath, 'css') | |
53 #self.cssFilePath = os.path.join(self.cssFolderPath, 'custom_track_styles.css') | |
54 self.logger = logging.getLogger(__name__) | 53 self.logger = logging.getLogger(__name__) |
55 | 54 |
56 | 55 |
57 | 56 |
58 def addTrack(self, trackDbObject): | 57 def addTrack(self, trackDbObject): |
59 if trackDbObject['dataType'].lower() == 'bam': | 58 if trackDbObject['dataType'].lower() == 'bam': |
60 #new_track = subprocess.Popen(['echo', trackDbObject['options']], stdout=subprocess.PIPE) | |
61 #subprocess.call(['add-track-json.pl', json_file], stdin=new_track.stdout) | |
62 subtools.add_track_json(self.trackList, trackDbObject['options']) | 59 subtools.add_track_json(self.trackList, trackDbObject['options']) |
63 #subtools.add_track_json(self.trackList, trackDbObject['track_json']) | |
64 elif trackDbObject['dataType'].lower() == 'bigwig': | 60 elif trackDbObject['dataType'].lower() == 'bigwig': |
65 subtools.add_track_json(self.trackList, trackDbObject['options']) | 61 subtools.add_track_json(self.trackList, trackDbObject['options']) |
66 else: | 62 else: |
67 if trackDbObject['trackType'] == 'HTMLFeatures': | 63 if trackDbObject['trackType'] == 'HTMLFeatures': |
68 self._customizeHTMLFeature(trackDbObject) | 64 self._customizeHTMLFeature(trackDbObject) |
69 subtools.flatfile_to_json(trackDbObject['trackDataURL'], trackDbObject['dataType'], trackDbObject['trackType'], trackDbObject['trackLabel'], self.mySpecieFolderPath, trackDbObject['options']) | 65 subtools.flatfile_to_json(trackDbObject['trackDataURL'], trackDbObject['dataType'], trackDbObject['trackType'], trackDbObject['trackLabel'], self.mySpecieFolderPath, trackDbObject['options']) |
70 # Use Tabix index tracks by default for CanvasFeatures | 66 # Use Tabix index tracks by default for CanvasFeatures |
71 # TODO: add support for HTMLFeatures | 67 # TODO: add support for HTMLFeatures |
72 else: | 68 else: |
73 subtools.generate_tabix_indexed_track(trackDbObject['trackDataURL'], trackDbObject['dataType'], self.myFinalTracksFolderPath) | 69 subtools.generate_tabix_indexed_track(trackDbObject['trackDataURL'], trackDbObject['dataType'], trackDbObject['track'], self.myFinalTracksFolderPath) |
74 subtools.add_track_json(self.trackList, trackDbObject['options']) | 70 subtools.add_track_json(self.trackList, trackDbObject['options']) |
75 | 71 |
76 def terminate(self, debug=False): | 72 def terminate(self, debug=False): |
77 """ Write html file """ | 73 """ Write html file """ |
78 self._indexName() | 74 self._indexName() |
79 if not debug: | 75 if not debug: |
80 self._removeRaw() | 76 self._removeRaw() |
81 #self._makeArchive() | |
82 self._outHtml() | 77 self._outHtml() |
83 print "Success!\n" | 78 print "Success!\n" |
84 | 79 |
85 | 80 |
86 def _customizeHTMLFeature(self, trackDbObject): | 81 def _customizeHTMLFeature(self, trackDbObject): |
105 if not os.path.exists(self.trackList): | 100 if not os.path.exists(self.trackList): |
106 os.mknod(self.trackList) | 101 os.mknod(self.trackList) |
107 | 102 |
108 def _prepareRefseq(self): | 103 def _prepareRefseq(self): |
109 subtools.prepare_refseqs(self.reference_genome.false_path, self.mySpecieFolderPath) | 104 subtools.prepare_refseqs(self.reference_genome.false_path, self.mySpecieFolderPath) |
110 #try: | |
111 #print os.path.join(self.tool_dir, 'prepare-refseqs.pl') + ", '--fasta', " + self.reference +", '--out', self.json])" | |
112 #subprocess.call(['prepare-refseqs.pl', '--fasta', self.reference_genome.false_path, '--out', self.mySpecieFolderPath]) | |
113 #except OSError as e: | |
114 #print "Cannot prepare reference error({0}): {1}".format(e.errno, e.strerror) | |
115 | 105 |
116 def _indexName(self): | 106 def _indexName(self): |
117 #subprocess.call(['generate-names.pl', '-v', '--out', self.mySpecieFolderPath]) | |
118 subtools.generate_names(self.mySpecieFolderPath) | 107 subtools.generate_names(self.mySpecieFolderPath) |
119 print "finished name index \n" | 108 print "finished name index \n" |
120 | 109 |
121 def _outHtml(self): | 110 def _outHtml(self): |
122 mylookup = TemplateLookup(directories=[os.path.join(self.tool_directory, 'templates')], | 111 mylookup = TemplateLookup(directories=[os.path.join(self.tool_directory, 'templates')], |
123 output_encoding='utf-8', encoding_errors='replace') | 112 output_encoding='utf-8', encoding_errors='replace') |
124 htmlTemplate = mylookup.get_template("display.txt") | 113 htmlTemplate = mylookup.get_template("display.txt") |
125 | 114 |
126 with open(self.outputFile, 'w') as htmlfile: | 115 with open(self.outputFile, 'w') as htmlfile: |
127 htmlMakoRendered = htmlTemplate.render( | 116 htmlMakoRendered = htmlTemplate.render( |
128 species_folder = os.path.relpath(self.mySpecieFolderPath, self.extra_files_path), | 117 jbrowse_hub_name = self.reference_genome.assembly_id, |
129 trackList = os.path.relpath(self.trackList, self.extra_files_path) | 118 trackList = os.path.relpath(self.trackList, self.extra_files_path) |
130 ) | 119 ) |
131 htmlfile.write(htmlMakoRendered) | 120 htmlfile.write(htmlMakoRendered) |
132 #with open(self.outputFile, 'w') as htmlfile: | |
133 # htmlstr = 'The new Organism "%s" is created on Apollo: <br>' % self.genome_name | |
134 # jbrowse_hub = '<li><a href = "%s" target="_blank">View JBrowse Hub on Apollo</a></li>' % host_name | |
135 # htmlstr += jbrowse_hub | |
136 # htmlfile.write(htmlstr) | |
137 | |
138 | |
139 | 121 |
140 def __createAssemblyHub__(self, extra_files_path): | 122 def __createAssemblyHub__(self, extra_files_path): |
141 # Get all necessaries infos first | 123 # Get all necessaries infos first |
142 # 2bit file creation from input fasta | 124 # 2bit file creation from input fasta |
143 | |
144 # baseNameFasta = os.path.basename(fasta_file_name) | |
145 # suffixTwoBit, extensionTwoBit = os.path.splitext(baseNameFasta) | |
146 # nameTwoBit = suffixTwoBit + '.2bit' | |
147 twoBitFile = tempfile.NamedTemporaryFile(bufsize=0) | 125 twoBitFile = tempfile.NamedTemporaryFile(bufsize=0) |
148 subtools.faToTwoBit(self.reference_genome.false_path, twoBitFile.name) | 126 subtools.faToTwoBit(self.reference_genome.false_path, twoBitFile.name) |
149 | 127 |
150 # Generate the twoBitInfo | 128 # Generate the twoBitInfo |
151 twoBitInfoFile = tempfile.NamedTemporaryFile(bufsize=0) | 129 twoBitInfoFile = tempfile.NamedTemporaryFile(bufsize=0) |
152 subtools.twoBitInfo(twoBitFile.name, twoBitInfoFile.name) | 130 subtools.twoBitInfo(twoBitFile.name, twoBitInfoFile.name) |
153 | 131 |
154 # Then we get the output to generate the chromSizes | 132 # Then we get the output to generate the chromSizes |
155 self.chromSizesFile = tempfile.NamedTemporaryFile(bufsize=0, suffix=".chrom.sizes") | 133 self.chromSizesFile = tempfile.NamedTemporaryFile(bufsize=0, suffix=".chrom.sizes") |
156 subtools.sortChromSizes(twoBitInfoFile.name, self.chromSizesFile.name) | 134 subtools.sortChromSizes(twoBitInfoFile.name, self.chromSizesFile.name) |
157 | 135 |
158 # We can get the biggest scaffold here, with chromSizesFile | 136 # We can get the biggest scaffold here, with chromSizesFile |
159 with open(self.chromSizesFile.name, 'r') as chrom_sizes: | 137 with open(self.chromSizesFile.name, 'r') as chrom_sizes: |
160 # TODO: Check if exists | 138 # TODO: Check if exists |
161 self.default_pos = chrom_sizes.readline().split()[0] | 139 self.default_pos = chrom_sizes.readline().split()[0] |
162 | 140 |
163 # TODO: Manage to put every fill Function in a file dedicated for reading reasons | 141 # Create the specie folder, use generic name "myHub", to support display JBrowse with Galaxy display application |
164 # Create the root directory | 142 mySpecieFolderPath = os.path.join(extra_files_path, "myHub") |
165 myHubPath = os.path.join(extra_files_path, "myHub") | |
166 if not os.path.exists(myHubPath): | |
167 os.makedirs(myHubPath) | |
168 | |
169 # Create the specie folder | |
170 mySpecieFolderPath = os.path.join(myHubPath, self.genome_name) | |
171 if not os.path.exists(mySpecieFolderPath): | 143 if not os.path.exists(mySpecieFolderPath): |
172 os.makedirs(mySpecieFolderPath) | 144 os.makedirs(mySpecieFolderPath) |
173 self.mySpecieFolderPath = mySpecieFolderPath | 145 self.mySpecieFolderPath = mySpecieFolderPath |
174 | 146 |
175 # Create the folder named 'raw' inside the specie folder to place raw files | 147 # Create the folder named 'raw' inside the specie folder to place raw files |
186 | 158 |
187 myBinaryFolderPath = os.path.join(mySpecieFolderPath, 'bbi') | 159 myBinaryFolderPath = os.path.join(mySpecieFolderPath, 'bbi') |
188 if not os.path.exists(myBinaryFolderPath): | 160 if not os.path.exists(myBinaryFolderPath): |
189 os.makedirs(myBinaryFolderPath) | 161 os.makedirs(myBinaryFolderPath) |
190 self.myBinaryFolderPath = myBinaryFolderPath | 162 self.myBinaryFolderPath = myBinaryFolderPath |
191 | |
192 return myHubPath |