Previous changeset 45:d56955fc4c75 (2018-05-01) Next changeset 47:1eb4adefd747 (2018-06-19) |
Commit message:
planemo upload for repository https://github.com/goeckslab/jbrowse-archive-creator.git commit 3160592f4119e684ab5843dd28a2e6cf11df0121-dirty |
modified:
README.md TrackHub.py datatypes/Datatype.py datatypes/Datatype.pyc datatypes/__init__.pyc datatypes/converters/DataConversion.pyc datatypes/converters/__init__.pyc datatypes/converters/bedToGff3.pyc datatypes/converters/blastxmlToGff3.py datatypes/converters/blastxmlToGff3.pyc datatypes/converters/gtfToGff3.pyc datatypes/interval/Bed.pyc datatypes/interval/BedBlastAlignments.py datatypes/interval/BigPsl.py datatypes/interval/Interval.pyc datatypes/interval/__init__.pyc datatypes/validators/DataValidation.pyc datatypes/validators/GtfValidation.py datatypes/validators/GtfValidation.pyc datatypes/validators/__init__.pyc jbrowseArchiveCreator.xml tracks/BamFeatures.pyc tracks/BigwigFeatures.pyc tracks/CanvasFeatures.py tracks/CanvasFeatures.pyc tracks/HTMLFeatures.pyc tracks/TrackDb.py tracks/TrackDb.pyc tracks/__init__.pyc util/Reader.py util/__init__.pyc util/santitizer.pyc util/subtools.py util/subtools.pyc |
added:
jbrowse-archive-creator.iml |
b |
diff -r d56955fc4c75 -r 061da5d3a219 README.md --- a/README.md Tue May 01 21:52:46 2018 -0400 +++ b/README.md Tue Jun 19 16:28:36 2018 -0400 |
[ |
@@ -1,5 +1,5 @@ # JBrowse Hub Creator -This Galaxy tool permits to prepare your files to be ready for JBrowse visualization. +This Galaxy tool is used to prepare your files to be ready for JBrowse visualization. ## Features 1. Similar interface to Hub Archive Creator. @@ -7,33 +7,36 @@ 3. Group the tracks 4. Set the color for each track 5. Set the label for each track -6. Create workflows within Galaxy to automatize pipeline analysis and get them ready to visualization inside JBrowse...in a few clicks! +6. Support generating Tabix Indexed CanVasFeatures tracks +7. Create workflows within Galaxy to automatize pipeline analysis and get them ready to visualization inside JBrowse...in a few clicks! At the moment, Supported datatypes are: -- Bam -- Bed +- BAM +- BED + - Generic BED - Splice Junctions (BED 12+1) - Simple Repeats (BED 4+12) + - BLAT alignment (BigPsl) + - BLAST alignment (BED 12+12) - BigWig -- Gff3 -- Gtf -- Blastxml -- BigPsl +- GFF3 +- GTF +- Blast XML output ## Installation: -1. You would need to add this tool into your Galaxy. - 1. (strongly preferred) **ToolShed Installation**: Tool is in [testtoolshed](https://testtoolshed.g2.bx.psu.edu/view/yating-l/jbrowse_hub/b7bf45272ab7) - 2. OR **Local Installation**: See https://wiki.galaxyproject.org/Admin/Tools/AddToolTutorial -2. The tool can be used with or without Conda (activate it in your galaxy.ini) -3. If installed without TS (by downloading on GitHub), you need to have all the binaries accessible within Galaxy. - You can use the script [install_linux_binaries](util/install_linux_binaries) with a linux x86-64 (64bits) + +**ToolShed Installation**: +- The JBrowse Archive Creator tool is published at [ToolShed Repository](https://toolshed.g2.bx.psu.edu/view/yating-l/jbrowsearchivecreator) + +- Refer to [Installing Tools into Galaxy](https://galaxyproject.org/admin/tools/add-tool-from-toolshed-tutorial) tutorial if you want to learn how to install a tool from ToolShed. + ## Future See [TODO.md](todo.md) for more information ## Contribute -- Source Code: https://github.com/Yating-L/jbrowse_hub +- Source Code: https://github.com/goeckslab/jbrowse-archive-creator.git ## Support @@ -41,7 +44,7 @@ - For more information about how to use G-OnRamp: - [Wilson Leung](wleung@wustl.edu) - Product owner and developer - - [Yating Liu](yliu41@wustl.edu) - Community manager and Developer + - [Yating Liu](yliu41@wustl.edu) - Community manager and developer - For more information about the project vision, or for partneship: - [Elgin, Sarah](selgin@wustl.edu) - PI |
b |
diff -r d56955fc4c75 -r 061da5d3a219 TrackHub.py --- a/TrackHub.py Tue May 01 21:52:46 2018 -0400 +++ b/TrackHub.py Tue Jun 19 16:28:36 2018 -0400 |
[ |
@@ -51,10 +51,12 @@ if Datatype.trackType == 'HTMLFeatures': self.myTrackStyle = TrackStyles(self.tool_directory, self.mySpecieFolderPath, self.trackList) self.logger = logging.getLogger(__name__) + self.nameIndexTrackList = [] - def addTrack(self, trackDbObject): + if trackDbObject['nameIndex'] == "true": + self.nameIndexTracksList.append(trackDbObject['trackLabel']) if trackDbObject['dataType'].lower() == 'bam': subtools.add_track_json(self.trackList, trackDbObject['options']) elif trackDbObject['dataType'].lower() == 'bigwig': @@ -104,7 +106,7 @@ subtools.prepare_refseqs(self.reference_genome.false_path, self.mySpecieFolderPath) def _indexName(self): - subtools.generate_names(self.mySpecieFolderPath) + subtools.generate_names(self.mySpecieFolderPath, self.nameIndexTrackList) print "finished name index \n" def _outHtml(self): |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/Datatype.py --- a/datatypes/Datatype.py Tue May 01 21:52:46 2018 -0400 +++ b/datatypes/Datatype.py Tue Jun 19 16:28:36 2018 -0400 |
[ |
@@ -49,6 +49,7 @@ self.track = None self.trackSettings = dict() self.extraSettings = collections.OrderedDict() + self.nameIndex = False @staticmethod @@ -98,6 +99,8 @@ self.extraSettings["category"] = self.trackSettings["group_name"] if "track_color" in self.trackSettings and self.trackSettings["track_color"]: self.extraSettings["color"] = self.trackSettings["track_color"] + #store information of whether to generate name index for the track + self.extraSettings["nameIndex"] = self.trackSettings["nameIndex"] @abc.abstractmethod |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/Datatype.pyc |
b |
Binary file datatypes/Datatype.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/__init__.pyc |
b |
Binary file datatypes/__init__.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/converters/DataConversion.pyc |
b |
Binary file datatypes/converters/DataConversion.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/converters/__init__.pyc |
b |
Binary file datatypes/converters/__init__.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/converters/bedToGff3.pyc |
b |
Binary file datatypes/converters/bedToGff3.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/converters/blastxmlToGff3.py --- a/datatypes/converters/blastxmlToGff3.py Tue May 01 21:52:46 2018 -0400 +++ b/datatypes/converters/blastxmlToGff3.py Tue Jun 19 16:28:36 2018 -0400 |
[ |
@@ -65,6 +65,7 @@ group['parent_field']['source'] = source group['parent_field']['type'] = 'match' group['parent_attribute']['ID'] = contig_name + '_' + query_name + group['parent_attribute']['Name'] = query_name group['parent_attribute']['method'] = method group['parent_attribute']['length'] = length if contig_name not in seq_regions: |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/converters/blastxmlToGff3.pyc |
b |
Binary file datatypes/converters/blastxmlToGff3.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/converters/gtfToGff3.pyc |
b |
Binary file datatypes/converters/gtfToGff3.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/interval/Bed.pyc |
b |
Binary file datatypes/interval/Bed.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/interval/BedBlastAlignments.py --- a/datatypes/interval/BedBlastAlignments.py Tue May 01 21:52:46 2018 -0400 +++ b/datatypes/interval/BedBlastAlignments.py Tue Jun 19 16:28:36 2018 -0400 |
b |
@@ -14,7 +14,7 @@ super(BedBlastAlignments, self).__init__(input_bed_blast_alignments_false_path, data_bed_blast_alignments) #self.seqType = 1 - self.trackType = "G-OnRamp_plugin/BlastAlignment" + #self.trackType = "G-OnRamp_plugin/BlastAlignment" def initSettings(self): super(BedBlastAlignments, self).initSettings() |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/interval/BigPsl.py --- a/datatypes/interval/BigPsl.py Tue May 01 21:52:46 2018 -0400 +++ b/datatypes/interval/BigPsl.py Tue Jun 19 16:28:36 2018 -0400 |
[ |
@@ -26,7 +26,7 @@ def initSettings(self): super(BigPsl, self).initSettings() self.extraSettings["glyph"] = "JBrowse/View/FeatureGlyph/Segments" - #self.extraSettings["subfeatureClasses"] = "match_part" + def validateData(self): self.validateOptions = self.getValidateOptions(tab="True", autoSql=self.autoSql) |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/interval/Interval.pyc |
b |
Binary file datatypes/interval/Interval.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/interval/__init__.pyc |
b |
Binary file datatypes/interval/__init__.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/validators/DataValidation.pyc |
b |
Binary file datatypes/validators/DataValidation.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/validators/GtfValidation.py --- a/datatypes/validators/GtfValidation.py Tue May 01 21:52:46 2018 -0400 +++ b/datatypes/validators/GtfValidation.py Tue Jun 19 16:28:36 2018 -0400 |
[ |
@@ -74,7 +74,7 @@ start_position = fields[3] end_position = fields[4] - if start_position > 0 and end_position <= scaffold_size: + if int(start_position) > 0 and int(end_position) <= int(scaffold_size): # We are good, so we copy this line tmp.write(line) tmp.write(os.linesep) |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/validators/GtfValidation.pyc |
b |
Binary file datatypes/validators/GtfValidation.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 datatypes/validators/__init__.pyc |
b |
Binary file datatypes/validators/__init__.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 jbrowse-archive-creator.iml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jbrowse-archive-creator.iml Tue Jun 19 16:28:36 2018 -0400 |
b |
@@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="PYTHON_MODULE" version="4"> + <component name="NewModuleRootManager" inherit-compiler-output="true"> + <exclude-output /> + <content url="file://$MODULE_DIR$" /> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file |
b |
diff -r d56955fc4c75 -r 061da5d3a219 jbrowseArchiveCreator.xml --- a/jbrowseArchiveCreator.xml Tue May 01 21:52:46 2018 -0400 +++ b/jbrowseArchiveCreator.xml Tue Jun 19 16:28:36 2018 -0400 |
b |
b'@@ -1,4 +1,4 @@\n-<tool id="jbrowse_hub" name="JBrowse Archive Creator" version="2.1.2">\n+<tool id="jbrowse_hub" name="JBrowse Archive Creator" version="2.2.0">\n <description>\n This Galaxy tool is used to prepare your files to be ready for displaying on JBrowse with Apollo plugin\n </description>\n@@ -81,6 +81,7 @@\n #set track_color = str($f.formatChoice.track_color)\n #set group_name = str($g.group_name)\n #set longLabel = str($f.formatChoice.longLabel)\n+\n #set extra_data_dict = {"track_color": $track_color,\n "group_name": $group_name,\n "long_label": $longLabel}\n@@ -88,11 +89,12 @@\n #set bam_index = $f.formatChoice.BAM.metadata.bam_index\n \n ## Add Bam format specific fields\n- #silent $extra_data_dict.update({"index": $bam_index})\n+ #silent $extra_data_dict.update({"index": $bam_index, "nameIndex": str($f.formatChoice.nameIndex)})\n \n #silent $prepare_json("Bam", $f.formatChoice.BAM, $index_track_final, $extra_data_dict)\n #end if\n #if $f.formatChoice.format_select == "bed"\n+ #silent $extra_data_dict.update({"nameIndex": str($f.formatChoice.bedChoice.nameIndex)})\n #if $f.formatChoice.bedChoice.bed_select == "bed_generic"\n #silent $prepare_json("Bed", $f.formatChoice.bedChoice.BED_generic, $index_track_final,\n $extra_data_dict)\n@@ -119,18 +121,22 @@\n #end if\n #end if\n #if $f.formatChoice.format_select == "blastxml"\n- #silent $prepare_json("BlastXml", $f.formatChoice.BlastXML, $index_track_final, \n+ #silent $extra_data_dict.update({"nameIndex": str($f.formatChoice.nameIndex)})\n+ #silent $prepare_json("BlastXml", $f.formatChoice.BlastXML, $index_track_final,\n extra_data_dict)\n #end if\n #if $f.formatChoice.format_select == "bigwig"\n+ #silent $extra_data_dict.update({"nameIndex": str($f.formatChoice.nameIndex)})\n #silent $prepare_json("BigWig", $f.formatChoice.BIGWIG, $index_track_final,\n $extra_data_dict)\n #end if\n #if $f.formatChoice.format_select == \'gff3\'\n+ #silent $extra_data_dict.update({"nameIndex": str($f.formatChoice.nameIndex)})\n #silent $prepare_json("Gff3", $f.formatChoice.GFF3, $index_track_final,\n $extra_data_dict)\n #end if\n #if $f.formatChoice.format_select == "gtf"\n+ #silent $extra_data_dict.update({"nameIndex": str($f.formatChoice.nameIndex)})\n ## Add also GTF from Agustus? See https://github.com/ENCODE-DCC/kentUtils/issues/8\n #silent $prepare_json("Gtf", $f.formatChoice.GTF, $index_track_final,\n $extra_data_dict)\n@@ -200,11 +206,12 @@\n </valid>\n </sanitizer>\n </param>\n+ <param name="nameIndex" type="boolean" value="false" label="Do you want to builds name indexes for this track to enable search for a feature by name" />\n </when> \n <when value="bed">\n <conditional name="bedChoice">\n <param name="bed_select" type="select" label="Bed Choice">\n- <option value="bed_generic">BED format</option>\n+ <option value="bed_generic">BED Generic</option>\n <option value="bed_simple_repeats_option">BED Simple repeat (bed4+12 / simpleRepeat.as)</option>\n <option value="bed_splice_junctions_option">BED Splice junctions (bed12+1 / spliceJunctions.as)</option>\n '..b' <when value="bed_simple_repeats_option">\n <param\n@@ -225,6 +233,7 @@\n type="data"\n label="Bed Simple Repeats (Bed4+12) File"\n />\n+ <param name="nameIndex" type="boolean" value="false" label="Do you want to builds name indexes for this track to enable search for a feature by name" />\n </when>\n <when value="bed_splice_junctions_option">\n <param\n@@ -233,6 +242,7 @@\n type="data"\n label="Bed Splice Junctions (Bed12+1) File"\n />\n+ <param name="nameIndex" type="boolean" value="false" label="Do you want to builds name indexes for this track to enable search for a feature by name" />\n </when>\n <when value="bed_blast_alignment_option">\n <param\n@@ -241,6 +251,7 @@\n type="data"\n label="Bed Blast Alignments (Bed12+12) File"\n />\n+ <param name="nameIndex" type="boolean" value="true" label="Do you want to builds name indexes for this track to enable search for a feature by name" />\n </when>\n <when value="bed_blat_alignment_option">\n <param\n@@ -249,6 +260,7 @@\n type="data"\n label="Bed BLAT Alignments (bigPsl) File"\n />\n+ <param name="nameIndex" type="boolean" value="true" label="Do you want to builds name indexes for this track to enable search for a feature by name" />\n </when>\n </conditional>\n <param name="longLabel" type="text" size="30" label="Track label" />\n@@ -275,6 +287,7 @@\n </valid>\n </sanitizer>\n </param>\n+ <param name="nameIndex" type="boolean" value="true" label="Do you want to builds name indexes for this track to enable search for a feature by name" />\n </when>\n <when value="bigwig">\n <param\n@@ -291,6 +304,7 @@\n </valid>\n </sanitizer>\n </param>\n+ <param name="nameIndex" type="boolean" value="false" label="Do you want to builds name indexes for this track to enable search for a feature by name" />\n </when>\n <when value="gff3">\n <param\n@@ -307,6 +321,7 @@\n </valid>\n </sanitizer>\n </param>\n+ <param name="nameIndex" type="boolean" value="false" label="Do you want to builds name indexes for this track to enable search for a feature by name" />\n </when>\n <when value="gtf">\n <param\n@@ -322,8 +337,9 @@\n <add value="#"/>\n </valid>\n </sanitizer>\n+ <param name="nameIndex" type="boolean" value="false" label="Do you want to builds name indexes for this track to enable search for a feature by name" />\n </param>\n- </when> \n+ </when>\n </conditional>\n </repeat>\n </repeat>\n' |
b |
diff -r d56955fc4c75 -r 061da5d3a219 tracks/BamFeatures.pyc |
b |
Binary file tracks/BamFeatures.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 tracks/BigwigFeatures.pyc |
b |
Binary file tracks/BigwigFeatures.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 tracks/CanvasFeatures.py --- a/tracks/CanvasFeatures.py Tue May 01 21:52:46 2018 -0400 +++ b/tracks/CanvasFeatures.py Tue Jun 19 16:28:36 2018 -0400 |
[ |
@@ -26,10 +26,12 @@ if self.dataType == 'gff': # need .gff3.gz extension to index the name of the track with generate-name.pl track['urlTemplate'] = os.path.join('tracks', self.trackName + '.gff3.gz') - # needed to show match_part in Blat and Blast alignment as subfeatures - track['glyph'] = "JBrowse/View/FeatureGlyph/Segments" else: track['urlTemplate'] = os.path.join('tracks', self.trackName) + if 'glyph' in self.extraSettings: + track['glyph'] = self.extraSettings['glyph'] + if 'subfeatureClasses' in self.extraSettings: + track['subfeatureClasses'] = self.extraSettings['subfeatureClasses'] track['label'] = self.trackLabel track['category'] = self.extraSettings['category'] track['style'] = self.extraSettings['style'] |
b |
diff -r d56955fc4c75 -r 061da5d3a219 tracks/CanvasFeatures.pyc |
b |
Binary file tracks/CanvasFeatures.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 tracks/HTMLFeatures.pyc |
b |
Binary file tracks/HTMLFeatures.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 tracks/TrackDb.py --- a/tracks/TrackDb.py Tue May 01 21:52:46 2018 -0400 +++ b/tracks/TrackDb.py Tue Jun 19 16:28:36 2018 -0400 |
[ |
@@ -40,7 +40,8 @@ ("dataType", self.dataType), ("trackType", self.trackType)] ) - + + self.track_db["nameIndex"] = self.extraSettings['nameIndex'] extraConfigs = self.prepareExtraSetting() self.logger.debug("Generate extraConfigs = %s", json.dumps(extraConfigs)) |
b |
diff -r d56955fc4c75 -r 061da5d3a219 tracks/TrackDb.pyc |
b |
Binary file tracks/TrackDb.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 tracks/__init__.pyc |
b |
Binary file tracks/__init__.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 util/Reader.py --- a/util/Reader.py Tue May 01 21:52:46 2018 -0400 +++ b/util/Reader.py Tue Jun 19 16:28:36 2018 -0400 |
[ |
@@ -120,11 +120,15 @@ # TODO: Optimize this double loop for input_data in array_inputs: input_false_path = input_data["false_path"] - input_data["name"] = santitizer.sanitize_name_input(input_data["name"]) - extensionObject = ExtensionClass(input_false_path, input_data) - extensionObject.generateCustomTrack() - datatype_dictionary.update({input_data["order_index"]: extensionObject}) - self.logger.debug("%s object: %s has been created", ExtensionClass, input_data["name"]) + # if the file is empty, skip the rest + if os.path.isfile(input_false_path) and os.path.getsize(input_false_path) > 0: + input_data["name"] = santitizer.sanitize_name_input(input_data["name"]) + extensionObject = ExtensionClass(input_false_path, input_data) + extensionObject.generateCustomTrack() + datatype_dictionary.update({input_data["order_index"]: extensionObject}) + self.logger.debug("%s object: %s has been created", ExtensionClass, input_data["name"]) + else: + self.logger.info("The input file: %s is empty, skip creating the track for this data", input_data["name"]) return datatype_dictionary |
b |
diff -r d56955fc4c75 -r 061da5d3a219 util/__init__.pyc |
b |
Binary file util/__init__.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 util/santitizer.pyc |
b |
Binary file util/santitizer.pyc has changed |
b |
diff -r d56955fc4c75 -r 061da5d3a219 util/subtools.py --- a/util/subtools.py Tue May 01 21:52:46 2018 -0400 +++ b/util/subtools.py Tue Jun 19 16:28:36 2018 -0400 |
[ |
@@ -382,8 +382,11 @@ p = _handleExceptionAndCheckCall(array_call) return p -def generate_names(outputFolder, hashBits=4): - array_call = ['generate-names.pl', '--hashBits', '4', '-v', '--out', outputFolder] +def generate_names(outputFolder, nameIndexTrackList, hashBits=4): + array_call = ['generate-names.pl', '--hashBits', hashBits, '-v', '--completionLimit', '0', '--out', outputFolder] + if nameIndexTrackList: + array_call.append('--tracks') + array_call.append(','.join(nameIndexTrackList)) p = _handleExceptionAndCheckCall(array_call) return p |
b |
diff -r d56955fc4c75 -r 061da5d3a219 util/subtools.pyc |
b |
Binary file util/subtools.pyc has changed |