Next changeset 1:db90662d26f9 (2016-02-22) |
Commit message:
planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/map_peptides_to_bed commit e04ed4b4960d6109a85c1cc68a2bf4931c8751ef-dirty |
added:
map_peptides_to_bed.py map_peptides_to_bed.xml test-data/mapped_peptides.bed test-data/peptides.tsv test-data/translated_bed_sequences.bed tool_dependencies.xml |
b |
diff -r 000000000000 -r 51f8f9041724 map_peptides_to_bed.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/map_peptides_to_bed.py Mon Jan 25 15:32:49 2016 -0500 |
[ |
b'@@ -0,0 +1,333 @@\n+#!/usr/bin/env python\n+"""\n+#\n+#------------------------------------------------------------------------------\n+# University of Minnesota\n+# Copyright 2014, Regents of the University of Minnesota\n+#------------------------------------------------------------------------------\n+# Author:\n+#\n+# James E Johnson\n+#\n+#------------------------------------------------------------------------------\n+"""\n+\n+"""\n+Input: list of protein_accessions, peptide_sequence\n+ GFF3 with fasta \n+Output: GFF3 of peptides\n+\n+Filter: Must cross splice boundary\n+ \n+"""\n+\n+import sys,re,os.path\n+import tempfile\n+import optparse\n+from optparse import OptionParser\n+from Bio.Seq import reverse_complement, transcribe, back_transcribe, translate\n+\n+class BedEntry( object ):\n+ def __init__(self, line):\n+ self.line = line\n+ try:\n+ fields = line.rstrip(\'\\r\\n\').split(\'\\t\')\n+ (chrom,chromStart,chromEnd,name,score,strand,thickStart,thickEnd,itemRgb,blockCount,blockSizes,blockStarts) = fields[0:12]\n+ seq = fields[12] if len(fields) > 12 else None\n+ self.chrom = chrom\n+ self.chromStart = int(chromStart)\n+ self.chromEnd = int(chromEnd)\n+ self.name = name\n+ self.score = int(score)\n+ self.strand = strand\n+ self.thickStart = int(thickStart)\n+ self.thickEnd = int(thickEnd)\n+ self.itemRgb = itemRgb\n+ self.blockCount = int(blockCount)\n+ self.blockSizes = [int(x) for x in blockSizes.split(\',\')]\n+ self.blockStarts = [int(x) for x in blockStarts.split(\',\')]\n+ self.seq = seq\n+ except Exception, e:\n+ print >> sys.stderr, "Unable to read Bed entry" % e\n+ exit(1)\n+ def __str__(self):\n+ return \'%s\\t%d\\t%d\\t%s\\t%d\\t%s\\t%d\\t%d\\t%s\\t%d\\t%s\\t%s%s\' % (\n+ self.chrom, self.chromStart, self.chromEnd, self.name, self.score, self.strand, self.thickStart, self.thickEnd, self.itemRgb, self.blockCount, \n+ \',\'.join([str(x) for x in self.blockSizes]), \n+ \',\'.join([str(x) for x in self.blockStarts]), \n+ \'\\t%s\' % self.seq if self.seq else \'\')\n+ def get_splice_junctions(self): \n+ splice_juncs = []\n+ for i in range(self.blockCount - 1):\n+ splice_junc = "%s:%d_%d" % (self.chrom, self.chromStart + self.blockSizes[i], self.chromStart + self.blockStarts[i+1])\n+ splice_juncs.append(splice_junc)\n+ return splice_juncs\n+ def get_exon_seqs(self):\n+ exons = []\n+ for i in range(self.blockCount):\n+ # splice_junc = "%s:%d_%d" % (self.chrom, self.chromStart + self.blockSizes[i], self.chromStart + self.blockStarts[i+1])\n+ exons.append(self.seq[self.blockStarts[i]:self.blockStarts[i] + self.blockSizes[i]])\n+ if self.strand == \'-\': #reverse complement\n+ exons.reverse()\n+ for i,s in enumerate(exons):\n+ exons[i] = reverse_complement(s)\n+ return exons\n+ def get_spliced_seq(self):\n+ seq = \'\'.join(self.get_exon_seqs())\n+ return seq\n+ def get_translation(self,sequence=None):\n+ translation = None\n+ seq = sequence if sequence else self.get_spliced_seq()\n+ if seq:\n+ seqlen = len(seq) / 3 * 3;\n+ if seqlen >= 3:\n+ translation = translate(seq[:seqlen])\n+ return translation\n+ def get_translations(self):\n+ translations = []\n+ seq = self.get_spliced_seq()\n+ if seq:\n+ for i in range(3):\n+ translation = self.get_translation(sequence=seq[i:])\n+ if translation:\n+ translations.append(translation)\n+ return translations\n+ ## (start,end)\n+ def get_subrange(self,tstart,tstop):\n+ chromStart = self.chromStart\n+ chromEnd = self.chromEnd\n+ r = range(self.blockCount)\n+ if self.strand == \'-\':\n+ r.reverse()\n+ bStart = 0\n+ for x in r:\n+ bEnd = bStart + self.blockSizes[x]\n+ ## print >> sys.stderr, "%d chromStart: %d chromEnd: %s bStart: %s bEnd: %d" % (x,chromStart,chromEnd,bStart,bEnd)\n+ if bStart <= tstart < bEnd:\n+ if self.strand == \'+\':\n+ chromStart = self.chromStart +'..b'ue\', default=False, help=\'Add #gffTags to bed output for IGV\' )\n+ parser.add_option( \'-d\', \'--debug\', dest=\'debug\', action=\'store_true\', default=False, help=\'Turn on wrapper debugging to stderr\' )\n+ (options, args) = parser.parse_args()\n+ # Input files\n+ if options.input != None:\n+ try:\n+ inputPath = os.path.abspath(options.input)\n+ inputFile = open(inputPath, \'r\')\n+ except Exception, e:\n+ print >> sys.stderr, "failed: %s" % e\n+ exit(2)\n+ else:\n+ inputFile = sys.stdin\n+ inputBed = None\n+ if options.translated_bed != None:\n+ inputBed = open(os.path.abspath(options.translated_bed),\'r\')\n+ peptide_column = options.peptide_column - 1\n+ name_column = options.name_column - 1 if options.name_column else None \n+ start_column = options.start_column - 1 if options.start_column else None \n+ # Read in peptides\n+ # peps[prot_name] = [seq]\n+ prot_peps = dict()\n+ unassigned_peps = set()\n+ try:\n+ for i, line in enumerate( inputFile ):\n+ ## print >> sys.stderr, "%3d\\t%s" % (i,line)\n+ if line.startswith(\'#\'):\n+ continue\n+ fields = line.rstrip(\'\\r\\n\').split(\'\\t\')\n+ ## print >> sys.stderr, "%3d\\t%s" % (i,fields)\n+ if peptide_column < len(fields): \n+ peptide = fields[peptide_column]\n+ prot_name = fields[name_column] if name_column is not None and name_column < len(fields) else None\n+ if prot_name:\n+ offset = fields[start_column] if start_column is not None and start_column < len(fields) else -1\n+ if prot_name not in prot_peps:\n+ prot_peps[prot_name] = dict()\n+ prot_peps[prot_name][peptide] = offset\n+ else:\n+ unassigned_peps.add(peptide) \n+ if options.debug:\n+ print >> sys.stderr, "prot_peps: %s" % prot_peps\n+ print >> sys.stderr, "unassigned_peps: %s" % unassigned_peps\n+ except Exception, e:\n+ print >> sys.stderr, "failed: Error reading %s - %s" % (options.input if options.input else \'stdin\',e)\n+ exit(1)\n+ # Output files\n+ bed_fh = None\n+ ## gff_fh = None\n+ ## gff_fa_file = None\n+ gff_fa = None\n+ outFile = None\n+ if options.bed:\n+ bed_fh = open(options.bed,\'w\')\n+ bed_fh.write(\'track name="%s" type=bedDetail description="%s" \\n\' % (\'novel_junction_peptides\',\'test\'))\n+ if options.gffTags:\n+ bed_fh.write(\'#gffTags\\n\')\n+ ## if options.gff:\n+ ## gff_fh = open(options.gff,\'w\')\n+ ## gff_fh.write("##gff-version 3.2.1\\n")\n+ ## if options.reference:\n+ ## gff_fh.write("##genome-build %s %s\\n" % (options.refsource if options.refsource else \'unknown\', options.reference))\n+ try:\n+ for i, line in enumerate( inputBed ):\n+ ## print >> sys.stderr, "%3d:\\t%s" % (i,line)\n+ if line.startswith(\'track\'):\n+ continue\n+ entry = BedEntry(line)\n+ if entry.name in prot_peps:\n+ for (peptide,offset) in prot_peps[entry.name].iteritems():\n+ if offset < 0:\n+ offset = entry.seq.find(peptide)\n+ if options.debug:\n+ print >> sys.stderr, "%s\\t%s\\t%d\\t%s\\n" % (entry.name, peptide,offset,entry.seq)\n+ if offset >= 0:\n+ tstart = offset * 3\n+ tstop = tstart + len(peptide) * 3\n+ if options.debug:\n+ print >> sys.stderr, "%d\\t%d\\t%d" % (offset,tstart,tstop)\n+ (pepStart,pepEnd) = entry.get_subrange(tstart,tstop)\n+ if options.debug:\n+ print >> sys.stderr, "%d\\t%d\\t%d" % (offset,pepStart,pepEnd)\n+ if bed_fh:\n+ entry.thickStart = pepStart\n+ entry.thickEnd = pepEnd\n+ bedfields = str(entry).split(\'\\t\')\n+ if options.gffTags:\n+ bedfields[3] = "ID=%s;Name=%s" % (entry.name,peptide) \n+ bed_fh.write("%s\\t%s\\t%s\\n" % (\'\\t\'.join(bedfields[:12]),peptide,entry.seq))\n+ except Exception, e:\n+ print >> sys.stderr, "failed: Error reading %s - %s" % (options.input if options.input else \'stdin\',e)\n+\n+if __name__ == "__main__" : __main__()\n+\n' |
b |
diff -r 000000000000 -r 51f8f9041724 map_peptides_to_bed.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/map_peptides_to_bed.xml Mon Jan 25 15:32:49 2016 -0500 |
[ |
@@ -0,0 +1,68 @@ +<tool id="map_peptides_to_bed" name="Map peptides to a bed file" version="0.1.0"> + <requirements> + <requirement type="package" version="1.62">biopython</requirement> + </requirements> + <stdio> + <exit_code range="1:" /> + </stdio> + <command interpreter="python"><![CDATA[ + map_peptides_to_bed.py + --translated_bed="$translated_bed" + --input="$input" + #if $peptide_column: + --peptide_column=$peptide_column + #end if + #if $name_column: + --name_column=$name_column + #end if + #if $start_column: + --start_column=$start_column + #end if + $gffTags + --bed="$mapped_peptides" + ]]></command> + <inputs> + <param name="translated_bed" type="data" format="bed" label="Translated bed with IDs to match in the input" help=""/> + <param name="input" type="data" format="tabular" label="Identified Peptides" help=""/> + <param name="peptide_column" type="data_column" data_ref="input" label="peptide column" optional="true" + help="Defaults to first column"/> + <param name="name_column" type="data_column" data_ref="input" label="protein name column" optional="true" + help="The name in this column must match the name column in the Translate bed"/> + <param name="start_column" type="data_column" data_ref="input" label="peptide offset column" optional="true" + help="The offset in AnimoAcids of the peptide from the start of the protein sequence"/> + <param name="gffTags" type="boolean" truevalue="--gffTags" falsevalue="" checked="true" label="Use #gffTags in output" help=""/> + </inputs> + <outputs> + <data name="mapped_peptides" format="bed" /> + </outputs> + <tests> + <test> + <param name="translated_bed" type="data" ftype="bed" value="translated_bed_sequences.bed"/> + <param name="input" type="data" ftype="tabular" value="peptides.tsv"/> + <param name="peptide_column" value="2"/> + <param name="name_column" value="1"/> + <output name="mapped_peptides" file="mapped_peptides.bed"/> + </test> + </tests> + <help><![CDATA[ + Usage: map_peptides_to_bed.py [options] + +Options: + -h, --help show this help message and exit + -t TRANSLATED_BED, --translated_bed=TRANSLATED_BED + A bed file with added 13th column having a translation + -i INPUT, --input=INPUT + Tabular file with peptide_sequence column + -p PEPTIDE_COLUMN, --peptide_column=PEPTIDE_COLUMN + column ordinal with peptide sequence + -n NAME_COLUMN, --name_column=NAME_COLUMN + column ordinal with protein name + -s START_COLUMN, --start_column=START_COLUMN + column with peptide start position in protein + -B BED, --bed=BED Output a bed file with added 13th column having + translation + -T, --gffTags Add #gffTags to bed output for IGV + -d, --debug Turn on wrapper debugging to stderr + + ]]></help> +</tool> |
b |
diff -r 000000000000 -r 51f8f9041724 test-data/mapped_peptides.bed --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/mapped_peptides.bed Mon Jan 25 15:32:49 2016 -0500 |
b |
@@ -0,0 +1,27 @@ +track name="novel_junction_peptides" type=bedDetail description="test" +#gffTags +15 40902460 40907575 ID=JUNC00019210_2;Name=RNGRNKKLEDNYCEIT 1 + 40902484 40907575 255,0,0 2 35,37 0,5078 RNGRNKKLEDNYCEIT SYENSEKVRNGRNKKLEDNYCEIT +15 40902460 40907575 ID=JUNC00019210_2;Name=SYENSEKVR 1 + 40902460 40902487 255,0,0 2 35,37 0,5078 SYENSEKVR SYENSEKVRNGRNKKLEDNYCEIT +15 40902461 40907549 ID=JUNC00019210_3;Name=KIVRKSEMEGI 1 + 40902467 40907543 255,0,0 2 34,11 0,5077 KIVRKSEMEGI HMKIVRKSEMEGIRN +9 17406 18053 ID=JUNC00000003_1;Name=LDPLAGAVTKTHV 1 - 17421 17460 255,0,0 2 73,26 0,621 LDPLAGAVTKTHV APWTSGPCRYKKYVFLDPLAGAVTKTHVMLGAE +9 17406 18053 ID=JUNC00000003_1;Name=LDPLAGAVTKTHVMLGAE 1 - 17406 17460 255,0,0 2 73,26 0,621 LDPLAGAVTKTHVMLGAE APWTSGPCRYKKYVFLDPLAGAVTKTHVMLGAE +9 17406 18053 ID=JUNC00000003_1;Name=APWTSGPCRYKKYVF 1 - 17460 18053 255,0,0 2 73,26 0,621 APWTSGPCRYKKYVF APWTSGPCRYKKYVFLDPLAGAVTKTHVMLGAE +9 17404 18051 ID=JUNC00000003_3;Name=CLPGPPGWCCNKDPCDAGGRD 1 - 17404 17467 255,0,0 2 75,24 0,623 CLPGPPGWCCNKDPCDAGGRD PLDERALQVQEVCLPGPPGWCCNKDPCDAGGRD +9 17404 18051 ID=JUNC00000003_3;Name=PLDERALQVQEVCLPG 1 - 17455 18051 255,0,0 2 75,24 0,623 PLDERALQVQEVCLPG PLDERALQVQEVCLPGPPGWCCNKDPCDAGGRD +8 27369376 27370079 ID=JUNC00000874_2;Name=PTSCNPSDMSHGYVTVKGYHKAKATHRGPWLVA 1 + 27369376 27370079 255,0,0 2 51,48 0,655 PTSCNPSDMSHGYVTVKGYHKAKATHRGPWLVA PTSCNPSDMSHGYVTVKGYHKAKATHRGPWLVA +8 27369376 27370079 ID=JUNC00000874_2;Name=DMSHGYVTVKGYHKA 1 + 27369397 27370046 255,0,0 2 51,48 0,655 DMSHGYVTVKGYHKA PTSCNPSDMSHGYVTVKGYHKAKATHRGPWLVA +7 148909514 148910831 ID=JUNC00002152_1;Name=DQQDLADRDIPTDPNSGENKSLSSQHMTFCHGS 1 + 148909514 148910831 255,0,0 2 60,39 0,1278 DQQDLADRDIPTDPNSGENKSLSSQHMTFCHGS DQQDLADRDIPTDPNSGENKSLSSQHMTFCHGS +7 148909514 148910831 ID=JUNC00002152_1;Name=DLADRDIPTDP 1 + 148909523 148909556 255,0,0 2 60,39 0,1278 DLADRDIPTDP DQQDLADRDIPTDPNSGENKSLSSQHMTFCHGS +7 148909515 148910811 ID=JUNC00002152_2;Name=IWQTEIFPRI 1 + 148909524 148909554 255,0,0 2 59,19 0,1277 IWQTEIFPRI ISRIWQTEIFPRIPIQVRTRVSHLST +7 148909515 148910811 ID=JUNC00002152_2;Name=IFPRIPIQVRTRVSHL 1 + 148909539 148910805 255,0,0 2 59,19 0,1277 IFPRIPIQVRTRVSHL ISRIWQTEIFPRIPIQVRTRVSHLST +6 41766614 41767580 ID=JUNC00002625_1;Name=LKDSGGLAVIIERRLGSMSSLT 1 - 41766614 41767580 255,0,0 2 53,13 0,953 LKDSGGLAVIIERRLGSMSSLT LKDSGGLAVIIERRLGSMSSLT +6 41766614 41767580 ID=JUNC00002625_1;Name=DSGGLAVIIERR 1 - 41766638 41767574 255,0,0 2 53,13 0,953 DSGGLAVIIERR LKDSGGLAVIIERRLGSMSSLT +6 41766614 41767580 ID=JUNC00002625_1;Name=GLAVIIERRLGSMSS 1 - 41766620 41766665 255,0,0 2 53,13 0,953 GLAVIIERRLGSMSS LKDSGGLAVIIERRLGSMSSLT +6 41766612 41767578 ID=JUNC00002625_3;Name=KRFRWSGRNHREKIGVHVVFDQ 1 - 41766612 41767578 255,0,0 2 55,11 0,955 KRFRWSGRNHREKIGVHVVFDQ KRFRWSGRNHREKIGVHVVFDQ +6 41766612 41767578 ID=JUNC00002625_3;Name=FRWSGR 1 - 41766654 41767572 255,0,0 2 55,11 0,955 FRWSGR KRFRWSGRNHREKIGVHVVFDQ +6 41766612 41767578 ID=JUNC00002625_3;Name=NHREKIGVHVVFD 1 - 41766615 41766654 255,0,0 2 55,11 0,955 NHREKIGVHVVFD KRFRWSGRNHREKIGVHVVFDQ +6 84856497 84862316 ID=JUNC00002772_1;Name=LKMKSEAVMNQFENSMRRYL 1 - 84856497 84862316 255,0,0 2 7,53 0,5766 LKMKSEAVMNQFENSMRRYL LKMKSEAVMNQFENSMRRYL +6 84856497 84862316 ID=JUNC00002772_1;Name=MNQFENSMRRYL 1 - 84856497 84862292 255,0,0 2 7,53 0,5766 MNQFENSMRRYL LKMKSEAVMNQFENSMRRYL +6 84856497 84862316 ID=JUNC00002772_1;Name=LKMKSEAVMNQFEN 1 - 84862274 84862316 255,0,0 2 7,53 0,5766 LKMKSEAVMNQFEN LKMKSEAVMNQFENSMRRYL +6 84856497 84862316 ID=JUNC00002772_1;Name=LKMKSEAV 1 - 84862292 84862316 255,0,0 2 7,53 0,5766 LKMKSEAV LKMKSEAVMNQFENSMRRYL +6 84856497 84862316 ID=JUNC00002772_1;Name=KSEAVMNQFENSMR 1 - 84862265 84862307 255,0,0 2 7,53 0,5766 KSEAVMNQFENSMR LKMKSEAVMNQFENSMRRYL |
b |
diff -r 000000000000 -r 51f8f9041724 test-data/peptides.tsv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/peptides.tsv Mon Jan 25 15:32:49 2016 -0500 |
b |
@@ -0,0 +1,25 @@ +JUNC00019210_2 RNGRNKKLEDNYCEIT +JUNC00019210_2 SYENSEKVR +JUNC00019210_3 KIVRKSEMEGI +JUNC00000003_1 LDPLAGAVTKTHVMLGAE +JUNC00000003_1 APWTSGPCRYKKYVF +JUNC00000003_1 LDPLAGAVTKTHV +JUNC00000003_3 PLDERALQVQEVCLPG +JUNC00000003_3 CLPGPPGWCCNKDPCDAGGRD +JUNC00000874_2 PTSCNPSDMSHGYVTVKGYHKAKATHRGPWLVA +JUNC00000874_2 DMSHGYVTVKGYHKA +JUNC00002152_1 DQQDLADRDIPTDPNSGENKSLSSQHMTFCHGS +JUNC00002152_1 DLADRDIPTDP +JUNC00002152_2 IWQTEIFPRI +JUNC00002152_2 IFPRIPIQVRTRVSHL +JUNC00002625_1 LKDSGGLAVIIERRLGSMSSLT +JUNC00002625_1 GLAVIIERRLGSMSS +JUNC00002625_1 DSGGLAVIIERR +JUNC00002625_3 FRWSGR +JUNC00002625_3 KRFRWSGRNHREKIGVHVVFDQ +JUNC00002625_3 NHREKIGVHVVFD +JUNC00002772_1 LKMKSEAVMNQFENSMRRYL +JUNC00002772_1 LKMKSEAVMNQFEN +JUNC00002772_1 LKMKSEAV +JUNC00002772_1 MNQFENSMRRYL +JUNC00002772_1 KSEAVMNQFENSMR |
b |
diff -r 000000000000 -r 51f8f9041724 test-data/translated_bed_sequences.bed --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/translated_bed_sequences.bed Mon Jan 25 15:32:49 2016 -0500 |
b |
@@ -0,0 +1,14 @@ +track name="novel_junctioni_translations" description="test" +15 40902460 40907575 JUNC00019210_2 1 + 40902460 40907575 255,0,0 2 35,37 0,5078 SYENSEKVRNGRNKKLEDNYCEIT +15 40902461 40907549 JUNC00019210_3 1 + 40902461 40907549 255,0,0 2 34,11 0,5077 HMKIVRKSEMEGIRN +9 17406 18053 JUNC00000003_1 1 - 17406 18053 255,0,0 2 73,26 0,621 APWTSGPCRYKKYVFLDPLAGAVTKTHVMLGAE +9 17438 18052 JUNC00000003_2 1 - 17438 18052 255,0,0 2 41,25 0,589 PPGRAGPAGTRSMSSWTPWLVL +9 17404 18051 JUNC00000003_3 1 - 17404 18051 255,0,0 2 75,24 0,623 PLDERALQVQEVCLPGPPGWCCNKDPCDAGGRD +8 27369376 27370079 JUNC00000874_2 1 + 27369376 27370079 255,0,0 2 51,48 0,655 PTSCNPSDMSHGYVTVKGYHKAKATHRGPWLVA +7 99077597 99079392 JUNC00001897_1 1 + 99077597 99079392 255,0,0 2 64,35 0,1760 HLLSLFFQLGVHICIPNFRNNSVSHCTQLRVLL +7 99077598 99079360 JUNC00001897_2 1 + 99077598 99079360 255,0,0 2 63,3 0,1759 IYCLYFSNLVCISVYPTSEITV +7 148909514 148910831 JUNC00002152_1 1 + 148909514 148910831 255,0,0 2 60,39 0,1278 DQQDLADRDIPTDPNSGENKSLSSQHMTFCHGS +7 148909515 148910811 JUNC00002152_2 1 + 148909515 148910811 255,0,0 2 59,19 0,1277 ISRIWQTEIFPRIPIQVRTRVSHLST +6 41766614 41767580 JUNC00002625_1 1 - 41766614 41767580 255,0,0 2 53,13 0,953 LKDSGGLAVIIERRLGSMSSLT +6 41766612 41767578 JUNC00002625_3 1 - 41766612 41767578 255,0,0 2 55,11 0,955 KRFRWSGRNHREKIGVHVVFDQ +6 84856497 84862316 JUNC00002772_1 1 - 84856497 84862316 255,0,0 2 7,53 0,5766 LKMKSEAVMNQFENSMRRYL |
b |
diff -r 000000000000 -r 51f8f9041724 tool_dependencies.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool_dependencies.xml Mon Jan 25 15:32:49 2016 -0500 |
b |
@@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<tool_dependency> + <package name="biopython" version="1.62"> + <repository changeset_revision="f06c96348778" name="package_biopython_1_62" owner="biopython" toolshed="https://toolshed.g2.bx.psu.edu" /> + </package> +</tool_dependency> |