forester 1.005
authorcmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Fri, 29 Jun 2012 17:36:11 +0000 (17:36 +0000)
committercmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Fri, 29 Jun 2012 17:36:11 +0000 (17:36 +0000)
13 files changed:
forester/java/src/org/forester/analysis/TaxonomyDataManager.java
forester/java/src/org/forester/application/gene_tree_preprocess.java
forester/java/src/org/forester/application/gsdi.java
forester/java/src/org/forester/application/phyloxml_converter.java
forester/java/src/org/forester/archaeopteryx/Constants.java
forester/java/src/org/forester/archaeopteryx/ControlPanel.java
forester/java/src/org/forester/archaeopteryx/MainFrameApplication.java
forester/java/src/org/forester/archaeopteryx/TreePanel.java
forester/java/src/org/forester/phylogeny/Phylogeny.java
forester/java/src/org/forester/phylogeny/PhylogenyMethods.java
forester/java/src/org/forester/sdi/GSDI.java
forester/java/src/org/forester/tools/SupportCount.java
forester/java/src/org/forester/util/ForesterConstants.java

index 2534792..fac9f85 100644 (file)
@@ -265,7 +265,7 @@ public final class TaxonomyDataManager extends RunnableProcess {
                 phy.deleteSubtree( node, true );
             }
             phy.externalNodesHaveChanged();
-            phy.hashIDs();
+            phy.clearHashIdToNodeMap();
             phy.recalculateNumberOfExternalDescendants( true );
         }
         return not_found;
index d1fd58e..f755d91 100644 (file)
@@ -86,6 +86,8 @@ public class gene_tree_preprocess {
             for( final String remove_me : not_found ) {
                 phy.deleteSubtree( phy.getNode( remove_me ), true );
             }
+            phy.clearHashIdToNodeMap();
+            phy.externalNodesHaveChanged();
             if ( phy.getNumberOfExternalNodes() < 2 ) {
                 ForesterUtil.fatalError( PRG_NAME,
                                          "after removal of unresolvable external nodes, phylogeny has "
index c137638..1fbcf63 100644 (file)
@@ -74,7 +74,7 @@ public final class gsdi {
     final static private String REMAPPED_SUFFIX                        = "_gsdi_remapped.txt";
     final static private String PRG_NAME                               = "gsdi";
     final static private String PRG_VERSION                            = "1.000";
-    final static private String PRG_DATE                               = "120608";
+    final static private String PRG_DATE                               = "120629";
     final static private String PRG_DESC                               = "general speciation duplication inference";
     final static private String E_MAIL                                 = "phylosoft@gmail.com";
     final static private String WWW                                    = "www.phylosoft.org/forester";
index 151072f..25497ec 100644 (file)
@@ -257,7 +257,7 @@ public class phyloxml_converter {
             for( final Phylogeny phy : phys ) {
                 PhylogenyMethods.orderAppearance( phy.getRoot(), true, true, DESCENDANT_SORT_PRIORITY.TAXONOMY );
                 phy.externalNodesHaveChanged();
-                phy.hashIDs();
+                phy.clearHashIdToNodeMap();
                 phy.recalculateNumberOfExternalDescendants( true );
             }
         }
index 512df89..18a09de 100644 (file)
@@ -37,13 +37,13 @@ import org.forester.util.ForesterConstants;
 public final class Constants {
 
     final static boolean        __ALLOW_PHYLOGENETIC_INFERENCE                                = true;
-    public final static boolean __RELEASE                                                     = false;                                                    // TODO remove me
+    public final static boolean __RELEASE                                                     = true;                                                     // TODO remove me
     public final static boolean __SNAPSHOT_RELEASE                                            = false;                                                    // TODO remove me
     public final static boolean __SYNTH_LF                                                    = false;                                                    // TODO remove me
     public final static boolean ALLOW_DDBJ_BLAST                                              = false;
     public final static String  PRG_NAME                                                      = "Archaeopteryx";
-    final static String         VERSION                                                       = "0.971 9M";
-    final static String         PRG_DATE                                                      = "2012.04.16";
+    final static String         VERSION                                                       = "0.972 9M";
+    final static String         PRG_DATE                                                      = "2012.06.29";
     final static String         DEFAULT_CONFIGURATION_FILE_NAME                               = "_aptx_configuration_file";
     final static String[]       DEFAULT_FONT_CHOICES                                          = { "Verdana", "Tahoma",
             "Arial", "Helvetica", "Dialog", "Lucida Sans", "SansSerif", "Sans-serif", "Sans" };
index 5bca398..55b0314 100644 (file)
@@ -254,7 +254,7 @@ final class ControlPanel extends JPanel implements ActionListener {
                     _order_of_appearance = !_order_of_appearance;
                     tp.setNodeInPreorderToNull();
                     tp.getPhylogeny().externalNodesHaveChanged();
-                    tp.getPhylogeny().hashIDs();
+                    tp.getPhylogeny().clearHashIdToNodeMap();
                     tp.getPhylogeny().recalculateNumberOfExternalDescendants( true );
                     tp.resetNodeIdToDistToLeafMap();
                     tp.setEdited( true );
@@ -1820,7 +1820,7 @@ final class ControlPanel extends JPanel implements ActionListener {
             tp.updateSetOfCollapsedExternalNodes();
             t.recalculateNumberOfExternalDescendants( false );
             tp.setNodeInPreorderToNull();
-            t.hashIDs();
+            t.clearHashIdToNodeMap();
             showWhole();
         }
     }
index 96febec..655383c 100644 (file)
@@ -97,9 +97,7 @@ import org.forester.phylogeny.factories.ParserBasedPhylogenyFactory;
 import org.forester.phylogeny.factories.PhylogenyFactory;
 import org.forester.phylogeny.iterators.PhylogenyNodeIterator;
 import org.forester.sdi.GSDI;
-import org.forester.sdi.SDI;
 import org.forester.sdi.SDIR;
-import org.forester.sdi.SDIse;
 import org.forester.sequence.Sequence;
 import org.forester.util.BasicDescriptiveStatistics;
 import org.forester.util.BasicTable;
@@ -203,7 +201,6 @@ public final class MainFrameApplication extends MainFrame {
     // Analysis menu
     private JMenu                            _analysis_menu;
     private JMenuItem                        _load_species_tree_item;
-    private JMenuItem                        _sdi_item;
     private JMenuItem                        _gsdi_item;
     private JMenuItem                        _root_min_dups_item;
     private JMenuItem                        _root_min_cost_l_item;
@@ -531,12 +528,6 @@ public final class MainFrameApplication extends MainFrame {
             else if ( o == _load_species_tree_item ) {
                 readSpeciesTreeFromFile();
             }
-            else if ( o == _sdi_item ) {
-                if ( isSubtreeDisplayed() ) {
-                    return;
-                }
-                executeSDI();
-            }
             else if ( o == _lineage_inference ) {
                 if ( isSubtreeDisplayed() ) {
                     JOptionPane.showMessageDialog( this,
@@ -658,16 +649,12 @@ public final class MainFrameApplication extends MainFrame {
 
     void buildAnalysisMenu() {
         _analysis_menu = MainFrame.createMenu( "Analysis", getConfiguration() );
-        _analysis_menu.add( _sdi_item = new JMenuItem( "SDI (Speciation Duplication Inference)" ) );
-        if ( !Constants.__RELEASE && !Constants.__SNAPSHOT_RELEASE ) {
-            _analysis_menu.add( _gsdi_item = new JMenuItem( "GSDI (Generalized Speciation Duplication Inference)" ) );
-        }
+        _analysis_menu.add( _gsdi_item = new JMenuItem( "GSDI (Generalized Speciation Duplication Inference)" ) );
         _analysis_menu.addSeparator();
         _analysis_menu.add( _root_min_dups_item = new JMenuItem( "Root by Minimizing Duplications | Height (SDI)" ) );
         _analysis_menu.add( _root_min_cost_l_item = new JMenuItem( "Root by Minimizing Cost L | Height (SDI)" ) );
         _analysis_menu.addSeparator();
         _analysis_menu.add( _load_species_tree_item = new JMenuItem( "Load Species Tree..." ) );
-        customizeJMenuItem( _sdi_item );
         customizeJMenuItem( _gsdi_item );
         customizeJMenuItem( _root_min_dups_item );
         customizeJMenuItem( _root_min_cost_l_item );
@@ -1111,7 +1098,7 @@ public final class MainFrameApplication extends MainFrame {
             }
             if ( to_be_removed.size() > 0 ) {
                 phy.externalNodesHaveChanged();
-                phy.hashIDs();
+                phy.clearHashIdToNodeMap();
                 phy.recalculateNumberOfExternalDescendants( true );
                 getCurrentTreePanel().resetNodeIdToDistToLeafMap();
                 getCurrentTreePanel().updateSetOfCollapsedExternalNodes();
@@ -1210,23 +1197,29 @@ public final class MainFrameApplication extends MainFrame {
         gene_tree.setAllNodesToNotCollapse();
         gene_tree.recalculateNumberOfExternalDescendants( false );
         GSDI gsdi = null;
-        int duplications = -1;
         try {
-            gsdi = new GSDI( gene_tree, _species_tree.copy(), true, true, false );
-            duplications = gsdi.getDuplicationsSum();
+            gsdi = new GSDI( gene_tree, _species_tree.copy(), false, true, true );
         }
         catch ( final Exception e ) {
             JOptionPane.showMessageDialog( this, e.toString(), "Error during GSDI", JOptionPane.ERROR_MESSAGE );
         }
         gene_tree.setRerootable( false );
         _mainpanel.getCurrentTreePanel().setTree( gene_tree );
+        _mainpanel.getCurrentPhylogeny().clearHashIdToNodeMap();
+        _mainpanel.getCurrentPhylogeny().recalculateNumberOfExternalDescendants( true );
+        _mainpanel.getCurrentTreePanel().resetNodeIdToDistToLeafMap();
+        _mainpanel.getCurrentTreePanel().setEdited( true );
         getControlPanel().setShowEvents( true );
         showWhole();
+        final int selected = _mainpanel.getTabbedPane().getSelectedIndex();
+        _mainpanel.addPhylogenyInNewTab( gsdi.getSpeciesTree(), getConfiguration(), "species tree", null );
+        showWhole();
+        _mainpanel.getTabbedPane().setSelectedIndex( selected );
+        showWhole();
         _mainpanel.getCurrentTreePanel().setEdited( true );
-        JOptionPane.showMessageDialog( this,
-                                       "Number of duplications: " + duplications,
-                                       "GSDI successfully completed",
-                                       JOptionPane.INFORMATION_MESSAGE );
+        JOptionPane.showMessageDialog( this, "Duplications: " + gsdi.getDuplicationsSum() + "\n"
+                + "Potential duplications: " + gsdi.getSpeciationOrDuplicationEventsSum() + "\n" + "Speciations: "
+                + gsdi.getSpeciationsSum(), "GSDI successfully completed", JOptionPane.INFORMATION_MESSAGE );
     }
 
     void executeFunctionAnalysis() {
@@ -1294,40 +1287,6 @@ public final class MainFrameApplication extends MainFrame {
         }
     }
 
-    void executeSDI() {
-        if ( !isOKforSDI( true, true ) ) {
-            return;
-        }
-        if ( !_mainpanel.getCurrentPhylogeny().isRooted() ) {
-            JOptionPane.showMessageDialog( this,
-                                           "Gene tree is not rooted",
-                                           "Cannot execute SDI",
-                                           JOptionPane.ERROR_MESSAGE );
-            return;
-        }
-        final Phylogeny gene_tree = _mainpanel.getCurrentPhylogeny().copy();
-        gene_tree.setAllNodesToNotCollapse();
-        gene_tree.recalculateNumberOfExternalDescendants( false );
-        SDI sdi = null;
-        int duplications = -1;
-        try {
-            sdi = new SDIse( gene_tree, _species_tree.copy() );
-            duplications = sdi.getDuplicationsSum();
-        }
-        catch ( final Exception e ) {
-            JOptionPane.showMessageDialog( this, e.toString(), "Error during SDI", JOptionPane.ERROR_MESSAGE );
-        }
-        gene_tree.setRerootable( false );
-        _mainpanel.getCurrentTreePanel().setTree( gene_tree );
-        getControlPanel().setShowEvents( true );
-        showWhole();
-        _mainpanel.getCurrentTreePanel().setEdited( true );
-        JOptionPane.showMessageDialog( this,
-                                       "Number of duplications: " + duplications,
-                                       "SDI successfully completed",
-                                       JOptionPane.INFORMATION_MESSAGE );
-    }
-
     void executeSDIR( final boolean minimize_cost ) {
         if ( !isOKforSDI( true, true ) ) {
             return;
index e857426..befe375 100644 (file)
@@ -411,7 +411,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
         }
         setNodeInPreorderToNull();
         _phylogeny.externalNodesHaveChanged();
-        _phylogeny.hashIDs();
+        _phylogeny.clearHashIdToNodeMap();
         _phylogeny.recalculateNumberOfExternalDescendants( true );
         resetNodeIdToDistToLeafMap();
         setEdited( true );
@@ -882,7 +882,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
         setCopiedAndPastedNodes( null );
         setCutOrCopiedTree( _phylogeny.copy( node ) );
         _phylogeny.deleteSubtree( node, true );
-        _phylogeny.hashIDs();
+        _phylogeny.clearHashIdToNodeMap();
         _phylogeny.recalculateNumberOfExternalDescendants( true );
         resetNodeIdToDistToLeafMap();
         setEdited( true );
@@ -948,7 +948,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
             _phylogeny.deleteSubtree( node, true );
         }
         _phylogeny.externalNodesHaveChanged();
-        _phylogeny.hashIDs();
+        _phylogeny.clearHashIdToNodeMap();
         _phylogeny.recalculateNumberOfExternalDescendants( true );
         resetNodeIdToDistToLeafMap();
         setEdited( true );
@@ -4243,7 +4243,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
         getCopiedAndPastedNodes().addAll( node_ids );
         setNodeInPreorderToNull();
         _phylogeny.externalNodesHaveChanged();
-        _phylogeny.hashIDs();
+        _phylogeny.clearHashIdToNodeMap();
         _phylogeny.recalculateNumberOfExternalDescendants( true );
         resetNodeIdToDistToLeafMap();
         setEdited( true );
@@ -4956,7 +4956,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
             node.swapChildren();
             setNodeInPreorderToNull();
             _phylogeny.externalNodesHaveChanged();
-            _phylogeny.hashIDs();
+            _phylogeny.clearHashIdToNodeMap();
             _phylogeny.recalculateNumberOfExternalDescendants( true );
             resetNodeIdToDistToLeafMap();
             setEdited( true );
@@ -4980,7 +4980,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
             PhylogenyMethods.sortNodeDescendents( node, pri );
             setNodeInPreorderToNull();
             _phylogeny.externalNodesHaveChanged();
-            _phylogeny.hashIDs();
+            _phylogeny.clearHashIdToNodeMap();
             _phylogeny.recalculateNumberOfExternalDescendants( true );
             resetNodeIdToDistToLeafMap();
             setEdited( true );
index b1677b1..a4102d2 100644 (file)
@@ -68,7 +68,7 @@ public class Phylogeny {
     private Confidence                                          _confidence;
     private Identifier                                          _identifier;
     private boolean                                             _rerootable;
-    private HashMap<Integer, PhylogenyNode>                     _idhash;
+    private HashMap<Integer, PhylogenyNode>                     _id_to_node_map;
     private List<PhylogenyNode>                                 _external_nodes_set;
     private Collection<Sequence>                                _sequenceRelationQueries;
     private Collection<SequenceRelation.SEQUENCE_RELATION_TYPE> _relevant_sequence_relation_types;
@@ -213,7 +213,7 @@ public class Phylogeny {
     }
 
     /**
-     * Need the delete and/or rehash _idhash (not done automatically
+     * Need to call clearHashIdToNodeMap() afterwards (not done automatically
      * to allow client multiple deletions in linear time).
      * Need to call 'recalculateNumberOfExternalDescendants(boolean)' after this 
      * if tree is to be displayed.
@@ -269,7 +269,6 @@ public class Phylogeny {
             }
         }
         remove_us.removeConnections();
-        setIdHash( null );
         externalNodesHaveChanged();
     }
 
@@ -376,11 +375,8 @@ public class Phylogeny {
         return _identifier;
     }
 
-    // ---------------------------------------------------------
-    // Modification of Phylogeny topology and Phylogeny appearance
-    // ---------------------------------------------------------
-    private HashMap<Integer, PhylogenyNode> getIdHash() {
-        return _idhash;
+    private HashMap<Integer, PhylogenyNode> getIdToNodeMap() {
+        return _id_to_node_map;
     }
 
     /**
@@ -392,29 +388,16 @@ public class Phylogeny {
 
     /**
      * Finds the PhylogenyNode of this Phylogeny which has a matching ID number.
-     * Takes O(n) time. After method hashIDs() has been called it runs in
-     * constant time.
-     * 
-     * @param id
-     *            ID number (int) of the PhylogenyNode to find
      * @return PhylogenyNode with matching ID, null if not found
      */
     public PhylogenyNode getNode( final int id ) throws NoSuchElementException {
         if ( isEmpty() ) {
             throw new NoSuchElementException( "attempt to get node in an empty phylogeny" );
         }
-        if ( _idhash != null ) {
-            return _idhash.get( id );
-        }
-        else {
-            for( final PhylogenyNodeIterator iter = iteratorPreorder(); iter.hasNext(); ) {
-                final PhylogenyNode node = iter.next();
-                if ( node.getId() == id ) {
-                    return node;
-                }
-            }
+        if ( ( getIdToNodeMap() == null ) || getIdToNodeMap().isEmpty() ) {
+            reHashIdToNodeMap();
         }
-        return null;
+        return getIdToNodeMap().get( id );
     }
 
     /**
@@ -724,17 +707,21 @@ public class Phylogeny {
      * constant time. Important: The user is responsible for calling this method
      * (again) after this Phylogeny has been changed/created/renumbered.
      */
-    public void hashIDs() {
+    private void reHashIdToNodeMap() {
         if ( isEmpty() ) {
             return;
         }
-        setIdHash( new HashMap<Integer, PhylogenyNode>() );
+        setIdToNodeMap( new HashMap<Integer, PhylogenyNode>() );
         for( final PhylogenyNodeIterator iter = iteratorPreorder(); iter.hasNext(); ) {
             final PhylogenyNode node = iter.next();
-            getIdHash().put( node.getId(), node );
+            getIdToNodeMap().put( node.getId(), node );
         }
     }
 
+    public void clearHashIdToNodeMap() {
+        setIdToNodeMap( null );
+    }
+
     /**
      * Deletes this Phylogeny.
      */
@@ -745,7 +732,7 @@ public class Phylogeny {
         _description = "";
         _type = "";
         _distance_unit = "";
-        _idhash = null;
+        _id_to_node_map = null;
         _confidence = null;
         _identifier = null;
         _rerootable = true;
@@ -849,7 +836,7 @@ public class Phylogeny {
         if ( isEmpty() ) {
             return;
         }
-        _idhash = null;
+        _id_to_node_map = null;
         int max = 0;
         for( final PhylogenyNodeIterator it = iteratorPreorder(); it.hasNext(); ) {
             final PhylogenyNode node = it.next();
@@ -870,7 +857,7 @@ public class Phylogeny {
         if ( isEmpty() ) {
             return;
         }
-        setIdHash( null );
+        setIdToNodeMap( null );
         int i = PhylogenyNode.getNodeCount();
         for( final PhylogenyNodeIterator it = iteratorPreorder(); it.hasNext(); ) {
             it.next().setId( i++ );
@@ -1165,8 +1152,8 @@ public class Phylogeny {
         _identifier = identifier;
     }
 
-    void setIdHash( final HashMap<Integer, PhylogenyNode> idhash ) {
-        _idhash = idhash;
+    private void setIdToNodeMap( final HashMap<Integer, PhylogenyNode> idhash ) {
+        _id_to_node_map = idhash;
     }
 
     /**
index 1a1a19d..b154b48 100644 (file)
@@ -751,11 +751,12 @@ public class PhylogenyMethods {
     }
 
     public static void deleteExternalNodesNegativeSelection( final Set<Integer> to_delete, final Phylogeny phy ) {
-        phy.hashIDs();
+        phy.clearHashIdToNodeMap();
         for( final Integer id : to_delete ) {
             phy.deleteSubtree( phy.getNode( id ), true );
         }
-        phy.hashIDs();
+        phy.clearHashIdToNodeMap();
+        phy.externalNodesHaveChanged();
     }
 
     public static void deleteExternalNodesNegativeSelection( final String[] node_names_to_delete, final Phylogeny p )
@@ -776,6 +777,8 @@ public class PhylogenyMethods {
                 p.deleteSubtree( n, true );
             }
         }
+        p.clearHashIdToNodeMap();
+        p.externalNodesHaveChanged();
     }
 
     public static void deleteExternalNodesPositiveSelection( final Set<Taxonomy> species_to_keep, final Phylogeny phy ) {
@@ -792,9 +795,8 @@ public class PhylogenyMethods {
                 throw new IllegalArgumentException( "node " + n.getId() + " has no taxonomic data" );
             }
         }
-        phy.hashIDs();
+        phy.clearHashIdToNodeMap();
         phy.externalNodesHaveChanged();
-        //  deleteExternalNodesNegativeSelection( to_delete, phy );
     }
 
     public static List<String> deleteExternalNodesPositiveSelection( final String[] node_names_to_keep,
@@ -1286,6 +1288,8 @@ public class PhylogenyMethods {
         }
         if ( remove_me.isExternal() ) {
             phylogeny.deleteSubtree( remove_me, false );
+            phylogeny.clearHashIdToNodeMap();
+            phylogeny.externalNodesHaveChanged();
         }
         else {
             final PhylogenyNode parent = remove_me.getParent();
@@ -1297,7 +1301,7 @@ public class PhylogenyMethods {
                                                                  desc.getDistanceToParent() ) );
             }
             remove_me.setParent( null );
-            phylogeny.setIdHash( null );
+            phylogeny.clearHashIdToNodeMap();
             phylogeny.externalNodesHaveChanged();
         }
     }
@@ -1613,6 +1617,8 @@ public class PhylogenyMethods {
         for( final PhylogenyNode phylogenyNode : nodes_to_delete ) {
             to_be_stripped.deleteSubtree( phylogenyNode, true );
         }
+        to_be_stripped.clearHashIdToNodeMap();
+        to_be_stripped.externalNodesHaveChanged();
         return nodes_to_delete.size();
     }
 
index 1639bbe..8629acb 100644 (file)
@@ -354,6 +354,8 @@ public final class GSDI extends SDI {
                 _stripped_species_tree_nodes.add( s );
             }
         }
+        _species_tree.clearHashIdToNodeMap();
+        _species_tree.externalNodesHaveChanged();
     }
 
     public List<PhylogenyNode> getStrippedSpeciesTreeNodes() {
@@ -364,6 +366,8 @@ public final class GSDI extends SDI {
         for( final PhylogenyNode g : _stripped_gene_tree_nodes ) {
             _gene_tree.deleteSubtree( g, true );
         }
+        _gene_tree.clearHashIdToNodeMap();
+        _gene_tree.externalNodesHaveChanged();
     }
 
     public Set<PhylogenyNode> getMappedExternalSpeciesTreeNodes() {
index e542c5e..5c8e924 100644 (file)
@@ -205,7 +205,7 @@ public final class SupportCount {
                 // phylos are saved
                 // to file.
                 evaluator_phylogeny.externalNodesHaveChanged();
-                evaluator_phylogeny.hashIDs();
+                evaluator_phylogeny.clearHashIdToNodeMap();
                 evaluator_phylogeny.recalculateNumberOfExternalDescendants( true );
             }
             final double s = SupportCount.compare( phylogeny,
index cb21569..4cfd40a 100644 (file)
@@ -27,8 +27,8 @@ package org.forester.util;
 
 public final class ForesterConstants {
 
-    public final static String  FORESTER_VERSION            = "1.004";
-    public final static String  FORESTER_DATE               = "120619";
+    public final static String  FORESTER_VERSION            = "1.005";
+    public final static String  FORESTER_DATE               = "120629";
     public final static String  PHYLO_XML_VERSION           = "1.10";
     public final static String  PHYLO_XML_LOCATION          = "http://www.phyloxml.org";
     public final static String  PHYLO_XML_XSD               = "phyloxml.xsd";