Repository 'viga'
hg clone https://toolshed.g2.bx.psu.edu/repos/vimalkumarvelayudhan/viga

Changeset 0:231e4c669675 (2018-02-27)
Next changeset 1:9825b6a8728b (2018-02-27)
Commit message:
Initial commit - v0.10.3 git commit deeded0
added:
LICENSE
README.md
VIGA.py
tool_data/viga_blastdb.loc.sample
tool_data/viga_diamonddb.loc.sample
tool_data/viga_hmmdb.loc.sample
tool_data/viga_rfamdb.loc.sample
tool_data_table_conf.xml.sample
wrapper.xml
b
diff -r 000000000000 -r 231e4c669675 LICENSE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LICENSE Tue Feb 27 14:16:54 2018 -0500
b
b'@@ -0,0 +1,674 @@\n+                    GNU GENERAL PUBLIC LICENSE\n+                       Version 3, 29 June 2007\n+\n+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n+ Everyone is permitted to copy and distribute verbatim copies\n+ of this license document, but changing it is not allowed.\n+\n+                            Preamble\n+\n+  The GNU General Public License is a free, copyleft license for\n+software and other kinds of works.\n+\n+  The licenses for most software and other practical works are designed\n+to take away your freedom to share and change the works.  By contrast,\n+the GNU General Public License is intended to guarantee your freedom to\n+share and change all versions of a program--to make sure it remains free\n+software for all its users.  We, the Free Software Foundation, use the\n+GNU General Public License for most of our software; it applies also to\n+any other work released this way by its authors.  You can apply it to\n+your programs, too.\n+\n+  When we speak of free software, we are referring to freedom, not\n+price.  Our General Public Licenses are designed to make sure that you\n+have the freedom to distribute copies of free software (and charge for\n+them if you wish), that you receive source code or can get it if you\n+want it, that you can change the software or use pieces of it in new\n+free programs, and that you know you can do these things.\n+\n+  To protect your rights, we need to prevent others from denying you\n+these rights or asking you to surrender the rights.  Therefore, you have\n+certain responsibilities if you distribute copies of the software, or if\n+you modify it: responsibilities to respect the freedom of others.\n+\n+  For example, if you distribute copies of such a program, whether\n+gratis or for a fee, you must pass on to the recipients the same\n+freedoms that you received.  You must make sure that they, too, receive\n+or can get the source code.  And you must show them these terms so they\n+know their rights.\n+\n+  Developers that use the GNU GPL protect your rights with two steps:\n+(1) assert copyright on the software, and (2) offer you this License\n+giving you legal permission to copy, distribute and/or modify it.\n+\n+  For the developers\' and authors\' protection, the GPL clearly explains\n+that there is no warranty for this free software.  For both users\' and\n+authors\' sake, the GPL requires that modified versions be marked as\n+changed, so that their problems will not be attributed erroneously to\n+authors of previous versions.\n+\n+  Some devices are designed to deny users access to install or run\n+modified versions of the software inside them, although the manufacturer\n+can do so.  This is fundamentally incompatible with the aim of\n+protecting users\' freedom to change the software.  The systematic\n+pattern of such abuse occurs in the area of products for individuals to\n+use, which is precisely where it is most unacceptable.  Therefore, we\n+have designed this version of the GPL to prohibit the practice for those\n+products.  If such problems arise substantially in other domains, we\n+stand ready to extend this provision to those domains in future versions\n+of the GPL, as needed to protect the freedom of users.\n+\n+  Finally, every program is threatened constantly by software patents.\n+States should not allow patents to restrict development and use of\n+software on general-purpose computers, but in those that do, we wish to\n+avoid the special danger that patents applied to a free program could\n+make it effectively proprietary.  To prevent this, the GPL assures that\n+patents cannot be used to render the program non-free.\n+\n+  The precise terms and conditions for copying, distribution and\n+modification follow.\n+\n+                       TERMS AND CONDITIONS\n+\n+  0. Definitions.\n+\n+  "This License" refers to version 3 of the GNU General Public License.\n+\n+  "Copyright" also means copyright-like laws that apply to other kinds of\n+works, such as semiconductor masks.\n+\n+  "The Program" refers to a'..b'CE OF THE PROGRAM\n+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\n+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n+\n+  16. Limitation of Liability.\n+\n+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\n+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\n+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\n+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\n+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\n+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\n+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\n+SUCH DAMAGES.\n+\n+  17. Interpretation of Sections 15 and 16.\n+\n+  If the disclaimer of warranty and limitation of liability provided\n+above cannot be given local legal effect according to their terms,\n+reviewing courts shall apply local law that most closely approximates\n+an absolute waiver of all civil liability in connection with the\n+Program, unless a warranty or assumption of liability accompanies a\n+copy of the Program in return for a fee.\n+\n+                     END OF TERMS AND CONDITIONS\n+\n+            How to Apply These Terms to Your New Programs\n+\n+  If you develop a new program, and you want it to be of the greatest\n+possible use to the public, the best way to achieve this is to make it\n+free software which everyone can redistribute and change under these terms.\n+\n+  To do so, attach the following notices to the program.  It is safest\n+to attach them to the start of each source file to most effectively\n+state the exclusion of warranty; and each file should have at least\n+the "copyright" line and a pointer to where the full notice is found.\n+\n+    {one line to give the program\'s name and a brief idea of what it does.}\n+    Copyright (C) {year}  {name of author}\n+\n+    This program is free software: you can redistribute it and/or modify\n+    it under the terms of the GNU General Public License as published by\n+    the Free Software Foundation, either version 3 of the License, or\n+    (at your option) any later version.\n+\n+    This program is distributed in the hope that it will be useful,\n+    but WITHOUT ANY WARRANTY; without even the implied warranty of\n+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+    GNU General Public License for more details.\n+\n+    You should have received a copy of the GNU General Public License\n+    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n+\n+Also add information on how to contact you by electronic and paper mail.\n+\n+  If the program does terminal interaction, make it output a short\n+notice like this when it starts in an interactive mode:\n+\n+    {project}  Copyright (C) {year}  {fullname}\n+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w\'.\n+    This is free software, and you are welcome to redistribute it\n+    under certain conditions; type `show c\' for details.\n+\n+The hypothetical commands `show w\' and `show c\' should show the appropriate\n+parts of the General Public License.  Of course, your program\'s commands\n+might be different; for a GUI interface, you would use an "about box".\n+\n+  You should also get your employer (if you work as a programmer) or school,\n+if any, to sign a "copyright disclaimer" for the program, if necessary.\n+For more information on this, and how to apply and follow the GNU GPL, see\n+<http://www.gnu.org/licenses/>.\n+\n+  The GNU General Public License does not permit incorporating your program\n+into proprietary programs.  If your program is a subroutine library, you\n+may consider it more useful to permit linking proprietary applications with\n+the library.  If this is what you want to do, use the GNU Lesser General\n+Public License instead of this License.  But first, please read\n+<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n'
b
diff -r 000000000000 -r 231e4c669675 README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md Tue Feb 27 14:16:54 2018 -0500
b
b'@@ -0,0 +1,270 @@\n+# VIGA\n+De novo Viral Genome Annotator\n+\n+VIGA is a script written in Python 2.7 that annotates viral genomes automatically (using a de novo algorithm) and predict the function of their proteins using BLAST and HMMER.\n+\n+## REQUIREMENTS:\n+\n+Before using this script, the following Python modules and programs should be installed:\n+\n+* Python modules:\n+\t- BCBio (https://github.com/chapmanb/bcbio-nextgen)\n+\t- Biopython (Bio module; Cock et al. 2009)\n+\t- Numpy (https://github.com/numpy/numpy)\n+\t- Scipy (https://github.com/scipy/scipy)\n+\n+* Programs:\n+\t- GNU Parallel (Tange 2011): it is used to parallelize HMMER. The program is publicly available at https://www.gnu.org/software/parallel/ under the GPLv3 licence.\n+\t- LASTZ (Harris 2007): it is used to predict the circularity of the contigs. The program is publicly available at https://github.com/lastz/lastz under the MIT licence.\n+\t- Prodigal (Hyatt et al. 2010): it is used to predict the ORFs. When the contig is smaller than 20,000 bp, MetaProdigal (Hyatt et al. 2012) is automatically activated instead of normal Prodigal. This program is publicly available at https://github.com/hyattpd/prodigal/releases/ under the GPLv3 licence.\n+\t- BLAST+ (Camacho et al. 2008): it is used to predict the function of the predicted proteins according to homology. This suite is publicly available at ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ under the GPLv2 licence. Databases are available at ftp://ftp.ncbi.nlm.nih.gov/blast/db/\n+\t- DIAMOND (Buchfink et al. 2015): it is used to predict the function of proteins according to homology when "--noblast" parameter is used. This program is publicly available at https://github.com/bbuchfink/diamond under the GPLv3 licence. Databases must be created from FASTA files according to their instructions before running.\n+\t- HMMER (Finn et al. 2011): it is used to predict the function of the predicted proteins according to Hidden Markov Models. This suite is publicly available at http://hmmer.org/ under the GPLv3 licence. Databases must be in FASTA format and examples of potential databases are UniProtKB (ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_trembl.fasta.gz) or PFAM (http://ftp.ebi.ac.uk/pub/databases/Pfam/current_release/Pfam-A.fasta.gz).\n+\t- INFERNAL (Nawrocki and Eddy 2013): it is used to predict ribosomal RNA in the contigs when using the RFAM database (Nawrocki et al. 2015). This program is publicly available at http://eddylab.org/infernal/ under the BSD licence and RFAM database is available at ftp://ftp.ebi.ac.uk/pub/databases/Rfam/\n+\t- ARAGORN (Laslett and Canback 2004): it is used to predict tRNA sequences in the contig. This program is publicly available at http://mbio-serv2.mbioekol.lu.se/ARAGORN/ under the GPLv2 licence.\n+\t- PILERCR (Edgar 2007): it is used to predict CRISPR repeats in your contig. This program is freely available at http://drive5.com/pilercr/ under a public licence.\n+\t- Tandem Repeats Finder (TRF; Benson 1999): it is used to predict the tandem repeats in your contig. This program is freely available at https://tandem.bu.edu/trf/trf.html under a custom licence.\n+\t- Inverted Repeats Finder (IRF; Warburton et al. 2004): it is used to predict the inverted repeats in your contig. This program is freely available at https://tandem.bu.edu/irf/irf.download.html under a custom licence.\n+\n+Although you can install the programs manually, we strongly recommend the use of the Docker image to create an environment for VIGA. The link to the Docker image is https://hub.docker.com/r/vimalkvn/viga/\n+\n+However, you will need to download the databases for BLAST, HMMER, and INFERNAL:\n+* BLAST DBs: https://ftp.ncbi.nlm.nih.gov/blast/db/\n+* BLAST FASTA (DIAMOND): https://ftp.ncbi.nlm.nih.gov/blast/db/FASTA\n+* RFAM (INFERNAL): http://ftp.ebi.ac.uk/pub/databases/Rfam/\n+* UniProtKB (HMMER): ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uni'..b'placed HHSUITE by HMMER 3.1 to predict protein function according to Hidden Markov Models. In a recent benchmark (as well as internal ones), we found that HHPred tends to be the slowest program to predict protein function (compared with PHMMER and BLASTP). Additionally, HMMER had a high accuracy when proteins are annotated (Saripella et al. 2016). Moreover, it has the advantage that the databases must be in FASTA format (such UniProt and, even, PFAM), which it is a standard format. For all these reasons, we replaced HHSUITE by HMMER 3.1. Additionally, fixed small issues related to the GenBank file (omission of the contig topology as well as the name of the locus).\n+* v 0.5.0 - Implemented PILER-CR to predict CRISPR repeats regions. Additionally, fixed errors in the rRNA prediction and inverted and tandem repeats.\n+* v 0.4.0 - Replaced RNAmmer v 1.2. by INFERNAL 1.1 + RFAM to predict rRNA in the contigs. In this case, you must specify where you have downloaded the RFAM database using the "--rfamdb" option.\n+* v 0.3.0 - Implemented RNAmmer v 1.2 to predict rRNA in the contigs. If such program is able to predict ribosomal genes, a warning is printed (as viral sequences do not have ribosomal genes).\n+* v 0.2.0 - Added parallelization of BLAST and HHSUITE. To do that, GNU Parallel (Tange 2011) is required. To disable this option, run the program with the "--noparallel" option.\n+* v 0.1.0 - Original version of the program.\n+\n+## REFERENCES:\n+\n+\t- Benson G (2008) Tandem repeats finder: a program to analyze DNA sequences. Nucleic Acids Research 27: 573\xe2\x80\x9380.\n+\t- Brown CT, Olm MR, Thomas BC, Banfield JF (2016) Measurement of bacterial replication rates in microbial communities. Nature Biotechnology 34: 1256-63.\n+\t- Buchfink B, Xie C, Huson DH (2015) Fast and sensitive protein alignment using DIAMOND. Nature Methods 12: 59-60.\n+\t- Camacho C, Coulouris G, Avagyan V, Ma N, Papadopoulos J, Bealer K, Madden TL (2008) BLAST+: architecture and applications. BMC Bioinformatics 10: 421.\n+\t- Edgar RC (2007) PILER-CR: fast and accurate identification of CRISPR repeats. BMC Bioinformatics 8:18.\n+\t- Finn RD, Clements J, Eddy SR (2011) HMMER web server: interactive sequence similarity searching. Nucleic Acids Research 39: W29-37.\n+\t- Fozo EM, Makarova KS, Shabalina SA, Yutin N, Koonin EV, Storz G (2010) Abundance of type I toxin-antitoxin systems in bacteria: searches for new candidates and discovery of novel families. Nucleic Acids Research 38: 3743-59.\n+\t- Harris RS (2007) Improved pairwise alignment of genomic DNA. Ph.D. Thesis, The Pennsylvania State University. \n+\t- Hyatt D, Chen GL, Locascio PF, Land ML, Larimer FW, Hauser LJ (2010) Prodigal: prokaryotic gene recognition and translation initiation site identification. BMC Bioinformatics 11: 119.\n+\t- Hyatt D, Locascio PF, Hauser LJ, Uberbacher EC (2012) Gene and translation initiation site prediction in metagenomic sequences. Bioinformatics 28: 2223-30.\n+\t- Laslett D, Canback B (2004) ARAGORN, a program to detect tRNA genes and tmRNA genes in nucleotide sequences. Nucleic Acids Research 32, 11\xe2\x80\x9316.\n+\t- Nawrocki EP, Eddy SR (2013) Infernal 1.1: 100-fold faster RNA homology searches. Bioinformatics 29: 2933-35.\n+\t- Nawrocki EP, Burge SW, Bateman A, Daub J, Eberhardt RY, Eddy SR, Floden EW, Gardner PP, Jones TA, Tate J, Finn RD (2013) Rfam 12.0: updates to the RNA families database. Nucleic Acids Research 43: D130-7.\n+\t- Saripella GV, Sonnhammer EL, Forslund K (2016) Benchmarking the next generation of homology inference tools. Bioinformatics 32: 2636-41.\n+\t- Seemann T (2014) Prokka: rapid prokaryote genome annotation. Bioinformatics 30: 2068-9.\n+\t- Tange O (2011) GNU Parallel - The Command-Line Power Tool. ;login: The USENIX Magazine 36:42-7.\n+\t- Warburton PE, Giordano J, Cheung F, Gelfand Y, Benson G (2004) Inverted repeat structure of the human genome: The X-chromosome contains a preponderance of large, highly homologous inverted repeats that contain testes genes. Genome Research 14: 1861-9.\n'
b
diff -r 000000000000 -r 231e4c669675 VIGA.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/VIGA.py Tue Feb 27 14:16:54 2018 -0500
[
b'@@ -0,0 +1,997 @@\n+#!/usr/bin/env python\n+\n+# -*- coding: utf-8 -*-\n+\n+# VIGA - De-novo VIral Genome Annotator\n+#\n+# Copyright (C) 2017 - Enrique Gonzalez-Tortuero\n+#                      Vimalkumar Velayudhan\n+#\n+# This program is free software: you can redistribute it and/or modify\n+# it under the terms of the GNU General Public License as published by\n+# the Free Software Foundation, either version 3 of the License, or\n+# (at your option) any later version.\n+#\n+# This program is distributed in the hope that it will be useful,\n+# but WITHOUT ANY WARRANTY; without even the implied warranty of\n+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n+# GNU General Public License for more details.\n+#\n+# You should have received a copy of the GNU General Public License\n+# along with this program.  If not, see <http://www.gnu.org/licenses/>.\n+\n+# Importing python libraries\n+from __future__ import print_function\n+import argparse\n+import csv\n+import fileinput\n+import fractions\n+import glob\n+import numpy\n+import os\n+import os.path\n+import re\n+import sys\n+import shutil\n+import subprocess\n+from BCBio import GFF\n+from Bio import SeqIO\n+from Bio import SeqFeature\n+from Bio.Alphabet import IUPAC\n+from Bio.Seq import Seq\n+from Bio.SeqFeature import FeatureLocation\n+from Bio.SeqRecord import SeqRecord\n+from Bio.SeqUtils.ProtParam import ProteinAnalysis\n+from collections import OrderedDict, defaultdict\n+from itertools import product\n+from scipy import signal\n+from time import strftime\n+\n+# Preparing functions\n+def batch_iterator(iterator, batch_size):\n+\tentry = True\n+\twhile entry:\n+\t\tbatch = []\n+\t\twhile len(batch) < batch_size:\n+\t\t\ttry:\n+\t\t\t\tentry = iterator.next()\n+\t\t\texcept StopIteration:\n+\t\t\t\tentry = None\n+\t\t\tif entry is None:\n+\t\t\t\tbreak\n+\t\t\tbatch.append(entry)\n+\t\tif batch:\n+\t\t\tyield batch\n+\n+def check_peaks(peaks, length):\n+\t# Checking if origin/terminus peaks are too close or too far apart. In that case, they are probably wrong\n+    closest, farthest = int(length * float(0.45)), int(length * float(0.55))\n+    pairs = []\n+    for pair in list(product(*peaks)):\n+        ### added this to make sure gets origin and ter right\n+        tr, pk = sorted(list(pair), key = lambda x: x[1], reverse = False) # trough and peak\n+        a = (tr[0] - pk[0]) % length\n+        b = (pk[0] - tr[0]) % length\n+        pt = abs(tr[1] - pk[1]) # distance between values\n+        if (a <= farthest and a >= closest) or (b <=farthest and b >= closest):\n+            pairs.append([pt, tr, pk])\n+    if len(pairs) == 0:\n+        return [False, False]\n+    pt, tr, pk = sorted(pairs, reverse = True)[0]\n+    return [tr[0], pk[0]]\n+\n+def cmd_exists(cmd):\n+\treturn subprocess.call("type " + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) == 0\n+\n+def GCskew(name, length, seq, window, slide):\n+\treplacements = {\'G\':1, \'C\':-1, \'A\':0, \'T\':0, \'N\':0}\n+\tgmc = [] # G - C\n+\tfor base in seq:\n+\t\ttry:\n+\t\t\tgmc.append(replacements[base])\n+\t\texcept:\n+\t\t\tgmc.append(0)\n+\t# convert to G + C\n+\tgpc = [abs(i) for i in gmc] # G + C\n+\t# calculate sliding windows for (G - C) and (G + C)\n+\tweights = numpy.ones(window)/window\n+\tgmc = [[i, c] for i, c in enumerate(signal.fftconvolve(gmc, weights, \'same\').tolist())]\n+\tgpc = [[i, c] for i, c in enumerate(signal.fftconvolve(gpc, weights, \'same\').tolist())]\n+\t# calculate gc skew and cummulative gc skew sum\n+\tskew = [[], []] # x and y for gc skew\n+\tc_skew = [[], []] # x and y for gc skew cummulative sums\n+\tcs = 0 # cummulative sum\n+\t# select windows to use based on slide\n+\tfor i, m in gmc[0::slide]:\n+\t\tp = gpc[i][1]\n+\t\tif p == 0:\n+\t\t\tgcs = 0\n+\t\telse:\n+\t\t\tgcs = m/p\n+\t\tcs += gcs\n+\t\tskew[0].append(i)\n+\t\tc_skew[0].append(i)\n+\t\tskew[1].append(gcs)\n+\t\tc_skew[1].append(cs)\n+\tori, ter = find_ori_ter(c_skew, length)\n+\treturn ori, ter, skew, c_skew\n+\n+def eprint(*args, **kwargs):\n+\tprint(*args, file=sys.stderr, **kwargs)\n+\n+def find_ori_ter(c_skew, length):\n+    # Find origin and terminus of replication based on cumulative GC skew min and m'..b'bk, "genbank")\n+\n+\tnewgbk = "%s.gbk" % newfile\n+\twith open(newtempgbk, "rU") as gbktempfile, open(newgbk, "w") as gbkrealfile:\n+\t\tnewpat = re.compile("D|RNA\\s+(CON|PHG|VRL|BCT)")\n+\t\tfor line in gbktempfile:\n+\t\t\tif line.startswith("LOCUS ") and re.search(newpat, line):\n+\t\t\t\tif genomeshape[\'genomeshape\'] == "linear":\n+\t\t\t\t\tnewline = re.sub("bp    DNA\\s+", "bp    DNA     linear   ", line)\n+\t\t\t\telse:\n+\t\t\t\t\tnewline = re.sub("bp    DNA\\s+", "bp    DNA     circular ", line)\n+\t\t\t\tgbkrealfile.write(newline)\n+\t\t\telse:\n+\t\t\t\tgbkrealfile.write(line)\n+\n+\tfor f in glob.glob("*.temp.gbk"):\n+\t\tos.remove(f)\n+\n+\tif args.gffprint==True:\n+\t\tnewgff = "%s.gff" % newfile\n+\t\twith open(newgff, "w") as outgff, open(newgbk, "rU") as ingbk:\n+\t\t\tGFF.write(SeqIO.parse(ingbk, "genbank"), outgff)\n+\n+\t# Removing intermediate files\n+\tos.remove(newfile)\n+\tos.remove("temp.faa")\n+\tos.remove("temp_blast.csv")\n+\tos.remove("crisprfile.txt")\n+\tos.remove("trnafile.fasta")\n+\tos.remove("rrnafile.csv")\n+\tos.remove("trf_temp.dat")\n+\tos.remove("irf_temp.dat")\n+\tfor f in glob.glob("SEQ*"):\n+\t\tos.remove(f)\n+\n+# Joining all GENBANK files into one\n+listgbk = sorted(glob.glob(\'CONTIG_*.gbk\'))\n+gbkoutputfile = "%s.gbk" % root_output\n+with open(gbkoutputfile, \'w\') as finalgbk:\n+\tfor fname in listgbk:\n+\t\twith open(fname) as infile:\n+\t\t\tfor line in infile:\n+\t\t\t\tfinalgbk.write(line)\n+\n+for tempgbk in glob.glob("CONTIG_*.gbk"):\n+\tos.remove(tempgbk)\n+\n+# Joining all GFF files into one\n+if args.gffprint==True:\n+\tlistgff = sorted(glob.glob(\'CONTIG_*.gff\'))\n+\tgffoutputfile = "%s.gff" % root_output\n+\twith open(gffoutputfile, \'w\') as finalgff:\n+\t\tfor fname in listgff:\n+\t\t\twith open(fname) as infile:\n+\t\t\t\tfor line in infile:\n+\t\t\t\t\tfinalgff.write(line)\n+\tfor tempgff in glob.glob("CONTIG_*.gff"):\n+\t\tos.remove(tempgff)\n+\n+# Joining all TABLE files into one\n+listcsv = sorted(glob.glob(\'CONTIG_*.csv\'))\n+tbloutputfile = "%s.csv" % root_output\n+with open(tbloutputfile, \'w\') as finaltable:\n+\tfor fname in listcsv:\n+\t\twith open(fname) as infile:\n+\t\t\tfor line in infile:\n+\t\t\t\tfinaltable.write(line)\n+\n+for temptbl in glob.glob("CONTIG_*.csv"):\n+\tos.remove(temptbl)\n+\n+# Preparing sequences for GenBank submission (Original code from Wan Yu\'s gbk2tbl.py script [https://github.com/wanyuac/BINF_toolkit/blob/master/gbk2tbl.py])\n+allowed_qualifiers = [\'locus_tag\', \'gene\', \'product\', \'pseudo\', \'protein_id\', \'gene_desc\', \'old_locus_tag\', \'note\', \'inference\', \'organism\', \'mol_type\', \'strain\', \'sub_species\', \'isolation-source\', \'country\']\n+newfastafile = "%s.fasta" % root_output\n+newtablefile = "%s.tbl" % root_output\n+with open(args.modifiers, "rU") as modifiers, open(gbkoutputfile, "r") as genbank_fh, open(newfastafile, "w") as fasta_fh, open(newtablefile, "w") as feature_fh: \n+\tinfo = modifiers.readline()\n+\twholelist = list(SeqIO.parse(genbank_fh, \'genbank\'))\n+\tfor record in wholelist:\n+\t\tif len(record) <= args.mincontigsize:\n+\t\t\teprint("WARNING: Skipping small contig %s" % record.id)\n+\t\t\tcontinue\n+\t\trecord.description = "%s %s" % (record.id, info)\n+\t\tSeqIO.write([record], fasta_fh, \'fasta\')\n+\t\tprint(\'>Feature %s\' % (record.name), file=feature_fh)\n+\t\tfor line in record.features:\n+\t\t\tif line.strand == 1:\n+\t\t\t\tprint(\'%d\\t%d\\t%s\' % (line.location.nofuzzy_start + 1, line.location.nofuzzy_end, line.type), file=feature_fh)\n+\t\t\telse:\n+\t\t\t\tprint(\'%d\\t%d\\t%s\' % (line.location.nofuzzy_end, line.location.nofuzzy_start + 1, line.type), file=feature_fh)\n+\t\t\tfor (key, values) in line.qualifiers.iteritems():\n+\t\t\t\tif key not in allowed_qualifiers:\n+\t\t\t\t\tcontinue\n+\t\t\t\tfor v in values:\n+\t\t\t\t\tprint(\'\\t\\t\\t%s\\t%s\' % (key, v), file=feature_fh)\n+\n+# Final statement\n+eprint("Genome annotation done!")\n+eprint("The GenBank file is %s" % gbkoutputfile)\n+if args.gffprint==True:\n+\teprint("The GFF3 file is %s" % gffoutputfile)\n+eprint("The table file for GenBank submission is %s" % tbloutputfile)\n+eprint("The FASTA file for GenBank submission is %s" % newfastafile)\n+eprint("The table file with all protein information is %s" % newtablefile)\n'
b
diff -r 000000000000 -r 231e4c669675 tool_data/viga_blastdb.loc.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data/viga_blastdb.loc.sample Tue Feb 27 14:16:54 2018 -0500
b
@@ -0,0 +1,31 @@
+# virannot_blastdb.loc
+# This is a *.loc.sample file distributed with Galaxy that enables tools
+# to use a directory of indexed data files. This one is for Bowtie2 and Tophat2.
+# See the wiki: http://wiki.galaxyproject.org/Admin/NGS%20Local%20Setup
+# First create these data files and save them in your own data directory structure.
+# Then, create a bowtie_indices.loc file to use those indexes with tools.
+# Copy this file, save it with the same name (minus the .sample), 
+# follow the format examples, and store the result in this directory.
+# The file should include an one line entry for each index set.
+# The path points to the "basename" for the set, not a specific file.
+# It has four text columns seperated by TABS.
+#
+# <unique_build_id> <dbkey> <display_name> <file_base_path>
+#
+# So, for example, if you had hg18 indexes stored in:
+#
+#    /data/databases/blast/nr/nr
+#
+# containing hg19 genome and hg19.*.bt2 files, such as:
+#    -rw-rw-r-- 1 james   james   914M Feb 10 18:56 hg19canon.fa
+#    -rw-rw-r-- 1 james   james   914M Feb 10 18:56 hg19canon.1.bt2
+#    -rw-rw-r-- 1 james   james   683M Feb 10 18:56 hg19canon.2.bt2
+#    -rw-rw-r-- 1 james   james   3.3K Feb 10 16:54 hg19canon.3.bt2
+#    -rw-rw-r-- 1 james   james   683M Feb 10 16:54 hg19canon.4.bt2
+#    -rw-rw-r-- 1 james   james   914M Feb 10 20:45 hg19canon.rev.1.bt2
+#    -rw-rw-r-- 1 james   james   683M Feb 10 20:45 hg19canon.rev.2.bt2
+#
+# then the virannot_blastdb.loc entry could look like this:
+
+nr nr Non_redundant (nr) /data/databases/blast/nr/nr
+swissprot swissprot Swissprot (swissprot) /data/databases/blast/swissprot/swissprot
b
diff -r 000000000000 -r 231e4c669675 tool_data/viga_diamonddb.loc.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data/viga_diamonddb.loc.sample Tue Feb 27 14:16:54 2018 -0500
b
@@ -0,0 +1,5 @@
+#
+# <unique_build_id> <dbkey> <display_name> <file_base_path>
+
+nr nr Non_redundant (nr) /data/databases/diamonddb/nr
+swissprot swissprot Swissprot (swissprot) /data/databases/diamonddb/swissprot
b
diff -r 000000000000 -r 231e4c669675 tool_data/viga_hmmdb.loc.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data/viga_hmmdb.loc.sample Tue Feb 27 14:16:54 2018 -0500
b
@@ -0,0 +1,5 @@
+# <unique_build_id> <dbkey> <display_name> <file_base_path>
+#
+uniprot_trembl uniprot_trembl UniProt TrEMBL /data/databases/SwissProt_UniProt/uniprot_trembl.fasta
+uniprot_sprot uniprot_sprot UniProt Swiss-Prot /data/databases/SwissProt_UniProt/uniprot_sprot.fasta
+
b
diff -r 000000000000 -r 231e4c669675 tool_data/viga_rfamdb.loc.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data/viga_rfamdb.loc.sample Tue Feb 27 14:16:54 2018 -0500
b
@@ -0,0 +1,4 @@
+# <unique_build_id> <dbkey> <display_name> <file_base_path>
+#
+Rfam Rfam Rfam /data/databases/rfam/Rfam.cm
+
b
diff -r 000000000000 -r 231e4c669675 tool_data_table_conf.xml.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data_table_conf.xml.sample Tue Feb 27 14:16:54 2018 -0500
b
@@ -0,0 +1,19 @@
+<!-- Use the file tool_data_table_conf.xml.oldlocstyle if you don't want to update your loc files as changed in revision 4550:535d276c92bc-->
+<tables>
+    <table name="viga_blastdb" comment_char="#">
+        <columns>value, dbkey, name, path</columns>
+        <file path="tool-data/viga_blastdb.loc" />
+    </table>
+    <table name="viga_diamonddb" comment_char="#">
+        <columns>value, dbkey, name, path</columns>
+        <file path="tool-data/viga_diamonddb.loc" />
+    </table>
+    <table name="viga_rfamdb" comment_char="#">
+        <columns>value, dbkey, name, path</columns>
+        <file path="tool-data/viga_rfamdb.loc" />
+    </table>
+    <table name="viga_hmmdb" comment_char="#">
+        <columns>value, dbkey, name, path</columns>
+        <file path="tool-data/viga_hmmdb.loc" />
+    </table>
+</tables>
b
diff -r 000000000000 -r 231e4c669675 wrapper.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wrapper.xml Tue Feb 27 14:16:54 2018 -0500
[
b'@@ -0,0 +1,304 @@\n+<tool id="viga" name="viga" version="0.10.3">\n+    <description>de novo VIral Genome Annotator</description>\n+    <requirements>\n+        <container type="docker">vimalkvn/viga</container>\n+    </requirements>\n+    <stdio>\n+        <exit_code range="1:" />\n+    </stdio>\n+    <command><![CDATA[\n+python $__tool_directory__/VIGA.py\n+--input $input\n+--rfamdb $rfamdb.fields.path\n+--modifiers $modifiers\n+--threads \\${GALAXY_SLOTS:-5}\n+--typedata $typedata_select\n+--gcode $gcode_select\n+--out "default"\n+--minrepeat $minrepeat\n+--maxrepeat $maxrepeat\n+--minspacer $minspacer\n+--maxspacer $maxspacer\n+\n+#if $readlength\n+    --readlength $readlength\n+#end if\n+#if $windowsize\n+    --windowsize $windowsize\n+#end if\n+#if $slidingsize\n+    --slidingsize $slidingsize\n+#end if\n+#if $locus\n+    --locus $locus\n+#end if\n+#if $gffprint\n+    --gff\n+#end if\n+#if str($blastevalue)\n+    --blastevalue $blastevalue\n+#end if\n+#if str($mincontigsize)\n+    --mincontigsize $mincontigsize\n+#end if\n+#if str($idthr)\n+    --idthr $idthr\n+#end if\n+#if str($coverthr)\n+    --coverthr $coverthr\n+#end if\n+#if str($diffid)\n+    --diffid $diffid\n+#end if\n+#if $blastexh\n+    --blastexh\n+#end if\n+#if str($homologysearch.use_diamond) == "yes":\n+   --noblast\n+   --diamonddb $homologysearch.diamonddb.fields.path\n+#else\n+   --blastdb $homologysearch.blastdb.fields.path\n+#end if\n+#if str($hmmsearch.use_phmmer) == "yes":\n+  --hmmdb $hmmsearch.hmmdb.fields.path\n+  --hmmerevalue $hmmsearch.hmmerevalue\n+#else\n+  --nohmmer\n+#end if\n+]]></command>\n+    <inputs>\n+        <param name="input" type="data" format="fasta" label="(Viral) contigs to annotate" help="Input file as a FASTA file. It can contain multiple sequences (e.g. metagenomic contigs)" />\n+        <param name="rfamdb" type="select" label="RFAM database used for ribosomal RNA prediction">\n+            <options from_data_table="viga_rfamdb">\n+                <filter type="sort_by" column="2"/>\n+                <validator type="no_options" message="No indexes are available for the selected input dataset"/>\n+            </options>\n+        </param>\n+        <param name="modifiers" type="data" format="txt" label="Metadata of the contigs" help="Modifiers per every FASTA header according to SeqIn (https://www.ncbi.nlm.nih.gov/Sequin/modifiers.html)" />\n+\t<param name="typedata_select" type="select" label="GenBank division (--typedata)">\n+\t    <option value="CON" selected="true">Contig</option>\n+\t    <option value="PHG">Phages</option>\n+\t    <option value="VRL">Eukaryotic/Archaea virus</option>\n+\t    <option value="BCT">Prokaryotic chromosome</option>\n+\t</param>\n+\t<param name="gcode_select" type="select" label="Number of GenBank translation table (--gcode)">\n+\t  <option value="1">Standard genetic code [Eukaryotic]</option>\n+\t  <option value="2">Vertebrate mitochondrial code</option>\n+\t  <option value="3">Yeast mitochondrial code</option>\n+\t  <option value="4">Mycoplasma/Spiroplasma and Protozoan/mold/coelenterate mitochondrial code</option>\n+\t  <option value="5">Invertebrate mitochondrial code</option>\n+\t  <option value="6">Ciliate, dasycladacean and hexamita nuclear code</option>\n+\t  <option value="9">Echinoderm/flatworm mitochondrial code</option>\n+\t  <option value="10">Euplotid nuclear code</option>\n+\t  <option value="11" selected="true">Bacteria/Archaea/Phages/Plant plastid</option>\n+\t  <option value="12">Alternative yeast nuclear code</option>\n+\t  <option value="13">Ascidian mitochondrial code</option>\n+\t  <option value="14">Alternative flatworm mitochondrial code</option>\n+\t  <option value="16">Chlorophycean mitochondrial code</option>\n+\t  <option value="21">Trematode mitochondrial code</option>\n+\t  <option value="22">Scedenesmus obliquus mitochondrial code</option>\n+\t  <option value="23">Thraustochytrium mitochondrial code</option>\n+\t  <option value="24">Pterobranquia mitochondrial code</option>\n+\t  <option value="25">Gracilibacteria and Candidate division SR1</option>\n+\t  <option value="26">Pachysolen t'..b'.tbl" />\n+        </test>\n+        <test>\n+            <param name="input" ftype="fasta" value="mu.fasta" />\n+            <param name="outputs" value="csv,gbk,fasta,tbl" />\n+            <output name="default_csv" file="default.csv" />\n+            <output name="default_gbk" file="default.gbk" />\n+            <output name="default_fasta" file="default.fasta" />\n+            <output name="default_tbl" file="default.tbl" />\n+        </test>\n+    </tests>\n+    <help><![CDATA[\n+**About VIGA**\n+\n+VIGA_ is a script written in Python 2.7 that annotates viral\n+genomes automatically (using a de novo algorithm) and predict the\n+function of their proteins using BLAST and HMMER.\n+\n+----\n+\n+**About this Galaxy wrapper**\n+\n+**Requirements**\n+\n+`Docker <https://www.docker.com>`_ should first be installed and working on the\n+server where this Galaxy instance is setup. The user running Galaxy should be\n+part of the **docker** user group.\n+\n+#. Download or clone the VIGA_ Github repository (as a submodule)\n+   in to the ``tools`` directory.\n+\n+**Configuration**\n+\n+**Update database paths in .loc files**\n+\n+Edit the following files in the **tool-data** directory and add paths to\n+corresponding databases:\n+\n+* viga_blastdb.loc\n+* viga_diamonddb.loc\n+* viga_rfamdb.loc\n+* viga_hmmdb.loc\n+\n+**Create or update the Galaxy job configuration file**\n+\n+If the file **config/job_conf.xml** does not exist, create it by copying the\n+template **config/job_conf.xml.sample_basic** in the Galaxy directory. Then\n+add a Docker destination for viga. Change ``/data/databases`` under\n+``docker_volumes`` to the location where your databases are stored. Here is\n+an example::\n+\n+\t<?xml version="1.0"?>\n+\t<!-- A sample job config that explicitly configures job running the way it is configured by default (if there is no explicit config). -->\n+\t<job_conf>\n+\t    <plugins>\n+\t\t<plugin id="local" type="runner" load="galaxy.jobs.runners.local:LocalJobRunner" workers="4"/>\n+\t    </plugins>\n+\t    <handlers>\n+\t\t<handler id="main"/>\n+\t    </handlers>\n+\t    <destinations default="local">\n+\t\t<destination id="local" runner="local"/>\n+\t\t<destination id="docker" runner="local">\n+\t\t\t<param id="docker_enabled">true</param>\n+\t\t\t<param id="docker_sudo">false</param>\n+\t\t\t<param id="docker_auto_rm">true</param>\n+\t\t\t<param id="docker_volumes">$defaults,/data/databases:ro</param>\n+\t\t</destination>\n+\t    </destinations>\n+\t    <tools>\n+\t      <tool id="viga" destination="docker"/>\n+\t    </tools>\n+\t</job_conf>\n+\n+\n+**Restart Galaxy**. The tool will now be ready to use.\n+   \n+----\n+\n+**Output files**\n+\n+VIGA creates the following output files:\n+\n+* tbl - Table file with all protein information.\n+* gbk - GenBank format file with annotations.\n+* fasta - FASTA format file for GenBank submission\n+* csv - Table file for GenBank submission.\n+* gff - GFF3 format file (if option is selected)\n+\n+----\n+\n+**License and citation**\n+\n+VIGA_ and this Galaxy wrapper - `GPLv3 <https://www.gnu.org/copyleft/gpl.html>`_.\n+\n+\n+Galaxy\n+\n+- Goecks, J, Nekrutenko, A, Taylor, J and The Galaxy Team. "Galaxy: a\n+  comprehensive approach for supporting accessible, reproducible, and\n+  transparent computational research in the life sciences." \n+  Genome Biol. 2010 Aug 25;11(8):R86.\n+\n+- Blankenberg D, Von Kuster G, Coraor N, Ananda G, Lazarus R, Mangan M,\n+  Nekrutenko A, Taylor J. "Galaxy: a web-based genome analysis tool for\n+  experimentalists". Current Protocols in Molecular Biology. \n+  2010 Jan; Chapter 19:Unit 19.10.1-21.\n+\n+- Giardine B, Riemer C, Hardison RC, Burhans R, Elnitski L, Shah P, Zhang Y,\n+  Blankenberg D, Albert I, Taylor J, Miller W, Kent WJ, Nekrutenko A. "Galaxy:\n+  a platform for interactive large-scale genome analysis." \n+  Genome Research. 2005 Oct; 15(10):1451-5.\n+\n+You can use this tool only if you agree to the license terms of: `VIGA`_.\n+\n+.. _VIGA: https://github.com/EGTortuero/viga\n+\n+]]></help>\n+<!--    <citations>\n+        <citation type="doi">NOT YET</citation>\n+    </citations>\n+-->\n+</tool>\n'