Previous changeset 37:43909f065bee (2018-02-15) Next changeset 39:4a69515eed63 (2018-04-13) |
Commit message:
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit e4c1d387db160a3bf4a1e8abc288bdffbbbe2818-dirty |
modified:
TrackHub.py datatypes/Datatype.py datatypes/interval/Interval.py jbrowseArchiveCreator.xml tool_dependencies.xml tracks/CanvasFeatures.py util/subtools.py |
added:
tracks/IntervalFeatures.py |
b |
diff -r 43909f065bee -r d17f629f5486 TrackHub.py --- a/TrackHub.py Thu Feb 15 16:54:36 2018 -0500 +++ b/TrackHub.py Fri Apr 06 13:44:56 2018 -0400 |
[ |
@@ -42,7 +42,7 @@ # Init the Datatype Datatype.pre_init(self.reference_genome, self.chromSizesFile, self.extra_files_path, self.tool_directory, - self.mySpecieFolderPath, self.myTracksFolderPath, self.myBinaryFolderPath, self.trackType) + self.mySpecieFolderPath, self.myTracksFolderPath, self.myFinalTracksFolderPath, self.myBinaryFolderPath, self.trackType) self._prepareRefseq() self.trackList = os.path.join(self.mySpecieFolderPath, "trackList.json") @@ -66,8 +66,12 @@ else: if trackDbObject['trackType'] == 'HTMLFeatures': self._customizeHTMLFeature(trackDbObject) - subtools.flatfile_to_json(trackDbObject['trackDataURL'], trackDbObject['dataType'], trackDbObject['trackType'], trackDbObject['trackLabel'], self.mySpecieFolderPath, trackDbObject['options']) - + subtools.flatfile_to_json(trackDbObject['trackDataURL'], trackDbObject['dataType'], trackDbObject['trackType'], trackDbObject['trackLabel'], self.mySpecieFolderPath, trackDbObject['options']) + # Use Tabix index tracks by default for CanvasFeatures + # TODO: add support for HTMLFeatures + else: + subtools.generate_tabix_indexed_track(trackDbObject['trackDataURL'], trackDbObject['dataType'], self.myFinalTracksFolderPath) + subtools.add_track_json(self.trackList, trackDbObject['options']) def terminate(self, debug=False): """ Write html file """ @@ -163,23 +167,23 @@ os.makedirs(myHubPath) # Create the specie folder - # TODO: Generate the name depending on the specie mySpecieFolderPath = os.path.join(myHubPath, self.genome_name) if not os.path.exists(mySpecieFolderPath): os.makedirs(mySpecieFolderPath) self.mySpecieFolderPath = mySpecieFolderPath - # We create the 2bit file while we just created the specie folder - #self.twoBitName = self.genome_name + ".2bit" - #self.two_bit_final_path = os.path.join(self.mySpecieFolderPath, self.twoBitName) - #shutil.copyfile(twoBitFile.name, self.two_bit_final_path) - - # Create the folder tracks into the specie folder + # Create the folder named 'raw' inside the specie folder to place raw files tracksFolderPath = os.path.join(mySpecieFolderPath, "raw") if not os.path.exists(tracksFolderPath): os.makedirs(tracksFolderPath) self.myTracksFolderPath = tracksFolderPath + # Create the folder tracks into the specie folder + finalTracksFolderPath = os.path.join(mySpecieFolderPath, "tracks") + if not os.path.exists(finalTracksFolderPath): + os.makedirs(finalTracksFolderPath) + self.myFinalTracksFolderPath = finalTracksFolderPath + myBinaryFolderPath = os.path.join(mySpecieFolderPath, 'bbi') if not os.path.exists(myBinaryFolderPath): os.makedirs(myBinaryFolderPath) |
b |
diff -r 43909f065bee -r d17f629f5486 datatypes/Datatype.py --- a/datatypes/Datatype.py Thu Feb 15 16:54:36 2018 -0500 +++ b/datatypes/Datatype.py Fri Apr 06 13:44:56 2018 -0400 |
b |
@@ -53,13 +53,14 @@ @staticmethod def pre_init(reference_genome, chrom_sizes_file, - extra_files_path, tool_directory, specie_folder, tracks_folder, binary_folder, track_type): + extra_files_path, tool_directory, specie_folder, tracks_folder, final_tracks_folder, binary_folder, track_type): 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.myTrackFolderPath = tracks_folder # temporary raw data files + Datatype.myFinalTrackFolderPath = final_tracks_folder # final tracks folder Datatype.myBinaryFolderPath = binary_folder Datatype.input_fasta_file = reference_genome |
b |
diff -r 43909f065bee -r d17f629f5486 datatypes/interval/Interval.py --- a/datatypes/interval/Interval.py Thu Feb 15 16:54:36 2018 -0500 +++ b/datatypes/interval/Interval.py Fri Apr 06 13:44:56 2018 -0400 |
b |
@@ -14,7 +14,7 @@ def __init__(self): super(Interval, self).__init__() if not Datatype.trackType: - self.trackType = "HTMLFeatures" + self.trackType = "CanvasFeatures" else: self.trackType = Datatype.trackType logging.debug("Set default trackType = %s for feature tracks", self.trackType) |
b |
diff -r 43909f065bee -r d17f629f5486 jbrowseArchiveCreator.xml --- a/jbrowseArchiveCreator.xml Thu Feb 15 16:54:36 2018 -0500 +++ b/jbrowseArchiveCreator.xml Fri Apr 06 13:44:56 2018 -0400 |
b |
@@ -10,7 +10,8 @@ <requirement type="package" version="1.9">numpy</requirement> <requirement type="package" version="1.68">biopython</requirement> <requirement type="package" version="340">ucsc_hac</requirement> - <requirement type="package" version="1.12.3">jbrowse_tools</requirement> + <requirement type="package" version="1.12.4">jbrowse_tools</requirement> + <requirement type="package" version="1.0">gff3sort</requirement> </requirements> <stdio> |
b |
diff -r 43909f065bee -r d17f629f5486 tool_dependencies.xml --- a/tool_dependencies.xml Thu Feb 15 16:54:36 2018 -0500 +++ b/tool_dependencies.xml Fri Apr 06 13:44:56 2018 -0400 |
b |
@@ -52,7 +52,7 @@ </install> </package> - <package name="jbrowse_tools" version="1.12.3"> + <package name="jbrowse_tools" version="1.12.4"> <install version="1.0"> <actions_group> <actions architecture="x86_64" os="linux"> @@ -77,4 +77,23 @@ <readme>The perl scripts for converting flat files to json.</readme> </package> + <package name="gff3sort" version="1.0"> + <install version="1.0"> + <actions_group> + <actions architecture="x86_64" os="linux"> + <action type="download_by_url">https://github.com/billzt/gff3sort/archive/v0.1-alpha.zip</action> + <action type="make_directory">$INSTALL_DIR/gff3sort</action> + <action type="move_directory_files"> + <source_directory>.</source_directory> + <destination_directory>$INSTALL_DIR/gff3sort</destination_directory> + </action> + <action type="set_environment"> + <environment_variable action="prepend_to" name="PATH">$INSTALL_DIR/gff3sort</environment_variable> + </action> + </actions> + </actions_group> + </install> + <readme>A Perl Script to sort gff3 files and produce suitable results for tabix tools. </readme> + </package> + </tool_dependency> |
b |
diff -r 43909f065bee -r d17f629f5486 tracks/CanvasFeatures.py --- a/tracks/CanvasFeatures.py Thu Feb 15 16:54:36 2018 -0500 +++ b/tracks/CanvasFeatures.py Fri Apr 06 13:44:56 2018 -0400 |
[ |
@@ -1,4 +1,5 @@ #!/usr/bin/env python +import os import json import logging @@ -11,22 +12,41 @@ super(CanvasFeatures, self).__init__(trackName, trackLabel, trackDataURL, trackType, dataType, extraSettings) def prepareExtraSetting(self): - """ set CanvasFeatures configuration options """ - extraConfigs = dict() - self.extraSettings["clientConfig"] = dict() - self.extraSettings["config"] = dict() + if 'category' not in self.extraSettings or not self.extraSettings['category']: + self.extraSettings['category'] = "Default group" + self.extraSettings['style'] = {} + self.extraSettings['style']['className'] = 'feature' if 'color' not in self.extraSettings or not self.extraSettings['color']: - self.extraSettings["clientConfig"]['color'] = "#daa520" + self.extraSettings['style']['color'] = "#FFA600" else: - self.extraSettings["clientConfig"]['color'] = self.extraSettings['color'] - if 'category' not in self.extraSettings or not self.extraSettings['category']: - self.extraSettings["config"]['category'] = "Default group" - else: - self.extraSettings["config"]['category'] = self.extraSettings['category'] - if 'glyph' in self.extraSettings: - self.extraSettings["config"]['glyph'] = self.extraSettings['glyph'] - if 'transcriptType' in self.extraSettings: - self.extraSettings['config']['transcriptType'] = self.extraSettings['transcriptType'] - extraConfigs["config"] = json.dumps(self.extraSettings["config"]) - extraConfigs["clientConfig"] = json.dumps(self.extraSettings["clientConfig"]) - return extraConfigs \ No newline at end of file + self.extraSettings['style']['color'] = self.extraSettings['color'] + track = dict() + track['type'] = 'JBrowse/View/Track/' + self.trackType + track['storeClass'] = 'JBrowse/Store/SeqFeature/GFF3Tabix' + track['urlTemplate'] = os.path.join('tracks', self.trackName) + track['label'] = self.trackLabel + track['category'] = self.extraSettings['category'] + track['style'] = self.extraSettings['style'] + extraConfigs = track + return extraConfigs + + # def prepareExtraSetting(self): + # """ set CanvasFeatures configuration options """ + # extraConfigs = dict() + # self.extraSettings["clientConfig"] = dict() + # self.extraSettings["config"] = dict() + # if 'color' not in self.extraSettings or not self.extraSettings['color']: + # self.extraSettings["clientConfig"]['color'] = "#daa520" + # else: + # self.extraSettings["clientConfig"]['color'] = self.extraSettings['color'] + # if 'category' not in self.extraSettings or not self.extraSettings['category']: + # self.extraSettings["config"]['category'] = "Default group" + # else: + # self.extraSettings["config"]['category'] = self.extraSettings['category'] + # if 'glyph' in self.extraSettings: + # self.extraSettings["config"]['glyph'] = self.extraSettings['glyph'] + # if 'transcriptType' in self.extraSettings: + # self.extraSettings['config']['transcriptType'] = self.extraSettings['transcriptType'] + # extraConfigs["config"] = json.dumps(self.extraSettings["config"]) + # extraConfigs["clientConfig"] = json.dumps(self.extraSettings["clientConfig"]) + # return extraConfigs \ No newline at end of file |
b |
diff -r 43909f065bee -r d17f629f5486 tracks/IntervalFeatures.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tracks/IntervalFeatures.py Fri Apr 06 13:44:56 2018 -0400 |
[ |
@@ -0,0 +1,81 @@ +#!/usr/bin/env python +import json +import logging +import collections + +from TrackDb import TrackDb +from util import subtools +from util import santitizer + +class Features(TrackDb): + def __init__(self, trackName, trackLabel, trackDataURL, trackType, dataType, extraSettings=None): + super(Features, self).__init__(trackName, trackLabel, trackDataURL, trackType, dataType, extraSettings) + + def prepareExtraSetting(self): + if self.trackType == 'HTMLFeatures': + self.prepareHTMLExtraSetting() + else: + self.prepareCanvasExtraSetting() + + def prepareHTMLExtraSetting(self): + """ set HTMLFeatures configuration options """ + extraConfigs = dict() + self.extraSettings["clientConfig"] = dict() + self.extraSettings["config"] = dict() + if 'type' in self.extraSettings: + extraConfigs["type"] = self.extraSettings['type'] + if 'color' in self.extraSettings and self.extraSettings['color']: + extraConfigs['feature_color'] = self.extraSettings['color'] + else: + extraConfigs['feature_color'] = "#000000" + #self.extraSettings['clientConfig']['color'] = self.extraSettings['color'] + if 'subfeatureClasses' in self.extraSettings: + subfeature_css_class = santitizer.sanitize_name(self.trackLabel + "_" + self.extraSettings['subfeatureClasses']) + extraConfigs['subfeatureClasses'] = {self.extraSettings['subfeatureClasses']: subfeature_css_class} + + if 'category' not in self.extraSettings or not self.extraSettings['category']: + self.extraSettings['config']['category'] = "Default group" + else: + self.extraSettings['config']['category'] = self.extraSettings['category'] + + extraConfigs['config'] = json.dumps(self.extraSettings["config"]) + extraConfigs['clientConfig'] = json.dumps(self.extraSettings["clientConfig"]) + return extraConfigs + + def prepareCanvasExtraSetting(self): + """ set CanvasFeatures configuration options """ + extraConfigs = dict() + self.extraSettings["clientConfig"] = dict() + self.extraSettings["config"] = dict() + if 'color' not in self.extraSettings or not self.extraSettings['color']: + self.extraSettings["clientConfig"]['color'] = "#daa520" + else: + self.extraSettings["clientConfig"]['color'] = self.extraSettings['color'] + if 'category' not in self.extraSettings or not self.extraSettings['category']: + self.extraSettings["config"]['category'] = "Default group" + else: + self.extraSettings["config"]['category'] = self.extraSettings['category'] + if 'glyph' in self.extraSettings: + self.extraSettings["config"]['glyph'] = self.extraSettings['glyph'] + if 'transcriptType' in self.extraSettings: + self.extraSettings['config']['transcriptType'] = self.extraSettings['transcriptType'] + extraConfigs["config"] = json.dumps(self.extraSettings["config"]) + extraConfigs["clientConfig"] = json.dumps(self.extraSettings["clientConfig"]) + return extraConfigs + + def createTrackDb(self): + self.track_db = collections.OrderedDict([("track",self.trackName), + ("trackLabel",self.trackLabel), + ("trackDataURL",self.trackDataURL), + ("dataType", self.dataType), + ("trackType", self.trackType)] + ) + + + htmlExtraConfigs = self.prepareHTMLExtraSetting() + self.logger.debug("Generate extraConfigs for htmlFeatures = %s", json.dumps(htmlExtraConfigs)) + self.track_db["html"]["options"] = htmlExtraConfigs + canvasExtraConfigs = self.prepareCanvasExtraSetting() + self.logger.debug("Generate extraConfigs for canvasFeatures = %s", json.dumps(canvasExtraConfigs)) + self.track_db["canvas"]["options"] = canvasExtraConfigs + self.logger.debug("TrackDb object is created track_db = %s ", json.dumps(self.track_db)) \ No newline at end of file |
b |
diff -r 43909f065bee -r d17f629f5486 util/subtools.py --- a/util/subtools.py Thu Feb 15 16:54:36 2018 -0500 +++ b/util/subtools.py Fri Apr 06 13:44:56 2018 -0400 |
[ |
@@ -9,7 +9,7 @@ import os import sys import tempfile -import string +import shutil import logging class PopenError(Exception): @@ -229,6 +229,58 @@ else: raise ValueError('Did not find bai file') +def createFastaIndex(fastaFile): + subprocess.call(['samtools', 'faidx', fastaFile]) + filename = fastaFile + '.fai' + if os.path.exists(filename): + return filename + else: + raise ValueError('Did not find fai file') + +def gff3sort(inputFile, outputFile, precise=False): + array_call = ['gff3sort.pl', inputFile, '>', outputFile] + if precise: + array_call.append('--precise') + p = _handleExceptionAndCheckCall(array_call) + return p + +def bedSort(inputFile, outputFile): + array_call = ['sort', '-k1,1', '-k2,2n', '-k6,6', inputFile, '>', outputFile] + p = _handleExceptionAndCheckCall(array_call) + return p + +def bgzip(inputFile): + subprocess.call(['bgzip', inputFile]) + filename = inputFile + '.gz' + if os.path.exists(filename): + return filename + else: + raise ValueError('Did not find gz file') + +def createTabix(inputFile, dataType): + subprocess.call(['tabix', '-p', dataType, inputFile]) + filename = inputFile + '.tbi' + if os.path.exists(filename): + return filename + else: + raise ValueError('Did not find tbi file') + +def generate_tabix_indexed_track(inputFile, dataType, outputFolder): + if "bed" in dataType: + fileType = 'bed' + sortedFile = tempfile.NamedTemporaryFile(bufsize=0) + bedSort(inputFile, sortedFile.name) + elif "gff" in dataType: + fileType = 'gff' + sortedFile = tempfile.NamedTemporaryFile(bufsize=0) + gff3sort(inputFile, sortedFile.name) + compressedFile = bgzip(sortedFile) + tabixFile = createTabix(compressedFile, fileType) + trackPath = os.path.join(outputFolder, inputFile) + trackIndexPath = os.path.join(outputFolder, inputFile+'.tbi') + shutil.copy(compressedFile, trackPath) + shutil.copy(tabixFile, trackIndexPath) + def flatfile_to_json(inputFile, dataType, trackType, trackLabel, outputFolder, options=None, compress=True): if "bed" in dataType: fileType = "--bed" |