changeset 25:bfbaf823be4c

Change metagenomics datatypes to include labels and groups metadata. change Mothur tool configs to get label and group select options from a data_meta filter rather than using the options from_dataset attribute. This grealty decreases memory demand for the galaxy server.
author Jim Johnson <jj@umn.edu>
date Wed, 16 May 2012 12:28:44 -0500
parents 09740be2bc9c
children 5c77423823cb
files mothur/lib/galaxy/datatypes/metagenomics.py mothur/tools/mothur/bin.seqs.xml mothur/tools/mothur/classify.otu.xml mothur/tools/mothur/collect.shared.xml mothur/tools/mothur/collect.single.xml mothur/tools/mothur/consensus.seqs.xml mothur/tools/mothur/corr.axes.xml mothur/tools/mothur/count.groups.xml mothur/tools/mothur/count.seqs.xml mothur/tools/mothur/dist.shared.xml mothur/tools/mothur/get.groups.xml mothur/tools/mothur/get.otulist.xml mothur/tools/mothur/get.oturep.xml mothur/tools/mothur/get.otus.xml mothur/tools/mothur/get.rabund.xml mothur/tools/mothur/get.relabund.xml mothur/tools/mothur/get.sabund.xml mothur/tools/mothur/get.sharedseqs.xml mothur/tools/mothur/heatmap.bin.xml mothur/tools/mothur/heatmap.sim.xml mothur/tools/mothur/indicator.xml mothur/tools/mothur/libshuff.xml mothur/tools/mothur/make.design.xml mothur/tools/mothur/make.shared.xml mothur/tools/mothur/merge.groups.xml mothur/tools/mothur/metastats.xml mothur/tools/mothur/normalize.shared.xml mothur/tools/mothur/otu.association.xml mothur/tools/mothur/otu.hierarchy.xml mothur/tools/mothur/parse.list.xml mothur/tools/mothur/parsimony.xml mothur/tools/mothur/pca.xml mothur/tools/mothur/phylo.diversity.xml mothur/tools/mothur/rarefaction.shared.xml mothur/tools/mothur/rarefaction.single.xml mothur/tools/mothur/remove.groups.xml mothur/tools/mothur/remove.otus.xml mothur/tools/mothur/remove.rare.xml mothur/tools/mothur/sens.spec.xml mothur/tools/mothur/split.abund.xml mothur/tools/mothur/split.groups.xml mothur/tools/mothur/sub.sample.xml mothur/tools/mothur/summary.shared.xml mothur/tools/mothur/summary.single.xml mothur/tools/mothur/tree.shared.xml mothur/tools/mothur/unifrac.unweighted.xml mothur/tools/mothur/unifrac.weighted.xml mothur/tools/mothur/venn.xml
diffstat 48 files changed, 310 insertions(+), 395 deletions(-) [+]
line wrap: on
line diff
--- a/mothur/lib/galaxy/datatypes/metagenomics.py	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/lib/galaxy/datatypes/metagenomics.py	Wed May 16 12:28:44 2012 -0500
@@ -18,13 +18,42 @@
 from galaxy import util
 from galaxy.datatypes.images import Html
 
+
 log = logging.getLogger(__name__)
 
 
 ## Mothur Classes 
 
-class Otu( Tabular ):
+class Otu( Text ):
     file_ext = 'otu'
+    MetadataElement( name="columns", default=0, desc="Number of columns", readonly=True, visible=True, no_value=0 )
+    MetadataElement( name="labels", default=[], desc="Label Names", readonly=True, visible=True, no_value=[] )
+    def __init__(self, **kwd):
+        Text.__init__( self, **kwd )
+    def set_meta( self, dataset, overwrite = True, **kwd ):
+        if dataset.has_data():
+            label_names = set()
+            ncols = 0
+            data_lines = 0
+            comment_lines = 0
+            try:
+                fh = open( dataset.file_name )
+                for line in fh:
+                    fields = line.strip().split('\t')
+                    if len(fields) >= 2: 
+                        data_lines += 1
+                        ncols = max(ncols,len(fields))
+                        label_names.add(fields[0])
+                    else:
+                        comment_lines += 1
+                # Set the discovered metadata values for the dataset
+                dataset.metadata.data_lines = data_lines
+                dataset.metadata.columns = ncols
+                dataset.metadata.labels = []
+                dataset.metadata.labels += label_names
+                dataset.metadata.labels.sort()
+            finally:
+                fh.close()
 
     def sniff( self, filename ):
         """
@@ -63,10 +92,25 @@
 
 class OtuList( Otu ):
     file_ext = 'list'
+    def __init__(self, **kwd):
+        Otu.__init__( self, **kwd )
+    def init_meta( self, dataset, copy_from=None ):
+        Otu.init_meta( self, dataset, copy_from=copy_from )
+    def set_meta( self, dataset, overwrite = True, **kwd ):
+        Otu.set_meta(self,dataset, overwrite = True, **kwd )
+        """
+        # too many columns to be stored in metadata
+        if dataset != None and dataset.metadata.columns > 2:
+            for i in range(2,dataset.metadata.columns):
+               dataset.metadata.column_types[i] = 'str'
+        """
 
 class Sabund( Otu ):
     file_ext = 'sabund'
-
+    def __init__(self, **kwd):
+        Otu.__init__( self, **kwd )
+    def init_meta( self, dataset, copy_from=None ):
+        Otu.init_meta( self, dataset, copy_from=copy_from )
     def sniff( self, filename ):
         """
         Determines whether the file is a otu (operational taxonomic unit) format
@@ -108,33 +152,71 @@
 
 class Rabund( Sabund ):
     file_ext = 'rabund'
+    def __init__(self, **kwd):
+        Sabund.__init__( self, **kwd )
+    def init_meta( self, dataset, copy_from=None ):
+        Sabund.init_meta( self, dataset, copy_from=copy_from )
 
 class GroupAbund( Otu ):
     file_ext = 'grpabund'
+    MetadataElement( name="groups", default=[], desc="Group Names", readonly=True, visible=True, no_value=[] )
+    def __init__(self, **kwd):
+        Otu.__init__( self, **kwd )
+        # self.column_names[0] = ['label']
+        # self.column_names[1] = ['group']
+        # self.column_names[2] = ['count']
+    """
+    def init_meta( self, dataset, copy_from=None ):
+        Otu.init_meta( self, dataset, copy_from=copy_from )
+    """
     def init_meta( self, dataset, copy_from=None ):
         Otu.init_meta( self, dataset, copy_from=copy_from )
     def set_meta( self, dataset, overwrite = True, skip=1, max_data_lines = 100000, **kwd ):
         # See if file starts with header line
         if dataset.has_data():
+            label_names = set()
+            group_names = set()
+            data_lines = 0
+            comment_lines = 0
+            ncols = 0
             try:
                 fh = open( dataset.file_name )
                 line = fh.readline()
-                line = line.strip()
-                linePieces = line.split('\t')
-                if linePieces[0] == 'label' and linePieces[1] == 'Group':
+                fields = line.strip().split('\t')
+                ncols = max(ncols,len(fields))
+                if fields[0] == 'label' and fields[1] == 'Group':
                     skip=1
+                    comment_lines += 1
                 else:
                     skip=0
+                    data_lines += 1
+                    label_names.add(fields[0])
+                    group_names.add(fields[1])
+                for line in fh:
+                    data_lines += 1
+                    fields = line.strip().split('\t')
+                    ncols = max(ncols,len(fields))
+                    label_names.add(fields[0])
+                    group_names.add(fields[1])
+                # Set the discovered metadata values for the dataset
+                dataset.metadata.data_lines = data_lines
+                dataset.metadata.columns = ncols
+                dataset.metadata.labels = []
+                dataset.metadata.labels += label_names
+                dataset.metadata.labels.sort()
+                dataset.metadata.groups = []
+                dataset.metadata.groups += group_names
+                dataset.metadata.groups.sort()
+                dataset.metadata.skip = skip
             finally:
                 fh.close()
-        Otu.set_meta( self, dataset, overwrite, skip, max_data_lines, **kwd)
+
     def sniff( self, filename, vals_are_int=False):
         """
         Determines whether the file is a otu (operational taxonomic unit) Shared format
         label<TAB>group<TAB>count[<TAB>value(1..n)]
         The first line is column headings as of Mothur v 1.20
         """
-        log.info( "sniff GroupAbund vals_are_int %s" % vals_are_int)
         try:
             fh = open( filename )
             count = 0
@@ -174,8 +256,10 @@
 
 class SharedRabund( GroupAbund ):
     file_ext = 'shared'
-
-
+    def __init__(self, **kwd):
+        GroupAbund.__init__( self, **kwd )
+    def init_meta( self, dataset, copy_from=None ):
+        GroupAbund.init_meta( self, dataset, copy_from=copy_from )
     def sniff( self, filename ):
         """
         Determines whether the file is a otu (operational taxonomic unit) Shared format
@@ -184,13 +268,15 @@
         """
         # return GroupAbund.sniff(self,filename,True)
         isme = GroupAbund.sniff(self,filename,True)
-        log.info( "is SharedRabund %s" % isme)
         return isme
         
 
 class RelAbund( GroupAbund ):
     file_ext = 'relabund'
-
+    def __init__(self, **kwd):
+        GroupAbund.__init__( self, **kwd )
+    def init_meta( self, dataset, copy_from=None ):
+        GroupAbund.init_meta( self, dataset, copy_from=copy_from )
     def sniff( self, filename ):
         """
         Determines whether the file is a otu (operational taxonomic unit) Relative Abundance format
@@ -199,7 +285,6 @@
         """
         # return GroupAbund.sniff(self,filename,False)
         isme = GroupAbund.sniff(self,filename,False)
-        log.info( "is RelAbund %s" % isme)
         return isme
 
 class SecondaryStructureMap(Tabular):
@@ -346,8 +431,21 @@
 class DistanceMatrix( Text ):
     file_ext = 'dist'
     """Add metadata elements"""
-    MetadataElement( name="sequence_count", default=0, desc="Number of sequences", readonly=False, optional=True, no_value=0 )
+    MetadataElement( name="sequence_count", default=0, desc="Number of sequences", readonly=True, visible=True, optional=True, no_value='?' )
+
+    def init_meta( self, dataset, copy_from=None ):
+        Text.init_meta( self, dataset, copy_from=copy_from )
 
+    def set_meta( self, dataset, overwrite = True, skip = 0, **kwd ):
+        Text.set_meta(self, dataset,overwrite = overwrite, skip = skip, **kwd )
+        try:
+            fh = open( dataset.file_name )
+            line = fh.readline().strip().strip()
+            dataset.metadata.sequence_count = int(line) 
+        except Exception, e:
+            log.warn("DistanceMatrix set_meta %s" % e)
+        finally:
+            fh.close()
 
 class LowerTriangleDistanceMatrix(DistanceMatrix):
     file_ext = 'lower.dist'
@@ -355,6 +453,9 @@
         """Initialize secondary structure map datatype"""
         DistanceMatrix.__init__( self, **kwd )
 
+    def init_meta( self, dataset, copy_from=None ):
+        DistanceMatrix.init_meta( self, dataset, copy_from=copy_from )
+
     def sniff( self, filename ):
         """
         Determines whether the file is a lower-triangle distance matrix (phylip) format
@@ -396,17 +497,13 @@
             fh.close()
         return False
 
-class SquareDistanceMatrix(DistanceMatrix,Tabular):
+class SquareDistanceMatrix(DistanceMatrix):
     file_ext = 'square.dist'
-    sequence_count = -1
 
     def __init__(self, **kwd):
-        """Initialize secondary structure map datatype"""
-        Tabular.__init__( self, **kwd )
+        DistanceMatrix.__init__( self, **kwd )
     def init_meta( self, dataset, copy_from=None ):
-        Text.init_meta( self, dataset, copy_from=copy_from )
-    def set_meta( self, dataset, overwrite = True, skip = None, **kwd ):
-        dataset.metadata.sequences = 0 
+        DistanceMatrix.init_meta( self, dataset, copy_from=copy_from )
 
     def sniff( self, filename ):
         """
@@ -460,7 +557,8 @@
         Tabular.__init__( self, **kwd )
         self.column_names = ['Sequence','Sequence','Distance']
         self.column_types = ['str','str','float']
-        self.comment_lines = 1
+    def set_meta( self, dataset, overwrite = True, skip = None, **kwd ):
+        Tabular.set_meta(self, dataset,overwrite = overwrite, skip = skip, **kwd )
 
     def sniff( self, filename ):
         """
@@ -522,19 +620,30 @@
 
 class Group(Tabular):
     file_ext = 'groups'
+    MetadataElement( name="groups", default=[], desc="Group Names", readonly=True, visible=True, no_value=[] )
     def __init__(self, **kwd):
-        """Name file shows the relationship between a representative sequence(col 1)  and the sequences it represents(col 2)"""
+        """Group file assigns sequence (col 1)  to a group (col 2)"""
         Tabular.__init__( self, **kwd )
         self.column_names = ['name','group']
         self.columns = 2
+    def set_meta( self, dataset, overwrite = True, skip = None, max_data_lines = None, **kwd ):
+        Tabular.set_meta(self, dataset, overwrite, skip, max_data_lines)
+        group_names = set() 
+        try:
+            fh = open( dataset.file_name )
+            for line in fh:
+                fields = line.strip().split('\t')
+                group_names.add(fields[1])
+            dataset.metadata.groups = []
+            dataset.metadata.groups += group_names
+        finally:
+            fh.close()
 
-class Design(Tabular):
+class Design(Group):
     file_ext = 'design'
     def __init__(self, **kwd):
-        """Name file shows the relationship between a group(col 1) and a grouping (col 2), providing a way to merge groups."""
-        Tabular.__init__( self, **kwd )
-        self.column_names = ['group','grouping']
-        self.columns = 2
+        """Design file shows the relationship between a group(col 1) and a grouping (col 2), providing a way to merge groups."""
+        Group.__init__( self, **kwd )
 
 class AccNos(Tabular):
     file_ext = 'accnos'
@@ -634,8 +743,6 @@
         Tabular.__init__( self, **kwd )
         self.column_names = ['num','ten','twentyfive','fifty','seventyfive','ninetyfive','ninetynine']
         self.column_types = ['int','float','float','float','float','float','float']
-    def set_meta( self, dataset, overwrite = True, skip = None, **kwd ):
-        log.info( "Mothur Quantile set_meta %s" % kwd)
     def sniff( self, filename ):
         """
         Determines whether the file is a quantiles tabular format for chimera analysis
--- a/mothur/tools/mothur/bin.seqs.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/bin.seqs.xml	Wed May 16 12:28:44 2012 -0500
@@ -24,9 +24,8 @@
   <param name="otu" type="data" format="list" label="list - OTU List"/>
   <param name="name" type="data" format="names" optional="true" label="name - Sequences Name reference"/>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="group" type="data" format="group" optional="true" label="group - Sequences Name reference"/>
--- a/mothur/tools/mothur/classify.otu.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/classify.otu.xml	Wed May 16 12:28:44 2012 -0500
@@ -67,9 +67,8 @@
    </when>
   </conditional>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="cutoff" type="integer" value="60" label="cutoff - Confindence percentage cutoff between 1 and 100">
--- a/mothur/tools/mothur/collect.shared.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/collect.shared.xml	Wed May 16 12:28:44 2012 -0500
@@ -26,20 +26,14 @@
   <param name="otu" type="data" format="shared" label="shared - OTU Shared"/>
   <param name="label" type="select" label="label - OTU Label filter" multiple="true">
    <help>To filter: select labels to include</help>
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="groups" type="select" label="groups - Groups filter (uses all groups if none are selected)" multiple="true">
    <help>To filter: select select at least 2 groups</help>
-   <options from_dataset="otu">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="otu" key="groups" />
    </options>
   </param>
   <param name="calc" type="select" label="calc - Calculators (Uses defaults if none are selected)" multiple="true">
--- a/mothur/tools/mothur/collect.single.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/collect.single.xml	Wed May 16 12:28:44 2012 -0500
@@ -37,10 +37,8 @@
  <inputs>
   <param name="otu" type="data" format="list,rabund,sabund,shared" label="list,rabund,sabund,shared - OTU List"/>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="calc" type="select" label="calc - Calculators (Uses defaults if none selected)" multiple="true">
--- a/mothur/tools/mothur/consensus.seqs.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/consensus.seqs.xml	Wed May 16 12:28:44 2012 -0500
@@ -35,9 +35,8 @@
    <when value="yes">
     <param name="list" type="data" format="list" label="list - OTU List"/>
     <param name="label" type="select" optional="true" label="label - OTU Labels" multiple="true">
-     <options from_dataset="list">
-      <column name="name" index="0"/>
-      <column name="value" index="0"/>
+     <options>
+      <filter type="data_meta" ref="list" key="labels" />
      </options>
     </param>
    </when>
--- a/mothur/tools/mothur/corr.axes.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/corr.axes.xml	Wed May 16 12:28:44 2012 -0500
@@ -38,19 +38,13 @@
    <when value="shared">
      <param name="otu" type="data" format="shared,relabund" label="shared or relabund - OTU Shared or Relabund"/>
      <param name="label" type="select" label="label - OTU Labels" multiple="true">
-      <options from_dataset="otu">
-       <column name="name" index="0"/>
-       <column name="value" index="0"/>
-       <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-       <filter type="unique_value" name="unq_lbl" column="0" />
+      <options>
+       <filter type="data_meta" ref="otu" key="labels" />
       </options>
      </param>
      <param name="groups" type="select" label="groups - Pairwise comparision groups" multiple="true">
-      <options from_dataset="otu">
-       <column name="name" index="1"/>
-       <column name="value" index="1"/>
-       <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-       <filter type="unique_value" name="unq_grp" column="1" />
+      <options>
+       <filter type="data_meta" ref="otu" key="groups" />
       </options>
      </param>
    </when>
--- a/mothur/tools/mothur/count.groups.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/count.groups.xml	Wed May 16 12:28:44 2012 -0500
@@ -32,10 +32,8 @@
    <when value="groups">
     <param name="groups" type="select" label="groups - Pick groups to include" multiple="true">
      <help>All groups displayed if none are selected.</help>
-     <options from_dataset="group">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="group" key="groups" />
      </options>
     </param>
    </when>
--- a/mothur/tools/mothur/count.seqs.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/count.seqs.xml	Wed May 16 12:28:44 2012 -0500
@@ -23,10 +23,8 @@
    <param name="group" type="data" format="groups" label="group - Group file for the tree"/>
    <param name="groups" type="select" label="groups - Groups to display" multiple="true">
     <help>All groups displayed if none are selected.</help>
-    <options from_dataset="group">
-     <column name="name" index="1"/>
-     <column name="value" index="1"/>
-     <filter type="unique_value" name="unq_grp" column="1" />
+    <options>
+     <filter type="data_meta" ref="group" key="groups" />
     </options>
    </param>
    </when>
--- a/mothur/tools/mothur/dist.shared.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/dist.shared.xml	Wed May 16 12:28:44 2012 -0500
@@ -36,19 +36,13 @@
   <!-- list,group  or shared -->
   <param name="otu" type="data" format="shared" label="shared - OTU Shared"/>
   <param name="label" type="select" label="label - OTU Labels to calculate" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="groups" type="select" label="groups - Groups to analyze" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="otu" key="groups" />
    </options>
   </param>
   <param name="calc" type="select" label="calc - Calculators (Uses defaults if none selected)" multiple="true">
--- a/mothur/tools/mothur/get.groups.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/get.groups.xml	Wed May 16 12:28:44 2012 -0500
@@ -53,10 +53,8 @@
    </param>
    <when value="groups">
     <param name="groups" type="select" label="groups - Pick groups to include" multiple="true">
-     <options from_dataset="group_in">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="group_in" key="groups" />
      </options>
     </param>
    </when>
--- a/mothur/tools/mothur/get.otulist.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/get.otulist.xml	Wed May 16 12:28:44 2012 -0500
@@ -22,9 +22,8 @@
  <inputs>
   <param name="list_in" type="data" format="list" label="list - OTU List"/>
   <param name="label" type="select" multiple="true" label="label - select OTU distance labels" help="By default, uses all if none are selected.">
-   <options from_dataset="list_in">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="list_in" key="labels" />
    </options>
   </param>
   <param name="sort" type="select" label="sort - select the output format">
--- a/mothur/tools/mothur/get.oturep.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/get.oturep.xml	Wed May 16 12:28:44 2012 -0500
@@ -65,18 +65,15 @@
    <when value="yes">
     <param name="group" type="data" format="groups" label="group - Group file for the OTU List"/>
     <param name="groups" type="select" label="groups - Group Selection (all used if none are selected)" multiple="true">
-     <options from_dataset="group">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="group" key="groups" />
      </options>
     </param>
    </when>
   </conditional> <!-- pick -->
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu_list">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="otu_list" key="labels" />
    </options>
   </param>
   <param name="sorted" type="select" label="sorted - Sort Sequences by">
--- a/mothur/tools/mothur/get.otus.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/get.otus.xml	Wed May 16 12:28:44 2012 -0500
@@ -27,9 +27,8 @@
   <param name="group_in" type="data" format="groups" label="group - Groups"/>
   <param name="list_in" type="data" format="list" label="list - OTU List"/>
   <param name="label" type="select" label="label - OTU Labels" >
-   <options from_dataset="list_in">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="list_in" key="labels" />
    </options>
   </param>
   <conditional name="groupnames">
@@ -40,10 +39,8 @@
    <when value="groups">
     <param name="groups" type="select" label="groups - Pick groups to include" multiple="true"  force_select="true">
      <help>At least one group must be selected</help>
-     <options from_dataset="group_in">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="group_in" key="groups" />
      </options>
     </param>
    </when>
--- a/mothur/tools/mothur/get.rabund.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/get.rabund.xml	Wed May 16 12:28:44 2012 -0500
@@ -18,9 +18,8 @@
  <inputs>
   <param name="otu" type="data" format="list,sabund" label="list,sabund - List or Sabund"/>
   <param name="label" type="select" multiple="true" label="label - select OTU distance labels" help="(all used if none are selected)">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="sorted" type="boolean" checked="false" truevalue="--sorted=true" falsevalue="" label="sorted - sort by abundance" 
--- a/mothur/tools/mothur/get.relabund.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/get.relabund.xml	Wed May 16 12:28:44 2012 -0500
@@ -20,19 +20,13 @@
   <param name="otu" type="data" format="shared" label="shared - OTU Shared" 
     help="Use Make.shared to create a shared file from a list and a group file"/>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="groups" type="select" label="groups - Groups to consider" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="otu" key="groups" />
    </options>
   </param>
   <param name="scale" type="select" label="scale - Scale by">
--- a/mothur/tools/mothur/get.sabund.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/get.sabund.xml	Wed May 16 12:28:44 2012 -0500
@@ -17,9 +17,8 @@
  <inputs>
   <param name="otu" type="data" format="list,rabund" label="list,rabund - List or Rabund"/>
   <param name="label" type="select" multiple="true" label="label - select OTU distance labels" help="(all used if none are selected)">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
  </inputs>
--- a/mothur/tools/mothur/get.sharedseqs.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/get.sharedseqs.xml	Wed May 16 12:28:44 2012 -0500
@@ -39,9 +39,8 @@
   <param name="group" type="data" format="groups" label="group - "/>
   <param name="label" type="select" optional="true" label="label - Select OTU Labels to include" multiple="true" 
      help="By default all are included if no selection is made.">
-   <options from_dataset="list">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="list" key="labels" />
    </options>
   </param>
   <param name="fasta" type="data" format="fasta" optional="true" label="fasta - Dataset"/>
@@ -55,19 +54,15 @@
    <when value="all"/>
    <when value="unique">
     <param name="groups" type="select" label="unique - Group to analyze" multiple="true">
-     <options from_dataset="group">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="group" key="groups" />
      </options>
     </param>
    </when>
    <when value="shared">
     <param name="groups" type="select" label="shared - Groups to analyze" multiple="true">
-     <options from_dataset="group">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="group" key="groups" />
      </options>
     </param>
    </when>
--- a/mothur/tools/mothur/heatmap.bin.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/heatmap.bin.xml	Wed May 16 12:28:44 2012 -0500
@@ -49,29 +49,21 @@
    <when value="default">
      <param name="otu" type="data" format="shared,relabund" label="shared,relabund - OTU List"/>
      <param name="groups" type="select" label="groups - Groups to condider" multiple="true">
-      <options from_dataset="otu">
-       <column name="name" index="1"/>
-       <column name="value" index="1"/>
-       <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-       <filter type="unique_value" name="unq_grp" column="1" />
+      <options>
+       <filter type="data_meta" ref="otu" key="groups" />
       </options>
      </param>
      <param name="label" type="select" label="label - OTU Labels" multiple="true">
-      <options from_dataset="otu">
-       <column name="name" index="0"/>
-       <column name="value" index="0"/>
-       <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-       <filter type="unique_value" name="unq_lbl" column="0" />
+      <options>
+       <filter type="data_meta" ref="otu" key="labels" />
       </options>
      </param>
    </when>
    <when value="no">
      <param name="otu" type="data" format="list,rabund,sabund" label="list,rabund,sabund - OTU List"/>
      <param name="label" type="select" label="label - OTU Labels" multiple="true">
-      <options from_dataset="otu">
-       <column name="name" index="0"/>
-       <column name="value" index="0"/>
-       <filter type="unique_value" name="unq_lbl" column="0" />
+      <options>
+       <filter type="data_meta" ref="otu" key="labels" />
       </options>
      </param>
    </when>
@@ -79,17 +71,13 @@
      <param name="otu" type="data" format="list,rabund,sabund" label="list,rabund,sabund - OTU List"/>
      <param name="otu_group" type="data" format="groups" label="group - Group file for the OTU List"/>
      <param name="groups" type="select" label="groups - Groups to include" multiple="true">
-      <options from_dataset="otu_group">
-       <column name="name" index="1"/>
-       <column name="value" index="1"/>
-       <filter type="unique_value" name="unq_grp" column="1" />
+      <options>
+       <filter type="data_meta" ref="otu_group" key="groups" />
       </options>
      </param>
      <param name="label" type="select" label="label - OTU Labels" multiple="true">
-      <options from_dataset="otu">
-       <column name="name" index="0"/>
-       <column name="value" index="0"/>
-       <filter type="unique_value" name="unq_lbl" column="0" />
+      <options>
+       <filter type="data_meta" ref="otu" key="labels" />
       </options>
      </param>
    </when>
--- a/mothur/tools/mothur/heatmap.sim.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/heatmap.sim.xml	Wed May 16 12:28:44 2012 -0500
@@ -46,19 +46,13 @@
    <when value="shared">
     <param name="otu" type="data" format="shared" label="shared - OTU Shared"/>
     <param name="label" type="select" label="label - OTU Labels" multiple="true">
-      <options from_dataset="otu">
-       <column name="name" index="0"/>
-       <column name="value" index="0"/>
-       <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-       <filter type="unique_value" name="unq_lbl" column="0" />
+      <options>
+       <filter type="data_meta" ref="otu" key="labels" />
       </options>
      </param>
      <param name="groups" type="select" label="groups - Groups to include" multiple="true">
-      <options from_dataset="otu">
-       <column name="name" index="1"/>
-       <column name="value" index="1"/>
-       <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-       <filter type="unique_value" name="unq_grp" column="1" />
+      <options>
+       <filter type="data_meta" ref="otu" key="groups" />
       </options>
      </param>
      <param name="calc" type="select" label="calc - Calculators (Uses defaults if none selected)" multiple="true">
--- a/mothur/tools/mothur/indicator.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/indicator.xml	Wed May 16 12:28:44 2012 -0500
@@ -29,19 +29,13 @@
  <inputs>
   <param name="otu" type="data" format="shared,relabund" label="shared/relabund - Otu dataset"/>
   <param name="label" type="select" optional="true" label="label - OTU Labels" >
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="groups" type="select" optional="true" label="groups - Pick groups to annalyze" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="otu" key="groups" />
    </options>
   </param>
   <param name="tree" type="data" format="tree"  optional="true" label="tree - A newick-formatted tree" 
--- a/mothur/tools/mothur/libshuff.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/libshuff.xml	Wed May 16 12:28:44 2012 -0500
@@ -27,10 +27,8 @@
   <param name="dist" type="data" format="lower.dist,square.dist" label="phylip - Distance Matrix"/>
   <param name="group" type="data" format="groups" label="group - Groups"/>
   <param name="groups" type="select" label="groups - Groups to condider" multiple="true">
-   <options from_dataset="group">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="group" key="groups" />
    </options>
   </param>
   <param name="iters" type="integer" value="10000" label="iters - Number of iterations to try (default 10000)"/>
--- a/mothur/tools/mothur/make.design.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/make.design.xml	Wed May 16 12:28:44 2012 -0500
@@ -7,10 +7,8 @@
     <repeat name="groupings" title="Grouping">
      <param name="name" type="text" label="Name for a new combined grouping"/>
      <param name="groups" type="select" multiple="true" label="Select groups for to include in this grouping">
-      <options from_dataset="source">
-       <column name="name" index="1"/>
-       <column name="value" index="1"/>
-       <filter type="unique_value" name="unq_grp" column="1" />
+      <options>
+       <filter type="data_meta" ref="source" key="groups" />
       </options>
      </param>
     </repeat>
--- a/mothur/tools/mothur/make.shared.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/make.shared.xml	Wed May 16 12:28:44 2012 -0500
@@ -29,16 +29,13 @@
   <param name="group" type="data" format="groups" label="group - "/>
   <param name="label" type="select" optional="true" label="label - Select OTU Labels to include" multiple="true" 
      help="By default all are included if no selection is made.">
-   <options from_dataset="list">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="list" key="labels" />
    </options>
   </param>
   <param name="groups" type="select" label="groups - Groups to include" multiple="true">
-   <options from_dataset="group">
-     <column name="name" index="1"/>
-     <column name="value" index="1"/>
-     <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="group" key="groups" />
    </options>
   </param>
   <!--
--- a/mothur/tools/mothur/merge.groups.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/merge.groups.xml	Wed May 16 12:28:44 2012 -0500
@@ -31,19 +31,13 @@
   <param name="otu" type="data" format="shared" optional="true" label="shared - OTU Shared Dataset"/>
   <param name="group" type="data" format="groups" optional="true" label="group - Group Dataset"/>
   <param name="groups" type="select" optional="true" label="groups - Pick groups to include" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="otu" key="groups" />
    </options>
   </param>
   <param name="label" type="select" label="label - Pick OTU Labels to include" optional="true" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <conditional name="design">
@@ -59,11 +53,8 @@
     <repeat name="groupings" title="Grouping">
      <param name="name" type="text" label="Name for a new combined grouping"/>
      <param name="groups" type="select" multiple="true" label="Select groups for to include in this grouping">
-      <options from_dataset="otu">
-       <column name="name" index="1"/>
-       <column name="value" index="1"/>
-       <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-       <filter type="unique_value" name="unq_grp" column="1" />
+      <options>
+       <filter type="data_meta" ref="otu" key="groups" />
       </options>
      </param>
     </repeat>
--- a/mothur/tools/mothur/metastats.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/metastats.xml	Wed May 16 12:28:44 2012 -0500
@@ -31,28 +31,20 @@
  <inputs>
   <param name="otu" type="data" format="shared" label="shared - OTU Shared"/>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="groups" type="select" label="groups - Groups to consider" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="otu" key="groups" />
    </options>
   </param>
   <param name="design" type="data" format="tabular" label="design - assign groups to new grouping"
          help="design has 2 columns: group(col 1) and grouping(col 2) (separated by a TAB character) use make.design"/>
   <param name="sets" type="select" label="sets - group sets to analyze" multiple="true">
-   <options from_dataset="design">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="design" key="groups" />
    </options>
   </param>
   <param name="iters" type="integer" value="1000" label="iters - Number of randomizations (default 1000)"/>
--- a/mothur/tools/mothur/normalize.shared.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/normalize.shared.xml	Wed May 16 12:28:44 2012 -0500
@@ -27,19 +27,13 @@
  <inputs>
   <param name="otu" type="data" format="shared,relabund" label="shared,relabund - OTU Shared or Relabund file"/>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="groups" type="select" label="groups - Groups to include" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="otu" key="groups" />
    </options>
   </param>
   <param name="norm" type="integer" value="0" label="norm - Number to normalize to (Uses default if &lt; 1)"
--- a/mothur/tools/mothur/otu.association.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/otu.association.xml	Wed May 16 12:28:44 2012 -0500
@@ -25,19 +25,13 @@
  <inputs>
   <param name="otu" type="data" format="shared,relabund" label="shared,relabund - OTU Shared or Relabund file"/>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="groups" type="select" label="groups - Groups to include" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="otu" key="groups" />
    </options>
   </param>
   <param name="method" type="select" label="method - Normalization method">
--- a/mothur/tools/mothur/otu.hierarchy.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/otu.hierarchy.xml	Wed May 16 12:28:44 2012 -0500
@@ -14,16 +14,13 @@
  <inputs>
   <param name="list" type="data" format="list" label="list - OTU List"/>
   <param name="label1" type="select" label="label - OTU Label 1" >
-   <options from_dataset="list">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="list" key="labels" />
    </options>
   </param>
   <param name="label2" type="select" label="label - OTU Label 2" help="Must be different than Label 1">
-   <options from_dataset="list">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="param_value" ref="label1" column="value" keep="false"/>
+   <options>
+    <filter type="data_meta" ref="list" key="labels" />
    </options>
   </param>
   <param name="output" type="select" optional="true" label="output - display the names of the sequences in the otus or the otu numbers">
--- a/mothur/tools/mothur/parse.list.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/parse.list.xml	Wed May 16 12:28:44 2012 -0500
@@ -18,9 +18,8 @@
   <param name="group" type="data" format="groups" label="group - Sequences Name reference"/>
   <param name="label" type="select" optional="true" label="label - To filter: Select OTU Labels to include" multiple="true">
    <help>All labels are included if none are selected</help>
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
  </inputs>
--- a/mothur/tools/mothur/parsimony.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/parsimony.xml	Wed May 16 12:28:44 2012 -0500
@@ -25,10 +25,8 @@
   <param name="group" type="data" format="groups" label="group - Group file for the tree"/>
   <param name="groups" type="select" label="groups - Groups to display" multiple="true" 
          help="By default all are included if no selection is made.">
-   <options from_dataset="group">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="group" key="groups" />
    </options>
   </param>
   <param name="name" type="data" format="names" optional="true" label="name - Sequences Name reference file for the tree"/>
--- a/mothur/tools/mothur/pca.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/pca.xml	Wed May 16 12:28:44 2012 -0500
@@ -23,19 +23,13 @@
  <inputs>
   <param name="otu" type="data" format="shared,relabund" label="shared,relabund - OTU Shared or Relabund file"/>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="groups" type="select" label="groups - Groups to consider" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="otu" key="groups" />
    </options>
   </param>
   <param name="metric" type="boolean" truevalue="" falsevalue="--metric=False" checked="true" label="metric - Calculate pearson correlation coefficient" />
--- a/mothur/tools/mothur/phylo.diversity.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/phylo.diversity.xml	Wed May 16 12:28:44 2012 -0500
@@ -40,10 +40,8 @@
    <param name="group" type="data" format="groups" label="group - Group file for the tree"/>
    <param name="groups" type="select" label="groups - Groups to display" multiple="true">
     <help>All groups displayed if none are selected.</help>
-    <options from_dataset="group">
-     <column name="name" index="1"/>
-     <column name="value" index="1"/>
-     <filter type="unique_value" name="unq_grp" column="1" />
+    <options>
+     <filter type="data_meta" ref="group" key="groups" />
     </options>
    </param>
    </when>
--- a/mothur/tools/mothur/rarefaction.shared.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/rarefaction.shared.xml	Wed May 16 12:28:44 2012 -0500
@@ -23,20 +23,14 @@
  <inputs>
   <param name="otu" type="data" format="shared" label="shared - OTU Shared"/>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="groups" type="select" label="groups - Groups to analyze" multiple="true">
    <help>All groups will be analyzed by default if none are selected</help>
-   <options from_dataset="otu">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="otu" key="groups" />
     <filter type="add_value" name="all" value="all" />
    </options>
   </param>
--- a/mothur/tools/mothur/rarefaction.single.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/rarefaction.single.xml	Wed May 16 12:28:44 2012 -0500
@@ -38,10 +38,8 @@
  <inputs>
   <param name="otu" type="data" format="list,rabund,sabund,shared" label="list,rabund,sabund,shared - OTU List"/>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="calc" type="select" label="calc - Calculators (Uses defaults if none selected)" multiple="true">
--- a/mothur/tools/mothur/remove.groups.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/remove.groups.xml	Wed May 16 12:28:44 2012 -0500
@@ -53,10 +53,8 @@
    </param>
    <when value="groups">
     <param name="groups" type="select" label="groups - Pick groups to remove" multiple="true">
-     <options from_dataset="group_in">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="group_in" key="groups" />
      </options>
     </param>
    </when>
--- a/mothur/tools/mothur/remove.otus.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/remove.otus.xml	Wed May 16 12:28:44 2012 -0500
@@ -27,9 +27,8 @@
   <param name="group_in" type="data" format="groups" label="group - Groups"/>
   <param name="list_in" type="data" format="list" label="list - OTU List"/>
   <param name="label" type="select" label="label - OTU Labels" >
-   <options from_dataset="list_in">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="list_in" key="labels" />
    </options>
   </param>
   <conditional name="groupnames">
@@ -40,10 +39,8 @@
    <when value="groups">
     <param name="groups" type="select" label="groups - Pick groups to remove" multiple="true" force_select="true">
      <help>At least one group must be selected</help>
-     <options from_dataset="group_in">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="group_in" key="groups" />
      </options>
     </param>
    </when>
--- a/mothur/tools/mothur/remove.rare.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/remove.rare.xml	Wed May 16 12:28:44 2012 -0500
@@ -47,20 +47,14 @@
    <when value="shared">
     <param name="otu" type="data" format="shared" label="shared - Otu dataset"/>
     <param name="groups" type="select" optional="true" label="groups - Pick groups to analyze" multiple="true">
-     <options from_dataset="otu">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="otu" key="groups" />
      </options>
     </param>
     <param name="bygroup" type="boolean" truevalue="--bygroup=true" falsevalue="" checked="false" label="bygroup - Remove any OTU that has nseqs or fewer sequences across all groups"/> 
     <param name="label" type="select" multiple="true" optional="true" label="label - OTU Labels" >
-     <options from_dataset="otu">
-      <column name="name" index="0"/>
-      <column name="value" index="0"/>
-      <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-      <filter type="unique_value" name="unq_lbl" column="0" />
+     <options>
+      <filter type="data_meta" ref="otu" key="labels" />
      </options>
     </param>
    </when>
@@ -68,27 +62,21 @@
     <param name="otu" type="data" format="list" label="list - Otu dataset"/>
     <param name="group" type="data" format="groups" label="group - Groups" />
     <param name="groups" type="select" optional="true" label="groups - Pick groups to analyze" multiple="true">
-     <options from_dataset="group">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="group" key="groups" />
      </options>
     </param>
     <param name="label" type="select" multiple="false" optional="true" label="label - OTU Labels" >
-     <options from_dataset="otu">
-      <column name="name" index="0"/>
-      <column name="value" index="0"/>
-      <filter type="unique_value" name="unq_lbl" column="0" />
+     <options>
+      <filter type="data_meta" ref="otu" key="labels" />
      </options>
     </param>
    </when>
    <when value="default">
     <param name="otu" type="data" format="shared,list,rabund,sabund" label="shared,list,rabund,sabund - Otu dataset"/>
     <param name="label" type="select" multiple="true" optional="true" label="label - OTU Labels" >
-     <options from_dataset="otu">
-      <column name="name" index="0"/>
-      <column name="value" index="0"/>
-      <filter type="unique_value" name="unq_lbl" column="0" />
+     <options>
+      <filter type="data_meta" ref="otu" key="labels" />
      </options>
     </param>
    </when>
--- a/mothur/tools/mothur/sens.spec.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/sens.spec.xml	Wed May 16 12:28:44 2012 -0500
@@ -28,9 +28,8 @@
   <param name="dist" type="data" format="dist" label="phylip,column - Distance Matrix"/>
   <param name="label" type="select" optional="true" label="label - Select OTU Labels to include" multiple="true" 
      help="By default all are included if no selection is made.">
-   <options from_dataset="list">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
+   <options>
+    <filter type="data_meta" ref="list" key="labels" />
    </options>
   </param>
   <param name="precision" type="integer" value="100" optional="true" label="precision - Precision for rounding distance values"/>
--- a/mothur/tools/mothur/split.abund.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/split.abund.xml	Wed May 16 12:28:44 2012 -0500
@@ -59,9 +59,8 @@
    <when value="list">
     <param name="input" type="data" format="list" label="list - OTU List"/>
     <param name="label" type="select" label="label - OTU Labels" multiple="true" help="Select OTU Labels to filter out all but selected labels">
-     <options from_dataset="input">
-      <column name="name" index="0"/>
-      <column name="value" index="0"/>
+     <options>
+      <filter type="data_meta" ref="input" key="labels" />
      </options>
     </param>
    </when>
@@ -76,10 +75,8 @@
    <when value="yes">
     <param name="group" type="data" format="groups" label="group - Group dataset"/>
     <param name="groups" type="select" label="groups - Group Selection (all used if none are selected)" multiple="true">
-     <options from_dataset="group">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="group" key="groups" />
      </options>
     </param>
    </when>
--- a/mothur/tools/mothur/split.groups.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/split.groups.xml	Wed May 16 12:28:44 2012 -0500
@@ -21,10 +21,8 @@
   <param name="name" type="data" format="names" label="name - Names to split by group" optional="true"/>
   <param name="group" type="data" format="groups" label="group - Groups"/>
   <param name="groups" type="select" optional="true" label="groups - Pick groups to analyze" multiple="true">
-   <options from_dataset="group">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="group" key="groups" />
    </options>
   </param>
  </inputs>
--- a/mothur/tools/mothur/sub.sample.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/sub.sample.xml	Wed May 16 12:28:44 2012 -0500
@@ -88,10 +88,8 @@
      <when value="yes">
       <param name="group_in" type="data" format="groups" label="group - Groups"/>
       <param name="groups" type="select" optional="true" label="groups - Pick groups to include" multiple="true">
-       <options from_dataset="group_in">
-        <column name="name" index="1"/>
-        <column name="value" index="1"/>
-        <filter type="unique_value" name="unq_grp" column="1" />
+       <options>
+        <filter type="data_meta" ref="group_in" key="groups" />
        </options>
       </param>
       <param name="persample" type="boolean" truevalue="--persample=true" falsevalue="" checked="false" label="persample - select subsample of the same size from each of the groups"/>
@@ -109,56 +107,45 @@
      <when value="yes">
       <param name="group_in" type="data" format="groups" label="group - Groups"/>
       <param name="groups" type="select" optional="true" label="groups - Pick groups to include" multiple="true">
-       <options from_dataset="group_in">
-        <column name="name" index="1"/>
-        <column name="value" index="1"/>
-        <filter type="unique_value" name="unq_grp" column="1" />
+       <options>
+        <filter type="data_meta" ref="group_in" key="groups" />
        </options>
       </param>
       <param name="persample" type="boolean" truevalue="--persample=true" falsevalue="" checked="false" label="persample - select subsample of the same size from each of the groups"/>
      </when> <!-- yes -->
     </conditional> <!-- use_group -->
     <param name="label" type="select" label="label - OTU Labels" optional="true" multiple="true">
-     <options from_dataset="otu_in">
-      <column name="name" index="0"/>
-      <column name="value" index="0"/>
+     <options>
+      <filter type="data_meta" ref="otu_in" key="labels" />
      </options>
     </param>
    </when> <!-- list -->
    <when value="shared">
     <param name="otu_in" type="data" format="shared" label="shared - OTU Shared"/>
     <param name="groups" type="select" optional="true" label="groups - Pick groups to include" multiple="true">
-     <options from_dataset="otu_in">
-      <column name="name" index="1"/>
-      <column name="value" index="1"/>
-      <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-      <filter type="unique_value" name="unq_grp" column="1" />
+     <options>
+      <filter type="data_meta" ref="otu_in" key="groups" />
      </options>
     </param>
     <param name="label" type="select" label="label - OTU Labels" optional="true" multiple="true">
-     <options from_dataset="otu_in">
-      <column name="name" index="0"/>
-      <column name="value" index="0"/>
-      <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-      <filter type="unique_value" name="unq_lbl" column="0" />
+     <options>
+      <filter type="data_meta" ref="otu_in" key="labels" />
      </options>
     </param>
    </when> <!-- shared -->
    <when value="sabund">
     <param name="otu_in" type="data" format="sabund" label="sabund - OTU Species Abundance"/>
     <param name="label" type="select" label="label - OTU Labels" optional="true" multiple="true">
-     <options from_dataset="otu_in">
-      <column name="name" index="0"/>
-      <column name="value" index="0"/>
+     <options>
+      <filter type="data_meta" ref="otu_in" key="labels" />
      </options>
     </param>
    </when> <!-- sabund -->
    <when value="rabund">
     <param name="otu_in" type="data" format="rabund" label="rabund - OTU Relative Abundance"/>
     <param name="label" type="select" label="label - OTU Labels" optional="true" multiple="true">
-     <options from_dataset="otu_in">
-      <column name="name" index="0"/>
-      <column name="value" index="0"/>
+     <options>
+      <filter type="data_meta" ref="otu_in" key="labels" />
      </options>
     </param>
    </when> <!-- rabund -->
--- a/mothur/tools/mothur/summary.shared.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/summary.shared.xml	Wed May 16 12:28:44 2012 -0500
@@ -24,19 +24,13 @@
  <inputs>
   <param name="otu" type="data" format="shared" label="shared - OTU Shared"/>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="groups" type="select" label="groups - Pairwise comparision groups" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="otu" key="groups" />
    </options>
   </param>
   <param name="calc" type="select" label="calc - Calculators (Uses defaults if none selected)" multiple="true">
--- a/mothur/tools/mothur/summary.single.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/summary.single.xml	Wed May 16 12:28:44 2012 -0500
@@ -37,10 +37,8 @@
  <inputs>
   <param name="otu" type="data" format="list,rabund,sabund,shared" label="list,rabund,sabund,shared - OTU List"/>
   <param name="label" type="select" label="label - OTU Labels" multiple="true">
-   <options from_dataset="otu">
-    <column name="name" index="0"/>
-    <column name="value" index="0"/>
-    <filter type="unique_value" name="unq_lbl" column="0" />
+   <options>
+    <filter type="data_meta" ref="otu" key="labels" />
    </options>
   </param>
   <param name="calc" type="select" label="calc - Calculators (Uses defaults if none selected)" multiple="true">
--- a/mothur/tools/mothur/tree.shared.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/tree.shared.xml	Wed May 16 12:28:44 2012 -0500
@@ -53,19 +53,13 @@
      <param name="dist" type="data" format="shared" label="shared - OTU Shared"/>
      <param name="as_datasets" type="boolean" truevalue="yes" falsevalue="no" checked="true" label="Create a new history dataset for each label and calculator"/>
      <param name="label" type="select" label="label - OTU Labels" multiple="true">
-      <options from_dataset="dist">
-       <column name="name" index="0"/>
-       <column name="value" index="0"/>
-       <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-       <filter type="unique_value" name="unq_lbl" column="0" />
+      <options>
+       <filter type="data_meta" ref="dist" key="labels" />
       </options>
      </param>
      <param name="groups" type="select" label="groups - Groups to consider" multiple="true">
-      <options from_dataset="dist">
-       <column name="name" index="1"/>
-       <column name="value" index="1"/>
-       <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-       <filter type="unique_value" name="unq_grp" column="1" />
+      <options>
+       <filter type="data_meta" ref="dist" key="groups" />
       </options>
      </param>
    </when>
--- a/mothur/tools/mothur/unifrac.unweighted.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/unifrac.unweighted.xml	Wed May 16 12:28:44 2012 -0500
@@ -31,10 +31,8 @@
   <param name="group" type="data" format="groups" label="group - Group file for the tree"/>
   <param name="groups" type="select" label="groups - Select groups for pairwise comparisons" multiple="true">
    <help></help>
-   <options from_dataset="group">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="group" key="groups" />
    </options>
   </param>
   <param name="name" type="data" format="names" optional="true" label="name - Names file for the tree"/>
--- a/mothur/tools/mothur/unifrac.weighted.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/unifrac.weighted.xml	Wed May 16 12:28:44 2012 -0500
@@ -30,10 +30,8 @@
   <param name="group" type="data" format="groups" label="group - Group file for the tree"/>
   <param name="groups" type="select" label="groups - Select groups for pairwise comparisons" multiple="true">
    <help></help>
-   <options from_dataset="group">
-    <column name="name" index="1"/>
-    <column name="value" index="1"/>
-    <filter type="unique_value" name="unq_grp" column="1" />
+   <options>
+    <filter type="data_meta" ref="group" key="groups" />
    </options>
   </param>
   <param name="name" type="data" format="names" optional="true" label="name - Names file for the tree"/>
--- a/mothur/tools/mothur/venn.xml	Wed Mar 28 15:45:03 2012 -0500
+++ b/mothur/tools/mothur/venn.xml	Wed May 16 12:28:44 2012 -0500
@@ -52,19 +52,13 @@
       <option value="sharedace">Shared Ace</option>
      </param>
      <param name="label" type="select" label="label - OTU Labels" multiple="true">
-      <options from_dataset="otu">
-       <column name="name" index="0"/>
-       <column name="value" index="0"/>
-       <filter type="static_value" name="ignore_header" keep="False" column="0" value = "label"/>
-       <filter type="unique_value" name="unq_lbl" column="0" />
+      <options>
+       <filter type="data_meta" ref="otu" key="labels" />
       </options>
      </param>
      <param name="groups" type="select" label="groups - Groups to consider" multiple="true">
-      <options from_dataset="otu">
-       <column name="name" index="1"/>
-       <column name="value" index="1"/>
-       <filter type="static_value" name="ignore_header" keep="False" column="1" value = "Group"/>
-       <filter type="unique_value" name="unq_grp" column="1" />
+      <options>
+       <filter type="data_meta" ref="otu" key="groups" />
       </options>
      </param>
    </when>
@@ -79,9 +73,8 @@
       <validator type="in_range" min="5" />
      </param>
      <param name="label" type="select" label="label - OTU Labels" multiple="true">
-      <options from_dataset="otu">
-       <column name="name" index="0"/>
-       <column name="value" index="0"/>
+      <options>
+       <filter type="data_meta" ref="otu" key="labels" />
       </options>
      </param>
    </when>