changeset 0:1b0f96ed73f2 draft

"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/table_compute commit 1ee75135483d5db22c540bc043746cd986f85762"
author iuc
date Sat, 17 Aug 2019 16:25:37 -0400
parents
children dddadbbac949
files allowed_functions.xml scripts/safety.py scripts/table_compute.py table_compute.xml test-data/examples.1.tsv test-data/examples.2.tsv test-data/examples.3p1.tsv test-data/examples.3p2.tsv test-data/examples.4.tsv test-data/examples.5.tsv test-data/examples.6p1.tsv test-data/examples.6p2.tsv test-data/examples.6p3.tsv test-data/examples.7.tsv test-data/examples.8.tsv test-data/mat1.trans.tsv test-data/mat1.umi.tsv test-data/mat2.trans.tsv test-data/mat2.umi.tsv test-data/small.element.custom.tsv test-data/small.element.scalerem5.tsv test-data/small.fs.colsum.gt10.tsv test-data/small.fs.colsum.neq0.tsv test-data/small.fs.elemgt2.mm2.tsv test-data/small.fs.elemnmatch0.mm4.tsv test-data/small.fs.medvalcol.ge2.tsv test-data/small.fs.rowsum.gt.50.tsv test-data/small.fulltable.tsv test-data/small.matapp.colcust.tsv test-data/small.matapp.rowmax.tsv test-data/small.multiple.tsv test-data/small.select.colsonly.tsv test-data/small.select.rowsonly.tsv test-data/small.select.tsv test-data/small.tsv
diffstat 35 files changed, 2260 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/allowed_functions.xml	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,48 @@
+<macros>
+    <!-- These macros are the allowed functions: numpy, pandas
+         Dataframe, math, or basic operators.
+
+         This file is parsed by the python scripts to reduce
+         duplicate definitions of allowed functions -->
+    <macro name="select_vectorops" >
+        <option value="min" selected="true">Minimum</option>
+        <option value="max">Maximum</option>
+        <option value="sum">Sum</option>
+        <option value="count">Number of Non-NA Values</option>
+        <option value="nunique">Number of Unique Observations</option>
+        <option value="mean">Mean</option>
+        <option value="median">Median</option>
+        <option value="std">Standard Deviation</option>
+        <option value="sem">Standard Error of the Mean</option>
+        <option value="var">Variance</option>
+        <option value="mad">Mean absolute deviation</option>
+        <option value="product">Product</option>
+        <yield />
+    </macro>
+    <macro name="select_onevalueoperator">
+        <option value="log">Ln</option>
+        <option value="log10">Log10</option>
+        <option value="exp">Exponential</option>
+        <option value="floor">Floor</option>
+        <option value="ceil">Ceiling</option>
+        <option value="sqrt">Square root</option>
+    </macro>
+    <macro name="select_twovaluenumericoperator">
+        <option value="add">Add</option>
+        <option value="sub">Subtract</option>
+        <option value="mul">Multiply</option>
+        <option value="truediv">True Divide</option>
+        <option value="floordiv">Floor Divide</option>
+        <option value="pow">Power</option>
+        <option value="mod">Remainder</option>
+    </macro>
+    <macro name="select_twovaluebooleanops">
+        <yield />
+        <option value="lt">&#60; (Less Than)</option>
+        <option value="le">&#8804; (Less Than or Equal to)</option>
+        <option value="gt">&#62; (Greater Than)</option>
+        <option value="ge">&#8805; (Greater Than or Equal to)</option>
+        <option value="eq">&#8801; (Equal to)</option>
+        <option value="ne">&#8800; (Not Equal to)</option>
+    </macro>
+</macros>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/safety.py	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,211 @@
+import re
+
+
+class Safety():
+    """
+    Class to safely evaluate mathematical expression on single
+    or table data
+    """
+
+    __allowed_tokens = (
+        '(', ')', 'if', 'else', 'or', 'and', 'not', 'in',
+        '+', '-', '*', '/', '%', ',', '!=', '==', '>', '>=', '<', '<=',
+        'min', 'max', 'sum',
+    )
+    __allowed_ref_types = {
+        'pd.DataFrame': {
+            'abs', 'add', 'agg', 'aggregate', 'align', 'all', 'any', 'append',
+            'apply', 'applymap', 'as_matrix', 'asfreq', 'at', 'axes', 'bool',
+            'clip', 'clip_lower', 'clip_upper', 'columns', 'combine',
+            'compound', 'corr', 'count', 'cov', 'cummax', 'cummin', 'cumprod',
+            'cumsum', 'describe', 'div', 'divide', 'dot', 'drop',
+            'drop_duplicates', 'droplevel', 'dropna', 'duplicated', 'empty',
+            'eq', 'equals', 'expanding', 'ffill', 'fillna', 'filter', 'first',
+            'first_valid_index', 'floordiv', 'ge', 'groupby', 'gt', 'head',
+            'iat', 'iloc', 'index', 'insert', 'interpolate', 'isin', 'isna',
+            'isnull', 'items', 'iteritems', 'iterrows', 'itertuples', 'ix',
+            'join', 'keys', 'kurt', 'kurtosis', 'last', 'last_valid_index',
+            'le', 'loc', 'lookup', 'lt', 'mad', 'mask', 'max', 'mean',
+            'median', 'melt', 'merge', 'min', 'mod', 'mode', 'mul', 'multiply',
+            'ndim', 'ne', 'nlargest', 'notna', 'notnull', 'nsmallest',
+            'nunique', 'pct_change', 'pivot', 'pivot_table', 'pop', 'pow',
+            'prod', 'product', 'quantile', 'radd', 'rank', 'rdiv', 'replace',
+            'resample', 'rfloordiv', 'rmod', 'rmul', 'rolling', 'round',
+            'rpow', 'rsub', 'rtruediv', 'sample', 'select',
+            'sem', 'shape', 'shift', 'size', 'skew', 'slice_shift',
+            'squeeze', 'stack', 'std', 'sub', 'subtract', 'sum', 'swapaxes',
+            'swaplevel', 'T', 'tail', 'take', 'transform', 'transpose',
+            'truediv', 'truncate', 'tshift', 'unstack', 'var', 'where',
+        },
+        'pd.Series': {
+            'abs', 'add', 'agg', 'aggregate', 'align', 'all', 'any', 'append',
+            'apply', 'argsort', 'as_matrix', 'asfreq', 'asof', 'astype', 'at',
+            'at_time', 'autocorr', 'axes', 'between', 'between_time', 'bfill',
+            'bool', 'cat', 'clip', 'clip_lower', 'clip_upper', 'combine',
+            'combine_first', 'compound', 'corr', 'count', 'cov', 'cummax',
+            'cummin', 'cumprod', 'cumsum', 'describe', 'diff', 'div', 'divide',
+            'divmod', 'dot', 'drop', 'drop_duplicates', 'droplevel', 'dropna',
+            'dt', 'dtype', 'dtypes', 'duplicated', 'empty', 'eq', 'equals',
+            'ewm', 'expanding', 'factorize', 'ffill', 'fillna', 'filter',
+            'first', 'first_valid_index', 'flags', 'floordiv', 'ge', 'groupby',
+            'gt', 'hasnans', 'head', 'iat', 'idxmax', 'idxmin', 'iloc', 'imag',
+            'index', 'interpolate', 'is_monotonic', 'is_monotonic_decreasing',
+            'is_monotonic_increasing', 'is_unique', 'isin', 'isna', 'isnull',
+            'item', 'items', 'iteritems', 'ix', 'keys', 'kurt', 'kurtosis',
+            'last', 'last_valid_index', 'le', 'loc', 'lt', 'mad', 'map',
+            'mask', 'max', 'mean', 'median', 'min', 'mod', 'mode', 'mul',
+            'multiply', 'name', 'ndim', 'ne', 'nlargest', 'nonzero', 'notna',
+            'notnull', 'nsmallest', 'nunique', 'pct_change', 'pop', 'pow',
+            'prod', 'product', 'ptp', 'quantile', 'radd', 'rank', 'rdiv',
+            'rdivmod', 'real', 'repeat', 'replace', 'resample', 'rfloordiv',
+            'rmod', 'rmul', 'rolling', 'round', 'rpow', 'rsub', 'rtruediv',
+            'sample', 'searchsorted', 'select', 'sem', 'shape', 'shift',
+            'size', 'skew', 'slice_shift', 'sort_index', 'sort_values',
+            'squeeze', 'std', 'sub', 'subtract', 'sum', 'swapaxes',
+            'swaplevel', 'T', 'tail', 'take', 'transform', 'transpose',
+            'truediv', 'truncate', 'tshift', 'unique', 'unstack',
+            'value_counts', 'var', 'where', 'xs',
+        },
+    }
+
+    __allowed_qualified = {
+        # allowed numpy functionality
+        'np': {
+            'abs', 'add', 'all', 'any', 'append', 'array', 'bool', 'ceil',
+            'complex', 'cos', 'cosh', 'cov', 'cumprod', 'cumsum', 'degrees',
+            'divide', 'divmod', 'dot', 'e', 'empty', 'exp', 'float', 'floor',
+            'hypot', 'inf', 'int', 'isfinite', 'isin', 'isinf', 'isnan', 'log',
+            'log10', 'log2', 'max', 'mean', 'median', 'min', 'mod', 'multiply',
+            'nan', 'ndim', 'pi', 'product', 'quantile', 'radians', 'rank',
+            'remainder', 'round', 'sin', 'sinh', 'size', 'sqrt', 'squeeze',
+            'stack', 'std', 'str', 'subtract', 'sum', 'swapaxes', 'take',
+            'tan', 'tanh', 'transpose', 'unique', 'var', 'where',
+        },
+        # allowed math functionality
+        'math': {
+            'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil',
+            'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp',
+            'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum',
+            'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf',
+            'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2',
+            'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh',
+            'sqrt', 'tan', 'tanh', 'tau', 'trunc',
+        },
+        # allowed pd functionality
+        'pd': {
+            'DataFrame', 'array', 'concat', 'cut', 'date_range', 'factorize',
+            'interval_range', 'isna', 'isnull', 'melt', 'merge', 'notna',
+            'notnull', 'period_range', 'pivot', 'pivot_table', 'unique',
+            'value_counts', 'wide_to_long',
+        },
+    }
+
+    def __init__(self, expression,
+                 ref_whitelist=None, ref_type=None,
+                 custom_qualified=None):
+        self.allowed_qualified = self.__allowed_qualified.copy()
+        if ref_whitelist is None:
+            self.these = []
+        else:
+            self.these = ref_whitelist
+            if ref_type is None or ref_type not in self.__allowed_ref_types:
+                self.allowed_qualified['_this'] = set()
+            else:
+                self.allowed_qualified[
+                    '_this'
+                ] = self.__allowed_ref_types[ref_type]
+        if custom_qualified is not None:
+            self.allowed_qualified.update(custom_qualified)
+        self.expr = expression
+        self.__assertSafe()
+
+    def generateFunction(self):
+        "Generates a function to be evaluated outside the class"
+        cust_fun = "def fun(%s):\n\treturn(%s)" % (self.these[0], self.expr)
+        return cust_fun
+
+    def __assertSafe(self):
+        indeed, problematic_token = self.__isSafeStatement()
+        if not indeed:
+            self.detailedExcuse(problematic_token)
+            raise ValueError("Custom Expression is not safe.")
+
+    @staticmethod
+    def detailedExcuse(word):
+        "Gives a verbose statement for why users should not use some specific operators."
+        mess = None
+        if word == "for":
+            mess = "for loops and comprehensions are not allowed. Use numpy or pandas table operations instead."
+        elif word == ":":
+            mess = "Colons are not allowed. Use inline Python if/else statements."
+        elif word == "=":
+            mess = "Variable assignment is not allowed. Use object methods to substitute values."
+        elif word in ("[", "]"):
+            mess = "Direct indexing of arrays is not allowed. Use numpy or pandas functions/methods to address specific parts of tables."
+        else:
+            mess = "Not an allowed token in this operation"
+        print("( '%s' ) %s" % (word, mess))
+
+    def __isSafeStatement(self):
+        """
+        Determines if a user-expression is safe to evaluate.
+
+        To be considered safe an expression may contain only:
+        - standard Python operators and numbers
+        - inline conditional expressions
+        - select functions and objects
+          by default, these come from the math, numpy and pandas
+          libraries, and must be qualified with the modules' conventional
+          names math, np, pd; can be overridden at the instance level
+        - references to a whitelist of objects (pd.DataFrames by default)
+          and their methods
+        """
+
+        safe = True
+        # examples of user-expressions
+        # '-math.log(1 - elem/4096) * 4096 if elem != bn else elem - 0.5'
+        # 'vec.median() +  vec.sum()'
+
+        # 1. Break expressions into tokens
+        # e.g.,
+        # [
+        #     '-', 'math.log', '(', '1', '-', 'elem', '/', '4096', ')', '*',
+        #     '4096', 'if', 'elem', '!=', 'bn', 'else', 'elem', '-', '0.5'
+        # ]
+        # or
+        # ['vec.median', '(', ')', '+', 'vec.sum', '(', ')']
+        tokens = [
+            e for e in re.split(
+                r'([a-zA-Z0-9_.]+|[^a-zA-Z0-9_.() ]+|[()])', self.expr
+            ) if e.strip()
+        ]
+
+        # 2. Subtract allowed standard tokens
+        rem = [e for e in tokens if e not in self.__allowed_tokens]
+
+        # 3. Subtract allowed qualified objects from allowed modules
+        #    and whitelisted references and their attributes
+        rem2 = []
+        for e in rem:
+            parts = e.split('.')
+            if len(parts) == 1:
+                if parts[0] in self.these:
+                    continue
+            if len(parts) == 2:
+                if parts[0] in self.these:
+                    parts[0] = '_this'
+                if parts[0] in self.allowed_qualified:
+                    if parts[1] in self.allowed_qualified[parts[0]]:
+                        continue
+            rem2.append(e)
+
+        # 4. Assert that rest are real numbers
+        e = ''
+        for e in rem2:
+            try:
+                _ = float(e)
+            except ValueError:
+                safe = False
+                break
+
+        return safe, e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/table_compute.py	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,310 @@
+#!/usr/bin/env python3
+"""
+Table Compute tool - a wrapper around pandas with parameter input validation.
+"""
+
+__version__ = "0.8"
+
+import csv
+import math
+from sys import argv
+
+import numpy as np
+import pandas as pd
+import userconfig as uc
+from safety import Safety
+# This should be generated in the same directory
+
+# Version command should not need to copy the config
+if len(argv) == 2 and argv[1] == "--version":
+    print(__version__)
+    exit(-1)
+
+
+class Utils:
+    @staticmethod
+    def getOneValueMathOp(op_name):
+        "Returns a simple one value math operator such as log, sqrt, etc"
+        return getattr(math, op_name)
+
+    @staticmethod
+    def getVectorPandaOp(op_name):
+        "Returns a valid DataFrame vector operator"
+        return getattr(pd.DataFrame, op_name)
+
+    @staticmethod
+    def getTwoValuePandaOp(op_name, pd_obj):
+        "Returns a valid two value DataFrame or Series operator"
+        return getattr(type(pd_obj), "__" + op_name + "__")
+
+
+# Math is imported but not directly used because users
+# may specify a "math.<function>" when inserting a custom
+# function. To remove linting errors, which break CI testing
+# we will just use an arbitrary math statement here.
+__ = math.log
+
+
+# Set decimal precision
+pd.options.display.precision = uc.Default["precision"]
+
+user_mode = uc.Default["user_mode"]
+user_mode_single = None
+out_table = None
+params = uc.Data["params"]
+
+if user_mode == "single":
+    # Read in TSV file
+    data = pd.read_csv(
+        uc.Data["tables"][0]["reader_file"],
+        header=uc.Data["tables"][0]["reader_header"],
+        index_col=uc.Data["tables"][0]["reader_row_col"],
+        keep_default_na=uc.Default["narm"],
+        sep='\t'
+    )
+    # Fix whitespace issues in index or column names
+    data.columns = [col.strip() if type(col) is str else col
+                    for col in data.columns]
+    data.index = [row.strip() if type(row) is str else row
+                  for row in data.index]
+
+    user_mode_single = params["user_mode_single"]
+
+    if user_mode_single == "precision":
+        # Useful for changing decimal precision on write out
+        out_table = data
+
+    elif user_mode_single == "select":
+        cols_specified = params["select_cols_wanted"]
+        rows_specified = params["select_rows_wanted"]
+
+        # Select all indexes if empty array of values
+        if not cols_specified:
+            cols_specified = range(len(data.columns))
+        if not rows_specified:
+            rows_specified = range(len(data))
+
+        # do not use duplicate indexes
+        # e.g. [2,3,2,5,5,4,2] to [2,3,5,4]
+        nodupes_col = not params["select_cols_unique"]
+        nodupes_row = not params["select_rows_unique"]
+
+        if nodupes_col:
+            cols_specified = [x for i, x in enumerate(cols_specified)
+                              if x not in cols_specified[:i]]
+        if nodupes_row:
+            rows_specified = [x for i, x in enumerate(rows_specified)
+                              if x not in rows_specified[:i]]
+
+        out_table = data.iloc[rows_specified, cols_specified]
+
+    elif user_mode_single == "filtersumval":
+        mode = params["filtersumval_mode"]
+        axis = params["filtersumval_axis"]
+        operation = params["filtersumval_op"]
+        compare_operation = params["filtersumval_compare"]
+        value = params["filtersumval_against"]
+        minmatch = params["filtersumval_minmatch"]
+
+        if mode == "operation":
+            # Perform axis operation
+            summary_op = Utils.getVectorPandaOp(operation)
+            axis_summary = summary_op(data, axis=axis)
+            # Perform vector comparison
+            compare_op = Utils.getTwoValuePandaOp(
+                compare_operation, axis_summary
+            )
+            axis_bool = compare_op(axis_summary, value)
+
+        elif mode == "element":
+            if operation.startswith("str_"):
+                data = data.astype("str")
+                value = str(value)
+                # Convert str_eq to eq
+                operation = operation[4:]
+            else:
+                value = float(value)
+
+            op = Utils.getTwoValuePandaOp(operation, data)
+            bool_mat = op(data, value)
+            axis_bool = np.sum(bool_mat, axis=axis) >= minmatch
+
+        out_table = data.loc[:, axis_bool] if axis == 0 else data.loc[axis_bool, :]
+
+    elif user_mode_single == "matrixapply":
+        # 0 - column, 1 - row
+        axis = params["matrixapply_dimension"]
+        # sd, mean, max, min, sum, median, summary
+        operation = params["matrixapply_op"]
+
+        if operation is None:
+            use_custom = params["matrixapply_custom"]
+            if use_custom:
+                custom_func = params["matrixapply_custom_func"]
+
+                def fun(vec):
+                    """Dummy Function"""
+                    return vec
+
+                ss = Safety(custom_func, ['vec'], 'pd.Series')
+                fun_string = ss.generateFunction()
+                exec(fun_string)  # SUPER DUPER SAFE...
+
+                out_table = data.apply(fun, axis)
+            else:
+                print("No operation given")
+                exit(-1)
+        else:
+            op = getattr(pd.DataFrame, operation)
+            out_table = op(data, axis)
+
+    elif user_mode_single == "element":
+        # lt, gt, ge, etc.
+        operation = params["element_op"]
+        if operation is not None:
+            op = Utils.getTwoValuePandaOp(operation, data)
+            value = params["element_value"]
+            try:
+                # Could be numeric
+                value = float(value)
+            except ValueError:
+                pass
+            # generate filter matrix of True/False values
+            bool_mat = op(data, value)
+        else:
+            # implement no filtering through a filter matrix filled with
+            # True values.
+            bool_mat = np.full(data.shape, True)
+
+        # Get the main processing mode
+        mode = params["element_mode"]
+        if mode == "replace":
+            replacement_val = params["element_replace"]
+            out_table = data.mask(bool_mat, replacement_val)
+        elif mode == "modify":
+            mod_op = Utils.getOneValueMathOp(params["element_modify_op"])
+            out_table = data.mask(
+                bool_mat, data.where(bool_mat).applymap(mod_op)
+            )
+        elif mode == "scale":
+            scale_op = Utils.getTwoValuePandaOp(
+                params["element_scale_op"], data
+            )
+            scale_value = params["element_scale_value"]
+            out_table = data.mask(
+                bool_mat, scale_op(data.where(bool_mat), scale_value)
+            )
+        elif mode == "custom":
+            element_customop = params["element_customop"]
+
+            def fun(elem):
+                """Dummy Function"""
+                return elem
+
+            ss = Safety(element_customop, ['elem'])
+            fun_string = ss.generateFunction()
+            exec(fun_string)  # SUPER DUPER SAFE...
+
+            out_table = data.mask(
+                bool_mat, data.where(bool_mat).applymap(fun)
+            )
+        else:
+            print("No such element mode!", mode)
+            exit(-1)
+
+    elif user_mode_single == "fulltable":
+        general_mode = params["mode"]
+
+        if general_mode == "melt":
+            melt_ids = params["MELT"]["melt_ids"]
+            melt_values = params["MELT"]["melt_values"]
+
+            out_table = pd.melt(data, id_vars=melt_ids, value_vars=melt_values)
+        elif general_mode == "pivot":
+            pivot_index = params["PIVOT"]["pivot_index"]
+            pivot_column = params["PIVOT"]["pivot_column"]
+            pivot_values = params["PIVOT"]["pivot_values"]
+
+            out_table = data.pivot(
+                index=pivot_index, columns=pivot_column, values=pivot_values
+            )
+        elif general_mode == "custom":
+            custom_func = params["fulltable_customop"]
+
+            def fun(tableau):
+                """Dummy Function"""
+                return tableau
+
+            ss = Safety(custom_func, ['table'], 'pd.DataFrame')
+            fun_string = ss.generateFunction()
+            exec(fun_string)  # SUPER DUPER SAFE...
+
+            out_table = fun(data)
+
+    else:
+        print("No such mode!", user_mode_single)
+        exit(-1)
+
+
+elif user_mode == "multiple":
+
+    table_sections = uc.Data["tables"]
+
+    if not table_sections:
+        print("Multiple table sets not given!")
+        exit(-1)
+
+    reader_skip = uc.Default["reader_skip"]
+
+    # Data
+    table = []
+    # 1-based handlers for users "table1", "table2", etc.
+    table_names = []
+    # Actual 0-based references "table[0]", "table[1]", etc.
+    table_names_real = []
+
+    # Read and populate tables
+    for x, t_sect in enumerate(table_sections):
+        tmp = pd.read_csv(
+            t_sect["file"],
+            header=t_sect["header"],
+            index_col=t_sect["row_names"],
+            keep_default_na=uc.Default["narm"],
+            sep="\t"
+        )
+        table.append(tmp)
+        table_names.append("table" + str(x + 1))
+        table_names_real.append("table[" + str(x) + "]")
+
+    custom_op = params["fulltable_customop"]
+    ss = Safety(custom_op, table_names, 'pd.DataFrame')
+    fun_string = ss.generateFunction()
+    # Change the argument to table
+    fun_string = fun_string.replace("fun(table1):", "fun():")
+    # table1 to table[1]
+    for name, name_real in zip(table_names, table_names_real):
+        fun_string = fun_string.replace(name, name_real)
+
+    fun_string = fun_string.replace("fun():", "fun(table):")
+    exec(fun_string)  # SUPER DUPER SAFE...
+    out_table = fun(table)
+
+else:
+    print("No such mode!", user_mode)
+    exit(-1)
+
+if not isinstance(out_table, (pd.DataFrame, pd.Series)):
+    print('The specified operation did not result in a table to return.')
+    raise RuntimeError(
+        'The operation did not generate a pd.DataFrame or pd.Series to return.'
+    )
+out_parameters = {
+    "sep": "\t",
+    "float_format": "%%.%df" % pd.options.display.precision,
+    "header": uc.Default["out_headers_col"],
+    "index": uc.Default["out_headers_row"]
+}
+if user_mode_single not in ('matrixapply', None):
+    out_parameters["quoting"] = csv.QUOTE_NONE
+
+out_table.to_csv(uc.Default["outtable"], **out_parameters)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/table_compute.xml	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,1441 @@
+<tool id="table_compute" name="Table Compute" version="@VERSION@">
+    <description>computes operations on table data</description>
+    <macros>
+        <token name="@VERSION@">0.8</token>
+        <token name="@COPEN@"><![CDATA[<code>]]></token>
+        <token name="@CCLOSE@"><![CDATA[</code>]]></token>
+        <import>allowed_functions.xml</import>
+        <!-- text field validators -->
+        <macro name="validator_text" >
+            <validator type="regex" message="No special characters allowed">^(?:\w+)?$</validator>
+            <sanitizer sanitize="false" />
+        </macro>
+        <macro name="validator_text_required" >
+            <validator type="regex" message="No special characters allowed">^(?:\w+)?$</validator>
+            <validator type="empty_field" />
+        </macro>
+        <macro name="validator_index_identifiers" >
+            <validator type="regex" message="Specify a comma-separated list of index names without special characters">^(?:\w+(?:, *\w+)*)?$</validator>
+            <sanitizer sanitize="false" />
+        </macro>
+        <macro name="validator_index_ranges">
+            <validator type="regex" message="Specify a comma-separated list index numbers or ranges">^(?:\d+(?::\d)*(?:, *\d+(?::\d)*)*)?$</validator>
+            <sanitizer sanitize="false" />
+        </macro>
+        <macro name="validator_functiondef">
+            <validator type="regex" message="An expression is required and is allowed to contain only letters, numbers and the characters '_ !-+=/*%.&lt;&gt;()'">^[\w !\-+=/*%,.&lt;&gt;()]+$</validator>
+            <sanitizer sanitize="false" />
+        </macro>
+        <!-- macro for main input tests -->
+        <macro name="test_inputs_single" >
+            <conditional name="singtabop" >
+                <param name="use_type" value="single" />
+                <param name="input" value="small.tsv" />
+                <conditional name="user" >
+                    <yield />
+                </conditional>
+            </conditional>
+        </macro>
+        <!-- macro for umi to transcript tests -->
+        <macro name="umi2trans" >
+            <yield />
+            <conditional name="user" >
+                <param name="mode" value="element" />
+                <param name="element_op" value="gt" />
+                <param name="element_value" value="0" />
+                <conditional name="element" >
+                    <param name="mode" value="custom" />
+                    <param name="custom_expr" value="-math.log(1 - elem/4096) * 4096 if elem != 4096 else elem - 0.5" />
+                </conditional>
+            </conditional>
+        </macro>
+        <!-- macro for file inputs -->
+        <macro name="file_opts">
+            <param name="input" type="data" format="tsv,tabular" label="Table" />
+            <param name="col_row_names" type="select" display="checkboxes" multiple="true" optional="true"
+            label="This input data has">
+                <option value="has_col_names" selected="true">Column names on the first row</option>
+                <option value="has_row_names" selected="true">Row names on the first column"</option>
+            </param>
+        </macro>
+        <!-- element value macro -->
+        <macro name="elem_val_macro" >
+            <param name="element_value" type="text" optional="true" label="Filter value" help="This value is converted to numeric if possible, otherwise it is treated as a string" />
+        </macro>
+    </macros>
+    <requirements>
+        <requirement type="package" version="0.25">pandas</requirement>
+        <requirement type="package" version="1.17">numpy</requirement>
+    </requirements>
+
+    <version_command><![CDATA[
+        touch '$__tool_directory__/scripts/userconfig.py' && python '$__tool_directory__/scripts/table_compute.py' --version
+    ]]></version_command>
+
+    <command detect_errors="exit_code"><![CDATA[
+        ## Can only import generated userconfig.py if calling
+        ## script is in the same directory. Soft-linking does
+        ## not satisfy importing, so we copy everything.
+        cp '$userconf' ./userconfig.py &&
+        cp '$__tool_directory__/scripts/safety.py' ./safety.py &&
+        cp '$__tool_directory__/scripts/table_compute.py' ./table_compute.py &&
+        python ./table_compute.py
+    ]]></command>
+    <configfiles>
+        <configfile name="userconf"><![CDATA[
+
+## Range Maker
+##  "2:5,11,1:2" specifies "2,3,4,5,11,1,2" which in python is "1,2,3,4,10,0,1"
+#def rangemake(tab):
+#echo    [(n-1) for r in map(lambda y: range(int(y[0]),int(y[-1])+1), map(lambda x: x.split(':'), tab.split(','))) for n in r]
+#end def
+
+## Strip leading and trailing whitespace off custom functions
+
+Default = {
+    "reader_skip": 0,
+    "precision": $precision,
+  #if 'ignore_nas' in str($out_opts):
+    "narm": True,
+  #else:
+    "narm": False,
+  #end if
+  #if 'output_headers_row' in str($out_opts):
+    "out_headers_row": True,
+  #else:
+    "out_headers_row": False,
+  #end if
+  #if 'output_headers_col' in str($out_opts):
+    "out_headers_col": True,
+  #else:
+    "out_headers_col": False,
+  #end if
+  "user_mode": '$singtabop.use_type',
+  "outtable": '$table'
+}
+
+#if str($singtabop.use_type) == "single":
+Data = {
+    "tables": [
+        {
+          "reader_file": '$singtabop.input',
+        #if 'has_col_names' in str($singtabop.col_row_names):
+          "reader_header": 0,
+        #else:
+          "reader_header": None,
+        #end if
+        #if 'has_row_names' in str($singtabop.col_row_names):
+          "reader_row_col": 0,
+        #else:
+          "reader_row_col": False,
+        #end if
+        }
+    ],
+    "params": {
+      "user_mode_single": '$singtabop.user.mode.value',
+    #if $singtabop.user.mode.value == 'precision':
+        ## Literally do nothing, the user just sets the precision slider
+        ## at the top default level
+    }
+    #elif $singtabop.user.mode.value == 'select':
+        "select_cols_unique": #echo 'select_cols_keepdupe' in str($singtabop.user.select_keepdupe)#,
+        "select_rows_unique": #echo 'select_rows_keepdupe' in str($singtabop.user.select_keepdupe)#,
+      #if $singtabop.user.select_cols_wanted:
+        "select_cols_wanted": $rangemake(str($singtabop.user.select_cols_wanted)),
+      #else
+        "select_cols_wanted": None,
+      #end if
+      #if $singtabop.user.select_rows_wanted:
+        "select_rows_wanted": $rangemake(str($singtabop.user.select_rows_wanted)),
+      #else
+        "select_rows_wanted": None,
+      #end if
+    }
+    #elif $singtabop.user.mode.value == 'filtersumval':
+        "filtersumval_mode": '$singtabop.user.filtersumval_mode.use.value',
+        "filtersumval_axis": $singtabop.user.axis.value,
+      #if $singtabop.user.filtersumval_mode.use.value == 'operation':
+        "filtersumval_compare": '$singtabop.user.filtersumval_mode.compare_op.value',
+        "filtersumval_op": '$singtabop.user.filtersumval_mode.operation.value',
+        "filtersumval_against": $singtabop.user.filtersumval_mode.against,
+        "filtersumval_minmatch": None,
+      #elif $singtabop.user.filtersumval_mode.use.value == 'element':
+        "filtersumval_compare": None,
+        "filtersumval_op": '$singtabop.user.filtersumval_mode.operation.value',
+        ## against could be string or float, so we parse this in the code
+        "filtersumval_against": '$singtabop.user.filtersumval_mode.against',
+        "filtersumval_minmatch": $singtabop.user.filtersumval_mode.minmatch,
+      #end if
+    }
+    #elif $singtabop.user.mode.value == 'matrixapply':
+        "matrixapply_dimension": $singtabop.user.dimension.value,
+      #if str($singtabop.user.matrixapply_func.vector_op) == 'custom':
+        #set $custom_func = str($singtabop.user.matrixapply_func.custom_func).strip()
+        "matrixapply_custom": True,
+        "matrixapply_custom_func": '$custom_func',
+        "matrixapply_op": None,
+      #else
+        "matrixapply_custom": False,
+        "matrixapply_custom_func": None,
+        "matrixapply_op": '$singtabop.user.matrixapply_func.vector_op',
+      #end if
+    }
+    #elif $singtabop.user.mode.value == 'element':
+      #if str($singtabop.user.elem_val.element_op) != "None":
+        "element_op": '$singtabop.user.elem_val.element_op.value',
+        ## Value is string or float, parsed in code later
+        "element_value" : '$singtabop.user.elem_val.element_value',
+      #else:
+        "element_op": None,
+      #end if
+        "element_mode": '$singtabop.user.element.mode.value',
+      #if str($singtabop.user.element.mode) == "replace":
+        "element_replace": '$singtabop.user.element.replace_value.value',
+      #elif str($singtabop.user.element.mode) == "modify":
+        "element_modify_op": '$singtabop.user.element.modify_op.value',
+      #elif str($singtabop.user.element.mode) == "scale":
+        "element_scale_op": '$singtabop.user.element.scale_op.value',
+        "element_scale_value": $singtabop.user.element.scale_value,
+      #elif str($singtabop.user.element.mode) == "custom":
+        #set $custom_func = str($singtabop.user.element.custom_expr).strip()
+        "element_customop": '$custom_func',
+      #end if
+    }
+    #elif $singtabop.user.mode.value == 'fulltable':
+        "mode": '$singtabop.user.general.use',
+      #if str($singtabop.user.general.use) == 'melt':
+        #if str($singtabop.user.general.id_vars).strip():
+          #set $melt_ids = [i.strip() for i in str($singtabop.user.general.id_vars).split(',')]
+        #else
+          #set $melt_ids = 'None'
+        #end if
+        #if str($singtabop.user.general.value_vars).strip():
+          #set $melt_values = [i.strip() for i in str($singtabop.user.general.value_vars).split(',')]
+        #else
+          #set $melt_values = 'None'
+        #end if
+        "MELT": {
+            "melt_ids": $melt_ids,
+            "melt_values": $melt_values,
+        },
+      #elif str($singtabop.user.general.use) == 'pivot':
+        #set $pivot_index = str($singtabop.user.general.index).strip()
+        #if $pivot_index:
+          #set $pivot_index = "'" + $pivot_index + "'"
+        #else:
+          #set $pivot_index = 'None'
+        #end if
+        #set $pivot_column = "'" + str($singtabop.user.general.column).strip() + "'"
+        #if str($singtabop.user.general.values).strip():
+          #set $pivot_values = [i.strip() for i in str($singtabop.user.general.values).split(',')]
+        #else
+          #set $pivot_values = 'None'
+        #end if
+        "PIVOT": {
+            "pivot_index": $pivot_index,
+            "pivot_column": $pivot_column,
+            "pivot_values": $pivot_values,
+        },
+      #elif str($singtabop.user.general.use) == 'custom':
+        #set $custom_func = str($singtabop.user.general.fulltable_custom_expr.value).strip()
+        "fulltable_customop": '$custom_func',
+
+      #end if
+    },
+    #end if
+}
+
+#elif str($singtabop.use_type) == "multiple":
+#set $custom_func = str($singtabop.fulltable_custom_expr).strip()
+Data = {
+    "tables": [
+    #for $i, $s in enumerate($singtabop.tables)
+        {
+          "file": '${s.input}',
+        #if 'has_col_names' in str($s.col_row_names):
+          "header": 0,
+        #else:
+          "header": None,
+        #end if
+        #if 'has_row_names' in str($s.col_row_names):
+          "row_names": 0,
+        #else:
+          "row_names": False,
+        #end if
+        },
+    #end for
+    ],
+    'params': {
+        "fulltable_customop" : '$custom_func',
+    }
+}
+#end if
+
+]]>
+        </configfile>
+    </configfiles>
+    <inputs>
+        <conditional name="singtabop" >
+            <param name="use_type" type="select" label="Input Single or Multiple Tables" help="Operations on single tables are better tailored towards more general use-cases. For multiple tables usage, all tables should ideally be of the same dimensions for simple operations, although complex operations are also supported for unequally sized tables (see Help section)." >
+                <option value="single">Single Table</option>
+                <option value="multiple">Multiple Tables</option>
+            </param>
+            <when value="single">
+                <expand macro="file_opts" />
+                <conditional name="user" >
+                    <param name="mode" type="select" label="Type of table operation" >
+                        <option value="precision">No operation (just reformat on output)</option>
+                        <option value="select">Drop, keep or duplicate rows and columns</option>
+                        <option value="filtersumval">Filter rows or columns by their properties</option>
+                        <option value="matrixapply">Compute expression across rows or columns</option>
+                        <option value="element">Manipulate selected table elements</option>
+                        <option value="fulltable">Perform a full table operation</option>
+                    </param>
+                    <when value="precision" />
+                    <when value="select">
+                        <param name="select_cols_wanted" type="text" optional="true" label="List of columns to select" help="Comma separated. (e.g. @COPEN@3:5,99,2:4@CCLOSE@ will select columns @COPEN@3,4,5,99,2,3,4@CCLOSE@). Columns can be duplicated by specifying them multiple times. Leave blank to retain all columns. See Example #1 for an example of using this mode." >
+                            <expand macro="validator_index_ranges" />
+                        </param>
+                        <param name="select_rows_wanted" type="text" optional="true" label="List of rows to select" help="The same rules apply as above" >
+                            <expand macro="validator_index_ranges" />
+                        </param>
+                        <param name="select_keepdupe" type="select" display="checkboxes" multiple="true" label="Duplicate Indices" help="Keep duplicates when specifying ranges (e.g. if unset, @COPEN@1:3,2:4@CCLOSE@ will yield @COPEN@1,2,3,4@CCLOSE@ instead of @COPEN@1,2,3,2,3,4@CCLOSE@)" >
+                            <option value="select_cols_keepdupe" selected="true" >Keep duplicate columns</option>
+                            <option value="select_rows_keepdupe" selected="true" >Keep duplicate rows</option>
+                        </param>
+                    </when>
+                    <when value="filtersumval" >
+                        <param name="axis" type="select" display="radio"
+                        label="Filter" >
+                            <option value="1">Rows</option>
+                            <option value="0">Columns</option>
+                        </param>
+                        <conditional name="filtersumval_mode" >
+                            <param name="use" type="select" label="Filter criterion" help="See Example #2 for an example of using this mode." >
+                                <option value="operation" >Result of function applied to columns/rows</option>
+                                <option value="element" >Number of column/row elements passing filter</option>
+                            </param>
+                            <when value="operation">
+                                <param name="operation" type="select" label="Keep column/row if its observed" >
+                                    <expand macro="select_vectorops" />
+                                </param>
+                                <param name="compare_op" type="select" label="is" >
+                                    <expand macro="select_twovaluebooleanops" />
+                                </param>
+                                <param name="against" type="float" label="this value" value="0" />
+                            </when>
+                            <when value="element">
+                                <param name="minmatch" type="integer" min="1" value="0" label="Keep column/row if at least" />
+                                <param name="operation" type="select" label="of its element are" >
+                                    <expand macro="select_twovaluebooleanops" >
+                                        <option value="str_eq" >~ (Matching)</option>
+                                        <option value="str_ne" >!~ (not Matching)</option>
+                                    </expand>
+                                </param>
+                                <param name="against" type="text" label="this value">
+                                    <expand macro="validator_functiondef" />
+                                </param>
+                            </when>
+                        </conditional>
+                    </when>
+                    <when value="matrixapply" >
+                        <conditional name="matrixapply_func">
+                            <param name="vector_op" type="select" label="Calculate">
+                                <option value="custom">Custom Function</option>
+                                <expand macro="select_vectorops" >
+                                    <option value="rank">Ranks</option>
+                                    <option value="cumsum" >Cumulative Sum</option>
+                                    <option value="cumprod" >Cumulative Product</option>
+                                    <option value="cummin" >Cumulative Minimum</option>
+                                    <option value="cummax" >Cumulative Maximum</option>
+                                </expand>
+                            </param>
+                            <when value="custom">
+                                <param name="custom_func" type="text"
+                                label="Custom function on 'vec'"
+                                help="The parameter name is @COPEN@vec@CCLOSE@, referring to a vector of a specific row or column being operated on. Numpy and Pandas DataFrame operators are supported. e.g. @COPEN@np.sum(vec) + np.median(vec)@CCLOSE@, and @COPEN@vec.sum() + vec.median()@CCLOSE@ are equivalent operations." >
+                                    <expand macro="validator_functiondef" />
+                                </param>
+                            </when>
+                            <when value="min" />
+                            <when value="max" />
+                            <when value="sum" />
+                            <when value="count" />
+                            <when value="nunique" />
+                            <when value="mean" />
+                            <when value="median" />
+                            <when value="std" />
+                            <when value="sem" />
+                            <when value="var" />
+                            <when value="mad" />
+                            <when value="product" />
+                            <when value="rank" />
+                            <when value="cumsum" />
+                            <when value="cumprod" />
+                            <when value="cummin" />
+                            <when value="cummax" />
+                        </conditional>
+                        <param name="dimension" type="select" label="For each">
+                            <option value="0">Column</option>
+                            <option value="1">Row</option>
+                        </param>
+                    </when>
+                    <when value="fulltable">
+                        <conditional name="general" >
+                            <param name="use" type="select" label="Operation" help="See Examples 5, 7, and 8 for usage" >
+                                <option value="melt" >Melt</option>
+                                <option value="pivot" >Pivot</option>
+                                <option value="custom" >Custom</option>
+                            </param>
+                            <when value="melt" >
+                                <param name="id_vars" type="text" value="" label="Variable IDs"
+                                       help="Comma-delimited list of column names to use as identifiers" >
+                                    <expand macro="validator_index_identifiers" />
+                                </param>
+                                <param name="value_vars" type="text" value="" label="Unpivoted IDs"
+                                       help="Comma-delimited list of column names to un-pivot. Leave blank to use all." >
+                                    <expand macro="validator_index_identifiers" />
+                                </param>
+                            </when>
+                            <when value="pivot" >
+                                <param name="index" type="text" value=""
+                                label="Index"
+                                help="Name of the column to use as new index" >
+                                    <expand macro="validator_text" />
+                                </param>
+                                <param name="column" type="text" value=""
+                                label="Column"
+                                help="Name of the column to use to generate the columns of the new table from" >
+                                    <expand macro="validator_text_required" />
+                                </param>
+                                <param name="values" type="text" value=""
+                                label="Values"
+                                help="Names of the columns to use for populating the cells of the new table. Leave blank to use all." >
+                                    <expand macro="validator_index_identifiers" />
+                                </param>
+                            </when>
+                            <when value="custom" >
+                                <param name="fulltable_custom_expr" type="text"
+                                label="Custom expression on 'table', along 'axis' (0 or 1)"
+                                help="The parameter name is @COPEN@table@CCLOSE@ and @COPEN@axis@CCLOSE@, referring to the table being acted on and the column (@COPEN@0@CCLOSE@) or row (@COPEN@1@CCLOSE@) to perform the operation on. Numpy, math, Pandas DataFrame operators, and inline @COPEN@if else@CCLOSE@ are supported (e.g. @COPEN@np.log(table) - table.mean(0) / table.std(1)@CCLOSE@). See Example #5 in the Help section. ">
+                                    <expand macro="validator_functiondef" />
+                                </param>
+                            </when>
+                        </conditional>
+                    </when>
+                    <when value="element">
+                        <conditional name="element" >
+                            <param name="mode" type="select"
+                            label="Operation to perform" >
+                                <option value="replace">Replace values</option>
+                                <option value="modify">Transform</option>
+                                <option value="scale">Arithmetic operation</option>
+                                <option value="custom">Custom</option>
+                            </param>
+                            <when value="replace" >
+                                <param name="replace_value" type="text" label="Replacement value" help="This value is converted to numeric if possible, otherwise it is treated as a string" />
+                            </when>
+                            <when value="modify" >
+                                <param name="modify_op" type="select" label="Transformation function" help="Example: to transform values to their square root, select @COPEN@Square Root@CCLOSE@ here.">
+                                    <expand macro="select_onevalueoperator" />
+                                </param>
+                            </when>
+                            <when value="scale">
+                                <param name="scale_op" type="select" label="Operation" help="The selected operation will be applied to the table elements as the first operand. The value of the second operand can be provided in the next box. Example: to raise all values to the power of 5, select @COPEN@Power@CCLOSE@ here and type @COPEN@5@CCLOSE@ in the box below." >
+                                    <expand macro="select_twovaluenumericoperator" />
+                                </param>
+                                <param name="scale_value" type="float" value="0" label="Second operand value" />
+                            </when>
+                            <when value="custom">
+                                <param name="custom_expr" type="text"
+                                label="Custom expression on 'elem'"
+                                help="The parameter name is @COPEN@elem@CCLOSE@, referring to the element being acted on. Most operators and @COPEN@if@CCLOSE@ @COPEN@else@CCLOSE@ statements are supported. See Examples #3 and #4 in the Help section.">
+                                    <expand macro="validator_functiondef" />
+                                </param>
+                            </when>
+                        </conditional>
+                        <conditional name="elem_val" >
+                            <param name="element_op" type="select" label="Operate on elements"
+                                help="Only selected elements will be manipulated. Other elements will retain their original value." >
+                                <expand macro="select_twovaluebooleanops" >
+                                    <option value="None" selected="true">All</option>
+                                </expand>
+                            </param>
+                            <when value="None" />
+                            <when value="lt">
+                                <expand macro="elem_val_macro" />
+                            </when>
+                            <when value="le">
+                                <expand macro="elem_val_macro" />
+                            </when>
+                            <when value="gt">
+                                <expand macro="elem_val_macro" />
+                            </when>
+                            <when value="ge">
+                                <expand macro="elem_val_macro" />
+                            </when>
+                            <when value="eq">
+                                <expand macro="elem_val_macro" />
+                            </when>
+                            <when value="ne">
+                                <expand macro="elem_val_macro" />
+                            </when>
+                        </conditional>
+                    </when>
+                </conditional>
+            </when>
+            <when value="multiple">
+                <repeat name="tables" title="Tables" min="1" default="1">
+                    <expand macro="file_opts" />
+                </repeat>
+                <param name="fulltable_custom_expr" type="text"
+                label="Custom expression on 'tableN'"
+                help="The parameter name is @COPEN@tableN@CCLOSE@, where @COPEN@N@CCLOSE@ refers to a specific table. e.g. @COPEN@table1 + table3 - table2@CCLOSE@, will add the first and third input tables and then subtract the second. Most operators and @COPEN@if@CCLOSE@ @COPEN@else@CCLOSE@ statements are supported. See Example #6 in the Help section for further examples.">
+                    <expand macro="validator_functiondef" />
+                </param>
+            </when>
+        </conditional>
+        <param name="out_opts" type="select" display="checkboxes" multiple="true" optional="true"
+               label="Output formatting options">
+            <option value="ignore_nas" selected="true">Ignore NA values</option>
+            <option value="output_headers_col" selected="true">Output column headers</option>
+            <option value="output_headers_row" selected="true">Output row headers</option>
+        </param>
+        <param name="precision" type="integer" min="0" max="20" value="6" label="Output decimal precision" />
+    </inputs>
+    <outputs>
+        <data name="table" format="tabular" label="${tool.name} on ${on_string}" />
+    </outputs>
+    <tests>
+        <test expect_num_outputs="1">
+            <!-- Test 1: Select -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="select" />
+                <param name="select_cols_wanted" value="2:4,2,2" />
+                <param name="select_rows_wanted" value="2:5,3,3" />
+                <param name="select_keepdupe" value="select_cols_keepdupe" />
+            </expand>
+            <param name="precision" value="2" />
+            <output name="table" value="small.select.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 2: Select, cols only -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="select" />
+                <param name="select_cols_wanted" value="2:4,2,2" />
+                <param name="select_keepdupe" value="select_cols_keepdupe,select_rows_keepdupe" />
+            </expand>
+            <param name="precision" value="2" />
+            <output name="table" value="small.select.colsonly.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 3: Select, rows only -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="select" />
+                <param name="select_rows_wanted" value="2:5,3,3" />
+                <param name="select_keepdupe" value="select_cols_keepdupe" />
+            </expand>
+            <param name="precision" value="2" />
+            <output name="table" value="small.select.rowsonly.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 4: Filtersumval, row -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="filtersumval" />
+                <param name="axis" value="1" />
+                <conditional name="filtersumval_mode" >
+                    <param name="use" value="operation" />
+                    <param name="operation" value="sum" />
+                    <param name="compare_op" value="gt" />
+                    <param name="against" value="50" />
+                </conditional>
+            </expand>
+            <param name="precision" value="2" />
+            <output name="table" value="small.fs.rowsum.gt.50.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 5: Filtersumval, col neq 0 -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="filtersumval" />
+                <param name="axis" value="0" />
+                 <conditional name="filtersumval_mode" >
+                    <param name="use" value="operation" />
+                    <param name="operation" value="sum" />
+                    <param name="compare_op" value="ne" />
+                    <param name="against" value="0" />
+                </conditional>
+            </expand>
+            <param name="precision" value="2" />
+            <output name="table" value="small.fs.colsum.neq0.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 6: Filtersumval, col val gt 10 -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="filtersumval" />
+                <param name="axis" value="0" />
+                <conditional name="filtersumval_mode" >
+                    <param name="use" value="operation" />
+                    <param name="operation" value="sum" />
+                    <param name="compare_op" value="gt" />
+                    <param name="against" value="10" />
+                </conditional>
+            </expand>
+            <param name="precision" value="2" />
+            <output name="table" value="small.fs.colsum.gt10.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 7: Filtersumval, median val col >= 2 -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="filtersumval" />
+                <param name="axis" value="0" />
+                <conditional name="filtersumval_mode" >
+                    <param name="use" value="operation" />
+                    <param name="operation" value="median" />
+                    <param name="compare_op" value="ge" />
+                    <param name="against" value="2" />
+                </conditional>
+            </expand>
+            <param name="precision" value="5" />
+            <output name="table" value="small.fs.medvalcol.ge2.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 8: Filtersumval, keep rows with at least
+                 two values > 2 -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="filtersumval" />
+                <param name="axis" value="1" />
+                <conditional name="filtersumval_mode" >
+                    <param name="use" value="element" />
+                    <param name="operation" value="gt" />
+                    <param name="against" value="2" />
+                    <param name="minmatch" value="2" />
+                </conditional>
+            </expand>
+            <param name="precision" value="5" />
+            <output name="table" value="small.fs.elemgt2.mm2.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 9: Filtersumval, keep cols with at least
+                 4 string values matching "0" -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="filtersumval" />
+                <param name="axis" value="0" />
+                <conditional name="filtersumval_mode" >
+                    <param name="use" value="element" />
+                    <param name="operation" value="str_ne" />
+                    <param name="against" value="0" />
+                    <param name="minmatch" value="4" />
+                </conditional>
+            </expand>
+            <param name="precision" value="3" />
+            <output name="table" value="small.fs.elemnmatch0.mm4.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 10: Matrix Apply, row max  -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="matrixapply" />
+                <param name="dimension" value="1" />
+                <conditional name="matrixapply_func" >
+                    <param name="vector_op" value="max" />
+                </conditional>
+            </expand>
+            <param name="precision" value="0" />
+            <param name="out_opts" value="ignore_nas,output_headers_row" />
+            <output name="table" value="small.matapp.rowmax.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 11: Element, all, scale, remainder 5  -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="element" />
+                <conditional name="elem_val">
+                    <param name="element_op" value="None" />
+                </conditional>
+                <conditional name="element" >
+                    <param name="mode" value="scale" />
+                    <param name="scale_op" value="mod" />
+                    <param name="scale_value" value="5" />
+                </conditional>
+            </expand>
+            <param name="precision" value="2" />
+            <output name="table" value="small.element.scalerem5.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 12: Matrix Apply, column custom  -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="matrixapply" />
+                <param name="dimension" value="0" />
+                <conditional name="matrixapply_func" >
+                    <param name="vector_op" value="custom" />
+                    <param name="custom_func" value="vec.sum()+vec.median()" />
+                </conditional>
+            </expand>
+            <param name="precision" value="2" />
+            <param name="out_opts" value="ignore_nas,output_headers_row" />
+            <output name="table" value="small.matapp.colcust.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 13: Element, non-zero, custom -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="element" />
+                <conditional name="elem_val">
+                    <param name="element_op" value="gt" />
+                    <param name="element_value" value="0" />
+                </conditional>
+                <conditional name="element" >
+                    <param name="mode" value="custom" />
+                    <!-- valid complex expression for non-zero vals -->
+                    <param name="custom_expr" value="(math.log10(elem)+elem)/elem if (elem &lt; math.inf) else 1.0" />
+                </conditional>
+            </expand>
+            <output name="table" value="small.element.custom.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 14: umi2transcript test1 -->
+            <expand macro="umi2trans" >
+                <param name="input" value="mat1.umi.tsv" />
+                <output name="table" value="mat1.trans.tsv" />
+            </expand>
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 15: umi2transcript test2 -->
+            <expand macro="umi2trans" >
+                <param name="input" value="mat2.umi.tsv" />
+                <output name="table" value="mat2.trans.tsv" />
+            </expand>
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 16: B-test - mean and sd in custom func -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="fulltable" />
+                <conditional name="general" >
+                    <param name="use" value="custom" />
+                    <param name="fulltable_custom_expr"
+                           value="table - table.mean(0) / table.std(0)" />
+                </conditional>
+            </expand>
+            <output name="table" value="small.fulltable.tsv" />
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 17: Multiple table test -->
+            <conditional name="singtabop" >
+                <param name="use_type" value="multiple" />
+                <repeat name="tables">
+                    <param name="input" value="small.tsv" />
+                </repeat>
+                <repeat name="tables">
+                    <param name="input" value="small.tsv" />
+                </repeat>
+                <repeat name="tables">
+                    <param name="input" value="small.tsv" />
+                </repeat>
+                <param name="fulltable_custom_expr" value="(3 * table1) + np.log(table3 + 20) - table2" />            </conditional>
+            <output name="table" value="small.multiple.tsv" />
+        </test>
+        <!-- User tests that failed previously -->
+        <test expect_num_outputs="1">
+            <!-- Test 18 -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="fulltable" />
+                <conditional name="general" >
+                    <param name="use" value="custom" />
+                    <param name="fulltable_custom_expr" value="table * 2" />
+                </conditional>
+            </expand>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="10" />
+                    <has_line_matching expression="^gene1\s20\.000000\s0\s12\s-20\.200000\s20\s2\.200000\s0\.000000\s0\s0\.000000$" />
+                    <has_line_matching expression="gene5\s2\.000000\s0\s0\s-20\.000000\s880\s12\.000000\s0\.000000\s0\s3\.800000" />
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 19 -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="fulltable" />
+                <conditional name="general" >
+                    <param name="use" value="custom" />
+                    <param name="fulltable_custom_expr" value="table == 5" />
+                </conditional>
+            </expand>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="10" />
+                    <has_line_matching expression="^gene1(\sFalse)+$" />
+                    <has_line_matching expression="gene5(\sFalse)+$" />
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1" expect_failure="true">
+            <!-- Test 20 -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="fulltable" />
+                <conditional name="general" >
+                    <param name="use" value="custom" />
+                    <param name="fulltable_custom_expr" value="for n in table: n = n + 1" />
+                </conditional>
+            </expand>
+        </test>
+        <test expect_num_outputs="1" expect_failure="true">
+            <!-- Test 21 -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="fulltable" />
+                <conditional name="general" >
+                    <param name="use" value="custom" />
+                    <param name="fulltable_custom_expr" value="table + table[0,0]" />
+                </conditional>
+            </expand>
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 22: Melt -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="fulltable" />
+                <conditional name="general" >
+                    <param name="use" value="melt" />
+                    <param name="id_vars" value="cell1,cell3" />
+                    <param name="value_vars" value="cell5,cell6" />
+                </conditional>
+            </expand>
+            <param name="out_opts" value="ignore_nas,output_headers_col" />
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="4" />
+                    <has_line_matching expression="^cell1\scell3\svariable\svalue$" />
+                    <has_line_matching expression="^1\.0+\s0+\scell6\s6\.0+$" />
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <!-- Test 23: Pivot -->
+            <expand macro="test_inputs_single" >
+                <param name="mode" value="fulltable" />
+                <conditional name="general" >
+                    <param name="use" value="pivot" />
+                    <param name="index" value="cell1" />
+                    <param name="column" value="cell2" />
+                    <param name="values" value="cell3,cell7,cell9" />
+                </conditional>
+            </expand>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="4" />
+                    <has_line_matching expression="^\scell3\scell7\scell9$" />
+                    <has_line_matching expression="^1\.0+\s0\.0+\s0\.0+\s1\.90+$" />
+                    <has_line_matching expression="^10\.0+\s6\.0+\s0\.0+\s0\.0+$" />
+                </assert_contents>
+            </output>
+        </test>
+        <!-- Add Example Text Tests -->
+        <test expect_num_outputs="1" >
+            <!-- Test 24: Ex 1 -->
+            <conditional name="singtabop" >
+                <param name="use_type" value="single" />
+                <param name="input" value="examples.1.tsv" />
+                <param name="col_row_names" value="has_col_names,has_row_names" />
+                <conditional name="user" >
+                    <param name="mode" value="select" />
+                    <param name="select_cols_wanted" value="1,1,3" />
+                    <param name="select_rows_wanted" value="1:3,2" />
+                    <param name="select_keepdupe" value="select_cols_keepdupe,select_rows_keepdupe" />
+                </conditional>
+            </conditional>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="4" />
+                    <has_line_matching expression="^\s+c1\s+c1\s+c3$" />
+                    <has_line_matching expression="^g2\s+3\s+3\s+9$" />
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1" >
+            <!-- Test 25: Ex 2 -->
+            <conditional name="singtabop" >
+                <param name="use_type" value="single" />
+                <param name="input" value="examples.2.tsv" />
+                <param name="col_row_names" value="has_col_names,has_row_names" />
+                <conditional name="user" >
+                    <param name="mode" value="filtersumval" />
+                    <param name="axis" value="1" />
+                    <conditional name="filtersumval_mode" >
+                        <param name="use" value="operation" />
+                        <param name="operation" value="sum" />
+                        <param name="compare_op" value="lt" />
+                        <param name="against" value="50" />
+                    </conditional>
+                </conditional>
+            </conditional>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="4" />
+                    <has_line_matching expression="^\s+c1\s+c2\s+c3$" />
+                    <has_line_matching expression="^g3\s+4\s+8\s+12$" />
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1" >
+            <!-- Test 26: Ex 3_P1 -->
+            <conditional name="singtabop" >
+                <param name="use_type" value="single" />
+                <param name="input" value="examples.3p1.tsv" />
+                <param name="col_row_names" value="has_col_names,has_row_names" />
+                <conditional name="user" >
+                    <param name="mode" value="element" />
+                    <conditional name="element" >
+                        <param name="mode" value="custom" />
+                        <param name="custom_expr" value="elem &#60; 10" />
+                    </conditional>
+                    <conditional name="elem_val" >
+                        <param name="element_op" value="None" />
+                    </conditional>
+                </conditional>
+            </conditional>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="4" />
+                    <has_line_matching expression="^g1\s+False\s+False\s+False$" />
+                    <has_line_matching expression="^g4\s+False\s+True\s+True$" />
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1" >
+            <!-- Test 27: Ex 3_P2 -->
+            <conditional name="singtabop" >
+                <param name="use_type" value="single" />
+                <param name="input" value="examples.3p2.tsv" />
+                <param name="col_row_names" value="has_col_names,has_row_names" />
+                <conditional name="user" >
+                    <param name="mode" value="matrixapply" />
+                    <param name="dimension" value="1" />
+                    <conditional name="matrixapply_func" >
+                        <param name="vector_op" value="sum" />
+                    </conditional>
+                </conditional>
+            </conditional>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="2" />
+                    <has_line_matching expression="^g1\s+0$" />
+                    <has_line_matching expression="^g4\s+2$" />
+                </assert_contents>
+            </output>
+	        </test>
+        <test expect_num_outputs="1" >
+            <!-- Test 28: Ex 4 -->
+            <conditional name="singtabop" >
+                <param name="use_type" value="single" />
+                <param name="input" value="examples.4.tsv" />
+                <param name="col_row_names" value="has_col_names,has_row_names" />
+                <conditional name="user" >
+                    <param name="mode" value="element" />
+                    <conditional name="element" >
+                        <param name="mode" value="custom" />
+                        <param name="custom_expr" value="(math.log(elem) / elem) if (elem > 5) else 1" />
+                    </conditional>
+                    <conditional name="elem_val" >
+                        <param name="element_op" value="All" />
+                    </conditional>
+                </conditional>
+            </conditional>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="4" />
+                    <has_line_matching expression="^g1\s+1\.00\d+\s+0\.149\d+\s+0\.113\d+$" />
+                    <has_line_matching expression="^g4\s+0\.05\d+\s+1\.000\d+\s+1\.000\d+$" />
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1" >
+            <!-- Test 29: Ex 5 -->
+            <conditional name="singtabop" >
+                <param name="use_type" value="single" />
+                <param name="input" value="examples.5.tsv" />
+                <param name="col_row_names" value="has_col_names,has_row_names" />
+                <conditional name="user" >
+                    <param name="mode" value="fulltable" />
+                    <conditional name="general" >
+                        <param name="use" value="custom" />
+                        <param name="fulltable_custom_expr" value="table - table.mean(0)/table.std(0)" />
+                    </conditional>
+                </conditional>
+            </conditional>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="4" />
+                    <has_line_matching expression="^g1\s+9\.\d+\s+17\.\d+\s+28\.\d+$" />
+                    <has_line_matching expression="^g4\s+80\.\d+\s+7\.\d+\s+8\.\d+$" />
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1" >
+            <!-- Test 30: Ex 6 -->
+            <conditional name="singtabop" >
+                <param name="use_type" value="multiple" />
+                <repeat name="tables" >
+                    <param name="input" value="examples.6p1.tsv" />
+                    <param name="col_row_names" value="has_col_names,has_row_names" />
+                </repeat>
+                <repeat name="tables" >
+                    <param name="input" value="examples.6p2.tsv" />
+                    <param name="col_row_names" value="has_col_names,has_row_names" />
+                </repeat>
+                <repeat name="tables" >
+                    <param name="input" value="examples.6p3.tsv" />
+                    <param name="col_row_names" value="has_col_names,has_row_names" />
+                </repeat>
+                <param name="fulltable_custom_expr" value="table1 / min(np.max(np.max(table2)), np.max(np.max(table3)))" />
+            </conditional>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="4" />
+                    <has_line_matching expression="^g1\s+3\.3\d+\s+6\.6\d+\s+10\.0\d+$" />
+                    <has_line_matching expression="^g3\s+1\.3\d+\s+2\.6\d+\s+3\.3\d+$" />
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1" >
+            <!-- Test 31: Ex 7 -->
+            <conditional name="singtabop" >
+                <param name="use_type" value="single" />
+                <param name="input" value="examples.7.tsv" />
+                <param name="col_row_names" value="has_col_names,has_row_names" />
+                <conditional name="user">
+                    <param name="mode" value="fulltable" />
+                    <conditional name="general" >
+                        <param name="use" value="melt" />
+                        <param name="id_vars" value="A" />
+                        <param name="value_vars" value="B,C" />
+                    </conditional>
+                </conditional>
+            </conditional>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="4" />
+                    <has_line_matching expression="^0\s+a\s+B\s+B\s*$" />
+                    <has_line_matching expression="^5\s+c\s+C\s+5\s*$" />
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1" >
+            <!-- Test 32: Ex 8 -->
+            <conditional name="singtabop" >
+                <param name="use_type" value="single" />
+                <param name="input" value="examples.8.tsv" />
+                <param name="col_row_names" value="has_col_names,has_row_names" />
+                <conditional name="user" >
+                    <param name="mode" value="fulltable" />
+                    <conditional name="general" >
+                        <param name="use" value="pivot" />
+                        <param name="index" value="foo" />
+                        <param name="column" value="bar" />
+                        <param name="values" value="baz" />
+                    </conditional>
+                </conditional>
+            </conditional>
+            <output name="table" >
+                <assert_contents>
+                    <has_n_columns n="4" />
+                    <has_line_matching expression="^one\s+1\s+2\s+3$" />
+                    <has_line_matching expression="^two\s+4\s+5\s+6$" />
+                </assert_contents>
+            </output>
+        </test>
+    </tests>
+    <help><![CDATA[
+This tool computes table expressions on the element, row, and column basis. It can sub-select,
+duplicate, as well as perform general and custom expressions on rows, columns or elements.
+
+Only a single operation can be performed on the data. Multiple operations can be performed by
+chaining successive runs of this tool. This is to provide a more transparent workflow for complex operations.
+
+
+
+Examples
+========
+
+Example 1: Sub-selecting from a table
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We have the following table:
+
+ === === === ===
+  .  c1  c2  c3
+ === === === ===
+ g1  10  20  30
+ g2   3   6   9
+ g3   4   8  12
+ g4  81   6   3
+ === === === ===
+
+and we want to duplicate c1 and remove c2. Also select g1 to g3 and add g2 at the end as well. This would result in the output table:
+
+ === === === ===
+  .  c1  c1  c3
+ === === === ===
+ g1  10  10  30
+ g2   3   3   9
+ g3   4   4  12
+ g2   3   3   9
+ === === === ===
+
+In Galaxy we would select the following:
+
+ * *Input Single or Multiple Tables* → **Single Table**
+ * *Column names on first row?* → **Yes**
+ * *Row names on first column?* → **Yes**
+ * *Type of table operation* →    **Drop, keep or duplicate rows and columns**
+
+   * *List of columns to select* → **1,1,3**
+   * *List of rows to select* → **1:3,2**
+   * *Keep duplicate columns* → **Yes**
+   * *Keep duplicate rows* → **Yes**
+
+Example 2: Filter for rows with row sums less than 50
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We have the following table:
+
+ === === === ===
+  .  c1  c2  c3
+ === === === ===
+ g1  10  20  30
+ g2   3   6   9
+ g3   4   8  12
+ g4  81   6   3
+ === === === ===
+
+and we want:
+
+ === === === ===
+  .  c1  c2  c3
+ === === === ===
+ g2   3   6   9
+ g3   4   8  12
+ === === === ===
+
+In Galaxy we would select the following:
+
+ * *Input Single or Multiple Tables* → **Single Table**
+ * *Column names on first row?* → **Yes**
+ * *Row names on first column?* → **Yes**
+ * *Type of table operation* →    **Filter rows or columns by their properties**
+
+   * *Filter* → **Rows**
+   * *Filter Criterion* → **Result of function applied to columns/rows**
+
+     * *Keep column/row if its observed* → **Sum**
+     * *is* → **< (Less Than)**
+     * *this value* → **50**
+
+
+Example 3: Count the number of values per row smaller than a specified value
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We have the following table:
+
+ === === === ===
+  .  c1  c2  c3
+ === === === ===
+ g1  10  20  30
+ g2   3   6   9
+ g3   4   8  12
+ g4  81   6   3
+ === === === ===
+
+and we want to count how many elements in each row are smaller than 10, i.e.,
+we want to obtain the following results table:
+
+ === ===
+  .  vec
+ === ===
+ g1   0
+ g2   3
+ g3   2
+ g4   2
+ === ===
+
+In Galaxy we would select the following:
+
+ * *Input Single or Multiple Tables* → **Single Table**
+ * *Column names on first row?* → **Yes**
+ * *Row names on first column?* → **Yes**
+ * *Type of table operation* →    **Manipulate selected table elements**
+
+   * *Operation to perform* → **Custom**
+
+     * *Custom Expression on 'elem'* → **elem < 10**
+
+   * *Operate on elements* → **All**
+
+**Note:** *There are actually simpler ways to achieve our purpose, but here we are demonstrating the use of a custom expression.*
+
+After executing, we would then be presented with a table like so:
+
+ === ===== ===== =====
+  .     c1    c2    c3
+ === ===== ===== =====
+ g1  False False False
+ g2  True  True  True
+ g3  True  True  False
+ g4  False True  True
+ === ===== ===== =====
+
+To get to our desired table, we would then process this table with the tool again:
+
+ * *Input Single or Multiple Tables* → **Single Table**
+ * *Column names on first row?* → **Yes**
+ * *Row names on first column?* → **Yes**
+ * *Type of table operation* →    **Compute Expression across Rows or Columns**
+
+   * *Calculate* → **Sum**
+   * *For each* → **Row**
+
+Executing this will sum all the 'True' values in each row. Note that the values must have no extra whitespace in them for this to work (e.g. 'True ' or ' True' will not be parsed correctly).
+
+
+Example 4: Perform a scaled log-transformation conditionally
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We want to perform a scaled log transformation on all values greater than 5, and set all other values to 1.
+
+We have the following table:
+
+ === === === ===
+  .  c1  c2  c3
+ === === === ===
+ g1   0  20  30
+ g2   3   0   9
+ g3   4   8   0
+ g4  81   0   0
+ === === === ===
+
+and we want:
+
+ === ========== ========= =========
+  .          c1        c2        c3
+ === ========== ========= =========
+ g1  1.00000000 0.1497866 0.1133732
+ g2  1.00000000 1.0000000 0.2441361
+ g3  1.00000000 0.2599302 1.0000000
+ g4  0.05425246 1.0000000 1.0000000
+ === ========== ========= =========
+
+In Galaxy we would select the following:
+
+ * *Input Single or Multiple Tables* → **Single Table**
+ * *Column names on first row?* → **Yes**
+ * *Row names on first column?* → **Yes**
+ * *Type of table operation* →  **Manipulate selected table elements**
+
+   * *Operation to perform* → **Custom**
+
+     * *Custom Expression* → ::
+
+         (math.log(elem) / elem) if (elem > 5) else 1
+
+     * *Operate on elements* → **All**
+
+
+Example 5: Perform a Full table operation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We have the following table:
+
+ === === === ===
+  .  c1  c2  c3
+ === === === ===
+ g1  10  20  30
+ g2   3  10   9
+ g3   4   8  10
+ g4  81  10  10
+ === === === ===
+
+and we want to subtract from each column the mean of that column divided by the standard deviation of it to yield:
+
+
+ === ========= ========= =========
+  .         c1        c2        c3
+ === ========= ========= =========
+ g1   9.351737 17.784353 28.550737
+ g2   2.351737  7.784353  7.550737
+ g3   3.351737  5.784353  8.550737
+ g4  80.351737  7.784353  8.550737
+ === ========= ========= =========
+
+In Galaxy we would select the following:
+
+ * *Input Single or Multiple Tables* → **Single Table**
+ * *Column names on first row?* → **Yes**
+ * *Row names on first column?* → **Yes**
+ * *Type of table operation* →  **Perform a Full Table Operation**
+
+   * *Operation* → **Custom**
+
+   * *Custom Expression on 'table' along axis (0 or 1)* → ::
+
+      table - table.mean(0)/table.std(0)
+
+
+Example 6: Perform operations on multiple tables
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We have the following three input tables:
+
+Table 1
+
+ === === === ===
+  .  c1  c2  c3
+ === === === ===
+ g1  10  20  30
+ g2   3  10   9
+ g3   4   8  10
+ === === === ===
+
+Table 2
+
+ === === ===
+  .  c1  c2
+ === === ===
+ g1   1   2
+ g2   3   4
+ g3   6   5
+ === === ===
+
+Table 3
+
+ === === === ===
+  .  c1  c2  c3
+ === === === ===
+ g1   1   2   3
+ g2   1   2   3
+ === === === ===
+
+
+*Note that the dimensions of these tables do not match.*
+
+Dimensions:
+ * Table1 [3,3]
+ * Table2 [3,2]
+ * Table3 [2,3]
+
+In order to perform simple operations between Tables, they must be of the same dimensions.
+
+To add Table2 to Table3 we would have to transpose one of the tables using the in-built `T` method::
+
+    table2 + table3.T
+
+or::
+
+    table2.T + table3
+
+We can also perform more general operations using all 3 tables, such as taking the minimum value of
+the maximum values of Table2 and Table3, and dividing the Table1 values by it::
+
+    table1 / min(table2.values.max(), table3.values.max())
+
+
+To perform these types of operations in Galaxy we would select the following:
+
+ * *Input Single or Multiple Tables* → **Multiple Tables**
+ * *(For each inserted table)*
+    * *Column names on first row?* → **Yes**
+    * *Row names on first column?* → **Yes**
+ * *Custom Expression* → ::
+
+    <insert your desired function>
+
+Please note that the last example shown above was chosen to illustrate the
+limitations of the tool. Nested attributes like `table2.values.max` are
+disallowed in expressions in the tool so the above would have to be replaced
+with the harder to read workaround::
+
+    table1 / min(np.max(np.max(table2)), np.max(np.max(table3)))
+
+Also note that, currently `min()`, `max()` and `sum()` are the only built-in
+Python functions that can be used inside expressions. If you want to use
+additional functions, these have to be qualified functions from the `math`,
+`np` or `pd` libraries.
+
+
+Example 7: Melt
+~~~~~~~~~~~~~~~
+
+We have the following table
+
+ === === === ===
+  .   A   B   C
+ === === === ===
+  0   a   B   1
+  1   b   B   3
+  2   c   B   5
+ === === === ===
+
+and we want:
+
+ === === ======== =====
+  .   A  variable value
+ === === ======== =====
+  0   a     B       B
+  1   b     B       B
+  2   c     B       B
+  3   a     C       1
+  4   b     C       3
+  5   c     C       5
+ === === ======== =====
+
+
+In Galaxy we would select the following:
+
+ * *Input Single or Multiple Tables* → **Single Table**
+ * *Column names on first row?* → **Yes**
+ * *Row names on first column?* → **Yes**
+ * *Type of table operation* →  **Perform a Full Table Operation**
+
+   * *Operation* → **Melt**
+   * *Variable IDs* → "A"
+   * *Unpivoted IDs* → "B,C"
+
+This converts the "B" and "C" columns into variables.
+
+
+Example 8: Pivot
+~~~~~~~~~~~~~~~~
+
+We have the following table
+
+ === === === === ===
+  .  foo bar baz zoo
+ === === === === ===
+  0  one  A   1   x
+  1  one  B   2   y
+  2  one  C   3   z
+  3  two  A   4   q
+  4  two  B   5   w
+  5  two  C   6   t
+ === === === === ===
+
+and we want:
+
+ === === === ===
+  .   A   B   C
+ === === === ===
+ one  1   2   3
+ two  4   5   6
+ === === === ===
+
+In Galaxy we would select the following:
+
+ * *Input Single or Multiple Tables* → **Single Table**
+ * *Column names on first row?* → **Yes**
+ * *Row names on first column?* → **Yes**
+ * *Type of table operation* →  **Perform a Full Table Operation**
+
+   * *Operation* → **Pivot**
+   * *Index* → "foo"
+   * *Column* → "bar"
+   * *Values* → "baz"
+
+This splits the matrix using "foo" and "bar" using only the values from "baz". Header values may contain extra information.
+
+]]></help>
+    <citations></citations>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/examples.1.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,5 @@
+	c1 	c2 	c3
+g1 	10 	20 	30
+g2 	3 	6 	9
+g3 	4 	8 	12
+g4 	81 	6 	3
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/examples.2.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,5 @@
+	c1 	c2 	c3
+g1 	10 	20 	30
+g2 	3 	6 	9
+g3 	4 	8 	12
+g4 	81 	6 	3
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/examples.3p1.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,5 @@
+	c1 	c2 	c3
+g1 	10 	20 	30
+g2 	3 	6 	9
+g3 	4 	8 	12
+g4 	81 	6 	3
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/examples.3p2.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,5 @@
+	c1	c2	c3
+g1	False	False	False
+g2	True	True	True
+g3	True	True	False
+g4	False	True	True
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/examples.4.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,5 @@
+	c1 	c2 	c3
+g1 	0 	20 	30
+g2 	3 	0 	9
+g3 	4 	8 	0
+g4 	81 	0 	0
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/examples.5.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,5 @@
+	c1 	c2 	c3
+g1 	10 	20 	30
+g2 	3 	10 	9
+g3 	4 	8 	10
+g4 	81 	10 	10
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/examples.6p1.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,4 @@
+	c1 	c2 	c3
+g1 	10 	20 	30
+g2 	3 	10 	9
+g3 	4 	8 	10
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/examples.6p2.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,4 @@
+	c1 	c2
+g1 	1 	2
+g2 	3 	4
+g3 	6 	5
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/examples.6p3.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,3 @@
+	c1 	c2 	c3
+g1 	1 	2 	3
+g2 	1 	2 	3
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/examples.7.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,4 @@
+	A 	B 	C
+0 	a 	B 	1
+1 	b 	B 	3
+2 	c 	B 	5
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/examples.8.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,7 @@
+	foo 	bar 	baz 	zoo
+0 	one 	A 	1 	x
+1 	one 	B 	2 	y
+2 	one 	C 	3 	z
+3 	two 	A 	4 	q
+4 	two 	B 	5 	w
+5 	two 	C 	6 	t
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/mat1.trans.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,22 @@
+	CTTCGA	GAAGAC	GAAGGA	GAATCC	GAATGG	GACAAC	GACAGA	GACGAA	GAGCAA	GAGGTA	GAGTGA	GAGTTG	GATACG	GATCGA	GATCTG	GATTGC	GCAACA	GCAATG	GCAGAA	GCATGA	GCATTC
+ENSDARG00000087616	-0.000000	1.000122	0	6.004399	-0.000000	0	-0.000000	10.012227	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	0	4.001954	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000036044	5.003054	-0.000000	0	-0.000000	-0.000000	0	-0.000000	31.117905	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	0	-0.000000	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000036816	-0.000000	1.000122	0	12.017613	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	5.003054	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000102632	1.000122	-0.000000	0	10.012227	1.000122	0	-0.000000	8.007823	-0.000000	-0.000000	1.000122	-0.000000	1.000122	1.000122	-0.000000	0	1.000122	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000056722	-0.000000	1.000122	0	2.000488	-0.000000	0	-0.000000	17.035376	-0.000000	-0.000000	2.000488	-0.000000	1.000122	-0.000000	-0.000000	0	2.000488	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000098591	-0.000000	-0.000000	0	9.009902	3.001099	0	1.000122	30.110403	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	0	2.000488	-0.000000	0	1.000122	-0.000000
+ENSDARG00000044212	-0.000000	-0.000000	0	-0.000000	-0.000000	0	-0.000000	33.133653	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	-0.000000	0	3.001099	-0.000000	0	-0.000000	1.000122
+ENSDARG00000010516	2.000488	-0.000000	0	3.001099	2.000488	0	-0.000000	13.020674	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	0	-0.000000	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000021143	4.001954	-0.000000	0	14.023980	2.000488	0	-0.000000	8.007823	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	3.001099	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000042905	1.000122	-0.000000	0	-0.000000	-0.000000	0	-0.000000	22.059294	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	1.000122	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000041435	1.000122	-0.000000	0	6.004399	1.000122	0	-0.000000	15.027533	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	0	1.000122	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000034897	2.000488	-0.000000	0	5.003054	1.000122	0	-0.000000	21.054018	1.000122	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	0	1.000122	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000040287	2.000488	2.000488	0	1.000122	-0.000000	0	-0.000000	11.014797	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	0	1.000122	1.000122	0	-0.000000	-0.000000
+ENSDARG00000007320	3.001099	-0.000000	0	1.000122	-0.000000	0	-0.000000	26.082870	-0.000000	-0.000000	1.000122	2.000488	-0.000000	1.000122	-0.000000	0	-0.000000	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000003599	-0.000000	-0.000000	0	2.000488	2.000488	0	-0.000000	27.089382	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	0	-0.000000	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000099104	4.001954	-0.000000	0	3.001099	1.000122	0	-0.000000	14.023980	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	0	-0.000000	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000071658	-0.000000	1.000122	0	3.001099	-0.000000	0	-0.000000	8.007823	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	0	5.003054	-0.000000	0	-0.000000	1.000122
+ENSDARG00000030408	1.000122	1.000122	0	1.000122	1.000122	0	-0.000000	25.076606	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	1.000122	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000039647	-0.000000	-0.000000	0	26.082870	1.000122	0	-0.000000	5.003054	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000043509	-0.000000	-0.000000	0	-0.000000	1.000122	0	1.000122	27.089382	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	0	3.001099	-0.000000	0	-0.000000	-0.000000
+ENSDARG00000017235	1.000122	-0.000000	0	3.001099	1.000122	0	-0.000000	15.027533	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	0	-0.000000	-0.000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/mat1.umi.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,22 @@
+	CTTCGA	GAAGAC	GAAGGA	GAATCC	GAATGG	GACAAC	GACAGA	GACGAA	GAGCAA	GAGGTA	GAGTGA	GAGTTG	GATACG	GATCGA	GATCTG	GATTGC	GCAACA	GCAATG	GCAGAA	GCATGA	GCATTC
+ENSDARG00000087616	0	1	0	6	0	0	0	10	1	0	0	0	1	0	0	0	4	0	0	0	0
+ENSDARG00000036044	5	0	0	0	0	0	0	31	0	0	0	0	1	0	0	0	0	0	0	0	0
+ENSDARG00000036816	0	1	0	12	0	0	0	0	0	0	0	0	0	0	0	0	5	0	0	0	0
+ENSDARG00000102632	1	0	0	10	1	0	0	8	0	0	1	0	1	1	0	0	1	0	0	0	0
+ENSDARG00000056722	0	1	0	2	0	0	0	17	0	0	2	0	1	0	0	0	2	0	0	0	0
+ENSDARG00000098591	0	0	0	9	3	0	1	30	0	0	1	0	0	0	0	0	2	0	0	1	0
+ENSDARG00000044212	0	0	0	0	0	0	0	33	0	0	0	0	0	4	0	0	3	0	0	0	1
+ENSDARG00000010516	2	0	0	3	2	0	0	13	0	0	0	0	1	0	0	0	0	0	0	0	0
+ENSDARG00000021143	4	0	0	14	2	0	0	8	0	0	0	0	0	0	0	0	3	0	0	0	0
+ENSDARG00000042905	1	0	0	0	0	0	0	22	0	0	0	0	0	0	0	0	1	0	0	0	0
+ENSDARG00000041435	1	0	0	6	1	0	0	15	0	0	0	2	0	0	0	0	1	0	0	0	0
+ENSDARG00000034897	2	0	0	5	1	0	0	21	1	0	0	1	0	0	0	0	1	0	0	0	0
+ENSDARG00000040287	2	2	0	1	0	0	0	11	0	0	1	0	0	0	0	0	1	1	0	0	0
+ENSDARG00000007320	3	0	0	1	0	0	0	26	0	0	1	2	0	1	0	0	0	0	0	0	0
+ENSDARG00000003599	0	0	0	2	2	0	0	27	0	0	0	0	0	0	1	0	0	0	0	0	0
+ENSDARG00000099104	4	0	0	3	1	0	0	14	0	1	0	0	0	2	0	0	0	0	0	0	0
+ENSDARG00000071658	0	1	0	3	0	0	0	8	0	0	3	0	0	0	0	0	5	0	0	0	1
+ENSDARG00000030408	1	1	0	1	1	0	0	25	0	0	0	0	0	0	0	0	1	0	0	0	0
+ENSDARG00000039647	0	0	0	26	1	0	0	5	0	0	1	0	0	0	0	0	0	0	0	0	0
+ENSDARG00000043509	0	0	0	0	1	0	1	27	1	0	0	0	0	1	0	0	3	0	0	0	0
+ENSDARG00000017235	1	0	0	3	1	0	0	15	0	0	0	0	0	0	0	0	0	0	0	0	0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/mat2.trans.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,31 @@
+	AACACC	AACCTC	AACGAG	AACTGG	AAGCAC	AAGCCA	AAGGTG	AAGTGC	ACAAGC	ACAGAC	ACAGGA	ACAGTG	ACATGG	ACCAAC	ACCAGA	ACCATG	ACGGTA	ACGTAC	ACGTGA	ACGTTG	ACTCAC	ACTCGA	ACTCTG	ACTTCG	AGAACG	AGACAG	AGACCA	AGACTC	AGATGC	AGCGAA	AGCTAG	AGCTCA	AGCTTC	AGGAAG	AGGACA	AGGATC	AGGCTA	AGTACC	AGTAGG	AGTGCA	AGTGTC	ATACGG	ATCACG	ATCAGC	ATCCAC	ATCCGA	ATCGCA	ATCGTG	ATCTCC	ATGACC	ATGAGG	ATGCAG	ATGCTC	ATGGAC	ATGTCG	ATTCGC	ATTGCG	CAATGC	CACCAA	CACGTA	CACTCA	CACTTC	CAGAAG	CAGGAA	CATGCA	CATGTC	CATTGG	CCAATC	CCACAA	CCAGTA	CCATAG	CCATCA	CCGATA	CCGTAA	CCTACA	CCTATG	CCTGAA	CCTTGA	CGAACA	CGATGA	CGATTG	CGCATA	CGCTAA	CGGTTA	CGTAAG	CGTCTA	CGTTAC	CGTTCA	CTAACG	CTAAGC	CTAGAC	CTAGGA	CTAGTG	CTATCC	CTCAGA	CTCATG	CTCGAA	CTGCTA	CTGTTG	CTTCGA	GAAGAC	GAAGGA	GAATCC	GAATGG	GACAAC	GACAGA	GACGAA	GAGCAA	GAGGTA	GAGTGA	GAGTTG	GATACG	GATCGA	GATCTG	GATTGC	GCAACA	GCAATG	GCAGAA	GCATGA	GCATTC	GCCATA	GCGTTA	GCTAAG	GCTCTA	GCTTAC	GCTTCA	GGAATC	GGACAA	GGATAC	GGATCA	GGCTTA	GGTAAC	GGTAGA	GGTATG	GGTGTA	GGTTAG	GTAACC	GTACAG	GTACCA	GTACTC	GTATCG	GTATGC	GTCTCA	GTGAAG	GTGACA	GTGATC	GTGGAA	GTTAGG	GTTGAG	TAACGG	TACAGG	TACCAC	TACCGA	TACGCA	TACTCC	TAGCTC	TAGGAC	TAGTGG	TATCCG	TATCGC	TCAACG	TCACAG	TCATCC	TCCGAA	TCTAGG	TCTTGC	TGAACC	TGAAGG	TGAGGA	TGATCG	TGCAAC	TGCAGA	TGGTGA	TGGTTG	TGTACG	TGTAGC	TGTCGA	TGTCTG	TGTTCC	TGTTGG	TTACGC	TTCACC	TTCCAG	TTCGAC	TTCTCG	TTGCAC	TTGCGA	TTGCTG	TTGGAG	TTGGCA	TTGGTC	TTGTGC
+ENSDARG00000099970	5.003054	1.000122	14.023980	-0.000000	2.000488	2.000488	2.000488	-0.000000	162.168323	3.001099	81.811621	9.009902	1.000122	195.596716	132.107705	69.587787	-0.000000	-0.000000	2.000488	406.522221	136.240904	-0.000000	37.168128	1.000122	5.003054	108.422409	3.001099	49.295449	-0.000000	1.000122	45.249018	13.020674	173.628588	4.001954	5.003054	21.054018	5.003054	1.000122	-0.000000	7.005988	63.489523	2.000488	5.003054	1.000122	-0.000000	3.001099	5.003054	-0.000000	0	2.000488	7.005988	3.001099	-0.000000	-0.000000	601.014180	1.000122	144.519836	-0.000000	6.004399	2.000488	257.954777	2.000488	268.618673	1.000122	-0.000000	4.001954	1.000122	1.000122	2.000488	-0.000000	1.000122	2.000488	3.001099	1.000122	3.001099	-0.000000	1.000122	1.000122	-0.000000	249.443605	12.017613	-0.000000	5.003054	1.000122	1.000122	2.000488	5.003054	2.000488	3.001099	130.042668	1.000122	96.119021	5.003054	71.622561	3.001099	24.070588	2.000488	6.004399	1.000122	55.372602	3.001099	3.001099	366.957653	4.001954	6.004399	2.000488	365.864074	-0.000000	1.000122	16.031332	2.000488	6.004399	4.001954	-0.000000	2.000488	37.168128	1.000122	1.000122	6.004399	3.001099	2.000488	1.000122	6.004399	7.005988	6.004399	3.001099	-0.000000	96.119021	2.000488	1.000122	4.001954	245.194642	1.000122	2.000488	-0.000000	2.000488	-0.000000	5.003054	320.195430	257.954777	-0.000000	4.001954	20.048988	1.000122	325.605548	59.429052	10.012227	5.003054	37.168128	4.001954	-0.000000	2.000488	4.001954	-0.000000	1.000122	-0.000000	341.878911	1.000122	3.001099	-0.000000	2.000488	33.133653	3.001099	146.592186	2.000488	51.320165	2.000488	245.194642	5.003054	0	59.429052	55.372602	69.587787	2.000488	-0.000000	1.000122	31.117905	39.186856	4.001954	-0.000000	-0.000000	80.791574	2.000488	3.001099	38.177367	-0.000000	6.004399	1.000122	2.000488	-0.000000	2.000488	173.628588
+ENSDARG00000104945	-0.000000	3.001099	6.004399	1.000122	-0.000000	2.000488	4.001954	1.000122	9.009902	12.017613	1.000122	1.000122	-0.000000	19.044204	21.054018	29.103148	1.000122	1.000122	1.000122	145.555880	23.064818	-0.000000	29.103148	1.000122	1.000122	2.000488	4.001954	28.096142	-0.000000	2.000488	6.004399	7.005988	31.117905	-0.000000	3.001099	13.020674	1.000122	1.000122	1.000122	14.023980	60.443792	1.000122	1.000122	-0.000000	-0.000000	2.000488	-0.000000	1.000122	0	2.000488	-0.000000	-0.000000	-0.000000	1.000122	26.082870	1.000122	77.732955	-0.000000	-0.000000	-0.000000	55.372602	3.001099	18.039667	1.000122	1.000122	2.000488	2.000488	-0.000000	-0.000000	1.000122	-0.000000	2.000488	2.000488	4.001954	3.001099	-0.000000	1.000122	2.000488	-0.000000	57.400325	3.001099	-0.000000	4.001954	1.000122	1.000122	7.005988	2.000488	1.000122	2.000488	-0.000000	1.000122	2.000488	3.001099	1.000122	5.003054	3.001099	2.000488	2.000488	1.000122	4.001954	3.001099	1.000122	48.283467	1.000122	1.000122	-0.000000	26.082870	5.003054	4.001954	10.012227	-0.000000	1.000122	3.001099	-0.000000	3.001099	15.027533	-0.000000	-0.000000	6.004399	1.000122	1.000122	-0.000000	2.000488	4.001954	2.000488	-0.000000	-0.000000	17.035376	5.003054	3.001099	2.000488	2.000488	3.001099	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	31.117905	66.537520	-0.000000	1.000122	-0.000000	-0.000000	40.196593	19.044204	10.012227	1.000122	24.070588	1.000122	3.001099	-0.000000	1.000122	2.000488	1.000122	-0.000000	3.001099	1.000122	-0.000000	2.000488	4.001954	9.009902	3.001099	14.023980	1.000122	8.007823	2.000488	34.141899	5.003054	0	9.009902	1.000122	6.004399	-0.000000	1.000122	2.000488	17.035376	27.089382	3.001099	-0.000000	1.000122	31.117905	2.000488	1.000122	22.059294	1.000122	2.000488	-0.000000	11.014797	-0.000000	1.000122	51.320165
+ENSDARG00000045639	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	52.332899	25.076606	4.001954	-0.000000	2.000488	-0.000000	117.674264	37.168128	-0.000000	6.004399	-0.000000	1.000122	-0.000000	-0.000000	20.048988	-0.000000	-0.000000	1.000122	2.000488	31.117905	-0.000000	-0.000000	13.020674	1.000122	1.000122	-0.000000	2.000488	5.003054	-0.000000	-0.000000	1.000122	-0.000000	1.000122	1.000122	-0.000000	0	-0.000000	1.000122	-0.000000	-0.000000	2.000488	43.227300	-0.000000	23.064818	-0.000000	-0.000000	-0.000000	92.026090	-0.000000	44.238034	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	1.000122	-0.000000	57.400325	4.001954	-0.000000	-0.000000	-0.000000	-0.000000	6.004399	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	1.000122	2.000488	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	86.915672	-0.000000	-0.000000	-0.000000	27.089382	1.000122	2.000488	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	29.103148	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	3.001099	1.000122	-0.000000	-0.000000	15.027533	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	35.150393	88.959074	1.000122	-0.000000	-0.000000	2.000488	69.587787	10.012227	4.001954	-0.000000	7.005988	-0.000000	-0.000000	1.000122	3.001099	-0.000000	-0.000000	-0.000000	2.000488	2.000488	-0.000000	-0.000000	-0.000000	25.076606	-0.000000	49.295449	-0.000000	6.004399	1.000122	21.054018	4.001954	0	7.005988	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	6.004399	32.125655	-0.000000	-0.000000	-0.000000	7.005988	-0.000000	-0.000000	21.054018	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	41.206580
+ENSDARG00000070453	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	9.009902	21.054018	-0.000000	-0.000000	-0.000000	-0.000000	49.295449	19.044204	-0.000000	23.064818	-0.000000	-0.000000	-0.000000	-0.000000	16.031332	-0.000000	-0.000000	-0.000000	-0.000000	34.141899	-0.000000	-0.000000	16.031332	-0.000000	-0.000000	-0.000000	7.005988	7.005988	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	7.005988	-0.000000	18.039667	-0.000000	1.000122	-0.000000	112.531765	2.000488	-0.000000	-0.000000	1.000122	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	44.238034	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	34.141899	-0.000000	-0.000000	2.000488	9.009902	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	6.004399	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	1.000122	1.000122	-0.000000	1.000122	-0.000000	14.023980	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	14.023980	126.947064	-0.000000	-0.000000	1.000122	-0.000000	45.249018	5.003054	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	8.007823	-0.000000	31.117905	1.000122	-0.000000	-0.000000	-0.000000	1.000122	0	11.014797	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	21.054018	28.096142	-0.000000	-0.000000	-0.000000	11.014797	-0.000000	-0.000000	7.005988	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	102.266096
+ENSDARG00000014201	-0.000000	1.000122	10.012227	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	23.064818	7.005988	21.054018	-0.000000	-0.000000	-0.000000	38.177367	38.177367	-0.000000	4.001954	-0.000000	-0.000000	-0.000000	-0.000000	11.014797	-0.000000	-0.000000	1.000122	1.000122	27.089382	-0.000000	-0.000000	28.096142	-0.000000	1.000122	-0.000000	4.001954	7.005988	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	22.059294	-0.000000	27.089382	-0.000000	-0.000000	-0.000000	21.054018	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	103.291506	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	1.000122	1.000122	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	56.386338	1.000122	-0.000000	-0.000000	59.429052	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	16.031332	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	41.206580	34.141899	-0.000000	-0.000000	-0.000000	-0.000000	33.133653	8.007823	2.000488	1.000122	1.000122	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	-0.000000	1.000122	14.023980	1.000122	21.054018	-0.000000	6.004399	-0.000000	-0.000000	3.001099	0	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	19.044204	21.054018	-0.000000	-0.000000	-0.000000	9.009902	-0.000000	1.000122	8.007823	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	58.414563
+ENSDARG00000055455	-0.000000	1.000122	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	4.001954	2.000488	1.000122	18.039667	29.103148	7.005988	1.000122	1.000122	-0.000000	48.283467	12.017613	-0.000000	10.012227	1.000122	-0.000000	38.177367	2.000488	13.020674	-0.000000	-0.000000	3.001099	1.000122	25.076606	-0.000000	-0.000000	9.009902	-0.000000	-0.000000	-0.000000	9.009902	3.001099	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	15.027533	-0.000000	15.027533	1.000122	-0.000000	-0.000000	37.168128	1.000122	17.035376	-0.000000	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	14.023980	1.000122	-0.000000	1.000122	-0.000000	-0.000000	5.003054	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	5.003054	2.000488	-0.000000	-0.000000	11.014797	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	50.307682	1.000122	-0.000000	1.000122	32.125655	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	9.009902	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	1.000122	-0.000000	3.001099	1.000122	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	1.000122	-0.000000	2.000488	37.168128	51.320165	-0.000000	1.000122	-0.000000	1.000122	28.096142	14.023980	4.001954	-0.000000	7.005988	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	2.000488	1.000122	-0.000000	-0.000000	4.001954	1.000122	18.039667	1.000122	7.005988	1.000122	57.400325	2.000488	0	3.001099	-0.000000	4.001954	-0.000000	-0.000000	-0.000000	11.014797	20.048988	-0.000000	-0.000000	-0.000000	4.001954	-0.000000	1.000122	10.012227	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	38.177367
+ENSDARG00000035715	-0.000000	-0.000000	9.009902	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	5.003054	-0.000000	20.048988	19.044204	11.014797	-0.000000	17.035376	-0.000000	34.141899	28.096142	-0.000000	11.014797	-0.000000	-0.000000	24.070588	1.000122	17.035376	-0.000000	-0.000000	11.014797	3.001099	22.059294	-0.000000	1.000122	9.009902	-0.000000	-0.000000	-0.000000	7.005988	7.005988	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	22.059294	-0.000000	16.031332	-0.000000	1.000122	-0.000000	24.070588	-0.000000	20.048988	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	24.070588	5.003054	1.000122	1.000122	-0.000000	-0.000000	2.000488	-0.000000	1.000122	1.000122	-0.000000	-0.000000	1.000122	-0.000000	1.000122	1.000122	3.001099	-0.000000	-0.000000	-0.000000	2.000488	1.000122	-0.000000	29.103148	4.001954	-0.000000	1.000122	32.125655	-0.000000	-0.000000	6.004399	1.000122	2.000488	-0.000000	-0.000000	-0.000000	9.009902	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	12.017613	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	32.125655	37.168128	-0.000000	-0.000000	-0.000000	-0.000000	39.186856	10.012227	3.001099	-0.000000	17.035376	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	6.004399	1.000122	-0.000000	-0.000000	-0.000000	6.004399	-0.000000	20.048988	-0.000000	4.001954	-0.000000	32.125655	1.000122	0	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	9.009902	19.044204	-0.000000	-0.000000	-0.000000	13.020674	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	39.186856
+ENSDARG00000055216	-0.000000	1.000122	6.004399	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	1.000122	2.000488	1.000122	-0.000000	13.020674	16.031332	3.001099	1.000122	-0.000000	3.001099	35.150393	28.096142	-0.000000	5.003054	-0.000000	-0.000000	10.012227	-0.000000	18.039667	-0.000000	-0.000000	7.005988	1.000122	16.031332	-0.000000	1.000122	12.017613	-0.000000	-0.000000	-0.000000	4.001954	5.003054	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	0	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	11.014797	-0.000000	55.372602	-0.000000	-0.000000	-0.000000	33.133653	-0.000000	13.020674	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	41.206580	4.001954	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	41.206580	5.003054	-0.000000	-0.000000	36.159136	-0.000000	2.000488	2.000488	1.000122	-0.000000	1.000122	-0.000000	-0.000000	7.005988	-0.000000	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	14.023980	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	18.039667	48.283467	-0.000000	-0.000000	-0.000000	-0.000000	38.177367	5.003054	6.004399	-0.000000	15.027533	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	2.000488	-0.000000	-0.000000	-0.000000	10.012227	-0.000000	26.082870	-0.000000	5.003054	1.000122	30.110403	-0.000000	0	2.000488	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	8.007823	36.159136	-0.000000	-0.000000	-0.000000	4.001954	1.000122	-0.000000	16.031332	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	23.064818
+ENSDARG00000037997	-0.000000	-0.000000	4.001954	-0.000000	1.000122	1.000122	-0.000000	-0.000000	1.000122	-0.000000	2.000488	-0.000000	-0.000000	5.003054	6.004399	16.031332	-0.000000	-0.000000	1.000122	28.096142	48.283467	-0.000000	3.001099	-0.000000	-0.000000	6.004399	-0.000000	6.004399	-0.000000	3.001099	1.000122	4.001954	28.096142	-0.000000	-0.000000	30.110403	-0.000000	-0.000000	-0.000000	8.007823	11.014797	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	2.000488	1.000122	-0.000000	-0.000000	11.014797	-0.000000	19.044204	-0.000000	-0.000000	-0.000000	43.227300	-0.000000	8.007823	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	51.320165	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	6.004399	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	1.000122	-0.000000	2.000488	-0.000000	2.000488	-0.000000	-0.000000	12.017613	-0.000000	-0.000000	-0.000000	27.089382	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	5.003054	-0.000000	1.000122	2.000488	1.000122	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	30.110403	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	9.009902	44.238034	1.000122	-0.000000	1.000122	-0.000000	73.658347	1.000122	4.001954	-0.000000	26.082870	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	1.000122	-0.000000	13.020674	1.000122	54.359117	-0.000000	-0.000000	-0.000000	5.003054	3.001099	0	-0.000000	2.000488	1.000122	1.000122	-0.000000	-0.000000	1.000122	40.196593	-0.000000	-0.000000	1.000122	4.001954	-0.000000	-0.000000	10.012227	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	9.009902
+ENSDARG00000077777	1.000122	3.001099	14.023980	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	6.004399	-0.000000	3.001099	-0.000000	-0.000000	7.005988	3.001099	4.001954	-0.000000	32.125655	1.000122	15.027533	22.059294	-0.000000	20.048988	6.004399	-0.000000	13.020674	2.000488	7.005988	1.000122	1.000122	10.012227	-0.000000	14.023980	1.000122	-0.000000	16.031332	1.000122	-0.000000	-0.000000	4.001954	3.001099	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	19.044204	1.000122	11.014797	-0.000000	-0.000000	-0.000000	20.048988	-0.000000	22.059294	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	1.000122	22.059294	3.001099	-0.000000	-0.000000	-0.000000	1.000122	4.001954	-0.000000	1.000122	3.001099	20.048988	2.000488	-0.000000	4.001954	6.004399	14.023980	9.009902	-0.000000	-0.000000	-0.000000	10.012227	1.000122	-0.000000	15.027533	-0.000000	-0.000000	-0.000000	42.216815	-0.000000	-0.000000	1.000122	-0.000000	2.000488	-0.000000	1.000122	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	17.035376	1.000122	-0.000000	1.000122	11.014797	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	5.003054	26.082870	-0.000000	1.000122	2.000488	-0.000000	14.023980	3.001099	3.001099	-0.000000	19.044204	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	27.089382	1.000122	-0.000000	-0.000000	1.000122	11.014797	1.000122	20.048988	1.000122	3.001099	-0.000000	23.064818	1.000122	0	-0.000000	2.000488	-0.000000	1.000122	-0.000000	-0.000000	1.000122	21.054018	-0.000000	-0.000000	-0.000000	11.014797	2.000488	-0.000000	18.039667	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	13.020674
+ENSDARG00000008363	-0.000000	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	5.003054	38.177367	11.014797	-0.000000	-0.000000	5.003054	13.020674	3.001099	-0.000000	2.000488	1.000122	22.059294	8.007823	-0.000000	52.332899	1.000122	-0.000000	7.005988	-0.000000	2.000488	-0.000000	-0.000000	8.007823	8.007823	16.031332	-0.000000	-0.000000	10.012227	-0.000000	-0.000000	-0.000000	1.000122	9.009902	-0.000000	10.012227	-0.000000	-0.000000	1.000122	1.000122	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	19.044204	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	11.014797	5.003054	2.000488	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	19.044204	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	-0.000000	16.031332	2.000488	9.009902	4.001954	3.001099	-0.000000	-0.000000	1.000122	2.000488	6.004399	-0.000000	8.007823	1.000122	-0.000000	1.000122	67.554024	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	1.000122	1.000122	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	22.059294	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	5.003054	10.012227	-0.000000	-0.000000	-0.000000	2.000488	3.001099	10.012227	1.000122	-0.000000	-0.000000	8.007823	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	1.000122	1.000122	-0.000000	5.003054	25.076606	8.007823	44.238034	0	4.001954	3.001099	21.054018	-0.000000	-0.000000	-0.000000	3.001099	10.012227	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	11.014797
+ENSDARG00000037870	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	18.039667	1.000122	9.009902	-0.000000	-0.000000	10.012227	9.009902	6.004399	-0.000000	4.001954	-0.000000	21.054018	15.027533	-0.000000	3.001099	7.005988	-0.000000	25.076606	1.000122	20.048988	-0.000000	-0.000000	1.000122	-0.000000	10.012227	-0.000000	-0.000000	11.014797	1.000122	-0.000000	-0.000000	2.000488	5.003054	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	14.023980	-0.000000	21.054018	-0.000000	3.001099	-0.000000	21.054018	-0.000000	24.070588	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	2.000488	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	27.089382	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	48.283467	-0.000000	-0.000000	2.000488	1.000122	6.004399	-0.000000	1.000122	-0.000000	1.000122	22.059294	-0.000000	1.000122	14.023980	2.000488	-0.000000	-0.000000	45.249018	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	12.017613	1.000122	-0.000000	-0.000000	22.059294	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	9.009902	8.007823	-0.000000	-0.000000	1.000122	1.000122	22.059294	3.001099	3.001099	-0.000000	10.012227	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	14.023980	-0.000000	1.000122	-0.000000	-0.000000	8.007823	1.000122	6.004399	-0.000000	2.000488	1.000122	6.004399	-0.000000	0	2.000488	3.001099	7.005988	-0.000000	1.000122	-0.000000	5.003054	6.004399	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	20.048988
+ENSDARG00000051875	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	8.007823	11.014797	7.005988	-0.000000	-0.000000	-0.000000	59.429052	25.076606	-0.000000	5.003054	-0.000000	1.000122	-0.000000	-0.000000	13.020674	-0.000000	1.000122	-0.000000	1.000122	19.044204	1.000122	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	11.014797	4.001954	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	19.044204	1.000122	47.271734	-0.000000	-0.000000	1.000122	38.177367	2.000488	2.000488	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	1.000122	45.249018	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	5.003054	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	32.125655	-0.000000	-0.000000	1.000122	38.177367	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	6.004399	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	24.070588	28.096142	1.000122	-0.000000	-0.000000	-0.000000	23.064818	9.009902	4.001954	-0.000000	8.007823	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	7.005988	-0.000000	14.023980	-0.000000	9.009902	1.000122	-0.000000	-0.000000	0	6.004399	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	3.001099	18.039667	-0.000000	-0.000000	-0.000000	4.001954	-0.000000	-0.000000	3.001099	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	2.000488	37.168128
+ENSDARG00000037746	1.000122	-0.000000	2.000488	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	8.007823	-0.000000	4.001954	-0.000000	1.000122	2.000488	5.003054	5.003054	-0.000000	4.001954	1.000122	14.023980	46.260251	-0.000000	2.000488	11.014797	-0.000000	10.012227	-0.000000	8.007823	-0.000000	-0.000000	1.000122	1.000122	11.014797	-0.000000	-0.000000	29.103148	-0.000000	1.000122	-0.000000	5.003054	9.009902	-0.000000	2.000488	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	2.000488	-0.000000	1.000122	3.001099	-0.000000	9.009902	-0.000000	-0.000000	-0.000000	16.031332	-0.000000	6.004399	-0.000000	1.000122	1.000122	-0.000000	3.001099	-0.000000	-0.000000	2.000488	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	50.307682	3.001099	-0.000000	-0.000000	1.000122	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	17.035376	-0.000000	-0.000000	1.000122	2.000488	-0.000000	1.000122	-0.000000	-0.000000	3.001099	7.005988	-0.000000	1.000122	8.007823	2.000488	-0.000000	1.000122	49.295449	-0.000000	-0.000000	2.000488	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	24.070588	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	3.001099	10.012227	-0.000000	1.000122	4.001954	1.000122	27.089382	1.000122	4.001954	-0.000000	4.001954	-0.000000	1.000122	1.000122	1.000122	-0.000000	-0.000000	-0.000000	15.027533	-0.000000	-0.000000	-0.000000	-0.000000	6.004399	1.000122	15.027533	-0.000000	3.001099	-0.000000	6.004399	2.000488	0	-0.000000	-0.000000	8.007823	-0.000000	-0.000000	-0.000000	5.003054	23.064818	1.000122	2.000488	-0.000000	2.000488	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	2.000488	3.001099	-0.000000	1.000122	42.216815
+ENSDARG00000020850	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	46.260251	-0.000000	1.000122	-0.000000	-0.000000	3.001099	3.001099	4.001954	-0.000000	14.023980	3.001099	16.031332	30.110403	-0.000000	6.004399	2.000488	-0.000000	22.059294	4.001954	2.000488	-0.000000	-0.000000	2.000488	-0.000000	4.001954	-0.000000	-0.000000	8.007823	1.000122	-0.000000	-0.000000	4.001954	3.001099	-0.000000	8.007823	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	2.000488	-0.000000	5.003054	-0.000000	2.000488	-0.000000	8.007823	-0.000000	15.027533	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	24.070588	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	5.003054	1.000122	-0.000000	1.000122	1.000122	3.001099	9.009902	-0.000000	-0.000000	-0.000000	13.020674	1.000122	-0.000000	6.004399	3.001099	-0.000000	-0.000000	50.307682	2.000488	-0.000000	3.001099	2.000488	1.000122	1.000122	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	16.031332	-0.000000	-0.000000	-0.000000	14.023980	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	7.005988	13.020674	-0.000000	-0.000000	6.004399	-0.000000	18.039667	2.000488	11.014797	-0.000000	4.001954	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	80.791574	-0.000000	1.000122	-0.000000	1.000122	5.003054	-0.000000	10.012227	-0.000000	3.001099	1.000122	2.000488	-0.000000	0	2.000488	10.012227	4.001954	-0.000000	-0.000000	-0.000000	3.001099	10.012227	1.000122	-0.000000	-0.000000	3.001099	3.001099	-0.000000	13.020674	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	13.020674
+ENSDARG00000018259	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	3.001099	11.014797	-0.000000	1.000122	9.009902	11.014797	2.000488	-0.000000	-0.000000	-0.000000	34.141899	18.039667	-0.000000	11.014797	-0.000000	-0.000000	7.005988	1.000122	15.027533	1.000122	-0.000000	3.001099	-0.000000	26.082870	-0.000000	-0.000000	4.001954	1.000122	-0.000000	-0.000000	3.001099	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	9.009902	-0.000000	16.031332	-0.000000	-0.000000	-0.000000	34.141899	3.001099	33.133653	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	23.064818	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	31.117905	1.000122	-0.000000	-0.000000	21.054018	2.000488	-0.000000	2.000488	-0.000000	1.000122	1.000122	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	2.000488	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	14.023980	25.076606	-0.000000	-0.000000	1.000122	-0.000000	23.064818	8.007823	1.000122	-0.000000	7.005988	2.000488	1.000122	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	5.003054	1.000122	12.017613	-0.000000	4.001954	1.000122	24.070588	2.000488	0	3.001099	1.000122	5.003054	-0.000000	-0.000000	-0.000000	7.005988	16.031332	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	2.000488	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	26.082870
+ENSDARG00000039914	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	2.000488	-0.000000	-0.000000	8.007823	12.017613	6.004399	-0.000000	1.000122	1.000122	33.133653	3.001099	1.000122	6.004399	-0.000000	-0.000000	-0.000000	2.000488	11.014797	-0.000000	-0.000000	10.012227	-0.000000	8.007823	-0.000000	-0.000000	6.004399	3.001099	1.000122	-0.000000	1.000122	11.014797	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	15.027533	1.000122	28.096142	-0.000000	-0.000000	-0.000000	21.054018	1.000122	46.260251	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	11.014797	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	-0.000000	-0.000000	1.000122	2.000488	2.000488	5.003054	3.001099	-0.000000	2.000488	9.009902	1.000122	1.000122	-0.000000	1.000122	-0.000000	-0.000000	22.059294	2.000488	-0.000000	-0.000000	5.003054	-0.000000	1.000122	10.012227	-0.000000	1.000122	2.000488	-0.000000	1.000122	5.003054	-0.000000	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	9.009902	2.000488	1.000122	2.000488	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	17.035376	58.414563	-0.000000	-0.000000	-0.000000	1.000122	14.023980	12.017613	1.000122	-0.000000	12.017613	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	8.007823	-0.000000	8.007823	1.000122	4.001954	-0.000000	15.027533	1.000122	0	2.000488	-0.000000	5.003054	1.000122	-0.000000	-0.000000	3.001099	14.023980	-0.000000	-0.000000	-0.000000	6.004399	-0.000000	1.000122	9.009902	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	18.039667
+ENSDARG00000068992	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	28.096142	-0.000000	-0.000000	2.000488	1.000122	8.007823	7.005988	3.001099	-0.000000	1.000122	1.000122	16.031332	7.005988	-0.000000	5.003054	1.000122	-0.000000	20.048988	-0.000000	4.001954	-0.000000	-0.000000	5.003054	2.000488	10.012227	-0.000000	-0.000000	10.012227	-0.000000	1.000122	-0.000000	1.000122	3.001099	-0.000000	15.027533	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	9.009902	-0.000000	10.012227	-0.000000	1.000122	-0.000000	15.027533	-0.000000	15.027533	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	1.000122	-0.000000	-0.000000	24.070588	4.001954	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	11.014797	1.000122	3.001099	1.000122	1.000122	2.000488	1.000122	-0.000000	-0.000000	1.000122	3.001099	2.000488	-0.000000	9.009902	4.001954	-0.000000	1.000122	33.133653	-0.000000	1.000122	-0.000000	1.000122	-0.000000	3.001099	1.000122	1.000122	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	10.012227	1.000122	-0.000000	-0.000000	10.012227	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	6.004399	12.017613	-0.000000	-0.000000	1.000122	1.000122	14.023980	10.012227	2.000488	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	78.752241	-0.000000	-0.000000	1.000122	-0.000000	7.005988	-0.000000	16.031332	-0.000000	3.001099	1.000122	4.001954	-0.000000	0	2.000488	7.005988	7.005988	-0.000000	-0.000000	-0.000000	6.004399	4.001954	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	11.014797	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	18.039667
+ENSDARG00000017673	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	2.000488	8.007823	-0.000000	-0.000000	6.004399	4.001954	6.004399	-0.000000	-0.000000	-0.000000	34.141899	37.168128	-0.000000	6.004399	-0.000000	-0.000000	29.103148	-0.000000	4.001954	-0.000000	-0.000000	-0.000000	-0.000000	17.035376	-0.000000	-0.000000	4.001954	-0.000000	-0.000000	-0.000000	4.001954	5.003054	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	21.054018	1.000122	9.009902	-0.000000	-0.000000	-0.000000	20.048988	-0.000000	10.012227	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	1.000122	1.000122	-0.000000	-0.000000	1.000122	-0.000000	21.054018	1.000122	-0.000000	-0.000000	-0.000000	1.000122	1.000122	-0.000000	1.000122	1.000122	-0.000000	-0.000000	13.020674	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	17.035376	-0.000000	-0.000000	-0.000000	39.186856	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	6.004399	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	19.044204	1.000122	-0.000000	-0.000000	3.001099	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	15.027533	17.035376	-0.000000	-0.000000	-0.000000	1.000122	31.117905	4.001954	3.001099	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	2.000488	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	29.103148	-0.000000	1.000122	-0.000000	13.020674	2.000488	0	2.000488	-0.000000	1.000122	1.000122	1.000122	-0.000000	7.005988	16.031332	-0.000000	-0.000000	-0.000000	2.000488	1.000122	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	30.110403
+ENSDARG00000039034	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	8.007823	1.000122	-0.000000	-0.000000	-0.000000	12.017613	4.001954	9.009902	-0.000000	-0.000000	-0.000000	15.027533	11.014797	-0.000000	9.009902	-0.000000	-0.000000	10.012227	2.000488	5.003054	-0.000000	-0.000000	1.000122	-0.000000	23.064818	-0.000000	1.000122	8.007823	-0.000000	-0.000000	-0.000000	7.005988	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	0	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	16.031332	-0.000000	20.048988	-0.000000	-0.000000	-0.000000	23.064818	1.000122	8.007823	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	33.133653	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	1.000122	-0.000000	2.000488	1.000122	-0.000000	-0.000000	3.001099	1.000122	2.000488	1.000122	-0.000000	-0.000000	3.001099	-0.000000	1.000122	34.141899	2.000488	-0.000000	-0.000000	13.020674	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	1.000122	1.000122	-0.000000	10.012227	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	-0.000000	1.000122	-0.000000	28.096142	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	18.039667	27.089382	-0.000000	-0.000000	-0.000000	-0.000000	25.076606	4.001954	-0.000000	-0.000000	10.012227	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	8.007823	-0.000000	22.059294	-0.000000	2.000488	-0.000000	5.003054	-0.000000	0	2.000488	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	10.012227	-0.000000	-0.000000	-0.000000	8.007823	-0.000000	-0.000000	7.005988	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	41.206580
+ENSDARG00000001889	-0.000000	1.000122	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	9.009902	17.035376	2.000488	-0.000000	-0.000000	-0.000000	30.110403	30.110403	-0.000000	2.000488	-0.000000	-0.000000	14.023980	-0.000000	6.004399	-0.000000	-0.000000	1.000122	-0.000000	12.017613	-0.000000	-0.000000	14.023980	-0.000000	-0.000000	-0.000000	1.000122	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	16.031332	-0.000000	31.117905	-0.000000	-0.000000	-0.000000	23.064818	2.000488	9.009902	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	37.168128	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	17.035376	3.001099	-0.000000	-0.000000	21.054018	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	8.007823	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	19.044204	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	6.004399	37.168128	-0.000000	-0.000000	-0.000000	-0.000000	36.159136	2.000488	4.001954	1.000122	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	16.031332	-0.000000	19.044204	-0.000000	2.000488	-0.000000	12.017613	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	28.096142	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	11.014797	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	15.027533
+ENSDARG00000036577	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	2.000488	-0.000000	1.000122	-0.000000	-0.000000	4.001954	-0.000000	-0.000000	10.012227	16.031332	4.001954	-0.000000	2.000488	1.000122	45.249018	8.007823	-0.000000	9.009902	-0.000000	-0.000000	2.000488	-0.000000	6.004399	-0.000000	-0.000000	1.000122	2.000488	15.027533	-0.000000	-0.000000	6.004399	-0.000000	-0.000000	-0.000000	8.007823	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	18.039667	-0.000000	20.048988	-0.000000	-0.000000	-0.000000	29.103148	2.000488	15.027533	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	8.007823	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	1.000122	1.000122	-0.000000	-0.000000	10.012227	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	34.141899	4.001954	-0.000000	-0.000000	10.012227	-0.000000	-0.000000	4.001954	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	6.004399	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	7.005988	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	12.017613	27.089382	-0.000000	-0.000000	-0.000000	-0.000000	20.048988	4.001954	2.000488	-0.000000	9.009902	1.000122	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	3.001099	2.000488	-0.000000	-0.000000	2.000488	9.009902	-0.000000	14.023980	-0.000000	4.001954	-0.000000	23.064818	1.000122	0	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	5.003054	6.004399	-0.000000	-0.000000	-0.000000	13.020674	1.000122	-0.000000	3.001099	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	26.082870
+ENSDARG00000075542	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	7.005988	2.000488	2.000488	-0.000000	-0.000000	1.000122	11.014797	3.001099	-0.000000	-0.000000	-0.000000	18.039667	12.017613	-0.000000	7.005988	1.000122	-0.000000	6.004399	-0.000000	6.004399	-0.000000	1.000122	1.000122	-0.000000	25.076606	1.000122	-0.000000	8.007823	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	11.014797	-0.000000	3.001099	-0.000000	-0.000000	1.000122	31.117905	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	109.449362	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	2.000488	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	13.020674	-0.000000	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	1.000122	6.004399	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	1.000122	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	5.003054	5.003054	-0.000000	1.000122	-0.000000	-0.000000	6.004399	2.000488	1.000122	-0.000000	9.009902	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	11.014797	1.000122	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	9.009902	-0.000000	5.003054	-0.000000	6.004399	4.001954	0	1.000122	4.001954	-0.000000	2.000488	-0.000000	-0.000000	7.005988	2.000488	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	113.559749
+ENSDARG00000029150	-0.000000	1.000122	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	20.048988	-0.000000	2.000488	-0.000000	-0.000000	4.001954	2.000488	4.001954	-0.000000	6.004399	1.000122	14.023980	15.027533	-0.000000	4.001954	3.001099	-0.000000	31.117905	3.001099	5.003054	-0.000000	1.000122	1.000122	1.000122	11.014797	-0.000000	-0.000000	6.004399	1.000122	-0.000000	-0.000000	4.001954	6.004399	-0.000000	7.005988	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	0	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	13.020674	-0.000000	19.044204	-0.000000	-0.000000	-0.000000	14.023980	-0.000000	6.004399	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	22.059294	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	5.003054	2.000488	-0.000000	2.000488	-0.000000	1.000122	6.004399	1.000122	-0.000000	1.000122	3.001099	-0.000000	1.000122	11.014797	-0.000000	-0.000000	-0.000000	19.044204	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	18.039667	2.000488	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	7.005988	46.260251	1.000122	-0.000000	-0.000000	-0.000000	10.012227	6.004399	5.003054	-0.000000	7.005988	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	18.039667	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	18.039667	-0.000000	-0.000000	-0.000000	5.003054	2.000488	0	1.000122	3.001099	4.001954	-0.000000	-0.000000	-0.000000	1.000122	12.017613	-0.000000	1.000122	-0.000000	5.003054	1.000122	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	16.031332
+ENSDARG00000016494	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	20.048988	-0.000000	-0.000000	-0.000000	-0.000000	22.059294	3.001099	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	19.044204	-0.000000	-0.000000	1.000122	-0.000000	20.048988	-0.000000	1.000122	6.004399	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	12.017613	1.000122	5.003054	-0.000000	-0.000000	1.000122	50.307682	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	10.012227	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	8.007823	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	7.005988	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	8.007823	136.240904	-0.000000	-0.000000	-0.000000	-0.000000	35.150393	5.003054	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	7.005988	2.000488	2.000488	-0.000000	1.000122	-0.000000	-0.000000	1.000122	0	2.000488	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	3.001099	16.031332	-0.000000	-0.000000	-0.000000	9.009902	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	26.082870
+ENSDARG00000021864	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	47.271734	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	2.000488	7.005988	-0.000000	2.000488	3.001099	13.020674	11.014797	-0.000000	-0.000000	3.001099	2.000488	18.039667	-0.000000	2.000488	-0.000000	-0.000000	1.000122	1.000122	6.004399	-0.000000	-0.000000	19.044204	-0.000000	1.000122	-0.000000	5.003054	3.001099	-0.000000	8.007823	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	8.007823	1.000122	11.014797	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	11.014797	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	9.009902	2.000488	1.000122	3.001099	-0.000000	1.000122	8.007823	-0.000000	-0.000000	-0.000000	5.003054	1.000122	-0.000000	5.003054	1.000122	-0.000000	-0.000000	48.283467	-0.000000	1.000122	-0.000000	1.000122	1.000122	4.001954	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	7.005988	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	5.003054	7.005988	-0.000000	-0.000000	8.007823	-0.000000	10.012227	1.000122	11.014797	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	39.186856	1.000122	-0.000000	-0.000000	-0.000000	4.001954	1.000122	10.012227	-0.000000	-0.000000	-0.000000	3.001099	1.000122	0	2.000488	23.064818	7.005988	-0.000000	-0.000000	-0.000000	4.001954	4.001954	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	12.017613	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	6.004399
+ENSDARG00000103057	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	16.031332	4.001954	-0.000000	-0.000000	-0.000000	22.059294	12.017613	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	2.000488	3.001099	-0.000000	1.000122	-0.000000	-0.000000	20.048988	-0.000000	-0.000000	6.004399	-0.000000	-0.000000	-0.000000	1.000122	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	22.059294	-0.000000	12.017613	-0.000000	-0.000000	-0.000000	8.007823	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	33.133653	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	1.000122	1.000122	-0.000000	3.001099	1.000122	-0.000000	1.000122	-0.000000	-0.000000	1.000122	26.082870	1.000122	-0.000000	-0.000000	21.054018	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	11.014797	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	-0.000000	13.020674	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	13.020674	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	43.227300	2.000488	2.000488	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	14.023980	-0.000000	6.004399	-0.000000	24.070588	4.001954	0	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	21.054018	-0.000000	-0.000000	-0.000000	1.000122	1.000122	-0.000000	9.009902	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	27.089382
+ENSDARG00000051783	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	1.000122	-0.000000	46.260251	-0.000000	3.001099	-0.000000	-0.000000	7.005988	9.009902	6.004399	-0.000000	1.000122	3.001099	8.007823	9.009902	-0.000000	1.000122	1.000122	-0.000000	29.103148	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	7.005988	-0.000000	-0.000000	13.020674	-0.000000	-0.000000	-0.000000	1.000122	4.001954	-0.000000	4.001954	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	1.000122	-0.000000	3.001099	-0.000000	-0.000000	8.007823	-0.000000	12.017613	-0.000000	3.001099	-0.000000	3.001099	-0.000000	9.009902	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	1.000122	19.044204	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	-0.000000	1.000122	-0.000000	2.000488	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	5.003054	4.001954	-0.000000	-0.000000	35.150393	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	1.000122	-0.000000	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	9.009902	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	9.009902	9.009902	-0.000000	-0.000000	3.001099	-0.000000	1.000122	3.001099	7.005988	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	43.227300	-0.000000	1.000122	-0.000000	-0.000000	3.001099	-0.000000	8.007823	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	0	3.001099	10.012227	5.003054	-0.000000	-0.000000	-0.000000	1.000122	5.003054	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	6.004399	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	8.007823
+ENSDARG00000009212	-0.000000	2.000488	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	50.307682	-0.000000	1.000122	-0.000000	-0.000000	3.001099	4.001954	4.001954	-0.000000	3.001099	-0.000000	21.054018	10.012227	-0.000000	4.001954	1.000122	1.000122	29.103148	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	1.000122	4.001954	-0.000000	-0.000000	7.005988	-0.000000	-0.000000	-0.000000	2.000488	8.007823	-0.000000	3.001099	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	0	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	2.000488	-0.000000	16.031332	-0.000000	-0.000000	-0.000000	9.009902	-0.000000	8.007823	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	12.017613	3.001099	-0.000000	-0.000000	-0.000000	-0.000000	3.001099	1.000122	-0.000000	-0.000000	1.000122	-0.000000	1.000122	3.001099	2.000488	-0.000000	5.003054	-0.000000	-0.000000	1.000122	2.000488	-0.000000	-0.000000	7.005988	-0.000000	-0.000000	-0.000000	18.039667	-0.000000	-0.000000	1.000122	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	11.014797	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	4.001954	10.012227	-0.000000	1.000122	4.001954	-0.000000	10.012227	4.001954	11.014797	-0.000000	6.004399	-0.000000	-0.000000	1.000122	1.000122	-0.000000	-0.000000	-0.000000	24.070588	1.000122	-0.000000	-0.000000	1.000122	6.004399	1.000122	9.009902	-0.000000	2.000488	-0.000000	9.009902	1.000122	0	1.000122	7.005988	2.000488	-0.000000	-0.000000	-0.000000	4.001954	3.001099	3.001099	-0.000000	-0.000000	2.000488	2.000488	-0.000000	5.003054	-0.000000	1.000122	-0.000000	1.000122	1.000122	-0.000000	10.012227
+ENSDARG00000021124	-0.000000	1.000122	9.009902	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	9.009902	-0.000000	1.000122	-0.000000	-0.000000	7.005988	5.003054	7.005988	-0.000000	3.001099	-0.000000	15.027533	38.177367	-0.000000	4.001954	1.000122	-0.000000	15.027533	-0.000000	4.001954	-0.000000	-0.000000	-0.000000	-0.000000	6.004399	-0.000000	-0.000000	11.014797	-0.000000	-0.000000	-0.000000	3.001099	6.004399	-0.000000	2.000488	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	0	-0.000000	-0.000000	1.000122	-0.000000	1.000122	9.009902	1.000122	10.012227	-0.000000	-0.000000	-0.000000	9.009902	-0.000000	10.012227	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	21.054018	1.000122	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	4.001954	1.000122	-0.000000	1.000122	-0.000000	2.000488	3.001099	-0.000000	1.000122	-0.000000	3.001099	-0.000000	-0.000000	28.096142	2.000488	-0.000000	-0.000000	25.076606	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	11.014797	1.000122	-0.000000	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	11.014797	21.054018	-0.000000	-0.000000	1.000122	-0.000000	10.012227	2.000488	2.000488	-0.000000	5.003054	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	-0.000000	13.020674	-0.000000	-0.000000	-0.000000	-0.000000	9.009902	-0.000000	5.003054	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	0	-0.000000	-0.000000	-0.000000	-0.000000	1.000122	-0.000000	1.000122	10.012227	-0.000000	-0.000000	-0.000000	5.003054	-0.000000	1.000122	4.001954	-0.000000	1.000122	-0.000000	-0.000000	-0.000000	-0.000000	17.035376
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/mat2.umi.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,31 @@
+	AACACC	AACCTC	AACGAG	AACTGG	AAGCAC	AAGCCA	AAGGTG	AAGTGC	ACAAGC	ACAGAC	ACAGGA	ACAGTG	ACATGG	ACCAAC	ACCAGA	ACCATG	ACGGTA	ACGTAC	ACGTGA	ACGTTG	ACTCAC	ACTCGA	ACTCTG	ACTTCG	AGAACG	AGACAG	AGACCA	AGACTC	AGATGC	AGCGAA	AGCTAG	AGCTCA	AGCTTC	AGGAAG	AGGACA	AGGATC	AGGCTA	AGTACC	AGTAGG	AGTGCA	AGTGTC	ATACGG	ATCACG	ATCAGC	ATCCAC	ATCCGA	ATCGCA	ATCGTG	ATCTCC	ATGACC	ATGAGG	ATGCAG	ATGCTC	ATGGAC	ATGTCG	ATTCGC	ATTGCG	CAATGC	CACCAA	CACGTA	CACTCA	CACTTC	CAGAAG	CAGGAA	CATGCA	CATGTC	CATTGG	CCAATC	CCACAA	CCAGTA	CCATAG	CCATCA	CCGATA	CCGTAA	CCTACA	CCTATG	CCTGAA	CCTTGA	CGAACA	CGATGA	CGATTG	CGCATA	CGCTAA	CGGTTA	CGTAAG	CGTCTA	CGTTAC	CGTTCA	CTAACG	CTAAGC	CTAGAC	CTAGGA	CTAGTG	CTATCC	CTCAGA	CTCATG	CTCGAA	CTGCTA	CTGTTG	CTTCGA	GAAGAC	GAAGGA	GAATCC	GAATGG	GACAAC	GACAGA	GACGAA	GAGCAA	GAGGTA	GAGTGA	GAGTTG	GATACG	GATCGA	GATCTG	GATTGC	GCAACA	GCAATG	GCAGAA	GCATGA	GCATTC	GCCATA	GCGTTA	GCTAAG	GCTCTA	GCTTAC	GCTTCA	GGAATC	GGACAA	GGATAC	GGATCA	GGCTTA	GGTAAC	GGTAGA	GGTATG	GGTGTA	GGTTAG	GTAACC	GTACAG	GTACCA	GTACTC	GTATCG	GTATGC	GTCTCA	GTGAAG	GTGACA	GTGATC	GTGGAA	GTTAGG	GTTGAG	TAACGG	TACAGG	TACCAC	TACCGA	TACGCA	TACTCC	TAGCTC	TAGGAC	TAGTGG	TATCCG	TATCGC	TCAACG	TCACAG	TCATCC	TCCGAA	TCTAGG	TCTTGC	TGAACC	TGAAGG	TGAGGA	TGATCG	TGCAAC	TGCAGA	TGGTGA	TGGTTG	TGTACG	TGTAGC	TGTCGA	TGTCTG	TGTTCC	TGTTGG	TTACGC	TTCACC	TTCCAG	TTCGAC	TTCTCG	TTGCAC	TTGCGA	TTGCTG	TTGGAG	TTGGCA	TTGGTC	TTGTGC
+ENSDARG00000099970	5	1	14	0	2	2	2	0	159	3	81	9	1	191	130	69	0	0	2	387	134	0	37	1	5	107	3	49	0	1	45	13	170	4	5	21	5	1	0	7	63	2	5	1	0	3	5	0	0	2	7	3	0	0	559	1	142	0	6	2	250	2	260	1	0	4	1	1	2	0	1	2	3	1	3	0	1	1	0	242	12	0	5	1	1	2	5	2	3	128	1	95	5	71	3	24	2	6	1	55	3	3	351	4	6	2	350	0	1	16	2	6	4	0	2	37	1	1	6	3	2	1	6	7	6	3	0	95	2	1	4	238	1	2	0	2	0	5	308	250	0	4	20	1	313	59	10	5	37	4	0	2	4	0	1	0	328	1	3	0	2	33	3	144	2	51	2	238	5	0	59	55	69	2	0	1	31	39	4	0	0	80	2	3	38	0	6	1	2	0	2	170
+ENSDARG00000104945	0	3	6	1	0	2	4	1	9	12	1	1	0	19	21	29	1	1	1	143	23	0	29	1	1	2	4	28	0	2	6	7	31	0	3	13	1	1	1	14	60	1	1	0	0	2	0	1	0	2	0	0	0	1	26	1	77	0	0	0	55	3	18	1	1	2	2	0	0	1	0	2	2	4	3	0	1	2	0	57	3	0	4	1	1	7	2	1	2	0	1	2	3	1	5	3	2	2	1	4	3	1	48	1	1	0	26	5	4	10	0	1	3	0	3	15	0	0	6	1	1	0	2	4	2	0	0	17	5	3	2	2	3	0	0	0	1	0	31	66	0	1	0	0	40	19	10	1	24	1	3	0	1	2	1	0	3	1	0	2	4	9	3	14	1	8	2	34	5	0	9	1	6	0	1	2	17	27	3	0	1	31	2	1	22	1	2	0	11	0	1	51
+ENSDARG00000045639	0	2	0	0	0	1	0	0	1	0	1	0	0	52	25	4	0	2	0	116	37	0	6	0	1	0	0	20	0	0	1	2	31	0	0	13	1	1	0	2	5	0	0	1	0	1	1	0	0	0	1	0	0	2	43	0	23	0	0	0	91	0	44	0	0	0	1	0	1	0	1	0	0	1	1	0	0	1	0	57	4	0	0	0	0	6	1	0	0	0	1	0	1	1	2	1	0	1	0	0	0	0	86	0	0	0	27	1	2	3	0	0	0	0	0	29	0	0	0	0	0	0	1	3	1	0	0	15	0	0	0	3	0	0	0	0	0	1	35	88	1	0	0	2	69	10	4	0	7	0	0	1	3	0	0	0	2	2	0	0	0	25	0	49	0	6	1	21	4	0	7	0	0	0	1	0	6	32	0	0	0	7	0	0	21	0	0	0	2	0	0	41
+ENSDARG00000070453	1	0	1	0	0	0	1	0	1	0	0	1	0	9	21	0	0	0	0	49	19	0	23	0	0	0	0	16	0	0	0	0	34	0	0	16	0	0	0	7	7	0	0	0	0	0	0	1	0	0	0	0	0	0	7	0	18	0	1	0	111	2	0	0	1	0	2	0	0	0	1	0	0	0	0	0	1	0	0	44	1	0	0	0	0	1	0	0	2	0	0	0	0	1	2	0	0	0	0	0	0	0	34	0	0	2	9	0	2	0	0	0	1	0	0	6	0	0	1	1	0	0	1	1	0	1	0	14	0	0	0	1	0	0	0	0	1	0	14	125	0	0	1	0	45	5	0	0	1	0	0	0	0	2	0	0	0	1	0	0	1	8	0	31	1	0	0	0	1	0	11	0	0	0	0	0	21	28	0	0	0	11	0	0	7	0	0	0	0	0	0	101
+ENSDARG00000014201	0	1	10	0	0	0	0	0	3	0	0	0	0	23	7	21	0	0	0	38	38	0	4	0	0	0	0	11	0	0	1	1	27	0	0	28	0	1	0	4	7	1	0	0	0	0	0	0	0	0	0	0	0	0	22	0	27	0	0	0	21	1	0	0	0	0	3	0	0	0	0	0	0	0	0	0	0	0	0	102	0	0	0	0	0	0	1	0	1	0	0	1	1	0	1	0	1	0	0	0	1	0	56	1	0	0	59	1	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	1	16	1	0	0	0	1	0	0	0	0	0	41	34	0	0	0	0	33	8	2	1	1	0	2	0	0	0	0	0	0	1	1	0	1	14	1	21	0	6	0	0	3	0	1	0	1	0	0	0	19	21	0	0	0	9	0	1	8	0	0	0	0	0	0	58
+ENSDARG00000055455	0	1	3	0	0	0	0	0	1	0	4	2	1	18	29	7	1	1	0	48	12	0	10	1	0	38	2	13	0	0	3	1	25	0	0	9	0	0	0	9	3	0	2	0	0	0	0	0	0	0	0	1	0	0	15	0	15	1	0	0	37	1	17	0	0	0	1	1	0	0	0	0	0	0	1	0	0	0	0	14	1	0	1	0	0	5	1	0	0	0	0	5	2	0	0	11	1	0	0	0	1	0	50	1	0	1	32	0	0	5	0	0	0	0	0	9	0	1	0	0	0	0	0	1	1	1	0	3	1	0	0	1	1	0	0	1	0	2	37	51	0	1	0	1	28	14	4	0	7	1	0	0	0	0	0	0	1	2	1	0	0	4	1	18	1	7	1	57	2	0	3	0	4	0	0	0	11	20	0	0	0	4	0	1	10	0	1	0	0	0	0	38
+ENSDARG00000035715	0	0	9	0	0	0	0	0	1	0	1	5	0	20	19	11	0	17	0	34	28	0	11	0	0	24	1	17	0	0	11	3	22	0	1	9	0	0	0	7	7	0	0	0	0	0	0	0	0	0	0	0	0	0	22	0	16	0	1	0	24	0	20	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	1	24	5	1	1	0	0	2	0	1	1	0	0	1	0	1	1	3	0	0	0	2	1	0	29	4	0	1	32	0	0	6	1	2	0	0	0	9	0	0	1	0	0	0	0	0	0	0	0	12	1	0	0	0	0	0	0	0	0	0	32	37	0	0	0	0	39	10	3	0	17	0	1	0	0	0	0	1	6	1	0	0	0	6	0	20	0	4	0	32	1	0	2	0	0	0	0	0	9	19	0	0	0	13	0	0	2	0	0	0	1	0	0	39
+ENSDARG00000055216	0	1	6	0	0	0	0	0	2	1	2	1	0	13	16	3	1	0	3	35	28	0	5	0	0	10	0	18	0	0	7	1	16	0	1	12	0	0	0	4	5	0	0	0	1	0	0	0	0	1	0	0	0	0	11	0	55	0	0	0	33	0	13	0	0	0	0	0	2	0	0	0	0	1	0	0	0	0	0	41	4	0	0	0	0	4	0	0	0	0	0	4	1	0	0	0	0	0	0	1	0	1	41	5	0	0	36	0	2	2	1	0	1	0	0	7	0	0	1	0	1	0	0	0	0	0	0	14	1	1	0	0	0	0	0	0	0	0	18	48	0	0	0	0	38	5	6	0	15	0	0	0	0	0	0	0	1	2	0	0	0	10	0	26	0	5	1	30	0	0	2	0	1	0	0	0	8	36	0	0	0	4	1	0	16	0	0	0	0	0	0	23
+ENSDARG00000037997	0	0	4	0	1	1	0	0	1	0	2	0	0	5	6	16	0	0	1	28	48	0	3	0	0	6	0	6	0	3	1	4	28	0	0	30	0	0	0	8	11	1	1	0	0	0	0	0	0	0	2	1	0	0	11	0	19	0	0	0	43	0	8	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0	0	51	3	0	0	0	0	6	0	0	0	0	0	0	0	0	2	1	0	2	0	2	0	0	12	0	0	0	27	1	1	0	0	0	0	1	0	5	0	1	2	1	1	0	1	0	0	0	0	30	0	0	0	0	0	0	0	0	1	1	9	44	1	0	1	0	73	1	4	0	26	0	0	0	0	0	0	0	3	0	0	1	0	13	1	54	0	0	0	5	3	0	0	2	1	1	0	0	1	40	0	0	1	4	0	0	10	0	0	0	2	0	0	9
+ENSDARG00000077777	1	3	14	0	0	0	0	2	6	0	3	0	0	7	3	4	0	32	1	15	22	0	20	6	0	13	2	7	1	1	10	0	14	1	0	16	1	0	0	4	3	0	5	0	0	0	0	0	0	0	1	0	0	0	19	1	11	0	0	0	20	0	22	0	0	0	1	0	0	1	2	0	0	0	0	0	0	2	1	22	3	0	0	0	1	4	0	1	3	20	2	0	4	6	14	9	0	0	0	10	1	0	15	0	0	0	42	0	0	1	0	2	0	1	0	5	0	0	0	0	0	0	0	1	0	0	1	17	1	0	1	11	0	0	0	1	0	1	5	26	0	1	2	0	14	3	3	0	19	0	0	2	0	0	0	0	27	1	0	0	1	11	1	20	1	3	0	23	1	0	0	2	0	1	0	0	1	21	0	0	0	11	2	0	18	0	0	1	0	0	0	13
+ENSDARG00000008363	0	0	1	0	1	0	0	0	5	38	11	0	0	5	13	3	0	2	1	22	8	0	52	1	0	7	0	2	0	0	8	8	16	0	0	10	0	0	0	1	9	0	10	0	0	1	1	0	0	0	0	0	0	0	19	0	0	0	0	0	11	5	2	0	0	1	0	0	1	0	0	1	0	0	0	0	0	0	0	19	1	0	1	0	0	0	0	0	0	4	0	16	2	9	4	3	0	0	1	2	6	0	8	1	0	1	67	0	0	0	2	0	1	1	1	1	0	0	0	0	0	0	0	0	2	0	0	5	0	0	0	22	0	0	0	1	0	5	10	0	0	0	2	3	10	1	0	0	8	1	0	0	0	0	0	0	3	0	0	0	0	3	1	1	0	5	25	8	44	0	4	3	21	0	0	0	3	10	0	0	0	5	0	0	1	0	0	0	0	0	0	11
+ENSDARG00000037870	0	0	0	0	0	0	0	0	18	1	9	0	0	10	9	6	0	4	0	21	15	0	3	7	0	25	1	20	0	0	1	0	10	0	0	11	1	0	0	2	5	0	1	0	0	0	0	0	0	0	0	1	0	0	14	0	21	0	3	0	21	0	24	0	0	0	0	0	1	2	0	1	0	0	0	0	0	0	1	27	0	0	0	0	0	0	0	0	3	48	0	0	2	1	6	0	1	0	1	22	0	1	14	2	0	0	45	0	0	1	0	0	1	0	0	2	0	0	1	0	0	0	0	0	1	0	0	12	1	0	0	22	0	0	0	0	0	1	9	8	0	0	1	1	22	3	3	0	10	0	1	0	0	0	0	0	14	0	1	0	0	8	1	6	0	2	1	6	0	0	2	3	7	0	1	0	5	6	0	0	0	3	0	0	3	0	0	1	0	0	0	20
+ENSDARG00000051875	0	0	0	1	0	0	0	0	0	0	0	0	0	8	11	7	0	0	0	59	25	0	5	0	1	0	0	13	0	1	0	1	19	1	0	2	0	0	0	11	4	0	0	0	0	0	0	0	0	0	0	0	0	0	19	1	47	0	0	1	38	2	2	0	0	1	1	0	0	0	0	0	0	1	0	0	0	1	1	45	0	0	0	1	0	5	0	0	1	0	0	1	0	1	1	0	0	0	0	0	1	1	32	0	0	1	38	0	0	0	0	1	1	0	0	6	0	0	0	0	0	0	2	1	0	1	0	0	0	0	0	0	0	0	1	0	0	0	24	28	1	0	0	0	23	9	4	0	8	0	0	0	0	0	0	1	0	0	0	0	0	7	0	14	0	9	1	0	0	0	6	0	0	0	0	1	3	18	0	0	0	4	0	0	3	0	1	0	0	0	2	37
+ENSDARG00000037746	1	0	2	1	0	0	0	0	8	0	4	0	1	2	5	5	0	4	1	14	46	0	2	11	0	10	0	8	0	0	1	1	11	0	0	29	0	1	0	5	9	0	2	1	0	0	0	0	0	0	0	2	0	1	3	0	9	0	0	0	16	0	6	0	1	1	0	3	0	0	2	1	1	0	0	0	0	1	1	50	3	0	0	1	0	5	0	0	0	17	0	0	1	2	0	1	0	0	3	7	0	1	8	2	0	1	49	0	0	2	0	3	0	0	0	0	0	0	0	1	1	0	0	0	1	0	0	24	0	0	0	5	0	0	0	0	0	2	3	10	0	1	4	1	27	1	4	0	4	0	1	1	1	0	0	0	15	0	0	0	0	6	1	15	0	3	0	6	2	0	0	0	8	0	0	0	5	23	1	2	0	2	0	0	5	0	0	2	3	0	1	42
+ENSDARG00000020850	0	0	5	0	0	0	0	0	46	0	1	0	0	3	3	4	0	14	3	16	30	0	6	2	0	22	4	2	0	0	2	0	4	0	0	8	1	0	0	4	3	0	8	0	0	0	0	0	0	0	0	1	0	0	2	0	5	0	2	0	8	0	15	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	24	0	0	0	0	0	5	0	0	0	5	1	0	1	1	3	9	0	0	0	13	1	0	6	3	0	0	50	2	0	3	2	1	1	0	0	3	0	0	0	1	0	0	0	1	0	0	0	16	0	0	0	14	0	0	0	0	0	1	7	13	0	0	6	0	18	2	11	0	4	2	0	0	0	0	0	0	80	0	1	0	1	5	0	10	0	3	1	2	0	0	2	10	4	0	0	0	3	10	1	0	0	3	3	0	13	0	1	0	0	0	0	13
+ENSDARG00000018259	0	0	0	0	0	0	1	0	0	3	11	0	1	9	11	2	0	0	0	34	18	0	11	0	0	7	1	15	1	0	3	0	26	0	0	4	1	0	0	3	5	0	0	0	0	1	0	0	0	0	0	0	0	0	9	0	16	0	0	0	34	3	33	0	0	0	0	0	2	0	0	1	0	1	0	0	0	1	0	23	2	0	0	0	0	2	0	0	0	0	0	4	0	0	0	0	0	1	0	0	0	0	31	1	0	0	21	2	0	2	0	1	1	0	0	3	0	0	0	0	0	1	0	1	2	0	0	5	0	0	0	0	0	1	0	0	0	0	14	25	0	0	1	0	23	8	1	0	7	2	1	0	0	1	1	0	0	0	0	0	2	5	1	12	0	4	1	24	2	0	3	1	5	0	0	0	7	16	0	0	0	5	0	0	2	0	1	0	0	0	1	26
+ENSDARG00000039914	0	0	0	0	0	0	0	0	1	1	2	0	0	8	12	6	0	1	1	33	3	1	6	0	0	0	2	11	0	0	10	0	8	0	0	6	3	1	0	1	11	0	1	0	0	0	1	0	0	0	0	0	0	0	15	1	28	0	0	0	21	1	46	0	0	0	0	0	2	0	1	0	1	0	0	0	0	0	0	11	1	0	0	0	0	4	0	0	1	2	2	5	3	0	2	9	1	1	0	1	0	0	22	2	0	0	5	0	1	10	0	1	2	0	1	5	0	1	1	0	0	0	0	0	0	0	0	9	2	1	2	1	0	0	0	0	0	0	17	58	0	0	0	1	14	12	1	0	12	0	0	1	0	0	0	0	5	0	0	0	0	8	0	8	1	4	0	15	1	0	2	0	5	1	0	0	3	14	0	0	0	6	0	1	9	0	0	0	1	0	0	18
+ENSDARG00000068992	0	0	1	0	0	0	0	0	28	0	0	2	1	8	7	3	0	1	1	16	7	0	5	1	0	20	0	4	0	0	5	2	10	0	0	10	0	1	0	1	3	0	15	0	0	0	0	0	0	0	2	0	0	0	9	0	10	0	1	0	15	0	15	0	0	0	0	0	0	0	0	0	0	0	2	0	1	0	0	24	4	0	0	0	0	2	0	0	0	11	1	3	1	1	2	1	0	0	1	3	2	0	9	4	0	1	33	0	1	0	1	0	3	1	1	2	0	0	0	0	0	0	0	0	0	1	0	10	1	0	0	10	0	1	0	0	0	1	6	12	0	0	1	1	14	10	2	0	5	0	0	0	1	0	0	0	78	0	0	1	0	7	0	16	0	3	1	4	0	0	2	7	7	0	0	0	6	4	0	0	0	5	0	0	11	0	0	0	0	0	1	18
+ENSDARG00000017673	0	0	0	0	0	0	0	0	1	2	8	0	0	6	4	6	0	0	0	34	37	0	6	0	0	29	0	4	0	0	0	0	17	0	0	4	0	0	0	4	5	0	1	0	1	0	0	0	0	0	0	0	0	0	21	1	9	0	0	0	20	0	10	0	0	0	0	0	1	0	0	0	1	1	1	0	0	1	0	21	1	0	0	0	1	1	0	1	1	0	0	13	0	1	0	0	0	0	0	0	0	0	17	0	0	0	39	0	1	0	0	0	1	0	0	6	0	0	0	0	0	0	1	0	0	1	0	19	1	0	0	3	0	1	0	0	0	1	15	17	0	0	0	1	31	4	3	0	1	0	1	0	0	1	0	0	1	2	0	0	0	5	0	29	0	1	0	13	2	0	2	0	1	1	1	0	7	16	0	0	0	2	1	0	5	0	0	0	0	0	0	30
+ENSDARG00000039034	0	0	2	0	0	0	0	0	8	1	0	0	0	12	4	9	0	0	0	15	11	0	9	0	0	10	2	5	0	0	1	0	23	0	1	8	0	0	0	7	0	0	1	0	0	0	0	1	0	0	0	0	0	1	16	0	20	0	0	0	23	1	8	0	0	0	1	0	0	0	0	0	0	0	1	0	0	1	0	33	2	0	0	0	0	3	0	1	0	2	1	0	0	3	1	2	1	0	0	3	0	1	34	2	0	0	13	0	0	3	0	0	1	1	0	10	0	0	0	0	0	0	1	0	0	0	0	4	0	1	0	28	0	0	0	0	0	0	18	27	0	0	0	0	25	4	0	0	10	0	0	0	0	0	0	0	2	0	0	0	0	8	0	22	0	2	0	5	0	0	2	1	0	0	0	0	0	10	0	0	0	8	0	0	7	0	0	0	1	0	0	41
+ENSDARG00000001889	0	1	2	0	0	0	0	0	0	0	0	0	0	9	17	2	0	0	0	30	30	0	2	0	0	14	0	6	0	0	1	0	12	0	0	14	0	0	0	1	3	0	0	0	0	0	0	0	0	0	0	0	0	0	16	0	31	0	0	0	23	2	9	0	0	0	1	0	1	0	0	0	1	0	0	0	0	0	0	37	1	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	17	3	0	0	21	0	1	0	0	1	0	0	0	8	0	0	0	0	0	0	0	0	0	0	0	19	0	0	0	1	0	0	0	0	0	1	6	37	0	0	0	0	36	2	4	1	1	0	0	0	0	0	0	0	1	0	0	0	0	16	0	19	0	2	0	12	0	0	0	0	0	0	0	0	0	28	0	0	0	1	0	0	11	0	0	0	0	0	0	15
+ENSDARG00000036577	0	0	2	0	0	2	0	1	0	0	4	0	0	10	16	4	0	2	1	45	8	0	9	0	0	2	0	6	0	0	1	2	15	0	0	6	0	0	0	8	1	0	1	0	0	0	0	0	0	0	0	0	0	0	18	0	20	0	0	0	29	2	15	0	0	0	1	0	0	0	0	0	0	0	0	0	0	1	0	8	0	0	0	0	0	3	0	1	1	0	0	10	1	0	0	0	0	0	0	0	0	0	34	4	0	0	10	0	0	4	0	1	0	0	0	6	0	0	1	0	0	0	1	0	0	0	0	7	0	0	0	0	0	0	0	0	0	0	12	27	0	0	0	0	20	4	2	0	9	1	0	0	1	0	0	0	3	2	0	0	2	9	0	14	0	4	0	23	1	0	0	0	5	0	0	0	5	6	0	0	0	13	1	0	3	0	1	0	0	0	0	26
+ENSDARG00000075542	0	0	1	0	0	0	0	0	7	2	2	0	0	1	11	3	0	0	0	18	12	0	7	1	0	6	0	6	0	1	1	0	25	1	0	8	0	0	0	0	3	0	0	0	1	0	0	0	0	0	0	0	0	0	11	0	3	0	0	1	31	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	108	1	0	0	0	0	0	0	0	1	0	1	2	0	0	1	0	0	0	0	1	0	0	0	0	1	0	13	0	0	1	0	1	0	0	1	6	0	0	1	0	0	0	0	0	0	0	0	4	1	0	0	2	0	0	0	0	0	0	5	5	0	1	0	0	6	2	1	0	9	0	1	0	0	0	0	0	11	1	0	0	0	5	0	9	0	5	0	6	4	0	1	4	0	2	0	0	7	2	0	0	0	1	0	0	1	0	0	0	0	0	0	112
+ENSDARG00000029150	0	1	3	0	0	0	0	0	20	0	2	0	0	4	2	4	0	6	1	14	15	0	4	3	0	31	3	5	0	1	1	1	11	0	0	6	1	0	0	4	6	0	7	0	0	0	1	0	0	0	1	0	0	0	13	0	19	0	0	0	14	0	6	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	22	0	0	0	0	0	3	0	0	0	5	2	0	2	0	1	6	1	0	1	3	0	1	11	0	0	0	19	0	0	1	0	0	0	0	0	5	0	0	0	0	0	0	0	0	0	0	0	18	2	0	0	1	0	0	0	0	0	0	7	46	1	0	0	0	10	6	5	0	7	0	0	0	0	0	1	0	18	0	0	0	0	3	0	18	0	0	0	5	2	0	1	3	4	0	0	0	1	12	0	1	0	5	1	0	2	0	0	0	0	0	0	16
+ENSDARG00000016494	0	0	0	0	0	0	1	0	2	0	0	0	0	4	20	0	0	0	0	22	3	0	5	0	0	0	0	19	0	0	1	0	20	0	1	6	0	0	0	0	3	0	0	0	0	0	0	0	0	0	0	0	0	0	12	1	5	0	0	1	50	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	10	1	0	0	0	0	4	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	3	0	0	0	1	0	0	0	0	1	1	0	0	8	0	0	1	0	0	0	0	0	0	0	0	7	0	0	0	0	0	0	0	1	0	0	8	134	0	0	0	0	35	5	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	7	2	2	0	1	0	0	1	0	2	0	1	0	0	0	3	16	0	0	0	9	0	0	1	0	0	0	0	0	0	26
+ENSDARG00000021864	0	0	0	0	0	0	0	0	47	0	0	0	0	1	2	7	0	2	3	13	11	0	0	3	2	18	0	2	0	0	1	1	6	0	0	19	0	1	0	5	3	0	8	1	0	0	0	0	0	0	0	1	0	0	0	0	5	0	0	0	8	1	11	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	11	0	0	0	0	0	0	0	0	0	9	2	1	3	0	1	8	0	0	0	5	1	0	5	1	0	0	48	0	1	0	1	1	4	1	0	0	0	0	0	0	1	0	0	0	0	0	0	7	0	0	0	5	0	0	0	0	0	0	5	7	0	0	8	0	10	1	11	0	2	0	0	0	0	0	0	0	39	1	0	0	0	4	1	10	0	0	0	3	1	0	2	23	7	0	0	0	4	4	0	0	0	1	0	0	12	0	0	0	0	0	0	6
+ENSDARG00000103057	0	0	1	0	0	0	0	1	5	0	0	0	0	4	16	4	0	0	0	22	12	0	3	0	0	0	2	3	0	1	0	0	20	0	0	6	0	0	0	1	2	0	0	0	0	0	0	0	0	1	0	0	0	0	22	0	12	0	0	0	8	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	33	0	0	0	0	0	0	0	0	0	0	2	0	1	1	0	3	1	0	1	0	0	1	26	1	0	0	21	0	0	0	0	0	1	0	0	11	0	0	0	0	0	0	1	1	0	0	0	13	0	0	0	2	0	0	0	1	0	0	13	2	0	0	0	0	43	2	2	0	1	0	0	0	1	0	0	0	1	0	0	0	0	0	0	14	0	6	0	24	4	0	0	0	0	0	0	0	2	21	0	0	0	1	1	0	9	0	3	0	0	0	0	27
+ENSDARG00000051783	1	0	0	0	0	1	1	0	46	0	3	0	0	7	9	6	0	1	3	8	9	0	1	1	0	29	0	3	0	0	0	0	7	0	0	13	0	0	0	1	4	0	4	0	0	0	0	0	0	1	0	3	0	0	8	0	12	0	3	0	3	0	9	0	0	0	0	0	0	0	0	1	0	0	3	0	0	0	1	19	0	0	0	0	0	3	0	1	0	2	0	0	1	0	0	5	0	0	0	1	0	0	5	4	0	0	35	0	0	0	2	0	1	0	0	3	0	0	0	0	1	0	0	0	0	0	0	9	0	0	0	5	0	0	0	0	0	0	9	9	0	0	3	0	1	3	7	1	0	1	0	0	0	0	0	0	43	0	1	0	0	3	0	8	0	0	0	2	0	0	3	10	5	0	0	0	1	5	0	0	0	2	0	0	6	0	0	0	1	0	0	8
+ENSDARG00000009212	0	2	3	0	0	0	0	0	50	0	1	0	0	3	4	4	0	3	0	21	10	0	4	1	1	29	0	2	0	0	0	1	4	0	0	7	0	0	0	2	8	0	3	0	0	0	1	0	0	0	0	0	1	0	2	0	16	0	0	0	9	0	8	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	12	3	0	0	0	0	3	1	0	0	1	0	1	3	2	0	5	0	0	1	2	0	0	7	0	0	0	18	0	0	1	0	1	0	0	0	2	0	0	0	0	0	0	0	2	0	0	0	11	0	0	0	5	0	0	0	0	0	1	4	10	0	1	4	0	10	4	11	0	6	0	0	1	1	0	0	0	24	1	0	0	1	6	1	9	0	2	0	9	1	0	1	7	2	0	0	0	4	3	3	0	0	2	2	0	5	0	1	0	1	1	0	10
+ENSDARG00000021124	0	1	9	0	0	0	1	0	9	0	1	0	0	7	5	7	0	3	0	15	38	0	4	1	0	15	0	4	0	0	0	0	6	0	0	11	0	0	0	3	6	0	2	0	0	0	0	0	0	0	0	1	0	1	9	1	10	0	0	0	9	0	10	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	21	1	0	0	1	0	0	0	0	0	4	1	0	1	0	2	3	0	1	0	3	0	0	28	2	0	0	25	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	11	1	0	0	1	0	0	0	0	0	0	11	21	0	0	1	0	10	2	2	0	5	0	1	0	0	0	0	0	13	0	0	0	0	9	0	5	0	0	0	5	0	0	0	0	0	0	1	0	1	10	0	0	0	5	0	1	4	0	1	0	0	0	0	17
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.element.custom.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,6 @@
+	cell1	cell2	cell3	cell4	cell5	cell6	cell7	cell8	cell9
+gene1	1.100000	0	1.129692	-10.100000	1.100000	1.037630	0.000000	0	0.000000
+gene2	0.397940	0	1.159040	1.050428	1.065051	1.070787	1.146779	0	0.000000
+gene3	1.150515	0	1.159040	1.157790	1.049237	1.123798	1.109687	0	1.020180
+gene4	0.000000	0	0.000000	0.000000	0.000000	0.000000	0.000000	0	0.000000
+gene5	1.000000	0	0.000000	-10.000000	1.006008	1.129692	0.000000	0	1.146712
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.element.scalerem5.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,6 @@
+	cell1	cell2	cell3	cell4	cell5	cell6	cell7	cell8	cell9
+gene1	0.00	0	1	4.90	0	1.10	0.00	0	0.00
+gene2	0.50	0	3	4.00	0	1.22	4.35	0	0.00
+gene3	2.00	0	3	3.21	0	1.56	3.45	0	1.05
+gene4	0.00	0	0	0.00	0	0.00	0.00	0	0.00
+gene5	1.00	0	0	0.00	0	1.00	0.00	0	1.90
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.fs.colsum.gt10.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,6 @@
+	cell1	cell3	cell4	cell5	cell7
+gene1	10.00	6	-10.10	10	0.00
+gene2	0.50	3	29.00	20	4.35
+gene3	2.00	3	3.21	30	8.45
+gene4	0.00	0	0.00	0	0.00
+gene5	1.00	0	-10.00	440	0.00
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.fs.colsum.neq0.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,6 @@
+	cell1	cell3	cell4	cell5	cell6	cell7	cell9
+gene1	10.00	6	-10.10	10	1.10	0.00	0.00
+gene2	0.50	3	29.00	20	1.22	4.35	0.00
+gene3	2.00	3	3.21	30	1.56	8.45	1.05
+gene4	0.00	0	0.00	0	0.00	0.00	0.00
+gene5	1.00	0	-10.00	440	6.00	0.00	1.90
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.fs.elemgt2.mm2.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,5 @@
+	cell1	cell2	cell3	cell4	cell5	cell6	cell7	cell8	cell9
+gene1	10.00000	0	6	-10.10000	10	1.10000	0.00000	0	0.00000
+gene2	0.50000	0	3	29.00000	20	1.22000	4.35000	0	0.00000
+gene3	2.00000	0	3	3.21000	30	1.56000	8.45000	0	1.05000
+gene5	1.00000	0	0	-10.00000	440	6.00000	0.00000	0	1.90000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.fs.elemnmatch0.mm4.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,6 @@
+	cell1	cell4	cell5	cell6	cell7	cell9
+gene1	10.0	-10.1	10	1.1	0.0	0.0
+gene2	0.5	29.0	20	1.22	4.35	0.0
+gene3	2.0	3.21	30	1.56	8.45	1.05
+gene4	0.0	0.0	0	0.0	0.0	0.0
+gene5	1.0	-10.0	440	6.0	0.0	1.9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.fs.medvalcol.ge2.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,6 @@
+	cell3	cell5
+gene1	6	10
+gene2	3	20
+gene3	3	30
+gene4	0	0
+gene5	0	440
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.fs.rowsum.gt.50.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,3 @@
+	cell1	cell2	cell3	cell4	cell5	cell6	cell7	cell8	cell9
+gene2	0.50	0	3	29.00	20	1.22	4.35	0	0.00
+gene5	1.00	0	0	-10.00	440	6.00	0.00	0	1.90
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.fulltable.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,6 @@
+	cell1	cell2	cell3	cell4	cell5	cell6	cell7	cell8	cell9
+gene1	9.348972		5.043817	-10.251376	9.474774	0.249844	-0.674871		-0.684475
+gene2	-0.151028		2.043817	28.848624	19.474774	0.369844	3.675129		-0.684475
+gene3	1.348972		2.043817	3.058624	29.474774	0.709844	7.775129		0.365525
+gene4	-0.651028		-0.956183	-0.151376	-0.525226	-0.850156	-0.674871		-0.684475
+gene5	0.348972		-0.956183	-10.151376	439.474774	5.149844	-0.674871		1.215525
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.matapp.colcust.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,9 @@
+cell1	14.50
+cell2	0.00
+cell3	15.00
+cell4	12.11
+cell5	520.00
+cell6	11.10
+cell7	12.80
+cell8	0.00
+cell9	2.95
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.matapp.rowmax.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,5 @@
+gene1	10
+gene2	29
+gene3	30
+gene4	0
+gene5	440
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.multiple.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,6 @@
+	cell1	cell2	cell3	cell4	cell5	cell6	cell7	cell8	cell9
+gene1	23.401197	2.995732	15.258097	-17.907465	23.401197	5.249273	2.995732	2.995732	2.995732
+gene2	4.020425	2.995732	9.135494	61.891820	43.688879	5.494944	11.892532	2.995732	2.995732
+gene3	7.091042	2.995732	9.135494	9.564583	63.912023	6.190840	20.248148	2.995732	5.146901
+gene4	2.995732	2.995732	2.995732	2.995732	2.995732	2.995732	2.995732	2.995732	2.995732
+gene5	5.044522	2.995732	2.995732	-17.697415	886.131226	15.258097	2.995732	2.995732	6.886487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.select.colsonly.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,6 @@
+	cell2	cell3	cell4	cell2	cell2
+gene1	0	6	-10.10	0	0
+gene2	0	3	29.00	0	0
+gene3	0	3	3.21	0	0
+gene4	0	0	0.00	0	0
+gene5	0	0	-10.00	0	0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.select.rowsonly.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,5 @@
+	cell1	cell2	cell3	cell4	cell5	cell6	cell7	cell8	cell9
+gene2	0.50	0	3	29.00	20	1.22	4.35	0	0.00
+gene3	2.00	0	3	3.21	30	1.56	8.45	0	1.05
+gene4	0.00	0	0	0.00	0	0.00	0.00	0	0.00
+gene5	1.00	0	0	-10.00	440	6.00	0.00	0	1.90
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.select.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,5 @@
+	cell2	cell3	cell4	cell2	cell2
+gene2	0	3	29.00	0	0
+gene3	0	3	3.21	0	0
+gene4	0	0	0.00	0	0
+gene5	0	0	-10.00	0	0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/small.tsv	Sat Aug 17 16:25:37 2019 -0400
@@ -0,0 +1,6 @@
+	cell1	cell2	cell3	cell4	cell5	cell6	cell7	cell8	cell9
+gene1	10	0	6	-10.1	10	1.1	0	0	0
+gene2	0.5	0	3	29	20	1.22	4.35	0	0
+gene3	2	0	3	3.21	30	1.56	8.45	0	1.05
+gene4	0	0	0	0	0	0	0	0	0
+gene5	1	0	0	-10	440	6	0	0	1.9