Repository 'metagenomics_datatypes'
hg clone https://toolshed.g2.bx.psu.edu/repos/qfab/metagenomics_datatypes

Changeset 0:ccba8612695e (2014-05-29)
Next changeset 1:6a7d52777409 (2014-06-03)
Commit message:
Uploaded
added:
metagenomics_datatypes/ReadMe.txt
metagenomics_datatypes/datatypes_conf.xml
metagenomics_datatypes/metagenomics.py
b
diff -r 000000000000 -r ccba8612695e metagenomics_datatypes/ReadMe.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/metagenomics_datatypes/ReadMe.txt Thu May 29 00:39:20 2014 -0400
b
@@ -0,0 +1,29 @@
+Galaxy datatypes required by the Metagenomics Workflow
+======================================================================
+
+This wrapper for the metagenomics datatypes is based on the Mothur 
+toolsuite wrapper of James E Johnson - University of Minnesota.
+
+This wrapper will automatically register the datatypes required by
+the Metagenomics Workflow.
+
+
+Disclaimer
+======================================================================
+
+This source code is provided by QFAB Bioinformatics "as is", in the hope 
+that it will be useful, and any express or implied warranties, including, 
+but not limited to, the implied warranties of merchantability and fitness 
+for a particular purpose are disclaimed.
+IN NO EVENT SHALL QFAB BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES HOWEVER CAUSED AND ON ANY
+THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE
+CODE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License
+======================================================================
+This work by QFAB Bioinformatics (as part of the GVL project 
+http://genome.edu.au) is licensed under a Creative Commons 
+Attribution-NonCommercial-ShareAlike 4.0 International License.
b
diff -r 000000000000 -r ccba8612695e metagenomics_datatypes/datatypes_conf.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/metagenomics_datatypes/datatypes_conf.xml Thu May 29 00:39:20 2014 -0400
b
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<datatypes>
+    <datatype_files>
+        <datatype_file name="metagenomics.py"/>
+    </datatype_files>
+    <registration>
+        <datatype extension="rabund" type="galaxy.datatypes.metagenomics:Rabund" display_in_upload="true"/>
+        <datatype extension="otu" type="galaxy.datatypes.metagenomics:Otu" display_in_upload="true"/>
+        <datatype extension="list" type="galaxy.datatypes.metagenomics:OtuList" display_in_upload="true"/>
+        <datatype extension="sabund" type="galaxy.datatypes.metagenomics:Sabund" display_in_upload="true"/>
+        <datatype extension="rabund" type="galaxy.datatypes.metagenomics:Rabund" display_in_upload="true"/>
+        <datatype extension="grpabund" type="galaxy.datatypes.metagenomics:GroupRabund" display_in_upload="true"/>
+        <datatype extension="shared" type="galaxy.datatypes.metagenomics:SharedRabund" display_in_upload="true"/>
+        <datatype extension="relabund" type="galaxy.datatypes.metagenomics:RelAbund" display_in_upload="true"/>
+        <datatype extension="accnos" type="galaxy.datatypes.metagenomics:AccNos" display_in_upload="true"/>
+        <datatype extension="tre" type="galaxy.datatypes.data:Newick" display_in_upload="true"/>
+        <datatype extension="nhx" type="galaxy.datatypes.metagenomics:Nhx" display_in_upload="true"/>
+        <datatype extension="nex" type="galaxy.datatypes.metagenomics:Nexus" display_in_upload="true"/>
+    </registration>
+    <sniffers>
+        <sniffer type="galaxy.datatypes.metagenomics:Rabund"/>
+        <sniffer type="galaxy.datatypes.metagenomics:Otu"/>
+        <sniffer type="galaxy.datatypes.metagenomics:Sabund"/>
+        <sniffer type="galaxy.datatypes.metagenomics:GroupAbund"/>
+        <sniffer type="galaxy.datatypes.metagenomics:SharedRabund"/>
+        <sniffer type="galaxy.datatypes.metagenomics:RelAbund"/>
+        <sniffer type="galaxy.datatypes.metagenomics:Newick"/>
+        <sniffer type="galaxy.datatypes.metagenomics:Nexus"/>
+    </sniffers>
+</datatypes>
b
diff -r 000000000000 -r ccba8612695e metagenomics_datatypes/metagenomics.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/metagenomics_datatypes/metagenomics.py Thu May 29 00:39:20 2014 -0400
[
b'@@ -0,0 +1,384 @@\n+"""\n+metagenomics class\n+"""\n+\n+import logging, os, os.path, sys, time, tempfile, shutil, string, glob, re\n+import galaxy.model\n+from galaxy.datatypes.sniff import *\n+from galaxy.datatypes.metadata import MetadataElement\n+from galaxy.datatypes.data import Text, Data\n+from galaxy.datatypes.tabular import Tabular\n+from galaxy.datatypes.sequence import Fasta\n+from galaxy import util\n+from galaxy.datatypes.images import Html\n+\n+log = logging.getLogger(__name__)\n+\n+class Otu( Text ):\n+    file_ext = \'otu\'\n+    MetadataElement( name="columns", default=0, desc="Number of columns", readonly=True, visible=True, no_value=0 )\n+    MetadataElement( name="labels", default=[], desc="Label Names", readonly=True, visible=True, no_value=[] )\n+    def __init__(self, **kwd):\n+        Text.__init__( self, **kwd )\n+    def set_meta( self, dataset, overwrite = True, **kwd ):\n+        if dataset.has_data():\n+            label_names = set()\n+            ncols = 0\n+            data_lines = 0\n+            comment_lines = 0\n+            try:\n+                fh = open( dataset.file_name )\n+                for line in fh:\n+                    fields = line.strip().split(\'\\t\')\n+                    if len(fields) >= 2:\n+                        data_lines += 1\n+                        ncols = max(ncols,len(fields))\n+                        label_names.add(fields[0])\n+                    else:\n+                        comment_lines += 1\n+                # Set the discovered metadata values for the dataset\n+                dataset.metadata.data_lines = data_lines\n+                dataset.metadata.columns = ncols\n+                dataset.metadata.labels = []\n+                dataset.metadata.labels += label_names\n+                dataset.metadata.labels.sort()\n+            finally:\n+                fh.close()\n+\n+    def sniff( self, filename ):\n+        """\n+        Determines whether the file is a otu (operational taxonomic unit) format\n+        """\n+        try:\n+            fh = open( filename )\n+            count = 0\n+            while True:\n+                line = fh.readline()\n+                line = line.strip()\n+                if not line:\n+                    break #EOF\n+                if line:\n+                    if line[0] != \'@\':\n+                        linePieces = line.split(\'\\t\')\n+                        if len(linePieces) < 2:\n+                            return False\n+                        try:\n+                            check = int(linePieces[1])\n+                            if check + 2 != len(linePieces):\n+                                return False\n+                        except ValueError:\n+                            return False\n+                        count += 1\n+                        if count == 5:\n+                            return True\n+            fh.close()\n+            if count < 5 and count > 0:\n+                return True\n+        except:\n+            pass\n+        finally:\n+            fh.close()\n+        return False\n+\n+class OtuList( Otu ):\n+    file_ext = \'list\'\n+    def __init__(self, **kwd):\n+        """\n+        # http://www.mothur.org/wiki/List_file\n+        The first column is a label that represents the distance that sequences were assigned to OTUs.\n+        The number in the second column is the number of OTUs that have been formed.\n+        Subsequent columns contain the names of sequences within each OTU separated by a comma.\n+        distance_label  otu_count       OTU1    OTU2    OTUn\n+        """\n+        Otu.__init__( self, **kwd )\n+    def init_meta( self, dataset, copy_from=None ):\n+        Otu.init_meta( self, dataset, copy_from=copy_from )\n+    def set_meta( self, dataset, overwrite = True, **kwd ):\n+        Otu.set_meta(self,dataset, overwrite = True, **kwd )\n+        """\n+        # too many columns to be stored in metadata\n+        if dataset != None and dataset.metadata.columns > 2:\n+            for i in range(2,dataset.metadata.columns):\n+               dataset.metadat'..b'ng from for that row. Next is the number of OTUs that were found between each of the groups and is the number of columns that follow.\n+        Finally, the remaining columns indicate the relative abundance of each OTU from that group.\n+        """\n+        GroupAbund.__init__( self, **kwd )\n+    def init_meta( self, dataset, copy_from=None ):\n+        GroupAbund.init_meta( self, dataset, copy_from=copy_from )\n+    def sniff( self, filename ):\n+        """\n+        Determines whether the file is a otu (operational taxonomic unit) Relative Abundance format\n+        label<TAB>group<TAB>count[<TAB>value(1..n)]\n+        The first line is column headings as of Mothur v 1.20\n+        """\n+        # return GroupAbund.sniff(self,filename,False)\n+        isme = GroupAbund.sniff(self,filename,False)\n+        return isme\n+\n+class AccNos(Tabular):\n+    file_ext = \'accnos\'\n+    def __init__(self, **kwd):\n+        """A list of names"""\n+        Tabular.__init__( self, **kwd )\n+        self.column_names = [\'name\']\n+        self.columns = 1\n+\n+class Newick( Text ):\n+    """\n+    The Newick Standard for representing trees in computer-readable form makes use of the correspondence between trees and nested parentheses.\n+    http://evolution.genetics.washington.edu/phylip/newicktree.html\n+    http://en.wikipedia.org/wiki/Newick_format\n+    Example:\n+    (B,(A,C,E),D);\n+    or example with branch lengths:\n+    (B:6.0,(A:5.0,C:3.0,E:4.0):5.0,D:11.0);\n+    or an example with embedded comments but no branch lengths:\n+    ((a [&&PRIME S=x], b [&&PRIME S=y]), c [&&PRIME S=z]);\n+    Example with named interior noe:\n+    (B:6.0,(A:5.0,C:3.0,E:4.0)Ancestor1:5.0,D:11.0);\n+    """\n+    file_ext = \'tre\'\n+\n+    def __init__(self, **kwd):\n+        Text.__init__( self, **kwd )\n+\n+    def sniff( self, filename ):   ## TODO\n+        """\n+        Determine whether the file is in Newick format\n+        Note: Last non-space char of a tree should be a semicolon: \';\'\n+        Usually the first char will be a open parenthesis: \'(\'\n+        (,,(,));                               no nodes are named\n+        (A,B,(C,D));                           leaf nodes are named\n+        (A,B,(C,D)E)F;                         all nodes are named\n+        (:0.1,:0.2,(:0.3,:0.4):0.5);           all but root node have a distance to parent\n+        (:0.1,:0.2,(:0.3,:0.4):0.5):0.0;       all have a distance to parent\n+        (A:0.1,B:0.2,(C:0.3,D:0.4):0.5);       distances and leaf names (popular)\n+        (A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5)F;     distances and all names\n+        ((B:0.2,(C:0.3,D:0.4)E:0.5)F:0.1)A;    a tree rooted on a leaf node (rare)\n+        """\n+        if not os.path.exists(filename):\n+            return False\n+        try:\n+            ## For now, guess this is a Newick file if it starts with a \'(\' and ends with a \';\'\n+            flen = os.path.getsize(filename)\n+            fh = open( filename )\n+            len = min(flen,2000)\n+            # check end of the file for a semicolon\n+            fh.seek(-len,os.SEEK_END)\n+            buf = fh.read(len).strip()\n+            buf = buf.strip()\n+            if not buf.endswith(\';\'):\n+                return False\n+            # See if this starts with a open parenthesis\n+            if len < flen:\n+                fh.seek(0)\n+                buf = fh.read(len).strip()\n+            if buf.startswith(\'(\'):\n+                return True\n+        except:\n+            pass\n+        finally:\n+            close(fh)\n+        return False\n+\n+class Nhx( Newick ):\n+    """\n+    New Hampshire eXtended  Newick with embedded\n+    The Newick Standard for representing trees in computer-readable form makes use of the correspondence between trees and nested parentheses.\n+    http://evolution.genetics.washington.edu/phylip/newicktree.html\n+    http://en.wikipedia.org/wiki/Newick_format\n+    Example:\n+    (gene1_Hu[&&NHX:S=Hu_Homo_sapiens], (gene2_Hu[&&NHX:S=Hu_Homo_sapiens], gene2_Mu[&&NHX:S=Mu_Mus_musculus]));\n+    """\n+    file_ext = \'nhx\'\n'