tv-0.5/0000777000076400007640000000000011432555767007043 500000000000000tv-0.5/TreeLib/0000777000076400007640000000000011432555767010371 500000000000000tv-0.5/TreeLib/tokeniser.h0000775000076400007640000000776207732056065012475 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: tokeniser.h,v 1.14 2003/09/17 13:05:57 rdmp1c Exp $ #ifndef TOKENISER_H #define TOKENISER_H #include #include #ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif // Ignore "Cannot create precompiled header: code in header" message // generated when compiling string.cc #pragma warn -pch #endif #include class XTokeniser { public: std::string msg; #if (defined( __MWERKS__ ) || (defined __BORLANDC__ && (__BORLANDC__ < 0x0550))) long pos; #else std::streampos pos; #endif long line; long col; #if (defined( __MWERKS__ ) || (defined __BORLANDC__ && (__BORLANDC__ < 0x0550))) XTokeniser( std::string s, long fp = 0, long fl = 0L, long fc = 0L ) #else XTokeniser( std::string s, std::streampos fp = 0, long fl = 0L, long fc = 0L ) #endif { msg = s; pos = fp; line = fl; col = fc; }; }; class Tokeniser { #if defined __BORLANDC__ && (__BORLANDC__ < 0x0550) istream& in; #else std::istream& in; #endif char curChar; std::string token; std::string comment; #if (defined( __MWERKS__ ) || (defined __BORLANDC__ && (__BORLANDC__ < 0x0550))) long filepos; #else std::streampos filepos; #endif long fileline; long filecol; bool atEOF; bool atEOL; #ifdef __MWERKS__ char putBuffer; #endif bool modifierPHYLIP; public: enum tokentype { EMPTY, STRING, // a text token NUMBER, // a real or integer number OTHER, BAD, SPACE, // LPAR, // ( RPAR, // ) COMMA, // , SEMICOLON, // ; EQUALS, // = MINUS, // - ASTERIX, // * BACKSLASH, // / LCURLY, // { RCURLY, // } DOUBLEQUOTE, // " BANG, // ! HASH, // # COLON // : }; Tokeniser (); #if defined __BORLANDC__ && (__BORLANDC__ < 0x0550) Tokeniser(istream& i); #else Tokeniser(std::istream& i); #endif virtual ~Tokeniser(); bool AtEOF() { return atEOF; }; bool AtEOL() { return atEOL; }; long GetFileColumn() { return filecol; }; #if (defined( __MWERKS__ ) || (defined __BORLANDC__ && (__BORLANDC__ < 0x0550))) long GetFilePosition() { return filepos; }; #else std::streampos GetFilePosition() { return filepos; }; #endif long GetFileLine() { return fileline; }; char GetNextChar (); tokentype GetNextToken (); tokentype GetNextPHYLIPToken (); std::string GetToken () { return token; }; bool IsPHYLIPEndOfToken (char ch); virtual bool IsPunctuation (char ch); virtual bool IsWhiteSpace (char ch); bool ParseComment (); tokentype ParseNumber (); bool ParseString (); bool ParseToken (); // don't use these functions as they will bugger up keeping track of // file positions. // char PeekNextChar (); // void PutBack (char ch) { in.putback (ch); }; #if (__BORLANDC__ < 0x0550) bool TokenEquals (std::string s) { return s.compare (token); }; #else bool TokenEquals (std::string s) { return (token == s); }; #endif }; #if __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif tv-0.5/TreeLib/lcaquery.h0000775000076400007640000000501307444127636012305 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: lcaquery.h,v 1.1 2002/03/14 14:11:42 rdmp1c Exp $ /** * @file lcaquery.h * * Classes to perform LCA queries on a tree * */ #ifndef LCAQUERYH #define LCAQUERYH #ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif // Ignore "Cannot create precompiled header: code in header" message // generated when compiling string.cc #pragma warn -pch #endif #include #include "TreeLib.h" #include "nodeiterator.h" /** * @class LCAQuery * Base class for performing LCA queries. Descendants of this class must * override the abstract member function LCA. */ class LCAQuery { public: LCAQuery () { t = NULL; }; LCAQuery (Tree *tree); virtual ~LCAQuery () {}; virtual NodePtr LCA (NodePtr i, NodePtr j) = 0; virtual void SetTree (Tree *tree); protected: Tree *t; virtual void Initialise () {}; }; /** * @class SimpleLCAQuery * Does naive LCA queries by going down the tree until we find the * LCA. */ class SimpleLCAQuery : public LCAQuery { public: SimpleLCAQuery () {}; SimpleLCAQuery (Tree *tree) : LCAQuery (tree) { Initialise (); }; /** * Finds LCA by going down tree twowards root until we reach node * with the same preorder number. * @return LCA of nodes i and j */ virtual NodePtr LCA (NodePtr i, NodePtr j); protected: std::map > depth; /** * Number the nodes in preorder (root = 0). */ virtual void Initialise (); }; #if __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif tv-0.5/TreeLib/treedrawer.h0000775000076400007640000002124611432544150012614 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: treedrawer.h,v 1.10 2007/06/07 15:48:02 rdmp1c Exp $ /** * @file treedrawer.h * * Classes to draw trees to a graphics device * */ #ifndef TREEDRAWERH #define TREEDRAWERH #ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif // Ignore "Cannot create precompiled header: code in header" message // generated when compiling string.cc #pragma warn -pch #endif #include #include "TreeLib.h" #include "nodeiterator.h" #include "gport.h" #if USE_VC2 #define USE_PORT 0 #include "VPort.h" #elif USE_WXWINDOWS #define USE_PORT 0 #include "wx/wx.h" #ifdef wxSTRING_MAXLEN #else #define wxSTRING_MAXLEN 255 #endif #else #define USE_PORT 1 #endif /** * @class point * An x, y point in real number coodinates */ class point { public: double x; double y; point () { x = y = 0.0; }; }; /** * @class TreeDrawer * Base class for tree drawer object */ class TreeDrawer { public: TreeDrawer (Tree *tree); virtual ~TreeDrawer () {}; /** * Calculate coordinates for internal nodes. For a slanted cladogram * internal node are spaced along the x-axis by their "weight", and along the * y-axis they are placed in the middle of their descendant leaves * @param p the internal node being visited */ virtual void CalcInternal (Node *p); /** * Calculate coordinates for leaf nodes. For a slanted cladogram * all leaves have the same coordinate on the x-aixs, and are spaced * evenly along the y-axis * @param p the leaf being visited */ virtual void CalcLeaf (Node *p); /** * Calculate coordinates for tree drawing. Tree is traversed in post order. */ virtual void CalcCoordinates (); /** * Draw tree by traversing it in post-order and calling DrawLeaf and * DrawInternal. */ virtual void Draw(); /** * Draw a line connecting the leaf with its immediate ancestor. */ virtual void DrawLeaf (Node *p); /** * Draw leaf label (if showLeafLabels is true) */ virtual void DrawLeafLabel (Node *p); /** * Draw a line connecting internal node with its immediate ancestor. */ virtual void DrawInternal (Node *p); /** * Draw intenral label (if it exists and if showInternalLabels is true) */ virtual void DrawInternalLabel (Node *p); /** * Draw a line to the graphics device connecting the two points pt1 and pt2. * @param pt1 start of the line * @param pt2 end of the line */ virtual void DrawLine (point pt1, point pt2); /** * Draw a line representing the root of the tree. */ virtual void DrawRoot (); /** * Draw a text to the graphics device. * @param pt posuition for text * @param s text to draw */ virtual void DrawText (point pt, std::string s); virtual point GetCoordinates (NodePtr p) { return node_coordinates[p]; } virtual void SetRect (int l, int t, int right, int bottom) { left = (double) l; top = (double) t; width = (double)(right - l); height = (double)(bottom - t); } #if USE_WXWINDOWS virtual void SetDC (wxDC *wxdc) { dc = wxdc; }; #endif #if USE_PORT virtual void SetFont (GBaseFont f) { font = f; }; #endif /** * Toggle drawing of tree as rooted. For a cladogram this toggles the display * of a short branch below the root node. */ virtual void SetDrawRooted (bool on = true) { rooted = on; }; /** * Toggle drawing of internal labels. */ virtual void SetDrawInternalLabels (bool on = true) { showInternalLabels = on; }; /** * Toggle drawing of leaf labels. */ virtual void SetDrawLeafLabels (bool on = true) { showLeafLabels = on; }; virtual void SetPenWidth (int width); protected: Tree * t; std::map > node_coordinates; double left, top, width, height; double leafGap, lastY, nodeGap; int leafCount; bool rooted; bool showInternalLabels; bool showLeafLabels; #if USE_PORT GBaseFont font; #endif #if USE_WXWINDOWS wxDC *dc; #endif }; /** * @class RectangleTreeDrawer * Draw rectangular trees */ class RectangleTreeDrawer : public TreeDrawer { public: RectangleTreeDrawer (Tree *tree) : TreeDrawer (tree) {}; virtual ~RectangleTreeDrawer () {}; /** * Calculate coordinates for internal nodes. For a rectangular cladogram we * find the longest path from the root to a leaf, and space the internal nodes * evenly. This gives a nicer look than using weights. * @param p the internal node being visited */ virtual void CalcInternal (Node *p); virtual void CalcCoordinates (); virtual void DrawLeaf (Node *p); virtual void DrawInternal (Node *p); protected: int maxDepth; }; /** * @class PhylogramDrawer * Draw phylograms */ class PhylogramDrawer : public RectangleTreeDrawer { public: PhylogramDrawer (Tree *tree) : RectangleTreeDrawer (tree) { mUltrametric = false; }; virtual ~PhylogramDrawer () {}; /** * Calculate coordinates for internal nodes. * @param p the internal node being visited */ virtual void CalcInternal (Node *p); virtual void CalcLeaf (Node *p); virtual void CalcCoordinates (); /** * Draw tree by traversing it in post-order and calling DrawLeaf and * DrawInternal. */ virtual void Draw(); // virtual void DrawLeaf (Node *p); // virtual void DrawInternal (Node *p); virtual void DrawRoot (); virtual void DrawScaleBar (); protected: double mMaxPathLength; int scalebar_space; bool mUltrametric; }; /** * @class CircleTreeDrawer * Draw circle trees */ class CircleTreeDrawer : public RectangleTreeDrawer { public: CircleTreeDrawer (Tree *tree) : RectangleTreeDrawer (tree) {}; virtual ~CircleTreeDrawer () {}; virtual void CalcInternal (Node *p); virtual void CalcLeaf (Node *p); virtual void CalcCoordinates (); // virtual void Draw(); virtual void DrawLeaf (Node *p); // virtual void DrawLeafLabel (Node *p); virtual void DrawInternal (Node *p); // virtual void DrawInternalLabel (Node *p); // virtual void DrawText (point pt, std::string s); protected: double leaf_angle; double leaf_radius; point origin; std::map > node_angle; std::map > node_radius; std::map > node_backarc; }; /** * @class KMLTreeDrawer * Draw KML trees for Google Earth */ class KMLTreeDrawer : public RectangleTreeDrawer { public: KMLTreeDrawer (Tree *tree) : RectangleTreeDrawer (tree) { altitudeFactor = 20000.0; treeStyle = 0; }; virtual ~KMLTreeDrawer () {}; virtual void CalcInternal (Node *p); virtual void CalcLeaf (Node *p); virtual void CalcCoordinates (); virtual void Draw(); virtual void DrawLeaf (Node *p); virtual void DrawLeafLabel (Node *p); virtual void DrawInternal (Node *p); virtual void DrawInternalLabel (Node *p); virtual void DrawRoot (); // virtual void DrawText (point pt, std::string s); /** * Set output stream to which the tree description is written * @param s pointer to the stream */ virtual void SetStream (std::ostream *s) { f = s; }; virtual void SetStyle (int s) { treeStyle=s; }; protected: std::map > nodeLatitude; std::map > nodeLongitude; std::map > nodeAltitude; std::ostream *f; Node *cur; std::stack < Node *, std::vector > stk; int count; double altitudeFactor; double mMaxPathLength; int treeStyle; }; #if __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif tv-0.5/TreeLib/Parse.h0000775000076400007640000000446210021735102011513 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: Parse.h,v 1.7 2004/03/04 23:22:42 rdmp1c Exp $ // // Simple string parser // #ifndef PARSE_H #define PARSE_H #ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif // Ignore "Cannot create precompiled header: code in header" message // generated when compiling string.cc #pragma warn -pch #endif #include #ifdef __BORLANDC__ #pragma warn .pch #endif using namespace std; enum tokentype {STRING, NUMBER, OTHER, ENDOFSTRING, BAD, SPACE, LPAR, RPAR, COMMA, SEMICOLON, COLON, TAB, NEWLINE}; class Parser { public: Parser () { text = ""; token = ""; pos = 0; }; Parser (string s) { text = s; token = ""; pos = 0; }; Parser (char *s) { text = s; token = ""; pos = 0; }; virtual ~Parser () {}; virtual tokentype NextToken (); virtual string GetToken () { return token; }; virtual const char *GetTokenAsCstr () { return token.c_str(); }; virtual int GetPos () { return pos; }; virtual bool IsPunctuation (char ch); virtual bool IsWhiteSpace (char ch); virtual char GetNextChar () { return text[++pos]; }; virtual void PutBack (char ch) { pos--; }; virtual tokentype ParseNumber (); protected: string text; string token; int pos; }; #ifdef __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif // PARSE_H tv-0.5/TreeLib/quartet.cpp0000775000076400007640000003714607444150671012507 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: quartet.cpp,v 1.2 2002/03/14 16:37:13 rdmp1c Exp $ /** * @file quartet.cpp * * Compute quartet distance between two trees. * */ #include "quartet.h" #include "nodeiterator.h" #include "lcaquery.h" #include #ifdef __GNUC__ #include #endif #define DEBUG_QUARTETS 0 class ECODE { public: ECODE (Tree *tree); ~ECODE (); virtual void EncodeNode (NNodePtr r); virtual void EncodeTree (int ni, int nj); virtual bool Visit (NNodePtr p); void Write (ostream &s); virtual int GetLeaves () { return n; }; int *E[3]; protected: int vertex; int subtree; int n; int i; int j; Tree * t; SimpleLCAQuery lca; IntegerSet mVisited; }; class TCODE : public ECODE { public: TCODE (Tree *tree) : ECODE (tree) {}; virtual void EncodeTree (int ni, int nj); virtual bool Visit (NNodePtr p); }; // Local routines long n_choose_2 (int n); long n_choose_3 (int n); long n_choose_4 (int n); void RadixSort (ECODE &E1, ECODE &E2, int &s, int &r, int &x); // Store a tuple representing the vertex and subtree codes in the two trees class Tuple { public: int Leaf; int Vertex1; int Subtree1; int Vertex2; int Subtree2; Tuple () { Leaf = Vertex1 = Subtree1 = Vertex2 = Subtree2 = 0; }; int operator< (const Tuple &t) const { if (Vertex1 < t.Vertex1) return 1; else if (Vertex1 > t.Vertex1) return 0; else // Vertex1 == { if (Subtree1 < t.Subtree1) return 1; else if (Subtree1 > t.Subtree1) return 0; else // Subtree1 == { if (Vertex2 < t.Vertex2) return 1; else if (Vertex2 > t.Vertex2) return 0; else // Vertex2 == { if (Subtree2 < t.Subtree2) return 1; else if (Subtree2 > t.Subtree2) return 0; else return 0; } } } }; int operator== (const Tuple &t) const { return ( (t.Vertex1 == Vertex1) && (t.Subtree1 == Subtree1) && (t.Vertex2 == Vertex2) && (t.Subtree2 == Subtree2) ); }; }; //------------------------------------------------------------------------------ long n_choose_2 (int n) { if (n < 2) return 0; else return (n * (n-1)) / 2; } //------------------------------------------------------------------------------ long n_choose_3 (int n) { if (n < 3) return 0; else return (n * (n-1) * (n-2)) / 6; } //------------------------------------------------------------------------------ long n_choose_4 (int n) { if (n < 4) return 0; else return (n * (n-1) * (n-2) * (n-3)) / 24; } //------------------------------------------------------------------------------ ECODE::ECODE (Tree *tree) { t = tree; n = t->GetNumLeaves(); E[0] = new int [n+1]; E[1] = new int [n+1]; E[2] = new int [n+1]; for (int k = 1; k <=n; k++) { E[0][k] = k; E[1][k] = 0; E[2][k] = 0; } vertex = subtree = 0; lca.SetTree (t); } //------------------------------------------------------------------------------ ECODE::~ECODE () { delete [] E[0]; delete [] E[1]; delete [] E[2]; } //------------------------------------------------------------------------------ // Node should be encoded if it is not on the path and its cluster is // not a subset of {1..i} bool ECODE::Visit (NNodePtr p) { return (!p->IsMarked() && !(p->Cluster <= mVisited)); /* SetRelations s = p->ClusterRelationship (Visited); return (!p->IsFlag (NF_MARKED) && (s != rdmpIDENTITY && s != rdmpSUBSET)); */ } //------------------------------------------------------------------------------ /* isit desc of node and encode. Each node that does not include i or j as a descendant is a new subtree of the current vertex: i a b c \ | \/ \ | / \ 1 2 \|/ + + = vertex 1 = subtree 1 2 = subtree 2 A vertex with no subtrees meeting the requirements of ECODE::Visit is irrelevant to the problem. These cases are flagged by subtree=0. */ void ECODE::EncodeNode (NNodePtr r) { subtree = 0; NNodePtr q = r; while (q) { if (Visit (q)) { subtree++; IntegerSet::iterator nit = q->Cluster.begin(); IntegerSet::iterator nend = q->Cluster.end(); while (nit != nend) { if ((*nit) >= i) { E[1][*nit] = vertex; E[2][*nit] = subtree; } nit++; } } q = (NNodePtr)(q->GetSibling ()); } } //------------------------------------------------------------------------------ /* Visit each node on path and encode desc leaves. Note that leaves below lub(i,j) are also "descendants" of lub (i,j) since T is an unrooted tree. These leaves are all on the same subtree. i = 2 j = 4 1 5 2 3 4 \/ \ | / \ \ | / \ \ | / \ \|/ \ + \ / \/ is really 2---+---4 / \ / \ 1--+ 3 | 5 */ void ECODE::EncodeTree (int ni, int nj) { i = ni; j = nj; NNodePtr inode = (NNode *)(*t)[i - 1]; NNodePtr jnode = (NNode *)(*t)[j - 1]; NNodePtr lub = (NNode *)lca.LCA (inode, jnode); vertex = 1; mVisited.erase(mVisited.begin(), mVisited.end()); for (int k = 1; k <= i; k++) mVisited.insert (k); // Mark path ij NNodePtr q = inode; while (q != lub) { q->SetMarked (true); q = (NNode *)(q->GetAnc()); } q = jnode; while (q != lub) { q->SetMarked (true); q = (NNode *)(q->GetAnc()); } // i -- lub(i,j) q = (NNode *)(inode->GetAnc()); while (q->IsMarked()) { EncodeNode ((NNode *)(q->GetChild())); if (subtree) vertex++; q = (NNode *)(q->GetAnc()); } // j--lub(i,j) q = (NNode *)(jnode->GetAnc()); while (q->IsMarked()) { EncodeNode ((NNode *)(q->GetChild())); if (subtree) vertex++; q = (NNode *)(q->GetAnc()); } // visit lub (i,j) EncodeNode ((NNode *)(q->GetChild())); subtree++; for (int k = i + 1; k <= n; k++) { bool kIsElement = (q->Cluster.find(k) != q->Cluster.end()); if ((k != j) && !kIsElement) { E[1][k] = vertex; E[2][k] = subtree; } } // Unmark path between i and j q = inode; while (q != lub) { q->SetMarked (false); q = (NNode *)(q->GetAnc()); } q = jnode; while (q != lub) { q->SetMarked (false); q = (NNode *)(q->GetAnc()); } } //------------------------------------------------------------------------------ void ECODE::Write (ostream &s) { s << endl; int k; for (k = 1; k <= n; k++) s << setw(3) << E[0][k]; s << endl; for (k = 1; k <= n; k++) s << "---"; s << endl; for (k = 1; k <= n; k++) s << setw(3) << E[1][k]; s << endl; for (k = 1; k <= n; k++) s << setw(3) << E[2][k]; s << endl; } //------------------------------------------------------------------------------ // Replace original code from Douchette and COMPONENT by a simple use of // STL. void RadixSort (ECODE &E1, ECODE &E2, int &s, int &r, int &x) { std::vector E; for (int i = 1; i <= E1.GetLeaves (); i++) { Tuple t; t.Vertex1 = E1.E[1][i]; t.Subtree1 = E1.E[2][i]; t.Vertex2 = E2.E[1][i]; t.Subtree2 = E2.E[2][i]; E.push_back (t); } #if DEBUG_QUARTETS // Show cout << "Before sort" << endl; for (int i = 0; i < E.size(); i++) { cout << " " << i; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << "--"; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << " " << E[i].Vertex1; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << " " << E[i].Subtree1; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << "--"; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << " " << E[i].Vertex2; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << " " << E[i].Subtree2; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << "=="; } cout << endl; #endif sort (E.begin(), E.end()); #if DEBUG_QUARTETS // Show cout << "After sort" << endl; for (int i = 0; i < E.size(); i++) { cout << " " << i; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << "--"; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << " " << E[i].Vertex1; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << " " << E[i].Subtree1; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << "--"; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << " " << E[i].Vertex2; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << " " << E[i].Subtree2; } cout << endl; for (int i = 0; i < E.size(); i++) { cout << "=="; } cout << endl; #endif // Count int a = 0; int b = 0; int c = 0; int d = 0; s = 0; r = 0; x = 0; int insubtree1 = 0; int insubtree2 = 0; int innode2 = 0; for (int k = 0; k < E.size(); k++) { if (E[k].Vertex1 != 0) { if ( (d != E[k].Subtree2) || (c != E[k].Vertex2) || (b != E[k].Subtree1) || (a != E[k].Vertex1)) { s += n_choose_2 (insubtree2); r += insubtree2 * innode2; innode2 += insubtree2; insubtree2 = 0; d = E[k].Subtree2; } if ( (c != E[k].Vertex2) || (b != E[k].Subtree1) || (a != E[k].Vertex1)) { innode2 = 0; c = E[k].Vertex2; } if ( (b != E[k].Subtree1) || (a != E[k].Vertex1)) { x += n_choose_2 (insubtree1); insubtree1 = 0; b = E[k].Subtree1; a = E[k].Vertex1; } insubtree1++; insubtree2++; } } s += n_choose_2 (insubtree2); x += n_choose_2 (insubtree1); r += insubtree2 * innode2; #if DEBUG_QUARTETS cout << "s=" << s << " x=" << x << " r=" << r << endl; #endif } //------------------------------------------------------------------------------ void ShowQTRecord (ostream &s, QTValues &QR) { s << setprecision (3) << setw (6) << setiosflags (ios::right) << setw (6)<< QR.SD << " " << setw (6)<< QR.EA << " " << setw (6)<< QR.DC << " " << setw (6)<< QR.SJA << " " << setw (8)<< QR.n << setw (8)<< QR.s << setw (8)<< QR.d << setw (8)<< QR.r1 << setw (8)<< QR.r2 << setw (8)<< QR.u << setw (8)<< endl; } //------------------------------------------------------------------------------ void ShowHeader (ostream &s) { s << " SD EA DC SJA n s d r1 r2 u" << endl; s << "----------------------------------------------------------------------------" << endl; } //------------------------------------------------------------------------------ void SummaryStats (QTValues &QR) { QR.d = QR.x1 - (QR.s + QR.r1); QR.u = QR.n - (QR.s + QR.d + QR.r1 + QR.r2); QR.SD = float (2 * QR.d + QR.r1 + QR.r2)/ float (2 * QR.d + 2* QR.s + QR.r1 + QR.r2); QR.EA = float (QR.d + QR.r1 + QR.r2 + QR.u)/ float (QR.n); QR.DC = float (QR.d) / float (QR.n); int tmp = QR.d + QR.s; if (tmp == 0) QR.SJA = -1; else QR.SJA = float (QR.d) / float (QR.d + QR.s); } //------------------------------------------------------------------------------ void CompareQuartets (NTree &t1, NTree &t2, QTValues &QR) { // Clear indices QR.SD = 0.0; QR.EA = 0.0; QR.SJA = 0.0; QR.DC = 0.0; QR.d = 0; QR.s = 0; QR.r1 = 0; QR.r2 = 0; QR.x1 = 0; QR.u = 0; QR.n = n_choose_4 (t1.GetNumLeaves ()); for (int i = 1; i < t1.GetNumLeaves (); i++) { for (int j = i + 1; j <= t1.GetNumLeaves (); j++) { int SS, RR1, RR2, XX1, XX2; // cout << "i=" << i << " (" << t1[i-1]->GetLabel() << ") " << " j=" << j << " (" << t1[j-1]->GetLabel() << ") "<< endl; // cout << "i=" << i << " (" << t2[i-1]->GetLabel() << ") " << " j=" << j << " (" << t2[j-1]->GetLabel() << ") "<< endl; ECODE E1 (&t1); ECODE E2 (&t2); E1.EncodeTree (i, j); E2.EncodeTree (i, j); RadixSort (E1, E2, SS, RR1, XX1); QR.s += SS; QR.r1 += RR1; QR.x1 += XX1; RadixSort (E2, E1, SS, RR2, XX2); QR.r2 += RR2; } } } //------------------------------------------------------------------------------ // Node should be encoded if it is not on the path . bool TCODE::Visit (NNodePtr p) { return (!p->IsMarked()); } //------------------------------------------------------------------------------ /* { Doucette's algorithm for quartets takes each pair of leaves in the tree and hangs the remaining subtrees from the path connecting those two leaves, e.g.: 1 2 3 4 1---*---*---4 \ \ \ / | | \ \ \ / = | | \ \ * 2 3 \ \ / \ * \ / * In triplets, one "leaf" is always the root, so the path is simply those nodes between the leaf and the root, e.g.: 1 2 3 4 root---*---*---*---4 \ \ \ / | | | \ \ \ / = | | | \ \ * 1 2 3 \ \ / \ * \ / * | | root */ void TCODE::EncodeTree (int ni, int nj) { i = 1; // Set to 1 so we can use ECODE::Encode j = nj; NNodePtr jnode = (NNode *)(*t)[j - 1]; // Mark path to root NNodePtr q = jnode; while (q != NULL) { q->SetMarked (true); q = (NNode *)(q->GetAnc()); } vertex = 1; q = (NNode *)(jnode->GetAnc()); while (q) { if (q->IsMarked()) { EncodeNode ((NNode *)(q->GetChild())); if (subtree) vertex++; } q = (NNode *)(q->GetAnc()); } q = jnode; while (q != NULL) { q->SetMarked (false); q = (NNode *)(q->GetAnc()); } } //------------------------------------------------------------------------------ void CompareTriplets (NTree &t1, NTree &t2, QTValues &QR) { // Clear indices QR.SD = 0.0; QR.EA = 0.0; QR.SJA = 0.0; QR.DC = 0.0; QR.d = 0; QR.s = 0; QR.r1 = 0; QR.r2 = 0; QR.x1 = 0; QR.u = 0; QR.n = n_choose_3 (t1.GetNumLeaves ()); for (int j = 1; j <= t1.GetNumLeaves (); j++) { int SS, RR1, RR2, XX1, XX2; // cout << "j=" << j << endl; TCODE E1 (&t1); TCODE E2 (&t2); E1.EncodeTree (1, j); E2.EncodeTree (1, j); RadixSort (E1, E2, SS, RR1, XX1); QR.s += SS; QR.r1 += RR1; QR.x1 += XX1; RadixSort (E2, E1, SS, RR2, XX2); QR.r2 += RR2; } } tv-0.5/TreeLib/treereader.h0000775000076400007640000000330307745210545012576 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: treereader.h,v 1.4 2003/10/21 10:58:45 rdmp1c Exp $ #ifndef TREEREADER_H #define TREEREADER_H #include "TreeLib.h" #include "tokeniser.h" class TreeReader { public: TreeReader (Tokeniser &p); virtual ~TreeReader () {}; virtual bool Read (TreePtr t); virtual bool MoreTrees() { return true; }; protected: Tokeniser &parser; Tree *tree; std::string errormsg; virtual void doAdjust() = 0; virtual Tokeniser::tokentype GetTaxonName (); virtual bool LabelEdge (); virtual bool LabelLeaf (std::string s); virtual void LabelInternalNode (std::string s); // virtual int ReadName() { return 0; }; }; class PHYLIPReader : public TreeReader { public: PHYLIPReader (Tokeniser &p) : TreeReader (p) { }; virtual ~PHYLIPReader () {}; virtual Tokeniser::tokentype GetTaxonName (); protected: virtual void doAdjust(); }; #endif tv-0.5/TreeLib/ntree.h0000775000076400007640000000537310310032565011564 00000000000000//$Id: ntree.h,v 1.8 2005/09/08 12:58:29 rdmp1c Exp $ #ifndef NTREEH #define NTREEH #include "TreeLib.h" #include #include /** *@typedef std::set > IntegerSet; */ typedef std::set > IntegerSet; class NTree; /** * @class NNode * A node with a cluster of all descendants of that node. */ class NNode : public Node { friend class NTree; public: NNode () {}; /** * A set of indices of all descendants of this node. */ IntegerSet Cluster; }; typedef NNode *NNodePtr; /** *@typedef std::map > NNodeLabelMap; */ typedef std::map > NNodeLabelMap; /** * @class NTree * NTree implements an n-tree, i.e. a tree in which each node has a cluster. * * In the standard definition of a n-tree the clusters are subsets of * @f$S=\{1,\ldots,n\}@f$, where n is the number of leaves in the tree. BuildLeafClusters * creates clusters that satisfy this condition. However, in some applications (such as * supertrees) the clusters may be subsets of a larger set @f$L \supset S@f$. * BuildLabelClusters creates clusters where the members are the indices of the leaf * labels in a larger list (such as the set of labels in a set of trees with overlapping * leaf sets). In this case the clusters are subsets of @f$S=\{1,\ldots,m\}@f$, * where @f$m \geq n@f$. */ class NTree : public Tree { public: /** * A map between leaf labels in the profile and a unique integer index */ NNodeLabelMap leaf_labels; enum { useLeafNumber, useLabelNumber } use; NTree () { use = useLeafNumber; }; /** * Create all node clusters, where each cluster is a subset of @f$\{1,\ldots,n\}@f$. * Clusters contain the index of the corresponding node in the node list for * this tree. */ virtual void BuildLeafClusters () { use = useLeafNumber; BuildClustersTraverse ((NNodePtr)Root); }; /** * Create all node clusters, where each cluster is a subset of @f$\{1,\ldots,m\}@f$, * where @f$m \geq n@f$. * Clusters contain the index of the label of each node. */ virtual void BuildLabelClusters () { use = useLabelNumber; BuildClustersTraverse ((NNodePtr)Root); }; virtual NodePtr NewNode () const { return new NNode; }; /** * Output the clusters for debugging. */ virtual void ShowClusters () { ShowClustersTraverse ((NNodePtr)Root); }; virtual void BuildLeafLabels () { BuildLeafLabelsTraverse ((NNodePtr)Root); }; virtual void StarTree (int n); virtual int AddCluster (IntegerSet &b, char *label = NULL); protected: virtual void BuildClustersTraverse (NNodePtr p); virtual void BuildLeafLabelsTraverse (NNodePtr p); virtual void ShowClustersTraverse (NNodePtr p); }; #endif // NTREEH tv-0.5/TreeLib/Parse.cpp0000775000076400007640000001413111432542470012053 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: Parse.cpp,v 1.9 2002/02/23 12:22:32 rdmp1c Exp $ #include #include #include "Parse.h" // Return the next token in the string tokentype Parser::NextToken () { tokentype t; token = ""; if (pos >= text.length()) { t = ENDOFSTRING; } else { char ch = text[pos]; if (ch == '\'') { // Single quoted token bool done = false; pos++; while (!done) { ch = text[pos++]; // Look ahead for double quote if (ch == '\'') { ch = text[pos]; done = (ch != '\''); } if (!done && (ch != '\n') && (ch != '\r')) { token += ch; } } t = STRING; //classify the token } else if (isalpha (ch)) { while (isalnum (ch) || (ch == '_') || (ch == '.') && (pos < text.length())) { if (ch == '_') token += ' '; else token += ch; pos++; ch = text[pos]; } t = STRING; //classify the token } else { if (isdigit(ch) || (ch == '-')) { t = ParseNumber(); // int stop = text.find_first_not_of ("01234567890-.Ee", pos); // token = text.substr (pos, stop-pos); // pos = stop; // t = NUMBER; } else { token += ch; pos++; switch (ch) { case '(': t = LPAR; break; case ')': t = RPAR; break; case ' ': t = SPACE; break; case ',': t = COMMA; break; case ';': t = SEMICOLON; break; case ':': t = COLON; break; case '\t': t = TAB; break; case '\r': case '\n': t = NEWLINE; break; default: t = BAD; break; } } } } // cout << "token = " << token << endl; return (t); } //------------------------------------------------------------------------------ // Parse a number (integer or real). tokentype Parser::ParseNumber () { enum { start = 0x0001, // 0 sign = 0x0002, // 1 digit = 0x0004, // 2 fraction = 0x0008, // 3 expsymbol = 0x0010, // 4 expsign = 0x0020, // 5 exponent = 0x0040, // 6 bad = 0x0080, done = 0x0100 } state; tokentype result = BAD; token = ""; state = start; char curChar = text[pos]; while (!IsWhiteSpace (curChar) && !(IsPunctuation (curChar) && (curChar != '-')) && (state != bad) && (state != done)) { if (isdigit (curChar)) { switch (state) { case start: case sign: state = digit; break; case expsymbol: case expsign: state = exponent; break; default: break; } } else if ((curChar == '-') || (curChar == '+')) { switch (state) { case start: state = sign; // sign of number break; case digit: state = done; // minus sign is punctuation, such as 6-10 break; case expsymbol: state = expsign; // sign of exponent break; default: state = bad; // syntax error break; } } else if ((curChar == '.') && (state == digit)) state = fraction; else if (((curChar == 'E') || (curChar == 'e')) && (state & (digit | fraction))) state = expsymbol; else state = bad; if ((state != bad) && (state != done)) { token += curChar; curChar = GetNextChar (); } } int isNumber = state & (digit | fraction | exponent | done); if (isNumber) { // We have a number result = NUMBER; if (IsPunctuation (curChar)) { // PutBack (curChar); // if (!atEOL) // filecol--; } } else { // Not a number, but a string that starts with numbers, such as "00BW0762.1" // cout << "Do something!" << endl; do { if (curChar == '_') token += ' '; else token += curChar; curChar = GetNextChar (); } while (isalnum (curChar) || (curChar == '_') || (curChar == '.') && (pos < text.length())); result = STRING; //classify the token } return result; } //------------------------------------------------------------------------------ bool Parser::IsPunctuation (char ch) { char punctuation[22]; punctuation[0] = '('; punctuation[1] = ')'; punctuation[2] = '['; punctuation[3] = ']'; punctuation[4] = '{'; punctuation[5] = '}'; punctuation[6] = '/'; punctuation[7] = '\\'; punctuation[8] = ','; punctuation[9] = ';'; punctuation[10] = ':'; punctuation[11] = '='; punctuation[12] = '*'; punctuation[13] = '\''; punctuation[14] = '"'; punctuation[15] = '`'; punctuation[16] = '+'; punctuation[17] = '-'; punctuation[18] = '<'; punctuation[19] = '>'; punctuation[20] = '!'; punctuation[21] = '#'; punctuation[22] = '\0'; return (bool)(strchr (punctuation, ch) != NULL); } //------------------------------------------------------------------------------ bool Parser::IsWhiteSpace (char ch) { char whitespace[4]; whitespace[0] = ' '; whitespace[1] = '\t'; whitespace[2] = '\n'; whitespace[3] = '\0'; return (bool)(strchr (whitespace, ch) != NULL); } tv-0.5/TreeLib/treedrawer.cpp0000775000076400007640000007020110632024262013140 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: treedrawer.cpp,v 1.20 2007/06/07 15:48:02 rdmp1c Exp $ #include #include #include "treedrawer.h" #ifndef M_PI #define M_PI 3.14159265358979323846 // define pi #endif #define DEGREES_TO_RADIANS(d) ((d / 180.0) * M_PI) #define RADIANS_TO_DEGREES(r) ((180.0 * r) / M_PI) //------------------------------------------------------------------------------ TreeDrawer::TreeDrawer (Tree *tree) { t = tree; rooted = true; showInternalLabels = true; showLeafLabels = true; left = 0.0; top = 0.0; width = 400.0; height = 400.0; leafCount = 0; NodeIterator n (t->GetRoot()); Node *q = n.begin(); while (q) { if (q->IsLeaf ()) { point p; node_coordinates[q] = p; } q = n.next(); } } //------------------------------------------------------------------------------ void TreeDrawer::CalcLeaf (Node *p) { node_coordinates[p].y = top + (double)leafCount * leafGap; lastY = node_coordinates[p].y; leafCount++; // Cladogram node_coordinates[p].x = left + width; } //------------------------------------------------------------------------------ void TreeDrawer::CalcInternal (Node *p) { // Cladogram node_coordinates[p].x = left + (double)nodeGap * (double)(t->GetNumLeaves() - p->GetWeight()); // Slant node_coordinates[p].y = lastY - (((double)(p->GetWeight() - 1) * leafGap) / 2.0); } //------------------------------------------------------------------------------ void TreeDrawer::CalcCoordinates () { double l = t->GetNumLeaves(); leafGap = height / (l - 1.0); if (rooted) nodeGap = width / l; else nodeGap = width / (l - 1.0); leafCount = 0; if (rooted) { // Allow for edge below root left += nodeGap; width -= nodeGap; } NodeIterator n (t->GetRoot()); Node *q = n.begin(); while (q) { if (q->IsLeaf ()) { CalcLeaf (q); } else { CalcInternal (q); } q = n.next(); } } //------------------------------------------------------------------------------ void TreeDrawer::DrawLeaf (Node *p) { // cladogram (slant) NodePtr anc = p->GetAnc(); if (anc) { DrawLine (node_coordinates[p], node_coordinates[anc]); } DrawLeafLabel (p); } //------------------------------------------------------------------------------ void TreeDrawer::DrawInternal (Node *p) { // cladogram (slant) NodePtr anc = p->GetAnc(); if (anc) { DrawLine (node_coordinates[p], node_coordinates[anc]); } DrawInternalLabel (p); } //------------------------------------------------------------------------------ void TreeDrawer::DrawLeafLabel (Node *p) { if (showLeafLabels && (p->GetLabel() != "")) { point pt = node_coordinates[p]; #if USE_PORT pt.x += font.GetSize()/2; pt.y += font.GetSize()/3; #endif DrawText (pt, p->GetLabel()); } } //------------------------------------------------------------------------------ void TreeDrawer::DrawInternalLabel (Node *p) { if (showInternalLabels && (p->GetLabel() != "")) DrawText (node_coordinates[p], p->GetLabel()); } //------------------------------------------------------------------------------ void TreeDrawer::Draw () { NodeIterator n (t->GetRoot()); Node *q = n.begin(); while (q) { if (q->IsLeaf ()) { DrawLeaf (q); } else { DrawInternal (q); } q = n.next(); } if (rooted) { DrawRoot (); } } //------------------------------------------------------------------------------ void TreeDrawer::DrawRoot () { // Draw edge below root point pt2 = node_coordinates[t->GetRoot()]; point pt1 = pt2; pt1.x -= nodeGap; DrawLine (pt1, pt2); } //------------------------------------------------------------------------------ void TreeDrawer::DrawLine (point pt1, point pt2) { #if USE_WXWINDOWS dc->DrawLine ((int)pt1.x, (int)pt1.y, (int)pt2.x, (int)pt2.y); #endif #if USE_VC2 Port.DrawLine ((int)pt1.x, (int)pt1.y, (int)pt2.x, (int)pt2.y); #endif #if USE_PORT Port->DrawLine ((int)pt1.x, (int)pt1.y, (int)pt2.x, (int)pt2.y); #endif } //------------------------------------------------------------------------------ void TreeDrawer::DrawText (point pt, std::string s) { #if wxUSE_UNICODE std::wstring formatedString = L""; #else std::string formatedString = ""; #endif int i = 0; while (i < s.size()) { if (s[i] == '_') formatedString += ' '; else formatedString += s[i]; i++; } #if USE_VC2 pt.x += Port.GetMaxCharWidth()/2; pt.y += Port.GetFontHeight()/2; Port.DrawText (pt.x, pt.y, (char *)formatedString.c_str()); #endif #if USE_WXWINDOWS // We add a new level of scope to avoid a "Declaration of 's' shadows a parameter" // error in gcc, which is probably a gcc bug { wxCoord w, h, descent; wxString s (formatedString.c_str(), wxSTRING_MAXLEN); pt.x += dc->GetCharWidth(); pt.y -= dc->GetCharHeight()/2; dc->DrawText (s, (int)pt.x, (int)pt.y); } #endif #if USE_PORT Port->DrawText (pt.x, pt.y, (char *)formatedString.c_str()); #endif } //------------------------------------------------------------------------------ void TreeDrawer::SetPenWidth (int width) { #if USE_VC2 ::PenSize (width, width); #endif #if USE_PORT #endif } //------------------------------------------------------------------------------ void RectangleTreeDrawer::CalcCoordinates () { t->MakeNodeList(); maxDepth = 0; // Clear internal node depths for (int i = t->GetNumLeaves(); i < t->GetNumNodes(); i++) { (*t)[i]->SetDepth(0); } for (int i = 0; i < t->GetNumLeaves(); i++) { NodePtr p = (*t)[i]->GetAnc(); int count = 1; while (p) { if (count > p->GetDepth()) { p->SetDepth(count); if (count > maxDepth) maxDepth = count; } count++; p = p->GetAnc(); } } double l = t->GetNumLeaves(); leafGap = height / (l - 1.0); l = maxDepth + 1.0; if (rooted) nodeGap = width / l; else nodeGap = width / (l - 1.0); leafCount = 0; if (rooted) { // Allow for edge below root left += nodeGap; width -= nodeGap; } NodeIterator n (t->GetRoot()); Node *q = n.begin(); while (q) { if (q->IsLeaf ()) { CalcLeaf (q); } else { CalcInternal (q); } q = n.next(); } } //------------------------------------------------------------------------------ void RectangleTreeDrawer::CalcInternal (Node *p) { // Cladogram node_coordinates[p].x = left + (double)nodeGap * (double)(maxDepth - p->GetDepth()); // Rectangular style node_coordinates[p].y = node_coordinates[p->GetChild()].y + (node_coordinates[p->GetChild()->GetRightMostSibling()].y - node_coordinates[p->GetChild()].y)/2.0; } //------------------------------------------------------------------------------ void RectangleTreeDrawer::DrawLeaf (Node *p) { NodePtr anc = p->GetAnc(); if (anc) { point pt; pt.x = node_coordinates[anc].x; pt.y = node_coordinates[p].y; DrawLine (node_coordinates[p], pt); } DrawLeafLabel (p); } //------------------------------------------------------------------------------ void RectangleTreeDrawer::DrawInternal (Node *p) { // cladogram (slant) NodePtr anc = p->GetAnc(); if (anc) { point pt; pt.x = node_coordinates[anc].x; pt.y = node_coordinates[p].y; DrawLine (node_coordinates[p], pt); } point pt1, pt2; pt1.x = node_coordinates[p].x; pt1.y = node_coordinates[p->GetChild()].y; pt2.x = node_coordinates[p].x; pt2.y = node_coordinates[p->GetChild()->GetRightMostSibling()].y; DrawLine (pt1, pt2); DrawInternalLabel (p); } //------------------------------------------------------------------------------ void PhylogramDrawer::CalcCoordinates () { // 1. Get path lengths mMaxPathLength = 0.0; t->GetRoot()->SetPathLength (t->GetRoot()->GetEdgeLength()); // modify for rooted? // duh! this needs to be preorder!!!!!!!!! PreorderIterator n (t->GetRoot()); Node *q = n.begin(); while (q) { double d = q->GetEdgeLength(); if (d < 0.00001) d = 0.0; if (q != t->GetRoot()) q->SetPathLength (q->GetAnc()->GetPathLength() + d); if (q->GetPathLength() > mMaxPathLength) mMaxPathLength = q->GetPathLength(); q = n.next(); } // Is the tree ultrametric? (should really be a method of the tree class...) mUltrametric = true; NodeIterator u (t->GetRoot()); q = u.begin(); while (q && mUltrametric) { if (q->IsLeaf()) { double d = q->GetPathLength() - mMaxPathLength; #if (__GNUC__ == 3 && __GNUC_MINOR__ > 3) || __GNUC__ > 3 // fabs is no longer in the std namespace in gcc 3.4 or greater (sigh) mUltrametric = (fabs(d) <= 0.0001); #else mUltrametric = (std::fabs(d) <= 0.0001); #endif // cout << mMaxPathLength << ":" << q->GetPathLength() << " " << d << endl; } q = u.next(); } // Allow for scale bar #if USE_VC2 scalebar_space = Port.GetFontHeight() * 2; #endif #if USE_WXWINDOWS scalebar_space = dc->GetCharHeight() * 2; #endif #if USE_PORT scalebar_space = font.GetSize() * 2; #endif height -= scalebar_space; double l = t->GetNumLeaves(); leafGap = height / (l - 1.0); leafCount = 0; NodeIterator po (t->GetRoot()); q = po.begin(); while (q) { if (q->IsLeaf ()) { CalcLeaf (q); } else { CalcInternal (q); } q = po.next(); } } //------------------------------------------------------------------------------ void PhylogramDrawer::CalcInternal (Node *p) { node_coordinates[p].x = left + (p->GetPathLength() / mMaxPathLength) * width; // Rectangular style node_coordinates[p].y = node_coordinates[p->GetChild()].y + (node_coordinates[p->GetChild()->GetRightMostSibling()].y - node_coordinates[p->GetChild()].y)/2.0; } //------------------------------------------------------------------------------ void PhylogramDrawer::CalcLeaf (Node *p) { node_coordinates[p].x = left + (p->GetPathLength() / mMaxPathLength) * width; node_coordinates[p].y = top + (double)leafCount * leafGap; lastY = node_coordinates[p].y; leafCount++; } //------------------------------------------------------------------------------ void PhylogramDrawer::Draw () { TreeDrawer::Draw (); DrawScaleBar (); } //------------------------------------------------------------------------------ void PhylogramDrawer::DrawScaleBar () { point pt1, pt2; // Draw scale bar using "log" scale float m = log10 (mMaxPathLength); int i = (int) m; if (!mUltrametric) i -= 1; float bar = pow (10.0, i); float scalebar = (bar / mMaxPathLength) * (float)width; //int scalebar = (int)((bar / mMaxPathLength) * width); // Pen to draw scale line #if USE_WXWINDOWS wxPen scale_pen (*wxBLACK, 1, wxSOLID); dc->SetPen (scale_pen); #endif if (mUltrametric) { // Draw scale bar that is the length of the tree pt1.x = left; pt1.y = top + height + scalebar_space; pt2.x = left + width; pt2.y = pt1.y; // Draw DrawLine (pt1, pt2); // Draw ticks and labels int num_ticks = (int)(mMaxPathLength/bar); int tick_height = scalebar_space/3; for (int k = 0; k <= num_ticks; k++) { pt1.x = left + width - scalebar * (float)k; pt1.y = top + height + scalebar_space; pt2.x = pt1.x; pt2.y = pt1.y - tick_height; DrawLine (pt1, pt2); // Label #if wxUSE_UNICODE wchar_t buf[16]; if (i >= 0) { swprintf (buf, wcslen(buf), L"%d", int (bar * k)); } else { int j = abs (i); swprintf (buf, wcslen(buf), L"%.*f", j, bar * (float)k); } #else char buf[16]; if (i >= 0) { sprintf (buf, "%d", int (bar * k)); } else { int j = abs (i); sprintf (buf, "%.*f", j, bar * (float)k); } #endif #if USE_WXWINDOWS wxCoord w, h; wxString s (buf, wxSTRING_MAXLEN); dc->GetTextExtent (s, &w, &h); int x = (int)pt2.x; int y = (int)pt2.y; x -= w/2; y -= h; dc->DrawText (s, x, y); #else std::string s = buf; DrawText (pt2, buf); #endif } } else { // Simple bar to indicate scale pt1.x = left; pt1.y = top + height + scalebar_space/2; pt2 = pt1; pt2.x += scalebar; // Draw DrawLine (pt1, pt2); // Text to the right a la PAUP* char buf[64]; if (i >= 0) { sprintf (buf, "%d", int (bar)); } else { int j = abs (i); sprintf (buf, "%.*f", j, bar); } std::string s = buf; DrawText (pt2, buf); } } //------------------------------------------------------------------------------ void PhylogramDrawer::DrawRoot () { // Draw edge below root point pt2 = node_coordinates[t->GetRoot()]; point pt1 = pt2; pt1.x -= (t->GetRoot()->GetPathLength() / mMaxPathLength) * width; DrawLine (pt1, pt2); } //------------------------------------------------------------------------------ void CircleTreeDrawer::CalcLeaf (Node *p) { node_angle[p] = leaf_angle * (double)leafCount; node_radius[p] = leaf_radius; leafCount++; node_coordinates[p].x = node_radius[p] * cos (node_angle[p]); node_coordinates[p].y = node_radius[p] * sin (node_angle[p]); } //------------------------------------------------------------------------------ void CircleTreeDrawer::CalcInternal (Node *p) { double left_angle = node_angle[p->GetChild()]; double right_angle = node_angle[p->GetChild()->GetRightMostSibling()]; node_angle[p] = left_angle + (right_angle - left_angle)/2.0; node_radius[p] = nodeGap * (double)(maxDepth - p->GetDepth()); node_coordinates[p].x = node_radius[p] * cos (node_angle[p]); node_coordinates[p].y = node_radius[p] * sin (node_angle[p]); NodePtr q = p->GetChild(); while (q) { point pt; node_backarc[q] = pt; node_backarc[q].x = node_radius[p] * cos (node_angle[q]); node_backarc[q].y = node_radius[p] * sin (node_angle[q]); q = q->GetSibling(); } } //------------------------------------------------------------------------------ void CircleTreeDrawer::CalcCoordinates () { t->MakeNodeList(); maxDepth = 0; // Clear internal node depths for (int i = t->GetNumLeaves(); i < t->GetNumNodes(); i++) { (*t)[i]->SetDepth(0); } for (int i = 0; i < t->GetNumLeaves(); i++) { NodePtr p = (*t)[i]->GetAnc(); int count = 1; while (p) { if (count > p->GetDepth()) { p->SetDepth(count); if (count > maxDepth) maxDepth = count; } count++; p = p->GetAnc(); } } leaf_angle = 2 * M_PI / t->GetNumLeaves(); left = top = 0.0; width = height = 400.0; leaf_radius = width / 2.0; leafCount = 0; nodeGap = leaf_radius / double(maxDepth); origin.x = 0.0; origin.y = 0.0; NodeIterator n (t->GetRoot()); Node *q = n.begin(); while (q) { if (q->IsLeaf ()) { CalcLeaf (q); } else { CalcInternal (q); } q = n.next(); } // Translate origin.x = left + (width/2.0); origin.y = top + (height/2.0); q = n.begin(); while (q) { node_coordinates[q].x += origin.x; node_coordinates[q].y += origin.y; node_backarc[q].x += origin.x; node_backarc[q].y += origin.y; q = n.next(); } } //------------------------------------------------------------------------------ void CircleTreeDrawer::DrawLeaf (Node *p) { DrawLine (node_coordinates[p], node_backarc[p]); DrawLeafLabel (p); } //------------------------------------------------------------------------------ void CircleTreeDrawer::DrawInternal (Node *p) { NodePtr anc = p->GetAnc(); if (anc) { DrawLine (node_coordinates[p], node_backarc[p]); double left_angle = node_angle[p->GetChild()]; double right_angle = node_angle[p->GetChild()->GetRightMostSibling()]; #if USE_PORT GPoint pt; pt.SetX((int)origin.x); pt.SetY((int)origin.y); Port->DrawArc (pt, node_radius[p], RADIANS_TO_DEGREES(left_angle), RADIANS_TO_DEGREES(right_angle)); #endif } DrawInternalLabel (p); } //------------------------------------------------------------------------------ void KMLTreeDrawer::CalcLeaf (Node *p) { nodeLatitude[p] = p->GetLatitude(); nodeLongitude[p] = p->GetLongitude(); switch (treeStyle) { case 0: case 1: nodeAltitude[p] = p->GetWeight() * altitudeFactor; break; case 2: nodeAltitude[p] = (mMaxPathLength - p->GetPathLength()) * 500 * altitudeFactor; break; } } //------------------------------------------------------------------------------ void KMLTreeDrawer::CalcInternal (Node *p) { if (treeStyle == 0) { // angle nodeLatitude[p] = nodeLatitude[p->GetChild()] + (nodeLatitude[p->GetChild()->GetRightMostSibling()] - nodeLatitude[p->GetChild()])/2.0; nodeLongitude[p] = nodeLongitude[p->GetChild()] + (nodeLongitude[p->GetChild()->GetRightMostSibling()] - nodeLongitude[p->GetChild()])/2.0; } else { // rectangular, so we need great circles double lat1 = DEGREES_TO_RADIANS(nodeLatitude[p->GetChild()]); double lon1 = DEGREES_TO_RADIANS(nodeLongitude[p->GetChild()]); double lat2 = DEGREES_TO_RADIANS(nodeLatitude[p->GetChild()->GetRightMostSibling()]); double lon2 = DEGREES_TO_RADIANS(nodeLongitude[p->GetChild()->GetRightMostSibling()]); // d=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2)) double d = acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2)); //cout << d << endl; if (d == 0.0) { // descendants are on same spot nodeLatitude[p] = nodeLatitude[p->GetChild()] ; nodeLongitude[p] = nodeLongitude[p->GetChild()]; } else { double frac = 0.5; double A =sin((1-frac)*d)/sin(d); double B =sin(frac*d)/sin(d); double x = A*cos(lat1)*cos(lon1) + B*cos(lat2)*cos(lon2); double y = A*cos(lat1)*sin(lon1) + B*cos(lat2)*sin(lon2); double z = A*sin(lat1) + B*sin(lat2); double lat=atan2(z,sqrt(x*x+y*y)); double lon=atan2(y,x); nodeLongitude[p] = RADIANS_TO_DEGREES(lon); nodeLatitude[p] = RADIANS_TO_DEGREES(lat); } } switch (treeStyle) { case 0: nodeAltitude[p] = p->GetWeight() * altitudeFactor; break; case 1: nodeAltitude[p] = p->GetWeight() * altitudeFactor; break; case 2: nodeAltitude[p] = (mMaxPathLength - p->GetPathLength()) * 500 * altitudeFactor; break; } } //------------------------------------------------------------------------------ void KMLTreeDrawer::CalcCoordinates () { t->MakeNodeList(); maxDepth = 0; // Clear internal node depths for (int i = t->GetNumLeaves(); i < t->GetNumNodes(); i++) { (*t)[i]->SetDepth(0); } for (int i = 0; i < t->GetNumLeaves(); i++) { NodePtr p = (*t)[i]->GetAnc(); int count = 1; while (p) { if (count > p->GetDepth()) { p->SetDepth(count); if (count > maxDepth) maxDepth = count; } count++; p = p->GetAnc(); } } if (treeStyle == 2) { // 1. Get path lengths mMaxPathLength = 0.0; t->GetRoot()->SetPathLength (t->GetRoot()->GetEdgeLength()); // modify for rooted? // duh! this needs to be preorder!!!!!!!!! PreorderIterator pin (t->GetRoot()); Node *q = pin.begin(); while (q) { double d = q->GetEdgeLength(); if (d < 0.00001) d = 0.0; if (q != t->GetRoot()) q->SetPathLength (q->GetAnc()->GetPathLength() + d); if (q->GetPathLength() > mMaxPathLength) mMaxPathLength = q->GetPathLength(); q = pin.next(); } } leafCount = 0; NodeIterator n (t->GetRoot()); Node *q = n.begin(); while (q) { if (q->IsLeaf ()) { CalcLeaf (q); } else { CalcInternal (q); } q = n.next(); } } //------------------------------------------------------------------------------ void KMLTreeDrawer::DrawLeaf (Node *p) { DrawLeafLabel (p); NodePtr anc = p->GetAnc(); if (anc) { *f << "" << endl; *f << "#treeLine" << endl; *f << "" << endl; *f << "absolute" << endl; *f << "" << endl; *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[p] << endl; *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[anc] << endl; if (treeStyle == 0) { *f << nodeLongitude[anc] << "," << nodeLatitude[anc] << "," << nodeAltitude[anc] << endl; } else { *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[anc] << endl; } *f << "" << endl; *f << "" << endl; *f << "" << endl; } } //------------------------------------------------------------------------------ void KMLTreeDrawer::DrawInternal (Node *p) { DrawInternalLabel (p); NodePtr anc = p->GetAnc(); *f << "" << endl; *f << "#treeLine" << endl; *f << "" << endl; *f << "absolute" << endl; *f << "" << endl; if (treeStyle == 0) { *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[p] << endl; if (anc) { *f << nodeLongitude[anc] << "," << nodeLatitude[anc] << "," << nodeAltitude[anc] << endl; } } else { // Code to handle curvature... double lat1 = DEGREES_TO_RADIANS(nodeLatitude[p->GetChild()]); double lon1 = DEGREES_TO_RADIANS(nodeLongitude[p->GetChild()]); double lat2 = DEGREES_TO_RADIANS(nodeLatitude[p->GetChild()->GetRightMostSibling()]); double lon2 = DEGREES_TO_RADIANS(nodeLongitude[p->GetChild()->GetRightMostSibling()]); // d=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2)) double d = acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2)); cout << d << endl; if (d == 0.0) { // descendants are on same spot, draw stem only if (anc) { *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[anc] << endl; *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[p] << endl; } } else { // Draw arc and stem for (double frac =0.0; frac <= 1.0; frac += 0.1) { // A=sin((1-f)*d)/sin(d) double A =sin((1-frac)*d)/sin(d); double B =sin(frac*d)/sin(d); double x = A*cos(lat1)*cos(lon1) + B*cos(lat2)*cos(lon2); double y = A*cos(lat1)*sin(lon1) + B*cos(lat2)*sin(lon2); double z = A*sin(lat1) + B*sin(lat2); double lat=atan2(z,sqrt(x*x+y*y)); double lon=atan2(y,x); *f << RADIANS_TO_DEGREES(lon) << "," << RADIANS_TO_DEGREES(lat) << "," << nodeAltitude[p] << endl; if (frac == 0.5) { if (anc) { *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[anc] << endl; *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[p] << endl; } } } } // Original straight code /* // left *f << nodeLongitude[p->GetChild()] << "," << nodeLatitude[p->GetChild()] << "," << nodeAltitude[p] << endl; // centre *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[p] << endl; // stem if (anc) { *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[anc] << endl; *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[p] << endl; } // right *f << nodeLongitude[p->GetChild()->GetRightMostSibling()] << "," << nodeLatitude[p->GetChild()->GetRightMostSibling()] << "," << nodeAltitude[p] << endl; */ } *f << "" << endl; *f << "" << endl; *f << "" << endl; } //------------------------------------------------------------------------------ void KMLTreeDrawer::DrawRoot () { } //------------------------------------------------------------------------------ void KMLTreeDrawer::Draw () { cur = t->GetRoot(); count = 0; while (cur) { if (cur->GetChild()) { count++; *f << "" << endl; if (cur == t->GetRoot()) { *f << "Tree"; if (t->GetName() != "") { *f << ": " << t->GetName(); } *f << "" << endl; } else { if (cur->GetLabel() != "") { *f << ""; *f << cur->GetLabel(); *f << "" << endl; } } if (cur->IsLeaf()) DrawLeaf(cur); else DrawInternal(cur); stk.push (cur); cur = cur->GetChild(); } else { count++; *f << "" << endl; if (cur->IsLeaf()) DrawLeaf(cur); else DrawInternal(cur); *f << "" << endl; while (!stk.empty() && (cur->GetSibling() == NULL)) { *f << "" << endl; cur = stk.top(); stk.pop(); } if (stk.empty()) cur = NULL; else { cur = cur->GetSibling(); } } } // // Taxon labels *f << "" << endl << "Taxon Labels" << endl; for (int i = 0; i < t->GetNumLeaves(); i++) { NodePtr p = (*t)[i]; *f << "" << endl; *f << "" << p->GetLabel() << "" << endl; *f << "#whiteBall" << endl; *f << "" << endl; *f << "absolute" << endl; *f << "1" << endl; *f << "" << endl; *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[p] << endl; *f << "" << endl; *f << "" << endl; *f << "" << endl; } *f << "" << endl; } //------------------------------------------------------------------------------ void KMLTreeDrawer::DrawLeafLabel (Node *p) { if (showLeafLabels && (p->GetLabel() != "")) { *f << "" << p->GetLabel() << "" << endl; } } //------------------------------------------------------------------------------ void KMLTreeDrawer::DrawInternalLabel (Node *p) { if (showInternalLabels && (p->GetLabel() != "")) { *f << "" << endl; *f << "" << p->GetLabel() << "" << endl; *f << "#whiteBall" << endl; *f << "" << endl; *f << "absolute" << endl; *f << "" << endl; *f << nodeLongitude[p] << "," << nodeLatitude[p] << "," << nodeAltitude[p] << endl; *f << "" << endl; *f << "" << endl; *f << "" << endl; } } tv-0.5/TreeLib/ntree.cpp0000775000076400007640000001453110310032565012113 00000000000000#include "ntree.h" #ifdef __GNUC__ #include #endif #include enum SetRelations {IDENTITY = 0, DISJOINT, SUBSET, SUPERSET, OVERLAPPING}; SetRelations Relationship (IntegerSet &one, IntegerSet &two); SetRelations Relationship (IntegerSet &one, IntegerSet &two) { SetRelations result; /* cout << " {"; std::copy (one.begin(), one.end(), std::ostream_iterator(cout, " ")); cout << "}"; cout << " {"; std::copy (two.begin(), two.end(), std::ostream_iterator(cout, " ")); cout << "}"; */ if (one == two) result = IDENTITY; else if (std::includes (two.begin(), two.end(), one.begin(), one.end())) result = SUBSET; // one is a subset of two else if (std::includes (one.begin(), one.end(), two.begin(), two.end())) result = SUPERSET; // two is a subset of one else { IntegerSet common; std::set_intersection (one.begin(), one.end(), two.begin(), two.end(), std::inserter (common, common.end())); if (common.size() == 0) result = DISJOINT; else result = OVERLAPPING; } // cout << "result=" << result << endl; return result; } void NTree::BuildClustersTraverse (NNodePtr p) { if (p) { p->Cluster.erase (p->Cluster.begin(), p->Cluster.end()); BuildClustersTraverse ((NNodePtr)(p->GetChild())); BuildClustersTraverse ((NNodePtr)(p->GetSibling())); if (p->IsLeaf()) { switch (use) { case useLeafNumber: p->Cluster.insert (p->GetLeafNumber()); break; case useLabelNumber: p->Cluster.insert (p->GetLabelNumber()); break; } } if (p !=Root) { NNodePtr anc = (NNodePtr)(p->GetAnc()); std::set > temp_set; std::set_union(anc->Cluster.begin(), anc->Cluster.end(), p->Cluster.begin(), p->Cluster.end(), std::inserter(temp_set, temp_set.begin())); anc->Cluster.swap(temp_set); } } } void NTree::BuildLeafLabelsTraverse (NNodePtr p) { if (p) { BuildLeafLabelsTraverse ((NNodePtr)(p->GetChild())); BuildLeafLabelsTraverse ((NNodePtr)(p->GetSibling())); if (p->IsLeaf()) { leaf_labels[p->GetLabel()] = p; } } } // debugging //------------------------------------------------------------------------------ void NTree::ShowClustersTraverse (NNodePtr p) { if (p) { ShowClustersTraverse ((NNodePtr)(p->GetChild())); // Show clusters std::cout << "{ "; std::copy (p->Cluster.begin(), p->Cluster.end(), std::ostream_iterator(std::cout, " ")); std::cout << "}" << std::endl; ShowClustersTraverse ((NNodePtr)(p->GetSibling())); } } //------------------------------------------------------------------------------ // Create a star tree with n leaves void NTree::StarTree (int n) { Leaves = n; Internals = 1; Root = NewNode(); Root->SetWeight (n); Root->SetDegree (n); CurNode = NewNode(); CurNode->SetLeaf(true); CurNode->SetLeafNumber(1); CurNode->SetLabelNumber(1); Root->SetChild (CurNode); CurNode->SetAnc (Root); // Remaining leaves for (int i = 1; i < n; i++) { NodePtr q = NewNode (); q->SetLeaf(true); q->SetLeafNumber(i+1); q->SetLabelNumber(i+1); q->SetAnc (Root); CurNode->SetSibling (q);; CurNode = q; } MakeNodeList(); Update(); BuildLeafClusters (); } //------------------------------------------------------------------------------ // Add cluster to a tree int NTree::AddCluster (IntegerSet &b, char *label) { Error = 0; int n = b.size(); if (n > 1 && n < ((NNodePtr)Root)->Cluster.size()) { // non trivial set NNodePtr p = (NNodePtr)Root; NNodePtr q = (NNodePtr)(p->GetChild()); bool done = false; SetRelations r; // locate insertion point while (q && !done) { r = Relationship (b, q->Cluster); switch (r) { case IDENTITY: done = true; Error = 1; // we already have this cluster break; case SUBSET: p = q; q = (NNodePtr)(q->GetChild()); break; case DISJOINT: p = q; q = (NNodePtr)(q->GetSibling()); break; case SUPERSET: done = true; break; case OVERLAPPING: done = true; Error = 2; // can't be a part of a tree break; default: break; } } if (Error == 0) { // Create node NNodePtr nunode = (NNodePtr)NewNode (); Internals++; nunode->SetWeight(n); nunode->Cluster = b; if (label) nunode->SetLabel (label); // Insert node in tree switch (r) { case SUBSET: p->SetChild (nunode); nunode->SetAnc (p); break; case DISJOINT: p->SetSibling (nunode); nunode->SetAnc (p->GetAnc()); break; case SUPERSET: if (q == p->GetChild()) { p->SetChild (nunode); nunode->SetChild (q); nunode->SetAnc (p); q->SetAnc (nunode); } else { p->SetSibling (nunode); nunode->SetChild (q); nunode->SetAnc (p->GetAnc()); q->SetAnc (nunode); } NNodePtr tmp = q; NNodePtr s = (NNodePtr)(q->GetSibling()); NNodePtr t = (NNodePtr)(q->GetAnc()); while (s) { r = Relationship (s->Cluster, b); if ((r == IDENTITY) || (r == SUBSET)) { s->SetAnc(nunode); tmp = s; s = (NNodePtr)(s->GetSibling()); } else { t->SetSibling (s); tmp->SetSibling (s->GetSibling()); t = s; t->SetSibling (NULL); s = (NNodePtr)(tmp->GetSibling()); } } break; // checkSiblings (q, nunode->cluster); } // nunode->GetDegreeOf (); // nunode->anc->degree = nunode->degree - nunode->degree - 1; } } return Error; } tv-0.5/TreeLib/Makefile.in0000664000076400007640000003664111432544630012351 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = TreeLib DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libtreelib_a_AR = $(AR) $(ARFLAGS) libtreelib_a_LIBADD = am__libtreelib_a_SOURCES_DIST = nodeiterator.h Parse.cpp Parse.h \ profile.h tokeniser.cpp tokeniser.h TreeLib.cpp TreeLib.h \ treedrawer.cpp treedrawer.h treereader.cpp treereader.h \ treewriter.cpp treewriter.h treeorder.cpp treeorder.h \ ntree.cpp ntree.h mast.cpp mast.h lcaquery.cpp lcaquery.h \ quartet.cpp quartet.h gport/gport.cpp @ENT_FALSE@am_libtreelib_a_OBJECTS = Parse.$(OBJEXT) \ @ENT_FALSE@ tokeniser.$(OBJEXT) TreeLib.$(OBJEXT) \ @ENT_FALSE@ treedrawer.$(OBJEXT) treereader.$(OBJEXT) \ @ENT_FALSE@ treewriter.$(OBJEXT) treeorder.$(OBJEXT) @ENT_TRUE@am_libtreelib_a_OBJECTS = Parse.$(OBJEXT) \ @ENT_TRUE@ tokeniser.$(OBJEXT) TreeLib.$(OBJEXT) \ @ENT_TRUE@ treedrawer.$(OBJEXT) treereader.$(OBJEXT) \ @ENT_TRUE@ treewriter.$(OBJEXT) treeorder.$(OBJEXT) \ @ENT_TRUE@ ntree.$(OBJEXT) mast.$(OBJEXT) lcaquery.$(OBJEXT) \ @ENT_TRUE@ quartet.$(OBJEXT) gport.$(OBJEXT) libtreelib_a_OBJECTS = $(am_libtreelib_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libtreelib_a_SOURCES) DIST_SOURCES = $(am__libtreelib_a_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EXEEXT = @EXEEXT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WX_CONFIG = @WX_CONFIG@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libtreelib.a @ENT_FALSE@INCLUDES = -Igport @ENT_TRUE@INCLUDES = -Igport -I../graph @ENT_FALSE@libtreelib_a_SOURCES = nodeiterator.h Parse.cpp Parse.h \ @ENT_FALSE@ profile.h tokeniser.cpp tokeniser.h TreeLib.cpp TreeLib.h \ @ENT_FALSE@ treedrawer.cpp treedrawer.h treereader.cpp treereader.h \ @ENT_FALSE@ treewriter.cpp treewriter.h treeorder.cpp treeorder.h @ENT_TRUE@libtreelib_a_SOURCES = nodeiterator.h Parse.cpp Parse.h \ @ENT_TRUE@ profile.h tokeniser.cpp tokeniser.h TreeLib.cpp TreeLib.h \ @ENT_TRUE@ treedrawer.cpp treedrawer.h treereader.cpp treereader.h \ @ENT_TRUE@ treewriter.cpp treewriter.h treeorder.cpp treeorder.h \ @ENT_TRUE@ ntree.cpp ntree.h mast.cpp mast.h lcaquery.cpp lcaquery.h quartet.cpp quartet.h \ @ENT_TRUE@ gport/gport.cpp EXTRA_DIST = gport/gport.h gport/gdefs.h gport/gport.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu TreeLib/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu TreeLib/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libtreelib.a: $(libtreelib_a_OBJECTS) $(libtreelib_a_DEPENDENCIES) -rm -f libtreelib.a $(libtreelib_a_AR) libtreelib.a $(libtreelib_a_OBJECTS) $(libtreelib_a_LIBADD) $(RANLIB) libtreelib.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Parse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TreeLib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gport.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcaquery.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mast.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quartet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tokeniser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/treedrawer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/treeorder.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/treereader.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/treewriter.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` gport.o: gport/gport.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gport.o -MD -MP -MF $(DEPDIR)/gport.Tpo -c -o gport.o `test -f 'gport/gport.cpp' || echo '$(srcdir)/'`gport/gport.cpp @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/gport.Tpo $(DEPDIR)/gport.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gport/gport.cpp' object='gport.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gport.o `test -f 'gport/gport.cpp' || echo '$(srcdir)/'`gport/gport.cpp gport.obj: gport/gport.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gport.obj -MD -MP -MF $(DEPDIR)/gport.Tpo -c -o gport.obj `if test -f 'gport/gport.cpp'; then $(CYGPATH_W) 'gport/gport.cpp'; else $(CYGPATH_W) '$(srcdir)/gport/gport.cpp'; fi` @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/gport.Tpo $(DEPDIR)/gport.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gport/gport.cpp' object='gport.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gport.obj `if test -f 'gport/gport.cpp'; then $(CYGPATH_W) 'gport/gport.cpp'; else $(CYGPATH_W) '$(srcdir)/gport/gport.cpp'; fi` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: tv-0.5/TreeLib/TreeLib.cpp0000664000076400007640000007456311432543452012344 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: TreeLib.cpp,v 1.30 2007/08/04 21:41:55 rdmp1c Exp $ #include "TreeLib.h" #include "Parse.h" #include #include // Convert a string to a NEXUS format string std::string NEXUSString (const std::string s) { std::string outputString =""; bool enclose = false; int i = 0; if (isalpha (s[0])) { // First character is a letter, check the rest i = 1; while ((i < s.length()) && !enclose) { if (!isalnum (s[i]) && (s[i] != ' ') && (s[i] != '_') && (s[i] != '.')) enclose = true; i++; } } else enclose = true; if (enclose) { outputString = "'"; } i = 0; while (i < s.length()) { if (s[i] == '\'') outputString += "''"; else if ((s[i] == ' ') && !enclose) outputString += '_'; else outputString += s[i]; i++; } if (enclose) { outputString += "'"; } return outputString; } // Convert NEXUS string to a display string std::string NEXUSToDisplayString (const std::string s) { std::string outputString =""; int i = 0; while (i < s.size()) { if (s[i] == '_') outputString += ' '; else outputString += s[i]; i++; } return outputString; } // Convert NEXUS string to a display string std::string ReplaceCharacter (const std::string s, char needle, char replace) { std::string outputString =""; int i = 0; while (i < s.size()) { if (s[i] == needle) outputString += replace; else outputString += s[i]; i++; } return outputString; } //------------------------------------------------------------------------------ Node::Node () { Child = Anc = Sib = NULL; Label = ""; Weight = 0; Length = 0.0; Leaf = false; Height = 0; Marked = false; Depth = 0; Degree = 0; PathLength = 0.0; LeafNumber = 0; LabelNumber = 0; Index = 0; Latitude = Longitude = 0.0; Value = 0; } //------------------------------------------------------------------------------ void Node::Copy (Node *theCopy) { theCopy->SetLeaf (IsLeaf ()); theCopy->SetLabel (Label); theCopy->SetIndex (Index); theCopy->SetLeafNumber (LeafNumber); theCopy->SetLabelNumber (LabelNumber); theCopy->SetEdgeLength (Length); } void Node::Dump (std::ostream &f) { f << setw (4) << setiosflags (ios::right) << Index; if (Leaf) f << " L"; else f << " "; f << setw(7) << LeafNumber; f << setw(7) << Degree; f << setw(7) << Weight; f << setw(7) << Depth; f << setprecision (3) << setw (8) << Length; f << " " << Label; f << endl; } ///------------------------------------------------------------------------------ // True if node is a left descendant of q bool Node::IsALeftDescendantOf (Node *q) { NodePtr r = this; while ((r) && (r != q->Child) && (r != q)) r = r->Anc; return (r == q->Child); } //------------------------------------------------------------------------------ // Return sibling node that is immediately to the LEFT of this node Node *Node::LeftSiblingOf () { NodePtr q = Anc->Child; while (q->Sib != this) q = q->Sib; return q; } //------------------------------------------------------------------------------ // Return the rightmost sibling of the node Node *Node::GetRightMostSibling () { Node *p = this; while (p->Sib) p = p->Sib; return (p); } void Node::GetSpan (Node* &left, Node* &right) { left = right = NULL; if (!IsLeaf()) { // left most descendant of this node Node* p = GetChild(); while (p) { left = p; p = p->GetChild(); } // rightmost descendant of this node p = GetChild()->GetRightMostSibling(); while (p) { right = p; p = p->GetChild(); if (p) { p = p->GetRightMostSibling(); } } } } //------------------------------------------------------------------------------ Tree::Tree () { Root = NULL; CurNode = NULL; Leaves = 0; Internals = 0; Error = 0; InternalLabels = false; EdgeLengths = false; Nodes = NULL; Name = ""; Rooted = false; Weight = 1.0; } //------------------------------------------------------------------------------ // Copy constructor Tree::Tree (const Tree &t) { if (t.GetRoot() == NULL) { Root = NULL; CurNode = NULL; Leaves = 0; Internals = 0; Error = 0; InternalLabels = false; EdgeLengths = false; Nodes = NULL; Name = ""; Rooted = false; Weight = 1.0; } else { CurNode = t.GetRoot(); NodePtr placeHolder; t.copyTraverse (CurNode, placeHolder ); Root = placeHolder; Leaves = t.GetNumLeaves (); Internals = t.GetNumInternals (); Name = t.GetName (); CurNode = NULL; Error = 0; InternalLabels = t.GetHasInternalLabels ();; EdgeLengths = t.GetHasEdgeLengths (); Nodes = NULL; Rooted = t.IsRooted(); Weight = t.GetWeight(); } } //------------------------------------------------------------------------------ Tree::~Tree () { deletetraverse (Root); delete [] Nodes; } //------------------------------------------------------------------------------ void Tree::deletetraverse (NodePtr p) { if (p) { deletetraverse (p->GetChild()); deletetraverse (p->GetSibling()); delete p; } } //------------------------------------------------------------------------------ /* Return a copy of the subtree in rooted at RootedAt. The function result is the root of the subtree. Tree x---y b---c x'--y' \ \ \ \ \ \ RootedAt ->w--------a ==> CopyOfSubTree -> NULL \ \ which corresponds to copying x' y' x y b c \ / \ / \ / \ / \ / \ / w' from w a \ / \ / \ / v */ //------------------------------------------------------------------------------ // This code needs Tree to be a friend of Node void Tree::copyTraverse (NodePtr p1, NodePtr &p2) const { if (p1) { p2 = NewNode (); p1->Copy (p2); // Note the call to p2->child, not p2->GetChild(). Calling the field // is essential because calling GetChild merely passes a temporary // copy of the child, hence we are not actually creating a child of p2. // We can access child directly by making Tree a friend of Node (see // TreeLib.h). copyTraverse (p1->GetChild(), p2->Child); if (p2->GetChild()) p2->GetChild()->SetAnc (p2); // Ensure we don't copy RootedAt sibling. If the sibling is NULL then // we won't anyway, but this line ensures this for all cases. if (p1 != CurNode) copyTraverse (p1->GetSibling(), p2->Sib); // note sib if (p2->GetChild ()) { NodePtr q = p2->GetChild()->GetSibling(); while (q) { q->SetAnc (p2); q = q->GetSibling(); } } } } //------------------------------------------------------------------------------ NodePtr Tree::CopyOfSubtree (NodePtr RootedAt) { CurNode = RootedAt; // Store this to avoid copying too much of the tree NodePtr placeHolder; // This becomes the root of the subtree copyTraverse (CurNode, placeHolder); return placeHolder; } //------------------------------------------------------------------------------ // This code needs Tree to be a friend of Node void Tree::writeTraverse (NodePtr p) { if (p) { if (p->IsLeaf()) { *treeStream << NEXUSString (p->GetLabel()); if (EdgeLengths) { *treeStream << ':' << p->GetEdgeLength (); } } else { *treeStream << "("; } traverse (p->GetChild()); if (p->GetSibling() && (p != CurNode)) { *treeStream << ","; } else { if (p != CurNode) { *treeStream << ")"; if ((p->GetAnc()->GetLabel() != "")) { *treeStream << NEXUSString (p->GetAnc()->GetLabel ()) ; } if (EdgeLengths && (p->GetAnc () != CurNode)) { *treeStream << ':' << p->GetAnc()->GetEdgeLength (); } traverse (p->GetSibling()); } } } } void Tree::WriteSubtree (std::ostream &f, NodePtr subtreeRoot) { treeStream = &f; CurNode = subtreeRoot; // Store this to avoid copying too much of the tree writeTraverse (CurNode); f << ";"; } //------------------------------------------------------------------------------ string Tree::GetErrorMsg () { string s = "No error"; switch (Error) { case errSYNTAX: s = "Syntax error"; break; case errENDOFSTRING: s = "Syntax error"; break; case errMISSINGLPAR: s = "Missing '('"; break; case errUNBALANCED: s = "Unbalance parentheses"; break; case errSTACKNOTEMPTY: s = "Stack not empty"; break; case errSEMICOLON: s = "Expecting a semicolon"; break; default: break; } return s; } //------------------------------------------------------------------------------ // Make CurNode a leaf, called by tree reading code void Tree::MakeCurNodeALeaf (int i) { Leaves++; CurNode->SetLeaf(true); CurNode->SetWeight(1); // CurNode->SetLabelNumber(i); CurNode->SetLeafNumber(Leaves); // Nodes[i - 1] = CurNode; } //m //------------------------------------------------------------------------------ // Make a child of CurNode and make it CurNode void Tree::MakeChild () { NodePtr q = NewNode(); CurNode->SetChild(q); q->SetAnc(CurNode); CurNode->IncrementDegree(); CurNode = q; Internals++; } //------------------------------------------------------------------------------ // Create a new node and make it the root of the tree, and set CurNode=Root. void Tree::MakeRoot () { CurNode = NewNode(); Root = CurNode; } //------------------------------------------------------------------------------ // Make a sibling of CurNode and make CurNode the new node. void Tree::MakeSibling () { NodePtr q = NewNode (); NodePtr ancestor = CurNode->GetAnc(); CurNode->SetSibling(q); q->SetAnc(ancestor); ancestor->AddWeight(CurNode->GetWeight()); ancestor->IncrementDegree(); CurNode = q; } //------------------------------------------------------------------------------ int Tree::Parse (const char *TreeDescr) { enum {stGETNAME, stGETINTERNODE, stNEXTMOVE, stFINISHCHILDREN, stQUIT, stACCEPTED} state; stack< NodePtr, vector > stk; NodePtr q; Parser p ((char *)TreeDescr); tokentype token; float f; // Initialise tree variables Root = NULL; Leaves = 0; Internals = 0; Error = 0; // Create first node CurNode = NewNode(); Root = CurNode; // Initialise FSA that reads tree state = stGETNAME; token = p.NextToken (); while ((state != stQUIT) && (state != stACCEPTED)) { switch (state) { case stGETNAME: switch (token) { case SPACE: case TAB: case NEWLINE: token = p.NextToken (); break; case STRING: // to do: handle translation Leaves++; CurNode->SetLeaf (true); CurNode->SetLeafNumber (Leaves); CurNode->SetWeight (1); CurNode->SetLabel (p.GetToken()); CurNode->SetDegree (0); token = p.NextToken (); state = stGETINTERNODE; break; case NUMBER: // to do: handle translation Leaves++; CurNode->SetLeaf (true); CurNode->SetLeafNumber (Leaves); CurNode->SetWeight (1); CurNode->SetLabel (p.GetToken()); CurNode->SetDegree (0); token = p.NextToken (); state = stGETINTERNODE; break; case LPAR: state = stNEXTMOVE; break; case ENDOFSTRING: Error = errENDOFSTRING; state = stQUIT; break; default: Error = errSYNTAX; state = stQUIT; break; } break; case stGETINTERNODE: switch (token) { case SPACE: case TAB: case NEWLINE: token = p.NextToken (); break; case COLON: case COMMA: case RPAR: state = stNEXTMOVE; break; case ENDOFSTRING: Error = errENDOFSTRING; state = stQUIT; break; default: Error = errSYNTAX; state = stQUIT; break; } break; case stNEXTMOVE: switch (token) { case COLON: token = p.NextToken (); f = atof (p.GetTokenAsCstr()); CurNode->SetEdgeLength (f); EdgeLengths = true; token = p.NextToken (); break; case SPACE: case TAB: case NEWLINE: token = p.NextToken (); break; // The next node encountered will be a sibling // of Curnode and a descendant of the node on // the top of the node stack. case COMMA: q = NewNode(); CurNode->SetSibling (q); if (stk.empty()) { Error = errMISSINGLPAR; state = stQUIT; } else { q->SetAnc (stk.top()); stk.top()->AddWeight (CurNode->GetWeight()); stk.top()->IncrementDegree (); CurNode = q; state = stGETNAME; token = p.NextToken (); } break; // The next node will be a child of CurNode, hence // we create the node and push CurNode onto the // node stack. case LPAR: Internals++; stk.push (CurNode); q = NewNode(); CurNode->SetChild (q); q->SetAnc (CurNode); CurNode->IncrementDegree (); CurNode = q; token = p.NextToken (); state = stGETNAME; break; // We've finished ready the descendants of the node // at the top of the node stack so pop it off. case RPAR: if (stk.empty ()) { Error = errUNBALANCED; state = stQUIT; } else { q = stk.top(); q->AddWeight (CurNode->GetWeight()); CurNode = q; stk.pop(); state = stFINISHCHILDREN; token = p.NextToken (); } break; // We should have finished the tree case SEMICOLON: if (stk.empty()) { state = stACCEPTED; } else { Error = errSTACKNOTEMPTY; state = stQUIT; } break; case ENDOFSTRING: Error = errENDOFSTRING; state = stQUIT; break; default: Error = errSYNTAX; state = stQUIT; break; } break; case stFINISHCHILDREN: switch (token) { case STRING: case NUMBER: // internal label InternalLabels = true; CurNode->SetLabel (p.GetToken()); token = p.NextToken (); break; case COLON: token = p.NextToken (); f = atof (p.GetTokenAsCstr()); CurNode->SetEdgeLength (f); EdgeLengths = true; token = p.NextToken (); break; case SPACE: case TAB: case NEWLINE: token = p.NextToken (); break; // We've completed traversing the descendants of the // node at the top of the stack, so pop it off. case RPAR: if (stk.empty()) { Error = errUNBALANCED; state = stQUIT; } else { q = stk.top(); q->AddWeight (CurNode->GetWeight()); CurNode = q; stk.pop(); token = p.NextToken (); } break; // The node at the top of the stack still has some // descendants. case COMMA: q = NewNode(); CurNode->SetSibling (q); if (stk.empty()) { Error = errMISSINGLPAR; state = stQUIT; } else { q->SetAnc (stk.top()); stk.top()->AddWeight (CurNode->GetWeight()); stk.top()->IncrementDegree (); CurNode = q; state = stGETNAME; token = p.NextToken (); } break; case SEMICOLON: state = stNEXTMOVE; break; default: if (stk.empty()) { Error = errSEMICOLON; } else { Error = errSYNTAX; } state = stQUIT; break; } break; } } // Handle errors if (state == stQUIT) { // Clean up to go here return (p.GetPos()); } else { Root->SetWeight(Leaves); return (0); } } //------------------------------------------------------------------------------ int Tree::Read (istream &f) { char ch = '\0'; string str = ""; while (f.good() && !f.eof() && (ch != ';')) { f.get (ch); str += ch; } return Parse (str.c_str()); } //------------------------------------------------------------------------------ void Tree::Write (ostream &f) { treeStream = &f; traverse (Root); f << ";"; } //------------------------------------------------------------------------------ void Tree::traverse (NodePtr p) { if (p) { if (p->IsLeaf()) { *treeStream << NEXUSString (p->GetLabel()); if (EdgeLengths) { *treeStream << ':' << p->GetEdgeLength (); } } else { *treeStream << "("; } traverse (p->GetChild()); if (p->GetSibling()) { *treeStream << ","; } else { if (p != Root) { *treeStream << ")"; // 29/3/96 if ((p->GetAnc()->GetLabel() != "") && InternalLabels) { *treeStream << '\'' << NEXUSString (p->GetAnc()->GetLabel ()) << '\''; } if (EdgeLengths && (p->GetAnc () != Root)) { *treeStream << ':' << p->GetAnc()->GetEdgeLength (); } } } traverse (p->GetSibling()); } } //------------------------------------------------------------------------------ void Tree::drawInteriorEdge (NodePtr p) { NodePtr r = p->GetAnc (); int stop = r->GetHeight(); if (p->IsTheChild ()) { // Visiting ancestor for the first time, so draw the // end symbol if (r == Root) { // if (IsRooted ()) Line[stop] = TEE; // ´ // else // Line[stop] = VBAR; // “ } else { Line[stop] = TEE; // ´ } // Draw branch itself if (r != Root) { // Line int start = r->GetAnc()->GetHeight(); for (int i = start + 1; i < stop; i++) { Line[i] = HBAR; // Ä } // Start symbol if (start == stop) Line[start] = VBAR; // “ else if (r->IsTheChild ()) Line[start] = LEFT; // Ú else if (r->GetSibling ()) Line[start] = SIB; // à else Line[start] = RIGHT; // À // fillInAncestors (r); } } else { // Just draw nodes below Line[stop] = VBAR; fillInAncestors (p->GetSibling()); } // Output the line Line[stop + 1] = '\0'; drawLine (r, p->IsTheChild()); /* *treeStream << Line.c_str(); // *treeStream << "h=" << r->GetHeight() << " w= " // << r->GetWeight() << "-- "; // Draw internal label, if present string s = r->GetLabel(); if (s != "" && p->IsTheChild ()) *treeStream << r->GetLabel(); *treeStream << endl; */ // Clear the line for the next pass for (int i = 0; i < (Leaves + 2); i++) // to do: get a better limit Line[i] = ' '; } void Tree::drawLine (NodePtr p, bool isChild) { *treeStream << Line.c_str(); if (p->IsLeaf()) { * treeStream<< " " << p->GetLabel () <GetLabel(); if (s != "" && isChild) *treeStream << p->GetLabel(); *treeStream << endl; } } //------------------------------------------------------------------------------ void Tree::drawPendantEdge (NodePtr p) { NodePtr q = p->GetAnc(); if (q == NULL) { // Handle the degenerate case of a tree with a single leaf Line = (char) HBAR; drawLine (p); } else { int start = q->GetHeight(); int stop = p->GetHeight(); char symbol; // Draw line between p and its ancestor int i; for (i = start + 1; i <= stop; i++) Line[i] = (char)HBAR; // Ä // Find appropriate symbol for link to ancestor if (p == q->GetChild()) { symbol = (char)LEFT; // Ú } else { // p is a sibling if (p->GetSibling()) symbol = (char)SIB; // à else symbol = (char)RIGHT; // À } Line[start] = symbol; // Fill in ancestors fillInAncestors (p); // Terminate line Line[stop + 1] = '\0'; drawLine (p); /* // Output line and taxon name *treeStream << Line.c_str() << " " << p->GetLabel () // << "h=" << p->GetHeight() << " w= " // << p->GetWeight() < Sibling <---- Child 1. r is a sibling of the child of q, and q has a sibling, or xÄÄÄÄsibÄÄÄ>r Ú . . \ . . \ . . child\ . .| \.. | qÄÄ|ÄÄÄsibÄÄÄ> \ | \| <- this branch passes under r \ 2. r is q's child and q is a sibling of another node. r Ú \ |\ | \ xÄÄÄsibÄ|Ä>q | . |.<- this branch passes under r . . } */ //------------------------------------------------------------------------------ void Tree::fillInAncestors (NodePtr p) { NodePtr q = p->GetAnc (); NodePtr r = p; while (q != Root) { if ( (q->GetSibling () && !(r->IsTheChild ())) || (!(q->IsTheChild ()) && r->IsTheChild()) ) { if (r ==p && q->GetHeight() == q->GetAnc()->GetHeight()) Line[q->GetAnc()->GetHeight()] = SIB; else Line[q->GetAnc()->GetHeight()] = VBAR; } r = q; q = q->GetAnc (); } } //------------------------------------------------------------------------------ void Tree::drawAsTextTraverse (NodePtr p) { if (p) { drawAsTextTraverse (p->GetChild ()); if (p->IsLeaf ()) drawPendantEdge (p); if (p->GetSibling ()) drawInteriorEdge (p); drawAsTextTraverse (p->GetSibling ()); } } //------------------------------------------------------------------------------ void Tree::Draw (ostream &f) { treeStream = &f; if (Root) { string s (Leaves + 2, ' '); Line = s; MaxHeight = 0; getNodeHeights (Root); drawAsTextTraverse (Root); } else f << "(No tree)" << endl; } //------------------------------------------------------------------------------ void Tree::getNodeHeights(NodePtr p) { if (p) { p->SetHeight (Leaves - p->GetWeight ()); if (p->GetHeight() > MaxHeight) MaxHeight = p->GetHeight(); getNodeHeights (p->GetChild()); getNodeHeights (p->GetSibling()); } } //------------------------------------------------------------------------------ // Compute node depth (i.e, height above root). Based on COMPONENT 2.0 code, // assumes count is set to 0 prior to calling code void Tree::getNodeDepth(NodePtr p) { if (p) { p->SetDepth (count); if (count > MaxDepth) MaxDepth = count; count++; getNodeDepth (p->GetChild()); count--; getNodeDepth (p->GetSibling()); } } //------------------------------------------------------------------------------ // Compute node depth (i.e, height above root). void Tree::GetNodeDepths () { count = 0; MaxDepth = 0; getNodeDepth (Root); } //------------------------------------------------------------------------------ void Tree::markNodes(NodePtr p, bool on) { if (p) { p->SetMarked (on); markNodes (p->GetChild(), on); markNodes (p->GetSibling(), on); } } //------------------------------------------------------------------------------ void Tree::MarkNodes (bool on) { markNodes (Root, on); } //------------------------------------------------------------------------------ void Tree::makeNodeList (NodePtr p) { if (p) { makeNodeList (p->GetChild ()); makeNodeList (p->GetSibling ()); if (p->IsLeaf()) { LeafList[p->GetLabel()] = p->GetLeafNumber()-1; Nodes[p->GetLeafNumber()-1] = p; p->SetIndex (p->GetLeafNumber()-1); } else { Nodes[count] = p; p->SetIndex (count); count++; } if (p != Root) { } } } //------------------------------------------------------------------------------ void Tree::MakeNodeList () { if (Nodes == NULL) { Nodes = new NodePtr [Leaves + Internals]; Nodes_dimension = Leaves + Internals; } else if (Nodes_dimension != Leaves + Internals) //The tree size has changed since Nodes was allocated - need to allocate correct amount of space before re-building array! { delete Nodes; //Nodes has already been allocated - need to free it! Nodes = new NodePtr [Leaves + Internals]; Nodes_dimension = Leaves + Internals; } count = Leaves; makeNodeList (Root); } //------------------------------------------------------------------------------ NodePtr Tree::GetLeafWithLabel (string s) { NodePtr result = NULL; map >::iterator index = LeafList.find (s); if (index != LeafList.end()) result = Nodes[LeafList[s]]; return result; } //------------------------------------------------------------------------------ // Add Node below Below. Doesn't update any clusters, weights, etc. void Tree::AddNodeBelow (NodePtr Node, NodePtr Below) { NodePtr Ancestor = NewNode (); Ancestor->SetChild (Node); Node->SetAnc (Ancestor); NodePtr q = Below->GetAnc (); Internals++; if (Node->IsLeaf()) Leaves++; if (q == NULL || Below == q->GetChild()) { Node->SetSibling (Below); Ancestor->SetAnc (q); Ancestor->SetSibling (Below->GetSibling()); Below->SetSibling (NULL); Below->SetAnc (Ancestor); if (q == NULL) Root = Ancestor; else q->SetChild (Ancestor); } else { // Get left sibling of Below NodePtr r = Below->LeftSiblingOf(); while (Below != r->GetSibling()) r = r->GetSibling(); Node->SetSibling (Below); Ancestor->SetAnc (q); Ancestor->SetSibling (Below->GetSibling()); Below->SetSibling (NULL); Below->SetAnc (Ancestor); r->SetSibling (Ancestor); } } //------------------------------------------------------------------------------ // Compute nodal heights based on path length from root, and store maximum // value in plot.maxheight. Used by drawing routines. void Tree::getPathLengths (NodePtr p) { if (p) { if (p != Root) { float l = p->GetEdgeLength(); if (l < 0.000001) // suppress negative branch lengths l = 0.0; p->SetPathLength (p->GetAnc()->GetPathLength() + l); } if (p->GetPathLength() > MaxPathLength) MaxPathLength = p->GetPathLength(); getPathLengths (p->GetChild()); getPathLengths (p->GetSibling()); } } //------------------------------------------------------------------------------ // Fill in weight, degree, etc. void Tree::buildtraverse (NodePtr p) { if (p) { p->SetWeight (0); p->SetDegree (0); buildtraverse (p->GetChild ()); buildtraverse (p->GetSibling ()); if (p->IsLeaf()) { Leaves++; p->SetWeight (1); } else { Internals++; } if (p != Root) { p->GetAnc()->AddWeight (p->GetWeight()); p->GetAnc()->IncrementDegree(); } } } //------------------------------------------------------------------------------ // Ensure fields like weight, degree, etc are correct void Tree::Update () { count = 0; Leaves = Internals = 0; buildtraverse (Root); } //------------------------------------------------------------------------------ void Tree::resetTraverse (NodePtr p) { if (p) { p->SetWeight (0); p->SetDegree (0); p->SetIndex (0); p->SetLeafNumber (0); resetTraverse (p->GetChild ()); resetTraverse (p->GetSibling ()); if (p->IsLeaf()) { Leaves++; p->SetLeafNumber(Leaves); } else { Internals++; } } } void Tree::Reset() { Leaves = Internals = 0; resetTraverse (Root); delete [] Nodes; Nodes = NULL; MakeNodeList(); Update(); } void Tree::Plant(NodePtr p) { Root = p; Reset(); } //------------------------------------------------------------------------------ // Dump nodes void Tree::dumpTraverse (NodePtr p) { if (p) { p->Dump(*treeStream); dumpTraverse (p->GetChild ()); dumpTraverse (p->GetSibling ()); if (p->IsLeaf()) { Leaves++; } else { Internals++; } } } void Tree::Dump(ostream &f) { f << "-------------------------------------------" << endl; f << "Tree dump" << endl; f << " Name: " << Name << endl; f << " Leaves: " << Leaves << endl; f << " Internals: " << Internals << endl; f << "Node array: "; if (Nodes) { f << "allocated"; } else { f << "not allocated"; } f << endl; int tmpLeaves = Leaves; int tmpInternals = Internals; Leaves = 0; Internals = 0; treeStream = &f; f << "Index Leaf LeafNumber Degree Weight Depth Length Label" << endl; f << "-------------------------------------------" << endl; dumpTraverse(Root); f << "-------------------------------------------" << endl; // Checks if (tmpLeaves != Leaves) f << "Leaf count wrong" << endl; if (tmpInternals != Internals) f << "Internal count wrong" << endl; } NodePtr Tree::RemoveNode (NodePtr Node) { NodePtr result = NULL; if (Node == Root) { if (Leaves == 1) { Root = NULL; Node->SetAnc (NULL); Leaves = Internals = 0; } return result; } NodePtr p; NodePtr Ancestor = Node->GetAnc(); if (Ancestor->GetDegree() == 2) { // ancestor is binary, so remove node and its ancestor if (Node->IsTheChild ()) p = Node->GetSibling(); else p = Ancestor->GetChild(); NodePtr q = Ancestor->GetAnc(); p->SetAnc (q); if (q != NULL) { if (Ancestor->IsTheChild()) q->SetChild (p); else { NodePtr r = Ancestor->LeftSiblingOf (); r->SetSibling (p); } p->SetSibling (Ancestor->GetSibling()); result = p; } else { // Ancestor is the root Root = p; p->SetSibling (NULL); result = p; } delete Ancestor; Internals--; if (Node->IsLeaf()) Leaves--; Node->SetAnc (NULL); Node->SetSibling (NULL); } else { // polytomy, just remove node NodePtr q; if (Node->IsTheChild()) { Ancestor->SetChild (Node->GetSibling()); q = Node->GetSibling (); } else { q = Node->LeftSiblingOf (); q->SetSibling (Node->GetSibling ()); } Node->SetSibling (NULL); Node->SetAnc (NULL); if (Node->IsLeaf()) Leaves--; Ancestor->SetDegree (Ancestor->GetDegree() - 1); result = q; } } tv-0.5/TreeLib/Makefile.am0000775000076400007640000000135410252617624012337 00000000000000 noinst_LIBRARIES = libtreelib.a if ENT INCLUDES = -Igport -I../graph libtreelib_a_SOURCES = nodeiterator.h Parse.cpp Parse.h \ profile.h tokeniser.cpp tokeniser.h TreeLib.cpp TreeLib.h \ treedrawer.cpp treedrawer.h treereader.cpp treereader.h \ treewriter.cpp treewriter.h treeorder.cpp treeorder.h \ ntree.cpp ntree.h mast.cpp mast.h lcaquery.cpp lcaquery.h quartet.cpp quartet.h \ gport/gport.cpp else INCLUDES = -Igport libtreelib_a_SOURCES = nodeiterator.h Parse.cpp Parse.h \ profile.h tokeniser.cpp tokeniser.h TreeLib.cpp TreeLib.h \ treedrawer.cpp treedrawer.h treereader.cpp treereader.h \ treewriter.cpp treewriter.h treeorder.cpp treeorder.h endif EXTRA_DIST = gport/gport.h gport/gdefs.h gport/gport.cpp tv-0.5/TreeLib/treewriter.h0000775000076400007640000000763210207112330012635 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: treewriter.h,v 1.5 2005/02/23 14:36:08 rdmp1c Exp $ #ifndef TREEWRITER_H #define TREEWRITER_H #include "TreeLib.h" #include "nodeiterator.h" #include /** * @class NewickTreeWriter * Base class for writing Newick format tree descriptions. * */ class NewickTreeWriter { public: NewickTreeWriter (Tree *tree) { t = tree; writeEdgeLengths = true; }; virtual ~NewickTreeWriter () {}; /** * Toggle on or off the writing of edge lengths in the tree description. */ virtual void SetWriteEdgeLengths (bool on) { writeEdgeLengths = on; }; /** * Set output stream to which the tree description is written * @param s pointer to the stream */ virtual void SetStream (std::ostream *s) { f = s; }; /** * Write the tree description. */ virtual void Write (); protected: std::ostream *f; Node *cur; std::stack < Node *, std::vector > stk; Tree * t; /** * Write the symbol signalling the end of the tree description. By default this is ';' */ virtual void WriteEndOfTree (); /** * Write '(' */ virtual void WriteLeftParenthesis (); /** * Write ')' */ virtual void WriteRightParenthesis (); /** * Write the sibling symbol. By default this is ',' */ virtual void WriteSiblingSymbol (); /** * Write leaf node. */ virtual void WriteLeaf (); /** * Write internal node. */ virtual void WriteInternal (); bool writeEdgeLengths; }; /** * @class XMLTreeWriter * Abstract base class for writing XML tree descriptions. * */ class XMLTreeWriter { public: XMLTreeWriter (Tree *tree) { t = tree; count = 0; }; virtual ~XMLTreeWriter () {}; /** * Set output stream to which the tree description is written * @param s pointer to the stream */ virtual void SetStream (std::ostream *s) { f = s; }; /** * Write the tree description. */ virtual void Write (); virtual void OpenNode() = 0; virtual void NodeInfo () = 0; virtual void CloseNode() = 0; virtual void OpenTree() = 0; virtual void CloseTree() = 0; protected: std::ostream *f; Node *cur; std::stack < Node *, std::vector > stk; Tree * t; int count; }; /** * @class TreeBolicTreeWriter * Writing TreeBolic XML tree description. * */ class TreeBolicTreeWriter : public XMLTreeWriter { public: TreeBolicTreeWriter (Tree *tree) : XMLTreeWriter (tree) {}; virtual ~TreeBolicTreeWriter () {}; virtual void OpenNode(); virtual void NodeInfo (); virtual void CloseNode(); virtual void OpenTree(); virtual void CloseTree(); }; /** * @class ThorneTreeWriter * Writing tree for Jeff Thorne's multidivtime tree description. * */ class ThorneTreeWriter : public NewickTreeWriter { public: ThorneTreeWriter (Tree *tree) : NewickTreeWriter (tree) {}; virtual ~ThorneTreeWriter () {}; /** * Write leaf node. */ virtual void WriteLeaf (); /** * Write internal node. */ virtual void WriteInternal (); protected: std::string formatLabel (std::string s); }; #endif tv-0.5/TreeLib/treereader.cpp0000775000076400007640000002141411432544254013127 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: treereader.cpp,v 1.5 2003/09/10 12:58:16 rdmp1c Exp $ #include "treereader.h" #include #include //------------------------------------------------------------------------------ TreeReader::TreeReader (Tokeniser &p) : parser (p) { } //------------------------------------------------------------------------------ Tokeniser::tokentype TreeReader::GetTaxonName () { return parser.GetNextToken (); } //------------------------------------------------------------------------------ // Parse the edge length token. bool TreeReader::LabelEdge () { bool result = false; Tokeniser::tokentype token = parser.GetNextToken (); // Handle negative branch lengths by peeking at the token. If // it is a '-' then call ParseNumber to ensure it handles the sign // correctly. if (token == Tokeniser::MINUS) result = parser.ParseNumber(); else result = (token == Tokeniser::NUMBER); if (result) { // Convert token to a number char number_string[128], *endptr; strncpy (number_string, parser.GetToken().c_str(), sizeof (number_string)); double value = strtod (number_string, &endptr); if (*endptr == '\0' || endptr == NULL) { #ifdef __BORLANDC__ if (value == HUGE_VAL) { errormsg = "The number "; errormsg += parser.GetToken(); errormsg += " caused strtod to report a HUGE_VAL error"; } else { #endif // Set -ve branch lengths to zero if (value < 0.0) value = 0.0; tree->GetCurNode()->SetEdgeLength (value); tree->SetEdgeLengths (true); #ifdef __BORLANDC__ } #endif } else { errormsg = "The token "; errormsg += parser.GetToken(); errormsg += " is not a valid number"; } } return result; } //------------------------------------------------------------------------------ // Label the current leaf bool TreeReader::LabelLeaf (std::string s) { tree->MakeCurNodeALeaf (tree->GetNumLeaves() + 1); tree->GetCurNode()->SetLabel (s); return true; } //------------------------------------------------------------------------------ // Label the current internal node void TreeReader::LabelInternalNode (std::string s) { tree->GetCurNode()->SetLabel (s); tree->SetInternalLabels (true); } //------------------------------------------------------------------------------ // Uses a simple pushdown automaton to read Newick-style trees bool TreeReader::Read (TreePtr t) { // States of pushdown automaton that reads trees enum statetype { GETNAME, GETINTERNODE, NEXTMOVE, DOSIBLING, FINISHCHILDREN, ACCEPTED, CLEANUP, QUIT } state; std::stack< NodePtr, std::vector > stk; Tokeniser::tokentype token; tree = t; tree->MakeRoot(); token = parser.GetNextToken (); if (token == Tokeniser::EMPTY) return false; // Parse the tree description state = GETNAME; while ((state != QUIT) && (state != ACCEPTED)) { switch (state) { case GETNAME: switch (token) { case Tokeniser::STRING: case Tokeniser::NUMBER: LabelLeaf (parser.GetToken()); token = parser.GetNextToken (); state = GETINTERNODE; break; case Tokeniser::LPAR: state = NEXTMOVE; break; default: errormsg = "Syntax error [GETNAME]: expecting a \"(\" or leaf name, got \""; errormsg += parser.GetToken(); errormsg += "\" instead"; state = QUIT; break; } break; case GETINTERNODE: switch (token) { case Tokeniser::COLON: case Tokeniser::COMMA: case Tokeniser::RPAR: state = NEXTMOVE; break; default: errormsg = "Syntax error [GETINTERNODE]: expecting one of \":,)\", got "; errormsg += parser.GetToken(); errormsg += " instead"; state = QUIT; break; } break; case NEXTMOVE: switch (token) { case Tokeniser::COLON: if (LabelEdge ()) token = parser.GetNextToken (); else state = QUIT; break; // The next node encountered will be a sibling // of Curnode and a descendant of the node on // the top of the node stack. case Tokeniser::COMMA: if (stk.empty()) { errormsg = "Tree description unbalanced, this \")\" has no matching \"(\""; state = QUIT; } else { tree->MakeSibling (); //token = parser.GetNextToken (); token = GetTaxonName(); state = GETNAME; } break; // The next node will be a child of CurNode, hence // we create the node and push CurNode onto the // node stack. case Tokeniser::LPAR: stk.push (tree->GetCurNode()); tree->MakeChild(); //token = parser.GetNextToken (); token = GetTaxonName(); state = GETNAME; break; // We've finished ready the descendants of the node // at the top of the node stack so pop it off. case Tokeniser::RPAR: if (stk.empty()) { errormsg = "Tree description unbalanced (an extra \")\")"; state = QUIT; } else { NodePtr q = stk.top(); q->AddWeight(tree->GetCurNode()->GetWeight()); tree->SetCurNode (q); stk.pop (); token = parser.GetNextToken (); state = FINISHCHILDREN; } break; // We should have finished the tree case Tokeniser::SEMICOLON: if (stk.empty()) { state = ACCEPTED; } else { errormsg = "Tree description ended prematurely (stack not empty)"; state = QUIT; } break; default: errormsg = "Syntax error [NEXTMOVE]: expecting one of \":,();\", got "; errormsg += parser.GetToken(); errormsg += " instead"; state = QUIT; break; } break; case FINISHCHILDREN: switch (token) { case Tokeniser::STRING: case Tokeniser::NUMBER: LabelInternalNode (parser.GetToken()); token = parser.GetNextToken (); break; case Tokeniser::COLON: if (LabelEdge ()) token = parser.GetNextToken (); else state = QUIT; break; // We've completed traversing the descendants of the // node at the top of the stack, so pop it off. case Tokeniser::RPAR: if (stk.empty()) { errormsg = "Tree description unbalanced, this \")\" has no matching \"(\""; state = QUIT; } else { NodePtr q = stk.top(); q->AddWeight(tree->GetCurNode()->GetWeight()); tree->SetCurNode (q); stk.pop (); token = parser.GetNextToken (); } break; // The node at the top of the stack still has some // descendants. case Tokeniser::COMMA: if (stk.empty()) { errormsg = "Tree description unbalanced, missing a \"(\""; state = QUIT; } else { tree->MakeSibling (); //token = parser.GetNextToken (); token = GetTaxonName(); state = GETNAME; } break; case Tokeniser::SEMICOLON: state = NEXTMOVE; break; default: if (stk.empty()) { errormsg = "Tree description unbalanced"; state = QUIT; } else { errormsg = "Syntax error [FINISHCHILDREN]: expecting one of \":,();\" or internal label, got "; errormsg += parser.GetToken(); errormsg += " instead"; } state = QUIT; break; } break; } } // Handle errors if (state == QUIT) { // Clean memory here... // ... then throw exception throw XTokeniser (errormsg, parser.GetFilePosition(), parser.GetFileLine (), parser.GetFileColumn()); } else { tree->GetRoot()->SetWeight(tree->GetNumLeaves()); doAdjust (); } return true; } //------------------------------------------------------------------------------ Tokeniser::tokentype PHYLIPReader::GetTaxonName () { return parser.GetNextPHYLIPToken (); } //------------------------------------------------------------------------------ // Unrooted PHYLIP trees have degree > 2 void PHYLIPReader::doAdjust () { tree->SetRooted (tree->GetRoot()->GetDegree() == 2); } tv-0.5/TreeLib/profile.h0000775000076400007640000005177410631262171012121 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: profile.h,v 1.31 2007/06/05 13:26:17 rdmp1c Exp $ /** * @file profile.h * * Storage of trees * */ #ifndef PROFILE_H #define PROFILE_H #ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif // Ignore "Cannot create precompiled header: code in header" message // generated when compiling string.cc #pragma warn -pch #endif #include "TreeLib.h" #include "treereader.h" #include "treewriter.h" // NCL includes #include "nexusdefs.h" #include "xnexus.h" #include "nexustoken.h" #include "nexus.h" #include "taxablock.h" #include "assumptionsblock.h" #include "treesblock.h" #include "discretedatum.h" #include "discretematrix.h" #include "charactersblock.h" #include "datablock.h" #if USE_XML #include "xml.h" #endif #if USE_VC2 #include "VMsg.h" #endif #if USE_WXWINDOWS #include "wx/wx.h" #endif #if (__BORLANDC__ < 0x0550) #include #else #include #endif /** *@typedef std::map > LabelMap; */ typedef std::map > LabelMap; /** * @class Profile * Encapsulates reading and storing a set of trees. * */ template class Profile { public: /** * A map between leaf labels in the profile and a unique integer index */ LabelMap Labels; /** * For each leaf label the number of trees in the profile that have the corresponding leaf */ LabelMap LabelFreq; /** * Constructor */ Profile () {}; /** * Destructor */ virtual ~Profile () {}; /** * @brief The ith tree in the profile * * @param i the index of the tree in the range 0 - (n-1) * @return The tree */ virtual T GetIthTree (int i) { return Trees[i]; }; /** * @brief The name of the ith tree in the profile * * @param i the index of the tree in the range 0 - (n-1) * @return The tree */ virtual std::string GetIthTreeName (int i) { return Trees[i].GetName(); }; /** * @return The number of labels in the profile */ virtual int GetNumLabels () { return Labels.size(); }; /** * @return The number of trees in the profile */ virtual int GetNumTrees () { return Trees.size(); }; /** * @brief The index of a leaf label * @param s A leaf label * @return The index of the leaf label */ virtual int GetIndexOfLabel (std::string s); /** * @brief The unique index of a leaf label * @param i A leaf index * @return The ith leaf label * @sa Profile::GetIndexOfLabel */ virtual std::string GetLabelFromIndex (int i) { return LabelIndex[i]; }; /** * @brief Assign a unique integer index to each leaf label in the profile */ virtual void MakeLabelList (); /** * @brief Count the number of trees each leaf label occurs in */ virtual void MakeLabelFreqList (); /** * @brief Read a NEXUS file and store the trees in Profile::trees. * If a TAXA block is * present then the leaf labels are stored in Labels in the same order as in * the TAXA block, otherwise Profile::MakeLabelList is called to assign a unique integer * index to each label. * * @param f input stream in NEXUS format * @return true if sucessful */ virtual bool ReadNEXUS (std::istream &f); /** * @brief Read a PHYLIP tree file and store the trees in Profile::trees. * * @param f input stream in PHYLIP format * @return true if sucessful */ virtual bool ReadPHYLIP (std::istream &f); /** * @brief Read a set of trees from an input stream * At present PHYLIP, NEXUS, and a subset of PhyloXML * formats are supported. * @param f input stream * @return true if successful */ virtual bool ReadTrees (std::istream &f); #if USE_XML /** * @brief Read a XML file and store the trees in Profile::trees. * XML format is based on "XML for phylogenetic and population genetic data" * (see http://evolve.zoo.ox.ac.uk/PhyloXML/). * * @param f input stream in PHYLIP format * @return true if sucessful */ virtual bool ReadXML (std::istream &f); #endif /** * @brief Output leaf labels. * * @param f output stream */ virtual void ShowLabelList (std::ostream &f); /** * @brief Output trees as dendrograms. * * @param f output stream */ virtual void ShowTrees (std::ostream &f); /** * @brief Write a set of trees to an output stream * @param f output stream * @param format file format to use (at present nexus only) * @return true if successful */ virtual bool WriteTrees (std::ostream &f, const int format = 0, const char *endOfLine = "\n"); protected: /** * The trees * */ std::vector Trees; /** * The leaf labels stored as a vector so they can be accessed by an index value * */ std::vector LabelIndex; #if USE_XML virtual bool xmlTraverse (XMLElementPtr p); virtual bool xmlCleanup (XMLElementPtr p); virtual void postProcessXMLTree (int tree_num); #endif int curTreeNumber; IntegerNodeMap node_map; }; //------------------------------------------------------------------------------ template int Profile::GetIndexOfLabel (std::string s) { return Labels[s]; } //------------------------------------------------------------------------------ template void Profile::MakeLabelList () { for (int i = 0; i < Trees.size(); i++) { T t = Trees[i]; t.MakeNodeList(); for (int j = 0; j < t.GetNumLeaves(); j++) { std::string s = t[j]->GetLabel(); if (Labels.find (s) == Labels.end ()) { int index = Labels.size(); // cout << "Labels.size() = " << Labels.size(); Labels[s] = index; LabelIndex.push_back (s); // cout << "Labels[s] =" << Labels[s] << endl; } } } /* cout << endl << "Number of labels = " << Labels.size() << endl; LabelMap::iterator it = Labels.begin(); LabelMap::iterator end = Labels.end(); while (it != end) { cout << (*it).first << " - " << (*it).second << endl; it++; }*/ } //------------------------------------------------------------------------------ template void Profile::ShowLabelList (std::ostream &f) { f << std::endl << "Number of labels = " << Labels.size() << std::endl; LabelMap::iterator it = Labels.begin(); LabelMap::iterator end = Labels.end(); while (it != end) { f << (*it).first << " - " << (*it).second << std::endl; it++; } f << std::endl; } //------------------------------------------------------------------------------ template void Profile::MakeLabelFreqList () { // cout << "MakeLabelListFreq" << endl; for (int i = 0; i < Trees.size(); i++) { T t = Trees[i]; t.MakeNodeList(); for (int j = 0; j < t.GetNumLeaves(); j++) { std::string s = t[j]->GetLabel(); LabelMap::iterator there = LabelFreq.find (s); if (there == Labels.end ()) { LabelFreq[s] = 1; } else { LabelFreq[s] += 1; } } } /* cout << "Frequency of labels" << endl; LabelMap::iterator it = LabelFreq.begin(); LabelMap::iterator end = LabelFreq.end(); while (it != end) { cout << (*it).first << " - " << (*it).second << endl; it++; }*/ } /** * @class MyNexus * Extends Nexus class to output progress to cout * */ class MyNexus : public Nexus { public: MyNexus () : Nexus() { isOK = true; }; #if (USE_VC2 || USE_WXWINDOWS) #if USE_VC2 virtual void EnteringBlock( nxsstring blockName ) { } virtual void ExitingBlock( nxsstring blockName ) { }; virtual void SkippingBlock( nxsstring blockName ) { }; virtual void SkippingDisabledBlock( nxsstring blockName ) { }; virtual void ExecuteStarting() { }; virtual void ExecuteStopping() { }; virtual void OutputComment( nxsstring comment ) {}; virtual void NexusError( nxsstring& msg, streampos pos, long line, long col ) { char buf[256]; sprintf (buf,"%s at line %d, column %d", msg.c_str(), line, col); Message (MSG_ERROR, "Error reading NEXUS file", buf); isOK = false; }; #endif #if USE_WXWINDOWS #if 1 virtual void EnteringBlock( nxsstring blockName ) { } virtual void ExitingBlock( nxsstring blockName ) { }; virtual void SkippingBlock( nxsstring blockName ) { }; virtual void SkippingDisabledBlock( nxsstring blockName ) { }; virtual void ExecuteStarting() { }; virtual void ExecuteStopping() { }; #else // debugging NEXUS reader virtual void EnteringBlock( nxsstring blockName ) { wxLogMessage ("Entering %s block", blockName.c_str()); } virtual void ExitingBlock( nxsstring blockName ) { wxLogMessage ("Exiting %s block", blockName.c_str()); }; virtual void SkippingBlock( nxsstring blockName ) { wxLogWarning ("Skipping %s block", blockName.c_str()); }; virtual void SkippingDisabledBlock( nxsstring blockName ) { wxLogWarning ("Skipping disabled %s block", blockName.c_str()); }; virtual void ExecuteStarting() { wxLogMessage ("Starting to execute NEXUS file"); }; virtual void ExecuteStopping() { wxLogMessage ("Finished executing NEXUS file"); }; #endif virtual void OutputComment( nxsstring comment ) { std::cout << comment << std::endl;}; virtual void NexusError( nxsstring& msg, std::streampos pos, long line, long col ) { wxLogError (wxT("%s at line %d, column %d"), msg.c_str(), line, col); isOK = false; }; #endif #else virtual void EnteringBlock( nxsstring blockName ) { cout << " Entering " << blockName << " block..."; }; virtual void ExitingBlock( nxsstring blockName ) { cout << "done" << endl; }; virtual void SkippingBlock( nxsstring blockName ) { cout << " (Skipping " << blockName << " block)" << endl; }; virtual void SkippingDisabledBlock( nxsstring blockName ) { cout << " (Skipping disabled " << blockName << " block)" << endl; }; virtual void ExecuteStarting() { cout << "Starting to execute NEXUS file" << endl; }; virtual void ExecuteStopping() { cout << "Finished executing NEXUS file" << endl; }; virtual void OutputComment( nxsstring comment ) { cout << comment << endl;}; virtual void NexusError( nxsstring& msg, streampos pos, long line, long col ) { cerr << "Error: " << msg << " line " << line << ", col " << col << endl; isOK = false; }; #endif bool GetIsOK () { return isOK; }; protected: bool isOK; }; //------------------------------------------------------------------------------ template bool Profile::ReadNEXUS (std::istream &f) { bool result = false; TaxaBlock* taxa; DataBlock *data; CharactersBlock *characters; AssumptionsBlock *assumptions; TreesBlock *trees; taxa = new TaxaBlock(); assumptions = new AssumptionsBlock (*taxa); data = new DataBlock (*taxa, *assumptions); characters = new CharactersBlock (*taxa, *assumptions); trees = new TreesBlock (*taxa); MyNexus nexus; nexus.Add( taxa ); nexus.Add( data ); nexus.Add( characters ); nexus.Add( trees ); // Set to binary to handle Mac and Unix files #ifdef __MWERKS__ #elif __BORLANDC__ f.setf (ios::binary); #elif __GNUC__ #if __GNUC__ < 3 f.setf (ios::binary); #endif #endif NexusToken token (f); try { nexus.Execute (token); } catch (XNexus x) { std::cout << x.msg << " (line " << x.line << ", column " << x.col << ")" << std::endl; } if (nexus.GetIsOK() && (trees->GetNumTrees() > 0)) { // Display information about the trees #if (USE_WXWINDOWS || USE_VC2) #else trees->Report (std::cout); std::cout << endl; #endif // Store the trees themselves int i = 0; int error = 0; while ((i < trees->GetNumTrees()) && (error == 0)) { T t; std::string tstr; // if (trees->HasTranslationTable()) // tstr = trees->GetTranslatedTreeDescription (i); // else tstr = trees->GetTreeDescription (i); tstr += ";"; error = t.Parse (tstr.c_str()); if (error == 0) { t.SetName (trees->GetTreeName (i)); t.SetRooted (trees->IsRootedTree (i)); t.SetWeight (trees->GetTreeWeight (i)); if (trees->HasTranslationTable()) { t.MakeNodeList(); for (int k = 0; k < t.GetNumLeaves (); k++) { std::string skey = t[k]->GetLabel(); if (skey != "") { nxsstring svalue = trees->GetTranslatedLabel(skey); if (svalue != "") t[k]->SetLabel (svalue); } } } Trees.push_back (t); } else { #if USE_WXWINDOWS wxLogError ( wxT("Error in description of tree %d: %s"), (i+1), t.GetErrorMsg().c_str()); #elif USE_VC2 char buf[256]; sprintf (buf, "Reading tree %d: %s", (i+1), t.GetErrorMsg().c_str()); Message (MSG_ERROR, "Error in tree description", buf); #else cerr << "Error in tree description " << (i + 1) << t.GetErrorMsg() << endl; #endif return false; } i++; } // Assign each label a unique index if (taxa->GetNumTaxonLabels() == 0) { // No taxa block in NEXUS file MakeLabelList (); } else { // Store the labels in the same order encountered in the // NEXUS file for (int i = 0; i < taxa->GetNumTaxonLabels (); i++) { Labels[taxa->GetTaxonLabel (i)] = i; LabelIndex.push_back (taxa->GetTaxonLabel (i)); } } result = true; } return result; } //------------------------------------------------------------------------------ template bool Profile::ReadTrees (std::istream &f) { bool result = false; char ch = (char)f.peek (); if (ch == '#') result = ReadNEXUS (f); else if (strchr ("([", ch)) result = ReadPHYLIP (f); #if USE_XML else if (ch == '<') result = ReadXML (f); #endif return result; } //------------------------------------------------------------------------------ template bool Profile::ReadPHYLIP (std::istream &f) { Tokeniser p (f); PHYLIPReader tr (p); bool ok = true; while (ok) { T t; try { ok = tr.Read (&t); } catch (XTokeniser x) { #if USE_WXWINDOWS wxLogError (wxT("%s at line %d, column %d"), x.msg.c_str(), x.line, x.col); #elif USE_VC2 char buf[256]; sprintf (buf, "%s at line %d, column %d", x.msg.c_str(), x.line, x.col); Message (MSG_ERROR, "Error reading tree file", buf); #else std::cerr << x.msg << " (line " << x.line << ", column " << x.col << ")" << std::endl; #endif return false; } if (ok) Trees.push_back (t); } bool result = (Trees.size() > 0); if (result) { // Build a list of labels in the profile, such that each label // is assigned a unique index MakeLabelList (); } return result; } //------------------------------------------------------------------------------ template void Profile::ShowTrees (std::ostream &f) { for (int i = 0; i < Trees.size(); i++) { T t = Trees[i]; t.Update (); t.Draw (f); } } //------------------------------------------------------------------------------ template bool Profile::WriteTrees (std::ostream &f, const int format, const char *endOfLine) { bool result = true; // Simple nexus tree file f << "#nexus" << endOfLine; f << endOfLine; f << "begin trees;"; // Date the file f << " [Treefile written "; time_t timer = time(NULL); struct tm* tblock = localtime(&timer); char time_buf[64]; strncpy (time_buf, asctime(tblock), sizeof (time_buf)); char *q = strrchr (time_buf, '\n'); if (q) *q = '\0'; f << time_buf << "]" << endOfLine; for (int i = 0; i < Trees.size(); i++) { T t = Trees[i]; f << "\ttree "; if (t.GetName() != "") f << NEXUSString (t.GetName()); else f << "tree_" << (i+1); f << " = "; if (t.IsRooted()) f << "[&R] "; else f << "[&U] "; // Tree NewickTreeWriter tw (&t); tw.SetStream (&f); tw.Write(); f << endOfLine; // f << t << endOfLine; } f << "end;" << endOfLine; return result; } #if USE_XML //------------------------------------------------------------------------------ template void Profile::postProcessXMLTree (int tree_num) { IntegerNodeMap::iterator it = node_map.begin(); IntegerNodeMap::iterator end = node_map.end(); if (it != end) { // Dump tree int nodeCount = 0; int leafCount = 0; NodePtr root = NULL; while (it != end) { nodeCount++; int index = it->first; NodePtr p = it->second; if (p->GetAnc() == NULL) Trees[tree_num].SetRoot (p); if (p->GetChild() == NULL) { p->SetLeaf (true); p->SetLeafNumber (++leafCount); } else { if (p->GetLabel() != "") Trees[tree_num].SetInternalLabels (true); } it++; } Trees[tree_num].SetNumLeaves (leafCount); Trees[tree_num].SetNumInternals (nodeCount - leafCount); } } //------------------------------------------------------------------------------ template bool Profile::xmlTraverse (XMLElementPtr p) { if (p) { string attrname, attrvalue; if (p->name == "tree") { attrname = "rooted"; std::string rooted = p->attributes[attrname]; // Finish any previous tree. If we are processing a new tag, // then now is our chance to finish the previous tre if (curTreeNumber > 0) { postProcessXMLTree (curTreeNumber - 1); } // Clean up node list node_map.erase(node_map.begin(), node_map.end()); // Create new tree T t; t.SetRooted (true); Trees.push_back(t); Trees[curTreeNumber].SetRooted (rooted == "true"); curTreeNumber++; } if (p->name == "node") { attrname = "name"; std::string node_name = p->attributes[attrname]; attrname = "id"; std::string node_id = p->attributes[attrname]; // Create node, set its attributes, use a map to access it by its id int i = atoi (node_id.c_str()); Node *p = Trees[curTreeNumber-1].NewNode(); node_map[i] = p; if (node_name != "") p->SetLabel (node_name); p->SetIndex (i); } if (p->name == "edge") { attrname = "source"; attrvalue = p->attributes[attrname]; int source = atoi (attrvalue.c_str()); attrname = "target"; attrvalue = p->attributes[attrname]; int target = atoi (attrvalue.c_str()); // join ancestor-descendant pair, set any attributes of this edge Node *s = node_map[target]; Node *q = node_map[source]; s->SetAnc (q); if (q->GetChild()) { Node *r = q->GetChild(); r = r->GetRightMostSibling(); r->SetSibling (s); } else q->SetChild (s); attrname = "length"; attrvalue = p->attributes[attrname]; if (attrvalue != "") { float length = atof (attrvalue.c_str()); s->SetEdgeLength (length); Trees[curTreeNumber-1].SetEdgeLengths (true); } } if (p->name == "newick") { // parse Newick description Trees[curTreeNumber - 1].Parse (p->data.c_str()); } xmlTraverse (p->child); xmlTraverse (p->sib); } } //------------------------------------------------------------------------------ template bool Profile::xmlCleanup (XMLElementPtr p) { if (p) { xmlCleanup (p->child); xmlCleanup (p->sib); delete p; } } //------------------------------------------------------------------------------ template bool Profile::ReadXML (istream &f) { bool result = true; XMLElementPtr Root; myParser parser; char buf[BUFSIZ]; while (f.good()) { f.getline (buf, sizeof (buf)); if (!parser.XML_Parse(buf, strlen (buf), false)) { #if USE_WXWINDOWS wxLogError ("%s at line %d", XML_ErrorString(parser.XML_GetErrorCode()), parser.XML_GetCurrentLineNumber()); #elif USE_VC2 char buf[256]; sprintf (buf, "%s at line %d", XML_ErrorString(parser.XML_GetErrorCode()), parser.XML_GetCurrentLineNumber()); Message (MSG_ERROR, "Error reading tree file", buf); #else cerr << XML_ErrorString(parser.XML_GetErrorCode()) << " at line " << parser.XML_GetCurrentLineNumber() << endl; #endif return false; } } // Parsed XML file OK, so now extract trees and clean up curTreeNumber = 0; xmlTraverse (parser.Root); postProcessXMLTree (curTreeNumber - 1); xmlCleanup (parser.Root); return result; } #endif // USE_XML #if __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif tv-0.5/TreeLib/quartet.h0000775000076400007640000000465410310032565012135 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: quartet.h,v 1.2 2005/09/08 12:58:29 rdmp1c Exp $ /** * @file quartet.h * * Compute quartet distance between two trees. Algorithm is based on * Doucette, C. R. 1985. An efficient algorithm to * compute quartet dissimilarity measures. Unpubl. * BSc(Hons) dissertation, Dept. Computer Science, * Memorial University of Newfoundland. * * */ #ifndef QUARTETH #define QUARTETH #ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif // Ignore "Cannot create precompiled header: code in header" message // generated when compiling string.cc #pragma warn -pch #endif #include #include "ntree.h" // Values typedef struct { int u; // unresolved in T1 and T2 int d; // resolved but different int s; // resolved and same int r1; // resolved in T1 but not T2 int r2; // resolved in T2 but not T1 int x1; // total resolved in T1 int n; // maximum no. of quartets/triplets float SD; // symmetric difference float EA; // explicitly agree float SJA; // strict joint assertions float DC; // do not conflict }QTValues; void SummaryStats (QTValues &QR); void ShowHeader (std::ostream &s); void ShowQTRecord (std::ostream &s, QTValues &QR); void CompareQuartets (NTree &t1, NTree &t2, QTValues &QR); void CompareTriplets (NTree &t1, NTree &t2, QTValues &QR); #if __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif tv-0.5/TreeLib/nodeiterator.h0000775000076400007640000001134110222303364013136 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: nodeiterator.h,v 1.5 2005/03/29 16:48:52 rdmp1c Exp $ /** * @file nodeiterator.h * * Iterate over nodes in a tree * */ /* 29 March 2005 Spent a day trying to get TreeView X to work with gcc 3.4.1 on Mandrake 10.1. Even if it compiled, the phylogram display would cause a segmentation fault. Eventualy tracked it down to the PreorderIterator class. Essentially, in a templated class the inherited members need to be explicity identified, e.g. by something like B::f. Hence, in PreorderIterator I can't refer to cur but PreorderIterator::cur works. Initially when trying to get it to build I simply duplicated the members, but this caused TreeView X to crash. For more on this "feature" see http://lists.debian.org/debian-gcc/2004/05/msg00435.html */ #ifndef NODEITERATORH #define NODEITERATORH #ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif // Ignore "Cannot create precompiled header: code in header" message // generated when compiling string.cc #pragma warn -pch #endif #include #include /** * @class NodeIterator * Iterator class that visits nodes in a tree in post order. Uses a stack to keep * track of place in tree. By making this a template class we can apply it to * any descendant of the class Node. * */ template class NodeIterator { public: /** * Constructor takes the root of the tree as a parameter. * @param r the root of the tree */ NodeIterator (N *r) { root = r; }; virtual ~NodeIterator () {}; /** * Initialises the iterator and returns the first node. * @return The first node of the tree */ virtual N *begin (); /** * Moves to the next node in the tree. * @return The next node in the tree, or NULL if all nodes have been visited. */ virtual N *next (); protected: N *root; N *cur; std::stack < N *, std::vector > stk; }; template class PreorderIterator : public NodeIterator { public: PreorderIterator (N *r) : NodeIterator (r) {}; virtual ~PreorderIterator () {}; virtual N *begin (); virtual N *next (); }; template N *NodeIterator::begin () { cur = root; while (cur->GetChild()) { stk.push (cur); cur = (N *)(cur->GetChild()); } return cur; } template N *NodeIterator::next () { if (stk.empty()) cur = NULL; else { if (cur->GetSibling()) { N *p = (N *)(cur->GetSibling()); while (p->GetChild()) { stk.push (p); p = (N *)(p->GetChild()); } cur = p; } else { cur = stk.top(); stk.pop(); } } return cur; } template N *PreorderIterator::begin () { PreorderIterator::cur = PreorderIterator::root; return PreorderIterator::cur; } template N *PreorderIterator::next () { if (PreorderIterator::cur->GetChild()) { PreorderIterator::stk.push (PreorderIterator::cur); N *p = (N *)(PreorderIterator::cur->GetChild()); PreorderIterator::cur = p; } else { while (!PreorderIterator::stk.empty() && (PreorderIterator::cur->GetSibling() == NULL)) { PreorderIterator::cur = PreorderIterator::stk.top(); PreorderIterator::stk.pop(); } if (PreorderIterator::stk.empty()) PreorderIterator::cur = NULL; else { N *p = (N *)(PreorderIterator::cur->GetSibling()); PreorderIterator::cur = p; } } return PreorderIterator::cur; } #if __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif tv-0.5/TreeLib/lcaquery.cpp0000775000076400007640000000146410655171177012643 00000000000000#include "lcaquery.h" #define DEBUG_LCA 0 #if DEBUG_LCA #include #endif LCAQuery::LCAQuery (Tree *tree) { SetTree (tree); } void LCAQuery::SetTree (Tree *tree) { t = tree; Initialise (); } void SimpleLCAQuery::Initialise () { PreorderIterator n (t->GetRoot()); int count = 0; Node *q = n.begin(); while (q) { depth[q] = count++; #if DEBUG_LCA if (!q->IsLeaf()) { char buf[32]; sprintf (buf, "%d", (count-1)); q->SetLabel (buf); } #endif q = n.next(); } } NodePtr SimpleLCAQuery::LCA (NodePtr i, NodePtr j) { NodePtr p = i; NodePtr q = j; while (depth[p] != depth[q]) { if (depth[p] < depth[q]) q = q->GetAnc(); else p = p->GetAnc(); } return p; } tv-0.5/TreeLib/TreeLib.h0000775000076400007640000002427510655171245012012 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: TreeLib.h,v 1.30 2007/08/04 21:41:57 rdmp1c Exp $ #ifndef TREELIB_H #define TREELIB_H #ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif // Ignore "Cannot create precompiled header: code in header" message // generated when compiling string.cc #pragma warn -pch #endif #include #include #include #include #include #include #include #ifdef __BORLANDC__ #pragma warn .pch #endif //using namespace std; // Graphics characters for drawing trees #ifdef __WIN32__ // OEM character set //Compressed tree #define HBAR 196 // #define VBAR 179 // #define SIB 195 // #define BOT 192 // #define ROOT 218 // #define DOWN 194 // // Regular tree #define TEE 180 // #define LEFT ROOT #define RIGHT BOT #else // ANSI character set #define HBAR 45 #define VBAR 124 #define SIB 43 #define BOT 92 #define ROOT 43 #define DOWN 43 #define TEE 124 // #define LEFT 47 // #define RIGHT 92 #define LEFT 43 #define RIGHT 43 #endif std::string NEXUSString (const std::string s); std::string NEXUSToDisplayString (const std::string s); std::string ReplaceCharacter (const std::string s, char needle, char replace); class Tree; class Node { friend class Tree; public: Node (); virtual ~Node () {}; virtual void AddWeight (int w) { Weight += w; }; virtual void AppendLabel (char *s) { Label += s; }; virtual void AppendLabel (std::string s) { Label += s; }; virtual void Copy (Node* theCopy); virtual void Dump (std::ostream &f); virtual Node *GetAnc () { return Anc; }; virtual Node *GetChild () { return Child; }; virtual int GetDegree () { return Degree; }; virtual int GetDepth () { return Depth; }; virtual float GetEdgeLength () { return Length; }; virtual int GetHeight () { return Height; }; virtual int GetIndex () { return Index; }; virtual std::string GetLabel () { return Label; }; virtual int GetLabelNumber () { return LabelNumber; }; virtual int GetLeafNumber () { return LeafNumber; }; virtual float GetPathLength () { return PathLength; }; virtual Node *GetRightMostSibling (); virtual Node *GetSibling () { return Sib; }; virtual void GetSpan (Node* &left, Node* &right); virtual int GetWeight() { return Weight; }; virtual void IncrementDegree () { Degree++; }; virtual bool IsLeaf () { return Leaf; }; virtual bool IsALeftDescendantOf (Node *q); virtual bool IsMarked () { return Marked; }; virtual bool IsTheChild () { return (Anc->Child == this); }; virtual Node *LeftSiblingOf (); virtual void SetAnc (Node *p) { Anc = p; }; virtual void SetChild (Node *p) { Child = p; }; virtual void SetDegree (int d) { Degree = d; }; virtual void SetDepth (int d) { Depth = d; }; virtual void SetEdgeLength (float e) { Length = e; }; virtual void SetHeight (int h) { Height = h; }; virtual void SetIndex (int i) { Index = i;}; virtual void SetLeaf (bool on) { Leaf = on; }; virtual void SetLeafNumber (int i) { LeafNumber = i;}; virtual void SetLabel (std::string s) { Label = s; }; virtual void SetLabel (char *s) { Label = s; }; virtual void SetLabelNumber (int i) { LabelNumber = i;}; virtual void SetMarked (bool on) { Marked = on; }; virtual void SetPathLength (float l) { PathLength = l;}; virtual void SetSibling (Node *p) { Sib = p; }; virtual void SetWeight (int w) { Weight = w; }; virtual void SetLatitude( double l) { Latitude = l; } virtual void SetLongitude( double l) { Longitude = l; } virtual double GetLatitude () { return Latitude; }; virtual double GetLongitude () { return Longitude; }; virtual void SetValue(int v) { Value = v; }; virtual int GetValue() { return Value; }; protected: Node *Child; Node *Sib; Node *Anc; int Weight; std::string Label; float Length; bool Leaf; int Height; bool Marked; int Degree; int LeafNumber; int Depth; float PathLength; int Index; int LabelNumber; int Value; double Latitude; double Longitude; }; typedef Node *NodePtr; /** *@typedef map > IntegerNodeMap; */ typedef std::map > IntegerNodeMap; #define errSYNTAX 1 #define errENDOFSTRING 2 #define errMISSINGLPAR 3 #define errUNBALANCED 4 #define errSTACKNOTEMPTY 5 #define errSEMICOLON 6 class Tree { public: Tree (); Tree (const Tree &t); virtual ~Tree (); virtual void AddNodeBelow (NodePtr Node, NodePtr Below); virtual NodePtr CopyOfSubtree (NodePtr RootedAt); virtual void Dump (std::ostream &f); #if defined __BORLANDC__ && (__BORLANDC__ < 0x0550) virtual void Draw (ostream &f); #else virtual void Draw (std::ostream &f); #endif virtual NodePtr GetCurNode() { return CurNode; }; virtual int GetError () { return Error; }; virtual std::string GetErrorMsg (); virtual bool GetHasEdgeLengths () const { return EdgeLengths; }; virtual bool GetHasInternalLabels () const { return InternalLabels; }; virtual NodePtr GetLeafWithLabel (std::string s); virtual int GetMaxNodeDepth() { GetNodeDepths(); return MaxDepth; }; virtual std::string GetName () const { return Name; }; virtual void GetNodeDepths (); virtual int GetNumInternals () const { return Internals; }; virtual int GetNumLeaves () const { return Leaves; }; virtual int GetNumNodes () const { return Leaves + Internals; }; virtual NodePtr GetRoot () const { return Root; }; virtual double GetWeight() const { return Weight; }; virtual bool IsRooted () const { return Rooted; }; virtual void MakeChild (); virtual void MakeCurNodeALeaf (int i); virtual void MakeRoot (); virtual void MakeSibling (); virtual void MakeNodeList (); virtual void MarkNodes (bool on); virtual NodePtr NewNode () const { return new Node; }; virtual int Parse (const char *TreeDescr); virtual void Plant (NodePtr p); #if defined __BORLANDC__ && (__BORLANDC__ < 0x0550) virtual int Read (istream &f); #else virtual int Read (std::istream &f); #endif virtual NodePtr RemoveNode (NodePtr Node); virtual void Reset(); virtual void SetCurNode (NodePtr p) { CurNode = p; }; virtual void SetEdgeLengths (bool on) { EdgeLengths = on; }; virtual void SetInternalLabels (bool on) { InternalLabels = on; }; virtual void SetName (const std::string s) { Name = s; }; virtual void SetNumInternals (const int n) { Internals = n; }; virtual void SetNumLeaves (const int n) { Leaves = n; }; virtual void SetRoot (NodePtr r) { Root = r; }; virtual void SetRooted (bool on) { Rooted = on; }; virtual void SetWeight (const double w) { Weight = w; }; virtual void Update (); #if defined __BORLANDC__ && (__BORLANDC__ < 0x0550) virtual void Write (ostream &f); #else virtual void Write (std::ostream &f); virtual void WriteSubtree (std::ostream &f, NodePtr subtreeRoot); #endif virtual void writeTraverse(NodePtr p); NodePtr operator[] (const int i) { return Nodes[i]; }; protected: NodePtr Root; // Root of tree NodePtr CurNode; // Current node int Leaves; // Number of leaves int Internals; // Number of internal nodes int Error; std::string Name; // Name of tree (e.g., for NEXUS trees) NodePtr *Nodes; // Array of nodes std::map > LeafList; // Quick lookup of leaves by label bool InternalLabels; // Flag for displaying internal node labels bool EdgeLengths; // Flag for displaying edge lengths bool Rooted; // Flag for rooted/unrooted std::string Line; // Buffer for drawing trees to text streams int MaxDepth; int MaxHeight; float MaxPathLength; double Weight; unsigned int Nodes_dimension; // stores the current dimension of the Nodes array - needed to rebuild Nodes if treesize changes JAC 13/05/04 #if defined __BORLANDC__ && (__BORLANDC__ < 0x0550) ostream *treeStream; #else std::ostream *treeStream; // Pointer to stream used to draw trees to #endif int count; virtual void traverse (NodePtr p); virtual void buildtraverse (NodePtr p); virtual void copyTraverse (NodePtr p1, NodePtr &p2) const; virtual void deletetraverse (NodePtr p); virtual void dumpTraverse (NodePtr p); virtual void drawAsTextTraverse (NodePtr p); virtual void drawLine (NodePtr p, bool isChild = false); virtual void fillInAncestors (NodePtr p); virtual void drawPendantEdge (NodePtr p); virtual void drawInteriorEdge (NodePtr p); virtual void getNodeDepth(NodePtr p); virtual void getNodeHeights (NodePtr p); virtual void getPathLengths (NodePtr p); virtual void markNodes (NodePtr p, bool on); virtual void makeNodeList (NodePtr p); virtual void resetTraverse (NodePtr p); }; typedef Tree *TreePtr; #if defined __BORLANDC__ && (__BORLANDC__ < 0x0550) inline istream& operator >> (istream& is, Tree &tree) { tree.Read (is); return is; } inline ostream& operator << (ostream& os, Tree &tree) { tree.Write (os); return os; } #else inline std::istream& operator >> (std::istream& is, Tree &tree) { tree.Read (is); return is; } inline std::ostream& operator << (std::ostream& os, Tree &tree) { tree.Write (os); return os; } #endif #ifdef __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif // TREELIB_H tv-0.5/TreeLib/gport/0000777000076400007640000000000011432555767011524 500000000000000tv-0.5/TreeLib/gport/gport.cpp0000775000076400007640000003220710631262112013263 00000000000000#include "gport.h" // System specific defines #if GPORT_MAC // From MacTech 4(6) "Comments about PICTs" #define picGrpBeg 140 #define picGrpEnd 141 #endif // The global port GBasePort *Port = NULL; // A sensible default font GBaseFont::GBaseFont () { description = "Times-Roman"; name = "Times-Roman"; size = 10; bold = false; italic = false; } GPostscriptPort::GPostscriptPort () { PenWidth = 1; DocumentFonts = ""; Device = devPostscript; DisplayRect.SetRect (0, 0, 595-144, 842-144); } void GPostscriptPort::DrawArc (const GPoint &pt, const int radius, const double startAngleDegrees, const double endAngleDegrees) { portStream << "newpath" << endl; portStream << pt.GetX() << " " << -pt.GetY() << " " << radius << " " << (360.0 -startAngleDegrees) << " " << (360.0 - endAngleDegrees) << " arcn" << endl; portStream << "stroke" << endl; portStream << endl; } void GPostscriptPort::DrawLine (const int x1, const int y1, const int x2, const int y2) { portStream << x2 << " " << -y2 << " " << x1 << " " << -y1 << " " << PenWidth << " DrawLine" << endl; } void GPostscriptPort::DrawCircle (const GPoint &pt, const int radius) { portStream << "newpath" << endl; portStream << pt.GetX() << " " << -pt.GetY() << " " << radius << " 0 360 arc" << endl; portStream << "stroke" << endl; portStream << endl; } void GPostscriptPort::DrawRect (const GRect &r) { portStream << r.GetLeft() << " " << -r.GetTop() << " moveto" << endl; portStream << r.GetWidth() << " 0 rlineto" << endl; portStream << "0 " << -r.GetHeight() << " rlineto" << endl; portStream << -r.GetWidth() << " 0 rlineto" << endl; portStream << "0 " << r.GetHeight() << " rlineto" << endl; portStream << "closepath" << endl; portStream << "stroke" << endl; portStream << endl; } void GPostscriptPort::DrawFilledRect (const GRect &r, double graylevel) { portStream << r.GetLeft() << " " << -r.GetTop() << " moveto" << endl; portStream << r.GetWidth() << " 0 rlineto" << endl; portStream << "0 " << -r.GetHeight() << " rlineto" << endl; portStream << -r.GetWidth() << " 0 rlineto" << endl; portStream << "0 " << r.GetHeight() << " rlineto" << endl; portStream << "closepath" << endl; portStream << "gsave" << endl; portStream << graylevel << " setgray fill" << endl; portStream << "grestore" << endl; portStream << "stroke" << endl; portStream << endl; } void GPostscriptPort::DrawText (const int x, const int y, const char *text) { portStream << "(" << text << ") " << x << " " << -y << " DrawText" << endl; } void GPostscriptPort::GetPrintingRect (GRect &r) { // A4, with 1" margin r.SetRect (0, 0, 595-144, 842-144); } void GPostscriptPort::SetCurrentFont (GBaseFont &font) { std::string face = font.GetName(); if (font.IsBold() || font.IsItalic()) { face += "-"; if (font.IsBold()) face += "Bold"; if (font.IsItalic()) face += "Italic"; } /* // Duh -- need to do this earlier, perhaps scan the list of // fonts already created and output those... // Store this font in the list of fonts we need for our document int found = DocumentFonts.find_first_of (face, 0); if ((found < 0) || (found > DocumentFonts.length())) { if (DocumentFonts.length() > 0) DocumentFonts += ", "; DocumentFonts += face; } */ portStream << endl; portStream << "/" << face << " findfont" << endl; portStream << font.GetSize () << " scalefont" << endl; portStream << "setfont" << endl; portStream << endl; } // Mac // Win // Postscript void GPostscriptPort::SetPenWidth (int w) { PenWidth = w; portStream << w << " setlinewidth" << endl; portStream << endl; } void GPostscriptPort::AddPSCommands(char* c) { portStream << c; } void GPostscriptPort::StartPicture (char *pictFileName) { portStream.open (pictFileName); // Postscript header portStream << "%!PS-Adobe-2.0" << endl; portStream << "%%Creator: Roderic D. M. Page" << endl; portStream << "%%DocumentFonts: Times-Roman" << endl; portStream << "%%Title:" << pictFileName << endl; portStream << "%%BoundingBox: 0 0 595 842" << endl; // A4 portStream << "%%Pages: 1" << endl; portStream << "%%EndComments" << endl; portStream << endl; // Move origin to top left corner portStream << "0 842 translate" << endl; portStream << "72 -72 translate" << endl; // one inch margin // Some definitions for drawing lines, etc. // Drawline draws text with encaps that project... portStream << "% Encapsulate drawing a line" << endl; portStream << "% arguments x1 y1 x2 xy2 width" << endl; portStream << "/DrawLine {" << endl; portStream << " gsave" << endl; portStream << " setlinewidth" << endl; // We may not always want to set this as it works best with rectangular trees... // portStream << " 2 setlinecap" << endl; portStream << " 0 setgray" << endl; portStream << " moveto" << endl; portStream << " lineto" << endl; portStream << " stroke" << endl; portStream << " grestore" << endl; portStream << " } bind def" << endl; portStream << endl; portStream << "% Encapsulate drawing text" << endl; portStream << "% arguments x y text" << endl; portStream << "/DrawText {" << endl; portStream << " gsave 1 setlinewidth 0 setgray" << endl; portStream << " moveto" << endl; portStream << " show grestore" << endl; portStream << "} bind def" << endl; portStream << endl; } void GPostscriptPort::EndPicture () { portStream << "showpage" << endl; portStream << "%%Trailer" << endl; portStream << "%%end" << endl; portStream << "%%EOF" << endl; portStream.close (); } #if GPORT_MAC // Macintosh void GMacPort::BeginGroup () { // ::PicComment (picGrpBeg, 0, NULL); } void GMacPort::EndGroup () { // ::PicComment (picGrpEnd, 0, NULL); } #endif SVGPort::SVGPort () { fontString = "font-family:Times;font-size:12"; DisplayRect.SetRect (0, 0, 400, 400); } void SVGPort::DrawLine (const int x1, const int y1, const int x2, const int y2) { portStream << ""; // portStream << ""; // portStream << "" << endl; } void SVGPort::DrawCircle (const GPoint &pt, const int radius) { /* portStream << "newpath" << endl; portStream << pt.GetX() << " " << -pt.GetY() << " " << radius << " 0 360 arc" << endl; portStream << "stroke" << endl; portStream << endl; */ } void SVGPort::DrawRect (const GRect &r) { /* portStream << r.GetLeft() << " " << -r.GetTop() << " moveto" << endl; portStream << r.GetWidth() << " 0 rlineto" << endl; portStream << "0 " << -r.GetHeight() << " rlineto" << endl; portStream << -r.GetWidth() << " 0 rlineto" << endl; portStream << "0 " << r.GetHeight() << " rlineto" << endl; portStream << "closepath" << endl; portStream << "stroke" << endl; portStream << endl; */ } void SVGPort::DrawText (const int x, const int y, const char *text) { portStream << "" << text << "" << endl; } void SVGPort::StartPicture (char *pictFileName) { portStream.open (pictFileName); portStream << "" << endl; portStream << "" << endl; // test // test } void SVGPort::EndPicture () { portStream << "" << endl; portStream.close (); } void SVGPort::GetPrintingRect (GRect &r) { r = DisplayRect; } void SVGPort::SetCurrentFont (GBaseFont &font) { fontString = ""; fontString += "font-family:"; fontString += font.GetName(); char buf[32]; sprintf (buf, ";font-size:%dpx", font.GetSize()); fontString += buf; if (font.IsItalic()) { fontString += ";font-style:italic"; } if (font.IsBold()) { fontString += ";font-weight:bold"; } } MVGPort::MVGPort () { // for now fontString = "font '/users/rpage/Sites/CLARITY_.TTF'\n"; fontString += "font-size 12\n"; fontString += "text-antialias 0\n"; DisplayRect.SetRect (0, 0, 400, 400); } void MVGPort::DrawLine (const int x1, const int y1, const int x2, const int y2) { portStream << "line " << x1 << " " << y1 << " " << x2 << " " << y2 << std::endl; } void MVGPort::DrawCircle (const GPoint &pt, const int radius) { /* portStream << "newpath" << endl; portStream << pt.GetX() << " " << -pt.GetY() << " " << radius << " 0 360 arc" << endl; portStream << "stroke" << endl; portStream << endl; */ } void MVGPort::DrawRect (const GRect &r) { /* portStream << r.GetLeft() << " " << -r.GetTop() << " moveto" << endl; portStream << r.GetWidth() << " 0 rlineto" << endl; portStream << "0 " << -r.GetHeight() << " rlineto" << endl; portStream << -r.GetWidth() << " 0 rlineto" << endl; portStream << "0 " << r.GetHeight() << " rlineto" << endl; portStream << "closepath" << endl; portStream << "stroke" << endl; portStream << endl; */ } void MVGPort::DrawText (const int x, const int y, const char *text) { portStream << "text " << x << " " << y << "\"" << text << "\"" << std::endl; } void MVGPort::StartPicture (char *pictFileName) { portStream.open (pictFileName); portStream << "viewbox 0 0 " << DisplayRect.GetWidth() << " " << DisplayRect.GetHeight() << std::endl; portStream << fontString; } void MVGPort::EndPicture () { portStream.close (); } void MVGPort::GetPrintingRect (GRect &r) { r = DisplayRect; } void MVGPort::SetCurrentFont (GBaseFont &font) { // for now fontString = "font '/users/rpage/Sites/CLARITY_.TTF'\n"; fontString += "font-size 12\n"; fontString += "text-antialias 0\n"; /* fontString = ""; fontString += "font-family:"; fontString += font.GetName(); char buf[32]; sprintf (buf, ";font-size:%dpx", font.GetSize()); fontString += buf; if (font.IsItalic()) { fontString += ";font-style:italic"; } if (font.IsBold()) { fontString += ";font-weight:bold"; } */ } ImageMapPort::ImageMapPort () { // fontString = "font-family:Times;font-size:12"; DisplayRect.SetRect (0, 0, 400, 400); } void ImageMapPort::DrawLine (const int x1, const int y1, const int x2, const int y2) { // portStream << "line " << x1 << " " << y1 << " " << x2 << " " << y2 << std::endl; } void ImageMapPort::DrawCircle (const GPoint &pt, const int radius) { /* portStream << "newpath" << endl; portStream << pt.GetX() << " " << -pt.GetY() << " " << radius << " 0 360 arc" << endl; portStream << "stroke" << endl; portStream << endl; */ } void ImageMapPort::DrawRect (const GRect &r) { /* portStream << r.GetLeft() << " " << -r.GetTop() << " moveto" << endl; portStream << r.GetWidth() << " 0 rlineto" << endl; portStream << "0 " << -r.GetHeight() << " rlineto" << endl; portStream << -r.GetWidth() << " 0 rlineto" << endl; portStream << "0 " << r.GetHeight() << " rlineto" << endl; portStream << "closepath" << endl; portStream << "stroke" << endl; portStream << endl; */ } void ImageMapPort::DrawText (const int x, const int y, const char *text) { // x and y specify the bottom left corner of the text string portStream << "" << std::endl; } void ImageMapPort::StartPicture (char *pictFileName) { portStream.open (pictFileName); portStream << "" << std::endl; } void ImageMapPort::EndPicture () { portStream << "" << std::endl; portStream.close (); } void ImageMapPort::GetPrintingRect (GRect &r) { r = DisplayRect; } void ImageMapPort::SetCurrentFont (GBaseFont &font) { /* fontString = ""; fontString += "font-family:"; fontString += font.GetName(); char buf[32]; sprintf (buf, ";font-size:%dpx", font.GetSize()); fontString += buf; if (font.IsItalic()) { fontString += ";font-style:italic"; } if (font.IsBold()) { fontString += ";font-weight:bold"; } */ } tv-0.5/TreeLib/gport/gport.h0000775000076400007640000002405610631262113012734 00000000000000#ifndef GPORTH #define GPORTH #ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif // Ignore "Cannot create precompiled header: code in header" message // generated when compiling string.cc #pragma warn -pch #endif #include #include #include #ifdef __BORLANDC__ #pragma warn .pch #endif using namespace std; #include "gdefs.h" // System specific includes here #if GPORT_WINDOWS #endif #if GPORT_MAC // #include #endif enum GPortDevice {devScreen, devPrinter, devPicture, devPostscript}; /* Note that we always draw using the following coordinate system: (0,0)--------->(+x,0) | | | \/ (+y,0) Hence the origin is the top left hand corner, and y goes down rather than up. This is typical for drawing to a window. Some systems have other coordinate systems (such as Postscript). We make the translation internally. */ // A point class GPoint { public: GPoint () { SetPoint (0, 0); }; GPoint (GPoint &p) { X = p.X; Y = p.Y; }; GPoint (const int x, const int y) { SetPoint (x, y); }; virtual int GetX () const { return X; }; virtual int GetY () const { return Y; }; virtual void Offset (const int xoff, const int yoff) { X += xoff; Y += yoff; }; virtual void SetPoint (const int x, const int y) { X = x; Y = y; }; virtual void SetX (int x) { X = x; }; virtual void SetY (int y) { Y = y; }; int operator== (const GPoint &p) { return (int) ( (X == p.X) && ( Y == p.Y)); }; int operator!= (const GPoint &p) { return (int) ( (X != p.X) || ( Y != p.Y)); }; protected: int X; int Y; }; // A rectangle class GRect { public: GRect () { left = top = right = bottom = 0; }; GRect (const int l, const int t, const int r, const int b) { SetRect (l, t, r, b); }; virtual int GetLeft () const { return left; }; virtual int GetTop () const { return top; }; virtual int GetRight () const { return right; }; virtual int GetBottom () const { return bottom; }; virtual int GetWidth () const { return right - left; }; virtual int GetHeight () const { return bottom - top; }; virtual void Inset (const int dx, const int dy) { left += dx; right -= dx; top += dy; bottom -= dy; }; virtual void Offset (const int dx, const int dy) { left += dx; right += dx; top += dy; bottom += dy; }; virtual bool PointInRect (GPoint &pt) { return (((pt.GetX() >= left) && (pt.GetX() <= right)) && ((pt.GetY() >= top) && (pt.GetY() <= bottom))); } virtual void SetLeft (const int l) {left = l; }; virtual void SetTop (const int t) {top = t; }; virtual void SetRight (const int r) {right = r; }; virtual void SetBottom (const int b) {bottom = b; }; virtual void SetRect (const int l, const int t, const int r, const int b) { left = l; top = t; right = r; bottom = b; }; protected: int left, top, right, bottom; }; // Base class for system specific fonts class GBaseFont { public: GBaseFont (); virtual ~GBaseFont () {}; virtual std::string GetName () { return description; }; virtual std::string GetDescription () { return description; }; virtual int GetSize () { return size; }; virtual bool IsBold () { return bold; }; virtual bool IsItalic () { return italic; }; virtual void SetName (std::string name) { description = name; }; protected: std::string description; std::string name; int size; bool bold; bool italic; }; typedef GBaseFont *GBaseFontPtr; typedef GBaseFont GFont ; // for now typedef GFont *GFontPtr; // Windows needs the two handles for screen and printer fonts // Mac just sets things // Postscript writes to the postscript stream // Virtual class to encapsulate printing class GBasePrinter { public: GBasePrinter () {}; virtual ~GBasePrinter () {}; virtual void PrinterSetup () = 0; virtual void AbortPrinting () = 0; virtual void EndDoc (); virtual bool EndPage (); virtual void GetPrintingRect (GRect &r) = 0; virtual void GetPhysicalPageRect (GRect &r) = 0; virtual bool StartPage () = 0; virtual bool StartDoc (char *jobname = "GBasePrinter") = 0; }; // Windows port VPort // Mac port VPort // Postscript - just write to file // Encapsulates the complete graphics system (screen drawing, picture files, // printing, clipboard). class GBasePort { public: GBasePort () { Device = devScreen; PenWidth = 1;}; virtual ~GBasePort() {}; virtual void DrawArc (const GPoint &pt, const int radius, const double startAngleDegrees, const double endAngleDegrees) = 0; virtual void DrawCircle (const GPoint &pt, const int radius) = 0; virtual void DrawLine (const int x1, const int y1, const int x2, const int y2) = 0; virtual void DrawLinePts (const GPoint &pt1, const GPoint &pt2) { DrawLine (pt1.GetX(), pt1.GetY(), pt2.GetX(), pt2.GetY()); }; virtual void DrawRect (const GRect &r) = 0; virtual void DrawText (const int x, const int y, const char *s) = 0; // Display virtual GPortDevice GetCurrentDevice () { return Device; }; virtual void GetDisplayRect (GRect &r) { r = DisplayRect; }; virtual void SetDisplayRect (GRect &r) { DisplayRect = r; }; // Pen virtual int GetPenWidth () { return PenWidth; }; virtual void SetPenWidth (int w) { PenWidth = w; }; // Fonts virtual void SetCurrentFont (GBaseFont &font) = 0; // Pictures virtual void StartPicture (char *pictFileName) = 0; virtual void EndPicture () = 0; // Groups virtual void BeginGroup () = 0; virtual void EndGroup () = 0; // Printing virtual void GetPrintingRect (GRect &r) = 0; protected: // list of fonts // printer class //pens int PenWidth; // Device info GPortDevice Device; GRect DisplayRect; }; // Mac // Win // Postscript class GFilePort : public GBasePort { public: GFilePort () {}; protected: ofstream portStream; }; class GPostscriptPort : public GFilePort { public: GPostscriptPort (); virtual ~GPostscriptPort () {}; virtual void DrawArc (const GPoint &pt, const int radius, const double startAngleDegrees, const double endAngleDegrees); virtual void DrawCircle (const GPoint &pt, const int radius); virtual void DrawLine (const int x1, const int y1, const int x2, const int y2); virtual void DrawRect (const GRect &r); virtual void DrawFilledRect (const GRect &r, double greylevel); //greylevel of fill - 0 is black, 1 is white virtual void DrawText (const int x, const int y, const char *text); // Pen virtual void SetPenWidth (int w); // Fonts virtual void SetCurrentFont (GBaseFont &font); // Pictures virtual void StartPicture (char *pictFileName); virtual void EndPicture (); // Groups virtual void BeginGroup () {}; virtual void EndGroup () {}; // Printing virtual void GetPrintingRect (GRect &r); // Random virtual void AddPSCommands (char* c); //allow direct access to postscript file - needed for nice spacing in histogram protected: std::string DocumentFonts; }; class GMacPort : public GBasePort { public: // Groups virtual void BeginGroup (); virtual void EndGroup (); protected: }; class SVGPort : public GFilePort { public: SVGPort (); virtual void DrawArc (const GPoint &pt, const int radius, const double startAngleDegrees, const double endAngleDegrees) {}; virtual void DrawCircle (const GPoint &pt, const int radius); virtual void DrawLine (const int x1, const int y1, const int x2, const int y2); virtual void DrawRect (const GRect &r); virtual void DrawText (const int x, const int y, const char *text); // Pen virtual void SetPenWidth (int w) {}; // Fonts virtual void SetCurrentFont (GBaseFont &font); // Pictures virtual void StartPicture (char *pictFileName); virtual void EndPicture (); // Groups virtual void BeginGroup () {}; virtual void EndGroup () {}; // Printing virtual void GetPrintingRect (GRect &r); protected: std::string fontString; }; class MVGPort : public GFilePort { public: MVGPort (); virtual void DrawArc (const GPoint &pt, const int radius, const double startAngleDegrees, const double endAngleDegrees) {}; virtual void DrawCircle (const GPoint &pt, const int radius); virtual void DrawLine (const int x1, const int y1, const int x2, const int y2); virtual void DrawRect (const GRect &r); virtual void DrawText (const int x, const int y, const char *text); // Pen virtual void SetPenWidth (int w) {}; // Fonts virtual void SetCurrentFont (GBaseFont &font); // Pictures virtual void StartPicture (char *pictFileName); virtual void EndPicture (); // Groups virtual void BeginGroup () {}; virtual void EndGroup () {}; // Printing virtual void GetPrintingRect (GRect &r); protected: std::string fontString; }; class ImageMapPort : public GFilePort { public: ImageMapPort (); virtual void DrawArc (const GPoint &pt, const int radius, const double startAngleDegrees, const double endAngleDegrees) {}; virtual void DrawCircle (const GPoint &pt, const int radius); virtual void DrawLine (const int x1, const int y1, const int x2, const int y2); virtual void DrawRect (const GRect &r); virtual void DrawText (const int x, const int y, const char *text); // Pen virtual void SetPenWidth (int w) {}; // Fonts virtual void SetCurrentFont (GBaseFont &font); // Pictures virtual void StartPicture (char *pictFileName); virtual void EndPicture (); // Groups virtual void BeginGroup () {}; virtual void EndGroup () {}; // Printing virtual void GetPrintingRect (GRect &r); protected: std::string fontString; }; #ifndef USE_VC2 extern GBasePort *Port; // for now #endif #ifdef __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif tv-0.5/TreeLib/gport/gdefs.h0000775000076400007640000000146007417053172012676 00000000000000#ifndef GDEFH #define GDEFH // Determine which platform we are building for #if __BORLANDC__ // Borland specific options #define GPORT_WINDOWS 1 // Windows #define GPORT_MAC 0 #endif #ifdef __MWERKS__ // Metrowerks specific options #ifdef __INTEL__ #define GPORT_WINDOWS 1 // Windows #define GPORT_MAC 0 #define __WIN32__ // MetroWerks only supports Win32 #endif /* __INTEL__ */ #ifdef macintosh // MacOS #ifdef __WXMAC__ #define USE_WXWINDOWS 1 // wxWindows #define GPORT_MAC 0 #define GPORT_WINDOWS 0 #else #define GPORT_MAC 1 // Macintosh #define GPORT_WINDOWS 0 #endif #endif /* macintosh */ #endif #ifdef __GNUC__ #define GPORT_MAC 0 // Assume gcc implies X windows #define GPORT_WINDOWS 0 #endif #endif tv-0.5/TreeLib/treeorder.h0000775000076400007640000001103510207110324012425 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: treeorder.h,v 1.4 2005/02/23 14:19:00 rdmp1c Exp $ /** * @file treeorder.h * * Classes to reorder nodes in a tree * */ #ifndef TREEORDERH #define TREEORDERH #ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif // Ignore "Cannot create precompiled header: code in header" message // generated when compiling string.cc #pragma warn -pch #endif #include #include "TreeLib.h" #include "nodeiterator.h" /** * @class TreeOrder * Base class for ordering tree. By overiding the MustSwap fucntion, any * ordering can be described. */ class TreeOrder { public: TreeOrder () {}; /** * Constructor takes a tree as a parameter. * @param tree tree to be ordered. */ TreeOrder (Tree *tree) { t = tree; }; virtual ~TreeOrder() {}; /** * Order the tree. Call this method to reorder nodes. The tree is traversed * in post order, and for each internal node SortDescendants is called. How the * nodes are sorted is determined by MustSwap, so normally Order will not need * to be overridden in descendant classes. */ virtual void Order (); protected: Tree *t; /** * Test whether nodes p and q need to be swapped. This is an abstract * function that must be overriden in descendant classes. This function * determines how the tree is ordered. * @param p a node in the tree * @param q another node in the tree that is a sibling of q * @return True if p and q must be swapped. */ virtual bool MustSwap (NodePtr p, NodePtr q) = 0; /** * Sort descendants of node according to criterion defined in MustSwap. * @param node the node whose descendants are being sorted. */ virtual void SortDescendants (NodePtr node); }; /** * @class LeftOrder * Extends Treeorder to order trees by placing "heavier" nodes to the left. */ class LeftOrder : public TreeOrder { public: LeftOrder (Tree *tree) : TreeOrder (tree) {}; virtual ~LeftOrder() {}; protected: virtual bool MustSwap (NodePtr p, NodePtr q); }; /** * @class RightOrder * Extends Treeorder to order trees by placing "heavier" nodes to the right. */ class RightOrder : public TreeOrder { public: RightOrder (Tree *tree) : TreeOrder (tree) {}; virtual ~RightOrder() {}; protected: virtual bool MustSwap (NodePtr p, NodePtr q); }; /** * @class AlphaOrder * Extends Treeorder to order trees by sorting nodes alphabetically. */ class AlphaOrder : public TreeOrder { public: AlphaOrder (Tree *tree) : TreeOrder (tree) {}; virtual ~AlphaOrder() {}; /** * Order the tree. Extends ancestral method by storing "lowest" label * found in any descendant of a given node using a map. */ virtual void Order (); protected: std::map > labels; virtual bool MustSwap (NodePtr p, NodePtr q); }; /** * @class ThorneOrder * Extends Treeorder to order in form required by Jeff Thorne's programs * estabranches and multidivtime. That is, the outgroup is the rightmost * node of the tree. */ class ThorneOrder : public TreeOrder { public: ThorneOrder (Tree *tree) : TreeOrder (tree) { outgroup = t->GetRoot()->GetChild(); }; virtual ~ThorneOrder() {}; virtual void SetOutgroup (NodePtr o) { outgroup = o; }; /** * Order the tree. Extends ancestral method by storing "lowest" label * found in any descendant of a given node using a map. */ virtual void Order (); protected: virtual bool MustSwap (NodePtr p, NodePtr q); NodePtr outgroup; }; #if __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif tv-0.5/TreeLib/treeorder.cpp0000775000076400007640000000711110207110324012760 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: treeorder.cpp,v 1.2 2005/02/23 14:19:00 rdmp1c Exp $ #include "treeorder.h" #include //------------------------------------------------------------------------------ void TreeOrder::Order () { NodeIterator n (t->GetRoot()); Node *q = n.begin(); while (q) { if (!q->IsLeaf ()) SortDescendants (q); q = n.next(); } } //------------------------------------------------------------------------------ void TreeOrder::SortDescendants (NodePtr node) { NodePtr head = node->GetChild (); NodePtr tail = head; while (tail->GetSibling () != NULL) { NodePtr p = tail->GetSibling (); if (MustSwap (head, p)) { tail->SetSibling (p->GetSibling ()); p->SetSibling (head); head = p; p->GetAnc()->SetChild (p); } else { NodePtr q = head; NodePtr r = q->GetSibling (); while (MustSwap (p, r)) { q = r; r = q->GetSibling (); } if (p == r) tail = p; else { tail->SetSibling (p->GetSibling ()); p->SetSibling (r); q->SetSibling (p); } } } } //------------------------------------------------------------------------------ bool LeftOrder::MustSwap (NodePtr p, NodePtr q) { return (p->GetWeight() < q->GetWeight()); } //------------------------------------------------------------------------------ bool RightOrder::MustSwap (NodePtr p, NodePtr q) { return (p->GetWeight() > q->GetWeight()); } //------------------------------------------------------------------------------ bool AlphaOrder::MustSwap (NodePtr p, NodePtr q) { return (labels[p] > labels[q]); } //------------------------------------------------------------------------------ void AlphaOrder::Order () { NodeIterator n (t->GetRoot()); Node *q = n.begin(); while (q) { if (q->IsLeaf ()) labels[q] = q->GetLabel(); q = n.next(); } q = n.begin(); while (q) while (q) { if (!q->IsLeaf ()) { SortDescendants (q); labels[q] = labels[q->GetChild()]; } q = n.next(); } } //------------------------------------------------------------------------------ void ThorneOrder::Order () { if (outgroup->GetSibling() != NULL) { NodePtr q = t->GetRoot()->GetChild()->GetRightMostSibling(); //std::cout << "OG" << outgroup->GetLabel() << std::endl; if (outgroup == t->GetRoot()->GetChild()) { t->GetRoot()->SetChild(outgroup->GetSibling()); } else { NodePtr p = outgroup->LeftSiblingOf(); p->SetSibling (outgroup->GetSibling()); } q->SetSibling (outgroup); outgroup->SetSibling (NULL); } } //------------------------------------------------------------------------------ bool ThorneOrder::MustSwap (NodePtr p, NodePtr q) { return (p == outgroup); } tv-0.5/TreeLib/mast.cpp0000775000076400007640000002027110244730324011744 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: mast.cpp,v 1.5 2005/05/24 22:55:16 rdmp1c Exp $ /** * @file mast.cpp * * Compute Maximum Agreement Subtree (MAST) between a pair of trees * */ // Vital that this is included before or Borland C++ 5.5 complains that // min and max are alreday defined #include "mast.h" #include #ifdef __GNUC__ #include #endif #define USE_MATCHING 1 #if USE_MATCHING #include "mwbmatching.h" #endif typedef std::vector NodeVector; int MAST (NTree &T1, NTree &T2) { int result = 0; // 1. create lists of the nodes in T1 and T2 in postorder int count = 0; NodeVector pot1; NodeIterator n1 (T1.GetRoot()); Node *q = n1.begin(); while (q) { q->SetIndex (count); pot1.push_back ((NNode *)q); count++; q = n1.next(); } count = 0; NodeVector pot2; NodeIterator n2 (T2.GetRoot()); q = n2.begin(); while (q) { q->SetIndex (count); pot2.push_back ((NNode *)q); count++; q = n2.next(); } // Matrix to hold solutions int **m; m = new int *[T1.GetNumNodes()]; for (int i = 0; i < T1.GetNumNodes(); i++) m[i] = new int [T2.GetNumNodes()]; for (int i = 0; i < T1.GetNumNodes(); i++) for (int j = 0; j IsLeaf() || pot2[j]->IsLeaf()) { // Both are leaves, so MAST[i,j] is 1 if labels are identical if (pot1[i]->IsLeaf() && pot2[j]->IsLeaf()) { if ( pot1[i]->GetLabel() == pot2[j]->GetLabel()) m[i][j] = 1; } else { // Only one is a leaf, so MAST[i,j] is 1 if leaf is element in cluster IntegerSet common; std::set_intersection (pot1[i]->Cluster.begin(), pot1[i]->Cluster.end(), pot2[j]->Cluster.begin(), pot2[j]->Cluster.end(), std::inserter (common, common.end())); int w = common.size(); m[i][j] = w; } } else { // Both are internals so MAST[i,j] is MAX (diag, match) std::vector pchildren, qchildren; // diag int diag = 0; // Get MAST of base of subtree in t1 and immediate children of // base of subtree in t2, and at the same time store list of // immediate children NodePtr p = pot2[j]->GetChild(); while (p) { qchildren.push_back(p); diag = std::max (diag, m[i][p->GetIndex()]); p = p->GetSibling(); } // get MAST of base of subtree in t2 and immediate children of // base of subtree in t1, and at the same time store list of // immediate children NodePtr q = pot1[i]->GetChild(); while (q) { pchildren.push_back(q); diag = std::max (diag, m[q->GetIndex()][j]); q = q->GetSibling(); } // maximum weighted bipartite matching #if USE_MATCHING int match = 0; graph g; g.make_directed(); // Nodes for p and q children map > p_node; map > q_node; for (int k = 0; k < pchildren.size(); k++) { node n = g.new_node(); p_node[k] = n; } for (int k = 0; k < qchildren.size(); k++) { node n = g.new_node(); q_node[k] = n; } // Edges edge_map weights(g, 0); for (int k = 0; k < pchildren.size(); k++) { for (int r = 0; r < qchildren.size(); r++) { int v = pchildren[k]->GetIndex(); int w = qchildren[r]->GetIndex(); // It seems that if the partition "from" is much larger than "to, // the matching algorithm can blow up with a memory access error // in fheap.c. Reversing the graph seems to help. edge e; if (pchildren.size() < qchildren.size()) e = g.new_edge (p_node[k], q_node[r]); else e = g.new_edge (q_node[r], p_node[k]); weights[e] = m[v][w]; } } // cout << "g" << endl; // cout << g; // g.save(); // cout << "Start matching..."; if (g.number_of_nodes() == 0) { match = 0; } else { mwbmatching mwbm; mwbm.set_vars (weights); if (mwbm.check(g) != algorithm::GTL_OK) { cout << "Maximum weight bipartite matching algorithm check failed" << endl; exit(1); } else { if (mwbm.run(g) != algorithm::GTL_OK) { cout << "Error running maximum weight bipartite matching algorithm" << endl; exit(1); } else { match = mwbm.get_mwbm(); } } } // cout << "matching done (" << match << ")" << endl; #else // For now (sigh) brute force generation of all matchings. Eventually // will need to do this more efficiently int n = std::max (pchildren.size(), qchildren.size()); // Store a vector of indices of children of subtree in t2. // We will permute this to generate all matchings. If t2 // has fewer children than subtree in t1, vector will contain // one or more "null" (-1) values. std::vector perm; for (int k = 0; k < n; k++) { if (k < qchildren.size()) perm.push_back (k); else perm.push_back (-1); } // Generate all matchings // First matching int match = 0; for (int k = 0; k < n; k++) { if ((k < pchildren.size()) && (perm[k] != -1)) { int v = pchildren[k]->GetIndex(); int w = qchildren[perm[k]]->GetIndex(); match += m[v][w]; } } // Remaining matchings while (next_permutation (perm.begin(), perm.end()) ) { int this_match = 0; for (int k = 0; k < n; k++) { if ((k < pchildren.size()) && (perm[k] != -1)) { int v = pchildren[k]->GetIndex(); int w = qchildren[perm[k]]->GetIndex(); this_match += m[v][w]; } } match = std::max (match, this_match); } #endif m[i][j] = std::max (diag, match); } } } result = m[T1.GetNumNodes() - 1][T2.GetNumNodes() - 1]; // Show matrix /* for (int i = 0; i < T1.GetNumNodes(); i++) { cout << setw(3) << i << "|"; for (int j = 0; j < T2.GetNumNodes(); j++) cout << setw(3) << m[i][j]; cout << endl; } */ // clean up for (int i = 0; i < T1.GetNumNodes(); i++) delete [] m[i]; delete [] m; return result; } tv-0.5/TreeLib/mast.h0000775000076400007640000000444707470754504011435 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: mast.h,v 1.1 2002/05/16 16:07:32 rdmp1c Exp $ /** * @file mast.h * * Compute Maximum Agreement Subtree (MAST) between a pair of trees * */ #ifndef MASTH #define MASTH #ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif // Ignore "Cannot create precompiled header: code in header" message // generated when compiling string.cc #pragma warn -pch #endif #include "nodeiterator.h" #include "ntree.h" /** * @fn int MAST (NTree &T1, NTree &T2) * @brief Computes the size of the maximum agreement subtree between two rooted trees * * MAST uses the dynamic programming algorithm of Steel and Warnow (1993) to compute * the size of the largest agreement subtree. The algorithm has time complexity * @f${\rm O}(n^{4.5} \log n + V)@f$ for two trees with @em n leaves, where @em V * is the maximum number of nodes in the trees. This implementation would be much improved * by using an efficient algorithm for maximum weight bipartite matching (rather than * simply enumerating all @f$(k - 1)!@f$ possible matchings), and by using the * sparsification techniques of Farach and Thorup (1997). * * @param T1 one tree * @param T2 another tree */ int MAST (NTree &T1, NTree &T2); #if __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif tv-0.5/TreeLib/treewriter.cpp0000775000076400007640000001171410207112014013163 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: treewriter.cpp,v 1.4 2005/02/23 14:32:44 rdmp1c Exp $ #include "treewriter.h" //------------------------------------------------------------------------------ void NewickTreeWriter::WriteLeftParenthesis () { *f << '('; } //------------------------------------------------------------------------------ void NewickTreeWriter::WriteRightParenthesis () { *f << ')'; } //------------------------------------------------------------------------------ void NewickTreeWriter::WriteSiblingSymbol () { *f << ','; } //------------------------------------------------------------------------------ void NewickTreeWriter::WriteLeaf () { *f << NEXUSString (cur->GetLabel()); if (t->GetHasEdgeLengths () && writeEdgeLengths) *f << ":" << cur->GetEdgeLength(); } //------------------------------------------------------------------------------ void NewickTreeWriter::WriteInternal () { if (cur->GetLabel() != "") *f << NEXUSString (cur->GetLabel()); if (t->GetHasEdgeLengths () && writeEdgeLengths) *f << ":" << cur->GetEdgeLength(); } //------------------------------------------------------------------------------ void NewickTreeWriter::WriteEndOfTree () { *f << ';'; } //------------------------------------------------------------------------------ void NewickTreeWriter::Write () { cur = t->GetRoot(); while (cur) { if (cur->GetChild()) { WriteLeftParenthesis (); stk.push (cur); cur = cur->GetChild(); } else { WriteLeaf (); while (!stk.empty() && (cur->GetSibling() == NULL)) { WriteRightParenthesis (); cur = stk.top(); WriteInternal (); stk.pop(); } if (stk.empty()) cur = NULL; else { WriteSiblingSymbol (); cur = cur->GetSibling(); } } } WriteEndOfTree (); } //------------------------------------------------------------------------------ void XMLTreeWriter::Write () { OpenTree(); cur = t->GetRoot(); count = 0; while (cur) { if (cur->GetChild()) { count++; OpenNode(); NodeInfo(); stk.push (cur); cur = cur->GetChild(); } else { count++; OpenNode(); NodeInfo(); CloseNode(); while (!stk.empty() && (cur->GetSibling() == NULL)) { CloseNode(); cur = stk.top(); stk.pop(); } if (stk.empty()) cur = NULL; else { cur = cur->GetSibling(); } } } CloseTree(); } void TreeBolicTreeWriter::OpenTree () { *f << "" << std::endl; *f << "" << std::endl; } void TreeBolicTreeWriter::CloseTree () { *f << "" << std::endl; *f << "" << std::endl; } void TreeBolicTreeWriter::OpenNode () { *f << std::string (stk.size() * 3, ' ') << "" << std::endl; } void TreeBolicTreeWriter::CloseNode () { *f << std::string (stk.size() * 3, ' ') << "" << std::endl; } void TreeBolicTreeWriter::NodeInfo () { // label if (cur->GetLabel() != "") *f << std::string (stk.size() * 3 + 3, ' ') << "" << std::endl; } //------------------------------------------------------------------------------ void ThorneTreeWriter::WriteLeaf () { *f << formatLabel (cur->GetLabel()); } //------------------------------------------------------------------------------ void ThorneTreeWriter::WriteInternal () { } std::string ThorneTreeWriter::formatLabel(std::string s) { std::string sub = s.substr(0,30); std::string thorne_label = ""; int k = 0; while (k < sub.length()) { switch (sub[k]) { case '\'': thorne_label += '_'; break; case ' ': thorne_label += '_'; break; default: thorne_label += sub[k]; break; } k++; } return thorne_label; } tv-0.5/TreeLib/tokeniser.cpp0000775000076400007640000002564310306773560013023 00000000000000/* * TreeLib * A library for manipulating phylogenetic trees. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: tokeniser.cpp,v 1.14 2005/09/05 07:44:48 rdmp1c Exp $ #include "tokeniser.h" #include #include //------------------------------------------------------------------------------ #if defined __BORLANDC__ && (__BORLANDC__ < 0x0550) Tokeniser::Tokeniser (istream& i ) : in(i) #else Tokeniser::Tokeniser (std::istream& i ) : in(i) #endif { curChar = '\0'; filecol = 1L; fileline = 1L; filepos = 0L; atEOF = false; atEOL = false; token = ""; #ifdef __MWERKS__ putBuffer = '\0'; #endif modifierPHYLIP = false; } Tokeniser::~Tokeniser () { } //------------------------------------------------------------------------------ bool Tokeniser::IsPunctuation (char ch) { char punctuation[23]; punctuation[0] = '('; punctuation[1] = ')'; punctuation[2] = '['; punctuation[3] = ']'; punctuation[4] = '{'; punctuation[5] = '}'; punctuation[6] = '/'; punctuation[7] = '\\'; punctuation[8] = ','; punctuation[9] = ';'; punctuation[10] = ':'; punctuation[11] = '='; punctuation[12] = '*'; punctuation[13] = '\''; punctuation[14] = '"'; punctuation[15] = '`'; punctuation[16] = '+'; punctuation[17] = '-'; punctuation[18] = '<'; punctuation[19] = '>'; punctuation[20] = '!'; punctuation[21] = '#'; punctuation[22] = '\0'; return (bool)(strchr (punctuation, ch) != NULL); } //------------------------------------------------------------------------------ bool Tokeniser::IsWhiteSpace (char ch) { char whitespace[4]; whitespace[0] = ' '; whitespace[1] = '\t'; whitespace[2] = '\n'; whitespace[3] = '\0'; return (bool)(strchr (whitespace, ch) != NULL); } //------------------------------------------------------------------------------ char Tokeniser::GetNextChar () { int ch; #ifdef __MWERKS__ if (putBuffer != '\0') { ch = putBuffer; putBuffer = '\0'; } else ch = in.get(); #else ch = in.get(); #endif int failed = in.bad(); if( failed ) throw XTokeniser ( "Unknown error reading data file (check to make sure file exists)" ); // cout << "[" << (char)ch << "]" << endl; if( ch == 13 || ch == 10 ) { fileline++; filecol = 1L; if( ch == 13 && (int)in.peek() == 10 ) ch = in.get(); atEOL = true; } else if( ch == EOF ) { atEOF = true; } else { filecol++; atEOL = false; } filepos = in.tellg(); if (atEOF ) return '\0'; else if (atEOL ) return '\n'; else return (char)ch; } //------------------------------------------------------------------------------ Tokeniser::tokentype Tokeniser::GetNextToken () { tokentype TokenType = EMPTY; while ((TokenType == EMPTY) && !in.bad() && !atEOF) { curChar = GetNextChar (); if (IsWhiteSpace (curChar)) { // skip white space } else { if (IsPunctuation (curChar)) { // classify punctuation token switch (curChar) { case '[': ParseComment (); break; case '\'': if (ParseString ()) TokenType = STRING; else TokenType = BAD; break; case '(': TokenType = LPAR; break; case ')': TokenType = RPAR; break; case '{': TokenType = LPAR; break; case '}': TokenType = RPAR; break; case '!': TokenType = BANG; break; case '#': TokenType = HASH; break; case '=': TokenType = EQUALS; break; case ';': TokenType = SEMICOLON; break; case ',': TokenType = COMMA; break; case '*': TokenType = ASTERIX; break; case ':': TokenType = COLON; break; case '-': TokenType = MINUS; break; case '"': TokenType = DOUBLEQUOTE; break; case '/': TokenType = BACKSLASH; break; default: TokenType = OTHER; break; } } else { // It's either a number, or a string if (isdigit (curChar)) { TokenType = ParseNumber(); } else { if (ParseToken ()) TokenType = STRING; else TokenType = BAD; } } } } if ((TokenType != STRING) && (TokenType != NUMBER)) { token = ""; token += curChar; } return TokenType; } //------------------------------------------------------------------------------ bool Tokeniser::ParseString () { bool done = false; char lastChar = '\0'; token = ""; while (!done && !atEOF) { curChar = GetNextChar (); if (curChar=='\'') { if (lastChar == '\0') // first time we've encountered a quote lastChar = '\''; else if (lastChar == '\'') // second single quote { token += curChar; lastChar = '\0'; } } else { if (lastChar == '\'') { // end of quoted string indicated by single quote that doesn't // follow another single quote done = true; } else { lastChar = '\0'; if (curChar == '_') token += ' '; else token += curChar; } } } #ifdef __MWERKS__ putBuffer = curChar; #else in.putback (curChar); #endif filecol--; return (done); } //------------------------------------------------------------------------------ // Parse a number (integer or real). Tokeniser::tokentype Tokeniser::ParseNumber () { enum { start = 0x0001, // 0 sign = 0x0002, // 1 digit = 0x0004, // 2 fraction = 0x0008, // 3 expsymbol = 0x0010, // 4 expsign = 0x0020, // 5 exponent = 0x0040, // 6 bad = 0x0080, done = 0x0100 } state; tokentype result = BAD; token = ""; state = start; while (!IsWhiteSpace (curChar) && !(IsPunctuation (curChar) && (curChar != '-')) && (state != bad) && (state != done)) { if (isdigit (curChar)) { switch (state) { case start: case sign: state = digit; break; case expsymbol: case expsign: state = exponent; break; default: break; } } else if ((curChar == '-') || (curChar == '+')) { switch (state) { case start: state = sign; // sign of number break; case digit: state = done; // minus sign is punctuation, such as 6-10 break; case expsymbol: state = expsign; // sign of exponent break; default: state = bad; // syntax error break; } } else if ((curChar == '.') && (state == digit)) state = fraction; else if (((curChar == 'E') || (curChar == 'e')) && (state & (digit | fraction))) state = expsymbol; else state = bad; if ((state != bad) && (state != done)) { token += curChar; curChar = GetNextChar (); } } int isNumber = state & (digit | fraction | exponent | done); if (isNumber) { // We have a number result = NUMBER; if (IsPunctuation (curChar)) { #ifdef __MWERKS__ putBuffer = curChar; #else in.putback (curChar); #endif if (!atEOL) filecol--; } } else { // Not a number, but a string that starts with numbers, such as "00BW0762.1" do { if (curChar == '_') token += ' '; else token += curChar; curChar = GetNextChar (); } while (isalnum (curChar) || (curChar == '_') || (curChar == '.')); if (IsPunctuation (curChar)) { #ifdef __MWERKS__ putBuffer = curChar; #else in.putback (curChar); #endif if (!atEOL) filecol--; } result = STRING; //classify the token } return result; } //------------------------------------------------------------------------------ bool Tokeniser::ParseToken () { token = ""; while ((curChar != '\0') && !IsWhiteSpace(curChar) && !(IsPunctuation (curChar) && (curChar != '-'))) { if (curChar == '_') token += ' '; else token += curChar; curChar = GetNextChar (); } if (!atEOL) { #ifdef __MWERKS__ putBuffer = curChar; #else in.putback (curChar); #endif filecol--; } return true; } //------------------------------------------------------------------------------ // Parse a NEXUS-style comment bool Tokeniser::ParseComment () { bool echo = false; comment = ""; curChar = GetNextChar (); echo = (curChar == '!'); if (echo) curChar = GetNextChar (); while ((curChar != '\0') && (curChar != ']')) { comment += curChar; curChar = GetNextChar(); } if (echo) #if defined __BORLANDC__ && (__BORLANDC__ < 0x0550) cout << comment; #else std::cout << comment; #endif return true; } //------------------------------------------------------------------------------ bool Tokeniser::IsPHYLIPEndOfToken (char ch) { char end[5]; end[0] = ':'; end[1] = ','; end[2] = ')'; end[3] = '\n'; end[4] = '\r'; return (bool)(strchr (end, ch) != NULL); } //------------------------------------------------------------------------------ // PHYLIP will take all sorts of rubbish in the taxon name, so just grab a string Tokeniser::tokentype Tokeniser::GetNextPHYLIPToken () { tokentype TokenType = BAD; token = ""; do { curChar = in.get (); if (curChar == '\n') { if ((int)in.peek() == 10 ) curChar = in.get(); fileline++; filecol = 1L; } else if (curChar == '\r') { fileline++; filecol = 1L; } else filecol++; } while ( in.good () && (( curChar == '\n') || (curChar == '\r') || (curChar == ' ') || (curChar == '\t'))); if (curChar == '(') { TokenType = LPAR; } else { if (curChar == '\'') { ParseString (); } else { token += curChar; curChar = in.get(); while ( ( (curChar) && (curChar != ',') && (curChar != ')') && (curChar != '\n') && (curChar != '\r') && (curChar != ':'))) { token += curChar; curChar = in.get(); filecol++; } in.putback (curChar); } TokenType = STRING; } return TokenType; } /* //------------------------------------------------------------------------------ char Tokeniser::PeekNextChar () { int ch; ch = in.peek(); int failed = in.bad(); if( failed ) throw XTokeniser ( "Unknown error reading data file (check to make sure file exists)" ); if( ch == 13 || ch == 10 ) { atEOL = true; } else if( ch == EOF ) { atEOF = true; } else { atEOL = false; } if (atEOF ) return '\0'; else if (atEOL ) return '\n'; else return (char)ch; } */ tv-0.5/install-sh0000755000076400007640000003160010566570023010750 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2006-10-14.15 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" posix_glob= posix_mkdir= # Desired mode of installed file. mode=0755 chmodcmd=$chmodprog chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) mode=$2 shift shift case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac done if test $# -ne 0 && test -z "$dir_arg$dstarg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix=/ ;; -*) prefix=./ ;; *) prefix= ;; esac case $posix_glob in '') if (set -f) 2>/dev/null; then posix_glob=true else posix_glob=false fi ;; esac oIFS=$IFS IFS=/ $posix_glob && set -f set fnord $dstdir shift $posix_glob && set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dst"; then $doit $rmcmd -f "$dst" 2>/dev/null \ || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \ && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\ || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } } || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: tv-0.5/bitmaps/0000777000076400007640000000000011432555766010501 500000000000000tv-0.5/bitmaps/zoomin.xpm0000775000076400007640000000145307721376343012464 00000000000000/* XPM */ static char *zoomin_xpm[]={ "24 24 6 1", ". c None", "a c #000000", "d c #939393", "b c #a1a1a1", "# c #aeaeae", "c c #ffffff", "........................", "........................", "........................", "........................", ".......#aaaabb#.........", ".....#aaccccaab#........", ".....accccccccab#.......", "....#acccaacccabb#......", "....accccaaccccab#......", "....accaaaaaaccab#......", "....accaaaaaaccab#......", "....accccaaccccab#......", "....#acccaacccad#.......", ".....accccccccad#.......", ".....#aaccccaaad#.......", ".......#aaaa.aaab#......", "..............aaab#.....", "...............aaab.....", "................aaa.....", ".................aa.....", "........................", "........................", "........................", "........................"}; tv-0.5/bitmaps/copy.xpm0000775000076400007640000000213107640307406012107 00000000000000/* XPM */ static char * copy_xpm[] = { "24 24 26 1", " c None", ". c #000000", "+ c #B4B4B4", "@ c #F8F8F8", "# c #F6F6F6", "$ c #C3C3C3", "% c #E9E9E9", "& c #989898", "* c #828282", "= c #8A8A8A", "- c #E8E8E8", "; c #636363", "> c #5A5A5A", ", c #6B6B6B", "' c #B3B3B3", ") c #FFFFFF", "! c #D6D6D6", "~ c #818181", "{ c #A7A7A7", "] c #8F8F8F", "^ c #C6C6C6", "/ c #808080", "( c #E7E7E7", "_ c #6D6D6D", ": c #767676", "< c #F5F5F5", " ", " ............. ", " .+@@@@@@@@@#$. ", " .@%%%%%%%%%%%. ", " .@&**=%+*%*+%. ", " .@%%%%%%%%---. ", " .@;>%,*+-............ ", " .@%%%%%%.'))))))))))!. ", " .@&**%*~.)))))))))))). ", " .@%%%%%-.){]]&)^])]^). ", " .@;>>%,/.)))))))))))). ", " .@%%%%%(.)_;):]^)^])). ", " .@&**%*~.)))))))))))). ", " .<%%%%%-.){]])]]^)&]). ", " .$%%%%%-.)))))))))))). ", " ........)_;;):]^)^]). ", " .)))))))))))). ", " .){]])]]^)&]). ", " .)))))))))))). ", " .!))))))))))!. ", " .............. ", " ", " ", " "}; tv-0.5/bitmaps/mac/0000777000076400007640000000000011432555766011241 500000000000000tv-0.5/bitmaps/mac/zoomin.xpm0000775000076400007640000000072107721157251013214 00000000000000/* XPM */ static const char *zoomin_xpm[] = { "16 16 6 1", " c Gray0", ". c #939393", "X c Gray63", "o c #aeaeae", "O c None", "+ c Gray100", "OOOo XXoOOOOO", "Oo ++++ XoOOOO", "O ++++++++ XoOOO", "o +++ +++ XXoOO", " ++++ ++++ XoOO", " ++ ++ XoOO", " ++ ++ XoOO", " ++++ ++++ XoOO", "o +++ +++ .oOOO", "O ++++++++ .oOOO", "Oo ++++ .oOOO", "OOOo O XoOO", "OOOOOOOOOO XoO", "OOOOOOOOOOO XO", "OOOOOOOOOOOO O", "OOOOOOOOOOOOO O" }; tv-0.5/bitmaps/mac/copy.xpm0000775000076400007640000000074310217524177012656 00000000000000/* XPM */ static char * copy_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 4 1", " c None", "a c Black", "b c #000080", "d c #F8FCF8", /* pixels */ " ", " aaaaaa ", " addddaa ", " addddada ", " adaadabbbbbb ", " adddddbddddbb ", " adaaaabddddbdb ", " adddddbdaadbbbb", " adaaaabdddddddb", " adddddbdaaaaadb", " aaaaaabdddddddb", " bdaaaaadb", " bdddddddb", " bbbbbbbbb", " ", " " };tv-0.5/bitmaps/mac/print_preview.xpm0000775000076400007640000000133107417272221014571 00000000000000/* XPM */ static char * print_preview_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 6 1", " c None", "a c Black", "b c #FFFFFF", "d c #C0C0C0", "e c #808080", "f c #00FFFF", /* pixels */ "aaaaaaaaa ", "abbbbbbbaa ", "abbbbbbbada ", "abbbbbbbaaaa ", "abbbbbbbbbba ", "abbbbbbbaaaa ", "abbbbbbaeddea ", "abbbbbaeffdeba ", "abbbbbadfddeda ", "abbbbbaddddeda ", "abbbbbaeddfeba ", "abbbbbbaeddeab ", "abbbbbbbaaaaaaa ", "abbbbbbbbbba aaa", "aaaaaaaaaaaa aa", " " };tv-0.5/bitmaps/mac/paste.xpm0000775000076400007640000000102010217524177013005 00000000000000/* XPM */ static char *paste_xpm[] = { /* width height ncolors chars_per_pixel */ "16 16 6 1", /* colors */ " c none", "B c #008080", "C c #C0C0C0", "D c #808080", "E c #FFFF00", "F c Black", /* pixels */ " ", " FFFF ", " FFFFFEEFFFFF ", "FDDDFEFFEFDDDF ", "FDDFCCCCCCFDDF ", "FDDFFFFFFFFDDF ", "FDDDDDDDDDDDDF ", "FDDDDDBBBBBBBF ", "FDDDDDB BB ", "FDDDDDB B B ", "FDDDDDB BBB BBB ", "FDDDDDB B ", "FDDDDDB BBBBB B ", " FFFFFB B ", " BBBBBBBBB ", " " }; tv-0.5/bitmaps/mac/print.xpm0000775000076400007640000000126507417272220013035 00000000000000/* XPM */ static char * print_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 6 1", " c None", "a c Black", "b c #FFFFFF", "d c #C0C0C0", "e c #808000", "f c #FFFF00", /* pixels */ " ", " aaaaaaaaa ", " abbbbbbbba ", " abaaaaaba ", " abbbbbbbba ", " abaaaaabaaaa ", " abbbbbbbbadada", " aaaaaaaaaadadaa", "addddddddddadada", "aaaaaaaaaaaaadda", "addddddeeeddada ", "addddddfffddaaa ", "aaaaaaaaaaaaada ", " adddddddddada ", " aaaaaaaaaaa " };tv-0.5/bitmaps/mac/phylogram.xpm0000775000076400007640000000117207417272220013700 00000000000000/* XPM */ static char * phylogram_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 2 1", " c None", "a c Black", /* pixels */ " ", " ", " aaaaaaa ", " a ", " aaa ", " a a ", " a aaa ", " a ", " a ", " a ", " a aaaaaa ", " a a ", " aaaaaa ", " a ", " aaaaaaa ", " " };tv-0.5/bitmaps/mac/internal.xpm0000775000076400007640000000140010021734542013477 00000000000000/* XPM */ static char *internal_xpm[]={ "24 24 3 1", ". c None", "# c #000000", "a c #808080", "........................", "........................", "........................", "........................", "........................", "......##########........", "......#.................", "......#.................", "......#.a#a.#...........", "......#.#.#.#...........", "....###.#.#.##a.a#......", "......#.###.#.#.#.......", "......#.#.#.##a.a#......", "......#.................", "......#.................", "......#.................", "......##########........", "........................", "........................", "........................", "........................", "........................", "........................", "........................"}; tv-0.5/bitmaps/mac/doc.icns0000775000076400007640000013521410041016001012554 00000000000000icnsICN# /# @p *PAD(D" X  P il32 ڤ ŷ8߀ 7߁ ʱ6 й6 Կ6Ě7ʤpr3ҹ  º+*-0245667899 : 9987777 ڤ ŷ8߀ 7߁ ʱ6 й6 Կ6Ě7ʤpr3ҹ  º+*۽-02ο45667899 : 9987777 ڤŷ8߀ 7߁ ʱ6 й6 Կ6Ě7ʤpr3ҹ  º+GTztGǛ*9"684Q-r@>% 0<&0}O:qZ4Z\542ΠHJ=3&Bg4ײK;=ם$986628;7݊+<`8QD<29gfz9 ˺: 9987777l8mkloooonnmmlkiff5222221 /;ACEFGHHIJJKKKJJIIIIMccccccccccccccccccccW$$$$$$$$$$$$$$$$$### ih32ہ ⊿σoŽu?nŻs?lµw?kȼw?k¬q?ldzv?l˸v?mͻq?mпv?n¥u?oǭvtv|j?o ͺF?oɽ?pý?qĝ?r߾Φ?sծ?sٴ?$tܹ?u˽߻?v̾ҿ?vͿ?w?w?w?v?v ?u ?t ?t ?s ?s ?s ɿ?s?s?s?s?t?t?u?u?u?u?t????ہ ⊿σoŽu?nŻs?lµw?kȼw?k¬q?ldzv?l˸v?mͻq?mпv?n¥u?oǭvtv|j?o ͺF?oɽ?pý?qμͻĝ?rӴ߀پͼӵΦ?sмծ?sٴ?$tտֿܹ?u˼߿۾߻?v̾?v¾;¿?wƾս߿?wʾ?w̾ހ?w˿?v ˿?u Լ?t ?t ׼?s ?s ?s ɿ?s?s?s?s?t?t?u?u?u?u?t????ہ ⊿σoŽu?nŻs?lµw?kȼw?k¬q?ldzv?l˸v?mͻq?mпv?n¥u?oǭvtv|j?o ͺF?pɽ?pý?q:VSgSMĝ?rkD;ʀ 9V=fFΦ?s}<;C|<#R0%Abծ?s3C@;?(9! 5<rٴ?tդ;RG,5ݷ71er;7%ܹ?u˫^MK:ma61H7?+{߻?v̼|d?wƠ9C*;X!<2|?wʫ7@P`aX7(?w̡2HIIIIIIIIIIIIIHHHHHHHHHHHHHHHHD. ich#Hit32O߂݀ ր~߂ڀ¿aއހہÿ—ހہ¿݀ހہ¾hك߀ۀրg֋߀ۀրgՌ߀ۀր¾ȼgԍ߀ہ»ʻfԎ߀ۀÿʻfӏۀʻfӐրüʺeӑހ ƿʺeՒހۀ¹ʺeՓހۀüʺdՔ߀ ƿʺdՕ߀ ʺd֖߀ۀºʺd֗߀ۀ ûʺd֗߀ۀ üʺd֘żʺeǾʺeʺe؂ʺe؄øʺfؔ!ùvnnʻfڑ$Ļ{slifddegimptʻfڕ$Ƽxsnljjklnqsvzhۚzwts ttvy|~hۂú~|} _ۄž ܉º ܎ƿ @ܐ,݂ ߄ʁߊу ¿ߌ綧݃躮мր  嬨迚 媰ǝ ܀ڀ¿ ıˣ ĠоªЮƙƭϬ־ ۭՀ ʲʬ#۪ӵ܀ Ͷ Ųθл ׼&ހ ҼOѴտ5ÂׯܽĂ@żܺ ɂLȿ״þʂQĽ˭˻ڱ˂L¼ν̂Kþϻʷ۾͂KÿڭƸ΂<¹¸ Ђ@úтIĿž÷ӂJ¸ӂ8½■¸ Ԃ3ľ߾洬Ҽւ<פԤ̽ւ;ѿׂ/؂½»؂.½Żڂ(½;ۂ&½ۂ$½܂¼ ݂½߂߂߂Ԣ̣ƿ߲ҧ亝ٿ þ ¼½  ߂݂݂݂݂܂܂݂݂݂݂݂݂݂߂߂߂݀ ր~߂܀Հ¿aއހہÿ—ހہ¿ހہ¾hك߀ۀրg֋߀ۀրgՌ߀ۀր¾ȼgԍ߀ہ»ʻfԎ߀ۀÿʻfӏۀʻfӐրüʺeӑހ ƿʺeՒހۀ¹ʺeՓހۀüʺdՔ߀ ƿʺdՕ߀ ʺd֖߀ۀºʺd֗߀ۀ ûʺd֗߀ۀ üʺd֘żʺeǾʺe؆ʺe؂ʺe؄øʺfؒ!ùvnnʻfړ$Ļ{slifddegimptʻfږ$Ƽxsnljjklnqsvzhۚzwts ttvy|~hۂú~|} _ۄž ܋º ܎ƿ @ܐ,݂ ߄ʁߊс ¿ߍ泞܃跤¯ր  妛ز 堡ຐ ܀ڀ¿ ݻ 깠س нª⦷ּޤĮ云˻ƭҳλ˱ 廕͜Ԁ ʲ׸ɸ#漻Ƕ؜ٿۀ݀ͶŲǹǯŻл؀ڀŦ%ݳ俾ŵ݁ Ҽ н߀?мѶǸտM̮⻿̽ѳſÂM»ßڬվⷻĂ@żϰŶƼ٭о ɂ3ȿäߪѹ強܂ʂQĽи孶պ١ѽ˂L¼ؿֻ簴ٽ̂Kþؾǣƹ͂Kÿ١Ƚ΂<ɽ圱ͷ Ђ@벩ϹтIĿʸ쵢͸҂Jʶ͹Ԃ8½˺ɻ Ԃ3ľʯ䪜¹ւ<śҙؼւ;¹ׂ/؂½Ѿ؂.½ڂ(½ÿۂ&½Ⱥۂ$½܂#¼˼݂½˼߂̾߂ɰ߂ֽƿЦ×݀֩ľƮž܀üɼμþ½   ߂݂݂݂݂܂܂݂݂݂݂݂݂݂߂߂߂݀ ր~߁ ׀Ԁaއހہÿ—ޅހہ¿ހہ¾hك߀ۀրg֋߀ۀրgՌ߀ۀր¾ȼgԍ߀ہ»ʻfԎ߀ۀÿʻfӏۀʻfӐրüʺeӑހ ƿʺeՒހۀ¹ʺeՓހۀüʺdՔ߀ ƿʺdՕ߀ ʺd֖߀ۀºʺd֗߀ۀ ûʺd֗߀ۀ üʺd֘żʺeǾʺeʺe؂ʺe؄øʺfؔ!ùvnnʻfړ$Ļ{slifddegimptʻfږ$Ƽxsnljjklnqsvzhzwts ttvy|~hۂú~|} _ۄž ܉º ܌ƿ @ݐ,݂ ߄ʁߊŻՃу ¿ߌc#[ăm-5ր  +Eygu *`}) ܀ڀ¿ mDx}iH cYxzR ~~|ª#?IQ^FC"7;%"mIE,Zƭ)/3-.0m-53# fe9 ʲ3>>=:3$ #U '7>=8HdghO1π Ͷ0;?>=?7 #*.;?=1&003'лu%2:==>??7m%3=?;*BY (5;<7+݁ Ҽ ػ5?B=>?3 "7><3)!0=<>;3տMʊ(CMJ>;=>8'sO*9=:2+ 01?>?:.ÂMb/IRQA<>=33;<84L (7>>=6*lĂ@ļ^/M][H<<:) j ':;=9*| 3:>><1(  ɂLȿo0TeaI?<32=?@4Sk ):==>63"{ʂ6Ľ !MkhS@>3 @0;56@0<=?@>= ̂Kþ%#O_[F>=0% %:>?BDB$͂Kÿ5CUZJ4A{O7?4 6>>COC1k΂;7!uX ;=JXK3 U҂JCON==3!d7=LUO1fӂ8½0?QI?7&]k3?ISK% Ԃ3ľ6;A@ւ;A 9$ ڂ(½9@?71-07=<9.0ۂ&½ ;?=>?;>?:3ۂ$½>=<=>>=:--܂#¼!89=>?=7'p݂½"66<>>7' n߂p'/5=?9*^߂W'09>=2" ߂, &0;>>5#&4<==8/ k߇ƿd,8gVĻ +5:=?7?x~8‚$/6<=;4;hN@1:>=:?21JEư7CF>?>6n+IY\SKH:* ſl-Oioi^G2 ý &S{uO2F V}~RH¼calZs½  ߂݂݂݂݂܂܂݂݂݂݂݂݂݂߂߂t8mk@^By s NOO #L &L (L (L (J (J (J (J (J (J )J )J )J )J )J )J )J )L )L )L )N )N )D ) ) )- ) ) )  )  )  ) )! )$  )%  )&  )&  )&  )&  )&  )'  )'  *'  *'  *(  *(  *(  *(  *(  *(  *(  *(  *(  *(  *(  *(  *(  *)  *)  *)  *)  *)  *)  *)  *)  *)  *)  *)  *)  *)  *)  *)  *)  *)  *)  **  **  )*  )*  )*  )*  )*  )*  )*  )*  )*  )*  )*  )*  )*  )*  )*  )*  )*  )*  )*  ))  ))  ))  ))  ))  ))  ))  *)  *)  *)  *)  *)  *)  *)  *)  )?R`iopppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppoi_Q>)  (C9 BP6!'5JB)E9&'4>6 +C=cU7&PYN5 )ewB-`2 l8mkt ~^q^c~,rx% @ X w" HEc#!5$\S-0!C:kU3mE9p (\|v(!Jh'r*A=Y\) D.HV(m@() J(l._9(6q` (AJB" ih32 Ks]&#Y3 PȦ?lݺ. )ᶦZB軡30m{y7 {߿Xֺ wˢ/ ھ Һi޴/վ BÃӸiHҷ] Jڗ,Уʦ A L՜:ۻX %] _Ш a* "&iݼ_X[h@ԯ[4z ( 1A `Q%ۻ ߵ? Ѿ Ҍ %؅8=)殮g xҿ ʾ#݀| 6<(ٗ`ܤ9H8 ;Kx7 - -<=1 074( &4?=5) !2<9+ " +;=;2*  (DLB<=:+' !6<6/ ,/==;. !.HTI><5& %.9;5"   #6=>7) "4T_N>;* * $7<<, 0;==4&)QfXA:& ))@ 2=?4  &8==<1  F`WF<?<' 2OXI9WxxA?4 ( -<>EA3 &ETK6UiF;5  #9>GL4  >PI737:-  ,!:@KL5 $6LI=<6 %2>MP8 3HJ>5  ,=NN5" 1EE;*' ('(;FE-*DD:-66+8.:C4KejQ7:<, )==6226;:4+=<=<7%  3:;>><3  -5;=<1 ,1;=4 *5=:) / *8<9,0 /:==>G&* )7;=8Yr8)-  "1:=:7MoD%  1;?<=48- , ;KF=?9+  $DUTLG6" 'MhmbD$%V}zM"-UjA *h8mk SxY}Y<>2$JWK$x/X O - o `BT 5aG  fH1 y 4Z[D @J 0e% #AyE ; A $?_J" h'  7L{U* R6*@eZ.1@ :]z3E$ 5RA K(.H+ I**D|b%G*$?puapC' ]"  "@/ #C &H)NR,^`31@ $k!3P +a 5qZ :i* 9QR1F[vsO.$6AD?. ich#H?????????|?????????|it32Bֽ 㺡𯑜ݽ حߤ ưܠѲۡ⯋ټݸțάҦ幦̶Ιϰ֢ոʵɸкښş׽̠ٙȽܖ պۘľءƧˣûۖ ȧ ɼΒÛϯ܇ ɼƕ˻Ěڸdžûʛ… ¸ʓ̼䨥 ؿۄ ŷԒļ ǻ ÷Ǻ=Ƹ B ˾ԑƯހ ¿Ą Аɵ Z ȸȰ Ͽ Ž™Ͼ ǹԳ97 'ȳȔ տpμ ԱSҾtʫʋř Ӷҽʢ, ġP ɭ٪m֯Z-Ѽ ݹ ۺɳɇʝҰhлٮ_۾yDͳҤըy ϰ íÃʡ׹xęڳ|Ƶс̩ȟˡHìв ͤZɝѯ3nʰ̙2ʥٶ0֬V㿑"ӮƜٽ֯xԔ͞ո (wɚ յ&/ʜ(׭p;ǪT͙ܳv",ϮǤҾٮ̭ йӫ^ͺXھN÷ğڮĻԯ~ȼ`ŒԩsϹμǢWNֻV妕‘TǨ 歘 ڵCժևǠʟ[޽ڄ⪔ Ч98(ϱ Ϊu6Wо˫`Ѣ 2ɬ60UҫT.%ҳ8,Rش*v⽘5 ϛ'`ڻW ʦ$նS"ɟ ʰ^  śmħ$-ĩ­°eijyȴs ϽŜZӭL׶u İ˳ ֱ ɨ޿ Fպ ± Kؼ һ";!Qķ ſ 4ĸmͼɸƴ̬(׻n J ״ + ٽ=մ ǟT Ӱ׵_ܱQ `Ž Oyzb ޶婒߽ խ~٤ ֢éߡݪʲܸȓӿϚԮɖߜաƮĵԺڛ®՚™ưҙǖηЖ ê٘Ϟ~ ƜԀıҖŠ̺ʒǩևôĕźϰ†ƽȺ˕̯ƅـ܁ Ƽú۝ɰτ ܁Ғûͽڀڂ ǿ¹; ?݀ق þʑ Ձ ڃ ƽːƿû V܀ڂ Ǻ ڀڀ Źŷ ݂ô׀66ɾ &Ļƶżoŷ ځ PĽrċĴ ځ Ⱦɽʷ+ȾP߁ âiĽX.ǻƭ~ ݀ ĭõ ۀĻـɽežλ\فɭp@ʿĤs ܁ ɽ|ǽƒǙŬrv~Ű́ ̣ށȵ˰6FβɼVŖ܀ɽiۀ ­Ǻ0Ÿǽ0ɻVǭ.}~ï+w ӓ݁ ʼ)ŵ|̹ (rǵèz&.Ƹ& ݀ οm$8Rʏ¥n"+x¤î~ʾ ҩ è~ۀ ƽ|ä|[ǿVîMŽͽ~ǽĥwż]ÑξsĿ̶ѷS K߀ üTݥ÷NŸএĥ@Ś҇V̩ӄ৊ǹ88'ëٿɼu6TĴͽ\3Ļ͸2ɸ6$TۀR.#̻7Pـ {p߀!˰(3ɻ'ZîU|܀ º$zQ"|ýځžZ ށ܄ ú݀܀ـ hÿ#,ŽĻĻ aف ſvo ڀ ¾ɰZЀȼH£q̲˼ ڀځ ȣ ـۀ ˼ұ Bȩ ε L܃ʬ!«"ϻ!Mû ½ 3ľ g݀Ľ}ſſ&ƾjI+ů<;~ʱT{DZ]ΨO \ڻ Lt~|q`Үtq y2 &ĘS ;? {[ (MCA5. <ġN@Pa]I2W3nwoynj]0YҞ Apzyul`i Fw|z}}|x`, +, Rz{q7 z)Fo{{~~uMO /VvxNΎx4VntwxjC  ?[jnrqfV: ( Z,g%%%L#5"#&wވ  !,4<>CEFQZPB9$)-53( b "Q`bjWN8  .u%&(2(-*#*992,/[ !&(-1."XbEtv|~Bqe %+(,538;/'15+& aK%047<=6+*  0}7k}zyn/fj)16<@=;;9840.$i  +/7; 90. ;Xp~~ythP(m'06><=;:84)$ !-18==<=:60 'G*AZeijkkj^J- Jq(/6:>>==>< :5-#Uq '/3:>=>=97/  C7  +;@ADHLOG8# 9 (/59?>=>7-" V)38><8/) ` #),.--/1.# M!).38@>??> B;5. $4 #,5:>>??<7($ h !).172/,*%  g K$-/07?=> A>87, G'/5:==?>:6## %j'-3:>;70* U ,$0338@<<;=>=??<<7- }(06<><>=73$&[R 058=<=A@>>91&j T /57;B?><>= ;>?7' fl*28>?<<:4/))"04,  08:96:?8696/' s "+$+B6BGC?>??>>;=@?;3+%  +#/3<=; 6.*#$ W}  #-8@?==A>=970%kU +5CAJKHB>;;>=>>=;7/( h  $/5:< ;5//0 CV%.9?>==@>;94/% U 7>HLNPKC>;:=<==<;5/) P)36;=<=94/22 K#(19> <>>;73+"/D!1=JNQROHA::;>>?<84.B#,59;=<;8312$ 0(o &*4:=>?<><;60( ZE4 &5CGMRWTKB;= ><;7- n )18::=<:662-S/+/7==>?=?<84.( J*K*7>HOVYWTFC>;==<:1+ M7  /598;<<966.$V %048=> =@:50,'R8 '4BMU[_`RLC==<<;83   (3:<8><>;72%;M .37;<>>==?83/+& &Q' ,@NV]aaXSLC>;;<8:+Pd+6<=7?>?<6+ M  74;>==??72-,' T;D )9GWcge^VJ;BK8<5,&s)/8<<;A:7@1UW"-2;><<>45:("/R #=CJ_lje[QG>8=<7-" s %.6>?>?L:?A$ U (26<<==<=<;9%.3, US (ALfnkccZG@@?>7.$6 (,39@??><79*9& $-49=>=<=>=;>6-2 I6;E /?E_jikcTKCA?>:/#+-1 V8()047;?><;=8:$ 2Hu,278?>=>?><<@F6)33O(")LY_le\SMFA@?;41Z] RW-<>>?=946;7+8- %2:<:?>>?@?><>6. 0H /;I_hfaVRH@>??<<92,05'I; ,7>@;??>?@>90%R R, 4ET]g]\SG?;Ntnggbn^.5A><:6+(*,Tn )3:=>=@?@BCCB@-( @+M*4>Oc`[RF>=?3:Zwry}~jF59B?<6.$T!.7=;>??@CFGFBA' @)M3<9L\V\]PJ-46Gg~rH39BA@22* QP %-4;>?>?9:-(# HZ+39<>>=@CLOOF<5#U&)1$:;EQYWRYE7,2G[glhP84<@942(9$Z '29;;=?CJORMD5,&R$61 *GFM[SWQF3*/;9?CJTKQK:- T"*> 05>SQTZQB6122/0.3>@725*T 7??@=?FLNSHH9.0RR 0AGQUUQH?5.+14=A?711& A2 "3B<>@JQRONK?*NS5 .=AKRVRH=669==<<80$W$'70?7?<91)# 'g/68>@ELV]PFA-RM ABCLVX>=<=>90)%^  '6:7?INZPIME2&SK7>;P]OD?=>:1*' Nm !4==>GRUPLOD)!ST%&?FJXLE?>=6,(h_ #1;=?FNSWKKA$ 3G?!!>@EENIDA<71*GI' #18??CLOLEI7'HB& %5>BGIID?862![#")<;;@HJIE:: D8>)BCFHHD?;:- # Zq "%+91>;9@FIB:.6ID(DDHKIC>;<41% <' 9@,'.;>=<=>CD;//28"#-B?`  @l`H4.6=>4:=>@A4R6D?*D?LSC@9<>:9Jbt]: @\evrX=48>?=<;.;@' 6JK+9AFNGHGE<8FmsZD/ ;^w^D.2?D<57/34&52# :=;951*'2C.A-60.27?C9<=6* F'K,6>E;4?7410332273046:??9;:2% CS *7>;?@>;62/*((338< :984,C$S /9BJ@>=<<;::;79>@>=<984/% C"R+09B<<==??@CD9:??==;971(D D +<;>=<;;<:<>?==:74,# K M !6<><:9:> =;;61)IJ)5>;;>@ABD?>><;=<9.( T:)=??>=<72-  )!'@ -887:>==>?>=<71,1> 48239=;>>=>=73/9 " )5625=:<> =73/8L&1.,58;<>?>:40 /T -0*-58=>>=:61# bL! #-()26:>>?<94'! OlP)3-4:>=>=:6)&XR1*),17<==??;4-  ]=&')06:<==>;51({R"%*17=<<><;82+#IT&-39<;>>==:62) v (/59<<>=??<:5NN*5 U $)18:< ?@>>9VpsMh A ").49< >@=>:7_sL; 9 *.389<<>?=;:0Af}{f! O T#.197:;=@/1@_z~{L( = "/13+49<;>647E]s{{~T,tG "(.48<>==<:89609QlwsjS$")-<88<@==<8<>;0*4L`\WQ: !A 0986=90+2:K=3, R#278=CB><;>?@>:4+'.*Z -%27?EHF@><>??@=5-*(AQ)6@GMPID?96>EF>9?4+ ?U*9FMOUUHE@=;=>?=:4-;M%1BNIKVQOIEBA?@@:30! EC &2>IVXZYVROKIHF;33( h$. !:EKYbcb`]YURNB87- X@0 76=Tehkljfa^ZK?<0 'D  4C\cktvrlj`QD?/ Z7J $;DSex}ygVF=, !P *4E_xjWF=*XG8&7KarzvdO?) JQ*)Jiy~r^E"L31FYccl[C'/B KK8/>S_ZB+2R @RJt8mk@;npR%-h̼\)3A9gއDХ>FyV(h0=!57AE5'h57̶z!=Yk4"ED<kq  d{vy* AX s( K  ^ n  3I"<)# ZO{ *T 4 w  (9 E/w &6|sL- S  "2K&;* VP -=ty =]6& (  '7E> @1! +) !0?K+S:+ s))8Ej6tzB3$  Q(  !/=I` H;,?6& &4ALX4BMA4$  B3"  *7CM~ ~sF9+ v>/  -:EOknNډJ>0" F9) "/;FOYnBMB5'YxA2# #00!  !,6?HNSWڔNE9+ sMB5'(20"  (2;CJPUYI?2%ߌKA4& $-6?GNTd]K@4' ߃NC7)  (2;ELRjpLB6) QOF:-  $.8BJQcێMC8+ PH=/"   +6@IPVOE:,   ߡRI?2%)4>HOUG1$RKA5(  %0;EMSqF5'{ٙRKB6)  #.9CKRVA, ڒRKB6*  !,6AIPVM% tՊRKB6+ )4>HOTp vRKB6+  '2=FNTr(*_RKA6+  %0:DLSr4߱WQJA6*  "-8BKRk܊+qzUPI?5)   +6AJQV12jTOG>3(  )5?IPaL&߇SME<1&  (3>HOrxRKC9/$  &2=GOU^QJA6,!  %13(  $03'  $02&  $02&  $0=GPfQI>2&  $1=GPylJ?3&  %1=HPKA4'  &2>IPhC7)  &3?IQG:-  '3?JRk?1#  (4AJSE7( )6AKSr=/   *7BLSM6' +8CL`=/   ,9DMU7'  -9EN\0!  !-:ENx+"/;FOD #0P'6CfM -J]H'4ALl. *7CM`. ,9ENh=, !.;FOU9)#/0" )4=FLRVXYu|XTMC6( &09AHNRTWXYYYXVSMD9,  "+4 c #FDFDFD", ", c #787878", "' c #9E9E9E", ") c #5C5C5C", "! c #FEFEFE", "~ c #FAFAFA", "{ c #F2F2F2", "] c #AFAFAF", "^ c #47473F", "/ c #0A0A09", "( c #4B4B43", "_ c #BBBBBB", ": c #F8F8F8", "< c #7C7C7C", "[ c #484848", "} c #34342E", "| c #9D9D8D", "1 c #CFCFB9", "2 c #C4C4AF", "3 c #8D8D7F", "4 c #353530", "5 c #9F9F9F", "6 c #E2E2E2", "7 c #CFCFCF", "8 c #46463F", "9 c #9C9C8C", "0 c #E2E2D0", "a c #EDEDE7", "b c #C0C0AC", "c c #B2B29F", "d c #828274", "e c #4C4C44", "f c #EDEDED", "g c #C8C8C8", "h c #747474", "i c #090908", "j c #D5D5BF", "k c #FBFBFA", "l c #C3C3AE", "m c #B5B5A2", "n c #A6A695", "o c #9C9C8F", "p c #080807", "q c #E4E4E4", "r c #E1E1E1", "s c #9D9D9D", "t c #090909", "u c #CACAB5", "v c #DDDDD0", "w c #B7B7A4", "x c #AAAA98", "y c #9B9B8B", "z c #AEAEA3", "A c #C2C2C2", "B c #87847C", "C c #EAE8E3", "D c #848079", "E c #45443F", "F c #474740", "G c #929283", "H c #BABAA7", "I c #ADAD9B", "J c #9F9F8E", "K c #ACACA1", "L c #CFCFCB", "M c #4C4C45", "N c #807D74", "O c #AAA9A5", "P c #BAB5AB", "Q c #F3F3F3", "R c #DBDBDB", "S c #C9C9C9", "T c #838383", "U c #34342F", "V c #878779", "W c #A0A090", "X c #AEAEA2", "Y c #C3C3BE", "Z c #010101", "` c #C3C1BD", " . c #8B8B89", ".. c #E6E5E1", "+. c #F4F4F3", "@. c #E6E6E5", "#. c #D1D1D1", "$. c #C4C4C2", "%. c #8B8B8A", "&. c #414141", "*. c #A09F9D", "=. c #404040", "-. c #B5B5B4", ";. c #DFDED9", ">. c #A4A3A1", ",. c #6C6B6A", "'. c #F5F4F3", "). c #BDBDBD", "!. c #A7A7A7", "~. c #979797", "{. c #B0B0AF", "]. c #9B9B9B", "^. c #B6B6B6", "/. c #8C8C8C", "(. c #B3B3B3", "_. c #171717", ":. c #AEACA7", "<. c #6A6A69", "[. c #999896", "}. c #918F87", "|. c #999895", "1. c #6B6B6A", "2. c #E6E4E1", "3. c #F0EEEC", "4. c #F6F5F4", "5. c #EAE9E9", "6. c #E9E9E8", "7. c #EBEAE9", "8. c #E6E5E4", "9. c #D4D4D4", "0. c #CACAC9", "a. c #979696", "b. c #9C9C9C", "c. c #545454", "d. c #50504F", "e. c #858482", "f. c #9C9B99", "g. c #6B6A68", "h. c #585858", "i. c #5E5C57", "j. c #524F4B", "k. c #494744", "l. c #4A4945", "m. c #4A4845", "n. c #484642", "o. c #43413D", "p. c #3D3B38", "q. c #393834", "r. c #393836", "s. c #757575", "t. c #4C4C4C", "u. c #7B7A77", "v. c #797771", "w. c #949391", "x. c #989694", "y. c #868480", "z. c #6E6C66", "A. c #706D67", "B. c #5C5955", "C. c #67645F", "D. c #5B5954", "E. c #585651", "F. c #5C5A55", "G. c #56534F", "H. c #4C4945", "I. c #4A4744", "J. c #484743", "K. c #4B4A48", "L. c #848484", "M. c #7D7D7D", "N. c #696861", "O. c #77756F", "P. c #7E7B77", "Q. c #979690", "R. c #96938D", "S. c #807E77", "T. c #7D7A74", "U. c #787770", "V. c #716F6A", "W. c #6D6B66", "X. c #565450", "Y. c #5A5954", "Z. c #585752", "`. c #605F5A", " + c #676660", ".+ c #72716B", "++ c #76746F", "@+ c #6A6963", "#+ c #8B8880", "$+ c #B2AFA8", "%+ c #B6B3AD", "&+ c #BFBDB6", "*+ c #BDBBB4", "=+ c #B0AEA6", "-+ c #ABA8A2", ";+ c #9C9991", " ", " . . . . . . . . . . . . ", " . + @ @ @ @ @ @ @ @ @ @ + . ", " . @ @ @ @ @ @ @ @ @ @ @ # . ", " . @ $ % & @ * @ @ @ @ @ # . ", " . @ @ @ @ @ @ @ @ @ @ @ # . ", " . @ = - ; > , ' * + ) @ # . ", " . ! ~ { ] ^ / / ( _ @ @ # . ", " . : < [ } | 1 2 3 4 5 @ # . ", " . 6 7 8 9 0 a b c d e # f . ", " . . g h i j k l m n o p q r . . ", " . @ . % s t u v w x y z / g A . B . ", " . @ C D E . F G H I J K L M . N B O P . ", " . @ @ Q { R S T U V W X Y Z Z @ @ @ @ @ C . ", " . ` ...+.@.#.$.%.( / / &.*.=.Z -.C 5 ;.P . ", " . >.,.'.).7 !.& ~.{.].^./.(.' =._.:.<.[.}.. ", " . |.1.2.3.4.+.f 5.6.7.8.9.0.a.b.c.Z d.e.}.. ", " . f.g.h.i.j.k.l.m.m.m.n.o.p.q.r.s.t.t.u.v.. ", " . w.x.y.z.A.B.C.D.E.D.F.G.H.I.J.K.L.M.N.O.. ", " . P.Q.R.}.S.T.U.O.V.O.V.W.X.Y.Z.`. +.+++@+. ", " . . . . . . . . . . . . . . . . . . . . ", " . #+$+%+&+&+&+&+&+*+=+$+-+=+;+;+;+N N . ", " . . . . . . . . . . . . . . . . . . ", " "}; tv-0.5/bitmaps/paste.xpm0000775000076400007640000000644507640601440012260 00000000000000/* XPM */ static char * paste_xpm[] = { "24 24 129 2", " c None", ". c #000000", "+ c #B9B9B9", "@ c #FEFEFE", "# c #F9F9F9", "$ c #757575", "% c #F5F5E8", "& c #565651", "* c #FFFFFF", "= c #A0A0A0", "- c #939393", "; c #7C7C7C", "> c #C5C5BB", ", c #CFC6A0", "' c #D7CEAA", ") c #ADA689", "! c #4B483C", "~ c #6D6D6D", "{ c #6C6C6C", "] c #A9A9A9", "^ c #3D3A30", "/ c #979178", "( c #C1B898", "_ c #8A793D", ": c #C3BB9A", "< c #AFA78A", "[ c #444236", "} c #FAFAFA", "| c #EFEFEF", "1 c #C7C7C7", "2 c #D8D8D8", "3 c #D2D2D2", "4 c #7B7B7B", "5 c #302E26", "6 c #89846C", "7 c #C4BC9A", "8 c #847235", "9 c #C5C5C5", "0 c #A7A7A7", "a c #ADADAD", "b c #9A9A9A", "c c #9B9B9B", "d c #868686", "e c #424242", "f c #847033", "g c #C9C09E", "h c #464337", "i c #35332A", "j c #2D2B23", "k c #C6BE9D", "l c #826F33", "m c #7F7964", "n c #4C493C", "o c #171612", "p c #13120F", "q c #3E3B31", "r c #282210", "s c #474438", "t c #B3B3B3", "u c #D6D6D6", "v c #B7AE90", "w c #B1AA8C", "x c #37352B", "y c #151410", "z c #C9C9C9", "A c #E5E5E5", "B c #C6C6C6", "C c #B9B293", "D c #11100D", "E c #313131", "F c #B3D2BA", "G c #7BA676", "H c #618159", "I c #434035", "J c #8D8D8D", "K c #B4B4B4", "L c #2E2E2E", "M c #AFD2B6", "N c #79A674", "O c #62825A", "P c #888888", "Q c #BABABA", "R c #AAA48B", "S c #A5A086", "T c #A19A7F", "U c #312F26", "V c #AED2B6", "W c #78A672", "X c #608158", "Y c #DEDEDE", "Z c #252525", "` c #1D1D1D", " . c #3E3E3E", ".. c #AFD2B7", "+. c #545454", "@. c #383838", "#. c #AFA88C", "$. c #050403", "%. c #3D3D3D", "&. c #688C60", "*. c #6B9061", "=. c #83A07A", "-. c #464646", ";. c #12110E", ">. c #ABABAB", ",. c #484848", "'. c #B1D2B8", "). c #ACD2B4", "!. c #618458", "~. c #618057", "{. c #2B2B2B", "]. c #A9A489", "^. c #A39E85", "/. c #B0D2B7", "(. c #57734A", "_. c #212121", ":. c #797979", "<. c #EBE7D0", "[. c #282828", "}. c #7AA674", "|. c #222222", "1. c #C0C0C0", "2. c #D2C9A5", "3. c #A29053", "4. c #8E7C3D", "5. c #88793B", "6. c #806C2F", "7. c #78652B", "8. c #251F0C", " . . . . ", " . . . . . . + @ # $ . . . . . . ", ". % % % % % & * = - ; & > % % % , . ", ". % ' ' ' ) ! * ~ { ] ^ / ( ' ' _ . ", ". % : : < [ } | 1 2 3 4 5 6 < 7 8 . ", ". % ' ' ! 9 0 0 a b c d e ! ) ' f . ", ". % g : 6 h i j j j j j 5 6 < k l . ", ". % ' ' ' / / / / / / / / ( ' ' l . ", ". % g : : : : m n o p p p p ^ q r . . . . ", ". % ' ' ' ' ' s t * * * * * * * * * * * u . ", ". % v w w w w x * * * * * * * * * * * * * . ", ". % ' ' ' ' ' y * 0 z A . . . . . * z B * . ", ". % C w w w w D * * * * E F G H . 1 * * * . ", ". % ' ' ' ' ' I * J K * L M N O . P Q * * . ", ". % R S T T T U * * * * L V W X . c * * * . ", ". % ' ' ' ' ' I * Y Z ` ...W O . +.@.z * . ", ". % #.S T T T $.* * %...F M W &.*.=.-.c * . ", ". % ' ' ' ' ' ;.* + >.,.'.).W !.~.{.d 1 * . ", ". % ].^.T T T U * * * 1 ,./.W (._.:.1 * * . ", ". <.' ' ' ' ' I * 0 z A 1 [.}.|.P B 1.0 * . ", ". 2.3.4.5.6.7.8.* * * * * 1 @.c 1 * * * * . ", " . . . . . . . u * * * * * * * * * * * u . ", " . . . . . . . . . . . . . ", " "}; tv-0.5/bitmaps/print.xpm0000775000076400007640000000666507640307407012312 00000000000000/* XPM */ static char * print_xpm[] = { "24 24 138 2", " c None", ". c #000000", "+ c #BABABA", "@ c #FFFFFF", "# c #F6F6F6", "$ c #8D8D8D", "% c #A6A6A6", "& c #B5B5B5", "* c #DADADA", "= c #838383", "- c #7A7A7A", "; c #797979", "> c #9F9F9F", ", c #5C5C5C", "' c #878787", ") c #7D7D7D", "! c #9A9A9A", "~ c #A7A7A7", "{ c #EDEDED", "] c #E9E9E9", "^ c #949494", "/ c #999999", "( c #E4E4E4", "_ c #A1A1A1", ": c #C2C2C2", "< c #E1E1E1", "[ c #C8C8C8", "} c #CCCCCC", "| c #87847C", "1 c #EAE8E3", "2 c #8D8982", "3 c #53524C", "4 c #807D74", "5 c #AAA9A5", "6 c #BAB5AB", "7 c #F3F3F3", "8 c #C3C1BD", "9 c #8B8B89", "0 c #E6E5E1", "a c #F9F9F8", "b c #FAFAF9", "c c #F9F9F7", "d c #F7F6F5", "e c #F7F7F4", "f c #F6F5F4", "g c #F2F1EE", "h c #F0EFEC", "i c #E5E5E4", "j c #DFDED9", "k c #A4A3A1", "l c #6C6B6A", "m c #F5F4F3", "n c #BEBEBE", "o c #D5D5D5", "p c #B6B6B6", "q c #D3D3D3", "r c #D4D4D3", "s c #B7B7B7", "t c #D4D4D4", "u c #A9A9A9", "v c #CDCDCB", "w c #B5B5B4", "x c #DCDAD3", "y c #6B6B6A", "z c #999896", "A c #918F87", "B c #999895", "C c #E6E4E1", "D c #F0EEEC", "E c #FAFAFA", "F c #FAF9F9", "G c #F9F8F7", "H c #F8F7F6", "I c #F8F8F7", "J c #F4F3F1", "K c #F2F1EF", "L c #565655", "M c #858482", "N c #9C9B99", "O c #6B6A68", "P c #585858", "Q c #5E5C57", "R c #524F4B", "S c #4A4845", "T c #4B4A46", "U c #4B4946", "V c #4A4844", "W c #494743", "X c #484642", "Y c #474541", "Z c #464440", "` c #514F4B", " . c #53514E", ".. c #7B7A77", "+. c #797771", "@. c #949391", "#. c #989694", "$. c #868480", "%. c #6E6C66", "&. c #706D67", "*. c #5C5955", "=. c #67645F", "-. c #5B5954", ";. c #585651", ">. c #5D5B56", ",. c #595652", "'. c #53504C", "). c #575450", "!. c #595752", "~. c #5C5956", "{. c #5B5956", "]. c #61615E", "^. c #696861", "/. c #77756F", "(. c #7E7B77", "_. c #979690", ":. c #96938D", "<. c #807E77", "[. c #7D7A74", "}. c #787770", "|. c #716F6A", "1. c #6E6C67", "2. c #595753", "3. c #63615C", "4. c #686661", "5. c #6F6E68", "6. c #6D6C66", "7. c #72716B", "8. c #76746F", "9. c #6A6963", "0. c #8B8880", "a. c #B2AFA8", "b. c #B6B3AD", "c. c #BFBDB6", "d. c #BDBBB4", "e. c #B0AEA6", "f. c #ABA8A2", "g. c #9C9991", " ", " . . . . . . . . . . . . ", " . + @ @ @ @ @ @ @ @ @ @ + . ", " . @ @ @ @ @ @ @ @ @ @ @ # . ", " . @ $ % & @ * @ @ @ @ @ # . ", " . @ @ @ @ @ @ @ @ @ @ @ # . ", " . @ = - % @ ; > * + , @ # . ", " . @ @ @ @ @ @ @ @ @ @ @ # . ", " . @ ' ) ! > * @ * ~ * @ # . ", " . # # # # # # # # # # # { . ", " . . ] ^ / % ( ^ _ ( % : ( < . . ", " . @ . [ } } } } } } } } } [ : . | . ", " . @ 1 2 3 . . . . . . . . . . 4 | 5 6 . ", " . @ @ 7 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1 . ", " . 8 9 0 a b a c d e b b f g g h i 1 > j 6 . ", " . k l m n o p q p r s t u q & v w x y z A . ", " . B y C D d a E F a G H I I J J J K L M A . ", " . N O P Q R S T U U U V W X Y W Z ` ...+.. ", " . @.#.$.%.&.*.=.-.;.-.>.,.'.).!.~.{.].^./.. ", " . (._.:.A <.[.}./.|./.|.1.2.3.4.5.6.7.8.9.. ", " . . . . . . . . . . . . . . . . . . . . ", " . 0.a.b.c.c.c.c.c.d.e.a.f.e.g.g.g.4 4 . ", " . . . . . . . . . . . . . . . . . . ", " "}; tv-0.5/bitmaps/phylogram.xpm0000775000076400007640000000154107327261044013142 00000000000000/* XPM */ static char * phylogram_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "24 24 2 1 0 0", /* colors */ " s none m none c none", ". s iconColor1 m black c black", /* pixels */ " ", " ", " ", " ", " ", " ...... ", " . ", " . ", " . ", " . ......... ", " . . ", " . . ", " ..... ", " . .. ", " . . ", " ..... ", " . ", " .. ", " ", " ", " ", " ", " ", " "}; tv-0.5/bitmaps/internal.xpm0000775000076400007640000000140007733570624012756 00000000000000/* XPM */ static char *internal_xpm[]={ "24 24 3 1", ". c None", "# c #000000", "a c #808080", "........................", "........................", "........................", "........................", "........................", "......##########........", "......#.................", "......#.................", "......#.a#a.#...........", "......#.#.#.#...........", "....###.#.#.##a.a#......", "......#.###.#.#.#.......", "......#.#.#.##a.a#......", "......#.................", "......#.................", "......#.................", "......##########........", "........................", "........................", "........................", "........................", "........................", "........................", "........................"}; tv-0.5/bitmaps/open.xpm0000775000076400007640000000774407640307406012115 00000000000000/* XPM */ static char * open_xpm[] = { "24 24 173 2", " c None", ". c #000000", "+ c #010100", "@ c #B5B8A5", "# c #E4E7D2", "$ c #878A76", "% c #33342B", "& c #0B0B0B", "* c #E2E5CF", "= c #CFD4AF", "- c #CED3AE", "; c #B2B696", "> c #2D2D25", ", c #23241D", "' c #9D9F90", ") c #C6CAA6", "! c #C4C9A5", "~ c #C6CBA7", "{ c #C7CCA8", "] c #C9CEA9", "^ c #555847", "/ c #1A1B15", "( c #20201A", "_ c #D4D6C2", ": c #BEC2A0", "< c #B3B896", "[ c #B0B595", "} c #B3B797", "| c #B6BB99", "1 c #BBC09E", "2 c #BCC19F", "3 c #81856C", "4 c #3E3F32", "5 c #010101", "6 c #DADDC8", "7 c #AFB494", "8 c #AAAF8F", "9 c #A3A789", "0 c #A6AA8B", "a c #A9AD8E", "b c #A7AB8D", "c c #A4A88A", "d c #A1A588", "e c #AAAD96", "f c #B3B5A5", "g c #B8BBAA", "h c #BABCAB", "i c #C1C3B2", "j c #C7CAB7", "k c #CACDBB", "l c #BABDA8", "m c #0C0C09", "n c #DDDFCB", "o c #969B7E", "p c #9DA286", "q c #95987C", "r c #96997E", "s c #9A9D81", "t c #999D80", "u c #9DA184", "v c #A5AA8B", "w c #A4A98A", "x c #A3A889", "y c #A2A588", "z c #A2A587", "A c #9FA386", "B c #9B9E83", "C c #898D74", "D c #D8DBC9", "E c #84866E", "F c #7D8169", "G c #151612", "H c #D7DAC9", "I c #797D67", "J c #3D3F34", "K c #E0E0D9", "L c #EBEDDD", "M c #E8EBD9", "N c #E7EAD8", "O c #E3E6D4", "P c #DEE1D0", "Q c #DADCCC", "R c #DADCD1", "S c #2B2C28", "T c #D7DAC6", "U c #6F735E", "V c #0D0D0D", "W c #F4F4EC", "X c #CACFAB", "Y c #C6CBA8", "Z c #C2C6A4", "` c #ABB091", " . c #23251E", ".. c #494B3D", "+. c #DCDCD4", "@. c #EAECDD", "#. c #CDD2AD", "$. c #CCD1AC", "%. c #CACFAA", "&. c #BABF9D", "*. c #B5B999", "=. c #81836C", "-. c #070806", ";. c #D5D8C4", ">. c #161616", ",. c #F2F2EA", "'. c #C9CEAA", "). c #C8CDA9", "!. c #C4C9A6", "~. c #C1C5A3", "{. c #BCC09F", "]. c #B6BB9A", "^. c #B0B494", "/. c #9DA185", "(. c #535445", "_. c #B6B8A7", ":. c #747470", "<. c #ECECE2", "[. c #C3C8A5", "}. c #C2C7A4", "|. c #C0C5A2", "1. c #BFC4A1", "2. c #BDC2A0", "3. c #B9BD9C", "4. c #B9BE9D", "5. c #A9AD8F", "6. c #A3A78A", "7. c #80836D", "8. c #020201", "9. c #A6A998", "0. c #B8BC9B", "a. c #AFB394", "b. c #ACB091", "c. c #A8AC8E", "d. c #A6AA8C", "e. c #9FA286", "f. c #9B9F83", "g. c #9A9D82", "h. c #8A8D75", "i. c #4F5243", "j. c #070705", "k. c #9E9F91", "l. c #E5E6DA", "m. c #ADB192", "n. c #A5A98C", "o. c #9FA387", "p. c #999D81", "q. c #95987E", "r. c #92957B", "s. c #8C8F76", "t. c #8A8D74", "u. c #71735F", "v. c #080908", "w. c #E3E5D9", "x. c #C0C3AF", "y. c #94987C", "z. c #8F9379", "A. c #8B8F75", "B. c #8A8E74", "C. c #888C73", "D. c #858970", "E. c #868971", "F. c #82866E", "G. c #80836C", "H. c #7D8069", "I. c #797C66", "J. c #727560", "K. c #717460", "L. c #71745F", "M. c #6A6D59", "N. c #434538", "O. c #080907", "P. c #050504", " ", " ", " ", " . . . . . . . ", " + @ # # # # # $ % ", " & * = = = - - ; > ", ", ' * ) ! ~ { ] ] ^ / ", "( _ : < [ } | 1 2 3 4 5 . . . . . . . ", ", 6 7 8 9 0 8 a b c d e f g h i j k l . ", "m n o p q r s t r u v w x y 9 z A B C . ", ". D E F G . . . . . . . . . . . . . . . 5 5 ", ". H I J K L M M M M M M M M M M M N O P Q R S ", ". T U V W = = = = = = = = = - - - X Y Z 1 ` . ", ". T ..+.@.#.- - #.- #.#.#.#.#.$.%.Y Z &.*.=.-. ", ". ;.>.,.X %.X %.'.%.'.{ ).).Y !.~.{.].^./.(.m ", ". _.:.<.[.}.}.Z |.Z 1.2.|.2.3.4.} [ 5.6.7.8. ", ". 9.+.0.0.*.} } [ [ a.a.a.b.c.d.e.f.g.h.i.j. ", ". k.l.m.5.d.n.6.6.d o.e.f.p.q.r.s.t.t.u.v. ", ". w.x.y.z.A.B.C.C.D.E.F.G.H.I.J.K.L.M.N.O. ", " . . . . . . . . . . . . . . . . . . P. ", " ", " ", " ", " "}; tv-0.5/bitmaps/new.xpm0000775000076400007640000000640307640601440011727 00000000000000/* XPM */ static char * new_xpm[] = { "24 24 127 2", " c None", ". c #000000", "+ c #D3D3D3", "@ c #F6F6F6", "# c #FFFFFF", "$ c #F9F9F9", "% c #DADADA", "& c #585858", "* c #C7C7C7", "= c #D1D1D1", "- c #D6D6D6", "; c #FEFEFE", "> c #FDFDFD", ", c #C0C0C0", "' c #E1E1E1", ") c #F0F0F0", "! c #9B9B9B", "~ c #FCFCFB", "{ c #FBFBFB", "] c #AFAFAE", "^ c #E9E9E9", "/ c #DFDFDF", "( c #8F8F8F", "_ c #FAFAF9", ": c #F9F9F8", "< c #A4A4A3", "[ c #F4F4F4", "} c #CFCFCF", "| c #A2A2A2", "1 c #F8F8F7", "2 c #F8F7F6", "3 c #9E9E9E", "4 c #F7F6F5", "5 c #F6F6F4", "6 c #F4F3F2", "7 c #DEDDDC", "8 c #D3D2D0", "9 c #B7B7B5", "0 c #9F9E9D", "a c #706F6F", "b c #65625A", "c c #F5F4F3", "d c #F2F2F0", "e c #E4E4E2", "f c #DAD9D7", "g c #D8D8D6", "h c #CDCCCA", "i c #AFAEAC", "j c #88847B", "k c #F3F3F1", "l c #EFEFED", "m c #EEEDEB", "n c #EDECEA", "o c #E9E8E6", "p c #D5D4D3", "q c #C4C3C2", "r c #8F8A81", "s c #F6F5F4", "t c #F5F5F3", "u c #F1F1EF", "v c #F1F0EE", "w c #ECEBE9", "x c #EAE9E7", "y c #E5E4E2", "z c #E4E3E0", "A c #D2D1CE", "B c #8D887E", "C c #F3F2F1", "D c #F0F0EE", "E c #F0EFED", "F c #EFEEEC", "G c #E8E7E5", "H c #E5E4E1", "I c #E2E1DE", "J c #E1DFDC", "K c #979288", "L c #A49E93", "M c #E8E7E4", "N c #E7E6E3", "O c #E3E2DF", "P c #E2E0DD", "Q c #E1E0DC", "R c #E0DFDB", "S c #A19C90", "T c #EDEDEB", "U c #EBEAE8", "V c #E9E8E5", "W c #E6E4E1", "X c #E3E2DE", "Y c #DFDEDA", "Z c #DEDDD9", "` c #DDDCD8", " . c #A19B90", ".. c #E7E5E2", "+. c #E4E3DF", "@. c #DCDBD7", "#. c #E6E5E2", "$. c #E5E4E0", "%. c #E2E1DD", "&. c #DBD9D5", "*. c #D9D7D3", "=. c #9F998D", "-. c #E4E2DF", ";. c #DDDBD7", ">. c #DCDAD6", ",. c #D8D6D2", "'. c #9E988D", "). c #EDEDED", "!. c #E1E0DD", "~. c #E0DEDA", "{. c #D8D6D1", "]. c #D7D5D1", "^. c #9D978B", "/. c #E1DFDB", "(. c #DEDCD8", "_. c #D7D6D1", ":. c #D5D3CE", "<. c #9B958A", "[. c #999891", "}. c #A39E92", "|. c #A39D92", "1. c #A39D91", "2. c #A29C90", "3. c #A19B8F", "4. c #9D978C", "5. c #9B968A", "6. c #676359", " ", " . . . . . . . . . . . . . ", " . + @ # # # # # # # # $ % & . ", " . @ # # # # # # # # # # * = - . ", " . # # # # # # # ; # ; > , ' ) ! . ", " . # # # # # ; > ~ > ~ { ] ^ # / ( . ", " . # # # ; > ~ { _ { _ : < ) # [ } | . ", " . # ; > ~ { _ : 1 : 1 2 3 . . . . . . . ", " . # ~ { _ : 1 2 4 2 4 5 6 7 8 9 0 a b . ", " . # _ : 1 2 4 5 c 5 c 6 d e f g h i j . ", " . # 1 2 4 5 c 6 k 6 k d l m n o p q r . ", " . # s t 6 6 k d u d u v m w x y z A B . ", " . # 6 C d D l v E v E F w G H z I J K . ", " . # 6 C d D l v E v E F w G H z I J L . ", " . # D l l F m n n n n w M N O P Q R S . ", " . # T n w w w U V U V V H W X Y Z ` .. ", " . # U o o G M M N M N ..+.X R Z ` @. .. ", " . # N #.#.#.H W $.W $.+.%.R Z @.&.*.=.. ", " . $ z O X -.+.%.X %.X Q Q Z ;.>.*.,.'.. ", " . ).!.J Q R %.R Q R Q Y ~.;.>.*.{.].^.. ", " . = /.~.Y Z R Z ~.Z ~.(.(.>.>.,._.:.<.. ", " . [.}.L |.1.|.S 2.S 2.3. .=.=.4.4.5.6.. ", " . . . . . . . . . . . . . . . . . . ", " "}; tv-0.5/bitmaps/previous.xpm0000775000076400007640000000154007327261047013016 00000000000000/* XPM */ static char * previous_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "24 24 2 1 0 0", /* colors */ " s none m none c none", ". s iconColor1 m black c black", /* pixels */ " ", " ", " ", " ", " . ", " .. ", " ... ", " .... ", " ..... ", " ...... ", " ....... ", " ........ ", " ....... ", " ...... ", " ..... ", " .... ", " ... ", " .. ", " . ", " ", " ", " ", " ", " "}; tv-0.5/bitmaps/rectangletree.xpm0000775000076400007640000000154507327261051013766 00000000000000/* XPM */ static char * rectangletree_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "24 24 2 1 0 0", /* colors */ " s none m none c none", ". s iconColor1 m black c black", /* pixels */ " ", " ", " ", " ", " ", " ............. ", " . ", " . ", " . ", " . ......... ", " . . ", " . . ", " ..... ", " . ..... ", " . . ", " ..... ", " . ", " ..... ", " ", " ", " ", " ", " ", " "}; tv-0.5/bitmaps/next.xpm0000775000076400007640000000153407326027235012121 00000000000000/* XPM */ static char * next_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "24 24 2 1 0 0", /* colors */ " s none m none c none", ". s iconColor1 m black c black", /* pixels */ " ", " ", " ", " ", " . ", " .. ", " ... ", " .... ", " ..... ", " ...... ", " ....... ", " ........ ", " ....... ", " ...... ", " ..... ", " .... ", " ... ", " .. ", " . ", " ", " ", " ", " ", " "}; tv-0.5/bitmaps/treeview.xpm0000775000076400007640000000240307234066140012765 00000000000000/* XPM */ static char *treeview_xpm[] = { "32 32 4 1", "# c #000000000000", " c None", "a c #FFFFFFFF0000", "b c #808080808080", " ", " ", " ", " ", " ", " ", " ", " ##### ##### ##### ", " #aaa#b# #aaa#b #aaa#b ", "#####bbb# #####b #####b ", " #aaa#bbb# #aaa#b #aaa#b ", " #aaa#bbb#aaa#b #aaa#b ", " #aaa#b#aaa#b #aaa#b ", " #aaa#aaa#b #aaa#b ", " #aaaaa#b# #aaa#b ", " #aaa#bbb# #aaa#b ", " #aaa#bbb# #aaa#b ", " #aaa#bbb#aaa#b ", " #aaa#b#aaa#b ", " #aaa#aaa#b ", " #aaaaa#b# ", " #aaa#bbb# ", " #aaa#bbb# ", " #aaa#bbb# ", " #aaa#bbb# ", " #aaa#bbb# ", " #aaa#b# ", " ##### ", " ", " ", " ", " "}; tv-0.5/bitmaps/saveas.xpm0000775000076400007640000000542507640307407012431 00000000000000/* XPM */ static char * saveas_xpm[] = { "24 24 96 2", " c None", ". c #000000", "+ c #F4CB34", "@ c #E3A445", "# c #E79E3C", "$ c #574C2A", "% c #F6F9FF", "& c #ABD5FF", "* c #CCCCCC", "= c #5F542E", "- c #C5E1FF", "; c #6699CC", "> c #999999", ", c #524828", "' c #B4D9FF", ") c #FFFFFF", "! c #203141", "~ c #E3A647", "{ c #2C4258", "] c #223446", "^ c #646464", "/ c #35506B", "( c #2B4258", "_ c #656565", ": c #8D8D8D", "< c #45678A", "[ c #3A5876", "} c #D2AA71", "| c #6B6B6B", "1 c #8C8C8C", "2 c #9E9E9A", "3 c #4E769D", "4 c #4E4015", "5 c #696966", "6 c #686868", "7 c #7C7C7C", "8 c #B5B5B5", "9 c #EFEFEF", "0 c #060605", "a c #AAAAAA", "b c #A7A7A7", "c c #C6C6C6", "d c #E7E7E7", "e c #5C8AB8", "f c #EBF1F8", "g c #F5F5F5", "h c #BBCAD7", "i c #6496C8", "j c #5C8BB9", "k c #5B89B7", "l c #5A87B5", "m c #6598CB", "n c #8EA4BC", "o c #B8B8B8", "p c #C2C2C2", "q c #DFDFDF", "r c #72787D", "s c #2E465F", "t c #436587", "u c #6090C0", "v c #263A4F", "w c #304961", "x c #CBCBCB", "y c #25394C", "z c #4A7095", "A c #426385", "B c #6294C5", "C c #C1C1C1", "D c #2E455D", "E c #436688", "F c #B3B3B3", "G c #233648", "H c #486D91", "I c #556B81", "J c #5E8EBD", "K c #C0C0C0", "L c #293E54", "M c #466A8E", "N c #B4B4B4", "O c #9F9F9F", "P c #233649", "Q c #496E93", "R c #3A5977", "S c #4A5B6C", "T c #3C5B7A", "U c #919191", "V c #B2B2B2", "W c #808080", "X c #7D7D7D", "Y c #777777", "Z c #626262", "` c #575757", " . c #192735", ".. c #344E69", "+. c #36516D", "@. c #263A4E", " ", " . . ", " . + @ . ", " . . . . . . . . . . . . . . + # $ . ", " . % & * * * * * * * * * * . + # = . ", " . - ; > > > > > > > > > . + # , . . ", " . ' ; ) ) ) ) ) ) ) ) . + # , . ! . ", " . ' ; ) ) ) ) ) ) ) . + ~ = . { ] . ", " . ' ; ) * * * * * . + # = . ^ / ( . ", " . ' ; ) ) ) ) ) . + # $ . _ : < [ . ", " . ' ; ) ) ) ) ) . } = . | 1 2 3 [ . ", " . ' ; ) * * * . 4 . . 5 6 7 8 3 [ . ", " . ' ; ) ) ) 9 0 . a b 8 c d d e [ . ", " . ' ; f ) g d d d d d d d d h e [ . ", " . ' ; ; i j e e e e e k l e e e [ . ", " . ' ; m n o o p q d * r s t e e [ . ", " . ' ; u o o v w d x o a y z A e [ . ", " . ' B e o C D E C o o F G H E e [ . ", " . I J e K q L M o o N O P Q E e R . ", " . S T U V W W X Y Z ` .w ..+.@.. ", " . . . . . . . . . . . . . . . ", " ", " ", " "}; tv-0.5/bitmaps/zoomout.xpm0000775000076400007640000000145407721376342012665 00000000000000/* XPM */ static char *zoomout_xpm[]={ "24 24 6 1", ". c None", "a c #000000", "d c #939393", "b c #a1a1a1", "# c #aeaeae", "c c #ffffff", "........................", "........................", "........................", "........................", ".......#aaaabb#.........", ".....#aaccccaab#........", ".....accccccccab#.......", "....#accccccccabb#......", "....accccccccccab#......", "....accaaaaaaccab#......", "....accaaaaaaccab#......", "....accccccccccab#......", "....#accccccccad#.......", ".....accccccccad#.......", ".....#aaccccaaad#.......", ".......#aaaa.aaab#......", "..............aaab#.....", "...............aaab.....", "................aaa.....", ".................aa.....", "........................", "........................", "........................", "........................"}; tv-0.5/bitmaps/slanttree.xpm0000775000076400007640000000154107327261054013142 00000000000000/* XPM */ static char * slanttree_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "24 24 2 1 0 0", /* colors */ " s none m none c none", ". s iconColor1 m black c black", /* pixels */ " ", " ", " ", " ", " ", " . ", " . ", " . ", " . ", " . . ", " . . ", " . . ", " . . ", " . . ", " . . ", " . ", " . ", " . ", " ", " ", " ", " ", " ", " "}; tv-0.5/depcomp0000755000076400007640000004224610566570023010331 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2006-10-15.18 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software # Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: tv-0.5/ChangeLog0000775000076400007640000000000007327225674010523 00000000000000tv-0.5/tv.cpp0000775000076400007640000004661610574263773010135 00000000000000/* * TreeView * A phylogenetic tree viewer. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: tv.cpp,v 1.43 2007/03/09 13:58:19 rdmp1c Exp $ #ifdef __GNUG__ // #pragma implementation "docview.h" #endif // hack because gcc 2.95 on my Solaris box can't handle the VERSION flag passed as -DVERSION=\"0.3\" #ifdef VERSION #define TV_VERSION VERSION #else #define TV_VERSION "0.5.0" #endif /* * Purpose: Document/view architecture demo for wxWindows class library - MDI */ #include "tdoc.h" #include "tview.h" // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/wx.h" #endif #if !wxUSE_DOC_VIEW_ARCHITECTURE #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h! #endif #if !wxUSE_MDI_ARCHITECTURE #error You must set wxUSE_MDI_ARCHITECTURE to 1 in setup.h! #endif #include #if defined(__WXGTK__) || defined(__WXMOTIF__) || defined (__WXX11__) // For Unix use 24x24 xpm files modelled on GNOME // #include "mondrian.xpm" #include "bitmaps/new.xpm" #include "bitmaps/open.xpm" // #include "bitmaps/save.xpm" #include "bitmaps/saveas.xpm" #include "bitmaps/copy.xpm" // #include "bitmaps/cut.xpm" // #include "bitmaps/paste.xpm" #include "bitmaps/print_preview.xpm" #include "bitmaps/print.xpm" // #include "bitmaps/help.xpm" #include "bitmaps/previous.xpm" #include "bitmaps/next.xpm" #include "bitmaps/slanttree.xpm" #include "bitmaps/rectangletree.xpm" #include "bitmaps/phylogram.xpm" #include "bitmaps/paste.xpm" #include "bitmaps/zoomin.xpm" #include "bitmaps/zoomout.xpm" #include "bitmaps/internal.xpm" #elif defined(__WXMAC__) // For MacOS we use 16x15 xpm files modelled on Windows #include "bitmaps/mac/new.xpm" #include "bitmaps/mac/open.xpm" // #include "bitmaps/save.xpm" #include "bitmaps/mac/saveas.xpm" #include "bitmaps/mac/copy.xpm" // #include "bitmaps/cut.xpm" // #include "bitmaps/paste.xpm" #include "bitmaps/mac/print_preview.xpm" #include "bitmaps/mac/print.xpm" // #include "bitmaps/help.xpm" #include "bitmaps/mac/previous.xpm" #include "bitmaps/mac/next.xpm" #include "bitmaps/mac/slanttree.xpm" #include "bitmaps/mac/rectangletree.xpm" #include "bitmaps/mac/phylogram.xpm" #include "bitmaps/mac/paste.xpm" #include "bitmaps/mac/zoomin.xpm" #include "bitmaps/mac/zoomout.xpm" #include "bitmaps/internal.xpm" #endif #include "tv.h" #if wxUSE_DRAG_AND_DROP // Handle dropping files #include "wx/dnd.h" class DnDFile : public wxFileDropTarget { public: DnDFile(wxDocManager *pOwner) { m_pOwner = pOwner; } virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames); private: wxDocManager *m_pOwner; }; bool DnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames) { size_t nFiles = filenames.GetCount(); for ( size_t n = 0; n < nFiles; n++ ) m_pOwner->CreateDocument (filenames[n].c_str(), wxDOC_SILENT); return TRUE; } #endif // wxUSE_DRAG_AND_DROP MyFrame *frame = (MyFrame *) NULL; IMPLEMENT_APP(MyApp) MyApp::MyApp(void) { m_docManager = (wxDocManager *) NULL; } #ifdef __WXMAC__ void MyApp::MacOpenFile(const wxString &fileName) { m_docManager->CreateDocument (fileName, wxDOC_SILENT); } #endif bool MyApp::OnInit(void) { // Optional command line argument is name of file to open #if wxUSE_UNICODE wchar_t *InputFile = NULL; #else char *InputFile = NULL; #endif // Read input/output files if (argc > 1) { InputFile = argv[1]; } //// Create a document manager m_docManager = new wxDocManager; //// Create a template relating drawing documents to their views (void) new wxDocTemplate((wxDocManager *) m_docManager, wxT("NEXUS tree file"), wxT("*.tre"), wxT(""), wxT("tre"), wxT("Tree Doc"), wxT("Tree View"), CLASSINFO(TDocument), CLASSINFO(TView)); (void) new wxDocTemplate((wxDocManager *) m_docManager, wxT("NEXUS tree file"), wxT("*.trees"), wxT(""), wxT("trees"), wxT("Tree Doc"), wxT("Tree View"), CLASSINFO(TDocument), CLASSINFO(TView)); (void) new wxDocTemplate((wxDocManager *) m_docManager, wxT("NEXUS file"), wxT("*.nex"), wxT(""), wxT("nex"), wxT("Tree Doc"), wxT("Tree View"), CLASSINFO(TDocument), CLASSINFO(TView)); (void) new wxDocTemplate((wxDocManager *) m_docManager, wxT("TreeBASE"), wxT("*.acgi"), wxT(""), wxT("acgi"), wxT("Tree Doc"), wxT("Tree View"), CLASSINFO(TDocument), CLASSINFO(TView)); (void) new wxDocTemplate((wxDocManager *) m_docManager, wxT("MrBayes consensus"), wxT("*.con"), wxT(""), wxT("con"), wxT("Tree Doc"), wxT("Tree View"), CLASSINFO(TDocument), CLASSINFO(TView)); (void) new wxDocTemplate((wxDocManager *) m_docManager, wxT("MrBayes tree file"), wxT("*.t"), wxT(""), wxT("t"), wxT("Tree Doc"), wxT("Tree View"), CLASSINFO(TDocument), CLASSINFO(TView)); (void) new wxDocTemplate((wxDocManager *) m_docManager, wxT("CLUSTALX tree"), wxT("*.ph"), wxT(""), wxT("ph"), wxT("Tree Doc"), wxT("Tree View"), CLASSINFO(TDocument), CLASSINFO(TView)); (void) new wxDocTemplate((wxDocManager *) m_docManager, wxT("CLUSTALX bootstrap tree"), wxT("*.phb"), wxT(""), wxT("phb"), wxT("Tree Doc"), wxT("Tree View"), CLASSINFO(TDocument), CLASSINFO(TView)); (void) new wxDocTemplate((wxDocManager *) m_docManager, wxT("CLUSTALX guide tree"), wxT("*.dnd"), wxT(""), wxT("dnd"), wxT("Tree Doc"), wxT("Tree View"), CLASSINFO(TDocument), CLASSINFO(TView)); (void) new wxDocTemplate((wxDocManager *) m_docManager, wxT("PHYLIP tree"), wxT("*.*"), wxT(""), wxT(""), wxT("Tree Doc"), wxT("Tree View"), CLASSINFO(TDocument), CLASSINFO(TView)); (void) new wxDocTemplate((wxDocManager *) m_docManager, wxT("Any document"), wxT("*"), wxT(""), wxT(""), wxT("Tree Doc"), wxT("Tree View"), CLASSINFO(TDocument), CLASSINFO(TView)); //// Create the main frame window #ifdef __WXMAC__ // Create the frame window off screen (5000, 5000) so we don't see it. frame = new MyFrame((wxDocManager *) m_docManager, (wxFrame *) NULL, (const wxString) wxT("Toolbar"), wxPoint(5000,5000), wxSize(400, 400), wxDEFAULT_FRAME_STYLE); #else frame = new MyFrame((wxDocManager *) m_docManager, (wxFrame *) NULL, (const wxString) wxT("TreeViewX"), wxPoint(0, 0), wxSize(500, 400), wxDEFAULT_FRAME_STYLE); #endif //// Give it an icon (this is ignored in MDI mode: uses resources) #ifdef __WXMSW__ frame->SetIcon(wxIcon("app")); // use the name of the icon in the resource file #endif #if defined(__WXGTK__) || defined(__WXMOTIF__) frame->SetIcon(wxIcon(wxT("bitmaps/treeview.xbm"))); #endif #ifdef __WXMAC__ wxApp::s_macAboutMenuItemId = DOCVIEW_ABOUT; #endif //// Make a menubar wxMenu *file_menu = new wxMenu; wxMenu *edit_menu = (wxMenu *) NULL; file_menu->Append(wxID_NEW, wxT("&New...\tCtrl-N")); file_menu->Append(wxID_OPEN, wxT("&Open...\tCtrl-O")); #ifndef __WXMAC__ file_menu->AppendSeparator(); file_menu->Append(wxID_EXIT, wxT("E&xit\tAlt-X")); #endif // A nice touch: a history of files visited. Use this menu. m_docManager->FileHistoryUseMenu(file_menu); wxMenu *help_menu = new wxMenu; help_menu->Append(DOCVIEW_ABOUT, wxT("&About\tF1")); wxMenuBar *menu_bar = new wxMenuBar; menu_bar->Append(file_menu, wxT("&File")); if (edit_menu) menu_bar->Append(edit_menu, wxT("&Edit")); menu_bar->Append(help_menu, wxT("&Help")); //// Associate the menu bar with the frame frame->SetMenuBar(menu_bar); // Application window status bar frame->CreateStatusBar(); #if wxUSE_DRAG_AND_DROP // Frame window is a drop target frame->SetDropTarget(new DnDFile(m_docManager)); #endif #ifndef __WXMAC__ // If we don't centre the frame we don't see the it under MacOS X (which is good because // the MDI model on the Mac should not show a frame). frame->Centre(wxBOTH); #endif frame->Show(TRUE); SetTopWindow(frame); // Open file passed on command line if (InputFile) m_docManager->CreateDocument (InputFile, wxDOC_SILENT); return TRUE; } int MyApp::OnExit(void) { delete m_docManager; return 0; } /* * Centralised code for creating a document frame. * Called from view.cpp, when a view is created. */ wxMDIChildFrame *MyApp::CreateChildFrame(wxDocument *doc, wxView *view, bool isCanvas) { //// Make a child frame wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame(doc, view, GetMainFrame(), -1, wxT("Child Frame"), wxPoint(10, 10), wxSize(300, 300), wxDEFAULT_FRAME_STYLE); #ifdef __WXMSW__ subframe->SetIcon(wxString("doc")); #endif #ifdef __X__ subframe->SetIcon(wxIcon("bitmaps/doc.xbm")); #endif //// Make a menubar wxMenu *file_menu = new wxMenu; file_menu->Append(wxID_NEW, wxT("&New...\tCtrl-N")); file_menu->Append(wxID_OPEN, wxT("&Open...\tCtrl-O")); file_menu->Append(wxID_CLOSE, wxT("&Close\tCtrl-W")); file_menu->Append(wxID_SAVE, wxT("&Save\tCtrl-S")); file_menu->Append(wxID_SAVEAS, wxT("Save &As...\tShift-Ctrl-S")); if (isCanvas) { #ifdef __WXMSW__ file_menu->AppendSeparator(); file_menu->Append(SAVEAS_PICTURE_CMD, wxT("Save As Picture..."), wxT("Save picture of tree to metafile")); #else #if USE_SVG file_menu->AppendSeparator(); file_menu->Append(SAVEAS_PICTURE_CMD, wxT("Save As Picture..."), wxT("Save picture of tree to SVG file")); #endif #endif file_menu->AppendSeparator(); file_menu->Append(wxID_PRINT, wxT("&Print...\tCtrl-P")); file_menu->Append(wxID_PRINT_SETUP, wxT("Page &Setup...\tShift-Ctrl-P")); file_menu->Append(wxID_PREVIEW, wxT("Print Pre&view")); } #ifndef __WXMAC__ file_menu->AppendSeparator(); file_menu->Append(wxID_EXIT, wxT("E&xit")); #endif wxMenu *edit_menu = (wxMenu *) NULL; edit_menu = new wxMenu; edit_menu->Append(wxID_UNDO, wxT("&Undo\tCtrl-Z")); edit_menu->Append(wxID_REDO, wxT("&Redo\tShift-Ctrl-Z")); edit_menu->AppendSeparator(); edit_menu->Append(wxID_CUT, wxT("Cu&t\tCtrl+X")); edit_menu->Append(wxID_COPY, wxT("&Copy\tCtrl+C"), wxT("Copy tree picture to clipboard")); edit_menu->Append(COPY_AS_TEXT_CMD, wxT("&Copy As Text"), wxT("Copy tree description to clipboard")); edit_menu->Append(wxID_PASTE, wxT("&Paste\tCtrl+V"), wxT("Paste tree from clipboard")); edit_menu->Append(wxID_CLEAR, wxT("&Delete")); edit_menu->Enable (wxID_UNDO, FALSE); edit_menu->Enable (wxID_REDO, FALSE); edit_menu->Enable (wxID_CUT, FALSE); edit_menu->Enable (wxID_COPY, FALSE); edit_menu->Enable (COPY_AS_TEXT_CMD, FALSE); edit_menu->Enable (wxID_PASTE, FALSE); edit_menu->Enable (wxID_CLEAR, FALSE); wxMenu *tree_menu = (wxMenu *) NULL; if (isCanvas) { tree_menu = new wxMenu; // These next three items are checkable tree_menu->Append(SLANTED_TREE_CMD, wxT("&Slanted Cladogram"), wxT("Draw tree as a slanted cladogram"), TRUE); tree_menu->Append(RECTANGULAR_TREE_CMD, wxT("&Rectangular Cladogram"), wxT("Draw tree as a rectangular cladogram"), TRUE); tree_menu->Append(PHYLOGRAM_CMD, wxT("&Phylogram"), wxT("Draw tree as a phylogram"), TRUE); tree_menu->AppendSeparator(); tree_menu->Append(INTERNAL_LABELS_CMD, wxT("&Show internal node labels"), wxT("Show internal node labels"), TRUE); tree_menu->Append(LEAF_FONT_CMD, wxT("&Leaf Font..."), wxT("Set font for displaying leaves")); tree_menu->AppendSeparator(); tree_menu->Append(CHOOSE_TREE_CMD, wxT("&Choose tree..."), wxT("Choose a tree")); tree_menu->AppendSeparator(); tree_menu->Append(ORDER_TREE_CMD, wxT("&Order tree..."), wxT("Order the tree")); tree_menu->AppendSeparator(); tree_menu->Append(ZOOM_IN_CMD, wxT("Zoom in\tCtrl+["), wxT("Zoom in")); tree_menu->Append(ZOOM_OUT_CMD, wxT("Zoom out\tCtrl+]"), wxT("Zoom out")); tree_menu->Append(ZOOM_TO_FIT_CMD, wxT("Zoom to fit"), wxT("View whole tree")); } wxMenu *help_menu = new wxMenu; help_menu->Append(DOCVIEW_ABOUT, wxT("&About")); wxMenuBar *menu_bar = new wxMenuBar; menu_bar->Append(file_menu, wxT("&File")); menu_bar->Append(edit_menu, wxT("&Edit")); if (isCanvas) menu_bar->Append(tree_menu, wxT("&Trees")); menu_bar->Append(help_menu, wxT("&Help")); //// Associate the menu bar with the frame subframe->SetMenuBar(menu_bar); #if defined(__WXMSW__) || defined(__WXMAC__) // Status bar for the view window subframe->CreateStatusBar(); #endif #ifdef __WXMAC__ // Create a toolbar in the view window subframe->CreateToolBar(wxNO_BORDER | wxTB_FLAT | wxTB_HORIZONTAL); frame->InitToolBar(subframe->GetToolBar()); #endif return subframe; } /* * This is the top-level window of the application. */ IMPLEMENT_CLASS(MyFrame, wxDocMDIParentFrame) BEGIN_EVENT_TABLE(MyFrame, wxDocMDIParentFrame) EVT_MENU(DOCVIEW_ABOUT, MyFrame::OnAbout) END_EVENT_TABLE() MyFrame::MyFrame(wxDocManager *manager, wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size, long type): wxDocMDIParentFrame(manager, frame, -1, title, pos, size, type, wxT("myFrame")) { // editMenu = (wxMenu *) NULL; // Toolbar CreateToolBar(wxNO_BORDER | wxTB_FLAT | wxTB_HORIZONTAL); InitToolBar(GetToolBar()); // Accelerators wxAcceleratorEntry entries[3]; entries[0].Set(wxACCEL_CTRL, (int) 'N', wxID_NEW); entries[1].Set(wxACCEL_CTRL, (int) 'O', wxID_OPEN); entries[2].Set(wxACCEL_CTRL, (int) 'X', wxID_EXIT); wxAcceleratorTable accel(3, entries); SetAcceleratorTable(accel); } #ifdef __WXMSW__ #define NUM_BITMAPS 15 #else #define NUM_BITMAPS 15 #endif void MyFrame::InitToolBar(wxToolBar* toolBar) { wxBitmap* bitmaps[NUM_BITMAPS]; #ifdef __WXMSW__ bitmaps[0] = new wxBitmap("open", wxBITMAP_TYPE_RESOURCE); bitmaps[1] = new wxBitmap("saveas", wxBITMAP_TYPE_RESOURCE); bitmaps[2] = new wxBitmap("copy", wxBITMAP_TYPE_RESOURCE); bitmaps[3] = new wxBitmap("print_preview", wxBITMAP_TYPE_RESOURCE); bitmaps[4] = new wxBitmap("print", wxBITMAP_TYPE_RESOURCE); bitmaps[5] = new wxBitmap("previous", wxBITMAP_TYPE_RESOURCE); bitmaps[6] = new wxBitmap("next", wxBITMAP_TYPE_RESOURCE); bitmaps[7] = new wxBitmap("slanttree", wxBITMAP_TYPE_RESOURCE); bitmaps[8] = new wxBitmap("rectangletree", wxBITMAP_TYPE_RESOURCE); bitmaps[9] = new wxBitmap("phylogram", wxBITMAP_TYPE_RESOURCE); bitmaps[10] = new wxBitmap("paste", wxBITMAP_TYPE_RESOURCE); bitmaps[11] = new wxBitmap("new", wxBITMAP_TYPE_RESOURCE); bitmaps[12] = new wxBitmap("zoomin", wxBITMAP_TYPE_RESOURCE); bitmaps[13] = new wxBitmap("zoomout", wxBITMAP_TYPE_RESOURCE); bitmaps[14] = new wxBitmap("internal", wxBITMAP_TYPE_RESOURCE); #else bitmaps[0] = new wxBitmap( open_xpm ); bitmaps[1] = new wxBitmap( saveas_xpm ); bitmaps[2] = new wxBitmap( copy_xpm ); bitmaps[3] = new wxBitmap( print_preview_xpm ); bitmaps[4] = new wxBitmap( print_xpm ); bitmaps[5] = new wxBitmap( previous_xpm ); bitmaps[6] = new wxBitmap( next_xpm ); bitmaps[7] = new wxBitmap( slanttree_xpm ); bitmaps[8] = new wxBitmap( rectangletree_xpm ); bitmaps[9] = new wxBitmap( phylogram_xpm ); bitmaps[10] = new wxBitmap( paste_xpm); bitmaps[11] = new wxBitmap( new_xpm); bitmaps[12] = new wxBitmap( zoomin_xpm); bitmaps[13] = new wxBitmap( zoomout_xpm); bitmaps[14] = new wxBitmap( internal_xpm); #endif #ifdef __WXMSW__ int width = 24; #else int width = 16; #endif int currentX = 5; #ifdef __WXMAC__ // The toolbar for the Mac is associated with each document window, not the MDI frame, // so we don't display Open and Save as buttons #else toolBar->AddTool( wxID_NEW, *(bitmaps[11]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("New document")); currentX += width + 5; toolBar->AddTool( wxID_OPEN, *(bitmaps[0]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("Open document")); currentX += width + 5; toolBar->AddTool(wxID_SAVEAS, *bitmaps[1], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("Save document")); currentX += width + 5; #endif toolBar->AddTool(wxID_COPY, *bitmaps[2], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("Copy tree to clipboard")); currentX += width + 5; toolBar->AddTool(wxID_PASTE, *bitmaps[10], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("Paste tree descriiption from clipboard")); currentX += width + 5; // -- toolBar->AddSeparator(); toolBar->AddTool(wxID_PREVIEW, *bitmaps[3], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("Print preview")); toolBar->AddTool(wxID_PRINT, *bitmaps[4], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("Print")); //-- toolBar->AddSeparator(); toolBar->AddTool(PREVIOUS_TREE_CMD, *bitmaps[5], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("Previous tree")); toolBar->AddTool(NEXT_TREE_CMD, *bitmaps[6], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("Next tree")); //-- toolBar->AddSeparator(); toolBar->AddTool(SLANTED_TREE_CMD, *bitmaps[7], wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, wxT("Slanted cladogram")); toolBar->AddTool(RECTANGULAR_TREE_CMD, *bitmaps[8], wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, wxT("Rectangular cladogram")); toolBar->AddTool(PHYLOGRAM_CMD, *bitmaps[9], wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, wxT("Phylogram")); //-- toolBar->AddSeparator(); toolBar->AddTool(INTERNAL_LABELS_CMD, *bitmaps[14], wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, wxT("Show internal node labels")); //-- toolBar->AddSeparator(); toolBar->AddTool(ZOOM_IN_CMD, *bitmaps[12], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("Zoom in")); toolBar->AddTool(ZOOM_OUT_CMD, *bitmaps[13], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("Zoom out")); toolBar->Realize(); toolBar->EnableTool (wxID_COPY, false); toolBar->EnableTool (wxID_PASTE, false); toolBar->EnableTool (PREVIOUS_TREE_CMD, false); toolBar->EnableTool (NEXT_TREE_CMD, false); toolBar->EnableTool (PREVIOUS_TREE_CMD, false); toolBar->EnableTool (SLANTED_TREE_CMD, false); toolBar->EnableTool (RECTANGULAR_TREE_CMD, false); toolBar->EnableTool (PHYLOGRAM_CMD, false); toolBar->EnableTool (ZOOM_IN_CMD, false); toolBar->EnableTool (ZOOM_OUT_CMD, false); toolBar->EnableTool (INTERNAL_LABELS_CMD, false); for (int i = 0; i < NUM_BITMAPS; i++) delete bitmaps[i]; } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) { wxString msg; msg = wxT("TreeViewX "); msg += wxT("Version "); msg += wxT(TV_VERSION); msg += wxT("\n\nby Roderic D. M. Page (r.page@bio.gla.ac.uk)"); msg += wxT("\n\nBuilt using "); msg += wxVERSION_STRING; msg += wxT(" for "); #ifdef __WXMAC__ msg += wxT("Macintosh"); #else msg += wxGetOsDescription(); #endif (void)wxMessageBox(msg, wxT("About TreeViewX")); } // Creates a canvas. Called from view.cpp when a new drawing // view is created. MyCanvas *MyFrame::CreateCanvas(wxView *view, wxMDIChildFrame *parent) { int width, height; parent->GetClientSize(&width, &height); // Non-retained canvas MyCanvas *canvas = new MyCanvas(view, parent, wxPoint(0, 0), wxSize(width, height), 0); // canvas->SetCursor(wxCursor(wxCURSOR_PENCIL)); // Give it scrollbars canvas->SetScrollbars(0, 0, 0, 0); return canvas; } MyFrame *GetMainFrame(void) { return frame; } tv-0.5/tview.cpp0000775000076400007640000006706510666516736010645 00000000000000/* * TreeView * A phylogenetic tree viewer. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: tview.cpp,v 1.40 2007/03/09 13:59:19 rdmp1c Exp $ #ifdef __GNUG__ // #pragma implementation #endif #include // TreeLib (must go before any wx stuff to avoid clash between STL and Windows min/max) #include "TreeLib.h" #include "Parse.h" #include "treedrawer.h" #include "treeorder.h" // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/wx.h" #endif #if !wxUSE_DOC_VIEW_ARCHITECTURE #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h! #endif #include #include #include #include // Use the native Mac OS X font dialog #ifdef __WXMAC__ #undef wxFontDialog #include "wx/mac/fontdlg.h" #endif // Pictures #ifdef __WXMSW__ #else #ifdef USE_SVG #include #endif #endif // GUI interface #include "tv.h" #include "tdoc.h" #include "tview.h" // Dialogs #include "treeorder_dialog.h" #if wxUSE_PRINTING_ARCHITECTURE class WXDLLEXPORT wxTVPrintout : public wxDocPrintout { public: wxTVPrintout (wxView *view = (wxView *) NULL, const wxString& title = wxT("Printout")) : wxDocPrintout (view, title) {}; bool OnPrintPage(int page); }; #endif // wxUSE_PRINTING_ARCHITECTURE //------------------------------------------------------------------------------ // The wxWindows Printing Framework scales the printout to the screen image, // whereas I want to print the tree on the whole page, regardless of how it looks // on screen. To do this we extend wxDocPrintout to compute the size of the page // and to set the flag "printing" in the associated TView window before calling // the ancestral OnPrintPage. This lets TView:OnDraw know whether to scale the tree // for the screen or for the printed page. bool wxTVPrintout::OnPrintPage(int page) { bool result = false; TView *t = (TView *)GetView(); if (t) { int w_mm, h_mm; GetPageSizeMM (&w_mm, &h_mm); // Page size in points t->page_width = (int) ((float)(w_mm * 72.0) / 25.4); t->page_height = (int) ((float)(h_mm * 72.0) / 25.4); t->printing = true; } result = wxDocPrintout::OnPrintPage (page); if (t) { t->printing = false; } return result; } IMPLEMENT_DYNAMIC_CLASS(TView, wxView) /* BEGIN_EVENT_TABLE(DrawingView, wxView) EVT_MENU(DOODLE_CUT, DrawingView::OnCut) END_EVENT_TABLE() */ //------------------------------------------------------------------------------ TView::TView () { canvas = (MyCanvas *) NULL; frame = (wxMDIChildFrame *) NULL; TreeStyleCmd = SLANTED_TREE_CMD; Order = DEFAULT_ORDER; LeafFont = *wxSWISS_FONT; printing = false; magnification = 1; mShowInternalLabels = false; } //------------------------------------------------------------------------------ wxPrintout *TView::OnCreatePrintout() { wxDocPrintout *p = new wxTVPrintout (this); return p; } //------------------------------------------------------------------------------ // What to do when a view is created. Creates actual // windows for displaying the view. bool TView::OnCreate(wxDocument *doc, long WXUNUSED(flags) ) { frame = wxGetApp().CreateChildFrame(doc, this, TRUE); frame->SetTitle(wxT("TView")); canvas = GetMainFrame()->CreateCanvas(this, frame); #ifdef __X__ // X seems to require a forced resize int x, y; frame->GetSize(&x, &y); frame->SetSize(-1, -1, x, y); #endif frame->Show(TRUE); Activate(TRUE); return TRUE; } //------------------------------------------------------------------------------ void TView::OnSavePicture (wxCommandEvent& WXUNUSED(event)) { #ifdef __WXMSW__ // Use metafiles for Windows wxString pictureFileName = GetFrame()->GetTitle(); pictureFileName += wxT(".emf"); wxFrame *f = GetMainFrame(); wxFileDialog dialog((wxWindow *)f, wxT("Save Picture as"), wxT(""), pictureFileName, wxT("Enhanced metafile (*.emf)|*.emf"), wxSAVE|wxOVERWRITE_PROMPT); if (dialog.ShowModal() == wxID_OK) { wxMetafileDC pictureDC (dialog.GetPath(), 600, 650) ; OnDraw (&pictureDC); pictureDC.Close(); } #else #ifdef USE_SVG wxString pictureFileName = frame->GetTitle(); // Use SVG on other platforms pictureFileName += wxT(".svg"); #ifdef __WXMAC__ wxFrame *f = GetMainFrame(); #else wxFrame *f = GetMainFrame(); #endif wxFileDialog dialog((wxWindow *)f, wxT("Save Picture as"), wxT(""), pictureFileName, wxT("SVG vector picture files (*.svg)|*.svg"), wxSAVE|wxOVERWRITE_PROMPT); if (dialog.ShowModal() == wxID_OK) { wxSVGFileDC pictureDC (dialog.GetPath(), 600, 650) ; OnDraw (&pictureDC); } #endif #endif } //------------------------------------------------------------------------------ // Sneakily gets used for default print/preview // as well as drawing on the screen. void TView::OnDraw(wxDC *dc) { if (p.GetNumTrees() > 0) { dc->SetFont(LeafFont); wxPen pen (*wxBLACK_PEN); pen.SetCap (wxCAP_PROJECTING); dc->SetPen(pen); Tree t = p.GetCurrentTree(); t.Update(); int width, height; if (printing) { width = page_width; height = page_height; #if defined(__WXGTK__) || defined(__WXMOTIF__) height -= 72; #endif } else if (magnification == 1) { canvas->GetClientSize (&width, &height); } else { int ignore; canvas->GetVirtualSize (&ignore, &height); canvas->GetClientSize (&width, &ignore); } wxRect r (0, 0, width, height); #if defined(__WXGTK__) || defined(__WXMOTIF__) if (printing) { r.Offset (0, 72); } #endif // Ensure a little space around the tree r.Inflate (-20, -20); t.MakeNodeList(); int maxlen = 0; for (int i = 0; i < t.GetNumLeaves(); i++) { wxCoord w, h; Node *p; p = t[i]; wxString s; #if wxUSE_UNICODE char buf[256]; strcpy (buf, p->GetLabel().c_str()); wchar_t wbuf[256]; mbstowcs (wbuf, buf, size_t(wbuf)); s << wbuf; #else s << p->GetLabel().c_str(); #endif dc->GetTextExtent (s, &w, &h); if (w > maxlen) maxlen = w; } r.SetWidth (r.GetWidth() - maxlen); if (Order != DEFAULT_ORDER) { TreeOrder *order = NULL; switch (Order) { case ALPHA_ORDER: order = new AlphaOrder (&t); break; case LEFT_ORDER: order = new LeftOrder (&t); break; case RIGHT_ORDER: order = new RightOrder (&t); break; } order->Order (); delete order; } TreeDrawer *td = NULL; switch (TreeStyleCmd) { case SLANTED_TREE_CMD: td = new TreeDrawer (&t); break; case RECTANGULAR_TREE_CMD: td = new RectangleTreeDrawer (&t); break; case PHYLOGRAM_CMD: td = new PhylogramDrawer (&t); break; } td->SetDC (dc); td->SetRect (r.GetLeft(), r.GetTop(), r.GetRight(), r.GetBottom()); td->CalcCoordinates (); td->SetPenWidth (2); td->SetDrawInternalLabels (mShowInternalLabels); td->Draw (); delete td; } } //------------------------------------------------------------------------------ void TView::OnUpdate(wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint)) { if (canvas) canvas->Refresh(); /* Is the following necessary? #ifdef __WXMSW__ if (canvas) canvas->Refresh(); #else if (canvas) { wxClientDC dc(canvas); dc.Clear(); OnDraw(& dc); } #endif */ } //------------------------------------------------------------------------------ // Clean up windows used for displaying the view. bool TView::OnClose(bool deleteWindow) { if (!GetDocument()->Close()) return FALSE; // Clear the canvas in case we're in single-window mode, // and the canvas stays. #if (wxMINOR_VERSION > 4) // from 2.5 Clear is deprecated canvas->ClearBackground(); #else canvas->Clear(); #endif canvas->view = (wxView *) NULL; canvas = (MyCanvas *) NULL; wxString s(wxTheApp->GetAppName()); if (frame) frame->SetTitle(s); SetFrame((wxFrame*)NULL); Activate(FALSE); if (deleteWindow) { delete frame; return TRUE; } return TRUE; } //------------------------------------------------------------------------------ bool TView::ReadTrees (const wxString &filename) { bool result = false; ifstream f; f.open (filename.mb_str(), ios::binary | ios::in); if (p.ReadTrees (f)) { // Set window name to that of file wxFileName fn (filename); wxString title = fn.GetName(); if (fn.HasExt()) { title += wxT("."); title += fn.GetExt(); } frame->SetTitle(title); result = true; } else { wxMessageBox(wxT("Failed to read trees"), wxT("ReadTrees"), wxICON_EXCLAMATION | wxOK); result = false; } f.close(); return result; } //------------------------------------------------------------------------------ bool TView::WriteTrees (const wxString &filename) { bool result = false; ofstream f (filename.mb_str()); if (p.WriteTrees (f)) { // Set window name to that of file wxFileName fn (filename); wxString title = fn.GetName(); if (fn.HasExt()) { title += wxT("."); title += fn.GetExt(); } frame->SetTitle(title); result = true; } else { wxMessageBox(wxT("Failed to write trees"), wxT("TreeView X"), wxICON_EXCLAMATION | wxOK); result = false; } f.close(); return result; } //------------------------------------------------------------------------------ void TView::OnActivateView (bool activate, wxView *activeView, wxView *deactiveView) { if (activate) { #ifdef __WXMAC__ wxToolBar* toolBar = frame->GetToolBar(); #else wxToolBar* toolBar = GetMainFrame()->GetToolBar(); #endif wxMenuBar* menuBar = frame->GetMenuBar(); if (p.GetNumTrees() > 0) { toolBar->EnableTool (PREVIOUS_TREE_CMD, (p.GetCurrentTreeNumber() > 0)); toolBar->EnableTool (NEXT_TREE_CMD, (p.GetCurrentTreeNumber() < (p.GetNumTrees() - 1))); toolBar->EnableTool (SLANTED_TREE_CMD, true); toolBar->EnableTool (RECTANGULAR_TREE_CMD, true); toolBar->EnableTool (PHYLOGRAM_CMD, p.CurrentTreeHasEdgeLengths()); toolBar->ToggleTool (SLANTED_TREE_CMD, FALSE ); toolBar->ToggleTool (RECTANGULAR_TREE_CMD, FALSE ); toolBar->ToggleTool (PHYLOGRAM_CMD, FALSE ); #ifndef __WXMOTIF__ menuBar->Enable (COPY_AS_TEXT_CMD, true); #endif menuBar->Enable (SLANTED_TREE_CMD, true); menuBar->Enable (RECTANGULAR_TREE_CMD, true); menuBar->Enable (PHYLOGRAM_CMD, p.CurrentTreeHasEdgeLengths()); menuBar->Check (SLANTED_TREE_CMD, false ); menuBar->Check (RECTANGULAR_TREE_CMD, false ); menuBar->Check (PHYLOGRAM_CMD, false ); menuBar->Enable (CHOOSE_TREE_CMD, (p.GetNumTrees() > 1)); menuBar->Enable (INTERNAL_LABELS_CMD, p.CurrentTreeHasInternallabels()); menuBar->Check (INTERNAL_LABELS_CMD, mShowInternalLabels ); toolBar->EnableTool (INTERNAL_LABELS_CMD, p.CurrentTreeHasInternallabels()); toolBar->ToggleTool (INTERNAL_LABELS_CMD, mShowInternalLabels ); ShowTreeName (); TreeStyleMenu (TreeStyleCmd); } else { toolBar->EnableTool (PREVIOUS_TREE_CMD, false); toolBar->EnableTool (NEXT_TREE_CMD, false); toolBar->EnableTool (PREVIOUS_TREE_CMD, false); toolBar->EnableTool (SLANTED_TREE_CMD, false); toolBar->EnableTool (RECTANGULAR_TREE_CMD, false); toolBar->EnableTool (PHYLOGRAM_CMD, false); menuBar->Enable (COPY_AS_TEXT_CMD, false); menuBar->Enable (SLANTED_TREE_CMD, false); menuBar->Enable (RECTANGULAR_TREE_CMD, false); menuBar->Enable (PHYLOGRAM_CMD, false); menuBar->Enable (INTERNAL_LABELS_CMD, false ); } } } //------------------------------------------------------------------------------ void TView::PreviousTree (wxCommandEvent& WXUNUSED(event)) { #ifdef __WXMAC__ wxToolBar* toolBar = frame->GetToolBar(); #else wxToolBar* toolBar = GetMainFrame()->GetToolBar(); #endif int n = p.GetCurrentTreeNumber (); if (n >= 0) { n--; p.SetCurrentTreeNumber (n); if (n == 0) toolBar->EnableTool (PREVIOUS_TREE_CMD, false); toolBar->EnableTool (NEXT_TREE_CMD, true); TreeStyleMenu(TreeStyleCmd); ShowTreeName (); OnUpdate (this, NULL); // Ensure we redraw window } } //------------------------------------------------------------------------------ void TView::NextTree (wxCommandEvent& WXUNUSED(event)) { #ifdef __WXMAC__ wxToolBar* toolBar = frame->GetToolBar(); #else wxToolBar* toolBar = GetMainFrame()->GetToolBar(); #endif int n = p.GetCurrentTreeNumber (); if (n < p.GetNumTrees () - 1) { n++; p.SetCurrentTreeNumber (n); if (n == (p.GetNumTrees () - 1)) toolBar->EnableTool (NEXT_TREE_CMD, false); toolBar->EnableTool (PREVIOUS_TREE_CMD, true); TreeStyleMenu(TreeStyleCmd); ShowTreeName (); OnUpdate (this, NULL); // Ensure we redraw window } } //------------------------------------------------------------------------------ void TView::ShowTreeName () { wxString txt = wxT(""); Tree t = p.GetCurrentTree (); if (t.GetName() != "") { #if wxUSE_UNICODE char buf[256]; strcpy (buf, t.GetName().c_str()); wchar_t wbuf[256]; mbstowcs (wbuf, buf, size_t(wbuf)); txt << wbuf; #else txt << t.GetName().c_str(); #endif txt << wxT(" "); } txt << wxT("(") << (p.GetCurrentTreeNumber() + 1) << wxT("/") << p.GetNumTrees() << wxT(")"); #if defined(__WXMSW__) || defined(__WXMAC__) // Status bar for the view window frame->SetStatusText (txt, 0); #else GetMainFrame()->SetStatusText (txt, 0); #endif } //------------------------------------------------------------------------------ void TView::TreeStyleMenu (int style) { #ifdef __WXMAC__ wxToolBar* toolBar = frame->GetToolBar(); #else wxToolBar* toolBar = GetMainFrame()->GetToolBar(); #endif wxMenuBar* menuBar = frame->GetMenuBar(); toolBar->ToggleTool( TreeStyleCmd, FALSE ); menuBar->Check (TreeStyleCmd, FALSE); // Ensure style is consistent with this tree (we may have a mix of trees with and without // branch lengths and/or internal labels) if (!p.CurrentTreeHasEdgeLengths() && (style == PHYLOGRAM_CMD)) { menuBar->Enable (PHYLOGRAM_CMD, FALSE); toolBar->EnableTool ( PHYLOGRAM_CMD, FALSE ); style = RECTANGULAR_TREE_CMD; } else if (p.CurrentTreeHasEdgeLengths()) { menuBar->Enable (PHYLOGRAM_CMD, TRUE); toolBar->EnableTool ( PHYLOGRAM_CMD, TRUE ); } menuBar->Enable (INTERNAL_LABELS_CMD, p.CurrentTreeHasInternallabels()); menuBar->Check (INTERNAL_LABELS_CMD, mShowInternalLabels ); toolBar->EnableTool (INTERNAL_LABELS_CMD, p.CurrentTreeHasInternallabels()); toolBar->ToggleTool (INTERNAL_LABELS_CMD, mShowInternalLabels ); toolBar->ToggleTool( style, TRUE ); menuBar->Check (TreeStyleCmd, FALSE); menuBar->Check (style, TRUE); TreeStyleCmd = style; } //------------------------------------------------------------------------------ void TView::OnSlant (wxCommandEvent& WXUNUSED(event)) { TreeStyleMenu (SLANTED_TREE_CMD); OnUpdate (this, NULL); // Ensure we redraw window } //------------------------------------------------------------------------------ void TView::OnRectangle (wxCommandEvent& WXUNUSED(event)) { TreeStyleMenu (RECTANGULAR_TREE_CMD); OnUpdate (this, NULL); // Ensure we redraw window } //------------------------------------------------------------------------------ void TView::OnPhylogram (wxCommandEvent& WXUNUSED(event)) { TreeStyleMenu (PHYLOGRAM_CMD); OnUpdate (this, NULL); // Ensure we redraw window } //------------------------------------------------------------------------------ void TView::OnOrderTree (wxCommandEvent& WXUNUSED(event)) { #ifdef __WXMAC__ TreeOrderDlg dialog((wxWindow *)GetFrame()); #else TreeOrderDlg dialog((wxWindow *)GetMainFrame()); #endif dialog.SetTreeOrder(Order); dialog.Centre (wxBOTH); if (dialog.ShowModal() == wxID_OK) { // Get data Order = dialog.GetTreeOrder(); OnUpdate (this, NULL); // Ensure we redraw window } } //------------------------------------------------------------------------------ void TView::OnInternalLabels (wxCommandEvent& WXUNUSED(event)) { mShowInternalLabels = !mShowInternalLabels; #ifdef __WXMAC__ wxToolBar* toolBar = frame->GetToolBar(); #else wxToolBar* toolBar = GetMainFrame()->GetToolBar(); #endif toolBar->ToggleTool( INTERNAL_LABELS_CMD, mShowInternalLabels ); wxMenuBar* menuBar = frame->GetMenuBar(); menuBar->Check (INTERNAL_LABELS_CMD, mShowInternalLabels); OnUpdate (this, NULL); // Ensure we redraw window } //------------------------------------------------------------------------------ void TView::OnLeafFont (wxCommandEvent& WXUNUSED(event)) { #if 0 TreeOrderDlg *dlg = new TreeOrderDlg(frame); dlg->ShowModal(); #else wxFontData data; data.SetInitialFont (LeafFont); #ifdef __WXMAC__ wxFontDialog dialog((wxWindow *)GetFrame(), data); #else wxFontDialog dialog((wxWindow *)GetMainFrame(), &data); #endif if ( dialog.ShowModal() == wxID_OK ) { wxFontData retData = dialog.GetFontData(); LeafFont = retData.GetChosenFont(); OnUpdate (this, NULL); // Ensure we redraw window } #endif } //------------------------------------------------------------------------------ void TView::OnChooseTree (wxCommandEvent& WXUNUSED(event)) { wxString *choices = new wxString[p.GetNumTrees()]; for (int i = 0; i < p.GetNumTrees(); i++) { #if wxUSE_UNICODE char buf[256]; strcpy (buf, p.GetIthTreeName(i).c_str()); wchar_t wbuf[256]; mbstowcs (wbuf, buf, size_t(wbuf)); std::wstring tname = wbuf; // If tree has no name create one from it's place in the profile if (tname == L"") { wchar_t buf[32]; swprintf (buf, wcslen(buf), L"%d", int (i+1)); tname += buf; } choices[i] = tname.c_str(); #else std::string tname = p.GetIthTreeName(i); // If tree has no name create one from it's place in the profile if (tname == "") { char buf[32]; sprintf (buf, "%d", (i+1)); tname += buf; } choices[i] = tname.c_str(); #endif } wxSingleChoiceDialog dialog(frame, wxT("Tree names"), wxT("Choose a tree"), p.GetNumTrees(), choices); dialog.SetSelection(p.GetCurrentTreeNumber()); /* From charles@plessy.org 13 February 2007 14:55:04 GMT An Ubuntu user found a bug in TreeView X, and a patch was made by William Alexander Grant, an Ubuntu developper (CCed). I tested it and confirmed that it efficiently fixes the problem. The bug is described in this page: https://launchpad.net/ubuntu/+source/treeviewx/+bug/75137 (actually, the segfaulting option name seems to be "choose tree") You can find the pach here: http://patches.ubuntu.com/t/treeviewx/treeviewx_0.5.1-2ubuntu1.patch Or more simply: diff -urNad treeviewx-0.5.1~/tview.cpp treeviewx-0.5.1/tview.cpp --- treeviewx-0.5.1~/tview.cpp 2006-12-17 10:33:21.000000000 +1100 +++ treeviewx-0.5.1/tview.cpp 2006-12-17 10:33:53.000000000 +1100 @@ -742,7 +742,7 @@ dialog.SetSelection(p.GetCurrentTreeNumber()); - if (dialog.ShowModal() == wxID_OK) + if ((dialog.ShowModal() == wxID_OK) && (p.GetNumTrees() != 0)) { int j = dialog.GetSelection (); #ifdef __WXMAC__ By the way, do not hesitate to advertise the Debian and Ubuntu packages on your website. They are more up to date than the RPM, and support SVG. */ if ((dialog.ShowModal() == wxID_OK) && (p.GetNumTrees() != 0)) { int j = dialog.GetSelection (); #ifdef __WXMAC__ wxToolBar* toolBar = frame->GetToolBar(); #else wxToolBar* toolBar = GetMainFrame()->GetToolBar(); #endif toolBar->EnableTool (PREVIOUS_TREE_CMD, (j != 0)); toolBar->EnableTool (NEXT_TREE_CMD, (j < p.GetNumTrees()-1)); p.SetCurrentTreeNumber (j); TreeStyleMenu(TreeStyleCmd); ShowTreeName (); OnUpdate (this, NULL); // Ensure we redraw window } delete [] choices; } #ifndef __WXMOTIF__ // ---------------------------------------------------------------------------- void TView::OnUpdateCopyCommand(wxUpdateUIEvent& event) { wxMenuBar* menuBar = frame->GetMenuBar(); menuBar->Enable (wxID_COPY, (p.GetNumTrees() > 0)); menuBar->Enable (COPY_AS_TEXT_CMD, (p.GetNumTrees() > 0)); #ifdef __WXMAC__ wxToolBar* toolBar = frame->GetToolBar(); #else wxToolBar* toolBar = GetMainFrame()->GetToolBar(); #endif toolBar->EnableTool (wxID_COPY, (p.GetNumTrees() > 0)); } // ---------------------------------------------------------------------------- void TView::OnUpdatePasteCommand(wxUpdateUIEvent& event) { wxMenuBar* menuBar = frame->GetMenuBar(); menuBar->Enable (wxID_PASTE, (p.GetNumTrees() == 0) && wxTheClipboard->IsSupported( wxDF_TEXT )); #ifdef __WXMAC__ wxToolBar* toolBar = frame->GetToolBar(); #else wxToolBar* toolBar = GetMainFrame()->GetToolBar(); #endif toolBar->EnableTool (wxID_PASTE, (p.GetNumTrees() == 0) && wxTheClipboard->IsSupported( wxDF_TEXT )); } // ---------------------------------------------------------------------------- void TView::OnCopy (wxCommandEvent& WXUNUSED(event)) { #if defined(__WXMAC__) || defined(__WXMSW__) // Get current tree Tree t = p.GetCurrentTree(); t.Update(); // Write tree to clipboard as a metafile wxMetafileDC dc; if (dc.Ok()) { OnDraw (&dc); wxMetafile *mf = dc.Close(); if (mf) { bool success = mf->SetClipboard((int)(dc.MaxX() + 10), (int)(dc.MaxY() + 10)); delete mf; } } #endif } // ---------------------------------------------------------------------------- void TView::OnCopyAsText (wxCommandEvent& WXUNUSED(event)) { // Get current tree Tree t = p.GetCurrentTree(); t.Update(); // Write tree to a string stream ostrstream f; NewickTreeWriter tw (&t); tw.SetStream (&f); tw.Write(); f << '\0'; // Store on clipboard if (wxTheClipboard->Open()) { // Data objects are held by the clipboard, // so do not delete them in the app. string str = f.str(); wxTheClipboard->SetData( new wxTextDataObject( wxString(str.c_str(), *wxConvCurrent)) ); wxTheClipboard->Close(); } } // ---------------------------------------------------------------------------- void TView::OnPaste (wxCommandEvent& WXUNUSED(event)) { // Paste tree description from clipboard into this window -- duh! need to make this a call to the main frame too if (wxTheClipboard->Open()) { if (wxTheClipboard->IsSupported( wxDF_TEXT )) { wxTextDataObject data; wxTheClipboard->GetData( data ); // Temporary stream to hold clipbard text istrstream f (data.GetText().mb_str()); if (p.ReadTrees (f)) { Activate (TRUE); // ensure menus are set correctly OnUpdate (this, NULL); // ensure tree is drawn GetDocument()->Modify (TRUE); // tell document that content has changed } } wxTheClipboard->Close(); } } #endif //------------------------------------------------------------------------------ void TView::ZoomToFit (wxCommandEvent& WXUNUSED(event)) { magnification = 1; Resize(); } //------------------------------------------------------------------------------ void TView::ZoomIn (wxCommandEvent& WXUNUSED(event)) { magnification++; Resize(); } //------------------------------------------------------------------------------ void TView::ZoomOut (wxCommandEvent& WXUNUSED(event)) { magnification--; Resize(); } //------------------------------------------------------------------------------ void TView::Resize () { canvas->SetMagnification (magnification); canvas->Resize (); OnUpdate (this, NULL); // Ensure we redraw window } // ---------------------------------------------------------------------------- void TView::OnUpdateZoomToFitCommand (wxUpdateUIEvent& event) { wxMenuBar* menuBar = frame->GetMenuBar(); menuBar->Enable (ZOOM_TO_FIT_CMD, (magnification != 1)); #ifdef __WXMAC__ wxToolBar* toolBar = frame->GetToolBar(); #else wxToolBar* toolBar = GetMainFrame()->GetToolBar(); #endif //toolBar->EnableTool (ZOOM_TO_FIT_CMD, (magnification != 1)); } // ---------------------------------------------------------------------------- void TView::OnUpdateZoomInCommand (wxUpdateUIEvent& event) { wxMenuBar* menuBar = frame->GetMenuBar(); menuBar->Enable (ZOOM_IN_CMD, (magnification < MAX_MAGNIFICATION)); #ifdef __WXMAC__ wxToolBar* toolBar = frame->GetToolBar(); #else wxToolBar* toolBar = GetMainFrame()->GetToolBar(); #endif toolBar->EnableTool (ZOOM_IN_CMD, (magnification < MAX_MAGNIFICATION)); } // ---------------------------------------------------------------------------- void TView::OnUpdateZoomOutCommand (wxUpdateUIEvent& event) { wxMenuBar* menuBar = frame->GetMenuBar(); menuBar->Enable (ZOOM_OUT_CMD, (magnification > 1)); #ifdef __WXMAC__ wxToolBar* toolBar = frame->GetToolBar(); #else wxToolBar* toolBar = GetMainFrame()->GetToolBar(); #endif toolBar->EnableTool (ZOOM_OUT_CMD, (magnification > 1)); } //------------------------------------------------------------------------------ // Map commands to methods in TView BEGIN_EVENT_TABLE(TView, wxView) EVT_MENU(NEXT_TREE_CMD, TView::NextTree) EVT_MENU(PREVIOUS_TREE_CMD, TView::PreviousTree) EVT_MENU(SLANTED_TREE_CMD, TView::OnSlant) EVT_MENU(RECTANGULAR_TREE_CMD, TView::OnRectangle) EVT_MENU(PHYLOGRAM_CMD, TView::OnPhylogram) EVT_MENU(INTERNAL_LABELS_CMD, TView::OnInternalLabels) EVT_MENU(LEAF_FONT_CMD, TView::OnLeafFont) EVT_MENU(CHOOSE_TREE_CMD, TView::OnChooseTree) EVT_MENU(ORDER_TREE_CMD, TView::OnOrderTree) #if defined __WXMSW__ || defined USE_SVG EVT_MENU(SAVEAS_PICTURE_CMD, TView::OnSavePicture) #endif #ifndef __WXMOTIF__ EVT_MENU(wxID_COPY, TView::OnCopy) EVT_MENU(COPY_AS_TEXT_CMD, TView::OnCopyAsText) EVT_MENU(wxID_PASTE, TView::OnPaste) #endif EVT_MENU(ZOOM_TO_FIT_CMD, TView::ZoomToFit) EVT_MENU(ZOOM_IN_CMD, TView::ZoomIn) EVT_MENU(ZOOM_OUT_CMD, TView::ZoomOut) #ifndef __WXMOTIF__ EVT_UPDATE_UI(wxID_COPY, TView::OnUpdateCopyCommand) EVT_UPDATE_UI(COPY_AS_TEXT_CMD, TView::OnUpdateCopyCommand) EVT_UPDATE_UI(wxID_PASTE, TView::OnUpdatePasteCommand) #endif EVT_UPDATE_UI(ZOOM_TO_FIT_CMD, TView::OnUpdateZoomToFitCommand) EVT_UPDATE_UI(ZOOM_IN_CMD, TView::OnUpdateZoomInCommand) EVT_UPDATE_UI(ZOOM_OUT_CMD, TView::OnUpdateZoomOutCommand) END_EVENT_TABLE() /* * Window implementations */ BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow) EVT_MOUSE_EVENTS(MyCanvas::OnMouseEvent) EVT_SIZE(MyCanvas::OnSize) END_EVENT_TABLE() // Define a constructor for my canvas MyCanvas::MyCanvas(wxView *v, wxMDIChildFrame *frame, const wxPoint& pos, const wxSize& size, long style): wxScrolledWindow(frame, -1, pos, size, style) { SetBackgroundColour(wxColour(wxT("WHITE"))); view = v; magnification = 1; } //------------------------------------------------------------------------------ // Define the repainting behaviour void MyCanvas::OnDraw(wxDC& dc) { if (view) view->OnDraw(& dc); } // ---------------------------------------------------------------------------- void MyCanvas::OnSize(wxSizeEvent& event) { Resize (); event.Skip(); } // ---------------------------------------------------------------------------- void MyCanvas::Resize() { int width, height; GetClientSize (&width, &height); int range = height * magnification; int steps = range / 50; SetScrollbars(0, steps, 0, 50); } //------------------------------------------------------------------------------ // This implements a tiny doodling program. Drag the mouse using // the left button. void MyCanvas::OnMouseEvent(wxMouseEvent& event) { } tv-0.5/tproject.h0000775000076400007640000000577110305270175010762 00000000000000/* * TreeView * A phylogenetic tree viewer. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: tproject.h,v 1.9 2005/08/31 08:55:25 rdmp1c Exp $ #ifndef TPROJECTH #define TPROJECTH #include "profile.h" /** * @class TProject * Encapsulates a profile of trees and operations on those trees. This is basically * a wrapper around the Profile class, and is designed for use in GUI programs. * * @see Profile * */ template class TProject { public: /** * Constructor */ TProject () { CurrentTree = 0; }; /** * Destructor */ virtual ~TProject () {}; /** * True if the current tree has edge lengths */ virtual bool CurrentTreeHasEdgeLengths () { return GetCurrentTree().GetHasEdgeLengths(); }; /** * True if the current tree has internal node labels */ virtual bool CurrentTreeHasInternallabels () { return GetCurrentTree().GetHasInternalLabels(); }; /** * Get the current tree object * @return The tree */ virtual T GetCurrentTree () { return p.GetIthTree (CurrentTree); }; /** * Get the index of the current tree * @return The index */ virtual int GetCurrentTreeNumber () const { return CurrentTree; }; /** * @return The number of trees in the profile */ virtual int GetNumTrees() { return p.GetNumTrees (); }; /** * @brief The name of the ith tree in the profile * * @param i the index of the tree in the range 0 - (n-1) * @return The tree */ virtual std::string GetIthTreeName (int i) { return p.GetIthTreeName (i); }; /** * Read one or more trees from an input stream * @param f an input stream * @return True if trees read in successfully */ virtual bool ReadTrees (std::istream &f) { return p.ReadTrees (f); }; /** * Set the index of the current tree * @param i the index of the tree in the range 0 - (n-1) */ virtual void SetCurrentTreeNumber (const int i) { CurrentTree = i; }; /** * Write trees to output stream * @param f an output stream * @return True if trees written successfully */ virtual bool WriteTrees (std::ostream &f, const int format = 0, const char *endOfLine = "\n") { return p.WriteTrees (f, format, endOfLine); }; protected: /** * The index of the current tree */ int CurrentTree; /** * The profile of trees */ Profile p; }; #endif tv-0.5/missing0000755000076400007640000002557710566570023010363 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2006-05-10.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case $1 in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $1 in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: tv-0.5/README0000775000076400007640000000000007327225707007626 00000000000000tv-0.5/INSTALL0000775000076400007640000001722707327225677010030 00000000000000Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. tv-0.5/Makefile.in0000664000076400007640000005462511432544630011025 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # $Id: Makefile.am,v 1.21 2005/08/30 11:48:53 rdmp1c Exp $ # The root makefile. VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = tv$(EXEEXT) subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/tv.spec.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = tv.spec am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_tv_OBJECTS = tview.$(OBJEXT) tdoc.$(OBJEXT) tv.$(OBJEXT) \ treeorder_dialog.$(OBJEXT) tv_OBJECTS = $(am_tv_OBJECTS) tv_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(tv_SOURCES) DIST_SOURCES = $(tv_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EXEEXT = @EXEEXT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ #LIBDIRS = -L$(NCLDIR) #-L$(XMLPARSEDIR) LIBS = @LIBS@ -L$(NCLDIR) -lncl -L$(TREELIBDIR) -ltreelib LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WX_CONFIG = @WX_CONFIG@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TREELIBDIR = TreeLib GPORTDIR = $(TREELIBDIR)/gport # to do: add XML support back into Unix version (cf. TreeEdit) #EXPATPPDIR = $(TREELIBDIR)/expatpp #XMLPARSEDIR = $(EXPATPPDIR)/xmlparse NCLDIR = ncl-2.0/src #-lexpat INCLUDES = -I$(NCLDIR) -I$(TREELIBDIR) -I$(GPORTDIR) #-I$(EXPATPPDIR) -I$(XMLPARSEDIR) -I$(EXPATPPDIR)/xmltok # We want to build the tree and NEXUS parsing code as separate libraries SUBDIRS = ncl-2.0 TreeLib tv_SOURCES = tview.cpp tdoc.cpp tv.cpp treeorder_dialog.cpp # Include headers, bitmaps, icons, and IDE files in the distribution EXTRA_DIST = tdoc.h tproject.h tv.h tview.h treeorder_dialog.h \ bitmaps/paste.xpm bitmaps/new.xpm bitmaps/copy.xpm bitmaps/phylogram.xpm bitmaps/print_preview.xpm \ bitmaps/slanttree.xpm bitmaps/next.xpm bitmaps/previous.xpm bitmaps/rectangletree.xpm \ bitmaps/treeview.xpm bitmaps/open.xpm bitmaps/print.xpm bitmaps/saveas.xpm \ bitmaps/mac/copy.xpm bitmaps/mac/phylogram.xpm bitmaps/mac/print_preview.xpm \ bitmaps/mac/slanttree.xpm bitmaps/mac/next.xpm bitmaps/mac/previous.xpm bitmaps/mac/rectangletree.xpm \ bitmaps/mac/open.xpm bitmaps/mac/print.xpm bitmaps/mac/saveas.xpm \ bitmaps/mac/internal.xpm bitmaps/mac/new.xpm bitmaps/mac/paste.xpm \ bitmaps/mac/zoomin.xpm bitmaps/mac/zoomout.xpm bitmaps/zoomin.xpm bitmaps/zoomout.xpm bitmaps/internal.xpm \ tv.pbproj/project.pbxproj tv.pbproj/rpage.pbxuser \ tv.xcode/project.pbxproj tv.xcode/rpage.pbxuser \ bitmaps/mac/app.icns bitmaps/mac/doc.icns all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .o .obj am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) tv.spec: $(top_builddir)/config.status $(srcdir)/tv.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) tv$(EXEEXT): $(tv_OBJECTS) $(tv_DEPENDENCIES) @rm -f tv$(EXEEXT) $(CXXLINK) $(tv_OBJECTS) $(tv_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdoc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/treeorder_dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tview.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d $(distdir) || mkdir $(distdir) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ am__remove_distdir=: \ am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-info: install-info-recursive install-man: install-pdf: install-pdf-recursive install-ps: install-ps-recursive installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ install-strip .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-binPROGRAMS \ clean-generic ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-compile distclean-generic distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: tv-0.5/configure0000775000076400007640000040104611432544630010660 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="tview.cpp" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA am__isrc CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE RANLIB ENT_TRUE ENT_FALSE WX_CONFIG LIBOBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.10' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi { echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { echo "$as_me:$LINENO: result: $MKDIR_P" >&5 echo "${ECHO_T}$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=tv VERSION=0.5 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5 echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C++ compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C++ compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5 echo $ECHO_N "checking whether the C++ compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' #AC_ARG_PROGRAM # We need ranlib to make the library, and we need to define make if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Ensure that we set ENT (and set it to false). This flag affects # the Makefile for TreeLib if false; then ENT_TRUE= ENT_FALSE='#' else ENT_TRUE='#' ENT_FALSE= fi # Extract the first word of "wx-config", so it can be a program name with args. set dummy wx-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_WX_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $WX_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_WX_CONFIG="$WX_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_WX_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_WX_CONFIG" && ac_cv_path_WX_CONFIG="no" ;; esac fi WX_CONFIG=$ac_cv_path_WX_CONFIG if test -n "$WX_CONFIG"; then { echo "$as_me:$LINENO: result: $WX_CONFIG" >&5 echo "${ECHO_T}$WX_CONFIG" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if [ "$WX_CONFIG" = "no" ] ; then { { echo "$as_me:$LINENO: error: \"Could not find wx-config: is wxWindows installed?\"" >&5 echo "$as_me: error: \"Could not find wx-config: is wxWindows installed?\"" >&2;} { (exit 1); exit 1; }; } fi CXXFLAGS="$CXXFLAGS -Wno-deprecated" { echo "$as_me:$LINENO: checking wxWindows version" >&5 echo $ECHO_N "checking wxWindows version... $ECHO_C" >&6; } wx_version=`$WX_CONFIG --version` { echo "$as_me:$LINENO: result: $wx_version" >&5 echo "${ECHO_T}$wx_version" >&6; } case "$wx_version" in 2.2.*) { echo "$as_me:$LINENO: WARNING: wxWindows is older than 2.3., setting CXXFLAGS using --cflags" >&5 echo "$as_me: WARNING: wxWindows is older than 2.3., setting CXXFLAGS using --cflags" >&2;} CXXFLAGS="$CXXFLAGS `$WX_CONFIG --cflags` -DUSE_WXWINDOWS" ;; *) CXXFLAGS="$CXXFLAGS `$WX_CONFIG --cxxflags` -DUSE_WXWINDOWS" ;; esac LIBS="$LIBS `$WX_CONFIG --libs`" # Do we have SVG support? # Set this to 0 when building an RPM on Linux, # otherwise test for existence of SVG library. # The reason for this is wxGTK RPMs from wxWidgets.org # do not have the required SVG library (which is a contribution) { echo "$as_me:$LINENO: checking whether we will use SVG" >&5 echo $ECHO_N "checking whether we will use SVG... $ECHO_C" >&6; } USE_SVG=1 WX_SVG_LIB= if test "$USE_SVG" = 0 ; then { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } else { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } case "$wx_version" in 2.4.*) WX_SVG_LIB=`$WX_CONFIG --basename`_dcsvg-`echo ${wx_version} | sed -e "s:\.[0-9]\{1,\}$::"` ;; *) WX_SVG_LIB=`$WX_CONFIG --basename`_svg-`echo ${wx_version} | sed -e "s:\.[0-9]\{1,\}$::"` ;; esac as_ac_Lib=`echo "ac_cv_lib_$WX_SVG_LIB''_main" | $as_tr_sh` { echo "$as_me:$LINENO: checking for main in -l$WX_SVG_LIB" >&5 echo $ECHO_N "checking for main in -l$WX_SVG_LIB... $ECHO_C" >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$WX_SVG_LIB $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi ac_res=`eval echo '${'$as_ac_Lib'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Lib'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_LIB$WX_SVG_LIB" | $as_tr_cpp` 1 _ACEOF LIBS="-l$WX_SVG_LIB $LIBS" else { echo "$as_me:$LINENO: WARNING: \"library required for SVG support not found\"" >&5 echo "$as_me: WARNING: \"library required for SVG support not found\"" >&2;} fi fi if test "$USE_SVG" = 1 ; then CXXFLAGS="$CXXFLAGS -DUSE_SVG" LIBS="$LIBS -l$WX_SVG_LIB" fi ac_config_files="$ac_config_files Makefile ncl-2.0/Makefile ncl-2.0/src/Makefile TreeLib/Makefile tv.spec" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${ENT_TRUE}" && test -z "${ENT_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ENT\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ENT\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "ncl-2.0/Makefile") CONFIG_FILES="$CONFIG_FILES ncl-2.0/Makefile" ;; "ncl-2.0/src/Makefile") CONFIG_FILES="$CONFIG_FILES ncl-2.0/src/Makefile" ;; "TreeLib/Makefile") CONFIG_FILES="$CONFIG_FILES TreeLib/Makefile" ;; "tv.spec") CONFIG_FILES="$CONFIG_FILES tv.spec" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim am__isrc!$am__isrc$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim AMTAR!$AMTAR$ac_delim am__tar!$am__tar$ac_delim am__untar!$am__untar$ac_delim CXX!$CXX$ac_delim CXXFLAGS!$CXXFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CXX!$ac_ct_CXX$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim DEPDIR!$DEPDIR$ac_delim am__include!$am__include$ac_delim am__quote!$am__quote$ac_delim AMDEP_TRUE!$AMDEP_TRUE$ac_delim AMDEP_FALSE!$AMDEP_FALSE$ac_delim AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim CXXDEPMODE!$CXXDEPMODE$ac_delim am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim RANLIB!$RANLIB$ac_delim ENT_TRUE!$ENT_TRUE$ac_delim ENT_FALSE!$ENT_FALSE$ac_delim WX_CONFIG!$WX_CONFIG$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 81; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :C $CONFIG_COMMANDS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi tv-0.5/Makefile.am0000775000076400007640000000332010305043645010777 00000000000000# $Id: Makefile.am,v 1.21 2005/08/30 11:48:53 rdmp1c Exp $ # The root makefile. TREELIBDIR = TreeLib GPORTDIR = $(TREELIBDIR)/gport # to do: add XML support back into Unix version (cf. TreeEdit) #EXPATPPDIR = $(TREELIBDIR)/expatpp #XMLPARSEDIR = $(EXPATPPDIR)/xmlparse NCLDIR = ncl-2.0/src #LIBDIRS = -L$(NCLDIR) #-L$(XMLPARSEDIR) LIBS = @LIBS@ -L$(NCLDIR) -lncl -L$(TREELIBDIR) -ltreelib #-lexpat INCLUDES = -I$(NCLDIR) -I$(TREELIBDIR) -I$(GPORTDIR) #-I$(EXPATPPDIR) -I$(XMLPARSEDIR) -I$(EXPATPPDIR)/xmltok # We want to build the tree and NEXUS parsing code as separate libraries SUBDIRS = ncl-2.0 TreeLib # The actual TreeView X program bin_PROGRAMS = tv tv_SOURCES = tview.cpp tdoc.cpp tv.cpp treeorder_dialog.cpp # Include headers, bitmaps, icons, and IDE files in the distribution EXTRA_DIST = tdoc.h tproject.h tv.h tview.h treeorder_dialog.h \ bitmaps/paste.xpm bitmaps/new.xpm bitmaps/copy.xpm bitmaps/phylogram.xpm bitmaps/print_preview.xpm \ bitmaps/slanttree.xpm bitmaps/next.xpm bitmaps/previous.xpm bitmaps/rectangletree.xpm \ bitmaps/treeview.xpm bitmaps/open.xpm bitmaps/print.xpm bitmaps/saveas.xpm \ bitmaps/mac/copy.xpm bitmaps/mac/phylogram.xpm bitmaps/mac/print_preview.xpm \ bitmaps/mac/slanttree.xpm bitmaps/mac/next.xpm bitmaps/mac/previous.xpm bitmaps/mac/rectangletree.xpm \ bitmaps/mac/open.xpm bitmaps/mac/print.xpm bitmaps/mac/saveas.xpm \ bitmaps/mac/internal.xpm bitmaps/mac/new.xpm bitmaps/mac/paste.xpm \ bitmaps/mac/zoomin.xpm bitmaps/mac/zoomout.xpm bitmaps/zoomin.xpm bitmaps/zoomout.xpm bitmaps/internal.xpm \ tv.pbproj/project.pbxproj tv.pbproj/rpage.pbxuser \ tv.xcode/project.pbxproj tv.xcode/rpage.pbxuser \ bitmaps/mac/app.icns bitmaps/mac/doc.icns tv-0.5/NEWS0000775000076400007640000000000007327225704007442 00000000000000tv-0.5/COPYING0000775000076400007640000004311007327225671010012 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. tv-0.5/tv.h0000775000076400007640000000367310104454156007560 00000000000000/* * TreeView * A phylogenetic tree viewer. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: tv.h,v 1.4 2004/08/05 15:55:26 rdmp1c Exp $ #ifdef __GNUG__ // #pragma interface "docview.h" #endif #ifndef __DOCVIEWSAMPLEH__ #define __DOCVIEWSAMPLEH__ #include "wx/docmdi.h" class wxDocManager; // Define a new application class MyApp: public wxApp { public: MyApp(void); bool OnInit(void); int OnExit(void); wxMDIChildFrame *CreateChildFrame(wxDocument *doc, wxView *view, bool isCanvas); #ifdef __WXMAC__ virtual void MacOpenFile(const wxString &fileName); #endif protected: wxDocManager* m_docManager; }; DECLARE_APP(MyApp) // Define a new frame class MyCanvas; class MyFrame: public wxDocMDIParentFrame { DECLARE_CLASS(MyFrame) public: // wxMenu *editMenu; MyFrame(wxDocManager *manager, wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size, long type); void InitToolBar(wxToolBar* toolBar); void OnAbout(wxCommandEvent& event); MyCanvas *CreateCanvas(wxView *view, wxMDIChildFrame *parent); DECLARE_EVENT_TABLE() }; extern MyFrame *GetMainFrame(void); #define DOCVIEW_CUT 1 #define DOCVIEW_ABOUT 2 extern bool singleWindowMode; #endif tv-0.5/tview.h0000775000076400007640000000774710305270145010270 00000000000000/* * TreeView * A phylogenetic tree viewer. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: tview.h,v 1.21 2005/08/31 08:55:01 rdmp1c Exp $ #ifdef __GNUG__ // #pragma interface #endif #include "tproject.h" #ifndef __VIEWSAMPLEH__ #define __VIEWSAMPLEH__ #include "wx/docview.h" #define PREVIOUS_TREE_CMD 100 #define NEXT_TREE_CMD 101 #define SLANTED_TREE_CMD 102 #define RECTANGULAR_TREE_CMD 103 #define PHYLOGRAM_CMD 104 #define LEAF_FONT_CMD 105 #define CHOOSE_TREE_CMD 106 #define ORDER_TREE_CMD 107 #define SAVEAS_PICTURE_CMD 108 #define COPY_AS_TEXT_CMD 109 #define ZOOM_IN_CMD 110 #define ZOOM_OUT_CMD 111 #define ZOOM_TO_FIT_CMD 112 #define INTERNAL_LABELS_CMD 113 const int DEFAULT_ORDER = 0; const int ALPHA_ORDER = 1; const int LEFT_ORDER = 2; const int RIGHT_ORDER = 3; #define MAX_MAGNIFICATION 5 class MyCanvas: public wxScrolledWindow { public: wxView *view; MyCanvas(wxView *v, wxMDIChildFrame *frame, const wxPoint& pos, const wxSize& size, long style); virtual void OnDraw(wxDC& dc); virtual void OnSize(wxSizeEvent& event); void OnMouseEvent(wxMouseEvent& event); void Resize (); void SetMagnification (int m) { magnification = m; }; protected: int magnification; private: DECLARE_EVENT_TABLE() }; class TView: public wxView { public: wxMDIChildFrame *frame; MyCanvas *canvas; TView(); ~TView() {} void OnActivateView (bool activate, wxView *activeView, wxView *deactiveView); bool OnCreate(wxDocument *doc, long flags); void OnDraw(wxDC *dc); void OnUpdate(wxView *sender, wxObject *hint = (wxObject *) NULL); bool OnClose(bool deleteWindow = TRUE); virtual wxPrintout *OnCreatePrintout(); void OnSlant (wxCommandEvent& WXUNUSED(event) ); void OnRectangle (wxCommandEvent& WXUNUSED(event) ); void OnPhylogram (wxCommandEvent& WXUNUSED(event) ); void OnInternalLabels (wxCommandEvent& WXUNUSED(event) ); void OnLeafFont (wxCommandEvent& WXUNUSED(event) ); void OnChooseTree (wxCommandEvent& WXUNUSED(event) ); void OnOrderTree (wxCommandEvent& WXUNUSED(event) ); void OnSavePicture (wxCommandEvent& WXUNUSED(event) ); void NextTree (wxCommandEvent& WXUNUSED(event) ); void PreviousTree (wxCommandEvent& WXUNUSED(event) ); void ShowTreeName (); void TreeStyleMenu (int style); // Clipboard #ifndef __WXMOTIF__ void OnUpdateCopyCommand(wxUpdateUIEvent& event); void OnUpdatePasteCommand(wxUpdateUIEvent& event); void OnCopy (wxCommandEvent& event); void OnCopyAsText (wxCommandEvent& event); void OnPaste(wxCommandEvent& event); #endif // Zoom void ZoomToFit (wxCommandEvent& WXUNUSED(event) ); void ZoomIn (wxCommandEvent& WXUNUSED(event) ); void ZoomOut (wxCommandEvent& WXUNUSED(event) ); void Resize (); void OnUpdateZoomToFitCommand (wxUpdateUIEvent& event); void OnUpdateZoomInCommand (wxUpdateUIEvent& event); void OnUpdateZoomOutCommand (wxUpdateUIEvent& event); TProject p; unsigned int TreeFlags; int TreeStyleCmd; wxFont LeafFont; bool mShowInternalLabels; int page_width; int page_height; bool printing; int magnification; bool ReadTrees (const wxString &filename); bool WriteTrees (const wxString &filename); protected: int Order; private: DECLARE_DYNAMIC_CLASS(TView) DECLARE_EVENT_TABLE() }; #endif tv-0.5/tv.xcode/0000777000076400007640000000000011432555766010574 500000000000000tv-0.5/tv.xcode/rpage.pbxuser0000775000076400007640000006777410216536154013237 00000000000000// !$*UTF8*$! { 20286C28FDCF999611CA2CEA = { activeBuildStyle = 05952DFCFFF02D1B11CA0E50; activeExecutable = B30D63B107E1CF2B00F1DA33; activeTarget = B30D635D07E1CF2B00F1DA33; addToTargets = ( B30D635D07E1CF2B00F1DA33, ); breakpoints = ( ); codeSenseManager = B382848E07CA934E006079D9; executables = ( B30D63B107E1CF2B00F1DA33, ); perUserDictionary = { PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID; PBXFileTableDataSourceColumnWidthsKey = ( 20, 298.8799, 171.2085, ); PBXFileTableDataSourceColumnsKey = ( PBXErrorsWarningsDataSource_TypeID, PBXErrorsWarningsDataSource_MessageID, PBXErrorsWarningsDataSource_LocationID, ); }; PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; PBXFileTableDataSourceColumnWidthsKey = ( 22, 304.7974, 163.5835, ); PBXFileTableDataSourceColumnsKey = ( PBXExecutablesDataSource_ActiveFlagID, PBXExecutablesDataSource_NameID, PBXExecutablesDataSource_CommentsID, ); }; PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, 275, 20, 54, 43, 43, 20, ); PBXFileTableDataSourceColumnsKey = ( PBXFileDataSource_FiletypeID, PBXFileDataSource_Filename_ColumnID, PBXFileDataSource_Built_ColumnID, PBXFileDataSource_ObjectSize_ColumnID, PBXFileDataSource_Errors_ColumnID, PBXFileDataSource_Warnings_ColumnID, PBXFileDataSource_Target_ColumnID, ); }; PBXConfiguration.PBXFileTableDataSource3.PBXFindDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXFindDataSource_LocationID; PBXFileTableDataSourceColumnWidthsKey = ( 245.2974, 248.2085, ); PBXFileTableDataSourceColumnsKey = ( PBXFindDataSource_MessageID, PBXFindDataSource_LocationID, ); }; PBXConfiguration.PBXFileTableDataSource3.PBXSymbolsDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXSymbolsDataSource_SymbolNameID; PBXFileTableDataSourceColumnWidthsKey = ( 16, 129.8008, 159.0356, 136.2085, ); PBXFileTableDataSourceColumnsKey = ( PBXSymbolsDataSource_SymbolTypeIconID, PBXSymbolsDataSource_SymbolNameID, PBXSymbolsDataSource_SymbolTypeID, PBXSymbolsDataSource_ReferenceNameID, ); }; PBXConfiguration.PBXFileTableDataSource3.XCSCMDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, 20, 259, 20, 45, 43, 43, 20, ); PBXFileTableDataSourceColumnsKey = ( PBXFileDataSource_SCM_ColumnID, PBXFileDataSource_FiletypeID, PBXFileDataSource_Filename_ColumnID, PBXFileDataSource_Built_ColumnID, PBXFileDataSource_ObjectSize_ColumnID, PBXFileDataSource_Errors_ColumnID, PBXFileDataSource_Warnings_ColumnID, PBXFileDataSource_Target_ColumnID, ); }; PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, 239, 55, 20, 55, 43, 43, ); PBXFileTableDataSourceColumnsKey = ( PBXFileDataSource_FiletypeID, PBXFileDataSource_Filename_ColumnID, PBXTargetDataSource_PrimaryAttribute, PBXFileDataSource_Built_ColumnID, PBXFileDataSource_ObjectSize_ColumnID, PBXFileDataSource_Errors_ColumnID, PBXFileDataSource_Warnings_ColumnID, ); }; PBXPerProjectTemplateStateSaveDate = 132664769; PBXPrepackagedSmartGroups_v2 = ( { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; activationKey = OldTargetSmartGroup; clz = PBXTargetSmartGroup; description = "Displays all targets of the project."; globalID = 1C37FABC04509CD000000102; name = Targets; preferences = { image = Targets; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXTargetSmartGroup2; description = "Displays all targets of the project as well as nested build phases."; globalID = 1C37FBAC04509CD000000102; name = Targets; preferences = { image = Targets; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXExecutablesSmartGroup; description = "Displays all executables of the project."; globalID = 1C37FAAC04509CD000000102; name = Executables; preferences = { image = Executable; }; }, { " PBXTransientLocationAtTop " = bottom; absolutePathToBundle = ""; clz = PBXErrorsWarningsSmartGroup; description = "Displays files with errors or warnings."; globalID = 1C08E77C0454961000C914BD; name = "Errors and Warnings"; preferences = { fnmatch = ""; image = WarningsErrors; recursive = 1; regex = ""; root = ""; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXFilenameSmartGroup; description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; globalID = 1CC0EA4004350EF90044410B; name = "Implementation Files"; preferences = { canSave = 1; fnmatch = ""; image = SmartFolder; isLeaf = 0; recursive = 1; regex = "?*\\.[mcMC]"; root = ""; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXFilenameSmartGroup; description = "This group displays Interface Builder NIB Files."; globalID = 1CC0EA4004350EF90041110B; name = "NIB Files"; preferences = { canSave = 1; fnmatch = "*.nib"; image = SmartFolder; isLeaf = 0; recursive = 1; regex = ""; root = ""; }; }, { PBXTransientLocationAtTop = no; absolutePathToBundle = ""; clz = PBXFindSmartGroup; description = "Displays Find Results."; globalID = 1C37FABC05509CD000000102; name = "Find Results"; preferences = { image = spyglass; }; }, { PBXTransientLocationAtTop = no; absolutePathToBundle = ""; clz = PBXBookmarksSmartGroup; description = "Displays Project Bookmarks."; globalID = 1C37FABC05539CD112110102; name = Bookmarks; preferences = { image = Bookmarks; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = XCSCMSmartGroup; description = "Displays files with interesting SCM status."; globalID = E2644B35053B69B200211256; name = SCM; preferences = { image = PBXRepository; isLeaf = 0; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXSymbolsSmartGroup; description = "Displays all symbols for the project."; globalID = 1C37FABC04509CD000100104; name = "Project Symbols"; preferences = { image = ProjectSymbols; isLeaf = 1; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXFilenameSmartGroup; description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; globalID = PBXTemplateMarker; name = "Simple Filter SmartGroup"; preferences = { canSave = 1; fnmatch = "*.nib"; image = SmartFolder; isLeaf = 0; recursive = 1; regex = ""; root = ""; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXFilenameSmartGroup; description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; globalID = PBXTemplateMarker; name = "Simple Regular Expression SmartGroup"; preferences = { canSave = 1; fnmatch = ""; image = SmartFolder; isLeaf = 0; recursive = 1; regex = "?*\\.[mcMC]"; root = ""; }; }, { PBXTransientLocationAtTop = bottom; clz = XDDesignSmartGroup; description = "Displays Xdesign models"; globalID = 2E4A936305E6979E00701470; name = Design; preferences = { image = Design; isLeaf = 0; }; }, ); PBXWorkspaceContents = ( { LeftSlideOut = { Split0 = { Split0 = { NavContent0 = { bookmark = F585387106117B1901A80002; history = ( F5E2F10B05F7F86201A80003, F5E2F10D05F7F86201A80003, F5E2F10E05F7F86201A80003, F5E2F10F05F7F86201A80003, F5E2F11005F7F86201A80003, F5F3B9A406013AFC01A80002, F5F3B9A506013AFC01A80002, F5F3B9A606013AFC01A80002, F5F3B9A706013AFC01A80002, F585386F06117B1901A80002, F5F3B9A306013AFC01A80002, ); prevStack = ( F5E2F11205F7F86201A80003, F5E2F11305F7F86201A80003, F5E2F11405F7F86201A80003, F5E2F11505F7F86201A80003, F5E2F11605F7F86201A80003, F5E2F11705F7F86201A80003, F5E2F11805F7F86201A80003, F5E2F11905F7F86201A80003, F5E2F11A05F7F86201A80003, F5E2F11B05F7F86201A80003, F5E2F11C05F7F86201A80003, F5E2F11D05F7F86201A80003, F5E2F11E05F7F86201A80003, F5E2F11F05F7F86201A80003, F5E2F12005F7F86201A80003, F5E2F12105F7F86201A80003, F5E2F12205F7F86201A80003, F5F3B9A906013AFC01A80002, F5F3B9AA06013AFC01A80002, F5F3B9AB06013AFC01A80002, F5F3B9AC06013AFC01A80002, F5F3B9AD06013AFC01A80002, F5F3B9AE06013AFC01A80002, F5F3B9AF06013AFC01A80002, F5F3B9B006013AFC01A80002, F585387006117B1901A80002, ); }; NavCount = 1; NavGeometry0 = { Frame = "{{0, 0}, {560, 216}}"; NavBarVisible = YES; }; }; SplitCount = 1; Tab0 = { Debugger = { Split0 = { SplitCount = 2; }; SplitCount = 1; TabCount = 2; }; LauncherConfigVersion = 7; }; Tab1 = { LauncherConfigVersion = 3; Runner = { }; }; TabCount = 4; }; SplitCount = 1; Tab1 = { OptionsSetName = "Hierarchy, all classes"; }; TabCount = 5; }; }, ); PBXWorkspaceGeometries = ( { ContentSize = "{775, 516}"; LeftSlideOut = { ActiveTab = 3; Collapsed = NO; Frame = "{{0, 23}, {775, 493}}"; Split0 = { ActiveTab = 2; Collapsed = NO; Frame = "{{215, 0}, {560, 493}}"; Split0 = { Frame = "{{0, 277}, {560, 216}}"; }; SplitCount = 1; Tab0 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {572, 214}}"; Split0 = { Frame = "{{0, 24}, {572, 190}}"; Split0 = { Frame = "{{0, 0}, {279, 190}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 123, Value, 85, Summary, 62.123, ); Frame = "{{288, 0}, {284, 190}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {572, 214}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {572, 125}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {572, 125}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {562, 65}}"; BuildTranscriptFrame = "{{0, 74}, {562, 181}}"; Frame = "{{0, 0}, {560, 253}}"; }; Tab3 = { Frame = "{{0, 0}, {572, 265}}"; }; TabCount = 4; TabsVisible = YES; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {260, 493}}"; GroupTreeTableConfiguration = ( SCMStatusColumn, 22, TargetStatusColumn, 18, MainColumn, 205, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {247, 330}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 204, ); Frame = "{{0, 0}, {245, 549}}"; MembersFrame = "{{0, 339}, {247, 210}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 203, ); }; Tab2 = { Frame = "{{0, 0}, {226, 549}}"; }; Tab3 = { Frame = "{{0, 0}, {191, 493}}"; TargetTableConfiguration = ( ActiveObject, 16, ObjectNames, 202.296, ); }; Tab4 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 138, enabledColumn, 31, ); Frame = "{{0, 0}, {191, 549}}"; }; TabCount = 5; TabsVisible = YES; }; StatusViewVisible = YES; Template = F5F68CF101725D4C0D7A8F4C; ToolbarVisible = YES; WindowLocation = "{-1, 168}"; }, ); PBXWorkspaceStateSaveDate = 132664769; }; perUserProjectItems = { B33EB38C07E6A61C00855069 = B33EB38C07E6A61C00855069; B33EB38D07E6A61C00855069 = B33EB38D07E6A61C00855069; B33EB38E07E6A61C00855069 = B33EB38E07E6A61C00855069; B33EB38F07E6A61C00855069 = B33EB38F07E6A61C00855069; B33EB39007E6A61C00855069 = B33EB39007E6A61C00855069; B33EB39107E6A61C00855069 = B33EB39107E6A61C00855069; B33EB39207E6A61C00855069 = B33EB39207E6A61C00855069; B33EB39307E6A61C00855069 = B33EB39307E6A61C00855069; B33EB39607E6A61C00855069 = B33EB39607E6A61C00855069; B33EB39707E6A61C00855069 = B33EB39707E6A61C00855069; B33EB39807E6A61C00855069 = B33EB39807E6A61C00855069; B33EB39907E6A61C00855069 = B33EB39907E6A61C00855069; B33EB39A07E6A61C00855069 = B33EB39A07E6A61C00855069; B33EB39B07E6A61C00855069 = B33EB39B07E6A61C00855069; B33EB39C07E6A61C00855069 = B33EB39C07E6A61C00855069; B33EB39D07E6A61C00855069 = B33EB39D07E6A61C00855069; B33EB39E07E6A61C00855069 = B33EB39E07E6A61C00855069; B33EB3A007E6A68A00855069 = B33EB3A007E6A68A00855069; B33EB3AA07E6F7C300855069 = B33EB3AA07E6F7C300855069; B33EB3AB07E6F7C300855069 = B33EB3AB07E6F7C300855069; B33EB3BC07E6FA1B00855069 = B33EB3BC07E6FA1B00855069; B33EB3BD07E6FA1B00855069 = B33EB3BD07E6FA1B00855069; B33EB3BE07E6FA1B00855069 = B33EB3BE07E6FA1B00855069; B33EB3C107E6FA1B00855069 = B33EB3C107E6FA1B00855069; B352DCF207E61CC400F87D4E = B352DCF207E61CC400F87D4E; B359F62907CB9D5000F7069F = B359F62907CB9D5000F7069F; B359F62F07CB9D5000F7069F = B359F62F07CB9D5000F7069F; B359F63307CB9D5000F7069F = B359F63307CB9D5000F7069F; B385B8CD07CE139B00E7D8EF = B385B8CD07CE139B00E7D8EF; B3D7925D07E84E0700B56D1B = B3D7925D07E84E0700B56D1B; B3D7925F07E84E0700B56D1B = B3D7925F07E84E0700B56D1B; B3D7926507E8609F00B56D1B = B3D7926507E8609F00B56D1B; B3D7926607E8609F00B56D1B = B3D7926607E8609F00B56D1B; B3D7929007EAF31600B56D1B = B3D7929007EAF31600B56D1B; B3F0ECAF07E5C9860092E9FE = B3F0ECAF07E5C9860092E9FE; }; sourceControlManager = B382848D07CA934E006079D9; userBuildSettings = { }; }; B30D635D07E1CF2B00F1DA33 = { activeExec = 0; executables = ( B30D63B107E1CF2B00F1DA33, ); }; B30D63B107E1CF2B00F1DA33 = { activeArgIndex = 2147483647; activeArgIndices = ( ); argumentStrings = ( ); configStateDict = { }; cppStopOnCatchEnabled = 0; cppStopOnThrowEnabled = 0; customDataFormattersEnabled = 1; debuggerPlugin = GDBDebugging; disassemblyDisplayState = 0; dylibVariantSuffix = ""; enableDebugStr = 1; environmentEntries = ( ); isa = PBXExecutable; libgmallocEnabled = 0; name = "tv static"; savedGlobals = { }; shlibInfoDictList = ( ); sourceDirectories = ( ); }; B33EB36D07E6A5BF00855069 = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {479, 364}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {479, 253}}"; }; }; B33EB36F07E6A5FE00855069 = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {479, 433}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {479, 253}}"; }; }; B33EB37007E6A5FE00855069 = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {479, 349}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {479, 253}}"; }; }; B33EB37107E6A5FE00855069 = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {479, 350}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {479, 253}}"; }; }; B33EB37207E6A5FE00855069 = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {479, 391}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {479, 253}}"; }; }; B33EB37307E6A5FE00855069 = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {479, 433}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {479, 253}}"; }; }; B33EB37407E6A5FE00855069 = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {479, 336}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {479, 253}}"; }; }; B33EB37507E6A5FE00855069 = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {479, 336}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {479, 253}}"; }; }; B33EB38C07E6A61C00855069 = { fRef = F51C3E4C03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tdoc.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 853; vrLoc = 0; }; B33EB38D07E6A61C00855069 = { fRef = B33EB36D07E6A5BF00855069; isa = PBXTextBookmark; name = "copy.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 362; vrLoc = 0; }; B33EB38E07E6A61C00855069 = { fRef = B33EB36F07E6A5FE00855069; isa = PBXTextBookmark; name = "internal.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 459; vrLoc = 0; }; B33EB38F07E6A61C00855069 = { fRef = B33EB37007E6A5FE00855069; isa = PBXTextBookmark; name = "new.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 365; vrLoc = 0; }; B33EB39007E6A61C00855069 = { fRef = B33EB37107E6A5FE00855069; isa = PBXTextBookmark; name = "next.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 372; vrLoc = 0; }; B33EB39107E6A61C00855069 = { fRef = B33EB37207E6A5FE00855069; isa = PBXTextBookmark; name = "open.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 358; vrLoc = 0; }; B33EB39207E6A61C00855069 = { fRef = B33EB37407E6A5FE00855069; isa = PBXTextBookmark; name = "phylogram.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 513; vrLoc = 0; }; B33EB39307E6A61C00855069 = { fRef = B33EB37507E6A5FE00855069; isa = PBXTextBookmark; name = "previous.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 512; vrLoc = 0; }; B33EB39607E6A61C00855069 = { fRef = F51C3E4C03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tdoc.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 853; vrLoc = 0; }; B33EB39707E6A61C00855069 = { fRef = B33EB36D07E6A5BF00855069; isa = PBXTextBookmark; name = "copy.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 362; vrLoc = 0; }; B33EB39807E6A61C00855069 = { fRef = B33EB36F07E6A5FE00855069; isa = PBXTextBookmark; name = "internal.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 459; vrLoc = 0; }; B33EB39907E6A61C00855069 = { fRef = B33EB37007E6A5FE00855069; isa = PBXTextBookmark; name = "new.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 365; vrLoc = 0; }; B33EB39A07E6A61C00855069 = { fRef = B33EB37107E6A5FE00855069; isa = PBXTextBookmark; name = "next.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 372; vrLoc = 0; }; B33EB39B07E6A61C00855069 = { fRef = B33EB37207E6A5FE00855069; isa = PBXTextBookmark; name = "open.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 358; vrLoc = 0; }; B33EB39C07E6A61C00855069 = { fRef = B33EB37307E6A5FE00855069; isa = PBXTextBookmark; name = "paste.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 326; vrLoc = 0; }; B33EB39D07E6A61C00855069 = { fRef = B33EB37407E6A5FE00855069; isa = PBXTextBookmark; name = "phylogram.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 513; vrLoc = 0; }; B33EB39E07E6A61C00855069 = { fRef = B33EB37507E6A5FE00855069; isa = PBXTextBookmark; name = "previous.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 512; vrLoc = 0; }; B33EB3A007E6A68A00855069 = { fRef = B33EB37307E6A5FE00855069; isa = PBXTextBookmark; name = "paste.xpm: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 326; vrLoc = 0; }; B33EB3AA07E6F7C300855069 = { fRef = F5E2F10505F7EAD201A80003; isa = PBXBookmark; }; B33EB3AB07E6F7C300855069 = { fRef = F5E2F10605F7EAD201A80003; isa = PBXBookmark; }; B33EB3BC07E6FA1B00855069 = { fRef = F51C3E4E03C77F0C01E7B49E; isa = PBXTextBookmark; name = "MyApp::CreateChildFrame"; rLen = 23; rLoc = 8990; rType = 0; vrLen = 401; vrLoc = 12632; }; B33EB3BD07E6FA1B00855069 = { fRef = F51C3E4F03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tv.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 853; vrLoc = 0; }; B33EB3BE07E6FA1B00855069 = { fRef = F5E2F10505F7EAD201A80003; isa = PBXBookmark; }; B33EB3C107E6FA1B00855069 = { fRef = F51C3E4F03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tv.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 853; vrLoc = 0; }; B352DCF207E61CC400F87D4E = { fRef = F51C3E5003C77F0C01E7B49E; isa = PBXTextBookmark; name = "tview.cpp: 1039"; rLen = 0; rLoc = 27314; rType = 0; vrLen = 427; vrLoc = 16741; }; B359F62907CB9D5000F7069F = { fRef = F51C3E4D03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tproject.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 764; vrLoc = 0; }; B359F62F07CB9D5000F7069F = { fRef = F51C3E5003C77F0C01E7B49E; isa = PBXTextBookmark; name = "tview.cpp: 723"; rLen = 0; rLoc = 17146; rType = 0; vrLen = 464; vrLoc = 16994; }; B359F63307CB9D5000F7069F = { fRef = F51C3E4D03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tproject.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 764; vrLoc = 0; }; B382848D07CA934E006079D9 = { fallbackIsa = XCSourceControlManager; isSCMEnabled = 1; isa = PBXSourceControlManager; scmConfiguration = { }; scmType = scm.cvs; }; B382848E07CA934E006079D9 = { indexTemplatePath = ""; isa = PBXCodeSenseManager; usesDefaults = 1; wantsCodeCompletion = 1; wantsCodeCompletionAutoSuggestions = 0; wantsCodeCompletionCaseSensitivity = 1; wantsCodeCompletionListAlways = 1; wantsCodeCompletionOnlyMatchingItems = 1; wantsCodeCompletionParametersIncluded = 1; wantsCodeCompletionPlaceholdersInserted = 1; wantsCodeCompletionTabCompletes = 1; wantsIndex = 1; }; B38284AC07CA9648006079D9 = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {555, 2085}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {555, 564}}"; sepNavWindowFrame = "{{150, 99}, {750, 558}}"; }; }; B385B8CD07CE139B00E7D8EF = { fRef = F51C3E4E03C77F0C01E7B49E; isa = PBXTextBookmark; name = picture; rLen = 7; rLoc = 10567; rType = 0; vrLen = 775; vrLoc = 9826; }; B3D7925D07E84E0700B56D1B = { fRef = F5E2F10605F7EAD201A80003; isa = PBXBookmark; }; B3D7925F07E84E0700B56D1B = { fRef = F5E2F10605F7EAD201A80003; isa = PBXBookmark; }; B3D7926507E8609F00B56D1B = { isa = PBXTargetBookmark; trg = B30D635D07E1CF2B00F1DA33; uiCtxt = { TOCViewDetailVisibleRect = "{{0, 236}, {346, 236}}"; TOCViewExpandedItems = ( "com.apple.target-editor-pane.settings", "com.apple.target-editor-pane.settings.simple", "com.apple.target-editor-pane.info-plist", "com.apple.target-editor-pane.info-plist.simple", "com.apple.target-editor-pane.buildphases", ); TOCViewMasterVisibleRect = "{{0, 0}, {133, 236}}"; TOCViewSelectedItems = ( "com.apple.target-editor-pane.settings.compiler.gcc", ); }; }; B3D7926607E8609F00B56D1B = { isa = PBXTargetBookmark; trg = B30D635D07E1CF2B00F1DA33; uiCtxt = { TOCViewDetailVisibleRect = "{{0, 236}, {346, 236}}"; TOCViewExpandedItems = ( "com.apple.target-editor-pane.settings", "com.apple.target-editor-pane.settings.simple", "com.apple.target-editor-pane.info-plist", "com.apple.target-editor-pane.info-plist.simple", "com.apple.target-editor-pane.buildphases", ); TOCViewMasterVisibleRect = "{{0, 0}, {133, 236}}"; TOCViewSelectedItems = ( "com.apple.target-editor-pane.settings.compiler.gcc", ); }; }; B3D7929007EAF31600B56D1B = { fRef = F51C3E4E03C77F0C01E7B49E; isa = PBXTextBookmark; name = "MyApp::CreateChildFrame"; rLen = 23; rLoc = 8990; rType = 0; vrLen = 401; vrLoc = 12632; }; B3F0ECAF07E5C9860092E9FE = { isa = PBXTargetBookmark; trg = B30D635D07E1CF2B00F1DA33; }; F51C3DDD03C77A7801E7B49E = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {692, 8231}}"; sepNavSelRange = "{8606, 33}"; sepNavVisRect = "{{0, 4676}, {459, 183}}"; }; }; F51C3DDE03C77A7801E7B49E = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {512, 2099}}"; sepNavSelRange = "{1196, 23}"; sepNavVisRect = "{{0, 420}, {459, 183}}"; }; }; F51C3DE303C77A7801E7B49E = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {842, 11787}}"; sepNavSelRange = "{7266, 0}"; sepNavVisRect = "{{0, 3671}, {711, 428}}"; sepNavWindowFrame = "{{188, 154}, {750, 558}}"; }; }; F51C3E1D03C77CE101E7B49E = { uiCtxt = { sepNavWindowFrame = "{{15, 71}, {750, 502}}"; }; }; F51C3E4B03C77F0C01E7B49E = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {711, 1203}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {711, 428}}"; sepNavWindowFrame = "{{58, 183}, {750, 558}}"; }; }; F51C3E4D03C77F0C01E7B49E = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {626, 1581}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {433, 225}}"; sepNavWindowFrame = "{{38, 50}, {750, 502}}"; }; }; F51C3E4E03C77F0C01E7B49E = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {986, 8021}}"; sepNavSelRange = "{8990, 23}"; sepNavVisRect = "{{0, 5306}, {479, 253}}"; sepNavWindowFrame = "{{90, 165}, {750, 558}}"; }; }; F51C3E4F03C77F0C01E7B49E = { uiCtxt = { sepNavWindowFrame = "{{15, 71}, {750, 502}}"; }; }; F51C3E5003C77F0C01E7B49E = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {764, 14559}}"; sepNavSelRange = "{2116, 0}"; sepNavVisRect = "{{0, 4793}, {711, 428}}"; sepNavWindowFrame = "{{73, 122}, {750, 558}}"; }; }; F51C3E5103C77F0C01E7B49E = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {711, 2212}}"; sepNavSelRange = "{4061, 0}"; sepNavVisRect = "{{0, 1783}, {711, 428}}"; sepNavWindowFrame = "{{127, 120}, {750, 558}}"; }; }; F53CB88A03CB09B3012A40F8 = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {711, 559}}"; sepNavSelRange = "{1256, 0}"; sepNavVisRect = "{{0, 131}, {711, 428}}"; sepNavWindowFrame = "{{122, 120}, {750, 558}}"; }; }; F53CB88D03CB0A26012A40F8 = { uiCtxt = { sepNavWindowFrame = "{{15, 71}, {750, 502}}"; }; }; F5E2F10505F7EAD201A80003 = { uiCtxt = { sepNavWindowFrame = "{{81, 162}, {750, 558}}"; }; }; } tv-0.5/tv.xcode/project.pbxproj0000775000076400007640000013007610216536153013564 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 39; objects = { 0249A669FF388E3911CA2CEA = { isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libstdc++.a"; path = "/usr/lib/libstdc++.a"; refType = 0; sourceTree = ""; }; //020 //021 //022 //023 //024 //050 //051 //052 //053 //054 05952DFCFFF02D1B11CA0E50 = { buildSettings = { COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CPLUSPLUSFLAGS = "-D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -DUSE_WXWINDOWS -D__WXMAC__ -DWX_PRECOMP -DNO_GCC_PRAGMA -I/usr/local/lib/wx/include/mac-ansi-release-2.5 -I/usr/local/include/wx-2.5"; ZERO_LINK = YES; }; isa = PBXBuildStyle; name = Development; }; 05952DFDFFF02D1B11CA0E50 = { buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; ZERO_LINK = NO; }; isa = PBXBuildStyle; name = Deployment; }; //050 //051 //052 //053 //054 //190 //191 //192 //193 //194 195DF8C9FE9D4F0611CA2CBB = { children = ( B30D63B007E1CF2B00F1DA33, ); isa = PBXGroup; name = Products; refType = 4; sourceTree = ""; }; //190 //191 //192 //193 //194 //200 //201 //202 //203 //204 20286C28FDCF999611CA2CEA = { buildSettings = { }; buildStyles = ( 05952DFCFFF02D1B11CA0E50, 05952DFDFFF02D1B11CA0E50, ); hasScannedForEncodings = 0; isa = PBXProject; mainGroup = 20286C29FDCF999611CA2CEA; projectDirPath = ""; targets = ( B30D635D07E1CF2B00F1DA33, ); }; 20286C29FDCF999611CA2CEA = { children = ( B382849307CA955F006079D9, F51C3E0A03C77CB501E7B49E, F51C3DDC03C77A2301E7B49E, 20286C2AFDCF999611CA2CEA, 20286C2CFDCF999611CA2CEA, 20286C32FDCF999611CA2CEA, 195DF8C9FE9D4F0611CA2CBB, ); isa = PBXGroup; name = "¬´PROJECTNAME¬ª"; path = ""; refType = 4; sourceTree = ""; }; 20286C2AFDCF999611CA2CEA = { children = ( F53CB89103CB2010012A40F8, F51C3E4B03C77F0C01E7B49E, F51C3E4C03C77F0C01E7B49E, F51C3E4D03C77F0C01E7B49E, F51C3E4E03C77F0C01E7B49E, F51C3E4F03C77F0C01E7B49E, F51C3E5003C77F0C01E7B49E, F51C3E5103C77F0C01E7B49E, ); isa = PBXGroup; name = Sources; path = ""; refType = 4; sourceTree = ""; }; 20286C2CFDCF999611CA2CEA = { children = ( B33EB36C07E6A58700855069, B38284AC07CA9648006079D9, F5E2F10505F7EAD201A80003, F5E2F10605F7EAD201A80003, ); isa = PBXGroup; name = Resources; path = ""; refType = 4; sourceTree = ""; }; 20286C32FDCF999611CA2CEA = { children = ( B3F0ECCB07E5CBF30092E9FE, B3F0ECBF07E5CB8F0092E9FE, B30D63BC07E1DA3100F1DA33, B382870807CA9A4B006079D9, B382870907CA9A4B006079D9, B382870A07CA9A4B006079D9, B382870B07CA9A4B006079D9, 20286C33FDCF999611CA2CEA, 0249A669FF388E3911CA2CEA, ); isa = PBXGroup; name = "External Frameworks and Libraries"; path = ""; refType = 4; sourceTree = ""; }; 20286C33FDCF999611CA2CEA = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; refType = 0; sourceTree = ""; }; //200 //201 //202 //203 //204 //B30 //B31 //B32 //B33 //B34 B30D635D07E1CF2B00F1DA33 = { buildPhases = ( B30D635E07E1CF2B00F1DA33, B30D637F07E1CF2B00F1DA33, B30D638207E1CF2B00F1DA33, B30D639F07E1CF2B00F1DA33, B30D63AE07E1CF2B00F1DA33, ); buildSettings = { FRAMEWORK_SEARCH_PATHS = ""; HEADER_SEARCH_PATHS = "TreeLib/gport /usr/local/lib/wx/include/mac-2.4"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = "/usr/local/lib /Users/rpage/development/tv"; OTHER_CFLAGS = "-Wno-deprecated -D__WXMAC__ -DWXMAKINGDLL -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -DUSE_WXWINDOWS"; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = Carbon.r; PREBINDING = NO; PRODUCT_NAME = "TreeView X"; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = app; }; dependencies = ( ); isa = PBXApplicationTarget; name = "tv static"; productInstallPath = "$(HOME)/Applications"; productName = "¬´PROJECTNAME¬ª"; productReference = B30D63B007E1CF2B00F1DA33; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleDocumentTypes CFBundleTypeExtensions tre CFBundleTypeIconFile doc.icns CFBundleTypeName TreeView X document CFBundleTypeOSTypes TEXT CFBundleTypeRole Viewer CFBundleTypeExtensions tree CFBundleTypeIconFile doc.icns CFBundleTypeName TreeView X document CFBundleTypeOSTypes TEXT CFBundleTypeRole Viewer CFBundleTypeExtensions * CFBundleTypeName Plain text CFBundleTypeOSTypes **** CFBundleTypeRole Viewer CFBundleExecutable TreeView X CFBundleGetInfoString TreeView X (c) 2004 Roderic D. M. Page CFBundleIconFile app.icns CFBundleIdentifier uk.ac.gla.zoology.treeviewx CFBundleInfoDictionaryVersion 6.0 CFBundleName TreeView X CFBundlePackageType APPL CFBundleShortVersionString 0.4.1 CFBundleSignature TreX CFBundleVersion 0.4.1 CSResourcesFileMapped "; }; B30D635E07E1CF2B00F1DA33 = { buildActionMask = 2147483647; files = ( B30D635F07E1CF2B00F1DA33, B30D636007E1CF2B00F1DA33, B30D636107E1CF2B00F1DA33, B30D636207E1CF2B00F1DA33, B30D636307E1CF2B00F1DA33, B30D636407E1CF2B00F1DA33, B30D636507E1CF2B00F1DA33, B30D636607E1CF2B00F1DA33, B30D636707E1CF2B00F1DA33, B30D636807E1CF2B00F1DA33, B30D636907E1CF2B00F1DA33, B30D636A07E1CF2B00F1DA33, B30D636B07E1CF2B00F1DA33, B30D636C07E1CF2B00F1DA33, B30D636D07E1CF2B00F1DA33, B30D636E07E1CF2B00F1DA33, B30D636F07E1CF2B00F1DA33, B30D637007E1CF2B00F1DA33, B30D637107E1CF2B00F1DA33, B30D637207E1CF2B00F1DA33, B30D637307E1CF2B00F1DA33, B30D637407E1CF2B00F1DA33, B30D637507E1CF2B00F1DA33, B30D637607E1CF2B00F1DA33, B30D637707E1CF2B00F1DA33, B30D637807E1CF2B00F1DA33, B30D637907E1CF2B00F1DA33, B30D637A07E1CF2B00F1DA33, B30D637B07E1CF2B00F1DA33, B30D637C07E1CF2B00F1DA33, B30D637D07E1CF2B00F1DA33, B30D637E07E1CF2B00F1DA33, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; B30D635F07E1CF2B00F1DA33 = { fileRef = F51C3DDE03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636007E1CF2B00F1DA33 = { fileRef = F51C3DE203C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636107E1CF2B00F1DA33 = { fileRef = F51C3DE303C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636207E1CF2B00F1DA33 = { fileRef = F51C3DE503C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636307E1CF2B00F1DA33 = { fileRef = F51C3DE703C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636407E1CF2B00F1DA33 = { fileRef = F51C3DE903C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636507E1CF2B00F1DA33 = { fileRef = F51C3DEB03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636607E1CF2B00F1DA33 = { fileRef = F51C3DED03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636707E1CF2B00F1DA33 = { fileRef = F51C3DEF03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636807E1CF2B00F1DA33 = { fileRef = F51C3E0403C77AF401E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636907E1CF2B00F1DA33 = { fileRef = F51C3E0C03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636A07E1CF2B00F1DA33 = { fileRef = F51C3E0E03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636B07E1CF2B00F1DA33 = { fileRef = F51C3E1003C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636C07E1CF2B00F1DA33 = { fileRef = F51C3E1203C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636D07E1CF2B00F1DA33 = { fileRef = F51C3E1403C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636E07E1CF2B00F1DA33 = { fileRef = F51C3E1603C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D636F07E1CF2B00F1DA33 = { fileRef = F51C3E1803C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637007E1CF2B00F1DA33 = { fileRef = F51C3E1A03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637107E1CF2B00F1DA33 = { fileRef = F51C3E1C03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637207E1CF2B00F1DA33 = { fileRef = F51C3E1E03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637307E1CF2B00F1DA33 = { fileRef = F51C3E2003C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637407E1CF2B00F1DA33 = { fileRef = F51C3E2203C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637507E1CF2B00F1DA33 = { fileRef = F51C3E2403C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637607E1CF2B00F1DA33 = { fileRef = F51C3E2603C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637707E1CF2B00F1DA33 = { fileRef = F51C3E2803C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637807E1CF2B00F1DA33 = { fileRef = F51C3E2A03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637907E1CF2B00F1DA33 = { fileRef = F51C3E4C03C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637A07E1CF2B00F1DA33 = { fileRef = F51C3E4F03C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637B07E1CF2B00F1DA33 = { fileRef = F51C3E5103C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637C07E1CF2B00F1DA33 = { fileRef = F51C3E4D03C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; B30D637D07E1CF2B00F1DA33 = { fileRef = F53CB88A03CB09B3012A40F8; isa = PBXBuildFile; settings = { }; }; B30D637E07E1CF2B00F1DA33 = { fileRef = F5E2F10905F7EFFC01A80003; isa = PBXBuildFile; settings = { }; }; B30D637F07E1CF2B00F1DA33 = { buildActionMask = 2147483647; files = ( B30D638007E1CF2B00F1DA33, B30D638107E1CF2B00F1DA33, B33EB36E07E6A5BF00855069, B33EB37D07E6A5FE00855069, B33EB37E07E6A5FE00855069, B33EB37F07E6A5FE00855069, B33EB38007E6A5FE00855069, B33EB38107E6A5FE00855069, B33EB38207E6A5FE00855069, B33EB38307E6A5FE00855069, B33EB38407E6A5FE00855069, B33EB38507E6A5FE00855069, B33EB38607E6A5FE00855069, B33EB38707E6A5FE00855069, B33EB38807E6A5FE00855069, B33EB38907E6A5FE00855069, B33EB38A07E6A5FE00855069, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; B30D638007E1CF2B00F1DA33 = { fileRef = F5E2F10505F7EAD201A80003; isa = PBXBuildFile; settings = { }; }; B30D638107E1CF2B00F1DA33 = { fileRef = F5E2F10605F7EAD201A80003; isa = PBXBuildFile; settings = { }; }; B30D638207E1CF2B00F1DA33 = { buildActionMask = 2147483647; files = ( B30D638307E1CF2B00F1DA33, B30D638407E1CF2B00F1DA33, B30D638507E1CF2B00F1DA33, B30D638607E1CF2B00F1DA33, B30D638707E1CF2B00F1DA33, B30D638807E1CF2B00F1DA33, B30D638907E1CF2B00F1DA33, B30D638A07E1CF2B00F1DA33, B30D638B07E1CF2B00F1DA33, B30D638C07E1CF2B00F1DA33, B30D638D07E1CF2B00F1DA33, B30D638E07E1CF2B00F1DA33, B30D638F07E1CF2B00F1DA33, B30D639007E1CF2B00F1DA33, B30D639107E1CF2B00F1DA33, B30D639207E1CF2B00F1DA33, B30D639307E1CF2B00F1DA33, B30D639407E1CF2B00F1DA33, B30D639507E1CF2B00F1DA33, B30D639607E1CF2B00F1DA33, B30D639707E1CF2B00F1DA33, B30D639807E1CF2B00F1DA33, B30D639907E1CF2B00F1DA33, B30D639A07E1CF2B00F1DA33, B30D639B07E1CF2B00F1DA33, B30D639C07E1CF2B00F1DA33, B30D639D07E1CF2B00F1DA33, B30D639E07E1CF2B00F1DA33, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; B30D638307E1CF2B00F1DA33 = { fileRef = F51C3DDD03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638407E1CF2B00F1DA33 = { fileRef = F51C3DE103C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638507E1CF2B00F1DA33 = { fileRef = F51C3DE403C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638607E1CF2B00F1DA33 = { fileRef = F51C3DE603C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638707E1CF2B00F1DA33 = { fileRef = F51C3DE803C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638807E1CF2B00F1DA33 = { fileRef = F51C3DEA03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638907E1CF2B00F1DA33 = { fileRef = F51C3DEC03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638A07E1CF2B00F1DA33 = { fileRef = F51C3DEE03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638B07E1CF2B00F1DA33 = { fileRef = F51C3E0B03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638C07E1CF2B00F1DA33 = { fileRef = F51C3E0D03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638D07E1CF2B00F1DA33 = { fileRef = F51C3E0F03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638E07E1CF2B00F1DA33 = { fileRef = F51C3E1103C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D638F07E1CF2B00F1DA33 = { fileRef = F51C3E1303C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639007E1CF2B00F1DA33 = { fileRef = F51C3E1503C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639107E1CF2B00F1DA33 = { fileRef = F51C3E1703C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639207E1CF2B00F1DA33 = { fileRef = F51C3E1903C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639307E1CF2B00F1DA33 = { fileRef = F51C3E1B03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639407E1CF2B00F1DA33 = { fileRef = F51C3E1D03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639507E1CF2B00F1DA33 = { fileRef = F51C3E1F03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639607E1CF2B00F1DA33 = { fileRef = F51C3E2103C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639707E1CF2B00F1DA33 = { fileRef = F51C3E2303C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639807E1CF2B00F1DA33 = { fileRef = F51C3E2503C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639907E1CF2B00F1DA33 = { fileRef = F51C3E2703C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639A07E1CF2B00F1DA33 = { fileRef = F51C3E2903C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639B07E1CF2B00F1DA33 = { fileRef = F51C3E4B03C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639C07E1CF2B00F1DA33 = { fileRef = F51C3E4E03C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639D07E1CF2B00F1DA33 = { fileRef = F51C3E5003C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; B30D639E07E1CF2B00F1DA33 = { fileRef = F53CB88D03CB0A26012A40F8; isa = PBXBuildFile; settings = { }; }; B30D639F07E1CF2B00F1DA33 = { buildActionMask = 2147483647; files = ( B30D63A007E1CF2B00F1DA33, B30D63A107E1CF2B00F1DA33, B30D63A207E1CF2B00F1DA33, B30D63A307E1CF2B00F1DA33, B30D63A407E1CF2B00F1DA33, B30D63A507E1CF2B00F1DA33, B30D63BF07E1DA5A00F1DA33, B30D63CA07E1DA6900F1DA33, B30D63CD07E1DA6900F1DA33, B30D63CE07E1DA6900F1DA33, B30D63CF07E1DA6900F1DA33, B30D63D107E1DA6900F1DA33, B30D63D207E1DA6900F1DA33, B30D63D707E1DAC800F1DA33, B3F0ECC007E5CB8F0092E9FE, B3F0ECC607E5CBD00092E9FE, B3F0ECC707E5CBD00092E9FE, B3F0ECC807E5CBD00092E9FE, B3F0ECCC07E5CBF30092E9FE, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; B30D63A007E1CF2B00F1DA33 = { fileRef = 20286C33FDCF999611CA2CEA; isa = PBXBuildFile; settings = { }; }; B30D63A107E1CF2B00F1DA33 = { fileRef = 0249A669FF388E3911CA2CEA; isa = PBXBuildFile; settings = { }; }; B30D63A207E1CF2B00F1DA33 = { fileRef = B382870807CA9A4B006079D9; isa = PBXBuildFile; settings = { }; }; B30D63A307E1CF2B00F1DA33 = { fileRef = B382870907CA9A4B006079D9; isa = PBXBuildFile; settings = { }; }; B30D63A407E1CF2B00F1DA33 = { fileRef = B382870A07CA9A4B006079D9; isa = PBXBuildFile; settings = { }; }; B30D63A507E1CF2B00F1DA33 = { fileRef = B382870B07CA9A4B006079D9; isa = PBXBuildFile; settings = { }; }; B30D63AE07E1CF2B00F1DA33 = { buildActionMask = 2147483647; files = ( B30D63AF07E1CF2B00F1DA33, ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; B30D63AF07E1CF2B00F1DA33 = { fileRef = B38284AC07CA9648006079D9; isa = PBXBuildFile; settings = { }; }; B30D63B007E1CF2B00F1DA33 = { explicitFileType = wrapper.application; includeInIndex = 0; isa = PBXFileReference; path = "TreeView X.app"; refType = 3; sourceTree = BUILT_PRODUCTS_DIR; }; B30D63BC07E1DA3100F1DA33 = { children = ( B3F0ECC307E5CBD00092E9FE, B3F0ECC407E5CBD00092E9FE, B3F0ECC507E5CBD00092E9FE, B30D63D607E1DAC800F1DA33, B30D63C107E1DA6800F1DA33, B30D63C407E1DA6800F1DA33, B30D63C507E1DA6800F1DA33, B30D63C607E1DA6800F1DA33, B30D63C807E1DA6900F1DA33, B30D63C907E1DA6900F1DA33, B30D63BE07E1DA5A00F1DA33, ); isa = PBXGroup; name = "wxWidgets static"; refType = 4; sourceTree = ""; }; B30D63BE07E1DA5A00F1DA33 = { isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libwx_mac_xrc-2.5.a"; path = "/usr/local/lib/libwx_mac_xrc-2.5.a"; refType = 0; sourceTree = ""; }; B30D63BF07E1DA5A00F1DA33 = { fileRef = B30D63BE07E1DA5A00F1DA33; isa = PBXBuildFile; settings = { }; }; B30D63C107E1DA6800F1DA33 = { isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libwx_mac_adv-2.5.a"; refType = 4; sourceTree = ""; }; B30D63C407E1DA6800F1DA33 = { isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libwx_base_carbon-2.5.a"; refType = 4; sourceTree = ""; }; B30D63C507E1DA6800F1DA33 = { isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libwx_base_carbon_xml-2.5.a"; refType = 4; sourceTree = ""; }; B30D63C607E1DA6800F1DA33 = { isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libwx_mac_html-2.5.a"; refType = 4; sourceTree = ""; }; B30D63C807E1DA6900F1DA33 = { isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libwx_base_carbon_net-2.5.a"; refType = 4; sourceTree = ""; }; B30D63C907E1DA6900F1DA33 = { isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libwx_mac_core-2.5.a"; refType = 4; sourceTree = ""; }; B30D63CA07E1DA6900F1DA33 = { fileRef = B30D63C107E1DA6800F1DA33; isa = PBXBuildFile; settings = { }; }; B30D63CD07E1DA6900F1DA33 = { fileRef = B30D63C407E1DA6800F1DA33; isa = PBXBuildFile; settings = { }; }; B30D63CE07E1DA6900F1DA33 = { fileRef = B30D63C507E1DA6800F1DA33; isa = PBXBuildFile; settings = { }; }; B30D63CF07E1DA6900F1DA33 = { fileRef = B30D63C607E1DA6800F1DA33; isa = PBXBuildFile; settings = { }; }; B30D63D107E1DA6900F1DA33 = { fileRef = B30D63C807E1DA6900F1DA33; isa = PBXBuildFile; settings = { }; }; B30D63D207E1DA6900F1DA33 = { fileRef = B30D63C907E1DA6900F1DA33; isa = PBXBuildFile; settings = { }; }; B30D63D607E1DAC800F1DA33 = { isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libwx_mac_svg-2.5.a"; refType = 4; sourceTree = ""; }; B30D63D707E1DAC800F1DA33 = { fileRef = B30D63D607E1DAC800F1DA33; isa = PBXBuildFile; settings = { }; }; B33EB36C07E6A58700855069 = { children = ( B33EB36F07E6A5FE00855069, B33EB37007E6A5FE00855069, B33EB37107E6A5FE00855069, B33EB37207E6A5FE00855069, B33EB37307E6A5FE00855069, B33EB37407E6A5FE00855069, B33EB37507E6A5FE00855069, B33EB37607E6A5FE00855069, B33EB37707E6A5FE00855069, B33EB37807E6A5FE00855069, B33EB37907E6A5FE00855069, B33EB37A07E6A5FE00855069, B33EB37B07E6A5FE00855069, B33EB37C07E6A5FE00855069, B33EB36D07E6A5BF00855069, ); isa = PBXGroup; name = Bitmaps; refType = 4; sourceTree = ""; }; B33EB36D07E6A5BF00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = copy.xpm; path = bitmaps/mac/copy.xpm; refType = 4; sourceTree = ""; }; B33EB36E07E6A5BF00855069 = { fileRef = B33EB36D07E6A5BF00855069; isa = PBXBuildFile; settings = { }; }; B33EB36F07E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = internal.xpm; path = bitmaps/mac/internal.xpm; refType = 4; sourceTree = ""; }; B33EB37007E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = new.xpm; path = bitmaps/mac/new.xpm; refType = 4; sourceTree = ""; }; B33EB37107E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = next.xpm; path = bitmaps/mac/next.xpm; refType = 4; sourceTree = ""; }; B33EB37207E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = open.xpm; path = bitmaps/mac/open.xpm; refType = 4; sourceTree = ""; }; B33EB37307E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = paste.xpm; path = bitmaps/mac/paste.xpm; refType = 4; sourceTree = ""; }; B33EB37407E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = phylogram.xpm; path = bitmaps/mac/phylogram.xpm; refType = 4; sourceTree = ""; }; B33EB37507E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = previous.xpm; path = bitmaps/mac/previous.xpm; refType = 4; sourceTree = ""; }; B33EB37607E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = print_preview.xpm; path = bitmaps/mac/print_preview.xpm; refType = 4; sourceTree = ""; }; B33EB37707E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = print.xpm; path = bitmaps/mac/print.xpm; refType = 4; sourceTree = ""; }; B33EB37807E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = rectangletree.xpm; path = bitmaps/mac/rectangletree.xpm; refType = 4; sourceTree = ""; }; B33EB37907E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = saveas.xpm; path = bitmaps/mac/saveas.xpm; refType = 4; sourceTree = ""; }; B33EB37A07E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = slanttree.xpm; path = bitmaps/mac/slanttree.xpm; refType = 4; sourceTree = ""; }; B33EB37B07E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = zoomin.xpm; path = bitmaps/mac/zoomin.xpm; refType = 4; sourceTree = ""; }; B33EB37C07E6A5FE00855069 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = text; name = zoomout.xpm; path = bitmaps/mac/zoomout.xpm; refType = 4; sourceTree = ""; }; B33EB37D07E6A5FE00855069 = { fileRef = B33EB36F07E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB37E07E6A5FE00855069 = { fileRef = B33EB37007E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB37F07E6A5FE00855069 = { fileRef = B33EB37107E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB38007E6A5FE00855069 = { fileRef = B33EB37207E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB38107E6A5FE00855069 = { fileRef = B33EB37307E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB38207E6A5FE00855069 = { fileRef = B33EB37407E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB38307E6A5FE00855069 = { fileRef = B33EB37507E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB38407E6A5FE00855069 = { fileRef = B33EB37607E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB38507E6A5FE00855069 = { fileRef = B33EB37707E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB38607E6A5FE00855069 = { fileRef = B33EB37807E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB38707E6A5FE00855069 = { fileRef = B33EB37907E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB38807E6A5FE00855069 = { fileRef = B33EB37A07E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB38907E6A5FE00855069 = { fileRef = B33EB37B07E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B33EB38A07E6A5FE00855069 = { fileRef = B33EB37C07E6A5FE00855069; isa = PBXBuildFile; settings = { }; }; B382849307CA955F006079D9 = { children = ( ); isa = PBXGroup; name = Headers; refType = 4; sourceTree = ""; }; B38284AC07CA9648006079D9 = { fileEncoding = 30; isa = PBXFileReference; lastKnownFileType = sourcecode.rez; name = "libwx_mac-2.5.3.r"; path = "/usr/local/lib/libwx_mac-2.5.3.r"; refType = 0; sourceTree = ""; }; B382870807CA9A4B006079D9 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; refType = 0; sourceTree = ""; }; B382870907CA9A4B006079D9 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; refType = 0; sourceTree = ""; }; B382870A07CA9A4B006079D9 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; refType = 0; sourceTree = ""; }; B382870B07CA9A4B006079D9 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = System.framework; path = /System/Library/Frameworks/System.framework; refType = 0; sourceTree = ""; }; B3F0ECBF07E5CB8F0092E9FE = { isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = /usr/lib/libiconv.dylib; refType = 0; sourceTree = ""; }; B3F0ECC007E5CB8F0092E9FE = { fileRef = B3F0ECBF07E5CB8F0092E9FE; isa = PBXBuildFile; settings = { }; }; B3F0ECC307E5CBD00092E9FE = { isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libwxtiff-2.5.a"; path = "/usr/local/lib/libwxtiff-2.5.a"; refType = 0; sourceTree = ""; }; B3F0ECC407E5CBD00092E9FE = { isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libwxpng-2.5.a"; path = "/usr/local/lib/libwxpng-2.5.a"; refType = 0; sourceTree = ""; }; B3F0ECC507E5CBD00092E9FE = { isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libwxjpeg-2.5.a"; path = "/usr/local/lib/libwxjpeg-2.5.a"; refType = 0; sourceTree = ""; }; B3F0ECC607E5CBD00092E9FE = { fileRef = B3F0ECC307E5CBD00092E9FE; isa = PBXBuildFile; settings = { }; }; B3F0ECC707E5CBD00092E9FE = { fileRef = B3F0ECC407E5CBD00092E9FE; isa = PBXBuildFile; settings = { }; }; B3F0ECC807E5CBD00092E9FE = { fileRef = B3F0ECC507E5CBD00092E9FE; isa = PBXBuildFile; settings = { }; }; B3F0ECCB07E5CBF30092E9FE = { isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; refType = 0; sourceTree = ""; }; B3F0ECCC07E5CBF30092E9FE = { fileRef = B3F0ECCB07E5CBF30092E9FE; isa = PBXBuildFile; settings = { }; }; //B30 //B31 //B32 //B33 //B34 //F50 //F51 //F52 //F53 //F54 F51C3DDC03C77A2301E7B49E = { children = ( F51C3E0303C77AF401E7B49E, F51C3DDD03C77A7801E7B49E, F51C3DDE03C77A7801E7B49E, F51C3DE103C77A7801E7B49E, F51C3DE203C77A7801E7B49E, F51C3DE303C77A7801E7B49E, F51C3DE403C77A7801E7B49E, F51C3DE503C77A7801E7B49E, F51C3DE603C77A7801E7B49E, F51C3DE703C77A7801E7B49E, F51C3DE803C77A7801E7B49E, F51C3DE903C77A7801E7B49E, F51C3DEA03C77A7801E7B49E, F51C3DEB03C77A7801E7B49E, F51C3DEC03C77A7801E7B49E, F51C3DED03C77A7801E7B49E, F51C3DEE03C77A7801E7B49E, F51C3DEF03C77A7801E7B49E, F5E2F10905F7EFFC01A80003, ); isa = PBXGroup; name = TreeLib; refType = 4; sourceTree = ""; }; F51C3DDD03C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = gtree.cpp; path = TreeLib/gtree.cpp; refType = 4; sourceTree = ""; }; F51C3DDE03C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gtree.h; path = TreeLib/gtree.h; refType = 4; sourceTree = ""; }; F51C3DE103C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Parse.cpp; path = TreeLib/Parse.cpp; refType = 4; sourceTree = ""; }; F51C3DE203C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = TreeLib/Parse.h; refType = 4; sourceTree = ""; }; F51C3DE303C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = profile.h; path = TreeLib/profile.h; refType = 4; sourceTree = ""; }; F51C3DE403C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tokeniser.cpp; path = TreeLib/tokeniser.cpp; refType = 4; sourceTree = ""; }; F51C3DE503C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = tokeniser.h; path = TreeLib/tokeniser.h; refType = 4; sourceTree = ""; }; F51C3DE603C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = treedrawer.cpp; path = TreeLib/treedrawer.cpp; refType = 4; sourceTree = ""; }; F51C3DE703C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = treedrawer.h; path = TreeLib/treedrawer.h; refType = 4; sourceTree = ""; }; F51C3DE803C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TreeLib.cpp; path = TreeLib/TreeLib.cpp; refType = 4; sourceTree = ""; }; F51C3DE903C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TreeLib.h; path = TreeLib/TreeLib.h; refType = 4; sourceTree = ""; }; F51C3DEA03C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = treeorder.cpp; path = TreeLib/treeorder.cpp; refType = 4; sourceTree = ""; }; F51C3DEB03C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = treeorder.h; path = TreeLib/treeorder.h; refType = 4; sourceTree = ""; }; F51C3DEC03C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = treereader.cpp; path = TreeLib/treereader.cpp; refType = 4; sourceTree = ""; }; F51C3DED03C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = treereader.h; path = TreeLib/treereader.h; refType = 4; sourceTree = ""; }; F51C3DEE03C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = treewriter.cpp; path = TreeLib/treewriter.cpp; refType = 4; sourceTree = ""; }; F51C3DEF03C77A7801E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = treewriter.h; path = TreeLib/treewriter.h; refType = 4; sourceTree = ""; }; F51C3E0303C77AF401E7B49E = { children = ( F51C3E0403C77AF401E7B49E, ); isa = PBXGroup; name = gport; refType = 4; sourceTree = ""; }; F51C3E0403C77AF401E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gdefs.h; path = TreeLib/gport/gdefs.h; refType = 4; sourceTree = ""; }; F51C3E0A03C77CB501E7B49E = { children = ( F51C3E0B03C77CE101E7B49E, F51C3E0C03C77CE101E7B49E, F51C3E0D03C77CE101E7B49E, F51C3E0E03C77CE101E7B49E, F51C3E0F03C77CE101E7B49E, F51C3E1003C77CE101E7B49E, F51C3E1103C77CE101E7B49E, F51C3E1203C77CE101E7B49E, F51C3E1303C77CE101E7B49E, F51C3E1403C77CE101E7B49E, F51C3E1503C77CE101E7B49E, F51C3E1603C77CE101E7B49E, F51C3E1703C77CE101E7B49E, F51C3E1803C77CE101E7B49E, F51C3E1903C77CE101E7B49E, F51C3E1A03C77CE101E7B49E, F51C3E1B03C77CE101E7B49E, F51C3E1C03C77CE101E7B49E, F51C3E1D03C77CE101E7B49E, F51C3E1E03C77CE101E7B49E, F51C3E1F03C77CE101E7B49E, F51C3E2003C77CE101E7B49E, F51C3E2103C77CE101E7B49E, F51C3E2203C77CE101E7B49E, F51C3E2303C77CE101E7B49E, F51C3E2403C77CE101E7B49E, F51C3E2503C77CE101E7B49E, F51C3E2603C77CE101E7B49E, F51C3E2703C77CE101E7B49E, F51C3E2803C77CE101E7B49E, F51C3E2903C77CE101E7B49E, F51C3E2A03C77CE101E7B49E, ); isa = PBXGroup; name = "ncl-2.0"; refType = 4; sourceTree = ""; }; F51C3E0B03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = assumptionsblock.cpp; path = "ncl-2.0/src/assumptionsblock.cpp"; refType = 4; sourceTree = ""; }; F51C3E0C03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = assumptionsblock.h; path = "ncl-2.0/src/assumptionsblock.h"; refType = 4; sourceTree = ""; }; F51C3E0D03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = charactersblock.cpp; path = "ncl-2.0/src/charactersblock.cpp"; refType = 4; sourceTree = ""; }; F51C3E0E03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = charactersblock.h; path = "ncl-2.0/src/charactersblock.h"; refType = 4; sourceTree = ""; }; F51C3E0F03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = datablock.cpp; path = "ncl-2.0/src/datablock.cpp"; refType = 4; sourceTree = ""; }; F51C3E1003C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = datablock.h; path = "ncl-2.0/src/datablock.h"; refType = 4; sourceTree = ""; }; F51C3E1103C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = discretedatum.cpp; path = "ncl-2.0/src/discretedatum.cpp"; refType = 4; sourceTree = ""; }; F51C3E1203C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = discretedatum.h; path = "ncl-2.0/src/discretedatum.h"; refType = 4; sourceTree = ""; }; F51C3E1303C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = discretematrix.cpp; path = "ncl-2.0/src/discretematrix.cpp"; refType = 4; sourceTree = ""; }; F51C3E1403C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = discretematrix.h; path = "ncl-2.0/src/discretematrix.h"; refType = 4; sourceTree = ""; }; F51C3E1503C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = distancedatum.cpp; path = "ncl-2.0/src/distancedatum.cpp"; refType = 4; sourceTree = ""; }; F51C3E1603C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = distancedatum.h; path = "ncl-2.0/src/distancedatum.h"; refType = 4; sourceTree = ""; }; F51C3E1703C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = distancesblock.cpp; path = "ncl-2.0/src/distancesblock.cpp"; refType = 4; sourceTree = ""; }; F51C3E1803C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = distancesblock.h; path = "ncl-2.0/src/distancesblock.h"; refType = 4; sourceTree = ""; }; F51C3E1903C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nexus.cpp; path = "ncl-2.0/src/nexus.cpp"; refType = 4; sourceTree = ""; }; F51C3E1A03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = nexus.h; path = "ncl-2.0/src/nexus.h"; refType = 4; sourceTree = ""; }; F51C3E1B03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nexusblock.cpp; path = "ncl-2.0/src/nexusblock.cpp"; refType = 4; sourceTree = ""; }; F51C3E1C03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = nexusdefs.h; path = "ncl-2.0/src/nexusdefs.h"; refType = 4; sourceTree = ""; }; F51C3E1D03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nexustoken.cpp; path = "ncl-2.0/src/nexustoken.cpp"; refType = 4; sourceTree = ""; }; F51C3E1E03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = nexustoken.h; path = "ncl-2.0/src/nexustoken.h"; refType = 4; sourceTree = ""; }; F51C3E1F03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nxsdate.cpp; path = "ncl-2.0/src/nxsdate.cpp"; refType = 4; sourceTree = ""; }; F51C3E2003C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = nxsdate.h; path = "ncl-2.0/src/nxsdate.h"; refType = 4; sourceTree = ""; }; F51C3E2103C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nxsstring.cpp; path = "ncl-2.0/src/nxsstring.cpp"; refType = 4; sourceTree = ""; }; F51C3E2203C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = nxsstring.h; path = "ncl-2.0/src/nxsstring.h"; refType = 4; sourceTree = ""; }; F51C3E2303C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = setreader.cpp; path = "ncl-2.0/src/setreader.cpp"; refType = 4; sourceTree = ""; }; F51C3E2403C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = setreader.h; path = "ncl-2.0/src/setreader.h"; refType = 4; sourceTree = ""; }; F51C3E2503C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = taxablock.cpp; path = "ncl-2.0/src/taxablock.cpp"; refType = 4; sourceTree = ""; }; F51C3E2603C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = taxablock.h; path = "ncl-2.0/src/taxablock.h"; refType = 4; sourceTree = ""; }; F51C3E2703C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = treesblock.cpp; path = "ncl-2.0/src/treesblock.cpp"; refType = 4; sourceTree = ""; }; F51C3E2803C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = treesblock.h; path = "ncl-2.0/src/treesblock.h"; refType = 4; sourceTree = ""; }; F51C3E2903C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xnexus.cpp; path = "ncl-2.0/src/xnexus.cpp"; refType = 4; sourceTree = ""; }; F51C3E2A03C77CE101E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = xnexus.h; path = "ncl-2.0/src/xnexus.h"; refType = 4; sourceTree = ""; }; F51C3E4B03C77F0C01E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tdoc.cpp; refType = 4; sourceTree = ""; }; F51C3E4C03C77F0C01E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tdoc.h; refType = 4; sourceTree = ""; }; F51C3E4D03C77F0C01E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tproject.h; refType = 4; sourceTree = ""; }; F51C3E4E03C77F0C01E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tv.cpp; refType = 4; sourceTree = ""; }; F51C3E4F03C77F0C01E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tv.h; refType = 4; sourceTree = ""; }; F51C3E5003C77F0C01E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tview.cpp; refType = 4; sourceTree = ""; }; F51C3E5103C77F0C01E7B49E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tview.h; refType = 4; sourceTree = ""; }; F53CB88A03CB09B3012A40F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = treeorder_dialog.h; refType = 4; sourceTree = ""; }; F53CB88D03CB0A26012A40F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = treeorder_dialog.cpp; refType = 4; sourceTree = ""; }; F53CB89103CB2010012A40F8 = { children = ( F53CB88A03CB09B3012A40F8, F53CB88D03CB0A26012A40F8, ); isa = PBXGroup; name = Dialogs; refType = 4; sourceTree = ""; }; F5E2F10505F7EAD201A80003 = { isa = PBXFileReference; lastKnownFileType = image.icns; name = app.icns; path = bitmaps/mac/app.icns; refType = 4; sourceTree = ""; }; F5E2F10605F7EAD201A80003 = { isa = PBXFileReference; lastKnownFileType = image.icns; name = doc.icns; path = bitmaps/mac/doc.icns; refType = 4; sourceTree = ""; }; F5E2F10905F7EFFC01A80003 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = nodeiterator.h; path = TreeLib/nodeiterator.h; refType = 4; sourceTree = ""; }; }; rootObject = 20286C28FDCF999611CA2CEA; } tv-0.5/ncl-2.0/0000777000076400007640000000000011432555766010113 500000000000000tv-0.5/ncl-2.0/src/0000777000076400007640000000000011432555767010703 500000000000000tv-0.5/ncl-2.0/src/nxsstring.cpp0000775000076400007640000000547211432542407013362 00000000000000#ifdef __BORLANDC__ // Undefine __MINMAX_DEFINED so that min and max are correctly defined #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif #endif #include #include #ifdef __BORLANDC__ // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif using namespace std; #include #include #include #include #include "nxsstring.h" nxsstring& nxsstring::operator+=( const double d ) { char tmp[81]; sprintf( tmp, "%#3.6f", d ); int tmplen = strlen(tmp); for(;;) { if( tmplen < 3 || tmp[tmplen-1] != '0' || tmp[tmplen-2] == '.' ) break; tmp[tmplen-1] = '\0'; tmplen--; } append(tmp); return *this; } /** * @method RightJustifyLong [void:public] * @param x [long] long value to right justify * @param w [int] width of field * @param clear_first [bool] if true, initialize string first to empty string * * Right-justifies x in a field w characters wide, using blank spaces * to fill in unused portions on the left-hand side of the field. * Specify third argument true to first empty the string. */ void nxsstring::RightJustifyLong( long x, int w, bool clear_first /* = false */ ) { if( clear_first ) *this = ""; int num_spaces = w - 1; if( x > 0L ) num_spaces -= (int)log10( (double)x ); if( num_spaces < 0 ) num_spaces = 0; for( int k = 0; k < num_spaces; k++ ) *this += ' '; *this += x; } /** * @method RightJustifyDbl [void:public] * @param x [long] long value to right justify * @param w [int] width of field * @param p [int] precision to use * @param clear_first [bool] if true, initialize string first to empty string * * Right-justifies x in a field w characters wide with precision p, using blank spaces * to fill in unused portions on the left-hand side of the field. * Specify fourth argument true to first empty the string. */ void nxsstring::RightJustifyDbl( double x, int w, int p, bool clear_first /* = false */ ) { if( clear_first ) *this = ""; char tmpstr[81]; char fmtstr[81]; sprintf( fmtstr, "%%.%df", p ); sprintf( tmpstr, fmtstr, x ); int num_spaces = w - strlen(tmpstr); if( num_spaces < 0 ) num_spaces = 0; for( int k = 0; k < num_spaces; k++ ) *this += ' '; *this += tmpstr; } /** * @method ShortenTo [void:public] * @param n [int] maximum number of characters * * Shortens string to n-3 characters, making the last * three characters "...". If string is already less * than n character in length, has no effect. The * parameter n should be at least 4. */ void nxsstring::ShortenTo( int n ) { if( length() <= n ) return; assert( n > 3 ); char* s = new char[n+1]; strncpy( s, this->c_str(), n-3 ); s[n-3] = '.'; s[n-2] = '.'; s[n-1] = '.'; s[n] = '\0'; *this = s; } tv-0.5/ncl-2.0/src/discretematrix.h0000775000076400007640000000271207575350625014025 00000000000000#ifndef __DISCRETEMATRIX_H #define __DISCRETEMATRIX_H // // DiscreteMatrix class // class DiscreteMatrix { int nrows; int ncols; DiscreteDatum** data; friend class CharactersBlock; friend class AllelesBlock; private: void AddState( DiscreteDatum& d, int value ); int IsGap( DiscreteDatum& d ); int IsMissing( DiscreteDatum& d ); int IsPolymorphic( DiscreteDatum& d ); DiscreteDatum& GetDiscreteDatum( int i, int j ); int GetNumStates( DiscreteDatum& d ); int GetState( DiscreteDatum& d, int i = 0 ); void SetGap( DiscreteDatum& d ); void SetMissing( DiscreteDatum& d ); void SetPolymorphic( DiscreteDatum& d, int value ); void SetState( DiscreteDatum& d, int value ); public: DiscreteMatrix( int rows, int cols ); ~DiscreteMatrix(); void AddRows( int nAddRows ); void AddState( int i, int j, int value ); void CopyStatesFromFirstTaxon( int i, int j ); void DebugSaveMatrix( std::ostream& out, int colwidth = 12 ); int DuplicateRow( int row, int count, int startCol = 0, int endCol = -1 ); void Flush(); int GetState( int i, int j, int k = 0 ); int GetNumStates( int i, int j ); int GetObsNumStates( int j ); int IsGap( int i, int j ); int IsMissing( int i, int j ); int IsPolymorphic( int i, int j ); void Reset( int rows, int cols ); void SetGap( int i, int j ); void SetMissing( int i, int j ); void SetPolymorphic( int i, int j, int value = 1 ); void SetState( int i, int j, int value ); }; #endif tv-0.5/ncl-2.0/src/datablock.cpp0000775000076400007640000000313707235522105013242 00000000000000#include "nexusdefs.h" #include "discretedatum.h" #include "discretematrix.h" #include "nexustoken.h" #include "nexus.h" #include "taxablock.h" #include "charactersblock.h" #include "datablock.h" /** * @class DataBlock * @file datablock.h * @file datablock.cpp * @author Paul O. Lewis * @copyright Copyright 1999. All Rights Reserved. * @see Association * @see AssocList * @see CharactersBlock * @see DiscreteDatum * @see DiscreteMatrix * @see LabelList * @see LabelListAssoc * @see LabelListBag * @see Nexus * @see NexusBlock * @see NexusReader * @see NexusToken * @see SetReader * @see TaxaBlock * * This class handles reading and storage for the Nexus block DATA. * It is derived from the CharactersBlock class, and differs from * CharactersBlock only in name and the fact that newtaxa is initially * true rather than false. */ /** * @constructor * * Performs the following initializations: * *
Variable Initial Value *
id = "DATA" *
newtaxa = true *
*/ DataBlock::DataBlock( TaxaBlock& tb, AssumptionsBlock& ab ) : CharactersBlock( tb, ab ) { id = "DATA"; newtaxa = true; } /** * @method Reset [void:protected] * * Calls Reset function of the parent class (CharactersBlock) and * resets newtaxa to true in preparation for reading another DATA block. */ void DataBlock::Reset() { CharactersBlock::Reset(); newtaxa = true; taxa.Reset(); } tv-0.5/ncl-2.0/src/allelesblock.h0000775000076400007640000000446407575350624013437 00000000000000#ifndef __ALLELESBLOCK_H #define __ALLELESBLOCK_H #define MAX_ALLELES 255 class AllelesBlock : public CharactersBlock { // Adding a new data member? Don't forget to: // 1. Describe it in the class header comment at the top of "allelesblock.cpp" // 2. Initialize it (unless it is self-initializing) in the constructor // and reinitialize it in the Reset function // 3. Describe the initial state in the constructor documentation // 4. Delete memory allocated to it in both the destructor and Reset function // 5. Report it in some way in the Report function protected: virtual void Read( NexusToken& token ); virtual void Reset(); public: enum datapoints { standard = 1, fraglen }; public: class XAllMissingData {}; protected: IntSet haploid; private: bool alleles_fixed; int* indivCount; datapoints datapoint; protected: virtual void DebugShowMatrix( std::ostream& out, char* marginText = NULL ); virtual void HandleFormat( NexusToken& token ); virtual bool HandleNextGenotype( NexusToken& token, int i, int k , bool stopOnNewline = true ); virtual int HandleAllele( NexusToken& token, int c ); void HandleHaploid( NexusToken& token ); virtual void HandleStdMatrix( NexusToken& token ); virtual void HandleTransposedMatrix( NexusToken& token ); virtual void HandleMatrix( NexusToken& token ); int SplitInt( int x, int y ); public: AllelesBlock( TaxaBlock& tb, AssumptionsBlock& ab ); ~AllelesBlock(); virtual void Report( std::ostream& out ); // Methods for reporting the data // nxsstring GetLocusLabel( int locus ); nxsstring GetAlleleLabel( int locus, int allele ); // Methods for obtaining information about the data // void FocalAlleleCount( int focal_allele, int locus, int pop , int& n_AA, int& n_Aa, int& n_aa ); int MostCommonAllele( int locus, int pop = -1 ); int AlleleCount( int allele, int locus, int pop = -1 ); double AlleleFrequency( int allele, int locus, int pop = -1 ); int GenotypeCount( int allele1, int allele2, int locus, int pop = -1 ); int GetNumHaploid(); bool IsHaploid( int i ); bool IsHaploidOrig( int origLocusIndex ); int NumberOfAlleles( int locus, int pop = -1 ); int SampleSize( int locus, int pop = -1 ); int GetIndivCount( int pop ); int GetGene( int pop, int indiv, int locus, int gene ); }; #endif tv-0.5/ncl-2.0/src/taxablock.cpp0000775000076400007640000002360707575350626013310 00000000000000#include "nexusdefs.h" #include "xnexus.h" #include "nexustoken.h" #include "nexus.h" #include "taxablock.h" using namespace std; /** * @class TaxaBlock * @file taxablock.h * @file taxablock.cpp * @author Paul O. Lewis * @copyright Copyright © 1999. All Rights Reserved. * @variable ntax [int:private] number of taxa (set from NTAX specification) * @variable taxonLabels [LabelList:private] storage for list of taxon labels * @see LabelList * @see Nexus * @see NexusBlock * @see NexusReader * @see NexusToken * @see XNexus * * This class handles reading and storage for the Nexus block TAXA. * It overrides the member functions Read and Reset, which are abstract * virtual functions in the base class NexusBlock. The taxon names are * stored in an array of strings (taxonLabels) that is accessible through * the member functions GetTaxonLabel, AddTaxonLabel, ChangeTaxonLabel, * and GetNumTaxonLabels. * *

Below is a table showing the correspondence between the elements of a * TAXA block and the variables and member functions that can be used * to access each piece of information stored. * *

* * * *
Nexus command * Nexus subcommand * Data Members * Member Functions *
DIMENSIONS * NTAX * int ntax * int GetNumTaxonLabels() *
TAXLABELS * LabelList taxonLabels * nxsstring GetTaxonLabel( int i ) *
int FindTaxon( nxsstring label ) *
int GetMaxTaxonLabelLength() *
*/ /** * @constructor * * Default constructor. Initializes id to "TAXA" and ntax to 0. */ TaxaBlock::TaxaBlock() : ntax(0), NexusBlock() { id = "TAXA"; } /** * @destructor * * Flushes taxonLabels. */ TaxaBlock::~TaxaBlock() { taxonLabels.erase( taxonLabels.begin(), taxonLabels.end() ); } /** * @method Read [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * This function provides the ability to read everything following the block name * (which is read by the Nexus object) to the end or endblock statement. * Characters are read from the input stream in. Overrides the * abstract virtual function in the base class. */ void TaxaBlock::Read( NexusToken& token ) { isEmpty = false; token.GetNextToken(); // this should be the semicolon after the block name if( !token.Equals(";") ) { errormsg = "Expecting ';' after TAXA block name, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } for(;;) { token.GetNextToken(); if( token.Equals("DIMENSIONS") ) { token.GetNextToken(); // this should be the NTAX keyword if( !token.Equals("NTAX") ) { errormsg = "Expecting NTAX keyword, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } token.GetNextToken(); // this should be the equals sign if( !token.Equals("=") ) { errormsg = "Expecting '=', but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } token.GetNextToken(); // this should be the number of taxa ntax = atoi( token.GetToken().c_str() ); if( ntax <= 0 ) { errormsg = "NTAX should be greater than zero ("; errormsg += token.GetToken(); errormsg += " was specified)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } token.GetNextToken(); // this should be the terminating semicolon if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate DIMENSIONS command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } else if( token.Equals("TAXLABELS") ) { if( ntax <= 0 ) { errormsg = "NTAX must be specified before TAXLABELS command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } for( int i = 0; i < ntax; i++ ) { token.GetNextToken(); taxonLabels.push_back( token.GetToken() ); } token.GetNextToken(); // this should be terminating semicolon if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate TAXLABELS command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } else if( token.Equals("END") ) { // get the semicolon following END token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate the END command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } break; } else if( token.Equals("ENDBLOCK") ) { // get the semicolon following ENDBLOCK token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate the ENDBLOCK command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } break; } else { SkippingCommand( token.GetToken() ); do { token.GetNextToken(); } while( !token.AtEOF() && !token.Equals(";") ); if( token.AtEOF() ) { errormsg = "Unexpected end of file encountered"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } } /** * @method Report [void:public] * @param out [ostream&] the output stream to which to write the report * * This function outputs a brief report of the contents of this taxa block. * Overrides the abstract virtual function in the base class. */ void TaxaBlock::Report( std::ostream& out ) { out << endl; out << id << " block contains "; if( ntax == 0 ) { out << "no taxa" << endl; } else if( ntax == 1 ) out << "one taxon" << endl; else out << ntax << " taxa" << endl; if( ntax == 0 ) return; for( int k = 0; k < ntax; k++ ) out << '\t' << (k+1) << '\t' << taxonLabels[k] << endl; } /** * @method Reset [void:protected] * * Flushes taxonLabels and sets ntax to 0 in preparation for reading a * new TAXA block. */ void TaxaBlock::Reset() { isEmpty = true; taxonLabels.erase( taxonLabels.begin(), taxonLabels.end() ); ntax = 0; } /** * @method AddTaxonLabel [void:public] * @param s [nxsstring] the taxon label to add * * Adds taxon label s to end of list of taxon labels and increments * ntax by 1. */ void TaxaBlock::AddTaxonLabel( nxsstring s ) { isEmpty = false; taxonLabels.push_back(s); ntax++; } /** * @method ChangeTaxonLabel [void:public] * @param i [int] the taxon label number to change * @param s [nxsstring] the string used to replace label i * * Changes the label for taxon i to s. */ void TaxaBlock::ChangeTaxonLabel( int i, nxsstring s ) { assert( i < (int)taxonLabels.size() ); taxonLabels[i] = s; } /** * @method GetMaxTaxonLabelLength [char*:public] * * Returns the length of the longest taxon label stored. Useful for * formatting purposes in outputting the data matrix (i.e., you want the * left edge of the matrix to line up). */ int TaxaBlock::GetMaxTaxonLabelLength() { assert( ntax == (int)taxonLabels.size() ); int maxlen = 0; for( int i = 0; i < ntax; i++ ) { int thislen = taxonLabels[i].size(); if( thislen > maxlen ) maxlen = thislen; } return maxlen; } /** * @method GetTaxonLabel [char*:public] * @param i [int] the taxon label number to return * * Returns the label for taxon i. */ nxsstring TaxaBlock::GetTaxonLabel( int i ) { assert( i < (int)taxonLabels.size() ); return taxonLabels[i]; } /** * @method IsAlreadyDefined [bool:public] * @param s [nxsstring] the s to attempt to find in the taxonLabels list * * Calls IsAlreadyDefined function of taxonLabels, which returns 0 * if a taxon label equal to s is already stored in taxonLabels. * Returns 0 if no taxon label equal to s can be found in the * taxonLabels list. */ bool TaxaBlock::IsAlreadyDefined( nxsstring s ) { LabelList::const_iterator iter = find( taxonLabels.begin(), taxonLabels.end(), s ); int taxonLabelFound = ( iter != taxonLabels.end() ); return taxonLabelFound; } /** * @method FindTaxon [int:public] * @param s [nxsstring] the string to attempt to find in the taxonLabels list * @throws TaxaBlock::nosuchtaxon * * Returns index of taxon named s in taxonLabels list. If taxon named * s cannot be found, or if there are no labels currently stored in * the taxonLabels list, throws nosuchtaxon exception. */ int TaxaBlock::FindTaxon( nxsstring s ) { int k = 0; LabelList::const_iterator i; for( i = taxonLabels.begin(); i != taxonLabels.end(); ++i ) { if( *i == s ) break; k++; } if( i == taxonLabels.end() ) throw TaxaBlock::nosuchtaxon(); return k; } /** * @method GetNumTaxonLabels [int:public] * * Returns number of taxon labels currently stored. */ int TaxaBlock::GetNumTaxonLabels() { return taxonLabels.size(); } /** * @method SetNtax [void:private] * @param n [int] the number of taxa * * Sets ntax to n. */ void TaxaBlock::SetNtax( int n ) { ntax = n; } tv-0.5/ncl-2.0/src/distancesblock.h0000775000076400007640000000232707620465557013772 00000000000000#ifndef __DISTANCESBLOCK_H #define __DISTANCESBLOCK_H class DistancesBlock : public NexusBlock { TaxaBlock& taxa; int newtaxa; int ntax; int nchar; int diagonal; int interleave; int labels; int triangle; enum { upper = 1, lower = 2, both = 3 }; char missing; DistanceDatum** matrix; int* taxonPos; protected: void HandleDimensionsCommand( NexusToken& token ); void HandleFormatCommand( NexusToken& token ); void HandleMatrixCommand( NexusToken& token ); int HandleNextPass( NexusToken& token, int& offset ); void HandleTaxlabelsCommand( NexusToken& token ); void Read( NexusToken& token ); void Reset(); public: DistancesBlock( TaxaBlock& t ); virtual ~DistancesBlock(); double GetDistance( int i, int j ); char GetMissingSymbol(); int GetNchar(); int GetNtax(); int GetTriangle(); int IsBoth(); int IsDiagonal(); int IsInterleave(); int IsLabels(); int IsLowerTriangular(); int IsMissing( int i, int j ); int IsUpperTriangular(); void Report( std::ostream& out ); void SetDistance( int i, int j, double d ); void SetMissing( int i, int j ); void SetNchar( int i ); }; #endif tv-0.5/ncl-2.0/src/nexusblock.cpp0000775000076400007640000001442107236527113013476 00000000000000#include "nexusdefs.h" #include "nexustoken.h" #include "nexus.h" /** * @class NexusBlock * @file nexus.h * @file nexusblock.cpp * @author Paul O. Lewis * @copyright Copyright 1999. All Rights Reserved. * @variable isDisabled [bool:private] true if this block is currently disabled * @variable isEmpty [bool:private] true if this object is currently storing data * @variable next [NexusBlock*:protected] pointer to next block in list * @variable id [nxsstring:protected] holds name of block (e.g., "DATA", "TREES", etc.) * @see Nexus * @see NexusReader * @see NexusToken * * This is the base class from which all Nexus block classes are derived. * The abstract virtual function Read must be overridden for each derived * class to provide the ability to read everything following the block name * (which is read by the Nexus object) to the end or endblock statement. * Derived classes must provide their own data storage and access functions. */ /** * @constructor * * Default constructor * Initializes 'next' and 'nexus' data members to NULL, and 'isEmpty' and * 'isEnabled' to true. */ NexusBlock::NexusBlock() : next(NULL), nexus(NULL), isEmpty(true), isEnabled(true) { } /** * @destructor * * Does nothing. */ NexusBlock::~NexusBlock() { } /** * @method CharLabelToNumber [int:protected] * @param s [nxsstring] the character label to be translated to character number * * This base class version simply returns -1, but a derived class should * override this function if it needs to construct and run a SetReader * object to read a set involving characters. The SetReader object may * need to use this function to look up a character label encountered in * the set. A class that overrides this method should return the * character index in the range [1..nchar]; i.e., add one to the 0-offset * index. */ int NexusBlock::CharLabelToNumber( nxsstring /*s*/ ) { return 0; } /** * @method Disable [void:public] * * Sets the value of isEnabled to false. A NexusBlock * can be disabled (by calling this method) if blocks of that type * are to be skipped during execution of the nexus file. * If a disabled block is encountered, the virtual * Nexus::SkippingDisabledBlock function is called. */ void NexusBlock::Disable() { isEnabled = false; } /** * @method Enable [void:public] * * Sets the value of isEnabled to true. A NexusBlock * can be disabled (by calling Disable) if blocks of that type * are to be skipped during execution of the nexus file. * If a disabled block is encountered, the virtual * Nexus::SkippingDisabledBlock function is called. */ void NexusBlock::Enable() { isEnabled = true; } /** * @method IsEnabled [bool:public] * * Returns value of isEnabled, which can be controlled through * use of the Enable and Disable member functions. A NexusBlock * should be disabled if blocks of that type are to be skipped * during execution of the nexus file. If a disabled block is * encountered, the virtual Nexus::SkippingDisabledBlock function * is called. */ bool NexusBlock::IsEnabled() { return isEnabled; } /** * @method IsEmpty [bool:public] * * Returns true if Read function has not been called since the last Reset. * This base class version simply returns the value of the data member * isEmpty. If you derive a new block class from NexusBlock, be sure * to set isEmpty to true in your Reset function and isEmpty to false in your * Read function. */ bool NexusBlock::IsEmpty() { return isEmpty; } /** * @method Read [virtual void:protected] * @param token [NexusToken&] the NexusToken to use for reading block * @param in [istream&] the input stream from which to read * * This abstract virtual function must be overridden for each derived * class to provide the ability to read everything following the block name * (which is read by the Nexus object) to the end or endblock statement. * Characters are read from the input stream in. Note that to get output * comments displayed, you must derive a class from NexusToken, override * the member function OutputComment to display a supplied comment, and * then pass a reference to an object of the derived class to this function. */ // virtual void Read( NexusToken& token, istream& in ) = 0; /** * @method Reset [virtual void:protected] * * This abstract virtual function must be overridden for each derived * class to completely reset the block object in preparation for reading * in another block of this type. This function is called by the Nexus * object just prior to calling the block object's Read function. */ // virtual void Reset() = 0; /** * @method GetID [nxsstring:public] * * Returns the id nxsstring. */ nxsstring NexusBlock::GetID() { return id; } /** * @method Report [virtual void:public] * @param out [ostream&] the output stream to which the report is sent * * Provides a brief report of the contents of the block. */ // virtual void Report( ostream& out ) = 0; /** * @method SetNexus [virtual void:public] * @param nxsptr [Nexus*] pointer to a Nexus object * * Sets the nexus data member of the NexusBlock object to * nxsptr. */ void NexusBlock::SetNexus( Nexus* nxsptr ) { nexus = nxsptr; } /** * @method SkippingCommand [virtual void:public] * @param commandName [nxsstring] the name of the command being skipped * * This function is called when an unknown command named commandName is * about to be skipped. This version of the function does nothing (i.e., * no warning is issued that a command was unrecognized. Override this * virtual function in a derived class to provide such warnings to the * user. */ void NexusBlock::SkippingCommand( nxsstring /* commandName */ ) { } /** * @method TaxonLabelToNumber [int:protected] * @param s [nxsstring] the taxon label to be translated to a taxon number * * This base class version simply returns 0, but a derived class should * override this function if it needs to construct and run a SetReader * object to read a set involving taxa. The SetReader object may * need to use this function to look up a taxon label encountered in * the set. A class that overrides this method should return the * taxon index in the range [1..ntax]; i.e., add one to the 0-offset * index. */ int NexusBlock::TaxonLabelToNumber( nxsstring /*s*/ ) { return 0; } tv-0.5/ncl-2.0/src/distancesblock.cpp0000775000076400007640000006304107575350626014324 00000000000000#include "nexusdefs.h" #include "xnexus.h" #include "nexustoken.h" #include "nexus.h" #include "taxablock.h" #include "distancedatum.h" #include "distancesblock.h" using namespace std; /** * @class DistancesBlock * @file distancesblock.h * @file distancesblock.cpp * @author Paul O. Lewis * @copyright Copyright © 1999. All Rights Reserved. * @variable diagonal [int:private] indicates whether the diagonal elements of the matrix will be provided * @variable interleave [int:private] indicates whether the matrix will be interleaved * @variable labels [int:private] indicates whether taxon labels are provided in the matrix * @variable matrix [DistanceDatum**:private] array holding distance data * @variable missing [char:private] symbol used to indicate missing data * @variable nchar [int:private] the number of characters used in generating the pairwise distances * @variable newtaxa [int:private] if 1, new taxa will be defined in the matrix * @variable ntax [int:private] the number of taxa (determines dimensions of the matrix) * @variable taxa [TaxaBlock&:private] reference to a TaxaBlock object * @variable taxonPos [int*:private] array holding 0-offset index into taxa's list of taxon labels * @variable triangle [int:private] indicates whether matrix is upper triangular, lower triangular, or rectangular * @see NexusReader * @see NexusToken * @see XNexus * * This class handles reading and storage for the Nexus block DISTANCES. * It overrides the member functions Read and Reset, which are abstract * virtual functions in the base class NexusBlock. * *

Below is a table showing the correspondence between the elements of a * DISTANCES block and the variables and member functions that can be used * to access each piece of information stored. * *

* * * * * * * * * * * *
Nexus command * Nexus subcommand * Data Members * Member Functions *
DIMENSIONS * NEWTAXA * int newtaxa * *
NTAX * int ntax * int GetNtax() *
NCHAR * int nchar * int GetNchar() *
FORMAT * TRIANGLE * int triangle * int GetTriangle() *
int IsUpperTriangular() *
int IsLowerTriangular() *
int IsBoth() *
[NO]DIAGONAL * int diagonal * int IsDiagonal() *
[NO]LABELS * int labels * int IsLabels() *
MISSING * char missing * char GetMissingSymbol() *
INTERLEAVE * int interleave * int IsInterleave() *
TAXLABELS * (stored in TaxaBlock object) * (access through taxa) *
MATRIX * DistanceDatum** matrix * double GetDistance( i, j ) *
int IsMissing( i, j ) *
void SetMissing( i, j ) *
void SetDistance( i, j, double d ) *
*/ /** * @enumeration * @enumitem upper [1] matrix is upper-triangular * @enumitem lower [2] matrix is lower-triangular * @enumitem both [3] matrix is rectangular * * For use with the variable triangle. */ /** * @constructor * * Default constructor. Performs the following initializations: * *
Variable Initial Value *
id = "DISTANCES" *
diagonal = 1 *
interleave = 0 *
labels = 1 *
matrix = NULL *
missing = '?' *
nchar = 0 *
newtaxa = 0 *
ntax = 0 *
taxonPos = NULL *
triangle = lower *
*/ DistancesBlock::DistancesBlock( TaxaBlock& t ) : taxa(t), NexusBlock() { id = "DISTANCES"; newtaxa = 0; ntax = 0; nchar = 0; diagonal = 1; triangle = lower; interleave = 0; labels = 1; missing = '?'; matrix = NULL; taxonPos = NULL; } /** * @destructor * * Deletes the memory used by id and flushes taxonLabels. */ DistancesBlock::~DistancesBlock() { if( matrix != NULL ) delete matrix; if( taxonPos != NULL ) delete [] taxonPos; } /** * @method HandleDimensionsCommand [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when DIMENSIONS command needs to be parsed from within the * DISTANCES block. Deals with everything after the token DIMENSIONS * up to and including the semicolon that terminates the DIMENSIONS * command. */ void DistancesBlock::HandleDimensionsCommand( NexusToken& token ) { for(;;) { token.GetNextToken(); // token should either be ';' or the name of a subcommand // if( token.Equals(";") ) { break; } else if( token.Equals("NEWTAXA") ) { ntax = 0; newtaxa = 1; } else if( token.Equals("NTAX") ) { if( !newtaxa ) { errormsg = "Must specify NEWTAXA before NTAX if new taxa are being defined"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the number of taxa token.GetNextToken(); ntax = atoi( token.GetToken().c_str() ); } else if( token.Equals("NCHAR") ) { // this should be the equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the number of characters token.GetNextToken(); nchar = atoi( token.GetToken().c_str() ); } } if( ntax == 0 ) ntax = taxa.GetNumTaxonLabels(); } /** * @method HandleFormatCommand [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when FORMAT command needs to be parsed from within the * DISTANCES block. Deals with everything after the token FORMAT * up to and including the semicolon that terminates the FORMAT * command. */ void DistancesBlock::HandleFormatCommand( NexusToken& token ) { for(;;) { token.GetNextToken(); // token should either be ';' or the name of a subcommand // if( token.Equals(";") ) { break; } else if( token.Equals("TRIANGLE") ) { // this should be the equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be LOWER, UPPER, or BOTH token.GetNextToken(); if( token.Equals("LOWER") ) triangle = lower; else if( token.Equals("UPPER") ) triangle = upper; else if( token.Equals("BOTH") ) triangle = both; else { errormsg = "Expecting UPPER, LOWER, or BOTH but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } else if( token.Equals("DIAGONAL") ) { diagonal = 1; } else if( token.Equals("NODIAGONAL") ) { diagonal = 0; } else if( token.Equals("LABELS") ) { labels = 1; } else if( token.Equals("NOLABELS") ) { labels = 0; } else if( token.Equals("INTERLEAVE") ) { interleave = 1; } else if( token.Equals("NOINTERLEAVE") ) { interleave = 0; } else if( token.Equals("MISSING") ) { // this should be the equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the missing data symbol token.GetNextToken(); if( token.GetTokenLength() != 1 ) { errormsg = "Missing data symbol specified ("; errormsg += token.GetToken(); errormsg += ") is invalid (must be a single character)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } missing = token.GetToken()[0]; } else { errormsg = "Token specified ("; errormsg += token.GetToken(); errormsg += ") is an invalid subcommand for the FORMAT command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } /** * @method HandleNextPass [int:protected] * @param token [NexusToken&] the token we are using for reading the data file * @param offset [int&] the offset (see below) * * Called from within HandleMatrix, this function is used to deal with interleaved * matrices. It is called once for each pass through the taxa. * *

The local variable jmax records the number of columns read in the current * interleaved page and is used to determine the offset used for j in subsequent * pages. */ int DistancesBlock::HandleNextPass( NexusToken& token, int& offset ) { int i, j, k, jmax = 0, done = 0; int i_first = 0; if( triangle == lower ) i_first = offset; int i_last = ntax; for( i = i_first; i < i_last; i++ ) { // Deal with taxon label if provided // if( labels && ( !newtaxa || offset>0 ) ) { do { token.SetLabileFlagBit( NexusToken::newlineIsToken ); token.GetNextToken(); } while( token.AtEOL() ); try { k = taxa.FindTaxon( token.GetToken() ); if( taxonPos[i]==-1 ) taxonPos[i] = k; else if( taxonPos[i] != k ) { errormsg = "Taxon labeled "; errormsg += token.GetToken(); errormsg += " is out of order compared to previous interleave pages"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } catch (std::out_of_range) { errormsg = "Could not find "; errormsg += token.GetToken(); errormsg += " among taxa previously defined"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } else if( labels && newtaxa ) { do { token.SetLabileFlagBit( NexusToken::newlineIsToken ); token.GetNextToken(); } while( token.AtEOL() ); taxa.AddTaxonLabel( token.GetToken() ); taxonPos[i] = i; } // Now deal with the row of distance values // int true_j = 0; for( j = 0; j < ntax; j++ ) { if( i == ntax-1 && j == ntax-1 ) { done = 1; } if( i == ntax-1 && true_j == ntax-1 ) { done = 1; break; } if( i == ntax-1 && !diagonal && triangle==upper ) { done = 1; break; } if( !diagonal && triangle==lower && j == ntax-offset-1) { done = 1; break; } token.SetLabileFlagBit( NexusToken::newlineIsToken ); token.GetNextToken(); if( token.AtEOL() ) { if( j > jmax ) { jmax = j; if( !diagonal && triangle == upper && i >= offset ) jmax++; if( interleave && triangle == upper ) i_last = jmax + offset; } break; } true_j = j+offset; if( triangle==upper && i > offset ) true_j += ( i - offset ); if( !diagonal && triangle==upper && i >= offset ) true_j++; if( true_j == ntax ) { errormsg = "Too many distances specified in row just read in"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } std::string t = token.GetToken(); if( token.GetTokenLength() == 1 && t[0] == missing ) SetMissing( i, true_j ); else SetDistance( i, true_j, atof( t.c_str() ) ); } } offset += jmax; if( done ) return 1; else return 0; } /** * @method HandleMatrixCommand [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when MATRIX command needs to be parsed from within the * DISTANCES block. Deals with everything after the token MATRIX * up to and including the semicolon that terminates the MATRIX * command. */ void DistancesBlock::HandleMatrixCommand( NexusToken& token ) { int i; if( ntax == 0 ) ntax = taxa.GetNumTaxonLabels(); if( ntax == 0 ) { errormsg = "MATRIX command cannot be read if NTAX is zero"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( triangle == both && !diagonal ) { errormsg = "Cannot specify NODIAGONAL and TRIANGLE=BOTH at the same time"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( newtaxa ) taxa.Reset(); // allocate memory to hold the taxonPos array // if( taxonPos != NULL ) delete [] taxonPos; taxonPos = new int[ntax]; for( i = 0; i < ntax; i++ ) taxonPos[i] = -1; // allocate memory to hold the matrix // if( matrix != NULL ) delete matrix; matrix = new DistanceDatum*[ntax]; for( i = 0; i < ntax; i++ ) matrix[i] = new DistanceDatum[ntax]; int offset = 0; int done = 0; while( !done ) { done = HandleNextPass( token, offset ); } // token should be equal to the terminating semicolon token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate MATRIX command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } /** * @method HandleTaxlabelsCommand [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when TAXLABELS command needs to be parsed from within the * DISTANCES block. Deals with everything after the token TAXLABELS * up to and including the semicolon that terminates the TAXLABELS * command. */ void DistancesBlock::HandleTaxlabelsCommand( NexusToken& token ) { if( !newtaxa ) { errormsg = "NEWTAXA must have been specified in DIMENSIONS command to use the TAXLABELS command in a "; errormsg += id; errormsg += " block"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( ntax == 0 ) { errormsg = "NTAX must be specified before TAXLABELS command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } for( int i = 0; i < ntax; i++ ) { token.GetNextToken(); taxa.AddTaxonLabel( token.GetToken() ); } token.GetNextToken(); // this should be terminating semicolon if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate TAXLABELS command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // OPEN ISSUE: Some may object to setting newtaxa to 0 here, because then the // fact that new taxa were specified in this DISTANCES block rather than in // a preceding TAXA block is lost. This will only be important if we wish to // recreate the original data file, which I don't anticipate anyone doing with // this code (too difficult to remember all comments, the order of blocks in // the file, etc.) newtaxa = 0; } /** * @method Read [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * This function provides the ability to read everything following the block name * (which is read by the Nexus object) to the end or endblock statement. * Characters are read from the input stream in. Overrides the * abstract virtual function in the base class. */ void DistancesBlock::Read( NexusToken& token ) { isEmpty = false; token.GetNextToken(); // this should be the semicolon after the block name if( !token.Equals(";") ) { errormsg = "Expecting ';' after "; errormsg += id; errormsg += " block name, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } for(;;) { token.GetNextToken(); if( token.Equals("DIMENSIONS") ) { HandleDimensionsCommand( token ); } else if( token.Equals("FORMAT") ) { HandleFormatCommand( token ); } else if( token.Equals("TAXLABELS") ) { HandleTaxlabelsCommand( token ); } else if( token.Equals("MATRIX") ) { HandleMatrixCommand( token ); } else if( token.Equals("END") ) { // get the semicolon following END token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate the END command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } break; } else if( token.Equals("ENDBLOCK") ) { // get the semicolon following ENDBLOCK token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate the ENDBLOCK command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } break; } else { SkippingCommand( token.GetToken() ); do { token.GetNextToken(); } while( !token.AtEOF() && !token.Equals(";") ); if( token.AtEOF() ) { errormsg = "Unexpected end of file encountered"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } } /** * @method Report [void:public] * @param out [ostream&] the output stream to which to write the report * * This function outputs a brief report of the contents of this taxa block. * Overrides the abstract virtual function in the base class. */ void DistancesBlock::Report( std::ostream& out ) { int ntaxTotal = ntax; if( ntaxTotal == 0 ) ntaxTotal = taxa.GetNumTaxonLabels(); out << endl; out << id << " block contains "; if( ntaxTotal == 0 ) { out << "no taxa" << endl; } else if( ntaxTotal == 1 ) out << "one taxon" << endl; else out << ntaxTotal << " taxa" << endl; if( IsLowerTriangular() ) out << " Matrix is lower-triangular" << endl; else if( IsUpperTriangular() ) out << " Matrix is upper-triangular" << endl; else out << " Matrix is rectangular" << endl; if( IsInterleave() ) out << " Matrix is interleaved" << endl; else out << " Matrix is non-interleaved" << endl; if( IsLabels() ) out << " Taxon labels provided" << endl; else out << " No taxon labels provided" << endl; if( IsDiagonal() ) out << " Diagonal elements specified" << endl; else out << " Diagonal elements not specified" << endl; out << " Missing data symbol is " << missing << endl; if( ntax == 0 ) return; out.setf( ios::floatfield, ios::fixed ); out.setf( ios::showpoint ); for( int i = 0; i < ntax; i++ ) { if( labels ) out << setw(20) << taxa.GetTaxonLabel(i); else out << "\t\t"; for( int j = 0; j < ntax; j++ ) { if( triangle==upper && j < i ) { out << setw(12) << " "; } else if( triangle==lower && j > i ) continue; else if( !diagonal && i == j ) { out << setw(12) << " "; } else if( IsMissing( i, j ) ) out << setw(12) << missing; else out << setw(12) << setprecision(5) << GetDistance( i, j ); } out << endl; } } /** * @method Reset [void:protected] * * Flushes taxonLabels and sets ntax to 0 in preparation for reading a * new TAXA block. */ void DistancesBlock::Reset() { isEmpty = true; newtaxa = 0; ntax = 0; nchar = 0; diagonal = 1; triangle = lower; interleave = 0; labels = 1; missing = '?'; if( matrix != NULL ) delete matrix; matrix = NULL; if( taxonPos != NULL ) delete taxonPos; taxonPos = NULL; } /** * @method GetNtax [int:public] * * Returns the value of ntax. */ int DistancesBlock::GetNtax() { return ntax; } /** * @method GetNchar [int:public] * * Returns the value of nchar. */ int DistancesBlock::GetNchar() { return nchar; } /** * @method GetDistance [double:public] * @param i [int] the row * @param j [int] the column * * Returns the value of the (i, j)th element of matrix. * Assumes i and j are both in the range [0..ntax) * and the distance stored at matrix[i][j] is not * missing. Also assumes matrix is not NULL. */ double DistancesBlock::GetDistance( int i, int j ) { assert( i >= 0 ); assert( i < ntax ); assert( j >= 0 ); assert( j < ntax ); assert( matrix != NULL ); return matrix[i][j].value; } /** * @method GetMissingSymbol [char:public] * * Returns the value of missing. */ char DistancesBlock::GetMissingSymbol() { return missing; } /** * @method GetTriangle [int:public] * * Returns the value of triangle. */ int DistancesBlock::GetTriangle() { return triangle; } /** * @method IsBoth [int:public] * * Returns 1 if the value of triangle is both, 0 otherwise. */ int DistancesBlock::IsBoth() { return ( triangle == both ? 1 : 0 ); } /** * @method IsUpperTriangular [int:public] * * Returns 1 if the value of triangle is upper, 0 otherwise. */ int DistancesBlock::IsUpperTriangular() { return ( triangle == upper ? 1 : 0 ); } /** * @method IsLowerTriangular [int:public] * * Returns 1 if the value of triangle is lower, 0 otherwise. */ int DistancesBlock::IsLowerTriangular() { return ( triangle == lower ? 1 : 0 ); } /** * @method IsDiagonal [int:public] * * Returns the value of diagonal. */ int DistancesBlock::IsDiagonal() { return diagonal; } /** * @method IsInterleave [int:public] * * Returns the value of interleave. */ int DistancesBlock::IsInterleave() { return interleave; } /** * @method IsLabels [int:public] * * Returns the value of labels. */ int DistancesBlock::IsLabels() { return labels; } /** * @method IsMissing [int:public] * @param i [int] the row * @param j [int] the column * * Returns 1 if the (i,j)th distance is missing. * Assumes i and j are both in the range [0..ntax) * and matrix is not NULL. */ int DistancesBlock::IsMissing( int i, int j ) { assert( i >= 0 ); assert( i < ntax ); assert( j >= 0 ); assert( j < ntax ); assert( matrix != NULL ); return ( matrix[i][j].missing ); } /** * @method SetDistance [void:public] * @param i [int] the row * @param j [int] the column * @param d [double] the distance value * * Sets the value of the (i,j)th matrix element to d * and the missing flag to 0. * Assumes i and j are both in the range [0..ntax) * and matrix is not NULL. */ void DistancesBlock::SetDistance( int i, int j, double d ) { assert( i >= 0 ); assert( i < ntax ); assert( j >= 0 ); assert( j < ntax ); assert( matrix != NULL ); matrix[i][j].value = d; matrix[i][j].missing = 0; } /** * @method SetMissing [void:public] * @param i [int] the row * @param j [int] the column * * Sets the value of the (i,j)th matrix element to missing. * Assumes i and j are both in the range [0..ntax) * and matrix is not NULL. */ void DistancesBlock::SetMissing( int i, int j ) { assert( i >= 0 ); assert( i < ntax ); assert( j >= 0 ); assert( j < ntax ); assert( matrix != NULL ); matrix[i][j].missing = 1; matrix[i][j].value = 0.0; } /** * @method SetNchar [void:private] * @param n [int] the number of characters * * Sets nchar to n. */ void DistancesBlock::SetNchar( int n ) { nchar = n; } tv-0.5/ncl-2.0/src/treesblock.h0000775000076400007640000000261410046166377013130 00000000000000#ifndef __TREESBLOCK_H #define __TREESBLOCK_H // // TreesBlock class // class TreesBlock : public NexusBlock { // Adding a new data member? Don't forget to: // 1. Describe it in the class header comment at the top of "treesblock.cpp" // 2. Initialize it (unless it is self-initializing) in the constructor // and reinitialize it in the Reset function // 3. Describe the initial state in the constructor documentation // 4. Delete memory allocated to it in both the destructor and Reset function // 5. Report it in some way in the Report function AssocList translateList; LabelList treeName; LabelList treeDescription; BoolVect rooted; // TaxaBlock& taxa; int ntrees; int defaultTree; std::vector treeWeight; protected: void Read( NexusToken& token ); void Reset(); TaxaBlock& taxa; public: TreesBlock( TaxaBlock& tb ); virtual ~TreesBlock(); int GetNumDefaultTree(); int GetNumTrees(); nxsstring GetTreeName( int i ); nxsstring GetTreeDescription( int i ); double GetTreeWeight ( int i); nxsstring GetTranslatedTreeDescription( int i ); bool HasTranslationTable () { return (translateList.size() > 0); }; int IsDefaultTree( int i ); int IsRootedTree( int i ); void Report( std::ostream& out ); // rdmp // Return the translation of the token nxsstring GetTranslatedLabel (std::string skey); }; #endif tv-0.5/ncl-2.0/src/nexustoken.cpp0000775000076400007640000007351010234442201013512 00000000000000#include "nexusdefs.h" #include "xnexus.h" #include "nexustoken.h" using namespace std; /** * @class NexusToken * @file nexustoken.h * @file nexustoken.cpp * @author Paul O. Lewis * @copyright Copyright © 1999. All Rights Reserved. * @variable atEOF [bool:private] true if last character read resulted in eof() returning true for input stream * @variable atEOL [bool:private] true if newline encountered while newlineIsToken labile flag set * @variable comment [nxsstring:private] temporary buffer used to store output comments while they are being built * @variable filecol [long:private] current column in current line (refers to column immediately following token just read) * @variable fileline [long:private] current file line * @variable filepos [long:private] current file position (for Metrowerks compiler, type is streampos rather than long) * @variable in [istream&:private] reference to input stream from which tokens will be read * @variable labileFlags [int:private] storage for labile flags (see labile enum) * @variable saved [char:private] either '\0' or is last character read from input stream * @variable special [char:private] ad hoc punctuation character; default value is '\0' * @variable token [nxsstring:private] the character buffer used to store the current token * @see NexusReader * @see XNexus * * This class is used to read tokens from a Nexus data file. If the token * object is not attached to an input stream, calls to GetNextToken will have no * effect. If the token object is not attached to an output stream, output * comments will be discarded (i.e., not output anywhere) and calls to Write * or Writeln will be ineffective. If input and output streams have been * attached to the token object, however, tokens are read one at a time from * the input stream, and comments are correctly read and either written to * the output stream (if an output comment) or ignored (if not an output * comment). Sequences of characters surrounded by single quotes are read in * as single tokens. A pair of adjacent single quotes are stored as a single * quote, and underscore characters are stored as blanks. */ /** * @enumeration * @enumitem saveCommandComment [0x0001] if set, command comments of the form [&X] are not ignored but are instead saved as regular tokens (without the square brackets, however) * @enumitem parentheticalToken [0x0002] if set, and if next character encountered is a left parenthesis, token will include everything up to the matching right parenthesis * @enumitem curlyBracketedToken [0x0004] if set, and if next character encountered is a left curly bracket, token will include everything up to the matching right curly bracket * @enumitem doubleQuotedToken [0x0008] if set, grabs entire phrase surrounded by double quotes * @enumitem singleCharacterToken [0x0010] if set, next non-whitespace character returned as token * @enumitem newlineIsToken [0x0020] if set, newline character treated as a token and atEOL set if newline encountered * @enumitem tildeIsPunctuation [0x0040] if set, tilde character treated as punctuation and returned as a separate token * @enumitem useSpecialPunctuation [0x0080] if set, "special" character treated as punctuation and returned as a separate token * * For use with the variable labileFlags. */ /** * @constructor * @param i [istream&] the istream object to which the token is to be associated * * Performs the following initializations: * *
Variable Initial Value *
atEOF = false *
atEOL = false *
comment = "" *
filecol = 1L *
fileline = 1L *
filepos = 0L *
in = i *
labileFlags = 0 *
saved = '\0' *
special = '\0' *
token = "" *
*/ NexusToken::NexusToken( std::istream& i ) : in(i) { atEOF = false; atEOL = false; comment = ""; filecol = 1L; fileline = 1L; filepos = 0L; labileFlags = 0; saved = '\0'; special = '\0'; token = ""; } /** * @destructor * * Nothing needs to be done, since all objects take care of that delete themselves. */ NexusToken::~NexusToken() { } /** * @method AppendToComment [void:protected] * @param ch [char] character to be appended to comment * * Adds ch to end of comment nxsstring. */ void NexusToken::AppendToComment( char ch ) { comment += ch; } /** * @method AppendToToken [void:protected] * @param ch [char] character to be appended to token * * Adds ch to end of current token. */ void NexusToken::AppendToToken( char ch ) { // first three lines proved necessary to keep // Borland's implementation of STL from crashing // under some circumstances char s[2]; s[0] = ch; s[1] = '\0'; token += s; } /** * @method GetNextChar [char:protected] * @throws XNexus * * Reads next character from in and does all of the following before * returning it to the calling function: *

    *
  • if character read is either a carriage return or line feed, * the variable line is incremented by one and the variable col is * reset to zero *
  • if character read is a carriage return, and a peek at the next * character to be read reveals that it is a line feed, then the * next (line feed) character is read *
  • if either a carriage return or line feed is read, the character * returned to the calling function is '\n' *
  • if character read is neither a carriage return nor a line feed, * col is incremented by one and the character is returned as is to the * calling function *
  • in all cases, the variable filepos is updated using a call to * the tellg function of istream. *
*/ char NexusToken::GetNextChar() { int ch; ch = in.get(); int failed = in.bad(); if( failed ) { errormsg = "Unknown error reading data file (check to make sure file exists)"; throw XNexus( errormsg ); } if( ch == 13 || ch == 10 ) { fileline++; filecol = 1L; if( ch == 13 && (int)in.peek() == 10 ) ch = in.get(); atEOL = 1; } else if( ch == EOF ) atEOF = 1; else { filecol++; atEOL = 0; } filepos = in.tellg(); if( atEOF ) return '\0'; else if( atEOL ) return '\n'; else return (char)ch; } /** * @method GetComment [void:protected] * * Reads rest of comment (starting '[' already input) and acts accordingly. * If comment is an output comment, and if an output stream has been attached, * writes the output comment to the output stream. Otherwise, output comments * are simply ignored like regular comments. If the labileFlag bit saveCommandComments * is in effect, the comment (without the square brackets) will be stored in token. */ void NexusToken::GetComment() { // Set comment level to 1 initially. Every ']' encountered reduces // level by one, so that we know we can stop when level becomes 0. int level = 1; // get first character char ch = GetNextChar(); if( atEOF ) { errormsg = "Unexpected end of file inside comment"; throw XNexus( errormsg, GetFilePosition(), GetFileLine(), GetFileColumn() ); } // see if first character is the output comment symbol ('!') // or command comment symbol (&) int printing = 0; int command = 0; if( ch == '!' ) printing = 1; else if( ch == '&' && labileFlags & saveCommandComments ) { command = 1; AppendToToken(ch); } // now read the rest of the comment for(;;) { ch = GetNextChar(); if( atEOF ) break; if( ch == ']' ) level--; else if( ch == '[' ) level++; if( level == 0 ) break; if( printing ) AppendToComment(ch); else if( command ) AppendToToken(ch); } if( printing ) { // allow output comment to be printed or displayed in most appropriate // manner for target operating system OutputComment( comment ); // now that we are done with it, free the memory used to store the comment comment = ""; } } /** * @method GetCurlyBracketedToken [void:protected] * * Reads rest of a token surrounded with curly brackets (the starting '{' * has already been input) up to and including the matching '}' character. * All nested curly-bracketed phrases will be included. */ void NexusToken::GetCurlyBracketedToken() { // Set level to 1 initially. Every '}' encountered reduces // level by one, so that we know we can stop when level becomes 0. int level = 1; char ch; for(;;) { ch = GetNextChar(); if( atEOF ) break; if( ch == '}' ) level--; else if( ch == '{' ) level++; AppendToToken(ch); if( level == 0 ) break; } } /** * @method GetDoubleQuotedToken [void:protected] * * Gets remainder of a double-quoted Nexus word (the first double quote character * was read in already by GetNextToken). This function reads characters until * the next double quote is encountered. Tandem double quotes within * a double-quoted Nexus word are not allowed and will be treated as the end * of the first word and the beginning of the next double-quoted Nexus word. * Tandem single quotes inside a double-quoted Nexus word are saved as two * separate single quote characters; to embed a single quote inside a * double-quoted Nexus word, simply use the single quote by itself (not * paired with another tandem single quote). */ void NexusToken::GetDoubleQuotedToken() { char ch; for(;;) { ch = GetNextChar(); if( atEOF ) break; if( ch == '\"' ) { break; } else if( ch == '_' ) { ch = ' '; AppendToToken(ch); } else AppendToToken(ch); } } /** * @method GetQuoted [void:protected] * * Gets remainder of a quoted Nexus word (the first single quote character * was read in already by GetNextToken). This function reads characters until * the next single quote is encountered. An exception occurs if two single * quotes occur one after the other, in which case the function continues * to gather characters until an isolated single quote is found. The tandem * quotes are stored as a single quote character in the token nxsstring. */ void NexusToken::GetQuoted() { char ch; for(;;) { ch = GetNextChar(); if( atEOF ) break; if( ch == '\'' && saved == '\'' ) { // paired single quotes, save as one single quote AppendToToken(ch); saved = '\0'; } else if( ch == '\'' && saved == '\0' ) { // save the single quote to see if it is followed by another saved = '\''; } else if( saved == '\'' ) { // previously read character was single quote but this is // something else, save current character so that it will // be the first character in the next token read saved = ch; break; } else if( ch == '_' ) { //JAC 19/04/2005 - for proper Nexus compatability in quoted identifiers // (in nexus, HELLO_TEST == 'HELLO TEST' != 'HELLO_TEST'.. wierdly). ch = '_'; AppendToToken(ch); } else AppendToToken(ch); } } /** * @method GetParentheticalToken [void:protected] * * Reads rest of parenthetical token (starting '(' already input) up to and * including the matching ')' character. All nested parenthetical phrases * will be included. */ void NexusToken::GetParentheticalToken() { // Set level to 1 initially. Every ')' encountered reduces // level by one, so that we know we can stop when level becomes 0. int level = 1; char ch; for(;;) { ch = GetNextChar(); if( atEOF ) break; if( ch == ')' ) level--; else if( ch == '(' ) level++; AppendToToken(ch); if( level == 0 ) break; } // rdmp if (labileFlags & toEndOfTree) { // This method is used to read Newick tree decsriptions, but these may extend beyond the // last ')' (e.g., information on branch length for the root node). This next hack keeps // reading until we hit the semicolon while (in.peek() != ';') { ch = in.get(); AppendToToken (ch); } } } /** * @method IsPunctuation [bool:protected] * @param ch [char] the character in question * * Returns true if character supplied is considered a punctuation character. * The following twenty characters are considered punctuation characters unless * otherwise indicated below: '(', ')', '[', ']', '{', '}', '/', '\\', ',', ';', * ':', '=', '*', '\'', '"', '`', '+', '-', '<' and '>'. *

Exceptions: *

    *
  • The tilde character ('~') is also considered punctuation if the * tildeIsPunctuation labile flag is set *
  • The special punctuation character (specified using the * SetSpecialPunctuationCharacter) is also considered punctuation if the * useSpecialPunctuation labile flag is set *
  • The hyphen (i.e., minus sign) character ('-') is not considered * punctuation if the hyphenNotPunctuation labile flag is set *
* Use the SetLabileFlagBit method to set one or more labile flags. */ bool NexusToken::IsPunctuation( char ch ) { char punctuation[21]; punctuation[0] = '('; punctuation[1] = ')'; punctuation[2] = '['; punctuation[3] = ']'; punctuation[4] = '{'; punctuation[5] = '}'; punctuation[6] = '/'; punctuation[7] = '\\'; punctuation[8] = ','; punctuation[9] = ';'; punctuation[10] = ':'; punctuation[11] = '='; punctuation[12] = '*'; punctuation[13] = '\''; punctuation[14] = '"'; punctuation[15] = '`'; punctuation[16] = '+'; punctuation[17] = '-'; punctuation[18] = '<'; punctuation[19] = '>'; punctuation[20] = '\0'; bool is_punctuation = false; if( strchr( punctuation, ch ) != NULL ) is_punctuation = true; if( labileFlags & tildeIsPunctuation && ch == '~' ) is_punctuation = true; if( labileFlags & useSpecialPunctuation && ch == special ) is_punctuation = true; if( labileFlags & hyphenNotPunctuation && ch == '-' ) is_punctuation = false; return is_punctuation; } /** * @method IsWhitespace [bool:protected] * @param ch [char] the character in question * * Returns true if character supplied is considered a whitespace character. * Note: treats '\n' as darkspace if labile flag newlineIsToken is in effect. */ bool NexusToken::IsWhitespace( char ch ) { char whitespace[4]; whitespace[0] = ' '; whitespace[1] = '\t'; whitespace[2] = '\n'; whitespace[3] = '\0'; bool ws = false; // if ch is found in the whitespace array, it's whitespace // if( strchr( whitespace, ch ) != NULL ) ws = true; // unless of course ch is the newline character and we're currently // treating newlines as darkspace! // if( labileFlags & newlineIsToken && ch == '\n' ) ws = false; return ws; } /** * @method Abbreviation [bool:public] * @param s [nxsstring] the comparison string * * Returns true if token begins with the capitalized portion of s * and, if token is longer than s, the remaining characters match * those in the lower-case portion of s. The comparison is case * insensitive. This function should be used instead of the * Begins function if you wish to allow for abbreviations of commands * and also want to ensure that user does not type in a word that * does not correspond to any command. */ bool NexusToken::Abbreviation( nxsstring s ) { int k; int slen = s.size(); int tlen = token.size(); char tokenChar, otherChar; // The variable mlen refers to the "mandatory" portion // that is the upper-case portion of s // int mlen; for( mlen = 0; mlen < slen; mlen++ ) { if( !isupper(s[mlen]) ) break; } // User must have typed at least mlen characters in // for there to even be a chance at a match // if( tlen < mlen ) return false; // If user typed in more characters than are contained in s, // then there must be a mismatch // if( tlen > slen ) return false; // Check the mandatory portion for mismatches // for( k = 0; k < mlen; k++ ) { tokenChar = (char)toupper( token[k] ); otherChar = s[k]; if( tokenChar != otherChar ) return false; } // Check the auxiliary portion for mismatches (if necessary) // for( k = mlen; k < tlen; k++ ) { tokenChar = (char)toupper( token[k] ); otherChar = (char)toupper( s[k] ); if( tokenChar != otherChar ) return false; } return true; } /** * @method AtEOF [bool:public] * * Returns true if and only if last call to GetNextToken * encountered the end-of-file character (or for some reason * the input stream is now out of commission). */ bool NexusToken::AtEOF() { return atEOF; } /** * @method AtEOL [bool:public] * * Returns true if and only if last call to GetNextToken * encountered the newline character while the newlineIsToken * labile flag was in effect */ bool NexusToken::AtEOL() { return atEOL; } /** * @method BlanksToUnderscores [void:public] * * Converts all blanks in token to underscore characters. Normally, * underscores found in the tokens read from a NEXUS file are converted * to blanks automatically as they are read; this function reverts * the blanks back to underscores. */ void NexusToken::BlanksToUnderscores() { char tmp[256]; int len = token.length(); assert( len < 256 ); strcpy( tmp, token.c_str() ); for( int i = 0; i < len; i++ ) { if( tmp[i] == ' ' ) tmp[i] = '_'; } token = tmp; } /** * @method Begins [bool:public] * @param s [nxsstring] the comparison string * @param respect_case [bool] determines whether comparison is case sensitive (false by default) * * Returns true if token nxsstring begins with the nxsstring s. * The comparison is case insensitive by default. This function should * be used instead of the Equals function if you wish to * allow for abbreviations of commands. */ bool NexusToken::Begins( nxsstring s, bool respect_case /* = false */ ) { int k; char tokenChar, otherChar; int slen = s.size(); if( slen > token.size() ) return false; for( k = 0; k < slen; k++ ) { if( respect_case ) { tokenChar = token[k]; otherChar = s[k]; } else { tokenChar = (char)toupper( token[k] ); otherChar = (char)toupper( s[k] ); } if( tokenChar != otherChar ) return false; } return true; } /** * @method Equals [bool:public] * @param s [nxsstring] the comparison string * @param respect_case [bool] determines whether or not comparison is case sensitive (default is false) * * Returns true if token nxsstring exactly equals s. The comparison * is case insensitive by default. If abbreviations are to be allowed, * either Begins or Abbreviation should be used instead of Equals. */ bool NexusToken::Equals( nxsstring s, bool respect_case /* = false */ ) { int k; char tokenChar, otherChar; int slen = s.size(); if( slen != token.size() ) return false; for( k = 0; k < token.size(); k++ ) { if( respect_case ) { tokenChar = token[k]; otherChar = s[k]; } else { tokenChar = (char)toupper( token[k] ); otherChar = (char)toupper( s[k] ); } if( tokenChar != otherChar ) return false; } return true; } /** * @method GetFileColumn [void:public] * * Returns value stored in filecol, which keeps track of the current * column in the data file (i.e., number of characters since the last * new line was encountered). */ long NexusToken::GetFileColumn() { return filecol; } /** * @method GetFilePosition [streampos:public] * * Returns value stored in filepos, which keeps track of the current * position in the data file (i.e., number of characters since the * beginning of the file). Note: for Metrowerks compiler, you must use the * offset() method of the streampos class to use the value returned. */ std::streampos NexusToken::GetFilePosition() { return filepos; } /** * @method GetFileLine [long:public] * * Returns value stored in fileline, which keeps track of the current * line in the data file (i.e., number of new lines encountered thus far). */ long NexusToken::GetFileLine() { return fileline; } /** * @method GetNextToken [void:public] * @throws XNexus * * Reads characters from in until a complete token has been read and * stored in token. *

GetNextToken performs a number of useful operations in the process * of retrieving tokens: *

    *
  • any underscore characters encountered are stored as blank spaces *
  • if the first character of the next token is an isolated single * quote, then the entire quoted nxsstring is saved as the next token *
  • paired single quotes are automatically converted to single quotes * before being stored *
  • comments are handled automatically (normal comments are treated as * whitespace and output comments are passed to the function OutputComment * which does nothing in the NexusToken class but can be overridden in a * derived class to handle these in an appropriate fashion) *
  • leading whitespace (including comments) is automatically skipped *
  • if the end of the file is reached on reading this token, the * atEOF flag is set and may be queried using the AtEOF member function *
  • punctuation characters are always returned as individual tokens * (see the Maddison, Swofford, and Maddison paper for the definition of * punctuation characters) *
*

The behavior of GetNextToken may be altered by using labile flags. * For example, the labile flag saveCommandComments can be set using * the member function SetLabileFlagBit. This will cause comments * of the form [&X] to be saved as tokens (without the square brackets), * but only for the aquisition of the next token. Labile flags are cleared * after each application. */ void NexusToken::GetNextToken() { ResetToken(); char ch = ' '; if( saved == '\0' || IsWhitespace(saved) ) { // skip leading whitespace while( IsWhitespace(ch) && !atEOF ) ch = GetNextChar(); saved = ch; } for(;;) { // break now if singleCharacterToken mode on and token length > 0 if( labileFlags & singleCharacterToken && token.size() > 0 ) break; // get next character either from saved or from input stream if( saved != '\0' ) { ch = saved; saved = '\0'; } else ch = GetNextChar(); // break now if we've hit EOF if( atEOF ) break; if( ch == '\n' && labileFlags & newlineIsToken ) { if( token.size() > 0 ) { // newline came after token, save newline until // next time when it will be reported as a separate // token atEOL = 0; saved = ch; } else { atEOL = 1; AppendToToken(ch); } break; } else if( IsWhitespace(ch) ) { // break only if we've begun adding to token // (remember, if we hit a comment before a token, // there might be further white space between the comment and // the next token) if( token.size() > 0 ) break; } else if( ch == '_' ) { ch = ' '; AppendToToken(ch); } else if( ch == '[' ) { // get rest of comment and deal with it, but notice // that we only break if the comment ends a token, // not if it starts one (comment counts as whitespace) // // in the case of command comments (if saveCommandComment) GetComment will // add to the token nxsstring, causing us to break because // token.size() will be greater than 0 GetComment(); if( token.size() > 0 ) break; } else if( ch == '(' && labileFlags & parentheticalToken ) { AppendToToken(ch); // get rest of parenthetical token GetParentheticalToken(); break; } else if( ch == '{' && labileFlags & curlyBracketedToken ) { AppendToToken(ch); // get rest of curly-bracketed token GetCurlyBracketedToken(); break; } else if( ch == '\"' && labileFlags & doubleQuotedToken ) { // get rest of double-quoted token GetDoubleQuotedToken(); break; } else if( ch == '\'' ) { if( token.size() > 0 ) { // we've encountered a single quote after a token has // already begun to be read; should be another tandem // single quote character immediately following ch = GetNextChar(); if( ch == '\'' ) AppendToToken(ch); else { errormsg = "Expecting second single quote character"; throw XNexus( errormsg, GetFilePosition(), GetFileLine(), GetFileColumn() ); } } else { // get rest of quoted Nexus word and break, since // we will have eaten one token after calling GetQuoted GetQuoted(); } break; } else if( IsPunctuation(ch) ) { if( token.size() > 0 ) { // if we've already begun reading the token, encountering // a punctuation character means we should stop, saving // the punctuation character for the next token saved = ch; break; } else { // if we haven't already begun reading the token, encountering // a punctuation character means we should stop and return // the punctuation character as this token (i.e., the token // is just the single punctuation character AppendToToken(ch); break; } } else { AppendToToken(ch); } } labileFlags = 0; } /** * @method GetToken [nxsstring:public] * @param respect_case [bool] determines whether token is converted to upper case before being returned * * Returns the token nxsstring. Specifying false for respect_case parameter causes all * characters in token to be converted to upper case before token nxsstring is returned. Specifying * true (default) results in GetToken returning exactly what it read from the file. */ nxsstring NexusToken::GetToken( bool respect_case /* = true */ ) { if( !respect_case ) ToUpper(); return token; } /** * @method GetTokenLength [int:public] * * Returns token.size(). */ int NexusToken::GetTokenLength() { return token.size(); } /** * @method IsPlusMinusToken [bool:public] * * Returns true if current token is a single character and this character * is either '+' or '-'. */ bool NexusToken::IsPlusMinusToken() { if( token.size() == 1 && ( token[0] == '+' || token[0] == '-' ) ) return true; else return false; } /** * @method IsPunctuationToken [bool:public] * * Returns true if current token is a single character and this character * is a punctuation character (as defined in IsPunctuation function). */ bool NexusToken::IsPunctuationToken() { if( token.size() == 1 && IsPunctuation( token[0] ) ) return true; else return false; } /** * @method IsWhitespaceToken [bool:public] * * Returns true if current token is a single character and this character * is a whitespace character (as defined in IsWhitespace function). */ bool NexusToken::IsWhitespaceToken() { if( token.size() == 1 && IsWhitespace( token[0] ) ) return true; else return false; } /** * @method ReplaceToken [void:public] * @param s [const nxsstring] nxsstring to replace current token nxsstring * * Replaces current token nxsstring with s. */ void NexusToken::ReplaceToken( const nxsstring s ) { token = s; } /** * @method ResetToken [void:public] * * Sets token to the empty nxsstring (""). */ void NexusToken::ResetToken() { token = ""; } /** * @method SetSpecialPunctuationCharacter [void:public] * @param c [char] the character to which special is set * * Sets the special punctuation character to c. If the labile bit * useSpecialPunctuation is set, this character will be added to the * standard list of punctuation symbols, and will be returned as a * separate token like the other punctuation characters. */ void NexusToken::SetSpecialPunctuationCharacter( char c ) { special = c; } /** * @method SetLabileFlagBit [void:public] * @param bit [int] the bit (see enum) to set in labileFlags * * Sets the bit specified in the variable labileFlags. The available * bits are specified in the enumeration starting with saveCommandComments. * All bits in labileFlags are cleared after each token is read. */ void NexusToken::SetLabileFlagBit( int bit ) { labileFlags |= bit; } /** * @method StoppedOn [void:public] * @param ch [char] the character to compare with saved character * * Checks character stored in the variable saved to see if it * matches supplied character ch. Good for checking such things * as whether token stopped reading characters because it encountered * a newline (and labileFlags bit newlineIsToken was set): *

StoppedOn('\n'); *

or whether token stopped reading characters because of a * punctuation character such as a comma: *

StoppedOn(','); */ bool NexusToken::StoppedOn( char ch ) { if( saved == ch ) return true; else return false; } /** * @method StripWhitespace [void:public] * * Strips whitespace from currently-stored token. Removes leading, * trailing, and embedded whitespace characters. */ void NexusToken::StripWhitespace() { nxsstring s = ""; for( int j = 0; j < token.size(); j++ ) { if( IsWhitespace( token[j] ) ) continue; s += token[j]; } token = s; } /** * @method ToUpper [void:public] * * Converts all alphabetical characters in token to upper case. */ void NexusToken::ToUpper() { for( int i = 0; i < token.size(); i++ ) token[i] = (char)toupper( token[i] ); } /** * @method Write [void:public] * @param out [ostream&] the output stream to which to write token nxsstring * * Simply outputs the current nxsstring stored in token to the output * stream out. Does not send a newline to the output stream afterwards. */ void NexusToken::Write( std::ostream& out ) { out << token; } /** * @method Writeln [void:public] * @param out [ostream&] the output stream to which to write token nxsstring * * Simply outputs the current nxsstring stored in token to the output * stream out. Sends a newline to the output stream afterwards. */ void NexusToken::Writeln( std::ostream& out ) { out << token << endl; } /** * @method OutputComment [virtual void:public] * @param msg [nxsstring&] the output comment to be displayed * * This function is called whenever an output comment (i.e., a comment * beginning with an exclamation point) is found in the data file. * This version of OutputComment does nothing; override this virtual * function to display the output comment in the most appropriate way * for the platform you are supporting. */ void NexusToken::OutputComment( nxsstring& /* msg */ ) { } tv-0.5/ncl-2.0/src/discretematrix.cpp0000775000076400007640000005154507575350625014370 00000000000000#include "nexusdefs.h" #include "discretedatum.h" #include "discretematrix.h" using namespace std; /** * @class DiscreteMatrix * @file discretematrix.h * @file discretematrix.cpp * @author Paul O. Lewis * @copyright Copyright © 1999. All Rights Reserved. * @variable data [Datum**:public] storage for the data * @variable ncols [int:public] number of rows (taxa) in the data matrix * @variable nrows [int:public] number of columns (characters) in the data matrix * @see AllelesBlock * @see CharactersBlock * @see DataBlock * @see DiscreteDatum * @see NexusReader * * Class providing storage for the discrete data types (dna, rna, nucleotide, * standard, and protein) inside a DATA or CHARACTERS block. This class is * also used to store the data for an ALLELES block. Maintains a matrix in * which each cell is an object of the class DiscreteDatum. DiscreteDatum * stores the state for a particular combination of taxon and character as * an integer. Ordinarily, there will be a single state recorded for each * taxon/character combination, but exceptions exist if there is polymorphism * for this taxon/character or if there is uncertainty about the state (e.g., * in dna data, the data file might have contained an R or Y entry). Please * consult the documentation for the DiscreteDatum * class for the details about how states are stored. * *

For data stored in an ALLELES block, rows of the matrix correspond to * individuals and columns to loci. Each DiscreteDatum int must therefore * store information about both genes at a single locus for a single individual * in the case of diploid data. To do this, two macros HIWORD and LOWORD are * used to divide up the int value into two words. A maximum of 255 distinct * allelic forms can be accommodated by this scheme, assuming at minimum a * 32-bit architecture. Because it is not known in advance how many rows are * going to be necessary, The DiscreteMatrix class provides the AddRows * method, which expands the number of rows allocated for the matrix while * preserving data already stored. */ /** * @constructor * * Performs the following initializations: * *
Variable Initial Value *
nrows = rows *
ncols = cols *
*

In addition, memory is allocated for data (each element of the matrix * data is a DiscreteDatum object which can do its own initialization). */ DiscreteMatrix::DiscreteMatrix( int rows, int cols ) : nrows(rows), ncols(cols) { int i; data = new DiscreteDatum*[nrows]; for( i = 0; i < nrows; i++ ) data[i] = new DiscreteDatum[ncols]; } /** * @destructor * * Deletes memory allocated in the constructor for data and symbols. */ DiscreteMatrix::~DiscreteMatrix() { int i; if( data != NULL ) { for( i = 0; i < nrows; i++ ) delete [] data[i]; delete [] data; } } /** * @method AddRows [void:private] * @param nAddRows [int] the number of additional rows to allocate * * Allocates memory for nAddRows additional rows and updates the variable * nrows. Data already stored in data is not destroyed; the newly-allocated * rows are added at the bottom of the existing matrix. */ void DiscreteMatrix::AddRows( int nAddRows ) { int i; int new_nrows = nrows + nAddRows; DiscreteDatum** new_data = new DiscreteDatum*[new_nrows]; for( i = 0; i < nrows; i++ ) new_data[i] = data[i]; delete [] data; data = new_data; for( i = nrows; i < new_nrows; i++ ) data[i] = new DiscreteDatum[ncols]; nrows = new_nrows; } /** * @method AddState [void:public] * @param i [int] the (0-offset) index of the taxon in question * @param j [int] the (0-offset) index of the character in question * @param value [int] the state to be added * * Adds state directly to the DiscreteDatum object at data[i][j]. * Assumes i is in the range [0..nrows) and j is in the range [0..ncols). * The value parameter is assumed to be either zero or a positive integer. * Calls private member function AddState to do the real work; look at * the documentation for that function for additional details. */ void DiscreteMatrix::AddState( int i, int j, int value ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); assert( value >= 0 ); AddState( data[i][j], value ); } /** * @method AddState [void:private] * @param d [DiscreteDatum&] the DiscreteDatum object affected * @param value [int] the additional state to be added * * Adds an additional state to the array states of d. If states is NULL, * allocates memory for two integers and assigns 1 to the first and value * to the second. If states is non-NULL, allocates a new int array long * enough to hold states already present plus the new one being added here, * then deletes the old states array. Assumes that we are not trying to * set either the missing state or the gap state here; the functions * SetMissing or SetGap, respectively, should be used for those purposes. * Also assumes that we do not want to "overwrite" the state. This function * adds states to those already present; use SetState to overwrite the state. */ void DiscreteMatrix::AddState( DiscreteDatum& d, int value ) { int oldns = GetNumStates(d); int k, newlen; int* tmp = d.states; if( IsMissing(d) ) { d.states = new int[2]; d.states[0] = 1; d.states[1] = value; } else if( IsGap(d) ) { d.states = new int[2]; d.states[0] = 1; d.states[1] = value; } else if( oldns == 1 ) { d.states = new int[4]; d.states[0] = 2; d.states[1] = tmp[1]; d.states[2] = value; d.states[3] = 0; // assume not polymorphic unless told otherwise } else { newlen = oldns + 3; d.states = new int[newlen]; d.states[0] = oldns+1; for( k = 1; k < oldns+1; k++ ) d.states[k] = tmp[k]; d.states[newlen-2] = value; d.states[newlen-1] = 0; // assume not polymorphic unless told otherwise } if( tmp != NULL ) delete [] tmp; } /** * @method CopyStatesFromFirstTaxon [long:public] * @param i [int] the (0-offset) index of the taxon in question * @param j [int] the (0-offset) index of the character in question * * Sets state of taxon i and character j to state of first taxon for character j. * Assumes i is in the range [0..nrows) and j is in the range [0..ncols). * Also assumes both data and symbols are non-NULL. */ void DiscreteMatrix::CopyStatesFromFirstTaxon( int i, int j ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); data[i][j].CopyFrom( data[0][j] ); } /** * @method DebugSaveMatrix [int:public] * @param out [ostream&] the stream on which to dump the matrix contents * * Performs a dump of the current contents of the data matrix stored in * the variable "data" */ void DiscreteMatrix::DebugSaveMatrix( std::ostream& out, int colwidth /* = 12 */ ) { out << endl; out << "nrows = " << nrows << endl; out << "ncols = " << ncols << endl; for( int i = 0; i < nrows; i++ ) { for( int j = 0; j < ncols; j++ ) { if( IsMissing(i, j) ) out << setw(colwidth) << '?'; else if( IsGap(i, j) ) out << setw(colwidth) << '-'; else out << setw(colwidth) << GetState(i, j); } out << endl; } } /** * @method DuplicateRow [int:public] * @param row [int] the row to be duplicated * @param count [int] the total number of copies needed * @param startCol [int] the starting column (inclusive) in the range of columns to be duplicated * @param endCol [int] the ending column (inclusive) in the range of columns to be duplicated * * Duplicates columns startCol to endCol in row row of the matrix. If additional * storage is needed to accommodate the duplication, this is done automatically * through the use of the AddRows method. Note that count includes the row already * present, so if count is 10, then 9 more rows will actually be added to the matrix * to make a total of 10 identical rows. The parameters startCol and endCol default * to 0 and ncols, so if duplication of the entire row is needed, these need not * be explicitly specified in the call to DuplicateRow. * *

Return value is number of additional rows allocated to matrix (0 if no * rows needed to be allocated). */ int DiscreteMatrix::DuplicateRow( int row, int count , int startCol /* = 0 */, int endCol /* = -1 */ ) { assert( data != NULL ); assert( row >= 0 ); assert( row < nrows ); assert( startCol >= 0 ); assert( startCol < ncols ); if( endCol == -1 ) endCol = ncols-1; assert( endCol > startCol ); assert( endCol < ncols ); // expand matrix (if necessary) to accommodate additional rows // int nNewRows = 0; if( row + count > nrows ) { nNewRows = row + count - nrows; AddRows( nNewRows ); } for( int i = 1; i < count; i++ ) { for( int col = startCol; col <= endCol; col++ ) { data[row+i][col] = data[row][col]; } } return nNewRows; } /** * @method Flush [void:public] * * Deletes all cells of data and resets nrows and ncols to 0. */ void DiscreteMatrix::Flush() { // delete what is there now if( data != NULL ) { int i; for( i = 0; i < nrows; i++ ) delete [] data[i]; delete [] data; } nrows = 0; ncols = 0; } /** * @method GetDiscreteDatum [DiscreteDatum&:private] * @param i [int] the row of the matrix * @param j [int] the column of the matrix * * Assumes that i is in the range [0..nrows) and j is in the range [0..ncols). * Returns reference to the DiscreteDatum object at row i, column j of matrix. */ DiscreteDatum& DiscreteMatrix::GetDiscreteDatum( int i, int j ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); return data[i][j]; } /** * @method GetNumStates [int:public] * @param i [int] the (0-offset) index of the taxon in question * @param j [int] the (0-offset) index of the character in question * * Returns number of states for taxon i and character j. * Assumes i is in the range [0..nrows) and j is in the range [0..ncols). */ int DiscreteMatrix::GetNumStates( int i, int j ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); return GetNumStates( data[i][j] ); } /** * @method GetNumStates [int:private] * @param d [DiscreteDatum&] the datum in question * * Returns total number of states assigned to d. This function will return * 0 for both gap and missing states. */ int DiscreteMatrix::GetNumStates( DiscreteDatum& d ) { if( d.states == NULL ) return 0; return d.states[0]; } /** * @method GetObsNumStates [int:public] * @param j [int] the (0-offset) index of the character in question * * Returns number of states for character j over all taxa. * Note: this function is rather slow, as it must walk through * each row, adding the states encountered to a set, then finally * returning the size of the set. Thus, if this function is called * often, it would be advisable to initialize an array using this * function, then refer to the array subsequently. * Assumes j is in the range [0..ncols). */ int DiscreteMatrix::GetObsNumStates( int j ) { assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); std::set< int, std::less > stateset; for( int i = 0; i < nrows; i++ ) { DiscreteDatum& d = data[i][j]; int ns = GetNumStates(d); if( ns == 0 ) continue; for( int k = 0; k < ns; k++ ) stateset.insert( GetState( d, k ) ); } return stateset.size(); } /** * @method GetState [int:private] * @param i [int] the row of the matrix * @param j [int] the column of the matrix * @param k [int] the state to return (use default of 0 if only one state present) * * Assumes that i is in the range [0..nrows) and j is in the range [0..ncols). * Also assumes that cell i, j holds at least one state (i.e., it is not the * gap or missing states). Use the function GetNumStates to determine the * number of states present (k must be less than this number). */ int DiscreteMatrix::GetState( int i, int j, int k /* = 0 */ ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); return GetState( data[i][j], k ); } /** * @method GetState [int:private] * @param d [DiscreteDatum&] the datum in question * @param i [int] the number of the state * * Returns the internal int representation of the state stored in d * at position i of the array states. Assumes that the state is not the * missing or gap state. Use IsMissing and IsGap prior to calling * this function to ensure this function will succeed. The default * value for i is 0, so calling GetState(d) will return the first * state, whether or not there are multiple states stored. Assumes * that i is in the range [ 0 .. d.states[0] ). */ int DiscreteMatrix::GetState( DiscreteDatum& d, int i /* = 0 */ ) { assert( !IsMissing(d) ); assert( !IsGap(d) ); assert( i >= 0 ); assert( i < d.states[0] ); return d.states[i+1]; } /** * @method IsGap [int:public] * @param i [int] the (0-offset) index of the taxon in question * @param j [int] the (0-offset) index of the character in question * * Returns 1 if the state for taxon i, character j, is set to the * gap symbol, 0 otherwise. Assumes i is in the range [0..nrows) and j is * in the range [0..ncols). */ int DiscreteMatrix::IsGap( int i, int j ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); return IsGap( data[i][j] ); } /** * @method IsGap [int:private] * @param d [DiscreteDatum&] the datum in question * * Returns 1 if the gap state is stored, 0 otherwise. */ int DiscreteMatrix::IsGap( DiscreteDatum& d ) { if( d.states == NULL || d.states[0] > 0 ) return 0; else return 1; } /** * @method IsMissing [int:public] * @param i [int] the (0-offset) index of the taxon in question * @param j [int] the (0-offset) index of the character in question * * Returns 1 if the state for taxon i, character j, is set to the * missing data symbol, 0 otherwise. Assumes i is in the range [0..nrows) * and j is in the range [0..ncols). */ int DiscreteMatrix::IsMissing( int i, int j ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); return IsMissing( data[i][j] ); } /** * @method IsMissing [int:private] * @param d [DiscreteDatum&] the datum in question * * Returns 1 if the missing state is stored, 0 otherwise. */ int DiscreteMatrix::IsMissing( DiscreteDatum& d ) { if( d.states == NULL ) return 1; else return 0; } /** * @method IsPolymorphic [int:public] * @param i [int] the (0-offset) index of the taxon in question * @param j [int] the (0-offset) index of the character in question * * Returns 1 if character j is polymorphic in taxon i, 0 otherwise. Assumes * i is in the range [0..nrows) and j is in the range [0..ncols). */ int DiscreteMatrix::IsPolymorphic( int i, int j ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); return IsPolymorphic( data[i][j] ); } /** * @method IsPolymorphic [int:private] * @param d [DiscreteDatum&] the datum in question * * Returns 1 if the number of states is greater than 1 and polymorphism * has been specified. Returns 0 if the state stored is the missing state, * the gap state, or if the number of states is 1. */ int DiscreteMatrix::IsPolymorphic( DiscreteDatum& d ) { if( d.states == NULL || d.states[0] < 2 ) return 0; int nstates = d.states[0]; int ncells = nstates + 2; return d.states[ncells-1]; } /** * @method Reset [void:public] * @param rows [int] the new number of rows (taxa) * @param cols [int] the new number of columns (characters) * * Deletes all cells of data and flags and reallocates memory to create * a new matrix object with nrows = rows and ncols = cols. */ void DiscreteMatrix::Reset( int rows, int cols ) { int i; assert( rows > 0 ); assert( cols > 0 ); // delete what is there now if( data != NULL ) { for( i = 0; i < nrows; i++ ) delete [] data[i]; delete [] data; } nrows = rows; ncols = cols; // create new data matrix data = new DiscreteDatum*[nrows]; for( i = 0; i < nrows; i++ ) { data[i] = new DiscreteDatum[ncols]; } } /** * @method SetGap [void:public] * @param i [int] the (0-offset) index of the taxon in question * @param j [int] the (0-offset) index of the character in question * * Sets state stored at data[i][j] to the gap state. * Assumes i is in the range [0..nrows) and j is in the range * [0..ncols). */ void DiscreteMatrix::SetGap( int i, int j ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); SetGap( data[i][j] ); } /** * @method SetGap [void:private] * @param d [DiscreteDatum&] the datum in question * * Assigns the gap state to d, erasing any previously stored information. * The gap state is designated internally as a states array one element * long, with the single element set to the value 0. */ void DiscreteMatrix::SetGap( DiscreteDatum& d ) { if( d.states != NULL ) delete [] d.states; d.states = new int[1]; d.states[0] = 0; } /** * @method SetMissing [void:public] * @param i [int] the (0-offset) index of the taxon in question * @param j [int] the (0-offset) index of the character in question * * Sets state stored at data[i][j] to the missing state. * Assumes i is in the range [0..nrows) and j is in the range * [0..ncols). */ void DiscreteMatrix::SetMissing( int i, int j ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); SetMissing( data[i][j] ); } /** * @method SetMissing [void:private] * @param d [DiscreteDatum&] the datum in question * * Assigns the missing state to d, erasing any previously stored information. * The missing state is stored internally as a NULL value for the states array. */ void DiscreteMatrix::SetMissing( DiscreteDatum& d ) { if( d.states != NULL ) delete [] d.states; d.states = NULL; } /** * @method SetPolymorphic [void:public] * @param value [int] specify 1 if taxon at row i is polymorphic at character in column j, 0 if uncertain which state applies * * Sets polymorphism state of taxon i and character j to value. Value is * 1 by default, so calling SetPolymorphic(i, j) with no value specified * will set polymorphic to 1 in data[i][j]. Assumes i is in the range [0..nrows) * and j is in the range [0..ncols). Also assumes that the number of states * stored is greater than 1. */ void DiscreteMatrix::SetPolymorphic( int i, int j, int value /* = 1 */ ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); assert( value == 0 || value == 1 ); SetPolymorphic( data[i][j], value ); } /** * @method SetPolymorphic [void:private] * @param d [DiscreteDatum&] the datum in question * @param value [int] specify 1 if polymorphic, 0 if uncertain * * Sets the polymorphism cell (last cell in d.states) to value. * Warning: has no effect if there are fewer than 2 states stored! */ void DiscreteMatrix::SetPolymorphic( DiscreteDatum& d, int value ) { if( d.states == NULL || d.states[0] < 2 ) return; int nstates = d.states[0]; int ncells = nstates + 2; d.states[ncells-1] = value; } /** * @method SetState [long:public] * @param i [int] the (0-offset) index of the taxon in question * @param j [int] the (0-offset) index of the character in question * @param stateSymbol [char] the state to assign * * Sets state of taxon row and character col to stateSymbol. * Assumes i is in the range [0..nrows) and j is in the range [0..ncols). * Also assumes both data and symbols are non-NULL. Finally, it is also * assumed that this function will not be called if stateSymbol represents * the missing or gap state, in which case the functions SetMissing or * SetGap, respectively, should be called instead. */ void DiscreteMatrix::SetState( int i, int j, int value ) { assert( i >= 0 ); assert( i < nrows ); assert( j >= 0 ); assert( j < ncols ); assert( data != NULL ); SetState( data[i][j], value ); } /** * @method SetState [void:private] * @param d [DiscreteDatum&] the datum in question * @param value [int] the value to assign for the state * * Assigns value to the 2nd cell in states (1st cell in states * array set to 1 to indicate that there is only one state). * Warning: if there are already one or more states (including * the gap state) assigned to d, they will be forgotten. Use * the function AddState if you want to preserve states already * stored in d. Assumes state being set is not the missing state * nor the gap state; use SetMissing or SetGap, respectively, to * do this. */ void DiscreteMatrix::SetState( DiscreteDatum& d, int value ) { if( d.states != NULL ) delete [] d.states; d.states = new int[2]; d.states[0] = 1; d.states[1] = value; } tv-0.5/ncl-2.0/src/nexus.h0000775000076400007640000000311407620465560012131 00000000000000#ifndef __NEXUS_H #define __NEXUS_H class Nexus; // // NexusBlock class // class NexusBlock { friend class Nexus; protected: bool isEmpty; bool isEnabled; Nexus* nexus; NexusBlock* next; nxsstring id; virtual void Read( NexusToken& token ) = 0; virtual void Reset() = 0; public: nxsstring errormsg; NexusBlock(); virtual ~NexusBlock(); void SetNexus( Nexus* nxsptr ); nxsstring GetID(); bool IsEmpty(); void Enable(); void Disable(); bool IsEnabled(); virtual int CharLabelToNumber( nxsstring s ); virtual int TaxonLabelToNumber( nxsstring s ); virtual void SkippingCommand( nxsstring commandName ); virtual void Report( std::ostream& out ) = 0; }; // // Nexus class // class Nexus { protected: NexusBlock* blockList; public: Nexus(); virtual ~Nexus(); bool BlockListEmpty(); void Add( NexusBlock* newBlock ); void Detach( NexusBlock* newBlock ); void Execute( NexusToken& token, bool notifyStartStop = true ); virtual void DebugReportBlock( NexusBlock& nexusBlock ); char* NCLNameAndVersion(); char* NCLCopyrightNotice(); char* NCLHomePageURL(); // hooks implemented as pure virtual functions virtual void ExecuteStarting() = 0; virtual void ExecuteStopping() = 0; virtual void EnteringBlock( nxsstring blockName ) = 0; virtual void ExitingBlock( nxsstring blockName ) = 0; virtual void OutputComment( nxsstring comment ) = 0; virtual void NexusError( nxsstring& msg, std::streampos pos, long line, long col ) = 0; virtual void SkippingDisabledBlock( nxsstring blockName ) = 0; virtual void SkippingBlock( nxsstring blockName ) = 0; }; #endif tv-0.5/ncl-2.0/src/nxsdate.cpp0000775000076400007640000001346307745166532013005 00000000000000// nxsdate.cpp // Copyright (C) 1999 Paul O. Lewis. // // This file defines a class useful for obtaining and displaying the current date // // This file is part of SimpleNxs. SimpleNxs is free software; you can // redistribute it and/or modify it under the terms of the GNU General // Public License as published by the Free Software Foundation; // either version 2 of the License, or (at your option) any later version. // // SimpleNxs is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along with // SimpleNxs; see the file COPYING. If not, write to the Free Software Foundation, // Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // // Author contact information: // // Paul O. Lewis, Ph.D. // Assistant Professor // Department of Ecology and Evolutionary Biology (U-43) // University of Connecticut // 75 North Eagleville Road // Storrs, CT 06269-3043 // // Office: 166A Torrey Life Sciences // Phone: (860) 486-2069 // FAX: (860) 486-6364 (not private) // email: paul.lewis@uconn.edu /** * @class NxsDate * @file nxsdate.h * @file nxsdate.cpp * @author Paul O. Lewis * @copyright Copyright 1999. All Rights Reserved. * @variable secs [time_t] current time * @variable ts [tm] time structure * */ #include #include #if (defined __MWERKS__) || (defined __GNUC__) #include #endif #include "nxsdate.h" /** * @constructor * * Calls GetCurrentDate method. */ NxsDate::NxsDate() { GetCurrentDate(); } /** * @constructor * @param day [int] the day * @param month [const char*] the month (no abbreviation allowed) * @param year [int] the year (supply all four digits) * @param hours [int] default is 0 * @param minutes [int] default is 0 * @param seconds [int] default is 1 * @throws XTime * * Sets secs and fills ts based on day, month, year, hours, minutes, * and seconds provided. Throws XTime exception if parameters * supplied do not represent a valid date/time. */ NxsDate::NxsDate( int day, const char* month, int year , int hours /* = 0 */, int minutes /* = 0 */ , int seconds /* = 1 */ ) { assert( month != NULL ); char mstr[10]; int n = strlen(month); for( int i = 0; i < n; i++ ) mstr[i] = toupper( month[i] ); mstr[n] = '\0'; ts.tm_mday = day; if( strcmp( month, "JANUARY" ) == 0 ) ts.tm_mon = 0; else if( strcmp( month, "FEBRUARY" ) == 0 ) ts.tm_mon = 1; else if( strcmp( month, "MARCH" ) == 0 ) ts.tm_mon = 2; else if( strcmp( month, "APRIL" ) == 0 ) ts.tm_mon = 3; else if( strcmp( month, "MAY" ) == 0 ) ts.tm_mon = 4; else if( strcmp( month, "JUNE" ) == 0 ) ts.tm_mon = 5; else if( strcmp( month, "JULY" ) == 0 ) ts.tm_mon = 6; else if( strcmp( month, "AUGUST" ) == 0 ) ts.tm_mon = 7; else if( strcmp( month, "SEPTEMBER" ) == 0 ) ts.tm_mon = 8; else if( strcmp( month, "OCTOBER" ) == 0 ) ts.tm_mon = 9; else if( strcmp( month, "NOVEMBER" ) == 0 ) ts.tm_mon = 10; else if( strcmp( month, "DECEMBER" ) == 0 ) ts.tm_mon = 11; else ts.tm_mon = -1; ts.tm_year = year - 1900; ts.tm_hour = hours; ts.tm_min = minutes; ts.tm_sec = seconds; ts.tm_wday = -1; ts.tm_yday = -1; ts.tm_isdst = -1; // ensure that the date is correct (and compute tm_wday and tm_yday) secs = mktime(&ts); if( secs == -1 ) throw XTime(); } /** * @method c_str [char*:public] * * Calls asctime to convert currently stored date and time to * a string. */ char* NxsDate::c_str() { return asctime(&ts); } /** * @method GetCurrentDate [void:public] * * Sets secs and fills ts. Called by the NxsDate default constructor. */ void NxsDate::GetCurrentDate() { secs = time(NULL); tm* time_structure; time_structure = localtime(&secs); #if 1 ts = *time_structure; #else ts.tm_mday = time_structure->tm_mday; // day of the month (1 to 31) ts.tm_mon = time_structure->tm_mon; // month (0 to 11) ts.tm_year = time_structure->tm_year; // year ts.tm_hour = time_structure->tm_hour; // hours (24 hour clock) ts.tm_min = time_structure->tm_min; // minutes ts.tm_sec = time_structure->tm_sec; // seconds ts.tm_wday = time_structure->tm_wday; // day of the week (0 is Sunday) ts.tm_yday = time_structure->tm_yday; // day of the year (0 to 365) ts.tm_isdst = time_structure->tm_isdst; // is daylight savings time #endif } /** * @operator = [void:public] * @param other_date [const NxsDate&] the object being copied * * Copies secs and ts from other_date object. */ void NxsDate::operator=( const NxsDate& other_date ) { secs = other_date.secs; ts = other_date.ts; } /** * @operator - [long:public] * @param other_date [const NxsDate&] the object being copied * * Returns secs minus other_date.secs. */ long NxsDate::operator-( const NxsDate& other_date ) const { return ( secs - other_date.secs ); } /** * @operator < [int:public] * @param other_date [const NxsDate&] the other NxsDate object * * Returns 1 if secs is less than other_date.secs; otherwise, * returns 0. */ int NxsDate::operator<( const NxsDate& other_date ) const { return ( secs < other_date.secs ? 1 : 0 ); } /** * @operator > [int:public] * @param other_date [const NxsDate&] the other NxsDate object * * Returns 1 if secs is greater than other_date.secs; otherwise, * returns 0. */ int NxsDate::operator>( const NxsDate& other_date ) const { return ( secs > other_date.secs ? 1 : 0 ); } /** * @operator << [ostream&:public] * @param o [ostream&] the output stream * @param d [const NxsDate&] the NxsDate object * * Outputs the current date and time in the form of a string. * This function is a friend, not a member function. */ std::ostream& operator<<( std::ostream& o, const NxsDate& d ) { o << asctime(&d.ts); return o; } tv-0.5/ncl-2.0/src/charactersblock.h0000775000076400007640000001044710306774036014124 00000000000000#ifndef __CHARACTERSBLOCK_H #define __CHARACTERSBLOCK_H class AssumptionsBlock; // // CharactersBlock class // class CharactersBlock : public NexusBlock { // Adding a new data member? Don't forget to: // 1. Describe it in the class header comment at the top of "charactersblock.cpp" // 2. Initialize it (unless it is self-initializing) in the constructor // and reinitialize it in the Reset function // 3. Describe the initial state in the constructor documentation // 4. Delete memory allocated to it in both the destructor and Reset function // 5. Report it in some way in the Report function friend class AssumptionsBlock; protected: TaxaBlock& taxa; AssumptionsBlock& assumptionsBlock; int ntax; int ntaxTotal; int nchar; int ncharTotal; bool newtaxa; bool newchar; bool respectingCase; bool transposing; bool interleaving; bool tokens; bool labels; char missing; char gap; char matchchar; char* symbols; AssocList equates; DiscreteMatrix* matrix; int* charPos; int* taxonPos; IntSet eliminated; bool* activeChar; bool* activeTaxon; LabelList charLabels; LabelListBag charStates; public: enum datatypes { standard = 1, dna, rna, nucleotide, protein, continuous }; private: datatypes datatype; protected: void BuildCharPosArray( bool check_eliminated = false ); int IsInSymbols( char ch ); void HandleCharlabels( NexusToken& token ); void HandleCharstatelabels( NexusToken& token ); void HandleDimensions( NexusToken& token, nxsstring newtaxaLabel, nxsstring ntaxLabel, nxsstring ncharLabel ); void HandleEliminate( NexusToken& token ); void HandleEndblock( NexusToken& token, nxsstring charToken ); virtual void HandleFormat( NexusToken& token ); virtual void HandleMatrix( NexusToken& token ); virtual bool HandleNextState( NexusToken& token, int i, int c ); void HandleStatelabels( NexusToken& token ); virtual void HandleStdMatrix( NexusToken& token ); void HandleTaxlabels( NexusToken& token ); virtual int HandleTokenState( NexusToken& token, int c ); virtual void HandleTransposedMatrix( NexusToken& token ); int PositionInSymbols( char ch ); virtual void Read( NexusToken& token ); virtual void Reset(); void ResetSymbols(); void ShowStates( std::ostream& out, int i, int j ); void WriteStates( DiscreteDatum& d, char* s, int slen ); public: CharactersBlock( TaxaBlock& tb, AssumptionsBlock& ab ); virtual ~CharactersBlock(); int ApplyDelset( IntSet& delset ); int ApplyExset( IntSet& exset ); int ApplyIncludeset( IntSet& inset ); int ApplyRestoreset( IntSet& restoreset ); virtual int CharLabelToNumber( nxsstring s ); virtual int TaxonLabelToNumber( nxsstring s ); virtual void DebugShowMatrix( std::ostream& out, char* marginText = NULL ); nxsstring GetCharLabel( int i ); int GetCharPos( int origCharIndex ); int GetTaxPos( int origTaxonIndex ); int GetDataType(); char GetGapSymbol(); int GetInternalRepresentation( int i, int j, int k = 0 ); char GetMatchcharSymbol(); virtual int GetMaxObsNumStates(); char GetMissingSymbol(); int GetNTax(); int GetNChar(); int GetNCharTotal(); int GetNTaxTotal(); int GetNumActiveChar(); int GetNumActiveTaxa(); int GetNumEliminated(); int GetNumEquates(); int GetNumMatrixCols(); int GetNumMatrixRows(); int GetNumStates( int i, int j ); virtual int GetObsNumStates( int j ); int GetOrigCharIndex( int j ); int GetOrigCharNumber( int j ); int GetOrigTaxonIndex( int j ); int GetOrigTaxonNumber( int j ); char GetState( int i, int j, int k = 0 ); nxsstring GetStateLabel( int i, int j ); char* GetSymbols(); nxsstring GetTaxonLabel( int i ); bool IsGapState( int i, int j ); bool IsInterleave(); bool IsLabels(); bool IsMissingState( int i, int j ); bool IsPolymorphic( int i, int j ); bool IsRespectCase(); bool IsTokens(); bool IsTranspose(); bool IsEliminated( int origCharIndex ); void ExcludeCharacter( int i ); void IncludeCharacter( int i ); bool IsActiveChar( int j ); bool IsExcluded( int j ); void DeleteTaxon( int i ); void RestoreTaxon( int i ); bool IsActiveTaxon( int i ); bool IsDeleted( int i ); bool* GetActiveTaxonArray(); bool* GetActiveCharArray(); virtual void Report( std::ostream& out ); void ShowStateLabels( std::ostream& out, int i, int c ); }; #endif tv-0.5/ncl-2.0/src/Makefile.in0000664000076400007640000003273611432544630012664 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = ncl-2.0/src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libncl_a_AR = $(AR) $(ARFLAGS) libncl_a_LIBADD = am_libncl_a_OBJECTS = allelesblock.$(OBJEXT) \ assumptionsblock.$(OBJEXT) charactersblock.$(OBJEXT) \ datablock.$(OBJEXT) discretedatum.$(OBJEXT) \ discretematrix.$(OBJEXT) distancedatum.$(OBJEXT) \ distancesblock.$(OBJEXT) nexus.$(OBJEXT) nexusblock.$(OBJEXT) \ nexustoken.$(OBJEXT) setreader.$(OBJEXT) nxsstring.$(OBJEXT) \ nxsdate.$(OBJEXT) taxablock.$(OBJEXT) treesblock.$(OBJEXT) \ xnexus.$(OBJEXT) libncl_a_OBJECTS = $(am_libncl_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libncl_a_SOURCES) DIST_SOURCES = $(libncl_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EXEEXT = @EXEEXT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WX_CONFIG = @WX_CONFIG@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libncl.a libncl_a_SOURCES = allelesblock.cpp assumptionsblock.cpp charactersblock.cpp \ datablock.cpp discretedatum.cpp discretematrix.cpp distancedatum.cpp \ distancesblock.cpp nexus.cpp nexusblock.cpp nexustoken.cpp setreader.cpp \ nxsstring.cpp nxsdate.cpp taxablock.cpp treesblock.cpp xnexus.cpp \ allelesblock.h assumptionsblock.h charactersblock.h \ datablock.h discretedatum.h discretematrix.h distancedatum.h \ distancesblock.h nexus.h nexusdefs.h nexustoken.h setreader.h \ nxsstring.h nxsdate.h taxablock.h treesblock.h xnexus.h all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ncl-2.0/src/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu ncl-2.0/src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libncl.a: $(libncl_a_OBJECTS) $(libncl_a_DEPENDENCIES) -rm -f libncl.a $(libncl_a_AR) libncl.a $(libncl_a_OBJECTS) $(libncl_a_LIBADD) $(RANLIB) libncl.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/allelesblock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assumptionsblock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/charactersblock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datablock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/discretedatum.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/discretematrix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/distancedatum.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/distancesblock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nexus.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nexusblock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nexustoken.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nxsdate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nxsstring.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setreader.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taxablock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/treesblock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnexus.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: tv-0.5/ncl-2.0/src/charactersblock.cpp0000775000076400007640000035054107575350625014471 00000000000000#include "nexusdefs.h" #include "xnexus.h" #include "nexustoken.h" #include "nexus.h" #include "setreader.h" #include "taxablock.h" #include "discretedatum.h" #include "discretematrix.h" #include "assumptionsblock.h" #include "charactersblock.h" using namespace std; /** * @class CharactersBlock * @file charactersblock.h * @file charactersblock.cpp * @author Paul O. Lewis * @copyright Copyright © 1999. All Rights Reserved. * @variable activeChar [bool*:private] activeChar[i] is true if character i not excluded; i is in range [0..nchar) * @variable activeTaxon [bool*:private] activeTaxon[i] is true if taxon i not deleted; i is in range [0..ntax) * @variable charLabels [LabelList:private] storage for character labels (if provided) * @variable charStates [LabelListBag:private] storage for character state labels (if provided) * @variable datatype [int:private] flag variable (see enum starting with standard) * @variable deleted [IntSet:private] set of (0-offset) numbers for taxa that have been deleted * @variable eliminated [IntSet:private] array of (0-offset) character numbers that have been ELIMINATEd (will remain empty if no ELIMINATE command encountered) * @variable equates [AssocList:private] list of associations defined by EQUATE subcommand of FORMAT command * @variable gap [char:private] gap symbol for use with molecular data * @variable interleaving [bool:private] indicates matrix will be in interleaved format * @variable labels [bool:private] indicates whether or not labels will appear on left side of matrix * @variable matchchar [char:private] match symbol to use in matrix * @variable matrix [DiscreteMatrix*:private] storage for discrete data * @variable missing [char:private] missing data symbol * @variable nchar [int:private] number of columns in matrix (same as ncharTotal unless some characters were ELIMINATEd, in which case ncharTotal > nchar) * @variable ncharTotal [int:private] total number of characters (same as nchar unless some characters were ELIMINATEd, in which case ncharTotal > nchar) * @variable newchar [bool:private] true unless CHARLABELS or CHARSTATELABELS command read * @variable newtaxa [bool:private] true if NEWTAXA keyword encountered in DIMENSIONS command * @variable ntax [int:private] number of rows in matrix (same as ntaxTotal unless fewer taxa appeared in CHARACTERS MATRIX command than were specified in the TAXA block, in which case ntaxTotal > ntax) * @variable ntaxTotal [int:private] total number of taxa (same as ntax unless fewer taxa appeared in CHARACTERS MATRIX command than were specified in the TAXA block, in which case ntaxTotal > ntax) * @variable respectingCase [bool:private] if true, RESPECTCASE keyword specified in FORMAT command * @variable symbols [char*:private] list of valid character state symbols * @variable charPos [int*:private] maps character numbers in the data file to column numbers in matrix (necessary if some characters have been ELIMINATEd) * @variable taxa [TaxaBlock&:protected] reference to the TAXA block in which taxon labels are stored * @variable taxonPos [int*:private] maps taxon numbers in the data file to row numbers in matrix (necessary if fewer taxa appear in CHARACTERS block MATRIX command than are specified in the TAXA block) * @variable tokens [bool:private] if false, data matrix entries must be single symbols; if true, multicharacter entries are allows * @variable transposing [bool:private] indicates matrix will be in transposed format * @see DiscreteDatum * @see DiscreteMatrix * @see LabelListAssoc * @see Nexus * @see NexusBlock * @see NexusReader * @see NexusToken * @see SetReader * @see TaxaBlock * @see XNexus * * This class handles reading and storage for the Nexus block CHARACTERS. * It overrides the member functions Read and Reset, which are abstract * virtual functions in the base class NexusBlock. * *

The issue of bookkeeping demands a careful explanation. Users are * allowed to control the number of characters analyzed either by "eliminating" * or "excluding" characters. Characters can be eliminated (by using the * ELIMINATE command) at the time of execution of the data file, but not * thereafter. Characters can, however, be excluded at any time after the * data are read. No storage is provided for eliminated characters, whereas * excluded characters must be stored because at any time they could be restored * to active status. Because one can depend on eliminated characters continuing * to be eliminated, it would be inefficient to constantly have to check * whether a character has been eliminated. Hence, the characters are renumbered * so that one can efficiently traverse the entire range of non-eliminated * characters. The original range of characters will be hereafter denoted * [0..ncharTotal), whereas the new, reduced range will be denoted [0..nchar). * The two ranges exactly coincide if ncharTotal = nchar (i.e., no ELIMINATE * command was specified in the CHARACTERS block. * *

The possibility for eliminating and excluding characters creates a very * confusing situation that is exacerbated by the fact that character indices * used in the code begin at 0 whereas character numbers in the data file * begin at 1. The convention used hereafter will be to specify "character number k" * when discussing 1-offset character numbers in the data file and either "character index k" * or simply "character k" when discussing 0-offset character indices. * * There are several functions (and data structures) that provide services related to * keeping track of the correspondence between character indices in the stored data matrix * compared to character numbers in the original data file. The array charPos can * be used to find the index of one of the original characters in the matrix. The * function GetCharPos provides public access to the protected charPos array. For * example, if character 9 (= character number 10) was the only one ELIMINATEd, * GetCharPos(9) would return -1 indicating that that character 9 does not now exist. * GetCharPos(10) returns 9 indicating that character 10 in the data file corresponds * to character 9 in the stored data matrix. All public functions in which a * character number must be supplied (such as GetInternalRepresentation) assume * that the character number is the current position of the character in * the data matrix. This allows one to quickly traverse the data matrix without having to * constantly check whether or not a character was eliminated. Note that * GetNChar returns nchar, not ncharTotal, and this function should be used * to obtain the endpoint for a traversal of characters in the matrix. * Other functions requiring a (current) character index are listed below: * *

 * int GetInternalRepresentation( int i, int j, int k = 0 );
 * int GetNumStates( int i, int j );
 * virtual int GetObsNumStates( int j );
 * int GetOrigCharIndex( int j );
 * int GetOrigCharNumber( int j );
 * char GetState( int i, int j, int k = 0 );
 * bool HandleNextState( NexusToken& token, int i, int j );
 * int HandleTokenState( token, j );
 * bool IsGapState( int i, int j );
 * bool IsMissingState( int i, int j );
 * bool IsPolymorphic( int i, int j );
 * void ShowStateLabels( ostream& out, int i, int j );
 * 
* *

The following function is exceptional in requiring (by necessity) the original * character index: * *

 * bool IsEliminated( int origCharIndex );
 * 
* *

The function GetOrigCharIndex returns the original character index for any * current character index. This is useful only when outputting information that * will be seen by the user, and in this case, it is really the character number * that should be output. To get the original character number, either * add 1 to GetOrigCharIndex or call GetOrigCharNumber function (which simply returns * GetOrigCharIndex + 1). * *

Now we must deal with the issue of character exclusion. A character may be * excluded by calling the function ExcludeCharacter and providing the current character index. * or by calling the function ApplyExset and supplying an exclusion set comprising original * character indices. These functions manipulate a bool array, activeChar, which can be * queried using one of two functions: IsActiveChar or IsExcluded. The array activeChar is * nchar elements long, so IsActiveChar and IsExcluded both accept only current character * indices. Thus, a normal loop through all characters in the data matrix should look * something like this: *

 *    for( int j = 0; j < nchar; j++ ) {
 *       if( IsExcluded(j) ) continue;
 *       .
 *       .
 *       .
 *    }
 * 
* * A corresponding set of data structures and functions exists to provide the same * services for taxa. Thus, ntax holds the current number of taxa, whereas ntaxTotal * holds the number of taxa specified in the TAXA block. If data is provided in * the MATRIX command for all taxa listed in the TAXA block, ntax will be equal to * ntaxTotal. If data is not provided for some of the taxa, the ones left out * are treated just like eliminated characters. The function GetTaxonPos can be * used to query the taxonPos array, which behaves like the charPos array does * for characters: -1 for element i means that the taxon whose original index * was i has been "eliminated" and no data is stored for it in the matrix. Otherwise, * GetTaxonPos(i) returns the current index corresponding to the taxon with an * original index of i. The function GetNTax returns ntax, whereas GetNTaxTotal * must be used to gain access to ntaxTotal (but this is seldom necessary). * The functions GetOrigTaxonIndex and GetOrigTaxonNumber behave like their * character counterparts, GetOrigCharIndex and GetOrigCharNumber. Like characters, * taxa can be temporarily inactivated so that they do not participate in any * analyses.until they are reactivated by the user. Inactivation of a taxon is * refered to as "deleting" the taxon, whereas "restoring" a taxon means reactivating * it. Thus, the ApplyDelset, DeleteTaxon, and RestoreTaxon functions correspond * to the ApplyExset, ExcludeCharacter, and IncludeCharacter functions for characters. * To query whether a taxon is currently deleted, use either IsActiveTaxon or * IsDeleted. A normal loop across all active taxa can be constructed as follows: *
 *    for( int i = 0; i < ntax; i++ ) {
 *       if( IsDeleted(i) ) continue;
 *       .
 *       .
 *       .
 *    }
 * 
* *

Below is a table showing the correspondence between the elements of a * CHARACTERS block and the variables and member functions that can be used * to access each piece of information stored. * *

* * * * * * * * * * * * * * * * * * * *
Nexus command * Nexus subcommand * Data Members * Member Functions *
DIMENSIONS * NEWTAXA * bool newtaxa * *
NTAX * int ntax (see also ntaxTotal) * int GetNTax() (see also GetNumMatrixRows()) *
NCHAR * int nchar (see also ncharTotal) * int GetNChar() (see also GetNumMatrixCols()) *
FORMAT * DATATYPE * datatypes datatype * int GetDataType() *
RESPECTCASE * bool respectingCase * bool IsRespectCase() *
MISSING * char missing * char GetMissingSymbol() *
GAP * char gap * char GetGapSymbol() *
SYMBOLS * char* symbols * char* GetSymbols() *
EQUATE * AssocList equates * char* GetEquateKey( int k ) *
char* GetEquateValue( int k ) *
int GetNumEquates() *
MATCHCHAR * char matchchar * char GetMatchcharSymbol() *
(NO)LABELS * bool labels * bool IsLabels() *
TRANSPOSE * bool transposing * bool IsTranspose() *
INTERLEAVE * bool interleaving * bool IsInterleave() *
ITEMS * Only ITEMS=STATES implemented *
STATESFORMAT * Only STATESFORMAT=STATESPRESENT implemented *
(NO)TOKENS * bool tokens * bool IsTokens() *
ELIMINATE * IntSet eliminated * bool IsEliminated( int origCharIndex ) *
int GetNumEliminated() *
MATRIX * DiscreteMatrix* matrix * char GetState( int i, int j, int k = 0 ) *
int GetInternalRepresentation( int i, int j, int k = 0 ) *
int GetNumStates( int i, int j ) *
int GetNumMatrixRows() *
int GetNumMatrixCols() *
bool IsPolymorphic( int i, int j ) *
*/ /** * @enumeration * @enumitem standard [0] means standard data type * @enumitem dna [1] means dna data type * @enumitem rna [2] means rna data type * @enumitem nucleotide [3] means nucleotide data type * @enumitem protein [4] means protein data type * @enumitem continuous [5] means continuous data type * * For use with the variable datatype. Default is 0 (standard data type). */ /** * @constructor * @param tb [TaxaBlock&] the taxa block object to consult for taxon labels * @param ab [AssumptionsBlock&] the assumptions block object to consult for exclusion sets * * Performs the following initializations: * *
Variable Initial Value *
id = "CHARACTERS" *
datatype = standard *
gap = '\0' *
interleaving = false *
labels = true *
matchchar = '\0' *
matrix = NULL *
missing = '?' *
nchar = 0 *
ncharTotal = 0 *
newchar = true *
newtaxa = false *
ntax = 0 *
ntaxTotal = 0 *
respectingCase = false *
symbols = "01" *
taxa = tb *
charPos = NULL *
taxonPos = NULL *
tokens = false *
transposing = false *
*/ CharactersBlock::CharactersBlock( TaxaBlock& tb, AssumptionsBlock& ab ) : taxa(tb), assumptionsBlock(ab), NexusBlock() { id = "CHARACTERS"; symbols = new char[NCL_MAX_STATES+1]; symbols[0] = '0'; symbols[1] = '1'; symbols[2] = '\0'; ntax = 0; ntaxTotal = 0; nchar = 0; ncharTotal = 0; newchar = true; newtaxa = false; interleaving = false; transposing = false; respectingCase = false; labels = true; tokens = false; datatype = standard; missing = '?'; gap = '\0'; matchchar = '\0'; matrix = NULL; charPos = NULL; taxonPos = NULL; activeTaxon = NULL; activeChar = NULL; } /** * @destructor * * Deletes any memory allocated to the arrays symbols, charPos, taxonPos, * activeChar, and activeTaxon. Flushes the containers charLabels, eliminated, * and deleted. Also deletes memory allocated to matrix. */ CharactersBlock::~CharactersBlock() { // Free memory allocated for the DiscreteMatrix object matrix // if( matrix != NULL ) delete matrix; // Free memory allocated for the arrays symbols, charPos, taxonPos, // activeChar and activeTaxon // if( symbols != NULL ) delete [] symbols; if( charPos != NULL ) delete [] charPos; if( taxonPos != NULL ) delete [] taxonPos; if( activeChar != NULL ) delete [] activeChar; if( activeTaxon != NULL ) delete [] activeTaxon; // Flush the containers eliminated, equates, charStates, and charLabels // charLabels.erase( charLabels.begin(), charLabels.end() ); charStates.erase( charStates.begin(), charStates.end() ); equates.erase( equates.begin(), equates.end() ); eliminated.erase( eliminated.begin(), eliminated.end() ); } /** * @method ApplyDelset [void:protected] * @param delset [IntSet&] set of taxon indices to delete in range [0..ntaxTotal) * * Deletes (i.e., excludes from further analyses) taxa * whose indices are contained in the set delset. The * taxon indices refer to original taxon indices, not current * indices (originals will equal current ones iff number of * taxa in TAXA block equals number of taxa in MATRIX command). * Returns the number of taxa actually deleted (some may have * already been deleted) */ int CharactersBlock::ApplyDelset( IntSet& delset ) { assert( activeTaxon != NULL ); int num_deleted = 0; int k; //for( k = 0; k < ntax; k++ ) // activeTaxon[k] = true; IntSet::const_iterator i; for( i = delset.begin(); i != delset.end(); i++ ) { k = taxonPos[*i]; if( k < 0 ) continue; // k greater than -1 means data was supplied for // this taxon and therefore it can be deleted // if( activeTaxon[k] == true ) num_deleted++; activeTaxon[k] = false; } return num_deleted; } /** * @method ApplyExset [void:protected] * @param exset [IntSet&] set of character indices to exclude in range [0..ncharTotal) * * Excludes characters whose indices are contained in the set exset. The indices supplied * should refer to the original character indices, not current character indices. * Returns number of characters actually excluded (some may have already been * excluded). */ int CharactersBlock::ApplyExset( IntSet& exset ) { assert( activeChar != NULL ); int num_excluded = 0; int k; //for( k = 0; k < nchar; k++ ) // activeChar[k] = true; IntSet::const_iterator i; for( i = exset.begin(); i != exset.end(); i++ ) { k = charPos[*i]; if( k < 0 ) continue; // k greater than -1 means character was not eliminated // and therefore can be excluded // if( activeChar[k] == true ) num_excluded++; activeChar[k] = false; } return num_excluded; } /** * @method ApplyIncludeset [void:protected] * @param inset [IntSet&] set of character indices to include in range [0..ncharTotal) * * Includes characters whose indices are contained in the set inset. The indices supplied * should refer to the original character indices, not current character indices. */ int CharactersBlock::ApplyIncludeset( IntSet& inset ) { assert( activeChar != NULL ); int num_included = 0; int k; //for( k = 0; k < nchar; k++ ) // activeChar[k] = true; IntSet::const_iterator i; for( i = inset.begin(); i != inset.end(); i++ ) { k = charPos[*i]; if( k < 0 ) continue; // k greater than -1 means character was not eliminated // and therefore can be excluded // if( activeChar[k] == false ) num_included++; activeChar[k] = true; } return num_included; } /** * @method ApplyRestoreset [void:protected] * @param restoreset [IntSet&] set of taxon indices to restore in range [0..ntaxTotal) * * Restores (i.e., includes in further analyses) taxa * whose indices are contained in the set restoreset. The * taxon indices refer to original taxon indices, not current * indices (originals will equal current ones iff number of * taxa in TAXA block equals number of taxa in MATRIX command). */ int CharactersBlock::ApplyRestoreset( IntSet& restoreset ) { assert( activeTaxon != NULL ); int num_restored = 0; int k; //for( k = 0; k < ntax; k++ ) // activeTaxon[k] = true; IntSet::const_iterator i; for( i = restoreset.begin(); i != restoreset.end(); i++ ) { k = taxonPos[*i]; if( k < 0 ) continue; // k greater than -1 means data was supplied for // this taxon and therefore it can be restored // if( activeTaxon[k] == false ) num_restored++; activeTaxon[k] = true; } return num_restored; } /** * @method BuildCharPosArray [void:protected] * @param check_eliminated [void] if true, eliminated set has something in it and should be consulted (default is false) * * Use to allocate memory for (and initialize) charPos array, which keeps track * of the original character index in cases where characters have been eliminated. * This function is called by HandleEliminate in response to encountering an ELIMINATE * command in the data file, and this is probably the only place where BuildCharPosArray * should be called with check_eliminated = true. BuildCharPosArray is also called * in HandleMatrix, HandleCharstatelabels, HandleStatelabels, and HandleCharlabels. */ void CharactersBlock::BuildCharPosArray( bool check_eliminated /* = false */ ) { assert( charPos == NULL ); charPos = new int[ncharTotal]; int k = 0; for( int j = 0; j < ncharTotal; j++ ) { if( check_eliminated && IsEliminated(j) ) charPos[j] = -1; else charPos[j] = k++; } } /** * @method CharLabelToNumber [int:protected] * * Converts a character label to a number corresponding to * the character's position within charLabels. * This method overrides the virtual function of the * same name in the NexusBlock base class. If s is * not a valid character label, returns the value 0. */ int CharactersBlock::CharLabelToNumber( nxsstring s ) { LabelList::const_iterator iter = find( charLabels.begin(), charLabels.end(), s ); int k = 1; if( iter != charLabels.end() ) k += ( iter - charLabels.begin() ); else k = 0; return k; } /** * @method DebugShowMatrix [int:protected] * @param out [ostream&] output stream on which to print matrix * @param marginText [char*] nxsstring to print first on each line * * Provides a dump of the contents of the matrix variable. Useful for testing * whether data is being read as expected. The default for marginText is NULL, * which has the effect of placing the matrix output flush left. If each line * of output should be prefaced with a tab character, specify marginText = "\t". */ void CharactersBlock::DebugShowMatrix( std::ostream& out, char* marginText /* = NULL */ ) { int i, k; int width = taxa.GetMaxTaxonLabelLength(); for( i = 0; i < ntaxTotal; i++ ) { // Grab taxon name from taxa block // Taxa may not have been presented in the matrix in the same order // as they were stored in the taxa block, so use taxonPos array to // spit them out in the order they appeared in the TAXA command. // If the taxonPos cell is -1, then that means there is no row of // the data matrix corresponding to that taxon // if( taxonPos[i] < 0 ) continue; else { if( marginText != NULL ) out << marginText; nxsstring currTaxonLabel = taxa.GetTaxonLabel( taxonPos[i] ); out << currTaxonLabel; // print out enough spaces to even up the left edge of the matrix output int currTaxonLabelLen = currTaxonLabel.size(); int diff = width - currTaxonLabelLen; for( k = 0; k < diff+5; k++ ) out << ' '; } for( int currChar = 0; currChar < ncharTotal; currChar++ ) { int j = charPos[currChar]; if( j < 0 ) continue; ShowStateLabels( out, i, j ); } out << endl; } } /** * @method DeleteTaxon [void:protected] * @param i [int] index of taxon to delete in range [0..ntax) * * Deletes taxon whose 0-offset current index is i. If taxon * has already been deleted, this function has no effect. */ void CharactersBlock::DeleteTaxon( int i ) { activeTaxon[i] = false; } /** * @method ExcludeCharacter [void:protected] * @param i [int] index of character to exclude in range [0..nchar) * * Excludes character whose 0-offset current index is i. If character * has already been excluded, this function has no effect. */ void CharactersBlock::ExcludeCharacter( int i ) { activeChar[i] = false; } /** * @method GetActiveCharArray [bool*:public] * * Returns activeChar data member (pointer to first element of the activeChar array). * Access to this protected data member is necessary in certain circumstances, such as * when a CharactersBlock object is stored in another class, and that other class * needs direct access to the activeChar array even though it is not derived from * CharactersBlock. */ bool* CharactersBlock::GetActiveCharArray() { return activeChar; } /** * @method GetActiveTaxonArray [bool*:public] * * Returns activeTaxon data member (pointer to first element of the activeTaxon array). * Access to this protected data member is necessary in certain circumstances, such as * when a CharactersBlock object is stored in another class, and that other class * needs direct access to the activeTaxon array even though it is not derived from * CharactersBlock. */ bool* CharactersBlock::GetActiveTaxonArray() { return activeTaxon; } /** * @method GetCharLabel [nxsstring:public] * @param i [int] the character in range [0..nchar) * * Returns label for character i, if a label has been specified. * If no label was specified, returns string containing a single blank (i.e., " "). */ nxsstring CharactersBlock::GetCharLabel( int i ) { nxsstring s = " "; if( i < charLabels.size() ) s = charLabels[i]; return s; } /** * @method GetCharPos [int:public] * @param origCharIndex [int] original index of character in range [0..ncharTotal-1) * * Returns current index of character in matrix. This may * differ from the original index if some characters were * removed using an ELIMINATE command. For example, character * number 9 in the original data matrix may now be at position * 8 if the original character 8 was ELIMINATEd. * The parameter origCharIndex is assumed to range from 0 to * ncharTotal-1. */ int CharactersBlock::GetCharPos( int origCharIndex ) { assert( charPos != NULL ); assert( origCharIndex >= 0 ); assert( origCharIndex < ncharTotal ); return charPos[origCharIndex]; } /** * @method GetGapSymbol [char:protected] * * Returns the gap symbol currently in effect. If no gap * symbol specified, returns '\0'. */ char CharactersBlock::GetGapSymbol() { return gap; } /** * @method GetTaxPos [int:public] * @param origTaxonIndex [int] original index of taxon * * Returns current index of taxon in matrix. This may * differ from the original index if some taxa were listed in * the TAXA block but not in the DATA or CHARACTERS block. * The parameter origTaxonIndex is assumed to range from 0 to * ntaxTotal-1. */ int CharactersBlock::GetTaxPos( int origTaxonIndex ) { assert( taxonPos != NULL ); assert( origTaxonIndex >= 0 ); assert( origTaxonIndex < ntaxTotal ); return taxonPos[origTaxonIndex]; } /** * @method GetDataType [int:public] * * Returns value of datatype. */ int CharactersBlock::GetDataType() { return (int)datatype; } /** * @method GetMatchcharSymbol [char:protected] * * Returns the matchchar symbol currently in effect. If no matchchar * symbol specified, returns '\0'. */ char CharactersBlock::GetMatchcharSymbol() { return matchchar; } /** * @method GetMaxObsNumStates [int:public virtual] * * Returns the maximum observed number of states for any character. * Note: this function is rather slow, as it must walk through * each row of each column, adding the states encountered to a set, * then finally returning the size of the set. Thus, if this * function is called often, it would be advisable to initialize * an array using this function, then refer to the array subsequently. */ int CharactersBlock::GetMaxObsNumStates() { int max = 2; for( int j = 0; j < nchar; j++ ) { int ns = GetObsNumStates(j); if( ns <= max ) continue; max = ns; } return max; } /** * @method GetInternalRepresentation [int:protected] * @param i [int] the taxon in range [0..ntax) * @param j [int] the character in range [0..nchar) * @param k [int] the state to return (use default of 0 if only one state present) * * Returns internal representation of the state for taxon i, character j. * The default for k is 0, which corresponds to the normal * situation in which there is only one state with no uncertainty or polymorphism. * If there are multiple states, specify a number in the range [0..n) where * n is the number of states returned by the GetNumStates function. Use the * IsPolymorphic function to determine whether the multiple states correspond to * uncertainty in state assignment or polymorphism in the taxon. * *

The value returned from this function is one of the following: *

    *
  • -3 means gap state (see note below) *
  • -2 means missing state (see note below) *
  • an integer 0 or greater is internal representation of a state *
* Note: gap and missing states are actually represented internally in a * different way; for a description of the actual internal representation of * states, see DiscreteDatum */ int CharactersBlock::GetInternalRepresentation( int i, int j, int k /* = 0 */ ) { if( IsGapState( i, j ) ) return -3; else if( IsMissingState( i, j ) ) return -2; else return matrix->GetState( i, j, k ); } /** * @method GetMissingSymbol [char:protected] * * Returns the missing data symbol currently in effect. If no missing * data symbol specified, returns '\0'. */ char CharactersBlock::GetMissingSymbol() { return missing; } /** * @method GetNChar [int:public] * * Returns the value of nchar. */ int CharactersBlock::GetNChar() { return nchar; } /** * @method GetNCharTotal [int:public] * * Returns the value of ncharTotal. */ int CharactersBlock::GetNCharTotal() { return ncharTotal; } /** * @method GetNTax [int:public] * * Returns the value of ntax. */ int CharactersBlock::GetNTax() { return ntax; } /** * @method GetNTaxTotal [int:public] * * Returns the value of ntaxTotal. */ int CharactersBlock::GetNTaxTotal() { return ntaxTotal; } /** * @method GetNumActiveChar [int:public] * * Performs a count of the number of characters for which activeChar * array reports true. */ int CharactersBlock::GetNumActiveChar() { int num_active_char = 0; for( int i = 0; i < nchar; i++ ) { if( activeChar[i] == false ) continue; num_active_char++; } return num_active_char; } /** * @method GetNumActiveTaxa [int:public] * * Performs a count of the number of taxa for which activeTaxon * array reports true. */ int CharactersBlock::GetNumActiveTaxa() { int num_active_taxa = 0; for( int i = 0; i < ntax; i++ ) { if( activeTaxon[i] == false ) continue; num_active_taxa++; } return num_active_taxa; } /** * @method GetNumEliminated [int:protected] * * Returns the number of characters eliminated with the ELIMINATE command. */ int CharactersBlock::GetNumEliminated() { return ( ncharTotal - nchar ); } /** * @method GetNumEquates [int:protected] * * Returns the number of stored equate associations. */ int CharactersBlock::GetNumEquates() { return equates.size(); } /** * @method GetNumMatrixCols [int:public] * * Returns the number of actual columns in matrix. This number is equal * to nchar, but can be smaller than ncharTotal since the user could have * ELIMINATEd some of the characters. */ int CharactersBlock::GetNumMatrixCols() { return nchar; } /** * @method GetNumMatrixRows [int:public] * * Returns the number of actual rows in matrix. This number is equal * to ntax, but can be smaller than ntaxTotal since the user did not * have to provide data for all taxa specified in the TAXA block. */ int CharactersBlock::GetNumMatrixRows() { return ntax; } /** * @method GetNumStates [int:public] * @param i [int] the taxon in range [0..ntax) * @param j [int] the character in range [0..nchar) * * Returns the number of states for taxon i, character j. */ int CharactersBlock::GetNumStates( int i, int j ) { return matrix->GetNumStates( i, j ); } /** * @method GetObsNumStates [int:public virtual] * @param j [int] the character in range [0..nchar) * * Returns the number of states for character j over all taxa. * Note: this function is rather slow, as it must walk through * each row, adding the states encountered to a set, then finally * returning the size of the set. Thus, if this function is called * often, it would be advisable to initialize an array using this * function, then refer to the array subsequently. */ int CharactersBlock::GetObsNumStates( int j ) { return matrix->GetObsNumStates( j ); } /** * @method GetOrigCharIndex [int:public] * @param j [int] the character in range [0..nchar) * * Returns the original character index in the * range [0..ncharTotal). Will be equal to j unless some * characters were ELIMINATEd. */ int CharactersBlock::GetOrigCharIndex( int j ) { int k = j; while( k < ncharTotal && charPos[k] < j ) k++; assert( k < ncharTotal ); return k; } /** * @method GetOrigCharNumber [int:public] * @param j [int] the character in range [0..nchar) * * Returns the original character number (used in the * NEXUS data file) in the range [1..ncharTotal]. * Will be equal to j+1 unless some characters were ELIMINATEd. */ int CharactersBlock::GetOrigCharNumber( int j ) { return ( 1 + GetOrigCharIndex(j) ); } /** * @method GetOrigTaxonIndex [int:public] * @param i [int] the taxon in range [0..ntax) * * Returns the original taxon index in the * range [0..ntaxTotal). Will be equal to i unless * data was not provided for some taxa listed in * a preceding TAXA block. */ int CharactersBlock::GetOrigTaxonIndex( int i ) { int k = i; while( k < ntaxTotal && taxonPos[k] < i ) k++; assert( k < ntaxTotal ); return k; } /** * @method GetOrigTaxonNumber [int:public] * @param i [int] the character in range [0..ntax) * * Returns the original taxon number (used in the * NEXUS data file) in the range [1..ntaxTotal]. * Will be equal to i+1 unless data was not provided * for some taxa listed in a preceding TAXA block. */ int CharactersBlock::GetOrigTaxonNumber( int i ) { return ( 1 + GetOrigTaxonIndex(i) ); } /** * @method GetState [char:public] * @param i [int] the taxon in range [0..ntax) * @param j [int] the character in range [0..nchar) * @param k [int] the state to return (use default of 0 if only one state present) * * Returns symbol from symbols list representing the state for taxon i * and character j. The default for k is 0, which corresponds to the normal * situation in which there is only one state with no uncertainty or polymorphism. * If there are multiple states, specify a number in the range [0..n) where * n is the number of states returned by the GetNumStates function. Use the * IsPolymorphic function to determine whether the multiple states correspond to * uncertainty in state assignment or polymorphism in the taxon. * Assumes symbols is not equal to NULL. */ char CharactersBlock::GetState( int i, int j, int k /* = 0 */ ) { assert( symbols != NULL ); char state_char = '\0'; int symbolsLen = strlen(symbols); int p = matrix->GetState( i, j, k ); assert( p < symbolsLen ); state_char = *(symbols + p); return state_char; } /** * @method GetStateLabel [nxsstring:public] * @param i [int] the locus in range [0..nchar) * @param j [int] the state * * Returns label for character state j at character i, if a label has been specified. * If no label was specified, returns string containing a single blank (i.e., " "). */ nxsstring CharactersBlock::GetStateLabel( int i, int j ) { nxsstring s = " "; LabelListBag::const_iterator cib = charStates.find(i); if( cib != charStates.end() && j < (*cib).second.size() ) s = (*cib).second[j]; return s; } /** * @method GetSymbols [char*:public] * * Returns data member symbols. Warning: returned value may be NULL. */ char* CharactersBlock::GetSymbols() { return symbols; } /** * @method GetTaxonLabel [nxsstring:public] * @param i [int] the taxon's position in the taxa block * * Returns label for taxon number i (i ranges from 0 to ntax-1). */ nxsstring CharactersBlock::GetTaxonLabel( int i ) { nxsstring s = taxa.GetTaxonLabel(i); return s; } /** * @method IncludeCharacter [void:protected] * @param i [int] index of character to include in range [0..nchar) * * Includes character whose 0-offset current index is i. If character * is already active, this function has no effect. */ void CharactersBlock::IncludeCharacter( int i ) { activeChar[i] = true; } /** * @method IsActiveChar [bool:public] * @param j [int] the character in question, in the range [0..nchar) * * Returns true if character j is active. If character j has been * excluded, returns false. Note that it is irrelevant whether or * not this character has been eliminated, since it is assumed that j * refers to a non-eliminated character! */ bool CharactersBlock::IsActiveChar( int j ) { assert( j >= 0 ); assert( j < nchar ); return activeChar[j]; } /** * @method IsActiveTaxon [bool:public] * @param i [int] the taxon in question, in the range [0..ntax) * * Returns true if taxon i is active. If taxon i has been * deleted, returns false. */ bool CharactersBlock::IsActiveTaxon( int i ) { assert( i >= 0 ); assert( i < ntax ); return activeTaxon[i]; } /** * @method IsDeleted [bool:public] * @param i [int] the taxon in question, in the range [0..ntax) * * Returns true if taxon number i has been deleted, false otherwise. */ bool CharactersBlock::IsDeleted( int i ) { return !IsActiveTaxon(i); } /** * @method IsEliminated [bool:public] * @param origCharIndex [int] the character in question * * Returns true if character number origCharIndex was ELIMINATEd, false otherwise. * Returns false immediately if "eliminated" set is empty. */ bool CharactersBlock::IsEliminated( int origCharIndex ) { // Note: it is tempting to try to streamline this method // by just looking up character j in charPos to see if it // has been eliminated, but this temptation should be // resisted since this function is used in setting up // charPos in the first place! if( eliminated.empty() ) return false; IntSet::const_iterator found = eliminated.find(origCharIndex); if( found == eliminated.end() ) return false; return true; } /** * @method IsExcluded [bool:public] * @param j [int] the character in question, in the range [0..nchar) * * Returns true if character j has been excluded. If character j is * active, returns false. Note that it is irrelevant whether or * not this character has been eliminated, since it is assumed that j * refers to a non-eliminated character! */ bool CharactersBlock::IsExcluded( int j ) { return !IsActiveChar(j); } /** * @method IsGapState [bool:public] * @param i [int] the taxon, in range [0..ntax) * @param j [int] the character, in range [0..nchar) * * Returns 1 if the state at taxon i, character j is the gap state. */ bool CharactersBlock::IsGapState( int i, int j ) { return matrix->IsGap( i, j ); } /** * @method IsInterleave [bool:public] * * Returns true if INTERLEAVE was specified in the FORMAT command, false otherwise. */ bool CharactersBlock::IsInterleave() { return interleaving; } /** * @method IsLabels [bool:public] * * Returns true if LABELS was specified in the FORMAT command, false otherwise. */ bool CharactersBlock::IsLabels() { return labels; } /** * @method IsMissingState [bool:public] * @param i [int] the taxon, in range [0..ntax) * @param j [int] the character, in range [0..nchar) * * Returns 1 if the state at taxon i, character j is the missing state. */ bool CharactersBlock::IsMissingState( int i, int j ) { return matrix->IsMissing( i, j ); } /** * @method IsPolymorphic [bool:protected] * @param i [int] the taxon in range [0..ntax) * @param j [int] the character in range [0..nchar) * * Returns 1 if taxon i is polymorphic for character j, 0 otherwise. * Note that return value will be 0 if there is only one state (i.e., * one cannot tell whether there is uncertainty using this function). */ bool CharactersBlock::IsPolymorphic( int i, int j ) { return matrix->IsPolymorphic( i, j ); } /** * @method IsRespectCase [bool:public] * * Returns 1 if RESPECTCASE was specified in the FORMAT command, 0 otherwise. */ bool CharactersBlock::IsRespectCase() { return respectingCase; } /** * @method IsTokens [bool:public] * * Returns true if TOKENS was specified in the FORMAT command, false otherwise. */ bool CharactersBlock::IsTokens() { return tokens; } /** * @method IsTranspose [bool:public] * * Returns true if TRANSPOSE was specified in the FORMAT command, false otherwise. */ bool CharactersBlock::IsTranspose() { return transposing; } /** * @method IsInSymbols [int:protected] * @param ch [int] the symbol character to search for * * Returns 1 if ch can be found in symbols array. The value of respectingCase * is used to determine whether the search should be case sensitive or not. * Assumes symbols != NULL. */ int CharactersBlock::IsInSymbols( char ch ) { assert( symbols != NULL ); int symbolsLength = strlen(symbols); int found = 0; for( int i = 0; i < symbolsLength; i++ ) { char char_in_symbols = ( respectingCase ? symbols[i] : (char)toupper(symbols[i]) ); char char_in_question = ( respectingCase ? ch : (char)toupper(ch) ); if( char_in_symbols != char_in_question ) continue; found = 1; break; } return found; } /** * @method HandleCharlabels [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when CHARLABELS command needs to be parsed from within the * DIMENSIONS block. Deals with everything after the token CHARLABELS * up to and including the semicolon that terminates the CHARLABELS * command. If an ELIMINATE command has been processed, labels * for eliminated characters will not be stored. */ void CharactersBlock::HandleCharlabels( NexusToken& token ) { int num_labels_read = 0; charLabels.erase( charLabels.begin(), charLabels.end() ); if( charPos == NULL ) BuildCharPosArray(); for(;;) { token.GetNextToken(); // token should either be ';' or the name of a character // (an isolated '_' character is converted automatically by // token.GetNextToken() into a space, which is then stored // as the character label) // if( token.Equals(";") ) { break; } else { num_labels_read++; // check to make sure user is not trying to read in more // character labels than there are characters // if( num_labels_read > (unsigned)ncharTotal ) { errormsg = "Number of character labels exceeds NCHAR specified in DIMENSIONS command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( !IsEliminated( num_labels_read - 1 ) ) charLabels.push_back( token.GetToken() ); } } newchar = false; } /** * @method HandleCharstatelabels [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when CHARSTATELABELS command needs to be parsed from within the * CHARACTERS block. Deals with everything after the token CHARSTATELABELS * up to and including the semicolon that terminates the CHARSTATELABELS * command. Resulting charLabels vector will store labels only for * characters that have not been ELIMINATEd, and likewise for charStates. * Specifically, charStates[0] refers to the vector of character state * labels for the first non-eliminated character. */ void CharactersBlock::HandleCharstatelabels( NexusToken& token ) { int currChar = 0; bool semicolonFoundInInnerLoop = false; bool tokenAlreadyRead = false; bool save = true; charStates.erase( charStates.begin(), charStates.end() ); charLabels.erase( charLabels.begin(), charLabels.end() ); if( charPos == NULL ) BuildCharPosArray(); for(;;) { save = true; if( semicolonFoundInInnerLoop ) break; if( tokenAlreadyRead ) tokenAlreadyRead = false; else token.GetNextToken(); if( token.Equals(";") ) break; // token should be the character number; create a new association // int n = atoi( token.GetToken().c_str() ); if( n < 1 || n > ncharTotal || n <= currChar ) { errormsg = "Invalid character number ("; errormsg += token.GetToken(); errormsg += ") found in CHARSTATELABELS command (either out of range or not interpretable as an integer)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // If n is not the next character after currChar, need to add some dummy // labels to charLabels list // while( n - currChar > 1 ) { currChar++; if( !IsEliminated( currChar - 1 ) ) charLabels.push_back(" "); } // If n refers to a character that has been ELIMINATEd, go through the motions of // reading in the information but don't actually save any of it // currChar++; assert( n == currChar ); if( IsEliminated(currChar-1) ) save = false; token.GetNextToken(); // token should be the character label // if( save ) charLabels.push_back( token.GetToken() ); token.GetNextToken(); // token should be a slash character if state labels were provided // for this character; otherwise, token should be one of the following: // 1) the comma separating information for different characters, in // which case we read in the next token (which should be the next // character number) // 2) the semicolon indicating the end of the command // if( !token.Equals("/") ) { if( !token.Equals(",") && !token.Equals(";") ) { errormsg = "Expecting a comma or semicolon here, but found ("; errormsg += token.GetToken(); errormsg += ") instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( token.Equals(",") ) token.GetNextToken(); tokenAlreadyRead = true; continue; } // now create a new association for the character states list for(;;) { token.GetNextToken(); if( token.Equals(";") ) { semicolonFoundInInnerLoop = true; break; } if( token.Equals(",") ) { break; } if( save ) { // token should be a character state label; add it to the list // nxsstring cslabel = token.GetToken(); int k = GetCharPos(n-1); charStates[k].push_back( cslabel ); } } // inner loop (grabbing state labels for character n) } // outer loop newchar = false; } /** * @method HandleDimensions [void:protected] * @param token [NexusToken&] the token used to read from in * @param newtaxaLabel [nxsstring] the label used in data file for newtaxa * @param ntaxLabel [nxsstring] the label used in data file for ntax * @param ncharLabel [nxsstring] the label used in data file for nchar * @throws XNexus * * Called when DIMENSIONS command needs to be parsed from within the * CHARACTERS block. Deals with everything after the token DIMENSIONS * up to and including the semicolon that terminates the DIMENSIONs * command. newtaxaLabel, ntaxLabel and ncharLabel are simply "NEWTAXA", * "NTAX" and "NCHAR" for this class, but may be different for derived * classes that use newtaxa, ntax and nchar for other things (e.g., * ntax is number of populations in an ALLELES block) */ void CharactersBlock::HandleDimensions( NexusToken& token , nxsstring newtaxaLabel, nxsstring ntaxLabel, nxsstring ncharLabel ) { for(;;) { token.GetNextToken(); if( token.Equals(newtaxaLabel) ) { newtaxa = true; taxa.Reset(); } else if( token.Equals(ntaxLabel) ) { // this should be the equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after "; errormsg += ntaxLabel; errormsg += " in DIMENSIONS command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the number of taxa token.GetNextToken(); ntax = atoi( token.GetToken().c_str() ); if( ntax <= 0 ) { errormsg = ntaxLabel; errormsg += " must be a number greater than 0"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( newtaxa ) ntaxTotal = ntax; else { ntaxTotal = taxa.GetNumTaxonLabels(); if( ntaxTotal < ntax ) { errormsg = ntaxLabel; errormsg += " in "; errormsg += id; errormsg += " block must be less than or equal to NTAX in TAXA block"; errormsg += "\nNote: one circumstance that can cause this error is "; errormsg += "\nforgetting to specify "; errormsg += ntaxLabel; errormsg += " in DIMENSIONS command when "; errormsg += "\na TAXA block has not been provided"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } else if( token.Equals(ncharLabel) ) { // this should be the equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after "; errormsg += ncharLabel; errormsg += " in DIMENSIONS command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the number of characters token.GetNextToken(); nchar = atoi( token.GetToken().c_str() ); if( nchar <= 0 ) { errormsg = ncharLabel; errormsg += " must be a number greater than 0"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } ncharTotal = nchar; } else if( token.Equals(";") ) { break; } } } /** * @method HandleEliminate [void:protected] * @param token [NexusToken&] the token used to read from in * * Called when ELIMINATE command needs to be parsed from within the * CHARACTERS block. Deals with everything after the token ELIMINATE * up to and including the semicolon that terminates the ELIMINATE * command. Any character numbers or ranges of character numbers * specified are stored in the IntSet eliminated, which remains empty * until an ELIMINATE command is processed. Note that like all sets * the character ranges are adjusted so that their offset is 0. For * example, given "eliminate 4-7;" in the data file, the eliminate * array would contain the values 3, 4, 5, and 6 (not 4, 5, 6, and 7). * It is assumed that the ELIMINATE command comes before character labels * and/or character state labels have been specified; an error message * is generated if the user attempts to use ELIMINATE after a CHARLABELS, * CHARSTATELABELS, or STATELABELS command. */ void CharactersBlock::HandleEliminate( NexusToken& token ) { // construct an object of type SetReader, then call its run function // to store the set in the eliminated set // SetReader( token, ncharTotal, eliminated, *this, SetReader::charset ).Run(); nchar = ncharTotal - eliminated.size(); if( nchar != ncharTotal && ( charLabels.size() > 0 || charStates.size() > 0 ) ) { errormsg = "The ELIMINATE command must appear before character\n(or character state) labels are specified"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( charPos != NULL ) { errormsg = "Only one ELIMINATE command is allowed, and it must appear before the MATRIX command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } BuildCharPosArray( true ); } /** * @method HandleEndblock [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when the END or ENDBLOCK command needs to be parsed from within the * CHARACTERS block. Does two things: 1) checks to make sure the next token in * the data file is a semicolon and 2) eliminates character labels and character * state labels for characters that have been ELIMINATEd. */ void CharactersBlock::HandleEndblock( NexusToken& token, nxsstring charToken ) { // get the semicolon following END or ENDBLOCK token token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate the END or ENDBLOCK command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( charLabels.empty() && !charStates.empty() ) { // make up labels for characters since user has provided labels // for character states; that way, we know that charLabels // and charStates are either both empty or both full for( int k = 0; k < ncharTotal; k++ ) { nxsstring nm = charToken; nm += " "; nm += (k+1); charLabels.push_back( nm.c_str() ); } } #if 0 // This part is not necessary now that ELIMINATE is restricted to // being used before CHARLABELS, CHARSTATELABELS, and STATELABELS // if( nchar < ncharTotal && !charLabels.empty() ) { // first, make copies of charLabels and charStates LabelList tmp_charLabels = charLabels; LabelListBag tmp_charStates = charStates; // second, erase contents of charLabels and charStates charLabels.erase( charLabels.begin(), charLabels.end() ); charStates.erase( charStates.begin(), charStates.end() ); // third, copy only information from non-ELIMINATEd characters back // into charLabels and charStates for( int k = 0; k < ncharTotal; k++ ) { int j = charPos[k]; if( j < 0 ) continue; charLabels.push_back( tmp_charLabels[k] ); int n = tmp_charStates[k].size(); for( int kk = 0; kk < n; kk++ ) charStates[j].push_back( tmp_charStates[k][kk] ); } } #endif } /** * @method HandleFormat [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when FORMAT command needs to be parsed from within the * DIMENSIONS block. Deals with everything after the token FORMAT * up to and including the semicolon that terminates the FORMAT * command. */ void CharactersBlock::HandleFormat( NexusToken& token ) { int standardDataTypeAssumed = 0; int ignoreCaseAssumed = 0; for(;;) { token.GetNextToken(); if( token.Equals("DATATYPE") ) { // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after keyword DATATYPE but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be one of the following: STANDARD, DNA, RNA, NUCLEOTIDE, PROTEIN, or CONTINUOUS token.GetNextToken(); if( token.Equals("STANDARD") ) datatype = standard; else if( token.Equals("DNA") ) datatype = dna; else if( token.Equals("RNA") ) datatype = rna; else if( token.Equals("NUCLEOTIDE") ) datatype = nucleotide; else if( token.Equals("PROTEIN") ) datatype = protein; else if( token.Equals("CONTINUOUS") ) datatype = continuous; else { errormsg = token.GetToken(); errormsg += " is not a valid DATATYPE within a "; errormsg += id; errormsg += " block"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( standardDataTypeAssumed && datatype != standard ) { errormsg = "DATATYPE must be specified first in FORMAT command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } ResetSymbols(); if( datatype == continuous ) tokens = true; } else if( token.Equals("RESPECTCASE") ) { if( ignoreCaseAssumed ) { errormsg = "RESPECTCASE must be specified before MISSING, GAP, SYMBOLS, and MATCHCHAR in FORMAT command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } standardDataTypeAssumed = 1; respectingCase = true; } else if( token.Equals("MISSING") ) { // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after keyword MISSING but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the missing data symbol (single character) token.GetNextToken(); if( token.GetTokenLength() != 1 ) { errormsg = "MISSING symbol should be a single character, but "; errormsg += token.GetToken(); errormsg += " was specified"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else if( token.IsPunctuationToken() && !token.IsPlusMinusToken() ) { errormsg = "MISSING symbol specified cannot be a punctuation token ("; errormsg += token.GetToken(); errormsg += " was specified)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else if( token.IsWhitespaceToken() ) { errormsg = "MISSING symbol specified cannot be a whitespace character ("; errormsg += token.GetToken(); errormsg += " was specified)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } missing = token.GetToken()[0]; ignoreCaseAssumed = 1; standardDataTypeAssumed = 1; } else if( token.Equals("GAP") ) { // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after keyword GAP but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the gap symbol (single character) token.GetNextToken(); if( token.GetTokenLength() != 1 ) { errormsg = "GAP symbol should be a single character, but "; errormsg += token.GetToken(); errormsg += " was specified"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else if( token.IsPunctuationToken() && !token.IsPlusMinusToken() ) { errormsg = "GAP symbol specified cannot be a punctuation token ("; errormsg += token.GetToken(); errormsg += " was specified)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else if( token.IsWhitespaceToken() ) { errormsg = "GAP symbol specified cannot be a whitespace character ("; errormsg += token.GetToken(); errormsg += " was specified)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } gap = token.GetToken()[0]; ignoreCaseAssumed = 1; standardDataTypeAssumed = 1; } else if( token.Equals("SYMBOLS") ) { if( datatype == continuous ) { errormsg = "SYMBOLS subcommand not allowed for DATATYPE=CONTINUOUS"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } int numDefStates; int maxNewStates; switch( datatype ) { case dna: case rna: case nucleotide: numDefStates = 4; maxNewStates = NCL_MAX_STATES-4; break; case protein: numDefStates = 21; maxNewStates = NCL_MAX_STATES-21; break; default: numDefStates = 0; // replace symbols list for standard datatype symbols[0] = '\0'; maxNewStates = NCL_MAX_STATES; } // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after keyword SYMBOLS but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the symbols list token.SetLabileFlagBit( NexusToken::doubleQuotedToken ); token.GetNextToken(); token.StripWhitespace(); int numNewSymbols = token.GetTokenLength(); if( numNewSymbols > maxNewStates ) { errormsg = "SYMBOLS defines "; errormsg += numNewSymbols; errormsg += " new states but only "; errormsg += maxNewStates; errormsg += " new states allowed for this DATATYPE"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } nxsstring t = token.GetToken(); int tlen = t.size(); // check to make sure user has not used any symbols already in the // default symbols list for this data type for( int i = 0; i < tlen; i++ ) { if( IsInSymbols( t[i] ) ) { errormsg = "The character "; errormsg += t[i]; errormsg += " defined in SYMBOLS has already been predefined for this DATATYPE"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } // if we've made it this far, go ahead and add the user-defined // symbols to the end of the list of predefined symbols strcpy( symbols+numDefStates, t.c_str() ); ignoreCaseAssumed = 1; standardDataTypeAssumed = 1; } else if( token.Equals("EQUATE") ) { // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after keyword EQUATE but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be a double-quote character token.GetNextToken(); if( !token.Equals("\"") ) { errormsg = "Expecting '\"' after keyword EQUATE but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // loop until second double-quote character is encountered for(;;) { token.GetNextToken(); if( token.Equals("\"") ) break; // if token is not a double-quote character, then it must be // the equate symbol (i.e., the character to be replaced in // the data matrix) if( token.GetTokenLength() != 1 ) { errormsg = "Expecting single-character EQUATE symbol but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // check for bad choice of equate symbol nxsstring t = token.GetToken(); char ch = t[0]; int badEquateSymbol = 0; // the character '^' cannot be an equate symbol if( ch == '^' ) badEquateSymbol = 1; // equate symbols cannot be punctuation (except for + and -) if( token.IsPunctuationToken() && !token.IsPlusMinusToken() ) badEquateSymbol = 1; // equate symbols cannot be same as matchchar, missing, or gap if( ch == missing || ch == matchchar || ch == gap ) badEquateSymbol = 1; // equate symbols cannot be one of the state symbols currently defined if( IsInSymbols(ch) ) badEquateSymbol = 1; if( badEquateSymbol ) { errormsg = "EQUATE symbol specified ("; errormsg += token.GetToken(); errormsg += ") is not valid; must not be same as missing, \nmatchchar, gap, state symbols, or any of the following: ()[]{}/\\,;:=*'\"`<>^"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } nxsstring k = token.GetToken(); // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' in EQUATE definition but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the token to be substituted in for the equate symbol token.SetLabileFlagBit( NexusToken::parentheticalToken ); token.SetLabileFlagBit( NexusToken::curlyBracketedToken ); token.GetNextToken(); nxsstring v = token.GetToken(); // add the new equate association to the equates list equates[k] = v; } standardDataTypeAssumed = 1; } else if( token.Equals("MATCHCHAR") ) { // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after keyword MATCHCHAR but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the matchchar symbol (single character) token.GetNextToken(); if( token.GetTokenLength() != 1 ) { errormsg = "MATCHCHAR symbol should be a single character, but "; errormsg += token.GetToken(); errormsg += " was specified"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else if( token.IsPunctuationToken() && !token.IsPlusMinusToken() ) { errormsg = "MATCHCHAR symbol specified cannot be a punctuation token ("; errormsg += token.GetToken(); errormsg += " was specified) "; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else if( token.IsWhitespaceToken() ) { errormsg = "MATCHCHAR symbol specified cannot be a whitespace character ("; errormsg += token.GetToken(); errormsg += " was specified)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } matchchar = token.GetToken()[0]; ignoreCaseAssumed = 1; standardDataTypeAssumed = 1; } else if( token.Equals("LABELS") ) { labels = true; standardDataTypeAssumed = 1; } else if( token.Equals("NOLABELS") ) { labels = false; standardDataTypeAssumed = 1; } else if( token.Equals("TRANSPOSE") ) { transposing = true; standardDataTypeAssumed = 1; } else if( token.Equals("INTERLEAVE") ) { interleaving = true; standardDataTypeAssumed = 1; } else if( token.Equals("ITEMS") ) { // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg += "Expecting '=' after keyword ITEMS but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be STATES (no other item is supported at this time) token.GetNextToken(); if( !token.Equals("STATES") ) { errormsg = "Sorry, only ITEMS=STATES supported at this time"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } standardDataTypeAssumed = 1; } else if( token.Equals("STATESFORMAT") ) { // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after keyword STATESFORMAT but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be STATESPRESENT (no other statesformat is supported at this time) token.GetNextToken(); if( !token.Equals("STATESPRESENT") ) { errormsg = "Sorry, only STATESFORMAT=STATESPRESENT supported at this time"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } standardDataTypeAssumed = 1; } else if( token.Equals("TOKENS") ) { tokens = true; standardDataTypeAssumed = 1; } else if( token.Equals("NOTOKENS") ) { tokens = false; standardDataTypeAssumed = 1; } else if( token.Equals(";") ) { break; } } // perform some last checks before leaving the FORMAT command if( !tokens && datatype == continuous ) { errormsg = "TOKENS must be defined for DATATYPE=CONTINUOUS"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( tokens && ( datatype == dna || datatype == rna || datatype == nucleotide ) ) { errormsg = "TOKENS not allowed for the DATATYPEs DNA, RNA, or NUCLEOTIDE"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } /** * @method HandleNextState [bool:protected] * @param token [NexusToken&] the token used to read from in * @param i [int] the taxon index, in range [0..ntax) * @param j [int] the character index, in range [0..nchar) * @throws XNexus * * Called from HandleStdMatrix or HandleTransposedMatrix function * to read in the next state. Always returns 1 except in the special * case of an interleaved matrix, in which case it returns 0 if a * newline character is encountered before the next token. */ bool CharactersBlock::HandleNextState( NexusToken& token, int i, int j ) { // this should be the state for taxon i and character j // if( !tokens ) { token.SetLabileFlagBit( NexusToken::parentheticalToken ); token.SetLabileFlagBit( NexusToken::curlyBracketedToken ); token.SetLabileFlagBit( NexusToken::singleCharacterToken ); } if( interleaving ) token.SetLabileFlagBit( NexusToken::newlineIsToken ); token.GetNextToken(); if( interleaving && token.AtEOL() ) return false; // make sure we didn't run out of file // if( token.AtEOF() ) { errormsg = "Unexpected end of file encountered"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // if we didn't run out of file, I see no reason why we should // have a zero-length token on our hands assert( token.GetTokenLength() > 0 ); // we've read in the state now, so if this character has been // ELIMINATEd, we don't want to go any further with it // if( j < 0 ) return true; // see if any equate macros apply // nxsstring skey = nxsstring( token.GetToken( respectingCase ) ); AssocList::iterator p = equates.find( skey ); if( p != equates.end() ) { nxsstring sval = (*p).second; token.ReplaceToken( sval.c_str() ); } // handle case of single-character state symbol // if( !tokens && token.GetTokenLength() == 1 ) { char ch = token.GetToken()[0]; // check for missing data symbol // if( ch == missing ) { matrix->SetMissing( i, j ); } // check for matchchar symbol // else if( matchchar != '\0' && ch == matchchar ) { #if 0 int maxk = matrix->GetNumStates( i, j ); for( int k = 0; k < maxk; k++ ) { int stateOfFirstTaxon = matrix->GetState( 0, j, k ); matrix->AddState( i, j, stateOfFirstTaxon ); } #else matrix->CopyStatesFromFirstTaxon( i, j ); #endif } // check for gap symbol // else if( gap != '\0' && ch == gap ) { matrix->SetGap( i, j ); } // look up the position of this state in the symbols array // else { int p = PositionInSymbols(ch); if( p < 0 ) { errormsg = "State specified ("; errormsg += token.GetToken(); errormsg += ") for taxon "; errormsg += (i+1); errormsg += ", character "; errormsg += (j+1); errormsg += ", not found in list of valid symbols"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } matrix->AddState( i, j, p ); matrix->SetPolymorphic( i, j, 0 ); } } // handle case of state sets when tokens is not in effect // else if( !tokens && token.GetTokenLength() > 1 ) { // token should be in one of the following forms: {acg} {a~g} {a c g} (acg) (a~g) (a c g) nxsstring t = token.GetToken(); int tlen = t.size(); int poly = ( t[0] == '(' ); assert( poly || t[0] == '{' ); assert( ( poly && t[tlen-1] == ')' ) || ( !poly && t[tlen-1] == '}' ) ); int first_nonblank = 1; while( t[first_nonblank] == ' ' || t[first_nonblank] == '\t' ) first_nonblank++; int last_nonblank = tlen-2; while( t[last_nonblank] == ' ' || t[last_nonblank] == '\t' ) last_nonblank--; if( t[first_nonblank] == '~' || t[last_nonblank] == '~' ) { errormsg = token.GetToken(); errormsg += " does not represent a valid range of states"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } int k = 1; char* pFirst = symbols; int tildeFound = 0; for(;;) { if( t[k] == ')' || t[k] == '}' ) break; if( t[k] == ' ' || t[k] == '\t' ) { k++; continue; } // t[k] should be either '~' or one of the state symbols if( t[k] == '~' ) { tildeFound = 1; } else { // add state symbol and record if it is the first or last one // in case we encounter a tilde // if( tildeFound ) { // add all states from firstState to t[k] // then set tildeFound to 0 again pFirst++; while( *pFirst != '\0' && *pFirst != t[k] ) { int p = PositionInSymbols(*pFirst); if( p < 0 ) { errormsg = "State specified ("; errormsg += *pFirst; errormsg += ") for taxon "; errormsg += (i+1); errormsg += ", character "; errormsg += (j+1); errormsg += ", not found in list of valid symbols"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } matrix->AddState( i, j, p ); pFirst++; } tildeFound = 0; } else { int p = PositionInSymbols(t[k]); if( p < 0 ) { errormsg = "State specified ("; errormsg += t[k]; errormsg += ") for taxon "; errormsg += (i+1); errormsg += ", character "; errormsg += (j+1); errormsg += ", not found in list of valid symbols"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } pFirst = ( symbols + p ); matrix->AddState( i, j, p ); } } // if( t[k] == '~' ) ... else ... loop k++; } // for(;;) loop matrix->SetPolymorphic( i, j, poly ); } // handle case in which TOKENS was specified in the FORMAT command // else { // token should be in one of the following forms: "{" "a" "bb" int polymorphism = token.Equals("("); int uncertainty = token.Equals("{"); if( !uncertainty && !polymorphism ) { int k = HandleTokenState( token, j ); matrix->AddState( i, j, k ); } else { int tildeFound = 0; int first = -1; int last; for(;;) { // OPEN ISSUE: What about newlines if interleaving? I'm assuming // that the newline must come between characters to count. token.SetLabileFlagBit( NexusToken::tildeIsPunctuation ); token.GetNextToken(); if( polymorphism && token.Equals(")") ) { if( tildeFound ) { errormsg = "Range of states still being specified when ')' encountered"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } break; } else if( uncertainty && token.Equals("}") ) { if( tildeFound ) { errormsg = "Range of states still being specified when '}' encountered"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } break; } else if( token.Equals("~") ) { if( first == -1 ) { errormsg = "Tilde character ('~') cannot precede token indicating beginning of range"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } tildeFound = 1; } else if( tildeFound ) { // Add all states from first+1 to last, then reset tildeFound to 0 // last = HandleTokenState( token, j ); if( last <= first) { errormsg = "Last state in specified range ("; errormsg += token.GetToken(); errormsg += ") must be greater than the first"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } for( int k = first+1; k <= last; k++ ) matrix->AddState( i, j, k ); tildeFound = 0; first = -1; } else { // Add current state, then set first to that state's value // State's value is its position within the list of states // for that character // first = HandleTokenState( token, j ); matrix->AddState( i, j, first ); } } if( polymorphism ) matrix->SetPolymorphic( i, j, 1 ); } } return true; } /** * @method HandleTokenState [int:protected] * @param token [NexusToken&] the token used to read from in * @param j [int] the character index, in range [0..nchar) * @throws XNexus * * Called from HandleNextState to read in the next state when 'tokens' is in effect. * Looks up state in character states listed for the character to make * sure it is a valid state, and returns state's value (0, 1, 2, ...). * Note: does NOT handle adding the state's value to matrix. Save the return * value, let's call it k, and use the following command to add it to matrix: * matrix->AddState( i, j, k ); */ int CharactersBlock::HandleTokenState( NexusToken& token, int j ) { // token should be one of the character states listed for character j // in charStates // if( charStates.find(j) == charStates.end() ) { errormsg = "No states were defined for character "; errormsg += ( 1 + GetOrigCharIndex(j) ); throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // TO DO: this section is very UGLY - need to find some cleaner way of comparing // the token nxsstring to the strings representing valid characters states // in the LabelList associated with character j // LabelListBag::const_iterator bagIter = charStates.find(j); LabelList::const_iterator ci_begin = (*bagIter).second.begin(); LabelList::const_iterator ci_end = (*bagIter).second.end(); nxsstring t = token.GetToken( respectingCase ); LabelList::const_iterator cit; if( respectingCase ) cit = find( ci_begin, ci_end, t ); else cit = find_if( ci_begin, ci_end, bind2nd( stri_equal(), t ) ); if( cit == ci_end ) { errormsg = "Character state "; errormsg += t; errormsg += " not defined for character "; errormsg += ( 1 + GetOrigCharIndex(j) ); throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // ok, the state has been identified, so return the state's internal // representation. That is, if the list of state labels was // "small medium large" and "small" was specified in the data file, // state saved in matrix would be 0 (it would be 1 if "medium" were // specified in the data file, and 2 if "large" were specified in the // data file). int k = ( cit - ci_begin ); return k; } /** * @method HandleStdMatrix [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called from HandleMatrix function to read in a standard * (i.e., non-transposed) matrix. Interleaving, if applicable, * is dealt with herein. */ void CharactersBlock::HandleStdMatrix( NexusToken& token ) { int i, j, currChar; int firstChar = 0; int lastChar = ncharTotal; int nextFirst; int page = 0; for(;;) { //************************************************ //******** Beginning of loop through taxa ******** //************************************************ for( i = 0; i < ntax; i++ ) { if( labels ) { // This should be the taxon label // token.GetNextToken(); if( page == 0 && newtaxa ) { // This section: // - labels provided // - on first (or only) interleave page // - no previous TAXA block // check for duplicate taxon names // if( taxa.IsAlreadyDefined( token.GetToken() ) ) { errormsg = "Data for this taxon ("; errormsg += token.GetToken(); errormsg += ") has already been saved"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // labels provided and not already stored in the taxa block with // the TAXLABELS command; taxa.Reset() and taxa.SetNTax() have // were already called, however, when the NTAX subcommand was // processed. // taxa.AddTaxonLabel( token.GetToken() ); // order of occurrence in TAXA block same as row in matrix // taxonPos[i] = i; } else { // This section: // - labels provided // - TAXA block provided or has been created already // - may be on any (interleave) page // Cannot assume taxon in same position in // taxa block. Set up taxonPos array so that we can look up // the correct row in matrix for any given taxon // int positionInTaxaBlock; try { positionInTaxaBlock = taxa.FindTaxon( token.GetToken() ); } catch( std::out_of_range ) { errormsg = "Could not find taxon named "; errormsg += token.GetToken(); errormsg += " among stored taxon labels"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( page == 0 ) { // make sure user has not duplicated data for a single taxon // if( taxonPos[positionInTaxaBlock] != -1 ) { errormsg = "Data for this taxon ("; errormsg += token.GetToken(); errormsg += ") has already been saved"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // make sure user has kept same relative ordering of taxa in both the TAXA // block and the CHARACTERS block // if( positionInTaxaBlock != i ) { //POL 11-12-99: was --> positionInTaxaBlock >= i errormsg = "Relative order of taxa must be the same in both the TAXA and CHARACTERS blocks"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } taxonPos[i] = positionInTaxaBlock; // was --> taxonPos[positionInTaxaBlock] = i; } else { // make sure user has kept the ordering of taxa the same from // one interleave page to the next // if( taxonPos[positionInTaxaBlock] != i ) { errormsg = "Ordering of taxa must be identical to that in first interleave page"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } } else { // no labels provided, assume taxon position same as in taxa block if( page == 0 ) taxonPos[i] = i; } //****************************************************** //******** Beginning of loop through characters ******** //****************************************************** for( currChar = firstChar; currChar < lastChar; currChar++ ) { // it is possible that character currChar has been ELIMINATEd, in // which case we need to go through the motions of reading in the // data but we don't store it. The variable j will be our guide // when it comes time to store data since j will be -1 for // characters that were ELIMINATEd and will be set to the correct // row for characters that have not been ELIMINATEd. // j = charPos[currChar]; // ok will be 0 only if a newline character is encountered before // character j processed // bool ok = HandleNextState( token, i, j ); if( interleaving && !ok ) { if( lastChar < ncharTotal && j != lastChar ) { errormsg = "Each line within an interleave page must comprise the same number of characters"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // currChar should be firstChar in next go around nextFirst = currChar; // set lastChar to currChar so that we can check to make sure the // remaining lines in this interleave page end at the same place lastChar = currChar; // since j is now equal to lastChar, we are done with this innermost loop } } // innermost loop (over characters) } // middle loop (over taxa) firstChar = nextFirst; lastChar = ncharTotal; // if currChar equals ncharTotal, then we've just finished reading the last // interleave page and thus should break from the outer loop // Note that if we are not interleaving, this will still work since // lastChar is initialized to ncharTotal and never changed // if( currChar == ncharTotal ) break; page++; } // outer loop (over interleave pages) } /** * @method HandleTransposedMatrix [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called from HandleMatrix function to read in a transposed * matrix. Interleaving, if applicable, is dealt with herein. */ void CharactersBlock::HandleTransposedMatrix( NexusToken& token ) { int i, j, currChar; int firstTaxon = 0; int lastTaxon = ntaxTotal; int nextFirst; int page = 0; for(;;) { //****************************************************** //******** Beginning of loop through characters ******** //****************************************************** for( currChar = 0; currChar < ncharTotal; currChar++ ) { // it is possible that character currChar has been ELIMINATEd, in // which case we need to go through the motions of reading in the // data but we don't store it. The variable j will be our guide // when it comes time to store data since j will be -1 for // characters that were ELIMINATEd and will be set to the correct // row for characters that have not been ELIMINATEd. // j = charPos[currChar]; if( labels ) { // this should be the character label // token.GetNextToken(); if( page == 0 && newchar ) { // check for duplicate character names // nxsstring s = token.GetToken(); LabelList::const_iterator iter = find( charLabels.begin(), charLabels.end(), s ); int charLabelFound = ( iter != charLabels.end() ); if( charLabelFound ) { errormsg = "Data for this character ("; errormsg += token.GetToken(); errormsg += ") has already been saved"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // Labels provided, need to add them to charLabels list. // We're not supposed to save anything for this character since it // has been ELIMINATEd, but the labels must be saved for purposes of // numbering. Otherwise a more complicated system would be needed // wherein an association is set up between character number and // character label. Since this is not done in the case of taxa // that are effectively ELIMINATEd when they are included in the // TAXA block but not in the CHARACTERS MATRIX command, I see no // reason to not save the full character labels here even for those // that have been ELIMINATEd. Also, for interleaved matrices, it // is necessary to have the full labels saved somewhere so that // it is possible to detect characters out of order or duplicated. // charLabels.push_back( token.GetToken() ); } else // either not first interleaved page or character labels not previously defined { nxsstring s = token.GetToken(); LabelList::const_iterator iter = find( charLabels.begin(), charLabels.end(), s ); if( iter == charLabels.end() ) { errormsg = "Could not find character named "; errormsg += token.GetToken(); errormsg += " among stored character labels"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } int positionInCharLabelsList = ( iter - charLabels.begin() ); // make sure user has not duplicated data for a single character or // changed the order in which characters appear in different interleave // pages // if( positionInCharLabelsList != currChar ) { if( page == 0 ) { errormsg = "Data for this character ("; errormsg += token.GetToken(); errormsg += ") has already been saved"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else { errormsg = "Ordering of characters must be identical to that in first interleave page"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } } // if labels conditional //************************************************ //******** Beginning of loop through taxa ******** //************************************************ for( i = firstTaxon; i < lastTaxon; i++ ) { if( page == 0 ) { // We are forced to assume that the user did not leave out any // taxa, since without taxon labels in the matrix we would // have no way of detecting which were left out; thus, // ntax == ntaxTotal in this case. Order of occurrence in // TAXA block is the same as the row in matrix. // taxonPos[i] = i; } // ok will be 0 only if a newline character is encountered before // taxon i processed // bool ok = HandleNextState( token, i, j ); if( interleaving && !ok ) { if( lastTaxon < ntaxTotal && i != lastTaxon ) { errormsg = "Each line within an interleave page must comprise the same number of taxa"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // i should be firstChar in next go around nextFirst = i; // set lastTaxon to i so that we can check to make sure the // remaining lines in this interleave page end at the same // place lastTaxon = i; // since i is now equal to lastTaxon, we are done with this innermost loop } } // innermost loop (over taxa) } // middle loop (over characters) firstTaxon = nextFirst; lastTaxon = ntaxTotal; // if i equals ncharTotal, then we've just finished reading the last // interleave page and thus should break from the outer loop // Note that if we are not interleaving, this will still work since // lastTaxon is initialized to ntaxTotal and never changed // if( i == ntaxTotal ) break; page++; } // outer loop (over interleave pages) } /** * @method HandleMatrix [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when MATRIX command needs to be parsed from within the * CHARACTERS block. Deals with everything after the token MATRIX * up to and including the semicolon that terminates the MATRIX * command. */ void CharactersBlock::HandleMatrix( NexusToken& token ) { int i, j; if( ntax == 0 ) { errormsg = "Must precede "; errormsg += id; errormsg += " block with a TAXA block or specify NEWTAXA and NTAX in the DIMENSIONS command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( ntaxTotal == 0 ) ntaxTotal = taxa.GetNumTaxonLabels(); // We use >= rather than just > below because someone might have ELIMINATEd // all characters, and we should allow that (even though it is absurd) assert( nchar >= 0 ); if( datatype == continuous ) { errormsg = "Sorry, continuous character matrices have not yet been implemented"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( matrix != NULL ) delete matrix; matrix = new DiscreteMatrix( ntax, nchar ); // Allocate memory for (and initialize) the arrays activeTaxon and activeChar. // All characters and all taxa are initially active. // activeTaxon = new bool[ntax]; for( i = 0; i < ntax; i++ ) activeTaxon[i] = true; activeChar = new bool[nchar]; for( j = 0; j < nchar; j++ ) activeChar[j] = true; // The value of ncharTotal is normally identical to the value of nchar specified // in the CHARACTERS block DIMENSIONS command. If an ELIMINATE command is // processed, however, nchar < ncharTotal. Note that the ELIMINATE command // will have already been read by now, and the ELIMINATEd character numbers // will be stored in the IntSet eliminated. // // Note that if an ELIMINATE command has been read, charPos will have already // been created; thus, we only need to allocate and initialize charPos if user // did not specify an ELIMINATE command // if( charPos == NULL ) BuildCharPosArray(); // The value of ntaxTotal equals the number of taxa specified in the // TAXA block, whereas ntax equals the number of taxa specified in // the DIMENSIONS command of the CHARACTERS block. These two numbers // will be identical unless some taxa were left out of the MATRIX // command of the CHARACTERS block, in which case ntax < ntaxTotal. // if( taxonPos != NULL ) delete [] taxonPos; taxonPos = new int[ntaxTotal]; for( i = 0; i < ntaxTotal; i++ ) taxonPos[i] = -1; if( transposing ) HandleTransposedMatrix( token ); else HandleStdMatrix( token ); // If we've gotten this far, presumably it is safe to // tell the ASSUMPTIONS block that were ready to take on // the responsibility of being the current character-containing // block (to be consulted if characters are excluded or included // or if taxa are deleted or restored) assumptionsBlock.SetCallback(this); // this should be the terminating semicolon at the end of the matrix command token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' at the end of the MATRIX command; found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } /** * @method HandleStatelabels [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when STATELABELS command needs to be parsed from within the * DIMENSIONS block. Deals with everything after the token STATELABELS * up to and including the semicolon that terminates the STATELABELS * command. Note that the numbers of states are shifted back one before * being stored so that the character numbers in the LabelListAssoc objects * are 0-offset rather than being 1-offset as in the Nexus data file. */ void CharactersBlock::HandleStatelabels( NexusToken& token ) { bool semicolonFoundInInnerLoop = false; charStates.erase( charStates.begin(), charStates.end() ); if( charPos == NULL ) BuildCharPosArray(); for(;;) { if( semicolonFoundInInnerLoop ) break; token.GetNextToken(); if( token.Equals(";") ) break; // token should be the character number; create a new association // int n = atoi( token.GetToken().c_str() ); if( n < 1 || n > ncharTotal ) { errormsg = "Invalid character number ("; errormsg += token.GetToken(); errormsg += ") found in STATELABELS command (either out of range or not interpretable as an integer)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } for(;;) { token.GetNextToken(); if( token.Equals(";") ) { semicolonFoundInInnerLoop = true; break; } if( token.Equals(",") ) { break; } // token should be a character state label; add it to the list // if( !IsEliminated(n-1) ) { int k = GetCharPos(n-1); charStates[k].push_back( token.GetToken() ); } } // inner loop (grabbing state labels for character n) } // outer loop } /** * @method HandleTaxlabels [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when TAXLABELS command needs to be parsed from within the * CHARACTERS block. Deals with everything after the token TAXLABELS * up to and including the semicolon that terminates the TAXLABELS * command. */ void CharactersBlock::HandleTaxlabels( NexusToken& token ) { if( !newtaxa ) { errormsg = "NEWTAXA must have been specified in DIMENSIONS command to use the TAXLABELS command in a "; errormsg += id; errormsg += " block"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } for(;;) { token.GetNextToken(); // token should either be ';' or the name of a taxon // if( token.Equals(";") ) { break; } else { // check to make sure user is not trying to read in more // taxon labels than there are taxa // if( taxa.GetNumTaxonLabels() > ntaxTotal ) { errormsg = "Number of taxon labels exceeds NTAX specified in DIMENSIONS command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } taxa.AddTaxonLabel( token.GetToken() ); } } // OPEN ISSUE: Some may object to setting newtaxa to false here, because then the // fact that new taxa were specified in this CHARACTERS block rather than in // a preceding TAXA block is lost. This will only be important if we wish to // recreate the original data file, which I don't anticipate anyone doing with // this code (too difficult to remember all comments, the order of blocks in // the file, etc.) newtaxa = false; } /** * @method PositionInSymbols [int:protected] * @param ch [int] the symbol character to search for * * Returns position of ch in symbols array. The value of respectingCase * is used to determine whether the search should be case sensitive or not. * Assumes symbols != NULL. Returns -1 if ch is not found in symbols. */ int CharactersBlock::PositionInSymbols( char ch ) { assert( symbols != NULL ); int symbolsLength = strlen(symbols); int found = 0; int i; for( i = 0; i < symbolsLength; i++ ) { char char_in_symbols = ( respectingCase ? symbols[i] : (char)toupper(symbols[i]) ); char char_in_question = ( respectingCase ? ch : (char)toupper(ch) ); if( char_in_symbols != char_in_question ) continue; found = 1; break; } return ( found ? i : -1 ); } /** * @method Read [void:protected] * @param token [NexusToken&] the token used to read from in * @param in [istream&] the input stream from which to read * @throws XNexus * * This function provides the ability to read everything following the block name * (which is read by the Nexus object) to the end or endblock statement. * Characters are read from the input stream in. Overrides the * abstract virtual function in the base class. */ void CharactersBlock::Read( NexusToken& token ) { isEmpty = false; token.GetNextToken(); // this should be the semicolon after the block name if( !token.Equals(";") ) { errormsg = "Expecting ';' after "; errormsg += id; errormsg += " block name, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } ntax = taxa.GetNumTaxonLabels(); for(;;) { token.GetNextToken(); if( token.Equals("DIMENSIONS") ) { HandleDimensions( token, "NEWTAXA", "NTAX", "NCHAR" ); } else if( token.Equals("FORMAT") ) { HandleFormat( token ); } else if( token.Equals("ELIMINATE") ) { HandleEliminate( token ); } else if( token.Equals("TAXLABELS") ) { HandleTaxlabels( token ); } else if( token.Equals("CHARSTATELABELS") ) { HandleCharstatelabels( token ); } else if( token.Equals("CHARLABELS") ) { HandleCharlabels( token ); } else if( token.Equals("STATELABELS") ) { HandleStatelabels( token ); } else if( token.Equals("MATRIX") ) { HandleMatrix( token ); } else if( token.Equals("END") ) { HandleEndblock( token, "Character" ); break; } else if( token.Equals("ENDBLOCK") ) { HandleEndblock( token, "Character" ); break; } else { SkippingCommand( token.GetToken() ); do { token.GetNextToken(); } while( !token.AtEOF() && !token.Equals(";") ); if( token.AtEOF() ) { errormsg = "Unexpected end of file encountered"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } } /** * @method Report [void:public] * @param out [ostream&] the output stream to which to write the report * * This function outputs a brief report of the contents of this * CHARACTERS block. Overrides the abstract virtual function * in the base class. */ void CharactersBlock::Report( std::ostream& out ) { out << endl; out << id << " block contains "; if( ntax == 0 ) out << "no taxa"; else if( ntax == 1 ) out << "one taxon"; else out << ntax << " taxa"; out << " and "; if( nchar == 0 ) out << "no characters"; else if( nchar == 1 ) out << "one character"; else out << nchar << " characters"; out << endl; switch( datatype ) { case dna: out << " Data type is \"DNA\"" << endl; break; case rna: out << " Data type is \"RNA\"" << endl; break; case nucleotide: out << " Data type is \"nucleotide\"" << endl; break; case protein: out << " Data type is \"protein\"" << endl; break; case continuous: out << " Data type is \"continuous\"" << endl; break; default: out << " Data type is \"standard\"" << endl; } if( respectingCase ) out << " Respecting case" << endl; else out << " Ignoring case" << endl; if( tokens ) out << " Multicharacter tokens allowed in data matrix" << endl; else out << " Data matrix entries are expected to be single symbols" << endl; if( labels && transposing ) out << " Character labels are expected on left side of matrix" << endl; else if( labels && !transposing ) out << " Taxon labels are expected on left side of matrix" << endl; else out << " No labels are expected on left side of matrix" << endl; if( charLabels.size() > 0 ) { out << " Character and character state labels:" << endl; for( int k = 0; k < nchar; k++ ) { if( charLabels[k].length() == 0 ) out << '\t' << ( 1 + GetOrigCharIndex(k) ) << '\t' << "(no label provided for this character)" << endl; else out << '\t' << ( 1 + GetOrigCharIndex(k) ) << '\t' << charLabels[k] << endl; // output state labels if any are defined for this character LabelListBag::const_iterator cib = charStates.find(k); if( cib != charStates.end() ) { int ns = (*cib).second.size(); for( int m = 0; m < ns; m++ ) { out << "\t\t" << (*cib).second[m] << endl; } } } } if( transposing && interleaving ) out << " Matrix transposed and interleaved" << endl; else if( transposing && !interleaving ) out << " Matrix transposed but not interleaved" << endl; else if( !transposing && interleaving ) out << " Matrix interleaved but not transposed" << endl; else out << " Matrix neither transposed nor interleaved" << endl; out << " Missing data symbol is '" << missing << '\'' << endl; if( matchchar != '\0' ) out << " Match character is '" << matchchar << '\'' << endl; else out << " No match character specified" << endl; if( gap != '\0' ) out << " Gap character specified is '" << gap << '\'' << endl; else out << " No gap character specified" << endl; out << " Valid symbols are: " << symbols << endl; int numEquateMacros = equates.size(); if( numEquateMacros > 0 ) { out << " Equate macros in effect:" << endl; typedef AssocList::const_iterator CI; for( CI i = equates.begin(); i != equates.end(); ++i) { out << " " << (*i).first << " = " << (*i).second << endl; } } else out << " No equate macros have been defined" << endl; if( ncharTotal == nchar ) out << " No characters were eliminated" << endl; else { out << " The following characters were eliminated:" << endl; IntSet::const_iterator k; for( k = eliminated.begin(); k != eliminated.end(); k++ ) { out << " " << ((*k)+1) << endl; } } out << " The following characters have been excluded:" << endl; int k; int nx = 0; for( k = 0; k < nchar; k++ ) { if( activeChar[k] ) continue; out << " " << (k+1) << endl; nx++; } if( nx == 0 ) out << " (no characters excluded)" << endl; out << " The following taxa have been deleted:" << endl; nx = 0; for( k = 0; k < ntax; k++ ) { if( activeTaxon[k] ) continue; out << " " << (k+1) << endl; nx++; } if( nx == 0 ) out << " (no taxa deleted)" << endl; out << " Data matrix:" << endl; DebugShowMatrix( out, " " ); } /** * @method Reset [void:protected] * * Sets ntax and nchar to 0 in preparation for reading a new * CHARACTERS block. */ void CharactersBlock::Reset() { isEmpty = true; ntax = 0; nchar = 0; newchar = true; newtaxa = false; interleaving = false; transposing = false; respectingCase = false; labels = true; datatype = standard; missing = '?'; gap = '\0'; matchchar = '\0'; charLabels.erase( charLabels.begin(), charLabels.end() ); charStates.erase( charStates.begin(), charStates.end() ); equates.erase( equates.begin(), equates.end() ); ResetSymbols(); if( matrix != NULL ) { delete matrix; matrix = NULL; } if( charPos != NULL ) { delete [] charPos; charPos = NULL; } if( taxonPos != NULL ) { delete [] taxonPos; taxonPos = NULL; } if( activeTaxon != NULL ) { delete [] activeTaxon; activeTaxon = NULL; } if( activeChar != NULL ) { delete [] activeChar; activeChar = NULL; } if( !eliminated.empty() ) { eliminated.erase( eliminated.begin(), eliminated.end() ); } } /** * @method ResetSymbols [void:protected] * * Resets standard symbol set after a change in datatype is made. Also * flushes equates list and installs standard equate macros for the * current datatype. */ void CharactersBlock::ResetSymbols() { // define the standard symbols switch( datatype ) { case dna: strcpy( symbols, "ACGT" ); break; case rna: strcpy( symbols, "ACGU" ); break; case nucleotide: strcpy( symbols, "ACGT" ); break; case protein: strcpy( symbols, "ACDEFGHIKLMNPQRSTVWY*" ); break; default: strcpy( symbols, "01" ); } // setup standard equates equates.erase( equates.begin(), equates.end() ); //trash Association* newEquate; if( datatype == dna || datatype == rna || datatype == nucleotide ) { #if 1 equates[ nxsstring("R") ] = nxsstring("{AG}"); equates[ nxsstring("Y") ] = nxsstring("{CT}"); equates[ nxsstring("M") ] = nxsstring("{AC}"); equates[ nxsstring("K") ] = nxsstring("{GT}"); equates[ nxsstring("S") ] = nxsstring("{CG}"); equates[ nxsstring("W") ] = nxsstring("{AT}"); equates[ nxsstring("H") ] = nxsstring("{ACT}"); equates[ nxsstring("B") ] = nxsstring("{CGT}"); equates[ nxsstring("V") ] = nxsstring("{ACG}"); equates[ nxsstring("D") ] = nxsstring("{AGT}"); equates[ nxsstring("N") ] = nxsstring("{ACGT}"); equates[ nxsstring("X") ] = nxsstring("{ACGT}"); #else newEquate = new Association(); newEquate->SetKey("R"); newEquate->SetValue("{AG}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("Y"); newEquate->SetValue("{CT}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("M"); newEquate->SetValue("{AC}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("K"); newEquate->SetValue("{GT}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("S"); newEquate->SetValue("{CG}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("W"); newEquate->SetValue("{AT}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("H"); newEquate->SetValue("{ACT}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("B"); newEquate->SetValue("{CGT}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("V"); newEquate->SetValue("{ACG}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("D"); newEquate->SetValue("{AGT}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("N"); newEquate->SetValue("{ACGT}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("X"); newEquate->SetValue("{ACGT}"); equates.AddAssociation( newEquate ); #endif } else if( datatype == protein ) { #if 1 equates[ nxsstring("B") ] = nxsstring("{DN}"); equates[ nxsstring("Z") ] = nxsstring("{EQ}"); #else newEquate = new Association(); newEquate->SetKey("B"); newEquate->SetValue("{DN}"); equates.AddAssociation( newEquate ); newEquate = new Association(); newEquate->SetKey("Z"); newEquate->SetValue("{EQ}"); equates.AddAssociation( newEquate ); #endif } } /** * @method RestoreTaxon [void:protected] * @param i [int] index of taxon to restore in range [0..ntax) * * Restores taxon whose 0-offset current index is i. If taxon * is already active, this function has no effect. */ void CharactersBlock::RestoreTaxon( int i ) { activeTaxon[i] = true; } /** * @method ShowStateLabels [void:protected] * @param out [ostream&] the output stream on which to write * @param i [int] the taxon, in range [0..ntax) * @param j [int] the character, in range [0..nchar) * * Looks up the state(s) at row i, column j of matrix and writes it (or them) * to out. If there is uncertainty or polymorphism, the list of states is * surrounded by the appropriate set of symbols (i.e., parentheses for polymorphism, * curly brackets for uncertainty). If 'tokens' is in effect, the output takes * the form of the defined state labels; otherwise, the correct symbol is * looked up in symbols and output. */ void CharactersBlock::ShowStateLabels( std::ostream& out, int i, int j ) { if( tokens ) { int n = matrix->GetNumStates( i, j ); if( n == 0 && matrix->IsGap( i, j ) ) out << gap; else if( n == 0 && matrix->IsMissing( i, j ) ) out << missing; else if( n == 1 ) { int s = matrix->GetState( i, j ); LabelListBag::const_iterator ci = charStates.find(j); // OPEN ISSUE: need to eliminate state labels for characters that have // been eliminated if( ci == charStates.end() ) out << " " << s << "[<-no label found]"; else { // show label at index number s in LabelList at ci out << " " << (*ci).second[s]; } } else { if( matrix->IsPolymorphic( i, j ) ) out << " ("; else out << " {"; for( int k = 0; k < n; k++ ) { int s = matrix->GetState( i, j, k ); LabelListBag::const_iterator ci = charStates.find(j); if( ci == charStates.end() ) out << " " << s << "[<-no label found]"; else { // show label at index number s in LabelList at ci out << " " << (*ci).second[s]; } } if( matrix->IsPolymorphic( i, j ) ) out << ')'; else out << '}'; } } else ShowStates( out, i, j ); } /** * @method ShowStates [char*:public] * @param out [ostream&] the stream on which to show the state(s) * @param i [int] the (0-offset) index of the taxon in question * @param j [int] the (0-offset) index of the character in question * * Shows the states for taxon i, character j, on the stream out. Uses * symbols array to translate the states from the way they are stored (as * integers) to the symbol used in the original data matrix. * Assumes i is in the range [0..nrows) and j is in the range [0..ncols). * Also assumes both symbols and data are non-NULL. */ void CharactersBlock::ShowStates( std::ostream& out, int i, int j ) { assert( i >= 0 ); assert( i < ntax ); assert( j >= 0 ); assert( j < nchar ); char s[NCL_MAX_STATES+3]; WriteStates( matrix->GetDiscreteDatum( i, j ), s, NCL_MAX_STATES+3 ); out << s; } /** * @method TaxonLabelToNumber [void:protected] * @param s [nxsstring&] the taxon label to convert * * Converts a taxon label to a number corresponding to * the taxon's position within the list maintained by * the TaxaBlock object. This method overrides the * virtual function of the same name in the NexusBlock * base class. If s is not a valid taxon label, returns * the value 0. */ int CharactersBlock::TaxonLabelToNumber( nxsstring s ) { int i; try { i = 1 + taxa.FindTaxon(s); } catch( TaxaBlock::nosuchtaxon ) { i = 0; } return i; } /** * @method WriteStates [void:public] * @param d [DiscreteDatum&] the datum to be queried * @param s [char*] the buffer to which to print * @param slen [int] the length of the buffer s * * Writes out the state (or states) stored in this DiscreteDatum object * to the buffer s using the symbols array to do the necessary * translation of the numeric state values to state symbols. In the * case of polymorphism or uncertainty, the list of states will be * surrounded by brackets or parentheses (respectively). Assumes * s is long enough to hold everything printed. */ void CharactersBlock::WriteStates( DiscreteDatum& d, char* s, int slen ) { assert( s != NULL ); assert( slen > 1 ); if( matrix->IsMissing(d) ) { s[0] = missing; s[1] = '\0'; } else if( matrix->IsGap(d) ) { s[0] = gap; s[1] = '\0'; } else { assert( symbols != NULL ); int symbolListLen = strlen( symbols ); int numStates = matrix->GetNumStates(d); int numCharsNeeded = numStates; if( numStates > 1 ) numCharsNeeded += 2; assert( slen > numCharsNeeded ); if( numStates == 1 ) { int v = matrix->GetState( d ); assert( v < symbolListLen ); s[0] = symbols[v]; s[1] = '\0'; } else { // numStates must be greater than 1 // int i = 0; if( matrix->IsPolymorphic(d) ) s[i++] = '('; else s[i++] = '{'; for( int k = 0; k < numStates; k++ ) { int v = matrix->GetState( d, k ); assert( v < symbolListLen ); s[i++] = symbols[v]; s[i] = '\0'; } if( matrix->IsPolymorphic(d) ) s[i++] = ')'; else s[i++] = '}'; s[i] = '\0'; } } } tv-0.5/ncl-2.0/src/nexusdefs.h0000775000076400007640000000351211432542260012762 00000000000000#ifndef __NEXUSDEFS_H #define __NEXUSDEFS_H // maximum number of states that can be stored; the only limitation is that this // number be less than the maximum size of an int (not likely to be a problem). // A good number for this is 76, which is 96 (the number of distinct symbols // able to be input from a standard keyboard) less 20 (the number of symbols // symbols disallowed by the Nexus standard for use as state symbols) // #define NCL_MAX_STATES 76 #ifdef __BORLANDC__ #if __BORLANDC__ < 0x550 #ifdef __MINMAX_DEFINED #undef __MINMAX_DEFINED #endif #pragma warn -pch #pragma warn .pch #endif #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include // lines below needed for access function #if defined( __BORLANDC__ ) # include #else # include #endif #if (defined __BORLANDC__ || defined __MWERKS__) using namespace std; #endif #include "nxsstring.h" typedef std::vector BoolVect; typedef std::vector IntVect; typedef std::vector LabelList; typedef std::set< int,std::less > IntSet; typedef std::map< int, LabelList, std::less > LabelListBag; typedef std::map< nxsstring, nxsstring, std::less > AssocList; typedef std::map< nxsstring, IntSet, std::less > IntSetMap; typedef std::vector AllelesVect; struct stri_equal : public std::binary_function { bool operator()(const nxsstring& x, const nxsstring& y) const; }; #if __BORLANDC__ < 0x550 // Redefine __MINMAX_DEFINED so Windows header files compile #ifndef __MINMAX_DEFINED #define __MINMAX_DEFINED #endif #endif #endif tv-0.5/ncl-2.0/src/Makefile.am0000775000076400007640000000110510222237074012635 00000000000000noinst_LIBRARIES = libncl.a libncl_a_SOURCES = allelesblock.cpp assumptionsblock.cpp charactersblock.cpp \ datablock.cpp discretedatum.cpp discretematrix.cpp distancedatum.cpp \ distancesblock.cpp nexus.cpp nexusblock.cpp nexustoken.cpp setreader.cpp \ nxsstring.cpp nxsdate.cpp taxablock.cpp treesblock.cpp xnexus.cpp \ allelesblock.h assumptionsblock.h charactersblock.h \ datablock.h discretedatum.h discretematrix.h distancedatum.h \ distancesblock.h nexus.h nexusdefs.h nexustoken.h setreader.h \ nxsstring.h nxsdate.h taxablock.h treesblock.h xnexus.h tv-0.5/ncl-2.0/src/allelesblock.cpp0000775000076400007640000023250407575350624013770 00000000000000// OPEN ISSUES: // - variable alleles_fixed currently is not being used // - alleles_fixed should be an array of bool, since user can specify // allele labels for some loci and not others // - HandleTransposedMatrix function still needs to be written #include #include #include "nexusdefs.h" #include "xnexus.h" #include "nexustoken.h" #include "nexus.h" #include "setreader.h" #include "taxablock.h" #include "discretedatum.h" #include "discretematrix.h" #include "charactersblock.h" #include "allelesblock.h" #include "assumptionsblock.h" using namespace std; /** * @class AllelesBlock * @file allelesblock.h * @file allelesblock.cpp * @author Paul O. Lewis * @copyright Copyright © 1999. All Rights Reserved. * @variable alleles_fixed [bool:private] if alleles_fixed is true, new alleles cannot be added * @variable datapoint [datapoints:private] see enum datapoints for details * @variable haploid [IntSet:protected] set of loci that are haploid * @variable indivCount [int*:private] indivCount[i] is index of first individual in population i+1 * @see Nexus * @see NexusBlock * @see NexusReader * @see NexusToken * @see XNexus * * This class handles reading and storage for the Nexus block ALLELES. * It is derived from CharactersBlock, and overrides the member functions * Read and Reset, which are virtual functions in the base class. * * Because it is derived from the class CharactersBlock, this block * uses the DiscreteMatrix class for storing the data, and this * requires a little explanation. The DiscreteMatrix class is designed for * storing an r X c array of integers. The way it is used here, the rows * represent individuals and the columns loci. In order to store data for * both genes at a given locus for diploid individuals, the integer stored * is broken up into a higher-order word and a lower-order word. The macros * HIWORD and LOWORD can be used to extract these two components from the * integer value stored in the DiscreteMatrix structure. Note that this * technique assumes integers are 4 bytes (or greater) in size, allowing * 2 bytes of storage for each of the two allelic states stored. The maximum * integer that can be stored in 2 bytes is 0xFF, or 255, which is thus * the maximum number of alleles that can be defined for each locus. * *

The variable gap from the underlying CharactersBlock class * has been reassigned to function as the separator character. * *

The array indivCount is used to store the row number of the * first individual in the next population. Thus, the standard * way to loop through all individuals in population i is: *

 * int numIndivs = ( i > 0 ? indivCount[i] - indivCount[i-1] : indivCount[i] );
 * for( j = 0; j < numIndivs; j++ )
 * {
 *   gene = GetGene( i, j, locus, 0 );
 *   if( gene < MAX_ALLELES ) {
 *     // do something with gene 0
 *   }
 *   else {
 *     // do nothing since gene 0 was missing data
 *   }
 *
 *   if( !IsHaploid(locus) )
 *   {
 *     gene = GetGene( i, j, locus, 1 );
 *     if( gene < MAX_ALLELES ) {
 *       // do something with gene 1
 *     }
 *     else {
 *       // do nothing since gene 1 was missing data
 *     }
 *   }
 * }
 * 
* *

Below is a table showing the correspondence between the elements of * an ALLELES block and the variables and member functions that can be used * to access each piece of information stored. * *

* * * * * * * * * * * * * * * *
Nexus command * Nexus subcommand * Data Members * Member Functions *
DIMENSIONS * NEWPOPS * bool newtaxa * *
NPOP * int ntax (see also ntaxTotal) * int GetNTax() (see also GetNumMatrixRows()) *
NLOCI * int nchar (see also ncharTotal) * int GetNChar() (see also GetNumMatrixCols()) *
FORMAT * DATAPOINT * datapoints datapoint * int GetDataPoint() *
RESPECTCASE * int respectingCase * int IsRespectCase() *
MISSING * char missing * char GetMissingSymbol() *
SEPARATOR * char gap * char GetSeparatorSymbol() *
EQUATE * AssocList equates * char* GetEquateKey( int k ) *
char* GetEquateValue( int k ) *
int GetNumEquates() *
(NO)LABELS * int labels * int IsLabels() *
TRANSPOSE * int transposing * int IsTranspose() *
INTERLEAVE * int interleaving * int IsInterleave() *
(NO)TOKENS * int tokens * int IsTokens() *
ELIMINATE * int* eliminated * int IsEliminated( int origCharIndex ) *
int GetNumEliminated() *
MATRIX * DiscreteMatrix* matrix * char GetState( int i, int j, int k = 0 ) *
int GetInternalRepresentation( int i, int j, int k = 0 ) *
int GetNumStates( int i, int j ) *
int GetNumMatrixRows() *
int GetNumMatrixCols() *
int IsPolymorphic( int i, int j ) *
*/ /** * @enumeration * @enumitem standard [1] means standard datapoint * @enumitem fraglen [2] means fraglen datapoint * * For use with the variable datapoint. Default is 1 (standard datapoint). */ /** * @constructor * * Performs the following initializations: * *
Variable Initial Value *
alleles_fixed = false *
datapoint = AllelesBlock::standard *
gap = '/' *
id = "ALLELES" *
indivCount = NULL *
labels = false *
respectingCase = true *
tokens = true *
*/ AllelesBlock::AllelesBlock( TaxaBlock& tb, AssumptionsBlock& ab ) : CharactersBlock( tb, ab ) { // Thinking of changing any of these defaults? // If so, do it also in the Reset function. // alleles_fixed = false; datapoint = standard; gap = '/'; id = "ALLELES"; labels = false; respectingCase = true; tokens = true; indivCount = NULL; } /** * @destructor * * Frees memory allocated for the indivCount array. */ AllelesBlock::~AllelesBlock() { if( indivCount != NULL ) delete [] indivCount; } /** * @method AlleleCount [int:public] * @param allele [int] the allele in question * @param locus [int] the locus in question, in range [0..nloci) * @param pop [int] the population in question, in range [0..npops) (default value -1) * * Returns the number of genes that are identical to allele. * Assumes locus has not been excluded. If no population is * supplied, sums across all active populations. If population * is supplied, count will only be for that population. Assumes * that if population is specified, that population is not one * currently deleted by the user. * * Note: this is a relatively slow function because an allele count * is performed for each call. */ int AllelesBlock::AlleleCount( int allele, int locus, int pop /* = -1 */ ) { assert( locus >= 0 && locus < nchar ); assert( pop > -2 && pop < ntax ); assert( !IsExcluded(locus) ); bool do_one_pop = ( pop >= 0 ); assert( !( do_one_pop && IsDeleted(pop) ) ); int i, j, gene; int allele_count = 0; i = ( do_one_pop ? pop : 0 ); for( ; i < ntax; i++ ) { if( do_one_pop && i > pop ) break; if( IsDeleted(i) ) continue; int numIndivs = ( i > 0 ? indivCount[i] - indivCount[i-1] : indivCount[i] ); for( j = 0; j < numIndivs; j++ ) { gene = GetGene( i, j, locus, 0 ); if( gene < MAX_ALLELES ) { if( gene == allele ) allele_count++; } if( !IsHaploid(locus) ) { gene = GetGene( i, j, locus, 1 ); if( gene < MAX_ALLELES ) { if( gene == allele ) allele_count++; } } } } return allele_count; } /** * @method AlleleFrequency [double:public] * @param allele [int] the allele in question * @param locus [int] the locus in question, in range (0..nchar] * @param pop [int] the population in question, in range (0..ntax] (default is -1) * @throws XAllMissingData * * Returns observed frequency (expressed as a proportion) * of the allele specified at the specified locus in the specified * population. Assumes locus has not been excluded. If population * not specified, allele frequency over all populations except * those currently deleted will be returned. Assumes * that if population is specified, that population is not one * currently deleted by the user. Throws an XAllMissingData * exception if the total number of alleles of all types is zero. * * Note: this is a relatively slow function because an allele count * is performed for each call. */ double AllelesBlock::AlleleFrequency( int allele, int locus, int pop /* = -1 */ ) { assert( locus >= 0 && locus < nchar ); assert( pop > -2 && pop < ntax ); assert( !IsExcluded(locus) ); bool do_one_pop = ( pop >= 0 ); assert( !( do_one_pop && IsDeleted(pop) ) ); int i, j, gene; int total = 0; int allele_count = 0; i = ( do_one_pop ? pop : 0 ); for( i; i < ntax; i++ ) { if( do_one_pop && i > pop ) break; if( IsDeleted(i) ) continue; int numIndivs = ( i > 0 ? indivCount[i] - indivCount[i-1] : indivCount[i] ); for( j = 0; j < numIndivs; j++ ) { gene = GetGene( i, j, locus, 0 ); if( gene < MAX_ALLELES ) { total++; if( gene == allele ) allele_count++; } if( !IsHaploid(locus) ) { gene = GetGene( i, j, locus, 1 ); if( gene < MAX_ALLELES ) { total++; if( gene == allele ) allele_count++; } } } } if( total == 0 ) throw XAllMissingData(); double freq = (double)allele_count / (double)total; return freq; } /** * @method DebugShowMatrix [int:protected] * @param out [ostream&] output stream on which to print matrix * @param marginText [char*] nxsstring to print first on each line * * Provides a dump of the contents of the matrix variable. Useful for testing * whether data is being read as expected. The default for marginText is NULL, * which has the effect of placing the matrix output flush left. If each line * of output should be prefaced with a tab character, specify marginText = "\t". */ void AllelesBlock::DebugShowMatrix( std::ostream& out, char* marginText /* = NULL */ ) { int pop, indiv, locus; for( pop = 0; pop < ntax; pop++ ) { if( marginText != NULL ) out << marginText; int origPopIndex = GetOrigTaxonIndex(pop); // this function still needs to be written nxsstring currTaxonLabel = taxa.GetTaxonLabel( origPopIndex ); out << currTaxonLabel << ":" << endl; int last = indivCount[pop]; if( pop > 0 ) last -= indivCount[pop-1]; for( indiv = 0; indiv < last; indiv++ ) { if( marginText != NULL ) out << marginText; out << setw(5) << (indiv+1); for( locus = 0; locus < nchar; locus++ ) { int gene0 = GetGene( pop, indiv, locus, 0 ); out << " "; if( gene0 == 0xff ) out << "?"; else out << gene0; if( !IsHaploid(locus) ) { int gene1 = GetGene( pop, indiv, locus, 1 ); out << "/"; if( gene1 == 0xff ) out << "?"; else out << gene1; } } out << endl; } } } /** * @method FocalAlleleCount [void:public] * @param focal_allele [int] the allele to focus on (i.e., A) * @param locus [int] the locus in question, in range (0..nchar] * @param pop [int] the population in question, in range (0..ntax] * @param n_AA [int&] the place to store the count of AA genotypes * @param n_Aa [int&] the place to store the count of Aa genotypes * @param n_aa [int&] the place to store the count of aa genotypes * @throws XAllMissingData * * If the focal_allele is "A", then this function counts up the * number of "AA", "Aa", and "aa" genotypes and returns these counts * in n_AA, n_Aa, and n_aa, respectively. It is assumed that locus * is not excluded and pop is not deleted. It is also assumed that * the data for locus are diploid. * * Note: this is a relatively slow function because genotypes are counted * anew each time this function is called. */ void AllelesBlock::FocalAlleleCount( int focal_allele, int locus, int pop , int& n_AA, int& n_Aa, int& n_aa ) { assert( locus >= 0 && locus < nchar ); assert( pop >= 0 && pop < ntax ); assert( !IsDeleted(pop) ); assert( !IsExcluded(locus) ); assert( !IsHaploid(locus) ); int j, gene0, gene1; n_AA = n_Aa = n_aa = 0; int numIndivs = ( pop > 0 ? indivCount[pop] - indivCount[pop-1] : indivCount[pop] ); for( j = 0; j < numIndivs; j++ ) { gene0 = GetGene( pop, j, locus, 0 ); gene1 = GetGene( pop, j, locus, 1 ); if( gene0 == MAX_ALLELES || gene1 == MAX_ALLELES ) continue; if( gene0 == focal_allele && gene1 == focal_allele ) n_AA++; else if( gene0 == focal_allele && gene1 != focal_allele ) n_Aa++; else if( gene0 != focal_allele && gene1 == focal_allele ) n_Aa++; else n_aa++; } } /** * @method GenotypeCount [int:public] * @param allele1 [int] one of the two alleles in question * @param allele2 [int] the other of the alleles in question * @param locus [int] the locus in question, in range (0..nchar] * @param pop [int] the population in question, in range (0..ntax] (default is -1) * @throws XAllMissingData * * Returns the number of genotypes for which one gene is * the same as allele1 and the other is the same as allele2. * The order in which alleles are supplied does not matter * (i.e., the number of heterozygotes having genotype 1/2 * could be queried in either of the following ways: *

 *   GenotypeCount( 1, 2, pop, locus )
 *   GenotypeCount( 2, 1, pop, locus )
 * 
*

Assumes locus has not been excluded and data is * diploid (for haploid data use AlleleCount instead). * If population is not specified, returns count over all * populations not currently deleted, otherwise returns count for * specified population only. Assumes that if population is specified, * that population is not one currently deleted by the user. * Throws XAllMissingData if only missing data encountered * in the populations considered for the specified locus. * * Note: this is a relatively slow function because a genotype count * is performed for each call. */ int AllelesBlock::GenotypeCount( int allele1, int allele2, int locus, int pop /* = -1 */ ) { assert( locus >= 0 && locus < nchar ); assert( pop > -2 && pop < ntax ); assert( !IsExcluded(locus) ); assert( !IsHaploid(locus) ); bool do_one_pop = ( pop >= 0 ); assert( !( do_one_pop && IsDeleted(pop) ) ); int i, j, gene0, gene1; int genotype_count = 0; i = ( do_one_pop ? pop : 0 ); for( ; i < ntax; i++ ) { if( do_one_pop && i > pop ) break; if( IsDeleted(i) ) continue; int numIndivs = ( i > 0 ? indivCount[i] - indivCount[i-1] : indivCount[i] ); for( j = 0; j < numIndivs; j++ ) { gene0 = GetGene( i, j, locus, 0 ); gene1 = GetGene( i, j, locus, 1 ); if( gene0 < MAX_ALLELES && gene1 < MAX_ALLELES ) { if( gene0 == allele1 && gene1 == allele2 ) genotype_count++; else if( gene0 == allele2 && gene1 == allele1 ) genotype_count++; } } } return genotype_count; } /** * @method GetLocusLabel [int:public] * @param locus [int] the locus in the range [0..nloci) * * Returns the nxsstring label for the locus requested. */ nxsstring AllelesBlock::GetLocusLabel( int locus ) { assert( locus >= 0 ); assert( locus < nchar ); return charLabels[locus]; } /** * @method GetAlleleLabel [int:public] * @param locus [int] the locus in the range [0..nloci) * @param allele [int] the allele * * Returns the nxsstring label for the allele requested. */ nxsstring AllelesBlock::GetAlleleLabel( int locus, int allele ) { nxsstring allele_label = "no-name"; LabelListBag::const_iterator cib = charStates.find(locus); if( cib != charStates.end() ) { int ns = (*cib).second.size(); if( allele >= 0 && allele < ns ) allele_label = (*cib).second[allele]; } return allele_label; } /** * @method GetIndivCount [int:public] * @param pop [int] the population * * Returns value of indivCount[pop], which is the row number of * the first individual in population pop+1. */ int AllelesBlock::GetIndivCount( int pop ) { return indivCount[pop]; } /** * @method GetGene [int:public] * @param pop [int] the population * @param indiv [int] the individual (0-offset relative to first individual in population) * @param locus [int] the locus * @param gene [int] if 0, low-order word returned; high-order word returned otherwise * * Gets the low-order 2-byte word (if last parameter is 0) or * the high-order 2-byte word (if last parameter is 1) and * returns this as an int value. If the word returned is * exactly 0xff (= 255), this should be interpreted as missing * data. The macro MAX_ALLELES (defined in the allelesblock.h header file) * equals 0xff and can thus be used to test the return value. */ int AllelesBlock::GetGene( int pop, int indiv, int locus, int gene ) { //typedef long LONG; //typedef unsigned long DWORD; //typedef unsigned short WORD; //#define LOWORD(l) ((WORD)(l)) //#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF)) //int szWORD = sizeof(unsigned short); //int szDWORD = sizeof(unsigned long); //int szLONG = sizeof(long); //int sz_int = sizeof(int); //cerr << szWORD << "," << szDWORD << "," << szLONG << "," << sz_int << endl; int gene_val; int row = indiv + ( pop > 0 ? indivCount[pop-1] : 0 ); assert( !matrix->IsGap( row, locus ) ); if( matrix->IsMissing( row, locus ) ) gene_val = 0xff; else { if( gene == 0 ) gene_val = (unsigned short)( matrix->GetState( row, locus ) ); else gene_val = (unsigned short)( ( (unsigned long)( matrix->GetState( row, locus ) ) >> 16 ) & 0xFFFF ); } return gene_val; } /** * @method GetNumHaploid [int:public] * * Returns number of items in haploid vector. Number returned does * take account of eliminated loci (i.e., eliminated haploid loci are * not included in the tally) but not excluded ones. */ int AllelesBlock::GetNumHaploid() { if( haploid.empty() ) return 0; if( GetNumEliminated() == 0 ) return haploid.size(); // Some loci have been eliminated, so must check each // one listed in haploid vector to make sure it was not // eliminated // int n = 0; IntSet::const_iterator i = haploid.begin(); for( ; i != haploid.end(); ++i ) { int origIndex = (*i); if( IsEliminated(origIndex) ) continue; n++; } return n; } /** * @method HandleAllele [int:protected] * @param token [NexusToken&] the token used to read from in * @param j [int] the locus index, in range [0..nchar) * @throws XNexus * * Called from HandleNextGenotype to read in the next state when 'tokens' * is in effect. * If a LOCUSALLELELABELS or ALLELELABELS command was included in the ALLELES * block, HandleTokenState looks up the token in charStates to make * sure it is a valid state, then returns the allele's value (0, 1, 2, ...). * If no list of valid allelic states was prespecified, HandleTokenState has * no way to check the validity of the allele and simply adds it to charStates, * returning the allele's value (0, 1, 2, ...). * Note: HandleTokenState does NOT handle adding the allele's value to the * matrix. Save the return value, let's call it x, and use the following * command to add it to matrix: matrix->AddState( i, j, x ). */ int AllelesBlock::HandleAllele( NexusToken& token, int j ) { int k = 0; // First check to see if token equals the missing data symbol. // If so, return 0xFF to indicate that missing data was specified. // if( token.GetTokenLength() == 1 && token.GetToken()[0] == missing ) return 0xff; // If alleles were prespecified in ALLELELABELS or LOCUSALLELELABELS command, // check the current token against the list of valid allele labels // If alleles were not prespecified, so go ahead and add current token to the // list of valid alleles for locus j, obtaining the allele's integer designation // in the process to return to the calling function. // // Check to see if any alleles are listed for locus j in charStates // if( charStates.find(j) == charStates.end() ) { if( alleles_fixed ) { errormsg = "No alleles were defined for character "; errormsg += ( 1 + GetOrigCharIndex(j) ); throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else { charStates[j].push_back( token.GetToken() ); return 0; // first allele in the list } } // Some alleles have already been added to the list of alleles stored in // charStates for locus j. Check to see if token is one of these. // LabelListBag::const_iterator bagIter = charStates.find(j); int nAlleles = (*bagIter).second.size(); LabelList::const_iterator ci_begin = (*bagIter).second.begin(); LabelList::const_iterator ci_end = (*bagIter).second.end(); nxsstring t = token.GetToken( respectingCase ); LabelList::const_iterator cit; if( respectingCase ) cit = find( ci_begin, ci_end, t ); else cit = find_if( ci_begin, ci_end, bind2nd( stri_equal(), t ) ); if( cit == ci_end ) { if( alleles_fixed ) { errormsg = "Allele "; errormsg += t; errormsg += " not defined for locus "; errormsg += ( 1 + GetOrigCharIndex(j) ); throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else { charStates[j].push_back( token.GetToken() ); return nAlleles; } } // ok, the allele has been identified, so return the alleles's internal // representation. That is, if the list of allele labels was // "fast medium slow" and "slow" was specified in the data file, // state saved in matrix would be 2 (it would be 1 if "medium" were // specified in the data file, and 0 if "fast" were specified in the // data file). k = ( cit - ci_begin ); return k; } /** * @method HandleFormat [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when FORMAT command needs to be parsed from within the * DIMENSIONS block. Deals with everything after the token FORMAT * up to and including the semicolon that terminates the FORMAT * command. */ void AllelesBlock::HandleFormat( NexusToken& token ) { bool standardDataTypeAssumed = false; bool ignoreCaseAssumed = false; for(;;) { token.GetNextToken(); if( token.Equals("DATAPOINT") ) { // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after keyword DATAPOINT but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be one of the following: STANDARD, FRAGLEN token.GetNextToken(); if( token.Equals("STANDARD") ) datapoint = standard; else if( token.Equals("FRAGLEN") ) datapoint = fraglen; else { errormsg = token.GetToken(); errormsg += " is not a valid DATAPOINT within a "; errormsg += id; errormsg += " block"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( standardDataTypeAssumed && datapoint != standard ) { errormsg = "DATAPOINT must be specified first in FORMAT command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( datapoint == fraglen ) tokens = true; } else if( token.Equals("RESPECTCASE") ) { if( ignoreCaseAssumed ) { errormsg = "RESPECTCASE must be specified before MISSING and SEPARATOR in FORMAT command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } standardDataTypeAssumed = true; respectingCase = true; } else if( token.Equals("MISSING") ) { // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after keyword MISSING but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the missing data symbol (single character) token.GetNextToken(); if( token.GetTokenLength() != 1 ) { errormsg = "MISSING symbol should be a single character, but "; errormsg += token.GetToken(); errormsg += " was specified"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else if( token.IsPunctuationToken() && !token.IsPlusMinusToken() ) { errormsg = "MISSING symbol specified cannot be a punctuation token ("; errormsg += token.GetToken(); errormsg += " was specified)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else if( token.IsWhitespaceToken() ) { errormsg = "MISSING symbol specified cannot be a whitespace character ("; errormsg += token.GetToken(); errormsg += " was specified)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } missing = token.GetToken()[0]; ignoreCaseAssumed = true; standardDataTypeAssumed = true; } else if( token.Equals("NOSEPARATOR") ) { gap = '\0'; } else if( token.Equals("SEPARATOR") ) { // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after keyword SEPARATOR but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the separator symbol (single character) token.GetNextToken(); if( token.GetTokenLength() != 1 ) { errormsg = "SEPARATOR symbol should be a single character, but "; errormsg += token.GetToken(); errormsg += " was specified"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else if( token.IsPunctuationToken() && !token.IsPlusMinusToken() && !token.Equals("/") ) { errormsg = "SEPARATOR symbol specified cannot be a punctuation token ("; errormsg += token.GetToken(); errormsg += " was specified)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else if( token.IsWhitespaceToken() ) { errormsg = "SEPARATOR symbol specified cannot be a whitespace character ("; errormsg += token.GetToken(); errormsg += " was specified)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } gap = token.GetToken()[0]; ignoreCaseAssumed = true; standardDataTypeAssumed = true; } else if( token.Equals("EQUATE") ) { // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after keyword EQUATE but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be a double-quote character token.GetNextToken(); if( !token.Equals("\"") ) { errormsg = "Expecting '\"' after keyword EQUATE but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // loop until second double-quote character is encountered for(;;) { token.GetNextToken(); if( token.Equals("\"") ) break; // if token is not a double-quote character, then it must be // an equate token (i.e., the token to be replaced in // the data matrix) // check for bad choice of equate symbol if( token.GetTokenLength() == 1 ) { nxsstring t = token.GetToken(); char ch = t[0]; bool badEquateSymbol = false; // the character '^' cannot be an equate symbol if( ch == '^' ) badEquateSymbol = true; // equate symbols cannot be punctuation (except for + and -) if( token.IsPunctuationToken() && !token.IsPlusMinusToken() ) badEquateSymbol = true; // equate symbols cannot be same as missing or separator if( ch == missing || ch == gap ) badEquateSymbol = true; if( badEquateSymbol ) { errormsg = "EQUATE symbol specified ("; errormsg += token.GetToken(); errormsg += ") is not valid; must not be same as missing, \nseparator, or any of the following: ()[]{}/\\,;:=*'\"`<>^"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } nxsstring k = token.GetToken(); // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' in EQUATE definition but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be the token to be substituted in for the equate symbol token.SetLabileFlagBit( NexusToken::parentheticalToken ); token.SetLabileFlagBit( NexusToken::curlyBracketedToken ); token.GetNextToken(); nxsstring v = token.GetToken(); // add the new equate association to the equates list equates[k] = v; } standardDataTypeAssumed = true; } else if( token.Equals("LABELS") ) { labels = true; standardDataTypeAssumed = true; } else if( token.Equals("NOLABELS") ) { labels = false; standardDataTypeAssumed = true; } else if( token.Equals("TRANSPOSE") ) { transposing = true; standardDataTypeAssumed = true; } else if( token.Equals("INTERLEAVE") ) { interleaving = true; standardDataTypeAssumed = true; } else if( token.Equals("TOKENS") ) { tokens = true; standardDataTypeAssumed = true; } else if( token.Equals("NOTOKENS") ) { tokens = false; standardDataTypeAssumed = true; } else if( token.Equals(";") ) { break; } else { errormsg = "Unrecognized keyword ("; errormsg += token.GetToken(); errormsg += ") encountered in FORMAT command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } /** * @method HandleHaploid [void:protected] * @param token [NexusToken&] the token used to read from in * * Called when HAPLOID command needs to be parsed from within the * ALLELES block. Deals with everything after the token HAPLOID * up to and including the semicolon that terminates the HAPLOID * command. Any character numbers or ranges of character numbers * specified are stored in the IntSet haploid, which is empty * until a HAPLOID command is encountered, if ever. Note that * like all sets the character ranges are adjusted so that their * offset is 0. For example, given "haploid 4-7;" in the data * file, the haploid list would contain the values 3, 4, 5, * and 6 (not 4, 5, 6, and 7). */ void AllelesBlock::HandleHaploid( NexusToken& token ) { // construct an object of type SetReader, then call its run function // to store the set in the haploid set // SetReader( token, ncharTotal, haploid, *this, SetReader::charset ).Run(); //OPEN ISSUE: perhaps it is better to just create a local // haploid set, fill it using the above line, then translate // that to a bool array for use from this point on } /** * @method HandleMatrix [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when MATRIX command needs to be parsed from within the * ALLELES block. Deals with everything after the token MATRIX * up to and including the semicolon that terminates the MATRIX * command. */ void AllelesBlock::HandleMatrix( NexusToken& token ) { int i, j, k; if( transposing ) { errormsg = "Sorry, transposed ALLELES block matrix not supported at this time"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( datapoint == fraglen ) { errormsg = "Sorry, fraglen datapoint in ALLELES block not supported at this time"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( ntaxTotal == 0 ) ntaxTotal = taxa.GetNumTaxonLabels(); if( ntax == 0 ) { errormsg = "Cannot create ALLELES block matrix: there are 0 populations specified"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( nchar == 0 ) { errormsg = "Cannot create ALLELES block matrix: there are 0 loci specified"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // create a matrix to begin with, we will need to expand it as we go // since there will almost always be more than one individual per population if( matrix != NULL ) delete matrix; matrix = new DiscreteMatrix( ntax, nchar ); // Allocate memory for (and initialize) the arrays activeTaxon and activeChar. // All loci (i.e., "characters") and all populations (i.e., "taxa") are initially active. // activeTaxon = new bool[ntax]; for( i = 0; i < ntax; i++ ) activeTaxon[i] = true; activeChar = new bool[nchar]; for( j = 0; j < nchar; j++ ) activeChar[j] = true; // Allocate memory for (and initialize) the array indivCount // indivCount = new int[ntax]; for( i = 0; i < ntax; i++ ) indivCount[i] = 0; // The value of ncharTotal is normally identical to the value of nchar specified // in the ALLELES block DIMENSIONS command. If an ELIMINATE command is // processed, however, nchar < ncharTotal. Note that the ELIMINATE command // will have already been read by now, and the ELIMINATEd locus numbers // will be stored in the array eliminated. // if( charPos != NULL ) delete [] charPos; charPos = new int[ncharTotal]; k = 0; for( j = 0; j < ncharTotal; j++ ) { if( IsEliminated(j) ) charPos[j] = -1; else charPos[j] = k++; } // The value of ntaxTotal equals the number of taxa specified in the // TAXA block, whereas ntax equals the number of taxa specified in // the DIMENSIONS command of the ALLELES block. These two numbers // will be identical unless some taxa have been left out of the MATRIX // command of the ALLELES block, in which case ntax < ntaxTotal. We // haven't yet read the MATRIX however, so for now we just initialize // the taxonPos array to -1. // if( taxonPos != NULL ) delete [] taxonPos; taxonPos = new int[ntaxTotal]; for( i = 0; i < ntaxTotal; i++ ) taxonPos[i] = -1; // HandleTransposedMatrix and HandleStdMatrix both take care of // reading the semicolon that terminates the MATRIX command // if( transposing ) HandleTransposedMatrix( token ); else HandleStdMatrix( token ); // If we've gotten this far, presumably it is safe to // tell the ASSUMPTIONS block that were ready to take on // the responsibility of being the current character-containing // block (to be consulted if characters are excluded or included) assumptionsBlock.SetCallback(this); } /** * @method HandleNextGenotype [bool:protected] * @param token [NexusToken&] the token used to read from in * @param i [int] the index of the row of the data matrix where this genotype should be stored * @param locus [int] the (original) locus index, in range [0..ncharTotal) * @param stopOnNewline [bool] if interleaving, stop on encountering newline character (true by default) * @throws XNexus * * Called from HandleStdMatrix or HandleTransposedMatrix function * to read in the next genotype. Always returns true except in the * following cases, in which case it returns false: *

    *
  • if in interleave mode and a newline character is encountered * before any characters of the next token are read (unless * stopOnNewline is false) *
  • if a comma, colon or semicolon is encountered before any * characters of the next token are read *
* The row index (i) is the absolute row number into the matrix. The row * number into the matrix is indivCount[i-1] + j (if i > 0), where j is the * position of an individual relative to the first individual in population * i (j = 0, 1, ...). */ bool AllelesBlock::HandleNextGenotype( NexusToken& token, int i, int locus , bool stopOnNewline /* = true */ ) { int x, y; // It is possible that locus currChar has been ELIMINATEd, in // which case we need to go through the motions of reading in the // data but we don't store it. The variable k will be our guide // when it comes time to store data since k will be -1 for // characters that were ELIMINATEd and will be set to the correct // row for characters that have not been ELIMINATEd. // int k = charPos[locus]; // This should be the genotype for population i, individual j, and locus k // Note that if this is the first individual (i.e., j == 0) and the matrix // is interleaved, we need to ignore leading newline characters since // the population label is normally placed on the line above the data // for the first individual. // token.SetSpecialPunctuationCharacter( gap ); if( gap != '\0' ) token.SetLabileFlagBit( NexusToken::useSpecialPunctuation ); if( interleaving && stopOnNewline ) token.SetLabileFlagBit( NexusToken::newlineIsToken ); if( !tokens ) token.SetLabileFlagBit( NexusToken::singleCharacterToken ); token.SetLabileFlagBit( NexusToken::parentheticalToken ); token.SetLabileFlagBit( NexusToken::curlyBracketedToken ); token.GetNextToken(); if( interleaving && token.AtEOL() ) return false; if( token.Equals(",") || token.Equals(";") || token.Equals(":") ) return false; // Allele should not be a punctuation character // if( token.IsPunctuationToken() ) { errormsg = "Punctuation character ("; errormsg += token.GetToken(); errormsg += ") found where allele name expected"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // Make sure we didn't run out of file // if( token.AtEOF() ) { errormsg = "Unexpected end of file encountered"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // If we didn't run out of file, I see no reason why we should // have a zero-length token on our hands assert( token.GetTokenLength() > 0 ); // We've read in the allele now, so if this locus has been // ELIMINATEd, we want to skip the part that actually saves it // if( k >= 0 ) { // see if any equate macros apply // nxsstring skey = nxsstring( token.GetToken( respectingCase ) ); AssocList::iterator p = equates.find( skey ); if( p != equates.end() ) { nxsstring sval = (*p).second; token.ReplaceToken( sval.c_str() ); } // token should be in one of the following forms: "{" "a" "bb" // int polymorphism = token.Equals("("); int uncertainty = token.Equals("{"); if( !uncertainty && !polymorphism ) { x = HandleAllele( token, k ); if( x > MAX_ALLELES ) { errormsg = "Number of alleles for locus "; errormsg += (k+1); errormsg += " has exceeded limit of "; errormsg += MAX_ALLELES; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } matrix->SetState( i, k, x ); } else { // borrow material from CharactersBlock::HandleNextState if and when // ambiguity and polymorphism are implemented for the ALLELES block // errormsg = "Ambiguity and polymorphism not yet supported in ALLELES block"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } // Bail out here if data is haploid // if( IsHaploid(locus) ) return true; // Now read in the separator character, if one was supplied // if( gap != '\0' ) { token.SetSpecialPunctuationCharacter( gap ); token.SetLabileFlagBit( NexusToken::useSpecialPunctuation ); token.SetLabileFlagBit( NexusToken::singleCharacterToken ); if( interleaving ) token.SetLabileFlagBit( NexusToken::newlineIsToken ); token.GetNextToken(); if( interleaving && token.AtEOL() ) { errormsg = "Unexpected end of line encountered (within a genotype specification)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( token.Equals(",") ) { errormsg = "Unexpected comma encountered (within a genotype specification)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } // same song, second verse... // if( gap != '\0' ) { token.SetSpecialPunctuationCharacter( gap ); token.SetLabileFlagBit( NexusToken::useSpecialPunctuation ); } if( interleaving ) token.SetLabileFlagBit( NexusToken::newlineIsToken ); if( !tokens ) token.SetLabileFlagBit( NexusToken::singleCharacterToken ); token.SetLabileFlagBit( NexusToken::parentheticalToken ); token.SetLabileFlagBit( NexusToken::curlyBracketedToken ); token.GetNextToken(); if( interleaving && token.AtEOL() ) { errormsg = "Unexpected end of line encountered (reading second half of genotype specification)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( token.Equals(",") ) { errormsg = "Unexpected comma encountered (reading second half of genotype specification)"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // Allele should not be a punctuation character // if( token.IsPunctuationToken() ) { errormsg = "Punctuation character ("; errormsg += token.GetToken(); errormsg += ") found where allele name expected"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // Make sure we didn't run out of file // if( token.AtEOF() ) { errormsg = "Unexpected end of file encountered"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // If we didn't run out of file, I see no reason why we should // have a zero-length token on our hands assert( token.GetTokenLength() > 0 ); // We've read in the allele now, so if this locus has been // ELIMINATEd, we want to skip the part that actually saves it // if( k >= 0 ) { // see if any equate macros apply // nxsstring skey = nxsstring( token.GetToken( respectingCase ) ); AssocList::iterator p = equates.find( skey ); if( p != equates.end() ) { nxsstring sval = (*p).second; token.ReplaceToken( sval.c_str() ); } // token should be in one of the following forms: "{" "a" "bb" // int polymorphism = token.Equals("("); int uncertainty = token.Equals("{"); if( !uncertainty && !polymorphism ) { y = HandleAllele( token, k ); if( y > MAX_ALLELES ) { errormsg = "Number of alleles for locus "; errormsg += (k+1); errormsg += " has exceeded limit of "; errormsg += MAX_ALLELES; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } int value = SplitInt( x, y ); matrix->SetState( i, k, value ); } else { // borrow material from CharactersBlock::HandleNextState if and when // ambiguity and polymorphism are implemented for the ALLELES block // errormsg = "Ambiguity and polymorphism not yet supported in ALLELES block"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } return true; } /** * @method HandleStdMatrix [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called from HandleMatrix function to read in a standard * (i.e., non-transposed) matrix. Interleaving, if applicable, * is dealt with herein. */ void AllelesBlock::HandleStdMatrix( NexusToken& token ) { int i, j, currChar; int firstChar = 0; int lastChar = ncharTotal; int lastCharInSet = ncharTotal; int nextFirst; int page = 0; int lastIndiv = 0; int rowsInMatrix = ntax; int rowsToAdd = 25; bool comma = false; bool colon = false; bool semicolon = false; bool skipLocusLoop = false; for(;;) { j = 0; //******************************************************* //******** Beginning of loop through populations ******** //******************************************************* for( i = 0; i < ntax; i++ ) { // This should be the population label // token.GetNextToken(); errormsg = " Population "; errormsg += token.GetToken(); nexus->OutputComment( errormsg ); #if 1 if( page == 0 && newtaxa ) { // This section: // - on first (or only) interleave page // - no previous TAXA block // check for duplicate taxon names // if( taxa.IsAlreadyDefined( token.GetToken() ) ) { errormsg = "Data for this population ("; errormsg += token.GetToken(); errormsg += ") has already been saved"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // Labels provided and not already stored in the taxa block with // the TAXLABELS command; taxa.Reset() and taxa.SetNTax() // were already called, however, when the NTAX subcommand was // processed. // taxa.AddTaxonLabel( token.GetToken() ); // order of occurrence in TAXA block same as row in matrix // taxonPos[i] = i; } else { // This section: // - TAXA block provided or has been created already // - may be on any (interleave) page // Cannot assume taxon in same position in // taxa block. Set up taxonPos array so that we can look up // the correct row in matrix for any given taxon // int positionInTaxaBlock; try { positionInTaxaBlock = taxa.FindTaxon( token.GetToken() ); } catch( std::out_of_range ) { errormsg = "Could not find population named "; errormsg += token.GetToken(); errormsg += " among stored population labels"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( page == 0 ) { // make sure user has not duplicated data for a single taxon // if( taxonPos[positionInTaxaBlock] != -1 ) { errormsg = "Data for this population ("; errormsg += token.GetToken(); errormsg += ") has already been saved"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // make sure user has kept same relative ordering of taxa in both the TAXA // block and the CHARACTERS block // if( positionInTaxaBlock >= i ) { errormsg = "Relative order of population must be the same in both the TAXA and CHARACTERS blocks"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } taxonPos[i] = positionInTaxaBlock; // was --> taxonPos[positionInTaxaBlock] = i; } else { // make sure user has kept the ordering of taxa the same from // one interleave page to the next // if( taxonPos[positionInTaxaBlock] != i ) { errormsg = "Ordering of population must be identical to that in first interleave page"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } #else // If no TAXA block previously specified (i.e., newtaxa = true) // and we're on page 0, need to add population names as we // encounter them to the TAXA block // if( page == 0 && newtaxa ) { // check for duplicate population names // if( taxa.IsAlreadyDefined( token.GetToken() ) ) { errormsg = "Data for this population ("; errormsg += token.GetToken(); errormsg += ") has already been saved"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // population labels not already stored in the taxa block with // the TAXLABELS command; taxa.Reset() and taxa.SetNTax() // were already called, however, when the NTAX subcommand was // processed. // taxa.AddTaxonLabel( token.GetToken() ); // order of occurrence in TAXA block same as row in matrix // taxonPos[i] = i; } // we go here if either (1) a TAXA block was previously specified // or (2) we have already built up a TAXA block because we are // beyond the first page of an interleaved file. In either of // these cases, we must check to see whether the populations // are encountered in the same order as specified in the TAXA block. else { int positionInTaxaBlock; try { positionInTaxaBlock = taxa.FindTaxon( token.GetToken() ); } catch( out_of_range ) { errormsg = "Could not find taxon named "; errormsg += token.GetToken(); errormsg += " among stored taxon labels"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( positionInTaxaBlock != i ) { if( page == 0 ) { // user has either duplicated data for a single taxon // or the order of taxa is not the same as in the // predefined TAXA block errormsg = "This taxon ("; errormsg += token.GetToken(); errormsg += ") either (1) has already been saved"; errormsg += "\nor (2) is out of order"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } else { // user has not kept the ordering of taxa the same from // one interleave page to the next if( positionInTaxaBlock != i ) { errormsg = "Ordering of taxa must be identical to that in first interleave page"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } taxonPos[i] = positionInTaxaBlock; // was --> taxonPos[positionInTaxaBlock] = i; } #endif // read in the colon following the population label token.GetNextToken(); if( !token.Equals(":") ) { errormsg = "Expecting ':' after population label but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } //******************************************************* //******** Beginning of loop through individuals ******** //******************************************************* for(;;) { // Read in individual label if necessary // These are not stored, so all we need to do is call // NexusToken::GetNextToken // if( labels ) { token.GetNextToken(); if( token.Equals(":") ) { colon = true; skipLocusLoop = true; } else if( token.Equals(",") ) { comma = true; break; } else if( token.Equals(";") ) { semicolon = true; break; } } // Increase number of rows in data matrix, if necessary // assert( lastIndiv <= rowsInMatrix ); if( page == 0 && lastIndiv == rowsInMatrix ) { matrix->AddRows( rowsToAdd ); rowsInMatrix += rowsToAdd; } //************************************************ //******** Beginning of loop through loci ******** //************************************************ for( currChar = firstChar; currChar < lastChar; currChar++ ) { if( skipLocusLoop ) break; // HandleNextState will return false only if a newline OR comma // character is encountered before locus k is processed. // If a comma is encountered, it means it is time to break from // the loop over individuals; if a newline is encountered, we // either ignore it (if not interleave format) or, if reading // an interleaved matrix, break out of the loop over loci by // setting lastChar equal to currChar. // The base class version of HandleNextState is overridden // in AllelesBlock to read in and store and entire genotype // (e.g., "slow/fast") // bool stopOnNewline = ( currChar > firstChar ); bool ok = HandleNextGenotype( token, j, currChar, stopOnNewline ); comma = token.Equals(","); semicolon = token.Equals(";"); colon = token.Equals(":"); if( !ok && interleaving ) { if( !comma && !colon && lastCharInSet < ncharTotal && charPos[currChar] != lastCharInSet ) { errormsg = "Each line within an interleave page must comprise the same number of loci"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // currChar should be firstChar in next go around // nextFirst = currChar; // set lastChar to currChar so that we can check to make sure the // remaining lines in this interleave page end at the same place // lastCharInSet = currChar; break; } else if( !ok && ( comma || colon || semicolon ) ) break; } // innermost loop (over loci) skipLocusLoop = false; // Handle here the case of a repeat count. // Note: if interleaving, colon will have already been eaten // and the boolean variable "color" will reflect this. If // not interleaving, colon will not be seen until we begin // reading the data for the next individual (thus, decrement // lastIndiv before proceeding since it has already been // incremented. // int count = 1; if( ( colon || comma || semicolon ) && !interleaving ) { j--; if( page == 0 ) lastIndiv--; } if( colon ) { // Get the repeat count itself // token.SetLabileFlagBit( NexusToken::newlineIsToken ); token.GetNextToken(); count = atoi( token.GetToken().c_str() ); if( count < 1 ) { errormsg = "Could not convert specified repeat count "; if( token.GetTokenLength() > 0 ) { errormsg += "("; errormsg += token.GetToken(); errormsg += ")"; } errormsg +=" to a positive integer"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // Instruct matrix to duplicate last row count times. // Matrix itself handles the allocation of additional // rows (if necessary) to accommodate the duplication // int extraRows; if( interleaving ) extraRows = matrix->DuplicateRow( j, count, firstChar, lastCharInSet-1 ); else extraRows = matrix->DuplicateRow( j, count ); if( extraRows > 0 ) { if( page == 0 ) rowsInMatrix += extraRows; else { errormsg = "Repeat counts specify more individuals in later interleave pages than in first"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } j += count; if( page == 0 ) lastIndiv += count; if( comma || semicolon ) break; } // inner loop over individuals // Update rowsToAdd to more accurately reflect the number of // rows needing to be added for each new population. For example, // if population samples are on the order of 200 individuals, // it is more efficient to add 200 new rows each time matrix is // resized rather than the default of 25. // if( page == 0 ) { rowsToAdd = (lastIndiv+1) / (i+1); if( rowsToAdd < 25 ) rowsToAdd = 25; } if( page == 0 ) { // indivCount holds the _first_ row in matrix where the // data for individuals in the _next_ population (i.e., // population i+1) are kept. // indivCount[i] = lastIndiv; } } // middle loop (over populations) // if semicolon is true, then we've just finished reading the last // interleave page and thus should break from the outer loop // if( semicolon ) break; firstChar = nextFirst; lastChar = ncharTotal; lastCharInSet = ncharTotal; page++; } // outer loop (over interleave pages) } /** * @method HandleTransposedMatrix [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called from HandleMatrix function to read in a transposed * matrix. Interleaving, if applicable, is dealt with herein. */ void AllelesBlock::HandleTransposedMatrix( NexusToken& /* token */ ) { // obviously, not yet written } /** * @method IsHaploid [bool:public] * @param i [int] the locus in question (in range [0..nchar)) * * Returns true if character indexed by i was declared to be * haploid, false otherwise. Returns false immediately if "haploid" * list is empty. */ bool AllelesBlock::IsHaploid( int i ) { if( haploid.empty() ) return false; int origLocusIndex =GetOrigCharIndex(i); IntSet::const_iterator found = haploid.find(origLocusIndex); if( found == haploid.end() ) return false; return true; } /** * @method IsHaploidOrig [bool:public] * @param origLocusIndex [int] the locus in question (in range [0..ncharTotal)) * * Returns true if character number origLocusIndex was declared to be * haploid, false otherwise. Returns false immediately if "haploid" * list is empty. */ bool AllelesBlock::IsHaploidOrig( int origLocusIndex ) { if( haploid.empty() ) return false; IntSet::const_iterator found = haploid.find(origLocusIndex); if( found == haploid.end() ) return false; return true; } /** * @method MostCommonAllele [int:public] * @param locus [int] the locus in question in range [0..nchar) * @throws XAllMissingData * * Returns internal representation of allele that is most * common (across all active populations) for the specified locus. * Assumes locus has not been excluded. If no population is * supplied, considers all active populations. If population * is supplied, the allele returned will be the one most common * for that population only. Assumes that if population is * specified, that population is not one currently deleted by * the user. Throws XAllMissingData exception if only missing * data are encountered. * * Note: this is a relatively slow function because an allele count * is performed for each call. */ int AllelesBlock::MostCommonAllele( int locus, int pop /* = -1 */ ) { assert( locus >= 0 && locus < nchar ); assert( pop > -2 && pop < ntax ); assert( !IsExcluded(locus) ); // Make sure calling function doesn't expect us to find the // MostCommonAllele for a specific population that has been // deleted by the user. // bool do_one_pop = ( pop >= 0 ); assert( !( do_one_pop && IsDeleted(pop) ) ); int numAlleles = matrix->GetObsNumStates(locus); int counts[MAX_ALLELES]; int i, j, gene; for( i = 0; i < MAX_ALLELES; i++ ) counts[i] = 0; // Fill the counts array; counts[j] will hold the number of genes // corresponding to allele j at the focal locus over all active // populations (or just in population pop if pop is not -1) // i = ( do_one_pop ? pop : 0 ); for( ; i < ntax; i++ ) { if( do_one_pop && i > pop ) break; if( IsDeleted(i) ) continue; int numIndivs = ( i > 0 ? indivCount[i] - indivCount[i-1] : indivCount[i] ); for( j = 0; j < numIndivs; j++ ) { gene = GetGene( i, j, locus, 0 ); assert( gene == MAX_ALLELES || gene < numAlleles ); if( gene < MAX_ALLELES ) counts[gene]++; if( !IsHaploid(locus) ) { gene = GetGene( i, j, locus, 1 ); assert( gene == MAX_ALLELES || gene < numAlleles ); if( gene < MAX_ALLELES ) counts[gene]++; } } } int max = 0; int which = 0; bool bad = true; for( i = 0; i < numAlleles; i++ ) { if( counts[i] > 0 ) bad = false; if( counts[i] <= max ) continue; which = i; max = counts[i]; } if(bad) throw XAllMissingData(); return which; } /** * @method NumberOfAlleles [int:public] * @param locus [int] the locus in question in range [0..ntax) * * Returns the number of alleles observed for locus. If no population is * supplied, sums across all active populations. If population * is supplied, count will only be for that population. * Assumes locus has not been excluded. Assumes that if population is * specified, that population is not one currently deleted by * the user. * * Note: this is a relatively slow function because an enumeration * is performed for each call. */ int AllelesBlock::NumberOfAlleles( int locus, int pop /* = -1 */ ) { assert( locus >= 0 && locus < nchar ); assert( pop > -2 && pop < ntax ); assert( !IsExcluded(locus) ); bool do_one_pop = ( pop >= 0 ); assert( !( do_one_pop && IsDeleted(pop) ) ); int i, j, gene; // A std::set is used here to simplify tallying the number of // distinct alleles found (i.e., no matter how many times we // insert allele 1 into the set, it will end up being represented // by only one entry in the set at the end). // std::set alleleSet; i = ( do_one_pop ? pop : 0 ); for( ; i < ntax; i++ ) { if( do_one_pop && i > pop ) break; if( IsDeleted(i) ) continue; int numIndivs = ( i > 0 ? indivCount[i] - indivCount[i-1] : indivCount[i] ); for( j = 0; j < numIndivs; j++ ) { gene = GetGene( i, j, locus, 0 ); if( gene < MAX_ALLELES ) alleleSet.insert(gene); if( !IsHaploid(locus) ) { gene = GetGene( i, j, locus, 1 ); if( gene < MAX_ALLELES ) alleleSet.insert(gene); } } } return alleleSet.size(); // old way // LabelListBag::const_iterator i = charStates.find(locus); // return (*i).second.size(); } /** * @method Read [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * This function provides the ability to read everything following * the block name (which is read by the Nexus object) to the end or * endblock statement. Characters are read from the input stream * in. Overrides the pure virtual function in the base class. */ void AllelesBlock::Read( NexusToken& token ) { isEmpty = false; // this should be the semicolon after the block name // token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' after "; errormsg += id; errormsg += " block name, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } ntax = taxa.GetNumTaxonLabels(); for(;;) { token.GetNextToken(); if( token.Equals("DIMENSIONS") ) { HandleDimensions( token, "NEWPOPS", "NPOPS", "NLOCI" ); } else if( token.Equals("FORMAT") ) { HandleFormat( token ); } else if( token.Equals("ELIMINATE") ) { HandleEliminate( token ); } else if( token.Equals("HAPLOID") ) { HandleHaploid( token ); } else if( token.Equals("TAXLABELS") ) { HandleTaxlabels( token ); } else if( token.Equals("LOCUSALLELELABELS") ) { HandleCharstatelabels( token ); } else if( token.Equals("LOCUSLABELS") ) { HandleCharlabels( token ); } else if( token.Equals("ALLELELABELS") ) { HandleStatelabels( token ); } else if( token.Equals("MATRIX") ) { HandleMatrix( token ); } else if( token.Equals("END") ) { HandleEndblock( token, "Locus" ); break; } else if( token.Equals("ENDBLOCK") ) { HandleEndblock( token, "Locus" ); break; } else { SkippingCommand( token.GetToken() ); do { token.GetNextToken(); } while( !token.AtEOF() && !token.Equals(";") ); if( token.AtEOF() ) { errormsg = "Unexpected end of file encountered"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } } /** * @method Report [void:public] * @param out [ostream&] the output stream to which to write the report * * This function outputs a brief report of the contents of this ALLELES block. * Overrides the pure virtual function in the base class. */ void AllelesBlock::Report( std::ostream& out ) { int i; out << endl; out << id << " block contains data for "; if( ntax == 1 ) out << " 1 population and "; else out << ntax << " populations "; out << "(" << indivCount[ntax-1] << " total individuals)"; if( nchar == 1 ) out << " and 1 locus"; else out << " and " << nchar << " loci"; out << endl; out.flush(); out << " Datapoint: "; switch( datapoint ) { case fraglen: out << "fraglen" << endl; break; default: out << "standard" << endl; } out.flush(); if( transposing && interleaving ) out << " Matrix transposed and interleaved" << endl; else if( transposing && !interleaving ) out << " Matrix transposed but not interleaved" << endl; else if( !transposing && interleaving ) out << " Matrix interleaved but not transposed" << endl; else out << " Matrix neither transposed nor interleaved" << endl; if( tokens ) out << " Multicharacter allele names allowed in data matrix" << endl; else out << " Allele names are expected to be single character symbols" << endl; if( labels ) out << " Labels for individuals provided" << endl; else out << " Labels for individuals not provided" << endl; if( respectingCase ) out << " Allele labels in matrix case-sensitive" << endl; else out << " Allele labels in matrix not case-sensitive" << endl; if( newtaxa ) out << " Population labels defined in matrix" << endl; else out << " Population labels defined in TAXA block" << endl; out << " Missing data symbol is " << missing << endl; out.flush(); if( haploid.empty() ) out << " All loci are diploid" << endl; else if( haploid.size() == 1 ) { out << " The following locus is haploid:" << endl; IntSet::const_iterator k = haploid.begin(); out << " " << ( (*k) + 1 ) << endl; } else { out << " The following loci are haploid:" << endl; out << " "; IntSet::const_iterator k; for( k = haploid.begin(); k != haploid.end(); k++ ) out << ( (*k) + 1 ) << " "; out << endl; } out.flush(); if( gap == ' ' ) out << " No separator character defined" << endl; else out << " Separator character is " << gap << endl; out.flush(); int numEquateMacros = equates.size(); if( numEquateMacros > 0 ) { out << " Equate macros in effect:" << endl; typedef AssocList::const_iterator CI; for( CI i = equates.begin(); i != equates.end(); ++i) { out << " " << (*i).first << " = " << (*i).second << endl; } } else out << " No equate macros have been defined" << endl; out.flush(); out << " Contents of the charLabels LabelList:" << endl; LabelList::const_iterator lli = charLabels.begin(); while( lli != charLabels.end() ) { out << "\t" << (*lli) << endl; ++lli; } out.flush(); out << " Contents of the charStates LabelListBag:" << endl; LabelListBag::const_iterator cib = charStates.begin(); while( cib != charStates.end() ) { out << "\t" << (*cib).first << ": "; LabelList::const_iterator lli = (*cib).second.begin(); while( lli != (*cib).second.end() ) { out << (*lli) << " "; ++lli; } out << endl; ++cib; } out.flush(); if( charLabels.size() > 0 ) { out << " Locus and allele labels:" << endl; for( int k = 0; k < nchar; k++ ) { if( charLabels[k].size() == 0 ) out << '\t' << ( 1 + GetOrigCharIndex(k) ) << '\t' << "(no label provided for this locus)" << endl; else out << '\t' << ( 1 + GetOrigCharIndex(k) ) << '\t' << charLabels[k] << endl; // output allele names if any are defined for this locus LabelListBag::const_iterator cib = charStates.find(k); if( cib != charStates.end() ) { int ns = (*cib).second.size(); for( int m = 0; m < ns; m++ ) { out << "\t\t" << (*cib).second[m] << endl; } } } } out.flush(); if( ncharTotal == nchar ) out << " No loci were eliminated" << endl; else { out << " The following loci were eliminated:" << endl; IntSet::const_iterator list_iter; for( list_iter = eliminated.begin(); list_iter != eliminated.end(); list_iter++ ) { out << " " << ((*list_iter)+1) << endl; } } out.flush(); out << " The following loci have been excluded:" << endl; int k; int nx = 0; for( k = 0; k < nchar; k++ ) { if( activeChar[k] ) continue; out << " " << (k+1) << endl; nx++; } if( nx == 0 ) out << " (no loci excluded)" << endl; out.flush(); out << " The following populations have been deleted:" << endl; nx = 0; for( k = 0; k < ntax; k++ ) { if( activeTaxon[k] ) continue; out << " " << (k+1) << endl; nx++; } if( nx == 0 ) out << " (no populations deleted)" << endl; out.flush(); if( alleles_fixed ) out << " Only alleles specified in ALLELELABELS command will be considered valid." << endl; else out << " All alleles encountered in matrix will be considered valid." << endl; out << " Data matrix:" << endl; DebugShowMatrix( out, " " ); out.flush(); out << endl; out << "Most common allele for each locus:" << endl; out << setw(20) << " "; out << setw(20) << "number of"; out << setw(20) << "dominant"; out << setw(20) << " "; out << endl; out << setw(20) << "locus"; out << setw(20) << "alleles"; out << setw(20) << "allele"; out << setw(20) << "frequency"; out << endl; out.setf( std::ios::fixed, std::ios::floatfield ); out.setf( std::ios::showpoint ); nxsstring s; for( i = 0; i < nchar; i++ ) { if( IsExcluded(i) ) continue; s = ""; s += i; s += " ("; s += charLabels[i]; s += ")"; out << setw(20) << s; int k = NumberOfAlleles(i); out << setw(20) << k; int j = MostCommonAllele(i); s = ""; s += j; LabelListBag::const_iterator cib = charStates.find(i); if( cib != charStates.end() ) { s += " ("; s += (*cib).second[j]; s += ")"; } out << setw(20) << s; double frq = AlleleFrequency( j, i ); out << setw(20) << setprecision(6) << frq; out << endl; } } /** * @method Reset [void:protected] * * Sets npops and nloci to 0 in preparation for reading a new ALLELES block. * Overrides the pure virtual function in the base class. Also performs * the initializations done in the constructor, as well as erasing the * vector haploid and freeing memory allocated previously for the indivCount * array. */ void AllelesBlock::Reset() { CharactersBlock::Reset(); // Thinking of changing any of these defaults? // If so, do it also in the constructor // alleles_fixed = false; datapoint = standard; gap = '/'; labels = false; respectingCase = true; tokens = true; haploid.erase( haploid.begin(), haploid.end() ); if( indivCount != NULL ) { delete [] indivCount; indivCount = NULL; } } /** * @method SampleSize [int:public] * @param locus [int] the locus in question, in range (0..nchar] * @param pop [int] the population in question, in range (0..ntax] (default is -1) * * Returns the number of individuals (if data is diploid) * for which both genes are non-missing. If data is haploid, * returns number of genes that are non-missing. * Assumes locus has not been excluded. If no population is * supplied, sums across all active populations. If * population is supplied, count will only be for that * population. It is assumed that if a population is specified, * that population is not one currently deleted by the user. */ int AllelesBlock::SampleSize( int locus, int pop /* = -1 */ ) { assert( !IsExcluded(locus) ); bool locus_haploid = IsHaploid(locus); bool do_one_pop = ( pop >= 0 ); assert( !( do_one_pop && IsDeleted(pop) ) ); int i, j, gene0, gene1; int total_genes = 0; int total_indivs = 0; i = ( do_one_pop ? pop : 0 ); for( ; i < ntax; i++ ) { if( do_one_pop && i > pop ) break; if( IsDeleted(pop) ) continue; int numIndivs = ( i > 0 ? indivCount[i] - indivCount[i-1] : indivCount[i] ); for( j = 0; j < numIndivs; j++ ) { gene0 = GetGene( i, j, locus, 0 ); if( gene0 < MAX_ALLELES ) total_genes++; if( !locus_haploid ) { gene1 = GetGene( i, j, locus, 1 ); if( gene1 < MAX_ALLELES ) { total_genes++; if( gene0 < MAX_ALLELES ) total_indivs++; } } } } return ( locus_haploid ? total_genes : total_indivs ); } /** * @method SplitInt [int:protected] * @param x [int] to be placed in the low-order word * @param y [int] to be placed in the high-order word * * Places x in the low-order word (least-significant 2 bytes) * and y in the high-order word (most-significant 2 bytes) * of the 4-byte int returned. Note that because x and y * both have to fit in 2 bytes instead of 4, the maximum * value for each is 255 = 0xff. The value 255 itself is * specifically reserved for use as the missing data value. */ int AllelesBlock::SplitInt( int x, int y ) { //typedef long LONG; //typedef unsigned long DWORD; //typedef unsigned short WORD; //#define MAKELONG(a, b) ((LONG)( ((WORD)(a)) | ( ((DWORD)((WORD)(b))) << 16) )) assert( x >= 0 && x <= MAX_ALLELES ); assert( y >= 0 && y <= MAX_ALLELES ); int z_low = (unsigned short)x; int z_high = ( (unsigned int)( (unsigned short)y ) ) << 16; int z = ( z_low | z_high ); return z; } tv-0.5/ncl-2.0/src/nxsstring.h0000775000076400007640000000235307620465560013032 00000000000000#ifndef __NXSSTRING_H #define __NXSSTRING_H class nxsstring : public std::string { public: nxsstring() {} nxsstring( const char* s ) { assign(s); } nxsstring( const nxsstring& s ) { assign(s); } nxsstring& operator=( const char* s ) { assign(s); return *this; } nxsstring& operator=( const nxsstring& s ) { assign(s); return *this; } nxsstring& operator+=( const nxsstring& s ) { append(s); return *this; } nxsstring& operator+=( const char c ) { char s[2]; s[0] = c; s[1] = '\0'; append(s); return *this; } nxsstring& operator+=( const int i ) { char tmp[81]; sprintf( tmp, "%d", i ); append(tmp); return *this; } nxsstring& operator+=( const long l ) { char tmp[81]; sprintf( tmp, "%ld", l ); append(tmp); return *this; } nxsstring& operator+=( const double d ); void RightJustifyLong( long x, int w, bool clear_first = false ); void RightJustifyDbl( double x, int w, int p, bool clear_first = false ); void ShortenTo( int n ); }; #endif tv-0.5/ncl-2.0/src/nexustoken.h0000775000076400007640000000416610052475045013172 00000000000000#ifndef __NEXUSTOKEN_H #define __NEXUSTOKEN_H // // NexusToken class // class NexusToken { std::istream& in; int newlineType; #if defined( __MWERKS__ ) long filepos; #else std::streampos filepos; #endif long fileline; long filecol; nxsstring token; nxsstring comment; char saved; bool atEOF; bool atEOL; char special; int labileFlags; protected: void AppendToComment( char ch ); void AppendToToken( char ch ); char GetNextChar(); void GetComment(); void GetCurlyBracketedToken(); void GetDoubleQuotedToken(); void GetQuoted(); void GetParentheticalToken(); bool IsPunctuation( char ch ); bool IsWhitespace( char ch ); public: enum { saveCommandComments = 0x0001, parentheticalToken = 0x0002, curlyBracketedToken = 0x0004, doubleQuotedToken = 0x0008, singleCharacterToken = 0x0010, newlineIsToken = 0x0020, tildeIsPunctuation = 0x0040, useSpecialPunctuation = 0x0080, hyphenNotPunctuation = 0x0100, toEndOfTree = 0x0200 }; nxsstring errormsg; NexusToken( std::istream& i ); virtual ~NexusToken(); bool AtEOF(); bool AtEOL(); bool Abbreviation( nxsstring s ); bool Begins( nxsstring s, bool respect_case = false ); void BlanksToUnderscores(); bool Equals( nxsstring s, bool respect_case = false ); long GetFileColumn(); std::streampos GetFilePosition(); long GetFileLine(); void GetNextToken(); nxsstring GetToken( bool respect_case = true ); int GetTokenLength(); bool IsPlusMinusToken(); bool IsPunctuationToken(); bool IsWhitespaceToken(); void ReplaceToken( const nxsstring s ); void ResetToken(); void SetSpecialPunctuationCharacter( char c ); void SetLabileFlagBit( int bit ); bool StoppedOn( char ch ); void StripWhitespace(); void ToUpper(); void Write( std::ostream& out ); void Writeln( std::ostream& out ); // virtual function that should be overridden in derived classes virtual void OutputComment( nxsstring& msg ); }; #endif tv-0.5/ncl-2.0/src/assumptionsblock.h0000775000076400007640000000335010306773776014377 00000000000000#ifndef __ASSUMPTIONSBLOCK_H #define __ASSUMPTIONSBLOCK_H class CharactersBlock; class AssumptionsBlock : public NexusBlock { // Adding a new data member? Don't forget to: // 1. Describe it in the class header comment at the top of "emptyblock.cpp" // 2. Initialize it (unless it is self-initializing) in the constructor // and reinitialize it in the Reset function // 3. Describe the initial state in the constructor documentation // 4. Delete memory allocated to it in both the destructor and Reset function // 5. Report it in some way in the Report function TaxaBlock& taxa; CharactersBlock* charBlockPtr; protected: IntSetMap charsets; IntSetMap taxsets; IntSetMap exsets; nxsstring def_charset; nxsstring def_taxset; nxsstring def_exset; protected: void HandleCharset( NexusToken& token ); void HandleEndblock( NexusToken& token ); void HandleExset( NexusToken& token ); void HandleTaxset( NexusToken& token ); virtual void Read( NexusToken& token ); virtual void Reset(); virtual int TaxonLabelToNumber( nxsstring s ); public: AssumptionsBlock( TaxaBlock& t ); virtual ~AssumptionsBlock(); void SetCallback( CharactersBlock* p ); int GetNumCharSets(); void GetCharSetNames( LabelList& names ); IntSet& GetCharSet( nxsstring nm ); nxsstring GetDefCharSetName(); int GetNumTaxSets(); void GetTaxSetNames( LabelList& names ); IntSet& GetTaxSet( nxsstring nm ); nxsstring GetDefTaxSetName(); int GetNumExSets(); void GetExSetNames( LabelList& names ); IntSet& GetExSet( nxsstring nm ); nxsstring GetDefExSetName(); void ApplyExSet( nxsstring nm ); virtual void Report( std::ostream& out ); }; #endif tv-0.5/ncl-2.0/src/datablock.h0000775000076400007640000000032607235522105012704 00000000000000#ifndef __DATABLOCK_H #define __DATABLOCK_H // // DataBlock class // class DataBlock : public CharactersBlock { protected: void Reset(); public: DataBlock( TaxaBlock& tb, AssumptionsBlock& ab ); }; #endif tv-0.5/ncl-2.0/src/setreader.cpp0000775000076400007640000002137307236527114013304 00000000000000#include "nexusdefs.h" #include "xnexus.h" #include "nexustoken.h" #include "nexus.h" #include "setreader.h" /** * @class SetReader * @file setreader.h * @file setreader.cpp * @author Paul O. Lewis * @copyright Copyright 1999. All Rights Reserved. * @variable block [NexusBlock&] the NexusBlock used for looking up labels * @variable max [int] maximum number of elements in the set * @variable settype [int] the type of set being read (see enum) * @variable nxsset [IntSet&] reference to the set being read * @variable token [NexusToken&] the token object to use in reading the file * @see NexusReader * @see NexusToken * @see XNexus * * A class for reading Nexus set objects and storing them in a set of int values. * The IntSet nxsset will be flushed if it is not empty, and nxsset will be built * up as the set is read, with each element in the list storing a member of * the set (ranges are stored as individual elements). * *

This class handles set descriptions of the following form: *

 * 4-7 15 20-.\3;
 * 
* The above set includes all numbers from 4 to 100 (inclusive) as well as * 105 and every third number from 110 to max. If max were 30, the array * stored would look like this: * * * *
4 5 6 7 15 2023 26 29
*/ /** * @enumeration * @enumitem generic [1] means expect a generic set (say, characters weights) * @enumitem charset [2] means expect a character set * @enumitem taxsert [3] means expect a taxon set * * For use with the variable settype. Default is 1 (generic). */ /** * @constructor * * Initializes token to t and nxsset to iset, then * erases nxsset (if it is nonempty). */ SetReader::SetReader( NexusToken& t, int maxValue, IntSet& iset , NexusBlock& nxsblk, int type ) : token(t), nxsset(iset), max(maxValue), block(nxsblk), settype(type) { if( !nxsset.empty() ) nxsset.erase( nxsset.begin(), nxsset.end() ); } /** * @method AddRange [bool:protected] * @param first [int] the first member of the range (inclusive) * @param last [int] the last member of the range (inclusive) * @param modulus [int] the modulus to use (if non-zero) * * Adds the range specified by first, last, and modulus to the set. If * modulus is zero (the default value) it is ignored. The parameters * first and last are from the data file and thus have range [1..max]. * We store them with offset = 0 in nxsset (i.e., subtract 1 from every * value stored). */ bool SetReader::AddRange( int first, int last, int modulus /* = 0 */ ) { if( last > max || first < 1 || first > last ) return false; for( int i = first-1; i < last; i++ ) { int diff = i-first+1; if( modulus > 0 && diff % modulus != 0 ) continue; nxsset.insert(i); } return true; } /** * @method GetTokenValue [int:private] * @throws XNexus * * Tries to interpret token as a number. Failing that, * tries to interpret token as a character or taxon * label, which it then converts to a number. Failing * that, it throws an XNexus exception. */ int SetReader::GetTokenValue() { int v = atoi( token.GetToken().c_str() ); if( v == 0 && settype != SetReader::generic ) { if( settype == SetReader::charset ) v = block.CharLabelToNumber( token.GetToken() ); else if( settype == SetReader::taxset ) v = block.TaxonLabelToNumber( token.GetToken() ); } if( v == 0 ) { block.errormsg = "Set element ("; block.errormsg += token.GetToken(); block.errormsg += ") not a number "; if( settype == SetReader::charset ) block.errormsg += "and not a valid character label"; else if( settype == SetReader::taxset ) block.errormsg += "and not a valid taxon label"; throw XNexus( block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } return v; } /** * @method Run [bool:public] * @throws XNexus * * Reads in a set from a NEXUS data file. Returns true if the set was * terminated by a semicolon, false otherwise. */ bool SetReader::Run() { bool ok; bool retval = false; int rangeBegin = -1; int rangeEnd = rangeBegin; bool insideRange = false; int modValue = 0; for(;;) { // next token should be one of the following: // ';' --> set definition finished // '-' --> range being defined // int --> member of set (or beginning or end of a range) // '.' --> signifies the number max // '\' --> signifies modulus value coming next // token.GetNextToken(); if( token.Equals("-") ) { // We should not be inside a range when we encounter a hyphenation symbol. // The hyphen is what _puts_ us inside a range! if( insideRange ) { block.errormsg = "The symbol '-' is out of place here"; throw XNexus( block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } insideRange = true; } else if( token.Equals(".") ) { // We _should_ be inside a range if we encounter a period, as this // is a range termination character if( !insideRange ) { block.errormsg = "The symbol '.' can only be used to specify the end of a range"; throw XNexus( block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } rangeEnd = max; } else if( token.Equals("\\") ) { // The backslash character is used to specify a modulus to a range, and // thus should only be encountered if currently inside a range if( !insideRange ) { block.errormsg = "The symbol '\\' can only be used after the end of a range has been specified"; throw XNexus( block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } token.GetNextToken(); modValue = atoi( token.GetToken().c_str() ); if( modValue <= 0 ) { block.errormsg = "The modulus value specified ("; block.errormsg += token.GetToken(); block.errormsg += ") is invalid; must be greater than 0"; throw XNexus( block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } else if( insideRange && rangeEnd == -1 ) { // The beginning of the range and the hyphen symbol have been read // already, just need to store the end of the range at this point rangeEnd = GetTokenValue(); } else if( insideRange ) { // If insideRange is true, we must have already stored the beginning // of the range and read in the hyphen character. We would not have // made it this far if we had also not already stored the range end. // Thus, we can go ahead and add the range. ok = AddRange( rangeBegin, rangeEnd, modValue ); if( !ok ) { block.errormsg = "Character number out of range (or range incorrectly specified) in set specification"; throw XNexus( block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // We have actually already read in the next token, so deal with it // now so that we don't end up skipping a token if( token.Equals(";") ) { retval = true; break; } else if( token.Equals(",") ) break; rangeBegin = GetTokenValue(); rangeEnd = -1; insideRange = false; } else if( rangeBegin != -1 ) { // If we were inside a range, we would have not gotten this far. // If not in a range, we are either getting ready to begin a new // range or have previously read in a single value. Handle the // latter possibility here. ok = AddRange( rangeBegin, rangeBegin, modValue ); if( !ok ) { block.errormsg = "Character number out of range (or range incorrectly specified) in set specification"; throw XNexus( block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } if( token.Equals(";") ) { retval = true; break; } else if( token.Equals(",") ) break; rangeBegin = GetTokenValue(); rangeEnd = -1; } else if( token.Equals(";") ) { retval = true; break; } else if( token.Equals(",") ) { break; } else if( token.Equals("ALL") ) { rangeBegin = 1; rangeEnd = max; ok = AddRange( rangeBegin, rangeEnd ); } else { // Can only get here if rangeBegin still equals -1 and thus we // are reading in the very first token and that token is neither // the word "all" nor is it a semicolon rangeBegin = GetTokenValue(); rangeEnd = -1; } } return retval; } tv-0.5/ncl-2.0/src/nxsdate.h0000775000076400007640000000127607745166532012451 00000000000000// nxsdate.h // Copyright (C) 1999 Paul O. Lewis. #ifndef __NXSDATE_H #define __NXSDATE_H #if defined( __BORLANDC__ ) # include #endif #include #include class NxsDate { time_t secs; tm ts; public: NxsDate(); NxsDate( int day, const char* month, int year , int hours = 0, int minutes = 0, int seconds = 1 ); char* c_str(); void GetCurrentDate(); void operator=( const NxsDate& other_date ); long operator-( const NxsDate& other_date ) const; int operator<( const NxsDate& other_date ) const; int operator>( const NxsDate& other_date ) const; friend std::ostream& operator<<( std::ostream& o, const NxsDate& d ); class XTime {}; }; #endif tv-0.5/ncl-2.0/src/setreader.h0000775000076400007640000000070607236527114012746 00000000000000#ifndef __SETREADER_H #define __SETREADER_H class SetReader { NexusBlock& block; NexusToken& token; IntSet& nxsset; int max; int settype; public: enum { generic = 1, charset, taxset }; // used for settype private: int GetTokenValue(); protected: bool AddRange( int first, int last, int modulus = 0 ); public: SetReader( NexusToken& t, int maxValue, IntSet& iset, NexusBlock& nxsblk, int type ); bool Run(); }; #endif tv-0.5/ncl-2.0/src/nexus.cpp0000775000076400007640000003115207575350626012474 00000000000000#include "nexusdefs.h" #include "xnexus.h" #include "nexustoken.h" #include "nexus.h" #define NCL_NAME_AND_VERSION "NCL version 2.01" #define NCL_COPYRIGHT "Copyright (c) 2000 by Paul O. Lewis" #ifdef __BORLANDC__ #define NCL_HOMEPAGEURL "http:\/\/lewis.eeb.uconn.edu\/lewishome\/software.html" #else #define NCL_HOMEPAGEURL "http://lewis.eeb.uconn.edu/lewishome/software.html" #endif /** * @class Nexus * @file nexus.h * @file nexus.cpp * @author Paul O. Lewis * @copyright Copyright © 1999. All Rights Reserved. * @variable blockList [NexusBlock*:protected] pointer to first block in list of blocks * @see NexusBlock * @see NexusReader * @see NexusToken * @see XNexus * * This is the class that orchestrates the reading of a Nexus data file. * An object of this class should be created, and objects of any block classes * that are expected to be needed should be added to blockList using the Add * member function. The Execute member function is then called, which reads the * data file until encountering a block name, at which point the correct block * is looked up in blockList and that object's Read method called. */ /** * @constructor * * Default constructor * Initializes the blockList data member to NULL. */ Nexus::Nexus() : blockList(NULL) { } /** * @destructor * * Does nothing. */ Nexus::~Nexus() { } /** * @method Add [void:public] * @param newBlock [NexusBlock*] a pointer to an existing block object * * Adds newBlock to the end of the list of NexusBlock objects growing * from blockList. If blockList points to NULL, this function sets * blockList to point to newBlock. Calls SetNexus method of newBlock * to inform newBlock of the Nexus object that now owns it. This * is useful when the newBlock object needs to communicate with the * outside world through the Nexus object, such as when it issues * progress reports as it is reading the contents of its block. */ void Nexus::Add( NexusBlock* newBlock ) { assert( newBlock != NULL ); newBlock->SetNexus(this); if( !blockList ) blockList = newBlock; else { // add new block to end of list NexusBlock* curr; for( curr = blockList; curr && curr->next; ) curr = curr->next; assert( curr && !curr->next ); curr->next = newBlock; } } /** * @method BlockListEmpty [bool:public] * * If blockList data member still equals NULL, returns true; * otherwise, returns false. The blockList will not be equal * to NULL if the Add function has been called to add a block * object to the list. */ bool Nexus::BlockListEmpty() { return ( blockList == NULL ? true : false ); } /** * @method DebugReportBlock [virtual void:protected] * @param nexusBlock [NexusBlock&] the block that should be reported * * This function was created for purposes of debugging a new NexusBlock. * This version does nothing; to create an active DebugReportBlock function, * override this version in the derived class and call the Report function * of nexusBlock. This function is called whenever the main Nexus Execute function * encounters the [&spillall] command comment between blocks in the data file. * The Execute function goes through all blocks and passes them, in turn, to this * DebugReportBlock function so that their contents are displayed. Placing the * [&spillall] command comment between different versions of a block allows * multiple blocks of the same type to be tested using one long data file. * Say you are interested in testing whether the normal, transpose, and * interleave format of a matrix can all be read correctly. If you put three * versions of the block in the data file one after the other, the second one * will wipe out the first, and the third one will wipe out the second, unless * you have a way to report on each one before the next one is read. This * function provides that ability. */ void Nexus::DebugReportBlock( NexusBlock& /* nexusBlock */ ) { // Derive me and uncomment the following line in the derived version // nexusBlock.Report(out); // Note that your derived Nexus object must have its own ostream object (out) } /** * @method Detach [void:public] * @param oldBlock [NexusBlock*] a pointer to an existing block object * * Detaches oldBlock from the list of NexusBlock objects growing * from blockList. If blockList itself points to oldBlock, this * function sets blockList to point to oldBlock->next. * Note: oldBlock is not deleted, it is simple detached from the * linked list. No harm is done in Detaching a block pointer * that has already been detached previously; if oldBlock is * not found in the block list, Detach simply returns quietly. * If oldBlock is found, its SetNexus object is called to set * the Nexus pointer to NULL, indicating that it is no longer * owned by (i.e., attached to) a Nexus object. */ void Nexus::Detach( NexusBlock* oldBlock ) { assert( oldBlock != NULL ); // Should call BlockListEmpty function first to make sure // there are blocks to detach // assert( blockList != NULL ); if( blockList == oldBlock ) { blockList = oldBlock->next; oldBlock->SetNexus(NULL); } else { // try to find oldBlock in list and detach if found NexusBlock* curr = blockList; NexusBlock* currNext = blockList->next; for( ; currNext != NULL && currNext != oldBlock; ) { currNext = currNext->next; } if( currNext == oldBlock ) { curr->next = currNext->next; currNext->next = NULL; oldBlock->SetNexus(NULL); } } } /** * @method EnteringBlock [virtual void:public] * @param blockName [char*] the name of the block being entered * * This function is called when a block named blockName has just * been entered and is about to be read. Override this pure virtual * function to provide an indication of progress as the Nexus file * is being read. */ // virtual void EnteringBlock( char* blockName ) = 0; /** * @method Execute [void:public] * @param token [NexusToken&] the token object used to grab Nexus tokens * @param notifyStartStop [bool] if true, ExecuteStarting and ExecuteStopping will be called (true by default) * * Reads the Nexus data file from the input stream provided by token. This function * is responsible for reading through the name of a each block. Once * it has read a block name, it searches blockList for a block object * to handle reading the remainder of the block's contents. The block * object is responsible for reading the end or endblock command as well * as the trailing semicolon. This function also handles reading * comments that are outside of blocks, as well as the initial #NEXUS * keyword. The notifyStartStop argument is provided in case you do not * wish the ExecuteStart and ExecuteStop functions to be called. These functions * are primarily used for creating and destroying a dialog box to show progress, * and nested Execute calls can thus cause problems (e.g., a dialog box is * destroyed when the inner Execute calls ExecuteStop and the outer Execute * still expects the dialog box to be available). Specifying notifyStartStop * false for all the nested Execute calls thus allows the outermost Execute call * to control creation and destruction of the dialog box. */ void Nexus::Execute( NexusToken& token, bool notifyStartStop /* = true */ ) { char id_str[256]; bool disabledBlock = false; nxsstring errormsg; try { token.GetNextToken(); } catch( XNexus x ) { NexusError( token.errormsg, 0, 0, 0 ); return; } if( !token.Equals("#NEXUS") ) { errormsg = "Expecting #NEXUS to be the first token in the file, but found "; errormsg += token.GetToken(); errormsg += " instead"; NexusError( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); return; } if( notifyStartStop ) ExecuteStarting(); for(;;) { token.SetLabileFlagBit( NexusToken::saveCommandComments ); token.GetNextToken(); if( token.AtEOF() ) break; if( token.Equals("BEGIN") ) { disabledBlock = false; token.GetNextToken(); NexusBlock* curr; for( curr = blockList; curr != NULL; curr = curr->next ) { if( !token.Equals( curr->GetID() ) ) continue; if( !curr->IsEnabled() ) { disabledBlock = true; SkippingDisabledBlock( token.GetToken() ); continue; } strcpy( id_str, curr->GetID().c_str() ); EnteringBlock( id_str /*curr->GetID()*/ ); curr->Reset(); try { curr->Read( token ); } catch( XNexus x ) { NexusError( curr->errormsg, x.pos, x.line, x.col ); curr->Reset(); return; } ExitingBlock( id_str /*curr->GetID()*/ ); break; } if( curr == NULL ) { token.BlanksToUnderscores(); nxsstring currBlock = token.GetToken(); if( !disabledBlock ) SkippingBlock( currBlock ); for(;;) { token.GetNextToken(); if( token.Equals("END") || token.Equals("ENDBLOCK") ) { token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' after END or ENDBLOCK command, but found "; errormsg += token.GetToken(); errormsg += " instead"; NexusError( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); return; } break; } if( token.AtEOF() ) { errormsg = "Encountered end of file before END or ENDBLOCK in block "; errormsg += currBlock; NexusError( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); return; } } } // if token not found amongst known block IDs } // if token equals BEGIN else if( token.Equals("&SHOWALL") ) { NexusBlock* curr; for( curr = blockList; curr != NULL; curr = curr->next ) { DebugReportBlock(*curr); } } else if( token.Equals("&LEAVE") ) { break; } } // for(;;) if( notifyStartStop ) ExecuteStopping(); } /** * @method NCLCopyrightNotice [char*:public] * * Returns a string containing the copyright notice * for the Nexus Class Library, useful for * reporting the use of this library by programs * that interact with the user. */ char* Nexus::NCLCopyrightNotice() { return NCL_COPYRIGHT; } /** * @method NCLHomePageURL [char*:public] * * Returns a string containing the URL for the * Nexus Class Library Home Page on the World * Wide Web. */ char* Nexus::NCLHomePageURL() { return NCL_HOMEPAGEURL; } /** * @method NCLNameAndVersion [char*:public] * * Returns a string containing the name and current * version of the Nexus Class Library, useful for * reporting the use of this library by programs * that interact with the user. */ char* Nexus::NCLNameAndVersion() { return NCL_NAME_AND_VERSION; } /** * @method NexusError [virtual void:public] * @param msg [nxsstring&] the error message to be displayed * @param pos [streampos] the current file position * @param line [long] the current file line * @param col [long] the current column within the current file line * * This function is called whenever there is an error detected while reading * a Nexus file. Override this pure virtual function to display the error * message in the most appropriate way for the platform you are supporting. */ // virtual void NexusError( nxsstring& msg, std::streampos pos, long line, long col ) = 0; /** * @method OutputComment [virtual void:public] * @param comment [nxsstring] a comment to be shown on the output * * This function may be used to report progess while reading through * a file. For example, the AllelesBlock class uses this function to * report the name of the population it is currently reading so the * user doesn't think the program has hung on large data sets. */ // virtual void OutputComment( nxsstring comment ) = 0; /** * @method SkippingBlock [virtual void:public] * @param blockName [nxsstring] the name of the block being skipped * * This function is called when an unknown block named blockName is * about to be skipped. Override this pure virtual function to * provide an indication of progress as the Nexus file is being read. */ // virtual void SkippingBlock( nxsstring blockName ) = 0; /** * @method SkippingDisabledBlock [virtual void:public] * @param blockName [nxsstring] the name of the disabled block being skipped * * This function is called when a disabled block named blockName is * encountered in a NEXUS data file being executed. Override this pure * virtual function to handle this event in an appropriate manner. For * example, the program may wish to inform the user that a data block * was encountered in what is supposed to be a tree file. */ // virtual void SkippingDisabledBlock( nxsstring blockName ) = 0; tv-0.5/ncl-2.0/src/distancedatum.h0000775000076400007640000000031207235522106013601 00000000000000#ifndef __DISTANCEDATUM_H #define __DISTANCEDATUM_H class DistanceDatum { double value; int missing; friend class DistancesBlock; public: DistanceDatum(); ~DistanceDatum(); }; #endif tv-0.5/ncl-2.0/src/distancedatum.cpp0000775000076400007640000000136007235522106014140 00000000000000#include "distancedatum.h" /** * @class DistanceDatum * @file distancedatum.h * @file distancedatum.cpp * @author Paul O. Lewis * @copyright Copyright 1999. All Rights Reserved. * @variable value [double:private] the pairwise distance value stored * @see DistancesBlock * * This class stores pairwise distance values. It has no public access functions, * reflecting the fact that it is manipulated strictly by its only friend class, * the DistancesBlock class. */ /** * @constructor * * Default constructor. Initializes value to 0.0 and distanceFlags to 0. */ DistanceDatum::DistanceDatum() : missing(1), value(0.0) { } /** * @destructor * * Does nothing. */ DistanceDatum::~DistanceDatum() { } tv-0.5/ncl-2.0/src/discretedatum.cpp0000775000076400007640000001004207236527112014150 00000000000000#include "nexusdefs.h" #include "discretedatum.h" /** * @class DiscreteDatum * @file discretedatum.h * @file discretedatum.cpp * @author Paul O. Lewis * @copyright Copyright 1999. All Rights Reserved. * @variable polymorphic [int:public] if true, additional states represent polymorphism rather than uncertainty * @variable states [int*:public] holds information about state * @see DiscreteMatrix * @see NexusReader * * Class for holding discrete states in a matrix. Note that there is no way to access * the variables of this class since they are all private and there are no public * access functions. This class is designed to be manipulated by the class * DiscreteMatrix, which is the only class that * has been designated a friend of DiscreteDatum. * *

The variable states is NULL if there is missing data, and non-NULL for any other state. * If states is non-NULL, the first cell is used to store the number of states. This will * be 0 if the state is the gap state, 1 if the state is unambiguous and nonpolymorphic * (and not the gap state of course), and 2 or higher if there is either polymorphism or * uncertainty. If polymorphism or uncertainty apply, it becomes necessary to store information * about which of these two situations holds. Thus, the last cell in the array is set to * either 1 (polymorphism) or 0 (uncertainty). While a little complicated, this scheme has * the following benefits: *

    *
  1. if the state is missing, the only memory allocated is for a pointer (states) *
  2. if the state is unambiguous and not polymorphic, no storage is used for keeping * track of whether polymorphism or uncertainty holds *
  3. it allows for a virtually unlimited number of states, which is important if it is * to be general enough to store microsatellite data for an AllelesBlock object, for * example. *
* *

Supposing the gap symbol is '-', the missing data symbol is '?', and the * symbols list is "ACGT", the following table shows the status of the states * variable under several different possible data matrix entries: * *
Matrix entry contents of states *
? NULL *
-
0
*
G
1 2
*
(AG) polymorphic
2 0 2 1
*
{AG} ambiguous
2 0 2 0
*
*/ /** * @constructor * * Sets states to NULL and polymorphic to 0. */ DiscreteDatum::DiscreteDatum() { states = NULL; } /** * @destructor * * Deletes memory associated with states (if any was allocated). */ DiscreteDatum::~DiscreteDatum() { if( states != NULL ) delete [] states; } /** * @method CopyFrom [int:public] * @param other [const DiscreteDatum&] the source DiscreteDatum object * * Makes this DiscreteDatum object an exact copy of other. Useful for * dealing with matchchar symbols in a matrix. */ void DiscreteDatum::CopyFrom( const DiscreteDatum& other ) { if( states != NULL ) { delete [] states; states = NULL; } if( other.states == NULL ) return; int sz = other.states[0]; if( sz == 0 ) { // other.states indicates the 'gap' state is present // states = new int[1]; states[0] = 0; } else if( sz == 1 ) { // other.states indicates state is unambiguous and non-polymorphic // states = new int[2]; states[0] = 1; states[1] = other.states[1]; } else { // other.states indicates ambiguity or polymorphism is present // states = new int[sz+2]; states[0] = sz; for( int i = 1; i <= sz; i++ ) states[i] = other.states[i]; // copy the polymorphism indicator element // states[sz+1] = other.states[sz+1]; } } tv-0.5/ncl-2.0/src/taxablock.h0000775000076400007640000000235107620465560012741 00000000000000#ifndef __TAXABLOCK_H #define __TAXABLOCK_H // // TaxaBlock class // class TaxaBlock : public NexusBlock { friend class DataBlock; friend class AllelesBlock; friend class CharactersBlock; friend class DistancesBlock; // Adding a new data member? Don't forget to: // 1. Describe it in the class header comment at the top of "taxablock.cpp" // 2. Initialize it (unless it is self-initializing) in the constructor // and reinitialize it in the Reset function // 3. Describe the initial state in the constructor documentation // 4. Delete memory allocated to it in both the destructor and Reset function // 5. Report it in some way in the Report function int ntax; LabelList taxonLabels; public: class nosuchtaxon {}; // exception potentially thrown by FindTaxon private: void SetNtax( int n ); protected: void Read( NexusToken& token ); void Reset(); public: TaxaBlock(); virtual ~TaxaBlock(); void AddTaxonLabel( nxsstring s ); void ChangeTaxonLabel( int i, nxsstring s ); int FindTaxon( nxsstring label ); bool IsAlreadyDefined( nxsstring label ); int GetMaxTaxonLabelLength(); int GetNumTaxonLabels(); nxsstring GetTaxonLabel( int i ); void Report( std::ostream& out ); }; #endif tv-0.5/ncl-2.0/src/assumptionsblock.cpp0000775000076400007640000003650207575350624014734 00000000000000#include #include #include "nexusdefs.h" #include "xnexus.h" #include "nexustoken.h" #include "nexus.h" #include "setreader.h" #include "taxablock.h" #include "discretedatum.h" #include "discretematrix.h" #include "charactersblock.h" #include "assumptionsblock.h" using namespace std; /** * @class AssumptionsBlock * @file assumptionsblock.h * @file assumptionsblock.cpp * @author Paul O. Lewis * @copyright Copyright © 1999. All Rights Reserved. * @variable taxa [TaxaBlock&:private] reference to the TaxaBlock object * @variable charBlockPtr [CharactersBlock*:private] pointer to the CharactersBlock-derived object to be notified in the event of exset changes * @variable charsets [IntSetMap:protected] the variable storing charsets * @variable taxsets [IntSetMap:protected] the variable storing taxsets * @variable exsets [IntSetMap:protected] the variable storing exsets * @see CharactersBlock * @see Nexus * @see NexusBlock * @see NexusToken * @see SetReader * @see TaxaBlock * @see XNexus * * This class handles reading and storage for the Nexus block ASSUMPTIONS. * It overrides the member functions Read and Reset, which are abstract * virtual functions in the base class NexusBlock. */ /** * @constructor * * Performs the following initializations: * *
Variable Initial Value *
id = "ASSUMPTIONS" *
*/ AssumptionsBlock::AssumptionsBlock( TaxaBlock& t ) : taxa(t), charBlockPtr(NULL) { id = "ASSUMPTIONS"; } /** * @destructor * * Nothing needs to be done. */ AssumptionsBlock::~AssumptionsBlock() { } /** * @method GetNumCharSets [int:public] * * Returns the number of character sets stored. */ int AssumptionsBlock::GetNumCharSets() { return (int)charsets.size(); } /** * @method GetCharSetNames [void:public] * @param names [LabelList&] the vector in which to store the names * * Erases names, then fills names with the names of all stored * character sets. */ void AssumptionsBlock::GetCharSetNames( LabelList& names ) { names.erase( names.begin(), names.end() ); IntSetMap::const_iterator i; for( i = charsets.begin(); i != charsets.end(); i++ ) names.push_back( (*i).first ); } /** * @method GetCharSet [IntSet&:public] * @param nm [nxsstring] the name of the character set to return * * Returns reference to character set having name nm. */ IntSet& AssumptionsBlock::GetCharSet( nxsstring nm ) { return charsets[nm]; } /** * @method GetDefCharSetName [nxsstring:public] * * Returns name of default character set. If returned * string has zero length, then no default character set * was defined in the data set. */ nxsstring AssumptionsBlock::GetDefCharSetName() { return def_charset; } /** * @method GetNumTaxSets [int:public] * * Returns the number of taxon sets stored. */ int AssumptionsBlock::GetNumTaxSets() { return (int)taxsets.size(); } /** * @method GetTaxSetNames [void:public] * @param names [LabelList&] the vector in which to store the names * * Erases names, then fills names with the names of all stored * taxon sets. */ void AssumptionsBlock::GetTaxSetNames( LabelList& names ) { names.erase( names.begin(), names.end() ); IntSetMap::const_iterator i; for( i = taxsets.begin(); i != taxsets.end(); i++ ) names.push_back( (*i).first ); } /** * @method GetTaxSet [IntSet&:public] * @param nm [nxsstring] the name of the taxon set to return * * Returns reference to taxon set having name nm. */ IntSet& AssumptionsBlock::GetTaxSet( nxsstring nm ) { return taxsets[nm]; } /** * @method GetDefTaxSetName [nxsstring:public] * * Returns name of default taxon set. If returned * string has zero length, then no default taxon set * was defined in the data set. */ nxsstring AssumptionsBlock::GetDefTaxSetName() { return def_taxset; } /** * @method GetNumExSets [int:public] * * Returns the number of exclusion sets stored. */ int AssumptionsBlock::GetNumExSets() { return (int)exsets.size(); } /** * @method GetExSetNames [void:public] * @param names [LabelList&] the vector in which to store the names * * Erases names, then fills names with the names of all stored * exclusion sets. */ void AssumptionsBlock::GetExSetNames( LabelList& names ) { names.erase( names.begin(), names.end() ); IntSetMap::const_iterator i; for( i = exsets.begin(); i != exsets.end(); i++ ) names.push_back( (*i).first ); } /** * @method GetExSet [IntSet&:public] * @param nm [nxsstring] the name of the exclusion set to return * * Returns reference to exclusion set having name nm. */ IntSet& AssumptionsBlock::GetExSet( nxsstring nm ) { return exsets[nm]; } /** * @method GetDefExSetName [nxsstring:public] * * Returns name of default exclusion set. If returned * string has zero length, then no default exclusion set * was defined in the data set. */ nxsstring AssumptionsBlock::GetDefExSetName() { return def_exset; } /** * @method ApplyExSet [void:public] * @param nm [nxsstring] the name of the exclusion set to apply * * Applies exclusion set having name nm by calling the * ApplyExset method of the CharactersBlock or * CharactersBlock-derived object stored in the charBlockPtr * pointer (which will be whichever block last called * the AssumptionsBlock::SetCallback method). */ void AssumptionsBlock::ApplyExSet( nxsstring nm ) { assert( charBlockPtr != NULL ); charBlockPtr->ApplyExset( exsets[nm] ); } /** * @method HandleCharset [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Reads and stores information contained in the command * CHARSET within an ASSUMPTIONS block. */ void AssumptionsBlock::HandleCharset( NexusToken& token ) { bool asterisked = false; // Next token should be either an asterisk or the name of a charset token.GetNextToken(); if( token.Equals("*") ) { asterisked = true; token.GetNextToken(); } // Token now stored should be the name of a charset nxsstring charset_name = token.GetToken(); // Now grab the equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' in CHARSET definition but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } assert( charBlockPtr != NULL ); CharactersBlock& charBlock = *charBlockPtr; IntSet s; int totalChars = charBlock.GetNCharTotal(); SetReader( token, totalChars, s, charBlock, SetReader::charset ).Run(); charsets[charset_name] = s; if( asterisked ) def_charset = charset_name; } /** * @method HandleEndblock [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Called when the END or ENDBLOCK command needs to be parsed * from within the ASSUMPTIONS block. Basically just checks to make * sure the next token in the data file is a semicolon. */ void AssumptionsBlock::HandleEndblock( NexusToken& token ) { // get the semicolon following END or ENDBLOCK token // token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate the END or ENDBLOCK command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } /** * @method HandleExset [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * Reads and stores information contained in the command * EXSET within an ASSUMPTIONS block. If EXSET keyword is * followed by an asterisk, last read CharactersBlock or * CharactersBlock-derived object is notified of the * characters to be excluded (its ApplyExset function * is called). */ void AssumptionsBlock::HandleExset( NexusToken& token ) { bool asterisked = false; // Next token should be either an asterisk or the name of an exset token.GetNextToken(); if( token.Equals("*") ) { asterisked = true; token.GetNextToken(); } // Token now stored should be the name of an exset nxsstring exset_name = token.GetToken(); // Now grab the equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' in EXSET definition but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } assert( charBlockPtr != NULL ); CharactersBlock& charBlock = *charBlockPtr; IntSet s; int totalChars = charBlock.GetNCharTotal(); SetReader( token, totalChars, s, charBlock, SetReader::charset ).Run(); exsets[exset_name] = s; if( asterisked ) { def_exset = exset_name; charBlock.ApplyExset(s); } } /** * @method HandleTaxset [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * ? */ void AssumptionsBlock::HandleTaxset( NexusToken& token ) { bool asterisked = false; // Next token should be either an asterisk or the name of a taxset token.GetNextToken(); if( token.Equals("*") ) { asterisked = true; token.GetNextToken(); } // Token now stored should be the name of a taxset nxsstring taxset_name = token.GetToken(); // Now grab the equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' in TAXSET definition but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } IntSet s; int totalTaxa = taxa.GetNumTaxonLabels(); SetReader( token, totalTaxa, s, *this, SetReader::taxset ).Run(); taxsets[taxset_name] = s; if( asterisked ) def_taxset = taxset_name; } /** * @method Read [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * This function provides the ability to read everything following * the block name (which is read by the Nexus object) to the end or * endblock statement. Characters are read from the input stream * in. Overrides the pure virtual function in the base class. */ void AssumptionsBlock::Read( NexusToken& token ) { isEmpty = false; // this should be the semicolon after the block name // token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' after "; errormsg += id; errormsg += " block name, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } for(;;) { token.GetNextToken(); if( token.Equals("EXSET") ) { HandleExset( token ); } else if( token.Equals("TAXSET") ) { HandleTaxset( token ); } else if( token.Equals("CHARSET") ) { HandleCharset( token ); } else if( token.Equals("END") ) { HandleEndblock( token ); break; } else if( token.Equals("ENDBLOCK") ) { HandleEndblock( token ); break; } else { SkippingCommand( token.GetToken() ); do { token.GetNextToken(); } while( !token.AtEOF() && !token.Equals(";") ); if( token.AtEOF() ) { errormsg = "Unexpected end of file encountered"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } } /** * @method Reset [void:protected] * * Prepares for reading a new ASSUMPTIONS block. * Overrides the pure virtual function in the base class. */ void AssumptionsBlock::Reset() { isEmpty = true; exsets.erase( exsets.begin(), exsets.end() ); taxsets.erase( taxsets.begin(), taxsets.end() ); charsets.erase( charsets.begin(), charsets.end() ); def_taxset = ""; def_charset = ""; def_exset = ""; } /** * @method Report [void:public] * @param out [ostream&] the output stream to which to write the report * * This function outputs a brief report of the contents of this ASSUMPTIONS block. * Overrides the pure virtual function in the base class. */ void AssumptionsBlock::Report( std::ostream& out ) { out << endl; out << id << " block contains the following:" << endl; if( charsets.empty() ) out << " No character sets were defined" << endl; else { IntSetMap::const_iterator charsets_iter = charsets.begin(); if( charsets.size() == 1 ) { out << " 1 character set defined:" << endl; out << " " << (*charsets_iter).first << endl; } else { out << " " << charsets.size() << " character sets defined:" << endl; for( ; charsets_iter != charsets.end(); charsets_iter++ ) { nxsstring nm = (*charsets_iter).first; out << " " << nm; if( nm == def_charset ) out << " (default)"; out << endl; } } } if( taxsets.empty() ) out << " No taxon sets were defined" << endl; else { IntSetMap::const_iterator taxsets_iter = taxsets.begin(); if( taxsets.size() == 1 ) { out << " 1 taxon set defined:" << endl; out << " " << (*taxsets_iter).first << endl; } else { out << " " << taxsets.size() << " taxon sets defined:" << endl; for( ; taxsets_iter != taxsets.end(); taxsets_iter++ ) { nxsstring nm = (*taxsets_iter).first; out << " " << nm; if( nm == def_taxset ) out << " (default)"; out << endl; } } } if( exsets.empty() ) out << " No exclusion sets were defined" << endl; else { IntSetMap::const_iterator exsets_iter = exsets.begin(); if( exsets.size() == 1 ) { out << " 1 exclusion set defined:" << endl; out << " " << (*exsets_iter).first << endl; } else { out << " " << exsets.size() << " exclusion sets defined:" << endl; for( ; exsets_iter != exsets.end(); exsets_iter++ ) { nxsstring nm = (*exsets_iter).first; out << " " << nm; if( nm == def_exset ) out << " (default)"; out << endl; } } } out << endl; } /** * @method SetCallback [void:public] * @param p [CharactersBlock*] the object to be called in the event of a change in character status * * A CHARACTERS, DATA, or ALLELES block can call this function to specify that * it is to receive notification when the current taxon or character set * changes (e.g., an "EXSET *" command is read or a program requests that * one of the predefined taxon sets, character sets, or exsets be applied). * Normally, a CharactersBlock-derived object calls this function upon * entering its MATRIX command, since when that happens it becomes the * primary data-containing block. */ void AssumptionsBlock::SetCallback( CharactersBlock* p ) { charBlockPtr = p; } /** * @method TaxonLabelToNumber [void:protected] * @param s [nxsstring&] the taxon label to convert * * Converts a taxon label to a number corresponding to * the taxon's position within the list maintained by * the TaxaBlock object. This method overrides the * virtual function of the same name in the NexusBlock * base class. If s is not a valid taxon label, returns * the value 0. */ int AssumptionsBlock::TaxonLabelToNumber( nxsstring s ) { int i; try { i = 1 + taxa.FindTaxon(s); } catch( TaxaBlock::nosuchtaxon ) { i = 0; } return i; } tv-0.5/ncl-2.0/src/xnexus.h0000775000076400007640000000036107575350627012330 00000000000000#ifndef __XNEXUS_H #define __XNEXUS_H // // XNexus exception class // class XNexus { public: nxsstring msg; std::streampos pos; long line; long col; XNexus( nxsstring s, std::streampos fp = 0, long fl = 0L, long fc = 0L ); }; #endif tv-0.5/ncl-2.0/src/discretedatum.h0000775000076400007640000000040607236527112013620 00000000000000#ifndef __DISCRETEDATUM_H #define __DISCRETEDATUM_H // // DiscreteDatum class // class DiscreteDatum { int* states; friend class DiscreteMatrix; public: DiscreteDatum(); ~DiscreteDatum(); void CopyFrom( const DiscreteDatum& other ); }; #endif tv-0.5/ncl-2.0/src/xnexus.cpp0000775000076400007640000000230207575350627012660 00000000000000#include "nexusdefs.h" #include "xnexus.h" bool stri_equal::operator()(const nxsstring& x, const nxsstring& y) const { nxsstring::const_iterator px = x.begin(); nxsstring::const_iterator py = y.begin(); while( px != x.end() && py != y.end() ) { if( toupper(*px) != toupper(*py) ) return false; ++px; ++py; } return ( x.size() == y.size() ) ? true : false; } /** * @class XNexus * @file xnexus.h * @file xnexus.cpp * @author Paul O. Lewis * @copyright Copyright © 1999. All Rights Reserved. * @variable col [long:public] column of current line * @variable line [long:public] current line in file * @variable msg [nxsstring&:public] nxsstring to hold message * @variable pos [long:public] current file position (for Metrowerks compiler, type is streampos rather than long) * @see NexusReader * * Exception class that conveys a message specific to the problem encountered. */ /** * @constructor * * Copies s to msg. Note: for Metrowerks compiler, type of pos is streampos rather than long. */ XNexus::XNexus( nxsstring s, std::streampos fp, long fl /* = 0L */, long fc /* = 0L */ ) : pos(fp), line(fl), col(fc) { msg = s; } tv-0.5/ncl-2.0/src/treesblock.cpp0000775000076400007640000004137510220532530013450 00000000000000#include "nexusdefs.h" #include "xnexus.h" #include "nexustoken.h" #include "nexus.h" #include "taxablock.h" #include "treesblock.h" using namespace std; /** * @class TreesBlock * @file taxablock.h * @file taxablock.cpp * @author Paul O. Lewis * @copyright Copyright © 1999. All Rights Reserved. * @variable translateList [AssocList:private] storage for translation table (if any) * @variable treeName [LabelList:private] storage for tree names * @variable treeDescription [LabelList:private] storage for tree descriptions * @variable rooted [BoolVect:private] stores information about rooting for each tree * @variable ntrees [int:private] number of trees stored * @see Nexus * @see NexusBlock * @see NexusReader * @see NexusToken * @see TaxaBlock * @see XNexus * * This class handles reading and storage for the Nexus block TREES. * It overrides the member functions Read and Reset, which are abstract * virtual functions in the base class NexusBlock. The translation table * (if one is supplied) is stored in the AssocList translateList. The * tree names are stored in the LabelList treeName and the tree descriptions * in the LabelList treeDescription. Information about rooting of trees * is stored in the BoolVect rooted. * *

Below is a table showing the correspondence between the elements of a * TREES block and the variables and member functions that can be used * to access each piece of information stored. * *

* * * *
Nexus command * Data Members * Member Functions *
TRANSLATE * AssocList translateList * No access functions defined *
TREE * LabelList treeName *
BoolVect rooted *
nxsstring GetTreeName() *
nxsstring GetTreeDescription() *
int GetNumTrees() *
int GetNumDefaultTree() *
int IsDefaultTree() *
int IsRootedTree() *
*/ /** * @constructor * * Initializes id to "TREES" and ntrees and defaultTrees to 0. */ TreesBlock::TreesBlock( TaxaBlock& tb ) : ntrees(0), defaultTree(0), taxa(tb), NexusBlock() { id = "TREES"; } /** * @destructor * * Flushes translateList, rooted, and treeList. */ TreesBlock::~TreesBlock() { translateList.erase( translateList.begin(), translateList.end() ); rooted.erase( rooted.begin(), rooted.end() ); treeName.erase( treeName.begin(), treeName.end() ); treeDescription.erase( treeDescription.begin(), treeDescription.end() ); } /** * @method Read [void:protected] * @param token [NexusToken&] the token used to read from in * @throws XNexus * * This function provides the ability to read everything following the block name * (which is read by the Nexus object) to the end or endblock statement. * Characters are read from the input stream in. Overrides the * abstract virtual function in the base class. */ void TreesBlock::Read( NexusToken& token ) { isEmpty = false; token.GetNextToken(); // this should be the semicolon after the block name if( !token.Equals(";") ) { errormsg = "Expecting ';' after TREES block name, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } for(;;) { token.GetNextToken(); if( token.Equals("TRANSLATE") ) { int numEntries = taxa.GetNumTaxonLabels(); // rdmp if (numEntries == 0) { // Stand alone TREES block do { // get the key token.GetNextToken(); nxsstring skey = token.GetToken(); // get the value token.GetNextToken(); nxsstring sval = token.GetToken(); // add the Association object to the translate list translateList[ skey ] = sval; token.GetNextToken(); if (!token.Equals (";") && !token.Equals (",")) { errormsg = "Expecting ',' or ';' in TRANSLATE command, but found "; errormsg +=token.GetToken(); errormsg += " instead."; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } while (!token.Equals (";")); } else { for( int k = 0; k < numEntries; k++ ) { // create the Association // get the key token.GetNextToken(); nxsstring skey = token.GetToken(); // get the value token.GetNextToken(); nxsstring sval = token.GetToken(); // add the Association object to the translate list translateList[ skey ] = sval; // this should be a comma, unless we are at the last pair, in // which case it should be a semicolon token.GetNextToken(); if( k < numEntries-1 ) { if( !token.Equals(",") ) { errormsg = "Expecting ',' to terminate each number/name pair in TRANSLATE command, but found "; errormsg +=token.GetToken(); errormsg += " instead\nPerhaps there are fewer taxa in the tree file than in the stored data."; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } else { if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate the TRANSLATE command, but found "; errormsg +=token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } } // rdmp1c } else if( token.Equals("TREE") ) { // this should be either an asterisk or a tree name token.GetNextToken(); if( token.Equals("*") ) { defaultTree = ntrees; // ntrees is not incremented until entire tree command has been read // this should be tree name token.GetNextToken(); } // save the tree name as the key nxsstring skey = token.GetToken(); // this should be an equals sign token.GetNextToken(); if( !token.Equals("=") ) { errormsg = "Expecting '=' after tree name in TREE command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // this should be either a tree description or a command comment specifying // whether this tree is to be rooted ([&R]) or unrooted ([&U]). token.SetLabileFlagBit( NexusToken::saveCommandComments ); token.SetLabileFlagBit( NexusToken::parentheticalToken ); token.SetLabileFlagBit( NexusToken::toEndOfTree ); token.GetNextToken(); // Paul Lewis' original code just looked for the [&R] command comment, but we want the weight as well nxsstring s = token.GetToken(); if( s.size() < 2 ) { errormsg = "Expecting command comment or tree description in TREE command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } while (s[0] == '&') { // command comment found if( s[1] == 'R' || s[1] == 'r' ) rooted.push_back(true); else if( s[1] == 'U' || s[1] == 'u' ) rooted.push_back(false); else if (s[1] == 'W' || s[1] == 'u') // rdmp { // weight of tree double weight = -1.0; int pos = s.find ("/", 2); nxsstring num; if (pos > 0 && pos < s.length()) { // fractional weighting float numerator, denominator; num.assign (s, 2, s.size() - pos); numerator = atof( num.c_str() ); num.assign (s, pos + 1, s.size() - pos); denominator = atof( num.c_str() ); weight = numerator / denominator; } else { num.assign (s, 2, s.size() - 2); weight = atof( num.c_str() ); } treeWeight.push_back (weight); } else { errormsg = "["; errormsg += token.GetToken(); errormsg += "] is not a valid command comment in a TREE command"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } // Get next token token.SetLabileFlagBit( NexusToken::saveCommandComments ); token.SetLabileFlagBit( NexusToken::parentheticalToken ); token.SetLabileFlagBit( NexusToken::toEndOfTree ); token.GetNextToken(); if( s.size() < 2 ) { errormsg = "Expecting command comment or tree description in TREE command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } s = token.GetToken(); } // Tree description nxsstring sval = token.GetToken(); // this should be a semicolon token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate the TREE command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } ntrees++; treeName.push_back( skey ); treeDescription.push_back( sval ); if( rooted.size() < ntrees ) rooted.push_back(false); // rdmpc if( treeWeight.size() < ntrees ) treeWeight.push_back(1.0); } else if( token.Equals("END") ) { // get the semicolon following END token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate the END command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } break; } else if( token.Equals("ENDBLOCK") ) { // get the semicolon following ENDBLOCK token.GetNextToken(); if( !token.Equals(";") ) { errormsg = "Expecting ';' to terminate the ENDBLOCK command, but found "; errormsg += token.GetToken(); errormsg += " instead"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } break; } else { SkippingCommand( token.GetToken() ); do { token.GetNextToken(); } while( !token.AtEOF() && !token.Equals(";") ); if( token.AtEOF() ) { errormsg = "Unexpected end of file encountered"; throw XNexus( errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn() ); } } } } /** * @method Reset [void:protected] * * Flushes treeList, translateList and rooted, and sets ntrees to 0 * in preparation for reading a new TREES block. */ void TreesBlock::Reset() { isEmpty = true; treeName.erase( treeName.begin(), treeName.end() ); treeDescription.erase( treeDescription.begin(), treeDescription.end() ); translateList.erase( translateList.begin(), translateList.end() ); rooted.erase( rooted.begin(), rooted.end() ); ntrees = 0; } /** * @method GetNumDefaultTree [int:public] * * Returns the 0-offset index of the default tree, which will be 0 if there is * only one tree stored or no trees stored. If more than one tree is stored, * the default tree will be the one specifically indicated by the user * (using an asterisk in the data file) to be the default tree (or 0 if the * user failed to specify. */ int TreesBlock::GetNumDefaultTree() { return defaultTree; } /** * @method GetNumTrees [int:public] * * Returns the number of trees stored in this TreesBlock object. */ int TreesBlock::GetNumTrees() { return ntrees; } /** * @method GetTreeName [char*:public] * @param i [int] the index of the tree for which the name is to be returned * * Returns the name of the tree stored at position i in treeList. Assumes * that i will be in the range 0...ntrees-1. */ nxsstring TreesBlock::GetTreeName( int i ) { assert( i >= 0 ); assert( i < ntrees ); return treeName[i]; //trash return treeList.GetKey(i); } static nxsstring& blanks_to_underscores( nxsstring& s ) { int len = s.length(); for( int k = 0; k < len; k++ ) { if( s[k] == ' ' ) s[k] = '_'; } return s; } /** * @method GetTreeWeight [double:public] * @param i [int] the index of the tree for which the weight is to be returned * * Returns the weight of the tree stored at position i in treeList. Assumes * that i will be in the range 0...ntrees-1. */ double TreesBlock::GetTreeWeight ( int i) { assert( i >= 0 ); assert( i < ntrees ); return treeWeight[i]; } /** * @method GetTranslatedTreeDescription [nxsstring:public] * @param i [int] the index of the tree for which the description is to be returned * * Returns the description of the tree stored at position i in treeList. Assumes * that i will be in the range 0...ntrees-1. Node numbers will be translated to * names in the resulting tree description. Use GetTreeDescription if translation * is not desired. When translating, blank spaces in names are converted to * underscores. */ nxsstring TreesBlock::GetTranslatedTreeDescription( int i ) { assert( i >= 0 ); assert( i < ntrees ); nxsstring s = treeDescription[i]; nxsstring x; x += s[0]; int slen = s.size(); assert( slen > 1 ); for( int k = 1; k < slen; k++ ) { char prev = s[k-1]; char curr = s[k]; if( isdigit(curr) && ( prev == '(' || prev == ',' ) ) { nxsstring ns; ns += curr; for(;;) { curr = s[k+1]; prev = s[k++]; if( isdigit(curr) ) ns += curr; else { --k; break; } } nxsstring nss = translateList[ns]; // rdmp // Hack: surround name in single quotes so that my parsing code // will work. For example, we need to ensure that a name like 'a-b' // is parsed correctly. Without single quotes the hyphen will // generate a syntax error. x += "'"; x += blanks_to_underscores( nss ); x += "'"; } else x += curr; } return x; } /** * @method GetTreeDescription [nxsstring:public] * @param i [int] the index of the tree for which the description is to be returned * * Returns the description of the tree stored at position i in treeList. Assumes * that i will be in the range 0...ntrees-1. */ nxsstring TreesBlock::GetTreeDescription( int i ) { assert( i >= 0 ); assert( i < ntrees ); return treeDescription[i]; //trash return treeList.GetValue(i); } /** * @method IsDefaultTree [int:public] * @param i [int] the index of the tree in question * * Returns true if the ith tree (0-offset) is the default tree, 0 otherwise. * Assumes that i will be in the range 0...ntrees-1. */ int TreesBlock::IsDefaultTree( int i ) { assert( i >= 0 ); assert( i < ntrees ); if( i == GetNumDefaultTree() ) return 1; else return 0; } /** * @method IsRootedTree [int:public] * @param i [int] the index of the tree in question * * Returns true if the ith tree (0-offset) is rooted, 0 otherwise. * Assumes that i will be in the range 0...ntrees-1. */ int TreesBlock::IsRootedTree( int i ) { assert( i >= 0 ); assert( i < ntrees ); return (int)rooted[i]; } /** * @method Report [void:public] * @param out [ostream&] the output stream to which to write the report * * This function outputs a brief report of the contents of this taxa block. * Overrides the abstract virtual function in the base class. */ void TreesBlock::Report( std::ostream& out ) { out << endl; out << id << " block contains "; if( ntrees == 0 ) { out << "no trees" << endl; } else if( ntrees == 1 ) out << "one tree" << endl; else out << ntrees << " trees" << endl; if( ntrees == 0 ) return; for( int k = 0; k < ntrees; k++ ) { out << '\t' << (k+1) << '\t' << treeName[k]; out << "\t("; if( rooted[k] ) out << "rooted"; else out << "unrooted"; out << ", weight = " << treeWeight[k]; // rdmp if( defaultTree == k ) out << ",default tree)" << endl; else out << ')' << endl; } } // rdmp // Return translated token. We need this because the code for // GetTranslatedTreeDescription is brain dead. It assumes // user will only have numbers to translate. // Need better testing (what happens if label is missing?). nxsstring TreesBlock::GetTranslatedLabel (std::string skey) { nxsstring s (skey.c_str()); nxsstring result = translateList[s]; return result; } tv-0.5/ncl-2.0/html/0000777000076400007640000000000011432555766011057 500000000000000tv-0.5/ncl-2.0/html/NexusClassLibrary.html0000775000076400007640000011273007235522110015266 00000000000000

NEXUS Class Library (NCL) Release 2

Author: Paul O. Lewis
Copyright © 1999. All Rights Reserved.
Last modified: October 14, 1999

Contents

What is the NCL?

The NEXUS Class Library (NCL) is an integrated collection of C++ classes designed to provide a NEXUS data file reader that is both easy to implement and easily extensible.

A word about the intended audience is in order before we get too far along (no need to waste your time if the NCL will not be helpful to you). The intended audience for both this documentation and the accompanying class library comprises computer programmers who wish to endow their C++ programs with the ability to read NEXUS data files. If you are not a programmer and simply use NEXUS files as a means of inputting data to the programs you use for analyzing your data, the NCL is not something that will be useful to you. The NCL is also not for you if you are a programmer but do not use the C++ language, since the NCL depends heavily on the object oriented programming features built into C++.

The NEXUS data file format was specified in the publication cited below. Please read this paper for further information about the format specification itself; the documentation for the NCL does not attempt to explain this.

Maddison, D. R., D. L. Swofford, and Wayne P. Maddison. 1997. NEXUS: an extensible file format for systematic information. Systematic Biology 46(4): 590-621.

The basic goal of the NCL is to provide a relatively easy way to endow a C++ program with the ability to read NEXUS data files. The steps necessary to use the NCL to create a bare-bones program that can read a NEXUS data file are simple and few (see below), and it is hoped that the availability of this class library will encourage the use of the NEXUS format. This will in turn encourage consistency in how programs read NEXUS files and how programs respond to errors in data files.

A further benefit can be seen by looking at the large number of special data file formats that are out there. This places an extra burden on the end user, who must deal with an increasing number of file formats all differing in a number of ways. To port one's data to another file format often involves manual manipulation of the data, an activity that is inherently dangerous and probably has resulted in the corruption of many data files. At the very least, the large number of formats in existance has led to a proliferation of data file variants. With many copies of a given data file on a hard disk, each formatted differently for various analysis programs, it becomes very easy to change one (say, correct a datum found to be in error) and fail to correct the other versions. The NEXUS file format provides a means for keeping one master copy of the data and using it with several programs without modification. The NCL provides a means for encouraging programmers to use the NEXUS file format in future programs they write.

Obtaining the NCL?

The current version of the NCL is available by anonymous ftp from alleyn.eeb.uconn.edu (137.99.27.148) in the directory pub/ncl2. The NCL is available in two archive formats: compressed tar archive or zip format. Download the compressed tar archive if you plan to develop only for the Unix platform; the zip file contains everything in the tar file as well as project files for both the Borland and Metrowerks IDEs.

The links below are provided to make the anonymous ftp access easier:

Compressed tar file
Zip file
README file

Characteristics of the NCL

Portability

The NCL has been designed to be as portable as possible for a C++ class library. The NCL does make use of the ANSI Standard C++ Library, which may cause problems if the compiler you are using is a couple of years old or older. The standard library has been adopted by all modern compilers, including the most recent versions of Metrowerks CodeWarrier Pro and Borland C++, as well as the EGCS compiler (a free compiler available for most unix platforms). Thus, if your compiler chokes on the template-based container classes used in the NCL (such as vector, list, map, string, etc.) then you will need to upgrade your compiler in order to use the NCL. Assuming you have a modern compiler, however, the NCL is fully portable across Mac, Windows, and most Unix platforms.

Cross-platform features

I have attempted to create the NCL in such a way that one is not limited in the type of platform targeted. For example, NEXUS files can contain "output comments" that are supposed to be displayed in the output of the program reading the NEXUS file. Such comments are handled automatically by the NCL, and are sent to a virtual function that can be overridden by you in a derived class. This provides a means for you to tailor the output of such comments to the platform of your choice. For example, if you are writing a standard Unix console application (i.e., not a graphical X-Windows application), you might want such output comments to simply be sent to standard output or to an ofstream object. For a graphical Windows, MacIntosh or X-Windows application, you might deem it more user-friendly to pop up a message box with the output comment as the message. This would ensure that the user noticed the output comment. You also have the option of having your program completely ignore such comments in the data file.

The NCL provides similar hooks for noting the progress in reading the data file. For example, a virtual function called EnteringBlock is called and provided with the name of the block about to be read. You can override EnteringBlock in your derived class to allow, for example, a message to be displayed in a status bar at the bottom of your program's main window (in a graphical application) indicating which block is currently being read. Other such virtual functions include SkippingBlock (to allow users to be warned that your program is ignoring a block in the data file), SkippingCommand (to allow users to be warned about particular commands being skipped within a block), and NexusError, which is the function called whenever anything unexpected happens when reading the file.

Extensibility

The basic tools provided in the NCL allow you to create your own NEXUS blocks and use them in your program. This makes it easy to define a private block to contain commands that only your program recognizes, allowing your users to run your program in batch mode (see the section below entitled General Advice for more information on this topic).

Current limitations

The main current limitation is that the NCL is incomplete. Some standard NEXUS blocks have been provided with this distribution, but because the NEXUS format is so extensive, I have not had the time to write code implementing even all of the standard blocks described in the paper cited above (or even all of the standard blocks I have included!). Here is a summary table showing what has been implemented thus far:
Block

Current Limitations

ASSUMPTIONS Only TAXSETS, CHARSETS, and EXSETS have been implemented thus far.
ALLELES Cannot yet handle transposed MATRIX, and only DATAPOINT=STANDARD is implemented (however, as far as I know, no other program in existance handles anything but standard datapoints so this is not a great limitation at the moment).
CHARACTERS Only ITEMS=STATES and STATESFORMAT=STATESPRESENT has been implemented thus far, and DATATYPE=CONTINUOUS has not been implemented.
DISTANCES No limitations, completely implemented
DATA Since the DATA block is essentially the same as a CHARACTERS block, the same limitations apply.
TAXA No limitations, completely implemented
TREES No limitations, completely implemented
While the limitations for the CHARACTERS block may seem a bit extreme, this block is nevertheless implemented to the point where almost all existing morphological and molecular data sets can be read. This is because most existing programs (including MacClade and PAUP) are limited in the same ways. In order to put my efforts where they are most needed, I have delayed finishing the work on the CHARACTERS block until it becomes apparent that someone wishes to write a program with the capability to read data files having other ITEMS or STATESFORMAT options, or a data file containing continuous data. If you fall into this category, by all means contact me and I will consider pushing ahead!

The NCL is written in C++ and designed for use in a C++ program. It is not available in a C version (or any other language for that matter), which will represent a limitation if you are not a C++ programmer. I do intend to produce a Java version eventually (once the bugs are worked out of the C++ version). I have written the NCL in a style that mimics Java (i.e., no operators are defined, objects are passed by reference whenever possible, etc.) so that this conversion, when it happens, will be as easy as possible.

The NCL has been designed to be portable, easy-to-use, and informative in the error messages produced. It will be apparent to anyone who looks very closely at the code that efficiency has been sacrificed to meet these goals. You can expect the minimum size of an executable handling only the reading of TAXA and TREES blocks to be at least 92 KB (94208 bytes). Adding the ability to read the CHARACTERS block pushes this up to 135 KB (138752 bytes). These figures are based on compiling a Win32 console program with Borland C++ 5.02 compiler with no optimizations. Speed has also been sacrificed, however I think it can be argued that speed in reading a data file is not all that important compared to the NCL's other benefits.

Building a NEXUS File Reader

This section illustrates how you could build a simple NEXUS file reader application capable of reading in a TAXA and a TREES block. Note that the application NCLTEST, for which you have the source code, is essentially an expanded version of this sample program that can read all of the NEXUS blocks incorporated to date into the NCL. To keep things simple, we will just write output to an ofstream object (nothing graphical here).

As you work through this example, feel free to look into the NCL classes in more detail. Each class has its own documentation in the form of a web page having a name of the form NCLClassName.html, where NCLClassName is replaced by the name of the class. For example, the NexusBlock class is described in the file NexusBlock.html. An index to all classes in the NCL is provided at the end of this document for quick access to the full range of class-specific web pages.

The Main Function

int main()
{
  taxa = new TaxaBlock();
  trees = new TreesBlock(*taxa);

  MyNexus nexus( "testfile.nex", "output.txt" );
  nexus.Add( taxa );
  nexus.Add( trees );

  MyToken token( nexus.inf, nexus.outf );
  nexus.Execute( token );

  taxa->Report( nexus.outf );
  trees->Report( nexus.outf );

  return 0;
}

Creating block objects. The first two lines of main involve the creation of objects corresponding to the two types of NEXUS blocks we want our program to recognize. TaxaBlock is declared in the header file "taxablock.h" and defined in the source code file "taxablock.cpp", whereas the TreesBlock class is declared in "treesblock.h" and defined in "treesblock.cpp". Note that the TreesBlock constructor requires a reference to an object of type TaxaBlock. This is because a TREES block in a NEXUS data file requires the number of taxa and the taxon labels to have been previously definined earlier in the data file. In the NCL, any block that defines taxon labels stores this information in the TaxaBlock object, and any block that needs such information requires a reference to the TaxaBlock object in its constructor.

Adding the block objects to the NEXUS object. The next three lines involve creating a NEXUS object and adding our two block objects to a linked list maintained by the NEXUS object. The MyNexus class is derived from the Nexus class, which is declared in "nexus.h" and defined in "nexus.cpp". Objects cannot be created from the Nexus class alone, as it contains pure virtual functions that must be overridden in a derived class. Examples of pure virtual functions in Nexus that must be overridden are: EnteringBlock, SkippingBlock, and NexusError. The reason the Nexus object must maintain a list of block ojects is so that it can figure out who is responsible for reading each block found in the data file. The block objects taxa and trees have each inherited an id variable of type char* that stores their block name (i.e., "TAXA" for the TaxaBlock and "TREES" for the TreesBlock). When the Nexus object's Execute method encounters a block name, it searches its linked list of block objects until it finds one whose id variable is identical to the name of the block encountered. It then calls the Read function of that block object to do the work of reading the block from the data file and storing its contents. It is possible of course that a block name will appear in a data file for which there is no corresponding block object. In this case, the Nexus Execute method calls the SkippingBlock method to report the fact that it is skipping over the contents of the unknown block.

Reading the data file. The next two lines create a token object (MyToken is derived from the NexusToken class), and initiate the reading of the NEXUS data file using the Nexus Execute function. The input and output files are created within the MyNexus class. While this is not required, it facilitates handling messages generated while the data file is being read. The NexusToken class has one virtual member function - OutputComment - which enables you to control how output comments are displayed. The NexusToken version of OutputComment does nothing, so you must derive your own token class from NexusToken and override the OutputComment method in order for the output comments in the data file to be displayed. The main function of the NexusToken class is to provide a means for grabbing NEXUS tokens one by one from the data file. Calling the GetNextToken function reads and stores the next token found in the data file, correctly handling any comments found along the way. This greatly simplifies reading a NEXUS data file.

Reporting on block objects' contents. The last two lines call the Report functions of each of the blocks. This just spits out a summary of any data contained in these objects that has been read from the data file.

Deriving From the Nexus Class

Note that the ifstream is opened in binary mode. You should always open your input file in binary mode so that the file can be read properly regardless of the platform on which it was created. For example, suppose someone created a NEXUS data file on a MacIntosh and wanted to read it with your program, which is running on a Windows 95 machine. Opening the file in binary mode allows the NexusToken object you are using to recognize the newline character in the Mac file as such, even though MacIntosh computers use a different symbol (ASCII 13) to represent the newline character than computers running Windows (which use the ASCII 13, ASCII 10 combination for newlines).

Also, note the special version of one line in the NexusError method that is necessary when using the Metrowerks CodeWarrior Professional (Release 4) compiler. Metrowerks uses a class called streampos to keep track of the file position rather than typedefing streampos to a simple long value. You must call the streampos object's offset() member function to obtain a value that you can use (no automatic conversions from streampos to long). If you are using CoeWarrior Pro Release 5, the special handling is not necessary (there was apparently a bug in Release 4 that has since been fixed).

class MyNexus : public Nexus
{
   public:
      ifstream inf;
      ofstream outf;

      MyNexus( char* infname, char* outfname ) : Nexus() {
         inf.open( infname, ios::binary );
         outf.open( outfname );
      }

      ~MyNexus() {
         inf.close();
         outf.close();
      }

      void EnteringBlock( char* blockName ) {
         cout << "Reading \"" << blockName << "\" block..." << endl;
         outf << "Reading \"" << blockName << "\" block..." << endl;
      }

      void SkippingBlock( char* blockName ) {
         cout << "Skipping unknown block (" << blockName << ")..." << endl;
         outf << "Skipping unknown block (" << blockName << ")..." << endl;
      }

      void OutputComment( char* msg ) {
         outf << msg;
      }

      void NexusError( char* msg, streampos pos, long line, long col ) {
         cerr << endl;
         cerr << "Error found at line " << line;
         cerr << ", column " << col;
#if defined( __MWERKS__ )
         // if using MetroWerks CodeWarrior Pro 5, use other (normal) version
         cerr << " (file position " << pos.offset() << "):" << endl;
#else
         cerr << " (file position " << pos << "):" << endl;
#endif
         cerr << msg << endl;

         outf << endl;
         outf << "Error found at line " << line;
         outf << ", column " << col;
#if defined( __MWERKS__ )
         // if using MetroWerks CodeWarrior Pro 5, use other (normal) version
         outf << " (file position " << pos.offset() << "):" << endl;
#else
         outf << " (file position " << pos << "):" << endl;
#endif
         outf << msg << endl;

         exit(0);
      }
};

Deriving From the NexusToken Class

We derive our own token reader from the NexusToken class in order to display the output comments present in the data file (if any). The virtual function OutputComment in the base class is overridden to accomplish this.
class MyToken : public NexusToken
{
   ostream& out;

   public:
      MyToken( istream& is, ostream& os ) : out(os), NexusToken(is) {}
      void OutputComment( char* msg ) {
         cout << msg << endl;
         out << msg << endl;
      }
};

Putting It All Together

Here is the entire program. Note that in order for this to link properly, you will need to also compile the following files included with the NCL (and instruct your linker to link them into your main executable): nexustoken.cpp, labellist.cpp, nexus.cpp, nexusblock.cpp, taxablock.cpp, and treesblock.cpp. The documentation for individual classes within the NCL provides a "See also" section for each class. The classes listed in this "See also" section indicate which other NCL classes the class being documented depends on. Use the "See also" lists to figure out which files you will need to compile for any particular project.
#include <stdlib.h>
#include <fstream.h>

#include "nexustoken.h"
#include "labellist.h"
#include "nexus.h"
#include "taxablock.h"
#include "treesblock.h"

TaxaBlock* taxa;
TreesBlock* trees;

class MyToken : public NexusToken
{
   ostream& out;

   public:
      MyToken( istream& is, ostream& os ) : out(os), NexusToken(is) {}
      void OutputComment( char* msg ) {
         cout << msg << endl;
         out << msg << endl;
      }
};

class MyNexus : public Nexus
{
   public:
      ifstream inf;
      ofstream outf;

      MyNexus( char* infname, char* outfname ) : Nexus() {
         inf.open( infname, ios::binary );
         outf.open( outfname );
      }

      ~MyNexus() {
         inf.close();
         outf.close();
      }

      void EnteringBlock( char* blockName ) {
         cout << "Reading \"" << blockName << "\" block..." << endl;
         outf << "Reading \"" << blockName << "\" block..." << endl;
      }

      void SkippingBlock( char* blockName ) {
         cout << "Skipping unknown block (" << blockName << ")..." << endl;
         outf << "Skipping unknown block (" << blockName << ")..." << endl;
      }

      void OutputComment( char* msg ) {
         outf << msg;
      }

      void NexusError( char* msg, streampos pos, long line, long col ) {
         cerr << endl;
         cerr << "Error found at line " << line;
         cerr << ", column " << col;
#if defined( __MWERKS__ )
         cerr << " (file position " << pos.offset() << "):" << endl;
#else
         cerr << " (file position " << pos << "):" << endl;
#endif
         cerr << msg << endl;

         outf << endl;
         outf << "Error found at line " << line;
         outf << ", column " << col;
#if defined( __MWERKS__ )
         outf << " (file position " << pos.offset() << "):" << endl;
#else
         outf << " (file position " << pos << "):" << endl;
#endif
         outf << msg << endl;

         exit(0);
      }
};

int main()
{
  taxa = new TaxaBlock();
  trees = new TreesBlock(*taxa);

  MyNexus nexus( "testfile.nex", "output.txt" );
  nexus.Add( taxa );
  nexus.Add( trees );

  MyToken token( nexus.inf, nexus.outf );
  nexus.Execute( token );

  taxa->Report( nexus.outf );
  trees->Report( nexus.outf );

  return 0;
}

A Sample Data File

Here is a sample data file that exercises a lot of the features of the NEXUS file reader we have just created. First, there are both output and regular comments scattered around. Some are between tokens, some occur at the beginning of a token, and still others begin right after a token. Some comments even have nested within them words surrounded by square brackets. There are also blocks in this data file (i.e., the gdadata block) that are not recognized by the NEXUS file reader we have created. The NEXUS reader handles all of these situations without needing any code from you!

Feel free to introduce various sorts of errors (e.g., delete semicolons, misspell keywords, etc.) into the the sample data file to get a feel for what types of error messages the NEXUS file reader generates.

#nexus

[!Output comment before first block]

begin gdadata; [this is an unknown block]
  dimensions npops=2 nloci=3;
end;

[!Let's see if we can deal with [nested] comments]

[!
What happens if we do this!
]

begin [comment at beginning of token]taxa;
  dimensions[comment at end of token] ntax=11;
  taxlabels  [comment between tokens]
      P._fimbriata
		'P. robusta'
		'P. americana'
		'P. myriophylla'
		'P. articulata'
		'P. parksii'
		'P. gracilis'
		'P. macrophylla'
		'P. polygama'
		'P. basiramia'
		'P. ciliata'
      [!output comment in TAXLABELS command]
  ;
end;

begin trees;
  translate
	1  P._fimbriata,
	2  P._robusta,
	3  P._americana,
	4  P._myriophylla,
	5  P._articulata,
	6  P._parksii,
	7  P._polygama,
	8  P._macrophylla,
	9  P._gracilis,
  10  P._basiramia,
  11  P._ciliata
  ;
  tree alpha = (1,2,((((3,4),5),6),((7,8),(9,(10,11)))));
  tree beta = (1,2,((((3,4),5),6),(7,(8,(9,(10,11))))));
end;

Creating Your Own NEXUS Block

Creating your own NEXUS block involves deriving a class from the NexusBlock base class and overriding the three pure virtual functions Read, Reset, and Report. Use the files emptyblock.cpp and emptyblock.h as templates for your own source code and header files. While creating your own block class is not a complicated endeavor, here are some things to nevertheless watch out for:
  • Be sure to document your class in the way I have done for the other blocks. I have employed a system of documentation similar to that used for the Java Development Kit. The program makedoc was supplied with your copy of NCL. This program reads the special tags in the source code comments of the NCL source files and creates HTML documentation automatically. Because the documentation is actually inside the source code files, this system makes it relatively easy both to document your source code when you write it, and also keep it up to date as you make changes later on. Some examples of the special comment style you must use to make this system work are given at the end of this section.
  • Be sure to write the Reset function in such a way that all heap memory is cleaned up (deleted). This means whenever you use the "new" keyword to allocate memory for an object that will potentially persist until the Reset method is called, you need to put code in the Reset function to delete it. Also, it is important to delete such objects in the destructor for the class as well.
  • When writing the Read function, put assert macros whereever you make an assumption, however insignificant this assumption seems at the time of writing. This tremendously speeds up the task of finding bugs when one of your assumptions turns out to not always be true!
  • When writing the Read function, put in lots of tests of the form:
    if( !token.Equals(";") ) {
    	sprintf( errormsg, "Expecting ';' but found %s instead", token.GetToken() );
    	throw XNexus(errormsg);
    }
    
    Such checks will give your users some hope of finding where they have made a mistake in constructing their data file. We all know how frustrating it can be to have a program exit with an uninformative error message.
  • Don't forget to update your main class comment if you add variables to your class's header file. This is easy to forget, since the header file does not contain any of the special documentation comments.
To use makedoc, compile makedoc for your operating system and then simply type
makedoc myblock.cpp
at the system prompt to create a help file for the class defined in myblock. Note that there can be only one class defined per source code file to use this system, and all of the special comments must be in the same file for a particular class. Here are some examples of source code comments for use with the makedoc program. Feel free to look through the NCL source code files for other examples.

Class header comment

/**
 * @class      TaxaBlock
 * @file       taxablock.h
 * @file       taxablock.cpp
 * @author     Paul O. Lewis
 * @copyright  Copyright  1999. All Rights Reserved.
 * @variable   ntax [int:private] number of taxa (set from NTAX specification)
 * @variable   taxonLabels [LabelList:private] storage for list of taxon labels
 * @see        LabelList
 * @see        Nexus
 * @see        NexusBlock
 * @see        NexusToken
 * @see        XNexus
 *
 * This class handles reading and storage for the NEXUS block TAXA.
 * It overrides the member functions Read and Reset, which are abstract
 * virtual functions in the base class NexusBlock.  The taxon names are
 * stored in an array of strings (taxonLabels) that is accessible through
 * the member functions GetTaxonLabel, AddTaxonLabel, ChangeTaxonLabel,
 * and GetNumTaxonLabels.
 */

Enumeration comment

/**
 * @enumeration
 * @enumitem  saveCommandComment [0x0001] if set, command comments expected and will be saved
 * @enumitem  parentheticalToken [0x0002] if set, parenthetical token expected
 *
 * For use with the variable labileFlags.
 */

Constructor comment

/**
 * @constructor
 *
 * Default constructor. Initializes id to "TAXA" and ntax to 0.
 */

Destructor comment

/**
 * @destructor
 *
 * Deletes the memory used by id and flushes taxonLabels.
 */

Method comment (no parameters)

/**
 * @method Reset [void:protected]
 *
 * Flushes taxonLabels and sets ntax to 0 in preparation for reading a
 * new TAXA block.
 */

Method comment (with parameters)

/**
 * @method ChangeTaxonLabel [void:public]
 * @param i [int] the taxon label number to change
 * @param s [char*] the string used to replace label i
 *
 * Changes the label for taxon i to s.  Deletes the old
 * label and reallocates enough memory to store the new
 * label.
 */

Method comment (throws exceptions)

/**
 * @method Read [void:protected]
 * @param token [NexusToken&] the token used to read from in
 * @param in [istream&] the input stream from which to read
 * @throws XNexus
 *
 * This function provides the ability to read everything following the block name
 * (which is read by the Nexus object) to the end or endblock statement.
 * Characters are read from the input stream in. Overrides the
 * abstract virtual function in the base class.
 */

Operator comment

/**
 * @operator = [NxsGDADataBlock&:public]
 * @param gdaData [const NxsGDADataBlock&] the NxsGDADataBlock to be copied
 *
 * Copies the information from gdaData to this object.
 */

Cast operator comment

/**
 * @castoperator () [double:public]
 *
 * Casts value of cell to a double.
 */

Manipulator comment

/**
 * @manipulator setleft
 *
 * Specifies the left boundary of the Table body.
 * All columns added before this point are considered
 * row headers and will be repeated for each output
 * page.
 */

General Advice

A typical program making use of this library might have the following two general characteristics:
  • Structured so that it can be compiled either as a command-line driven, Unix-style program or as a graphical application (with a Windows, MacIntosh, or XWindows Graphical User Interface, or GUI)
  • Handles a private NEXUS block that contains commands identical to those that can be entered on the command line, enabling the program to be run in batch mode
The program PAUP is perhaps the most well-known example of this type of program.

After developing several programs like this, I have come up with the following strategy that make efficient use of the object-oriented nature of the NCL. I will assume your non-graphical program will be called simply "foo" and will read a private NEXUS block named "FOO". I will assume that the GUI version will be targeted for the Windows platform, and will be colled "winfoo".

  • Create a class (call it FooBase) that encapsulates the kernel of the program. Be careful not to place any GUI code in this class. This class should be derived (publicly) from the NexusBlock class (this class will encapsulate your program's private NEXUS block).
  • In class FooBase, override the NexusBlock virtual functions Read, Reset, Report, and HandleEndblock, and any other handler functions needed to process the commands in the private block.
  • Now create a class WinFoo that handles the Windows GUI interface. Derive this class from both Nexus (so that it can serve as the Nexus reader) and from FooBase (so that it can also serve as the private block object as well as handle all the core functionality). In the WinFoo constructor, create all the NEXUS block objects needed (i.e., a CharactersBlock object and TaxaBlock object) and add these to the nexus reader using the Add function. Don't forget to "Add(this)" too so that your program can read the private block. Note that "this" is both a Nexus object as well as a NexusBlock object, so it is able to add itself to the list of blocks processed upon execution of a NEXUS data file.
  • In class WinFoo, override the Nexus virtual functions EnteringBlock, SkippingBlock, and NexusError. For instance, within NexusError, you might put up a MessageBox telling the user about an error encountered in the data file.
  • For the Unix, command-driven version, create a class foo that is derived from FooBase, overrides the Nexus and NexusBlock virtual functions (like its GUI counterpart, WinFoo), and provides a means for users to enter commands (you should create a mechanism in FooBase so that you can use the same macbinery to process commands typed in from the keyboard as you use to process commands contained in a private block).

What You Can Do For Me

I hope this library is useful to you, and it is offered free of charge so long as you don't sell it or make it part of a commercial software package. If you include the NCL as part of a program that you sell, please contact me at the address below to discuss license fees.

Although you are not obligated in any way to me as a result of using this package to improve your programs, there are a few things that you can do to help encourage me to continue improving this library. Please make use of any of the following means of support that you feel comfortable with:

  • Cite me! If you publish an announcement of a program of yours that includes the NCL, please acknowledge that your program includes the NCL.
  • Advertise me! If your program produces output either on the screen or in the form of a file, mention that your program includes the NCL in your program's output.
  • Help me fix bugs. If you discover a bug in the NCL, please let me know about it so that I can get it fixed.
  • Give me suggestions. I welcome suggestions for improving the library and making it more convenient to use.

Future Of The NCL Project

The current capabilities of the NCL are best illustrated by taking a look at some of the data files that it can successfully read. Most of these example NEXUS data files are from the "Green Plant Phylogeny Research Coordination Group" website; the two remaining data files contain multiple DISTANCES blocks (distances.nex) or multiple CHARACTERS blocks (characters.nex) to illustrate some of the formatting options available with these two NEXUS block types. These examples amply demonstrate the capabilities of the NCL as it now stands, however the NCL will continue to grow as code for recognizing more and more NEXUS blocks are added. I welcome both suggestions for improvement as well as bug reports, of course.

My current mail and email addresses as well as my phone and fax numbers are given below:

Paul O. Lewis, Assistant Professor
Department of Ecology and Evolutionary Biology
The University of Connecticut
U-43, 75 North Eagleville Road
Storrs, CT 06269-3043

Ph:    +1-860-486-2069
FAX:   +1-860-486-6364 (the departmental fax machine)
Email: plewis@uconnvm.uconn.edu
URL:   http://www.eeb.uconn.edu/faculty/plewis.htm

Index To NCL Classes

tv-0.5/ncl-2.0/Makefile.in0000664000076400007640000003346711432544630012077 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # $Id: Makefile.am,v 1.2 2005/03/29 11:38:25 rdmp1c Exp $ # The root makefile. We simply list the subdirectory with the source (src has its # own makefile, and we list any additional files (in their subdirectories) that # we want to distribute. VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = ncl-2.0 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EXEEXT = @EXEEXT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WX_CONFIG = @WX_CONFIG@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src # Include base HTML documentation, and the example NEXUS files in the distribution EXTRA_DIST = html/NexusClassLibrary.html \ data/LPCombined.nex data/P95rbcl.nex data/distances.nex \ data/GPCombined.nex data/LPMolecular.nex data/W98morph.nex data/kenrickcrane.nex \ data/GPMolecular.nex data/LPMorph.nex data/characters.nex \ data/GPMorph.nex data/P95morph.nex data/characters.ref.txt all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ncl-2.0/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu ncl-2.0/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ am__remove_distdir=: \ am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-exec-am: install-html: install-html-recursive install-info: install-info-recursive install-man: install-pdf: install-pdf-recursive install-ps: install-ps-recursive installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ install-strip .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: tv-0.5/ncl-2.0/Makefile.am0000775000076400007640000000122610222237061012046 00000000000000# $Id: Makefile.am,v 1.2 2005/03/29 11:38:25 rdmp1c Exp $ # The root makefile. We simply list the subdirectory with the source (src has its # own makefile, and we list any additional files (in their subdirectories) that # we want to distribute. SUBDIRS = src # Include base HTML documentation, and the example NEXUS files in the distribution EXTRA_DIST = html/NexusClassLibrary.html \ data/LPCombined.nex data/P95rbcl.nex data/distances.nex \ data/GPCombined.nex data/LPMolecular.nex data/W98morph.nex data/kenrickcrane.nex \ data/GPMolecular.nex data/LPMorph.nex data/characters.nex \ data/GPMorph.nex data/P95morph.nex data/characters.ref.txt tv-0.5/ncl-2.0/data/0000777000076400007640000000000011432555766011024 500000000000000tv-0.5/ncl-2.0/data/LPCombined.nex0000775000076400007640000006413107236527357013444 00000000000000#NEXUS [MacClade 3.01 registered to Equator, UCMP] BEGIN DATA; DIMENSIONS NTAX=9 NCHAR=2294; [!This is the final morphological matrix for land plants, plus selected data from the rDNAmaster alignment (contains both SSU and LSU] FORMAT MISSING=? GAP=- SYMBOLS= " 0 1 2 3 4 5 6 A C G T N"; MATRIX [ 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480 490 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800 810 820 830 840 850 860 870 880 890 900 910 920 930 940 950 960 970 980 990 1000 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100 1110 1120 1130 1140 1150 1160 1170 1180 1190 1200 1210 1220 1230 1240 1250 1260 1270 1280 1290 1300 1310 1320 1330 1340 1350 1360 1370 1380 1390 1400 1410 1420 1430 1440 1450 1460 1470 1480 1490 1500 1510 1520 1530 1540 1550 1560 1570 1580 1590 1600 1610 1620 1630 1640 1650 1660 1670 1680 1690 1700 1710 1720 1730 1740 1750 1760 1770 1780 1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000 2010 2020 2030 2040 2050 2060 2070 2080 2090 2100 2110 2120 2130 2140 2150 2160 2170 2180 2190 2200 2210 2220 2230 2240 2250 2260 2270 2280 2290 ] [ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] COLEOCHAETE ????????????????????????????????????????????????????????????????????????TGGCTCATTAAATCAGTTATAGTTT-TTTGATGGTAGCC---TACTC---GGATAACC-T-GTAA-TTCTAGAGCTATACCGTGC-CC--ATCC-GACTTC--TGGAAGG--GGTATTTGTTAGATAAAAGACCAAT----GC-TC-GCCCGGTGTT-CGGTGAATC--GATAACTCCTCG?ATCGCACGGCCT??????????????????????????????????????????????????????????????????????????????????????????????????????????GGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGA?GGCAG--GGCGCG--GATTACCC-AATCCTGATACAGGGAGGTAG--ACAATAAATAACA-TACTGGGCTTTTA-AAGTCTGGT?ATTGGAATGAGTACAATCTAAATCTC????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CATTAATCAAGAA-GAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGACCTAGG-ATCAACGGATGTTAATTTAATGACTCCGCCAGCACCTTAT--AGAAA-CAAAGTTCTTGGGTTCC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AT--CCAGTTTTCGTTC?-GGAGTGATTTGTCTG-TT-AATTC?G?TAACGAAGGAG?CCTCAGCCTGCTAACTAGGCTAACGTTTTGTTGGGAC------------ACTTGTTAGAGGGACTGTGAGGCGCTTAGCTCAT---GGA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????G-TCTCGAACGA-GAATACCTAGTAAGCGCTCGTCATCAGCGTGCGCT-ACTAC-GTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCTACCGATAGAATGCTCC---GGTGAAGCATTCGG--ATCGCCACCGGCGGGCAACTCCGGAGACGGCATG------AGAA-TT-GTTGAACCTTATCGTTTAGAGGA????????????????????????????????????????????????????CACCACGCGCCGATCCGGAGA?ATGTCGGAAGGGTTC?GAGCTGAGA?A??GTATGTTGGGACCC???AGATGGTGAACTATGCCTGA??AGG??CGAAGCCAGAGGAAACTCTGGTGGAAGATC?GCAGC?ATACTGACGTGCAAATCG?TTCGTCGGACTTG?GTATA????C?AAAGACT?ATC?AACCATGCG?GG?G?CTCCGGG?AGAGTTTT?TTTTCTTTTT?GACA?GTCG??AGC?GCCCTGGAATTGATT?C?CGGCG???GAGGGTGC?GAAAGCTGGC?AGAGCGCGCACTGGT???CGGTGTC?GGTG?AC??CCG???T??T?CCCTAGA?????0??0000?00?0?0?000?000??0000000000?00?00???000000?1??0000?010000000000000000000000000?00000001000000?000111110 PHAEOCEROS ?????????????????????????????????????????????????????????????????????????????????????????????????????GATGGTACCTTGCTACTC---GGATAACC--AGTAA-TTCTA-AGCTAAT-CGTGCAACAACTCCCGGCTTT--TGG-AGGG-TGT-TTT-TTAG-TAAAAG---GA-GCGG-C-TT-GTCCCGGTTTACGGTGAA-C?-GATAACTCCTCGGATCGCACGGCCCT??????????????????????????????????????????????????????????????????????????????????ACGGA-AATTAGGGTTCGATTCCGGA-A-GGAGCCTGAGAAACGGCTACCA-CATCC-AG-AAGGCA-CA--CGCGC--ATTACCC-AATCC-GAC-CGGGGAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGA-TACAATCTAAATCCCTTAAC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GAAAGTTGGG--CTCGAAGACGAT-AG-TACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGATGTTAATTAGATGACTCCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTAT?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????T--TGCATGGCCGTT-TTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACACGAAGAACCTTCTTCGTGGCC----AACTTCTTAGAGGGACTATTTGCGTCTAGCGAAT----GGAA???????????????????????????????????????????????????????????????????????????????????????????????????????????ATCTTTG-AAATTTCATCGTGAT--GGATAGATCATTGCAATTATTGATCTT-AA----GAATT--TAGTAAGCGCGAGTCATCAGCTCG-GTTGACTA--GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATTG-CGGCG?ACA?CGGGT?ACCGCCGGGACGTTGT--GAGAAG-TCATTAAACCTTATC-TTTAGAGGAA??????????????????????????????????????????????????GCACCATCGACCGACCATGAT?CTTCTGTGAAAGGTTT??AGTGTGA??A?TACCTGCTGGGACCC??AAGATGGTGAACTATGCCTGAGTCAGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGA?GTGC?AATCG?TTCGTCAGACTTGGGTATA?GGGC???AGACTAATCGAACCATGCG??G?GGCCCCGGG?AGAGTTCTCTTTTCT?TTT?AACA???CT?GCCT?GCCCTGAAATCGGATTACCCGGA???ATAGGGTCCAGCGGCTGGT?AAAGCACCACACGTCTTGCGGTGTCCGGTGGCCC?CT??GGC??GGCCCGTGA0011003001101111100?200?101000010003001?11010011011110000110111021100011100001000000000000000000001000000?000101110 NOTOTHYLAS ????????????????????????????????????????????????????????????????????????????????????????????????????????????CCTT-CTACTC---GGATAAC-G-AGTAA-TTCTA-AGCTAA-ACGTGCAACAACTCCCGACTC---TGGAAGG-AG--ATTTATTAGATAAAAG---GATG---GC-TT-GTCCCGTTT-A--CTGAATC-TGATAACTCCTCGAATCGCACGGCCCT???????????????????????????????????????????????????????????????????????????????????????????????GTTCGATTCCGGAGAGGGA--C-GAGAAACGGCTACCA-CATCC--N--AGGCAG---NNNN----ATTACCC-AATCC-GA---GGGGAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAA--A????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAAGTTGGGG-CTCGAAGACGATCAGATAC---TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGTGTTAATTAGATGACTCCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CA-GGCCGTT-TTAGTTGGTGGAGTGA-TTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACAC-AAGAACCTTCTTCGTGGCC----AACTTCTTAGAGGGACTATTTGCGTCTA-CGAAT----GGAA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGA-AGATCATTGC-ATTATTGATCTTCAAC-AGGAAT-CCT-GTAAGCGCGAGTCATCAGCTCGCGTT-ACTAC-GTCCCTGCCCTTTGTACACAC-GCC-GTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATTG-CGGCGACACCGGGTCACCGCCGGGGACGTT-T--GA-AA-TTCATTAAACCTTATCATTTA?A????????????????????????????????????????????????????????????????????CC?TGAT?CTTCTGTGA?AGGTTT?GAGTGTGAGCA?TACCTGCTGGGACCC????GATGGTGA?CTATGCCTGAGCAGGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGA?GTGCAAATCG?TTCGTCAGACTTGGGTATAGGGGCGAAAG?CTAATCG???????????????CCCCGGG?AGAGTTCTC?TTTCTTTTT?AACA?GCCT?GCCT?ACCCTGAAATCGGATTACCCGGAG??ATAGGGTCCAGCGGCTGGT?AAAGCACCACACG?CTTGCGGTGTCCGGTG?CCC?????GGC??GGCCCGTG?0011003001101111100?200?101000010003001?11010011011110000110111021100011100001000000000000000000001000000?000101110 MARCHANTIALES ?????????????????????????????????????????????????????????CTGTGAAACTGCGAATGGCTC-TTAAATC-GTTATAGTTTCTTTGATGGTGCCTT-CTACTC---GGATAACCG-AGTAA-TTCTAGAGCTAATACGTGCACCAACGCCCGACTTT-CCGGAAGGG--TGTTTTATTAGATAAAAGACCGATG---GC-TT-GCC-CGGTGATT-CGGAATCATGATAACTCGACGAATCGCACGGCCT??????????????????????????????????????????????????????????????????????????????????????????????????????????????AGGGAGCCTGAG?AACGGCTACCA-CATCC-AG-AAGGCAG-A---GC-C--ATTACCC-AATCC-GAC-----GAGG-AGTGACAATAAATAACAATACTGGGCT-TTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTTCTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGG-ATCG--GGATGTNGATTAGATGACTCCGCCGGCACCTCCATGAGAAATCAAAGTTTTTGGGTTCCGGGGGGAG-ATG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGGTGG-GTGATTTGTCTGGTT-AATTCCGTTAACGAAGGAGACCTCAGCCTGCTAACTA-CTACGCGGGGGT?CTCCCCTGCGGCC----AGCTT-TTAGAGGGACTGTCGGCGTCTAGCCGA-----GGA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGTCATCAGCTCGCGTTGACTAC-GTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA-GAGTTCGG--ATCG-CGGCGACGCGCGGTTCGCCGCCGGGACGTTG---GA-AAGTTCTTTAAACCTTATCA????????????????????????????????????????????????????????????T?AACATCGACCGACCATGAT?CTTCTGTGAAAGGTTC?G?GT?GGAGCA?TGCCTGTTGGGACCC??AAGATGGTGAACTATGC?TGAGCAGGG?CGAAGTCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTCGGG?ATA??????AAAGACTAATCGAACCATGCG?GA?GGCCCCGGGAAGAGTTTTCTTTTCT??TT??AC?GACC??GCCG?GCCCTGAAATCGCATTACGCGGAG??ATAGGGCCCAGCGGTCGGC?AAAGCGTCGCA?GTCTTGCGG?GTCCGGTG?GCC?CCC?GAC??GGCCCC?GA000100300110121001112011101100000003001?110000101100100000101011211111000000000000000100000000000011000000001101110 JUNGERMANNIALES ??????????????????????????????????????????????????????????????????????????????????????????????????TTTGATGGTACCTTGCTACTC---GGATAACC-TAGTAA-TTCTAGAGCTAATACGTGCACCAACTCCCGACTTC--TGGAAGGG-CGTATTTATTAGATAAAAGACCGATGCGGGC--T-GCCCGGTGTTGCGGTGAATCATGATAACTCGTCGAATCGCACGGCC???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAACGGCTACCA-CATCCAAGG-AGGCAGCCGG-GCG---ATTACCC-AATACCGACACAGGNAGGTAGTGACAATAAATAACAATACTGGGCTTTACCAAGTCTGGTAATTGGAATGAGTACAATCTAAATCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AA?AAC?AAAGTTGGG--CTCGAA-ACGAT-AGATACCG-TCCTAGTCTCAACCATAAACGATGCCGAGCTAGGGATTG--GGATGTTAATTTGATGACTCCGC-AGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CC-----TAGTTGGTGGAG-G--TTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACACGAAGAATCTTCTTTGTGGCC----AACTT-TTAGAGGGACTATT--CGTCTAGCCAAT----GGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TCTTCAAC-AGGAAT-CCTAGTAAGC-CGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCCCTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATGGTCC----GTGAAGTTTTCGG--ATTGCGGCGACGCGGCGGTTCGCTGCCGGGACGTTGT--GAGAAGTTTATTAAACCTTATCATTTA?A????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????010100300110121001112011101000000003001?11001010110010000010101121111100000000000000101111000000000100000?001101110 POLYTRICHALES ??????????????????????????????????????????????????????????????????????????????ATTAAATCAGTTATAGTTTCTTT-ATGGTACCTTGCTACTC---GGATAACCGTAGTA--TTCTA-AGCTAATACGTGCACAAACTCCCGACCTC--TGGAAGGG-CG-TTTTATTAGATAAAAGGCCGATGC-GGC-TT-GCCCGGTAT-TCGGTGACTCA-GATAACTCGTCGAATCGCACGGCCTTA?????????????????????????????????????????????????????????????????????????????????????AGAATT----TTCGATTCCGGA-AGGGAGCCTGAGAA-CGGCTACCA-CATCCA---AAGGCAG-N-NN-N-N--ATT-CCC-AATCC-GAC--GGGGAGGTAGT-ACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAA--A??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTTCTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAG???GAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTTGCGGGTGTTAATTTGATGACCCCG-AAGCACCTTAT-GAGAAATC-AAGTATTTGGGTTCCGGGGGGAGTATG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCTTTCTTGATTCTATGGGTGGT-GTGCATGGCCGTT-TT-GTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAAC-AACGAGACCTCAGCCTGCTAACTAGTTACACGAAGAATC-TCTTTGTGGCC----AACTT-TTAGAGGGACTATTGGCGTCT-GCCAAT----GGAA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ATAGATCATTGC-ATTATTGATCTTCAA--A-GAATTCC-AGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACC-CCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATCG--GG-TG-ATCGGGTT-G-GTTCGG?GACTTGT--GAGAA-TTCATTAAA--TTATCATTTAGAGGAA??????????????????????????????????????????????????GCAC?AT?GACCGACCGTGAT?CTTCTGTGAAAGGTTT?GAGTGTGAGC??T?CCTGCTGGGACCC??AAGATGGTGAACTATGCCTGAGC?AGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?G?AGC?ATACTGACGTGCAAATCG?TTCGTCAGACTTGGG?ATA????C?AAAGACT?ATCGAACCATGCG?AG?GGCCCCGGGAAGAGTTCTCTTTTCT?TTT?AACA?GCCT?GCCT??CCCTGGAATCGGATTACC?GGAG??ATAGGGTCCAGCGGCTGGT?AAAGCACCGCAC?TCTTGCGG?GTCCGGGGCCC??C???GGC??GGCCCGTGA110110311110121001112011101011011003001?11000122010110000010000021100011011111110000000000111111110100000?000101110 BRYALES ????????????????????????????????TGTGTAAGTATAAACT-CTTTTGTACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTCTTTGATGGTACCTTGCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCACAAAATCCCGACTGG---GNAAGGGANNGATTTATTGGATAAAAGGCCGA-TGCGGGCT-TGCCCGGTTC-GCGG-GAC----GATAAC--GTCGAATCGCA-GGCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????GA-A-GGAGCCT-AG---CGGCTACCA-CATCC-AGGAAGGC--C----------ATTACCC-AACTCCGA---GGGGAGGTAGTGACAATAAATAACAATACTGGGC--TTACGGGCCCG---ATTGG--TGAGTA?AATCT-AATCCCTTAA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCATTTGCCAAGGATGTTTTCGTTAATCAA-AA-GAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGTGTTGATTCGATGACCCCGCCAGCACCTTAT-GAGAAATC--AGTTTTTGGGTTCCGGGGGGAGTATG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGAGCTCTTTCTTGGTTCTATGGGTGGT-GTGCATGGCCGTT-TTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACGCGAAGGATTTCCTCCTTTGCGGCC-AACTTC--AGAGGGACTATCGGCGTC---GCCGAT---GGAAG?TTGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ATCATTGC-ATTATTGATCTTCAAC---GAATTCC-AGTAAGCGCGAGTCATCAGCTCG-GTTGACTAC--TCCCTGCCCTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATCG-CG??A?C????GTTCGCCGC?GG?GACGTTGT--GAGAAG-TCATTAAACCTTATCATTTA-AG?????????????????????????????????????????????????????GCACCATCGACCGACCGTGAT?CTTCTGTGAAAGGTTT?GAGTGTGAGCA?CACATGTTGGGACCC???AGATGGTGAACTATGCCTGAGCAGGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTTGGGTATAGGGGC?AAAGACTAATCGAACCATGCG?AG?GGCCCCTGGAAGAGTTCTCT?TTCT?TTT??AC?GGCCC?GACG?ACCCTGGAATCGGTTCACCCGGAG??ATAGGGTCCAGCGGCCGGT?AAAGCACCGCACGTCTCGCGGTGTCAGGTGGCCC?TC??GGC??GGCCCGTGA110110311110121001112011101011010003001?110001220101100000100000211000110111111100000000001111111111000000001101110 EQUISETUM ???????????????????????????????????????????????????????????????????GCGAATGGCTGATTAAATCAGTTATAGTTTCTTTGATGGTACCTTGCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCACCAACTCCCGACTTC--TGG--GGGA-GCATTTATTAGATAAAAGGCCGATGCGGGC-TGTGCCCGGTAA----CGGATTC--GATAACTTCCCGGATCGCACGGCCTNNNNACGGGTGA????????????????????????????????????????????????????????????????????????CGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCGGGCGCGCAAATTACCC-AATCC-GACACGGGGAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAGAACGAAAGTTGG---CTCGAAGAC-ATCA?ATACCG-TCCTAGTCTCAACCATAAACGA-GC?GA-CTAGGGATT--CGGATGTTACTTCAATGACTCTGCCGGCACCTTAT-GAGAAATCAAAGTCTTTGGGTTCC----GGA-T??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTAGTGCATGGCCGTTCTTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACGCGAAGACTTGTCTTCGTGGCC----AACTTCTTAGAGGGACTATGGCCGTCTAGGCCAT----GGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TCTTCAACTAGGAATTCCTAGTAAGC-CGAGTCATCAGCTCGCGTTGACTA--GTCCCTGCCCTTTGTACACACTGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATT-CGGCGACGCTGGCGGT-CGCCGGCGACGTTGT---GAGAAGTTCATTGAACCTTACCATTTAGAG?????????????????????????????????????????????????????GCACCATCGACCGACCGTGAT?CTTCTGTGAAAGGTTT?GAGTGAGAGCA?TACCTGCTGGGACCC?AAAGATGGTGAACTATGCCTGAGCAGGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTTGGGTATAGGGGCGAAAGACTAATCGAACCATGCG?GG?GGCCCTGGGAAGAGTTCTCTTTTCTTTTT?AACA?ACTT?GCCC?ACCCTGAAATCGGATCAACCGGAG??ATAGGGTCCAGCGGTTGGT?AAAGCA?CGCAGGTC?TGCGGTGTCCGGTGCCCC?C???GGC??GGCCCTTGA0?0000211111030?0100010?1110201001100011111000330100001110012?001110001101111000111100000000000000??00?001101101110 ZAMIA TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTGTCAGTATGAACTATTTT-GGACGGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTCTTTGATGGTACTCTGCTACAC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCACCAAATCCCGACTTTT-TG-AAGGGACGCATCTATTAGATAAAAGGCCGATGCGGGC-TTTGCCCGGCGT-TTGGTGAATCATGATACCTTGATGGATTGCATGGCCCTCGAGCCGGCGACGCTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGCAGGATAGAGGCCTACCATGGTGGTGACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCCGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGGGAGGTAGTGACAATAAATAACAATACTGGGCTCATC-GAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATCTTGGGACGGCCCGGCC-GGTCCGCT-TTTTTGGGTGTGCACCGGCCGTTTCGTCCCTTTTGTTGGCGGCGCG---CACCTGGCCTTAACTGTCTGGG-TCGCGGT-TCC--ACGCTGTTACTTTGAAAAAATTAGAGTGCTCAAAGCAAGC-TTATGCTCTGAATACATTAGCATGGAATAACGGTATAGGATTCTGGTCCTATTGCGTTGGCCTTCGGGACCGGA-GTAATGATTAACAGGGACGGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACCACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CCAGGGATCGGCGGATGTTGCTCTAAGGACTCCGCCGGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGAGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACATAGCAAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGAGCGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCGGCCTGCTAACTAGCTACGCGGAGGGTTTCTTTCGTGGCC----AGCTTCTTAGAGGGACTATGGCCGTTTAGGCCAT----GGAAGTTTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGTATTCAACGAGTCTATAACCTGGGCCGGGAGGTCCGGGAAATCTGGCGAAATTTCATCGTGATGGGGATAGATCATTGCAATTATTGATCTTCAACGAGGAATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGATCC---GGTGAAGTGTTCGG--ATCGTGCCGACGACGGCGGTTCGCTGGGCGCGACGTCGCGAGAAGTTCATTGAACCTTATCATTTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????10011?1030?0100010?1?1020000110011020?02???00000112?0012?0001100011011?1000111100000000000000??110001111101110 ; END; BEGIN ASSUMPTIONS; OPTIONS DEFTYPE=unord PolyTcount=MINSTEPS ; TYPESET * order_two = unord: 1-2185 2187-2228 2230-2294, ord: 2186 2229; EXSET gaps+unalignsites = 50-55 110-122 171-176 214-220 228-232 267-280 482-489 657-663 676-690 699-713 729-731 737-743 782-785 1362-1391 1416-1429 1691-1695 1709-1755; EXSET LSU = 50-55 110-122 171-176 214-220 228-232 267-280 482-489 657-663 676-690 699-713 729-731 737-743 782-785 1362-1391 1416-1429 1691-1695 1709-1755 1834-2179; EXSET SSU = 1-1833; EXSET MOLECULES = 1-2179; EXSET MORPHOLOGY = 50-55 110-122 171-176 214-220 228-232 267-280 482-489 657-663 676-690 699-713 729-731 737-743 782-785 1362-1391 1416-1429 1691-1695 1709-1755 2180-2294; EXSET * SPERM = 50-55 110-122 171-176 214-220 228-232 267-280 482-489 657-663 676-690 699-713 729-731 737-743 782-785 1362-1391 1416-1429 1691-1695 1709-1755 2180-2244; END; BEGIN MACCLADE; v 3.0 -1322665050 1000&/0 0 0 END; tv-0.5/ncl-2.0/data/W98morph.nex0000775000076400007640000010673407236527361013126 00000000000000#NEXUS [MacClade 3.05 registered to Franois Lutzoni, ] BEGIN MacCladeStart; Extended; END; BEGIN DATA; DIMENSIONS NTAX=12 NCHAR=77; FORMAT SYMBOLS= " 0 1 2 3 4" MISSING=? GAP=- ;OPTIONS MSTAXA=POLYMORPH ; CHARLABELS [1] Circinnate_vernation [2] 'F-S_leaf_differentiation' [3] Blade_dissection [4] Primary_vein_form [5] Vein_orders [6] Secondary_vein_form [7] Vein_fusion [8] Areoles [9] Hydathodes [10] Blade_hairs [11] Blade_scales [12] GMC_division [13] GMC_subsid_cell_origin [14] Dromy_at_base_of_blade [15] Pulvini [16] Pneumathodes [17] Blade_articulation [18] Trophopods [19] Adaxial_outline_of_stipe|rachis [20] Sclerenchyma_coloration [21] Sclerenchyma_fibers [22] Epipetiolar_branches [23] 'Stipe_stele_number_(base->apex)' [24] Xylem_configuration_in_stipe [25] Primary_xylem_bordered_pits [26] Rhizome_symmetry [27] Rhizome_stele_type [28] Rhizome_stele_cycles [29] Vascular_cambium [30] Rhizome_hairs [31] Rhizome_scales [32] Rhizome_scale_pattern [33] Roots [34] Root_hairs [35] Root_anatomy [36] Growth_habit [37] 'Mucilage/latex_canals' [38] True_vessels [39] Intranuclear_paracrystals [40] Hypodermis [41] First_division_of_zygote [42] Sporangial_wall_thickness [43] Receptacle [44] Sporangial_stalk_length [45] Sporangial_stalk_width [46] Spore_output [47] Sori [48] Sorus_outline [49] Sporangial|soral_position [50] 'Soral/sporangial_maturation' [51] 'No._sporangia/sorus' [52] Indusium [53] Indusium_origin [54] Indus_attach_to_sorus [55] Indusium_opening [56] Annulus [57] Annulus_aspect [58] Annulus_span [59] Sporogenesis [60] Spore_laesura [61] Spores_chlorophyllous [62] Spore__equatorial_flange [63] Perispore_prominence [64] Perispore_surface [65] Exospore_structure [66] Exospore_surface [67] Spore_germination [68] Gametophyte_form [69] Gametophyte_hairs [70] Gametophytes_green [71] Gam._fungal_assoc. [72] Dependent_gametophyte [73] Antherdium_position [74] Archegonium_position [75] No._anth._wall_cells [76] No._arch_neck_tiers [77] Gemmae_producing_gametophytes ; STATELABELS 1 no yes, 2 monomorphic 'hemi_-_at_tip' 'hemi_-_at_base' dimorphic, 3 simple compound, 4 dichotomous 'anisotomous_(pinnate)' solitary|unbranched, 5 one two three four_or_more, 6 dichotomous anisotomous, 7 nonanastomosing anastomosing, 8 without_free_included_veinlets with_free_included_veinlets, 9 absent present, 10 absent present, 11 absent present, 12 diameristic parameristic anomomeristic, 13 perigenous mesogenous mesoperigenous, 14 catadromous anadromous isodromous, 15 absent present, 16 absent present_scattered present_lines_patches, 17 absent present, 18 absent present, 19 convex_to_flattened sulcate, 20 'not_dark-pigmented' dark_pigmented, 21 absent present, 22 absent present, 23 'monostele->polystele' monostele 'distele->monostele' polystele distele, 24 'C,_U,_V,_O,_,_arc)' 'solid_*,_T,_' 'X_(sometimes_becoming_V)' 3_arches polycyclic, 25 scalariform circular, 26 radial dorsiventral, 27 protostele solenostele dictyostele eustele, 28 monocyclic polycyclic, 29 absent present, 30 absent present, 31 absent present, 32 uniformly_colored sharply_bicolored clathrate, 33 absent present, 34 absent present, 35 '2-5-arch' polyarch, 36 terrestrial epiphytic rooted_aquatic floating_aquatic, 37 absent present, 38 absent present, 39 absent present, 40 absent present, 41 horizontal vertical 'free-nuclear_phase', 42 single_cell_layer 2_or_more_cell_layers, 43 '(nearly)_flat' convex elongate branched, 44 sessile_to_short long, 45 'massive_(>6_cell_rows_wide)' '4-6_cell_rows_wide' '1-3_cell_rows_wide', 46 '1000+' '>100<1000' '<100', 47 absent present, 48 roundish elongate, 49 marginal 'dorsal_(abaxial)' adaxial, 50 _simultaneous gradate mixed, 51 'few_(<12)' many, 52 absent present, 53 marginal adaxial, 54 lateral basal central, 55 introrse extrorse suprasoral circumsoral none, 56 absent present, 57 apical lateral oblique_to_transverse vert_to_slightly_oblique, 58 continuous_bow interrupted_bow restricted_patch, 59 homosporous anisosporous heterosporous, 60 linear triradiate papillalike furrow circular, 61 no yes, 62 absent present, 63 not_prominent prominent, 64 '(nearly)_smooth' sculptured, 65 '2-layers_(blechnoid)' '3-layers' '5-layers', 66 '(nearly)_smooth' sculptured, 67 equatorial polar amorphous, 68 tuberous filamentous 'cordate-thalloid' 'elongate-thalloid' reduced, 69 absent present, 70 no yes, 71 absent present, 72 no yes, 73 embedded exposed, 74 embedded exposed, 75 _5 '3-(rarely)_5', 76 '>6' '1-5_(rarely)_6', 77 no 'yes,_borne_from_thallus' 'yes,_borne_from_rhizoids', ; MATRIX Blechnum_occidentale 1011210?11102100001010300020001(01)1100001?1001221112111001310000100112110011110 Lonchitis_hirsuta 1011310?11002000001010300110010?110000??1000221102110001310100110012010011110 Pteridium_aquilinum 1011310?01002002001011300111010?1100011(01)1001221102110001310100010012010011110 Dicksonia_antarctica 1011310?01002102000010330020010?1100001?101112100111(01)121300100000102010011000 Osmunda_cinnamomea 1311310?010200000010101000(12)0010?110000?01000110??0?0???1120110011112011011000 Psilotum_nudum 030?????00020?0000?010??(01)0(01)0010?0??(01)000?01000010?000???0??0000001110001011012 Adiantum_raddianum 1011310?000021000011102001(12)00010110000??1000221102110001310100110012010011110 Vandenboschia_davallioides 1011310?010??100000010110100010?110100??1020?2100111(01)01120011000110101?0110?1 Ophioglossum 03??????00020?00000000301020000?100000??0100000??0?0???0??01000?1110001001000 Huperzia 0(03)020?0?00020?00000010??1000000?110(01)10?00100000?2??0???0??0100??01?0001001010 Equisetum_arvense 0?020?0?10011?0000??00??1010010?110001?10100?0???0?0???0??04100100?3010011010 Ginkgo_biloba 0?00100?01020?001000104?1030100?1??010??2100000????0???0??2300??10?40001?0?10 ; END; BEGIN ASSUMPTIONS; OPTIONS DEFTYPE=unord PolyTcount=MINSTEPS ; END; BEGIN TREES; UTREE Default_bush = [&U] (Blechnum_occidentale,Lonchitis_hirsuta,Pteridium_aquilinum,Dicksonia_antarctica,Osmunda_cinnamomea,Psilotum_nudum,Adiantum_raddianum); UTREE Default_bush = [&U] (Blechnum_occidentale,Lonchitis_hirsuta,Pteridium_aquilinum,Dicksonia_antarctica,Osmunda_cinnamomea,Psilotum_nudum,Adiantum_raddianum); UTREE Default_bush = [&U] (Blechnum_occidentale,Lonchitis_hirsuta,Pteridium_aquilinum,Dicksonia_antarctica,Osmunda_cinnamomea,Psilotum_nudum,Adiantum_raddianum); UTREE * Default_bush = [&U] (Blechnum_occidentale,Lonchitis_hirsuta,Pteridium_aquilinum,Dicksonia_antarctica,Osmunda_cinnamomea,Psilotum_nudum,Adiantum_raddianum); END; BEGIN NOTES; TEXT CHARACTER=4 TEXT= 'Vouchers_checked_for_all_and_Kubitizki_1990.___See_also_Alan''s_e-mail_05.26.94.__This_character_largely_modelled_after_Nixon_et_al._1994.'; TEXT CHARACTER=16 TEXT= vouchers; TEXT TAXON=3 CHARACTER=16 TEXT= 'Bower_1923,_p._169'; TEXT TAXON=4 CHARACTER=16 TEXT= 'D._Palmer_(pers._comm.)'; TEXT CHARACTER=50 TEXT= vouchers_checked; TEXT TAXON=2 CHARACTER=50 TEXT= voucher; TEXT TAXON=3 CHARACTER=50 TEXT= 'Bower_1923,_Eames_1936'; TEXT TAXON=4 CHARACTER=50 TEXT= Kramer_1990; TEXT TAXON=5 CHARACTER=50 TEXT= 'Kramer_1990:_simultaneous'; TEXT TAXON=2 CHARACTER=22 TEXT= Troop_&_Mickel_1968; TEXT TAXON=3 CHARACTER=22 TEXT= 'Troop_&_Mickel_1968_-_citing_Webster_1958_for_this_sp.'; TEXT CHARACTER=22 TEXT= 'vouchers;_Troop_&_Mickel_1968'; TEXT CHARACTER=26 TEXT= vouchers; TEXT CHARACTER=60 TEXT= Tryon_and_Lugardon__1991; TEXT TAXON=5 CHARACTER=61 TEXT= Kubitzki_1990; TEXT CHARACTER=62 TEXT= Tryon_&_Lugardon_1991; TEXT CHARACTER=59 TEXT= 'Bell_1979,_Sheffield_&_Bell_1987,_Tryon_&_Lugardon_1991'; TEXT CHARACTER=61 TEXT= 'Kubitzki_1990,_Tryon_&_Lugardon_1991'; TEXT CHARACTER=63 TEXT= 'Lloyd_1981:_Polypodium;_Tryon_&_Lugardon_1991_-_see_especially_the_family_and_generic_descriptions.'; TEXT CHARACTER=64 TEXT= 'Lloyd_1981:_Polypodium;_Tryon_&_Lugardon_1991_-_see_especially_family_and_generic_descriptions.'; TEXT TAXON=1 CHARACTER=64 TEXT= 'T&L_1991,_p._531,_Figs._1&2'; TEXT TAXON=2 CHARACTER=64 TEXT= 'T&L_1991,_p._291-293_and_Figs._1-6:_essentially_granulate_-_some_coarse_surface_deposits.__KMP_originally_scored_this_as_0.__ARS_changed_to_1_03/95,_deciding_that_the_coarse_surface_deposits_were_actually_part_of_the_perispore_sculpturing.'; TEXT TAXON=4 CHARACTER=64 TEXT= 'KMP_had_originally_scored_as_1_based_on_T&L_1991_,_p._231_Fig._1;_ARS_changed_to_0__03/95.__See_also_Figs._10-12._Prob_ok_as_0.'; TEXT CHARACTER=65 TEXT= '_Tryon_&_Lugardon_1991_-_see_especially_the_family_and_generic_descriptions._See_also_general_introductory_comments_to_book_where_T&L_define_a_2-layered_exospore_as_a_blechnoid_exospore.'; TEXT CHARACTER=66 TEXT= '_Tryon_&_Lugardon_1991_-_see_especially_the_family_and_generic_descriptions.'; TEXT CHARACTER=52 TEXT= vouchers_seen_for_all; TEXT CHARACTER=53 TEXT= vouchers_seen_for_all; TEXT CHARACTER=54 TEXT= vouchers_seen_for_all; TEXT CHARACTER=55 TEXT= vouchers_seen_for_all; TEXT TAXON=4 CHARACTER=55 TEXT= 'cup_is_bilobed,_"valves"_connate_@_base'; TEXT CHARACTER=27 TEXT= 'States_scored_mainly_from_Kubitizki_(1990)_and_Ogura_(1972).__Some_clarifications_taken_from_Schmid_(1982).__White_&_Turner_1988:_Calochlaena._Qiu_et_al_1995:_Metaxya.'; TEXT TAXON=3 CHARACTER=27 TEXT= 'Schmid_1982,_p._901-902:_not_a_dictyostele,_but_a_solenostele.'; TEXT TAXON=5 CHARACTER=27 TEXT= 'Schmid_1982,_p._889'; TEXT TAXON=6 CHARACTER=27 TEXT= 'See_also_Schmid_1982,_p._900_and_Kubitizki_1990_-_solenostele_between_rhizome_and_aerial_stem.'; TEXT CHARACTER=28 TEXT= 'polycyclic_includes_Ogura''s_(1972)_acyclostele_term,_and_the_IIB1c_and_IIB2c_terms_in_Schmid''s_(1983)_Table_1_-_see_pp._868-873.'; TEXT TAXON=3 CHARACTER=28 TEXT= 'Ogura_1972,_Kubitizki_1990,_Schmid_1982_(IIB1c)_-_see_also_p._902'; TEXT CHARACTER=23 TEXT= 'N.B._For_base->_apex_of_stipe,_NOT_the_rachis!___Used_mostly_the_following_references:__Kubitizki_1990,_Ogura_1972,_Lin_&_DeVol_1977,_1978,_Keating_1968.'; TEXT TAXON=1 CHARACTER=23 TEXT= 'Kubitzi_1990,_Ogura_1972,_Lin_&_DeVol_1978'; TEXT TAXON=2 CHARACTER=23 TEXT= Keating_1968; TEXT TAXON=3 CHARACTER=23 TEXT= 'Keating_1968,_Ogura_1972'; TEXT TAXON=4 CHARACTER=23 TEXT= _Ogura_1972; TEXT TAXON=5 CHARACTER=23 TEXT= 'Ogura_1972,_p._108,_p._99'; TEXT TAXON=6 CHARACTER=23 TEXT= 'N/A.__Gifford_&_Foster:__Psilotum_nudum_has_no_leaf_trace_(it_also_has_no_stipe!)'; TEXT TAXON=7 CHARACTER=23 TEXT= 'living_material_-_no_voucher_-_see_ARS_email_5/2/95.'; TEXT CHARACTER=24 TEXT= 'Stipe,_NOT_rachis!__Though_state_0_seems_broad,_all_are_variations_on_the_horseshoe_shape.'; TEXT TAXON=1 CHARACTER=24 TEXT= 'Kubitizki_1990,_Ogura_1972,_Lin_&_DeVol_1978'; TEXT TAXON=2 CHARACTER=24 TEXT= Ogura_1972; TEXT TAXON=3 CHARACTER=24 TEXT= Keating_1968; TEXT TAXON=4 CHARACTER=24 TEXT= _Ogura_1972; TEXT TAXON=5 CHARACTER=24 TEXT= 'Ogura_1972,_p._108,_p._99'; TEXT TAXON=6 CHARACTER=24 TEXT= 'NA_(Gifford_&_Foster:_P._nudum_has_no_leaf_trace)'; TEXT TAXON=7 CHARACTER=24 TEXT= 'Lin_&_DeVol_1978,_p._87,_Table_3'; TEXT TAXON=6 CHARACTER=25 TEXT= 'Bierhorst_1960;_1971_-_p._166'; TEXT TAXON=6 CHARACTER=41 TEXT= 'Bierhorst_1971,_p._186'; TEXT CHARACTER=41 TEXT= 'Gifford_and_Foster_1988,_p._68'; TEXT CHARACTER=72 TEXT= 'All_homosporous_ferns_have_independent_gametophytes_(exosporic).__Heterosporous_ferns_have_gametophytes_that_are_dependent_on_the_sporophyte_(endosporic).'; TEXT CHARACTER=15 TEXT= As_defined_in_text; TEXT TAXON=1 CHARACTER=66 TEXT= 'Tryon_&_Lugardon_1991:_"gemmulate"'; TEXT TAXON=3 CHARACTER=66 TEXT= 'Tryon_&_Lugardon_1991:_"finely_undulate"'; TEXT CHARACTER=46 TEXT= 'See_"Spore-output"_table_in_Bower_1923,_p._262-263.'; TEXT TAXON=5 CHARACTER=46 TEXT= Bierhorst_1971; TEXT TAXON=6 CHARACTER=46 TEXT= White_et._al_1977; TEXT CHARACTER=2 TEXT= vouchers_looked_at_for_all; TEXT CHARACTER=10 TEXT= Vouchers_checked_for_all; TEXT CHARACTER=11 TEXT= Vouchers_checked_for_all; TEXT CHARACTER=17 TEXT= Vouchers_checked_for_all; TEXT CHARACTER=36 TEXT= Vouchers_checked_when_there_was_any_doubt; TEXT TAXON=6 CHARACTER=36 TEXT= 'Voucher_"high_up_on_tree",_but_also_know_to_occur_on_calcareous_cliffs,_therefore_not_always_epiphytic.__See_ARS_email_2/6/95_(10:21)'; TEXT TAXON=7 CHARACTER=36 TEXT= 'Voucher_"rupicolous"'; TEXT CHARACTER=3 TEXT= Vouchers_checked_for_all; TEXT CHARACTER=5 TEXT= 'Vouchers_checked_for_all_and_Kubitizki_1990.___See_also_Alan''s_e-mail_05.26.94.__This_character_largely_modelled_after_Nixon_et_al._1994.'; TEXT TAXON=6 CHARACTER=5 TEXT= NA; TEXT TAXON=6 CHARACTER=4 TEXT= NA; TEXT CHARACTER=7 TEXT= 'Vouchers_checked_for_all_and_Kubitizki_1990.___See_also_Alan''s_e-mail_05.26.94.__This_character_largely_modelled_after_Nixon_et_al._1994.'; TEXT TAXON=6 CHARACTER=7 TEXT= NA; TEXT CHARACTER=8 TEXT= 'Vouchers_checked_for_all_and_Kubitizki_1990.___See_also_Alan''s_e-mail_05.26.94.__This_character_largely_modelled_after_Nixon_et_al._1994.'; TEXT TAXON=1 CHARACTER=8 TEXT= NA; TEXT TAXON=2 CHARACTER=8 TEXT= NA; TEXT TAXON=3 CHARACTER=8 TEXT= NA; TEXT TAXON=4 CHARACTER=8 TEXT= NA; TEXT TAXON=5 CHARACTER=8 TEXT= NA; TEXT TAXON=6 CHARACTER=8 TEXT= NA; TEXT TAXON=7 CHARACTER=8 TEXT= NA; TEXT CHARACTER=12 TEXT= 'see_text_for_important_references.__Where_Sen_&_De_1992_had_a_predominance_of_type_shown,_I_scored_for_most_predominant_type.__If_Kondo_1962__and_Sen_&_De_conflicted_over_same_species,_I_followed_Kondo.'; TEXT CHARACTER=13 TEXT= 'see_text_for_important_references._Where_Sen_&_De_1992_had_a_predominance_of_type_shown,_I_scored_for_most_predominant_type.__If_Kondo_1962__and_Sen_&_De_conflicted_over_same_species,_I_followed_Kondo.'; TEXT TAXON=1 CHARACTER=12 TEXT= 'Kondo_1962_(specified_occidentale),_Sen_&_De_1992,_Van_Cottem_1973'; TEXT TAXON=2 CHARACTER=12 TEXT= 'Thurston_1969;__guess_from_Van_Cottem_1973,_p._67'; TEXT TAXON=3 CHARACTER=12 TEXT= Kondo_1962; TEXT TAXON=4 CHARACTER=12 TEXT= 'Sen_&_De_1992:_rarely_parameristic'; TEXT TAXON=5 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992,_see_also_arguments_in_Payne_1979.'; TEXT TAXON=6 CHARACTER=12 TEXT= 'Pant_&_Khare_1971,_White_1977'; TEXT TAXON=7 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=1 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992,_Van_Cottem_1973'; TEXT TAXON=2 CHARACTER=13 TEXT= 'Thurston_1969;_guess_from_Van_Cottem_1973,_p._67'; TEXT TAXON=3 CHARACTER=13 TEXT= Kondo_1962; TEXT TAXON=4 CHARACTER=13 TEXT= '_Sen_&_De_1992:_rarely_mesogenous'; TEXT TAXON=5 CHARACTER=13 TEXT= 'Sen_&_De_1992,_see_Payne_1979_for_arguments'; TEXT TAXON=6 CHARACTER=13 TEXT= 'Pant_&_Khare_1971,_White_1977'; TEXT TAXON=7 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT CHARACTER=1 TEXT= Gifford_&_Foster_1988; TEXT CHARACTER=6 TEXT= 'Vouchers_for_all.__Cf._char_28:_Nixon_et_al._(1994)'; TEXT CHARACTER=9 TEXT= vouchers; TEXT CHARACTER=18 TEXT= vouchers; TEXT CHARACTER=19 TEXT= vouchers_and_Kubitizki_1990_checked; TEXT CHARACTER=20 TEXT= Vouchers_checked; TEXT TAXON=6 CHARACTER=19 TEXT= NA; TEXT CHARACTER=14 TEXT= 'vouchers;_Kubitizki_1990'; TEXT TAXON=1 CHARACTER=14 TEXT= 'weakly_anadromous,_nearly_isodromous'; TEXT TAXON=4 CHARACTER=14 TEXT= 'Kubitizki_1990_says_"catadromous"'; TEXT TAXON=6 CHARACTER=14 TEXT= NA; TEXT CHARACTER=30 TEXT= 'vouchers;_Kubitizki_1990'; TEXT CHARACTER=31 TEXT= 'vouchers;_Kubitizki_1990'; TEXT CHARACTER=32 TEXT= 'vouchers;_Kubitizki_1990'; TEXT TAXON=2 CHARACTER=32 TEXT= NA; TEXT TAXON=3 CHARACTER=32 TEXT= NA; TEXT TAXON=4 CHARACTER=32 TEXT= NA; TEXT TAXON=5 CHARACTER=32 TEXT= NA; TEXT TAXON=6 CHARACTER=32 TEXT= NA; TEXT CHARACTER=37 TEXT= 'A_zero_score_indicates_no_mention_of_the_presence_of_canals_in_the_literature,_rather_than_a_positive_statement_that_they_do_not_occur_in_a_particular_taxon'; TEXT CHARACTER=38 TEXT= 'Gifford_&_Foster_1988,_White_1961,_1963.'; TEXT TAXON=3 CHARACTER=38 TEXT= 'Gifford_&_Foster_1988:_in_rhizome,_petiole,_root'; TEXT CHARACTER=29 TEXT= 'Bierhorst_1971,_Gifford_and_Foster_1988'; TEXT CHARACTER=39 TEXT= Fabbri_&_Menicanti_1970.__Data_unavailable_for_most_taxa.; TEXT CHARACTER=40 TEXT= Payne_and_Peterson_1973.__Information_available_only_for_a_few_taxa; TEXT TAXON=3 CHARACTER=40 TEXT= 'Payne_and_Peterson_1973_reported_hypodermis_present_in_aquilinum_and_absent_in_latiusculum_(=aquilinum).__Therefore_it_is_prob._a_polymorphic_character_in_the_species'; TEXT CHARACTER=21 TEXT= 'Ogura_1972,_p._92'; TEXT CHARACTER=25 TEXT= 'Bierhorst_1960,_White_1963b,_Kim_et_al._1993'; TEXT CHARACTER=33 TEXT= Vouchers; TEXT TAXON=6 CHARACTER=33 TEXT= Kubitizki_1990; TEXT CHARACTER=34 TEXT= vouchers; TEXT TAXON=6 CHARACTER=35 TEXT= NA; TEXT TAXON=6 CHARACTER=34 TEXT= NA; TEXT CHARACTER=35 TEXT= 'Bierhorst_1971,_p._296_-_all_filicalean_ferns_have_2-4_protoxylem_points'; TEXT TAXON=1 CHARACTER=35 TEXT= 'Bierhorst_1971,_p._296'; TEXT TAXON=5 CHARACTER=35 TEXT= 'Bierhorst_1971:_triarch'; TEXT CHARACTER=42 TEXT= 'General_references_(G&F_1988,_Bierhorst_1971...)'; TEXT CHARACTER=47 TEXT= 'Vouchers;_Tryon_&_Tryon_1982,_Kubitizki_1990,_Bierhorst_1971,_Eames_1936,_Hill_&_Camus_1986'; TEXT CHARACTER=48 TEXT= 'Vouchers;_Bierhorst_1971,_Eames_1936,_Hill_&_Camus_1986,_Kubitizki_1990,_Tryon_&_Tryon_1982.__Round_sori_=_roughly_as_long_as_wide;_elongate_sori_=_longer_than_wide_-_discrete_or_confluent_sori.'; TEXT TAXON=5 CHARACTER=48 TEXT= NA; TEXT TAXON=5 CHARACTER=53 TEXT= NA; TEXT TAXON=5 CHARACTER=54 TEXT= NA; TEXT TAXON=5 CHARACTER=55 TEXT= NA; TEXT TAXON=6 CHARACTER=53 TEXT= NA; TEXT TAXON=6 CHARACTER=54 TEXT= NA; TEXT TAXON=6 CHARACTER=55 TEXT= NA; TEXT CHARACTER=56 TEXT= 'Bierhorst_1971,_Bower_1923,_Tryon_and_Tryon_1982'; TEXT CHARACTER=57 TEXT= 'Kubitizki_1990,_Bower_1923,_1926,_1928,_Tryon_and_Tryon_1982,_Qiu_et_al_1995'; TEXT TAXON=1 CHARACTER=57 TEXT= 'Bierhorst_1971,_p._314'; TEXT TAXON=5 CHARACTER=57 TEXT= Bower; TEXT TAXON=6 CHARACTER=57 TEXT= NA; TEXT CHARACTER=58 TEXT= 'Kubitizki_1990,_Bower_1923,_1926,_1928,_Tryon_and_Tryon_1982,_Qiu_et_al_1995'; TEXT TAXON=1 CHARACTER=58 TEXT= 'Bierhorst_1971,_p._314'; TEXT TAXON=6 CHARACTER=58 TEXT= NA; TEXT CHARACTER=43 TEXT= 'Vouchers_checked_for_most;_Bierhorst_1971,_Bower_1923,_1926,_1928,_Kubitiaki_1990,_Qiu_et_al_1995,_T&T_1982.__See_also_ARS_e-mail_1/11/95_(10:02am)'; TEXT CHARACTER=44 TEXT= 'Vouchers_checked_for_most;_Bierhorst_1971,_Campbell_1918,_Eames_1936,_Gupta_1962,_Kubitizki_1990,_Marschall_1925'; TEXT CHARACTER=45 TEXT= 'Vouchers;_Bierhorst_1968,_1971,_Campbell_1918,_Gupta_1962,_Eames_1936,_Kubitizki_1990,_Marschall_1925'; TEXT TAXON=5 CHARACTER=45 TEXT= Kubitizki_1990; TEXT CHARACTER=49 TEXT= 'See_text_for_explanation_of_scores_restricted_to_taxa_with_bladed_fertile_fronds/segments_only_and_for_references.'; TEXT TAXON=5 CHARACTER=49 TEXT= 'NA,_fertile_segments_without_leaf_blade'; TEXT TAXON=6 CHARACTER=49 TEXT= 'NA,_in_axil_of_leaf:_terminal_on_axil?__Complex_situation_(see_Bierhorst_1971,_Eames_1936,_Ogura_1972,_Tryon_&_Tryon_1982,_Wagner_1977)'; TEXT CHARACTER=68 TEXT= 'Predominantly_sensu_Nayar_and_Kaur_1971_plus_some_primary_literature,_Bierhorst_1971,_Bower_1923,_1926,_1928,_Eames_1936,_Kubitizki_1990,__Tryon_and_Tryon_1982.'; TEXT CHARACTER=69 TEXT= Followed_Nayar_&_Kaur_1971_primarily.__See_text_for_other_gen_refs_that_were_checked; TEXT CHARACTER=70 TEXT= See_text_for_gametophyte_refs; TEXT CHARACTER=71 TEXT= 'Primary_refs:_Boullard_1957,_1979,_Campbell_1908,_Holloway_1930,_Bierhorst_1971,_Nayar_&_Kaur_1971'; TEXT TAXON=5 CHARACTER=71 TEXT= Campbell_1908; TEXT CHARACTER=73 TEXT= 'Bierhorst_1971,_Eames_1936,_Gifford_&_Foster_1988,_Nayar_&_Kaur_1971.__See_text_for_comments_on_heterosporous_ferns'; TEXT CHARACTER=74 TEXT= 'Bierhorst_1971,_Eames_1936,_Gifford_&_Foster_1988,_Nayar_&_Kaur_1971.___See_text_for_comments_on_heterosporous_ferns'; TEXT CHARACTER=75 TEXT= 'Bierhorst_1971,_Campbell_1892,_Eames_1936,_Gifford_&_Foster_1988,_Nayar_&_Kaur_1971,_Stokey_&_Atkinson_1956,_M.D._Turner_(pers._comm._-_Metaxya).'; TEXT TAXON=1 CHARACTER=75 TEXT= '"3"'; TEXT TAXON=5 CHARACTER=75 TEXT= '"8-25_cells",_Tryon_&_Tryon_1982,_Nayar_&_Kaur_1971'; TEXT TAXON=6 CHARACTER=75 TEXT= '"numerous",_Gifford_&_Foster_1988'; TEXT CHARACTER=76 TEXT= 'Bierhorst_1971,_Bower_1926,_Eames_1936,_Nayar_&_Kaur_1971_(p._321),_Stokey_&_Atkinson_1956,_M.D._Turner_(pers._comm.)'; TEXT TAXON=1 CHARACTER=76 TEXT= '4-5'; TEXT TAXON=5 CHARACTER=76 TEXT= '6,_Eames_1936'; TEXT TAXON=6 CHARACTER=76 TEXT= '4-6'; TEXT CHARACTER=77 TEXT= 'Farrar_1967,_1974,_Nayar_&_Kaur_1971'; TEXT CHARACTER=67 TEXT= 'Nayar_&_Kaur_1968,_1971.__See_text_for_other_refs'; TEXT TAXON=6 CHARACTER=67 TEXT= 'Bierhorst_1971,_p._187;_Darnell-Smith_1917,_fig._6;_Whittier_1975:__Looks_polar,_first_wall_parallel_to_equatorial_plane.'; TEXT TAXON=6 CHARACTER=6 TEXT= NA; TEXT CHARACTER=51 TEXT= Vouchers_checked_for_all; TEXT TAXON=5 CHARACTER=51 TEXT= NA; TEXT TAXON=6 CHARACTER=51 TEXT= voucher; TEXT TAXON=6 CHARACTER=77 TEXT= 'Bierhorst_1971,_p._186;__Farrar_&_Johnson-Groh_1990,_p._1168'; TEXT TAXON=11 TEXT= 'Bierhorst_1971,_Boullard_1979,_Brown_1976,_Gifford_&_Foster_1988,_FNA_1992,_Kubitizki_1990,_Ogura_1972,_Schmid_1982,_Tryon_&_Lugardon_1990,_Tryon_&_Tryon_1982,_Brown_1976,_Duckett_1973,_Hauke_1957,_1979,_Johnson_1937,_Scagel_1984'; TEXT TAXON=11 CHARACTER=1 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=2 TEXT= 'NA;_following_arguments_of_Bierhorst_1971_&_Ogura_1972_-_no-one_takes_stand_on_whether_the_sporangiophore_is_leaf_or_stem.__There_are_no_"fertile_leaves".__Sporangiophores_likely_of_stem_origin_with_sporangia_attached_directly_to_stems.'; TEXT TAXON=11 CHARACTER=3 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=4 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=5 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=6 TEXT= NA; TEXT TAXON=11 CHARACTER=7 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=8 TEXT= NA; TEXT TAXON=11 CHARACTER=9 TEXT= 'Ogura_1972,_pgs._124,_125,_248;_Scagel_et_al._1984,_p._441;_Johnson_1937'; TEXT TAXON=11 CHARACTER=10 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=11 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=12 TEXT= 'Parallel_to_preceding_wall:_see_Ogura_1972,_p._242,_Fig._269,_esp._269-4,_269-5.__See_also_email_to_ARS_June_1_1995.__See_also_Hauke_1957,_p._178'; TEXT TAXON=11 CHARACTER=13 TEXT= 'See_Hauke_1957,_p._178,_and_esp._Fig._2:__"Strasburger_pointed_out_that_the_2_outer_cells_were_subsidiary_cells";_Ogura_1972,_p._242,_Fig._269,_esp._Fig._269-4_and_269-5.__Mesogenous_origin_is_very_clear_for_subsidiary_cells.__See_email_to_ARS_6/1/95'; TEXT TAXON=11 CHARACTER=14 TEXT= NA; TEXT TAXON=11 CHARACTER=15 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=16 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=17 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=18 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=19 TEXT= 'NA_(leaves_are_sessile)'; TEXT TAXON=11 CHARACTER=20 TEXT= NA; TEXT TAXON=11 CHARACTER=21 TEXT= 'Ogura_1972,_p._242_"colorless_sclerenchyma";_Brown_1976:_"collenchyme_annulaire"_-_did_tests_showing_E._arvense_did_not_have_sclerenchyma,_but_collenchyma'; TEXT TAXON=11 CHARACTER=22 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=23 TEXT= 'NA_(no_stipe)'; TEXT TAXON=11 CHARACTER=24 TEXT= 'NA_(no_stipe)'; TEXT TAXON=11 CHARACTER=25 TEXT= 'see_Bierhorst_1971,_p._85_and_Fig._27-8_(f-k)'; TEXT TAXON=11 CHARACTER=26 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=27 TEXT= 'Schmid_1982,_p._905'; TEXT TAXON=11 CHARACTER=28 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=29 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=30 TEXT= 'herbarium_specimens;_Hauke_1979:_p._391;_Ogura_1972,_p._240;_Scagel_et_al._1984,_p._441'; TEXT TAXON=11 CHARACTER=31 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=32 TEXT= NA; TEXT TAXON=11 CHARACTER=33 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=34 TEXT= herbarium_specimens; TEXT TAXON=11 CHARACTER=35 TEXT= 'Gifford_&_Foster_1988,_p._187_"triarch_or_tetrarch".__Ogura_1972,_p._247,_249.'; TEXT TAXON=11 CHARACTER=36 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=37 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=38 TEXT= 'Bierhorst_1971,_p._87'; TEXT TAXON=11 CHARACTER=39 TEXT= not_mentionned_in_Fabbri_&_Menicanti_1970; TEXT TAXON=11 CHARACTER=40 TEXT= 'Ogura_1972,_p._129:_"hypodermis_is_present_only_on_abaxial_side_of_leaf"'; TEXT TAXON=11 CHARACTER=41 TEXT= 'Gifford_&_Foster_1988,_p._68,_Fig._6-1'; TEXT TAXON=11 CHARACTER=42 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=43 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=44 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=45 TEXT= NA; TEXT TAXON=11 CHARACTER=46 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=47 TEXT= NA; TEXT TAXON=11 CHARACTER=48 TEXT= NA; TEXT TAXON=11 CHARACTER=49 TEXT= 'NA_(since_the_sporangiophores_have_no_blades)'; TEXT TAXON=11 CHARACTER=51 TEXT= NA; TEXT TAXON=11 CHARACTER=52 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=53 TEXT= NA; TEXT TAXON=11 CHARACTER=54 TEXT= NA; TEXT TAXON=11 CHARACTER=50 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=55 TEXT= NA; TEXT TAXON=11 CHARACTER=56 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=57 TEXT= NA; TEXT TAXON=11 CHARACTER=58 TEXT= NA; TEXT TAXON=11 CHARACTER=59 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=60 TEXT= 'T&L_1991,_p._586:_"circular_aperture_with_large_subapertural_opturator_in_Equisetum_is_unique_in_pteridophytes"'; TEXT TAXON=11 CHARACTER=61 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=62 TEXT= T&L_1991; TEXT TAXON=11 CHARACTER=63 TEXT= 'see_T&L_1991,_p._587,_Fig._11,_to_see_how_thin_perispore_is_relative_to_exospore'; TEXT TAXON=11 CHARACTER=64 TEXT= 'abundant_spherules_seem_to_be_part_of_the_epispore_morphology_-_see_T&L_1991'; TEXT TAXON=11 CHARACTER=65 TEXT= 'T&L_1991,_p._586'; TEXT TAXON=11 CHARACTER=66 TEXT= 'T&L_1991,_p._587,__Figs._8_&_12:_exospore_looks_smooth'; TEXT TAXON=11 CHARACTER=67 TEXT= 'Bierhorst_1971,_p._94_shows_that_the_spore_sheds_its_outer_coat_before_dividing.__Therefore_it_is_impossible_to_determine_the_orientation_of_the_first_division_with_reference_to_the_aperture_since_it_is_no_longer_there_for_reference.'; TEXT TAXON=11 CHARACTER=68 TEXT= 'Duckett_1973:__looks_elongate-thalloid/branched_-_eventually_forming_a_pin-cushion_shape,_i.e._there_is_ultimately_more_dimensionality_here_than_in_other_ribbon-like_gametophytes.__T&T_1982_say_"thallose_strap-shaped,_branched".'; TEXT TAXON=11 CHARACTER=69 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=70 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=71 TEXT= Boullard_1979; TEXT TAXON=11 CHARACTER=72 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=73 TEXT= 'Duckett_1973,_Hauke_1979,_p._392'; TEXT TAXON=11 CHARACTER=74 TEXT= Duckett_1973; TEXT TAXON=11 CHARACTER=75 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=76 TEXT= Gen_refs; TEXT TAXON=11 CHARACTER=77 TEXT= Gen_refs; TEXT TAXON=6 CHARACTER=30 TEXT= 'Ogura_1972,_p._16'; TEXT TAXON=8 TEXT= 'Voucher:_Higashino_1270,_from_Hawaii_(UC).__Unless_otherwise_specified,_sources_(for_the_most_part)_for_character_state_scores_are_the_same_as_those_used_in_Pryer_et_al._1995_(see_Table_1_and_Appendix_2_for_additional_information).'; TEXT TAXON=9 TEXT= 'Based_on_O._reticulatum,petiolatum,engelmanii_to_match_rbcL,18S,atpB_data_sets_(no_polymorphisms)._Voucher=Steyermark_97526,_from_Venezuela_(UC)._Sources_for_character_state_scores_same_as_in_Pryer_et_al._1995_(see_Table_1_&_Appendix_2_for_more_info).'; TEXT TAXON=10 TEXT= 'Based_on_lucidula_&_campiana_to_match_rbcL,atpB,18S_data_sets._Some_polymorphisms,_e.g.,_character_2._Voucher=Rolland-Germain_s.n.,_Quebec_(UC)._Sources_same_as_Pryer_et_al._1995_(also_Table_1_&_Appendix_2);_see_also_Whittier&Webster,_1986,_AFJ_76:48-55.'; TEXT TAXON=12 TEXT= 'Voucher=Chien_5175,_China_(UC);_living_material_from_UC_campus._General_Ginkgo_refs_used_for_scoring:_Gifford_&Foster_1988,_Bierhorst_1971,_Kubitizki_1990,_Arnott_1959_(AJB_46),_Fryns-Claussens_&_van_Cotthem_1973_(Bot_Rev_39),_Rohr_1977_(Cytologia_42).'; TEXT TAXON=10 CHARACTER=2 TEXT= 'H._lucidula_has_nearly_monomorphic_leaves;_H._campiana_has_dimorphic_leaves,_therefore,_scored_as_polymorphism.'; TEXT TAXON=9 CHARACTER=2 TEXT= 'Wagner_(in_Kubitzki,_1990):"_leaf_blade..appears_to_be_phyllodial..results_from..loss_of..morphological_blade_&_retention_of_only..axis_which_becomes_expanded_laterally"_We_score_as_dimorphic,_presuming_dimorphism_(as_in_Botrychium)_before_loss_of_blade.'; TEXT TAXON=12 CHARACTER=2 TEXT= 'The_homologies_of_the_"fertile_blade"_are_still_in_dispute.__It_is_unclear_what_would_be_homologous_to_"fertile_leaves"_in_Ginkgo.'; TEXT TAXON=9 CHARACTER=3 TEXT= 'Blades_lost_in_Ophioglossum_-_see_footnotes_under_character_2_"fertile-sterile_leaf_differentiation"'; TEXT TAXON=9 CHARACTER=4 TEXT= 'N/A'; TEXT TAXON=9 CHARACTER=5 TEXT= 'N/A'; TEXT TAXON=9 CHARACTER=6 TEXT= 'N/A'; TEXT TAXON=9 CHARACTER=7 TEXT= 'N/A'; TEXT TAXON=9 CHARACTER=8 TEXT= 'N/A'; TEXT TAXON=12 CHARACTER=7 TEXT= 'Scored_as_non-anastomosing,_even_though_occasional_and_sporadic_vein_unions_occur_in_about_10%_of_the_leaves_(Arnott,_1959:_AJB_46).'; TEXT TAXON=12 CHARACTER=12 TEXT= 'Ginkgo_scored_same_as_Cycas,_largely_on_basis_of_Fryns-Claussens_&_van_Cotthem_(1973:_Bot._Rev._39:71-138)._In_Ginkgo,_guard_cells_are_formed_by_longitud._division_of_GMC;_all_subsid._cells_are_produced_by_unequal_divisions_of_adjacent_epidermal_cells.'; TEXT TAXON=12 CHARACTER=13 TEXT= 'Ginkgo_scored_same_as_Cycas,_largely_on_basis_of_Fryns-Claussens_&_van_Cotthem_(1973:_Bot._Rev._39:71-138)._In_Ginkgo,_guard_cells_are_formed_by_longitud._division_of_GMC;_all_subsid._cells_are_produced_by_unequal_divisions_of_adjacent_epidermal_cells.'; TEXT TAXON=8 CHARACTER=12 TEXT= 'N/A'; TEXT TAXON=8 CHARACTER=13 TEXT= 'N/A'; TEXT TAXON=8 CHARACTER=21 TEXT= Vandenboschia_has_sclerenchyma_fibers_in_the_cortex_of_the_rhizome_and_probably_also_in_the_periphery_of_the_petiole.; TEXT TAXON=9 CHARACTER=23 TEXT= 'Ophioglossum_scored_as_in_O._vulgatum_(see_Bierhorst,_1971,_p._139).'; TEXT TAXON=9 CHARACTER=24 TEXT= 'Ophioglossum_scored_as_in_O._vulgatum_(Bierhorst,_1971,_p._139).'; TEXT TAXON=12 CHARACTER=24 TEXT= '2_vascular_bundles_run_length_of_petiole_to_blade_base._Score_as_different_character_state_in_future_analyses_since_it_is_clear_what_state_is?_(see_Foster_&_Gifford,_1974:_449;_Bierhorst,_1971:_420).__Could_it_be_a_"broken"_C_-_needs_checking...'; TEXT TAXON=9 CHARACTER=25 TEXT= 'Ophioglossum_is_scored_as_having_circular_bordered_pits,_as_in_O._vulgatum_(Kim_et_al.,_1993).'; TEXT TAXON=10 CHARACTER=25 TEXT= 'Huperzia_(and_species_of_the_H._selago_group)_apparently_has_circular_bordered_pits_(Bierhorst,_1971:_9,_12,_504,_fig._27-8D).'; TEXT TAXON=12 CHARACTER=25 TEXT= 'Ginkgo_has_circular_bordered_pits_(Bierhorst,_1971:_420,_505).'; TEXT TAXON=8 CHARACTER=26 TEXT= 'Vandenboschia_has_dorsiventral_symmetry_in_the_rhizome_(a_polymorphism_in_the_family).'; TEXT TAXON=9 CHARACTER=27 TEXT= 'Most_spp._of_Ophioglossum_have_a_distinct_dictyostele_(M._Gewirtz_&_A._Fahn.__1960.__The_anatomy_of_the_sporophyte_and_gametophyte_of_Ophioglossum_lusitanicum_L.__Phytomorphology_10:_342-351).'; TEXT TAXON=9 CHARACTER=29 TEXT= 'Ophioglossum_has_not_been_reported_to_have_secondary_xylem._(This_score_was_recorded_as_"1"_for_the_analyses_in_Wolf_et_al._in_Soltis_et_al._1998).'; TEXT TAXON=12 CHARACTER=34 TEXT= No_information_located; TEXT TAXON=12 CHARACTER=35 TEXT= No_information_located; TEXT TAXON=10 CHARACTER=36 TEXT= 'H._lucidula_is_terrestrial;_H._campiana_is_epiphytic'; TEXT TAXON=8 CHARACTER=36 TEXT= 'V._davallioides_is_epiphytic_(a_polymorphism_in_the_family).'; TEXT TAXON=12 CHARACTER=37 TEXT= 'Mucilage_canals_abundant_throughout_pith,_cortex,_and_between_leaf_veins_in_Ginkgo_(Kubitzki_1990:_284).'; TEXT TAXON=10 CHARACTER=41 TEXT= '(This_score_was_recorded_as_"?"_for_the_analyses_in_Wolf_et_al._in_Soltis_et_al._1998).'; TEXT TAXON=12 CHARACTER=41 TEXT= 'There_is_a_free-nuclear_phase_in_Ginkgo,_as_in_Cycas_(Foster_and_Gifford,_1974:_456).'; TEXT TAXON=12 CHARACTER=46 TEXT= '>1000_microspores/male_sporangium;_linear_tetrad_of_megaspores_in_female_sporangium_(Foster_&_Gifford,_1974:_452-453);_scored_as_0&2_in_analyses_for_Wolf_et_al_in_Soltis_et_al._1998._Scored_for_microspores_only_here._Megaspores_not_free-sporing.'; TEXT TAXON=8 CHARACTER=46 TEXT= 'Actual__voucher_count_ca._60_(probably_64)_spores/sporangium._Score_reported_for_Cephalomanes_(also_Hymenophyllaceae)_could_be_incorrect,_or_character_may_be_polymorphic_for_family;_literature_reports_may_be_incorrect,_in_part._See_Bower_1923,_p._262-263'; TEXT TAXON=12 CHARACTER=48 TEXT= NA; TEXT TAXON=12 CHARACTER=49 TEXT= 'Microsporangia_and_megasporangia_not_obviously_associated_with_leaves._Homologies_of_fertile_appendages_in_microstrobilus_unknown._Homologies_of_ovuliferous_structure_uncertain_and_speculative_(collar=vestigial_sporophyll?)._See_Foster&Gifford_1974:453.'; TEXT TAXON=12 CHARACTER=60 TEXT= 'Erdtman_1957:_21.__This_score_is_for_free-sporing_microspores.__Megaspores_are_not_free-sporing.'; TEXT TAXON=10 CHARACTER=64 TEXT= 'Huperzia_apparently_lacks_a_perispore_(Tryon_and_Lugardon,_1991:589),_therefore_scored_as_missing_data.'; TEXT TAXON=10 CHARACTER=63 TEXT= 'Huperzia_apparently_lacks_a_perispore_(Tryon_and_Lugardon,_1991:589),_therefore_scored_as_missing_data.__(Score_incorrectly_recorded_as_0_for_analyses_in_Wolf_et_al._in_Soltis_&_Soltis_1997).'; TEXT TAXON=9 CHARACTER=64 TEXT= 'Ophioglossum_s.s._variable_with_regard_to_perispore_patterning._O._vulgatum:_T&L,_1991:_36,_fig._12_=_echinate;_O._lusitanicum:T&L,_1991:37,_fig_16_=_unornamented_(at_least_in_immature_spores).'; TEXT TAXON=12 CHARACTER=65 TEXT= 'Pollen_wall_of_Ginkgo_essentially_3-layered:_fairly_uniform_sexine_(tectum+poorly_developed_baculae),_+_2_nexine_layers_(Rohr,_1977)._One_could_interpret__sexine_as_2-layered_(making_exine_4-layered),_but_baculae_not_nearly_as_well_developed_as_in_cycads'; TEXT TAXON=12 CHARACTER=66 TEXT= Rohr_1977; TEXT TAXON=9 CHARACTER=67 TEXT= 'Appears_polar,_insofar_as_first_cell_division_(Nayar&Kaur,_1971,_p.324;_Whittier&Moyroud,_1993,_AFJ_83:41-46;_Whittier,_1981,_AFJ_71:_13-19)._NB:_Nayar&Kaur_(1971,_p._301)_considered_that_amorphous_germination_might_occur_in_Ophioglossaceae.'; TEXT TAXON=10 CHARACTER=67 TEXT= 'Unable_to_find_information_on_spore_germination_pattern_for_Huperzia;_early_stages_not_seen_by_Whittier_&_Webster,_1986,_AFJ_76:_48-55.'; TEXT TAXON=12 CHARACTER=68 TEXT= 'Male_gametophyte_is_4-celled_upon_release_of_pollen,_ultimately_5-celled.__Female_gametophyte_is_multicellular_(like_cycads),_much_larger,_and_at_first_free-nuclear;_later_there_is_a_cellular_stage_and_the_archegonia_are_produced.__Reword_character?'; TEXT TAXON=12 CHARACTER=73 TEXT= 'NA.__Ginkgo_lacks_antheridia;_the_male_gametophyte_is_completely_contained_within_the_pollen_grain.'; TEXT TAXON=12 CHARACTER=74 TEXT= 'Ginkgo_has_deeply_embedded_archegonia_(Foster_&_Gifford,_1974:_458;_Bierhorst,_1971:_421.'; TEXT TAXON=10 CHARACTER=74 TEXT= 'Huperzia_has_deeply_embedded_archegonia_(Whittier_&_Webster,_1986,_AFJ__76:_48-55),_but_neck_cells_extend_beyond_surface_for_a_least_4_tiers_(was_scored_as_"0"_in_Wolf_et_al._in_Soltis_et_al._1998).'; TEXT TAXON=12 CHARACTER=76 TEXT= 'Archegonial_neck_in_Ginkgo_is_a_tier_only_2_cells_high_(Foster_&_Gifford,_1974:_458).'; TEXT TAXON=10 CHARACTER=76 TEXT= 'Difficult_to_judge_(Whittier_&_Webster,_1986,_AFJ__76:_48-55,_fig._11);__scored_here_as_"1",_1-5_cells.'; TEXT TAXON=10 CHARACTER=77 TEXT= 'Vegetative_reproductive_bodies_are_said_to_be_produced_from_gametophytes_of_Lycopodium_phlegmaria_(=Huperzia),_Bierhorst,_1971:_19,_citing_Treub,_1884.__We_decided_these_were_not_homologous_to_"gemmae"_in_the_usual_sense.'; TEXT TAXON=12 CHARACTER=50 TEXT= 'Presumably_microsporangia_mature_simultaneously,_and_so_do_megasporangia?'; END; BEGIN MACCLADE; Version 3.05; LastModified -1350142544; Singles 1000&/0; END; tv-0.5/ncl-2.0/data/P95morph.nex0000775000076400007640000026420707236527360013113 00000000000000#NEXUS [MacClade 3.05 registered to Franois Lutzoni, ] BEGIN MacCladeStart; Extended; END; BEGIN DATA; DIMENSIONS NTAX=51 NCHAR=77; FORMAT SYMBOLS= " 0 1 2 3 4" MISSING=? GAP=- ;OPTIONS MSTAXA=VARIABLE ; CHARLABELS [1] Circinnate_vernation [2] 'F-S_leaf_differentiation' [3] Blade_dissection [4] Primary_vein_form [5] Vein_orders [6] Secondary_vein_form [7] Vein_fusion [8] Areoles [9] Hydathodes [10] Blade_hairs [11] Blade_scales [12] GMC_division [13] GMC_subsid_cell_origin [14] Dromy_at_base_of_blade [15] Pulvini [16] Pneumathodes [17] Blade_articulation [18] Trophopods [19] Adaxial_outline_of_stipe|rachis [20] Sclerenchyma_coloration [21] Sclerenchyma_fibers [22] Epipetiolar_branches [23] 'Stipe_stele_number_(base->apex)' [24] Xylem_configuration_in_stipe [25] Primary_xylem_bordered_pits [26] Rhizome_symmetry [27] Rhizome_stele_type [28] Rhizome_stele_cycles [29] Vascular_cambium [30] Rhizome_hairs [31] Rhizome_scales [32] Rhizome_scale_pattern [33] Roots [34] Root_hairs [35] Root_anatomy [36] Growth_habit [37] 'Mucilage/latex_canals' [38] True_vessels [39] Intranuclear_paracrystals [40] Hypodermis [41] First_division_of_zygote [42] Sporangial_wall_thickness [43] Receptacle [44] Sporangial_stalk_length [45] Sporangial_stalk_width [46] Spore_output [47] Sori [48] Sorus_outline [49] Sporangial|soral_position [50] 'Soral/sporangial_maturation' [51] 'No._sporangia/sorus' [52] Indusium [53] Indusium_origin [54] Indus_attach_to_sorus [55] Indusium_opening [56] Annulus [57] Annulus_aspect [58] Annulus_span [59] Sporogenesis [60] Spore_laesura [61] Spores_chlorophyllous [62] Spore__equatorial_flange [63] Perispore_prominence [64] Perispore_surface [65] Exospore_structure [66] Exospore_surface [67] Spore_germination [68] Gametophyte_form [69] Gametophyte_hairs [70] Gametophytes_green [71] Gam._fungal_assoc. [72] Dependent_gametophyte [73] Antherdium_position [74] Archegonium_position [75] No._anth._wall_cells [76] No._arch_neck_tiers [77] Gemmae_producing_gametophytes ; STATELABELS 1 no yes, 2 monomorphic 'hemi_-_at_tip' 'hemi_-_at_base' dimorphic, 3 simple compound, 4 dichotomous 'anisotomous_(pinnate)' solitary|unbranched, 5 one two three four_or_more, 6 dichotomous anisotomous, 7 nonanastomosing anastomosing, 8 without_free_included_veinlets with_free_included_veinlets, 9 absent present, 10 absent present, 11 absent present, 12 diameristic parameristic anomomeristic, 13 perigenous mesogenous mesoperigenous, 14 catadromous anadromous isodromous, 15 absent present, 16 absent present_scattered present_lines_patches, 17 absent present, 18 absent present, 19 convex_to_flattened sulcate, 20 'not_dark-pigmented' dark_pigmented, 21 absent present, 22 absent present, 23 'monostele->polystele' monostele 'distele->monostele' polystele distele, 24 'C,_U,_V,_O,_,_arc)' 'solid_*,_T,_' 'X_(sometimes_becoming_V)' 3_arches polycyclic, 25 scalariform circular, 26 radial dorsiventral, 27 protostele solenostele dictyostele eustele, 28 monocyclic polycyclic, 29 absent present, 30 absent present, 31 absent present, 32 uniformly_colored sharply_bicolored clathrate, 33 absent present, 34 absent present, 35 '2-5-arch' polyarch, 36 terrestrial epiphytic rooted_aquatic floating_aquatic, 37 absent present, 38 absent present, 39 absent present, 40 absent present, 41 horizontal vertical 'free-nuclear_phase', 42 single_cell_layer 2_or_more_cell_layers, 43 '(nearly)_flat' convex elongate branched, 44 sessile_to_short long, 45 'massive_(>6_cell_rows_wide)' '4-6_cell_rows_wide' '1-3_cell_rows_wide', 46 '1000+' '>100<1000' '<100', 47 absent present, 48 roundish elongate, 49 marginal 'dorsal_(abaxial)' adaxial, 50 _simultaneous gradate mixed, 51 'few_(<12)' many, 52 absent present, 53 marginal adaxial, 54 lateral basal central, 55 introrse extrorse suprasoral circumsoral none, 56 absent present, 57 apical lateral oblique_to_transverse vert_to_slightly_oblique, 58 continuous_bow interrupted_bow restricted_patch, 59 homosporous anisosporous heterosporous, 60 linear triradiate papillalike furrow circular, 61 no yes, 62 absent present, 63 not_prominent prominent, 64 '(nearly)_smooth' sculptured, 65 '2-layers_(blechnoid)' '3-layers' '5-layers', 66 '(nearly)_smooth' sculptured, 67 equatorial polar amorphous, 68 tuberous filamentous 'cordate-thalloid' 'elongate-thalloid' reduced, 69 absent present, 70 no yes, 71 absent present, 72 no yes, 73 embedded exposed, 74 embedded exposed, 75 _5 '3-(rarely)_5', 76 '>6' '1-5_(rarely)_6', 77 no 'yes,_borne_from_thallus' 'yes,_borne_from_rhizoids', ; MATRIX Anemia_mexicana 1211210?01001100001010100010010?110000??1000110??0?0???1000100000112110011110 Asplenium_filipes 1011210?110021000111102201200012110000??1001221112111011310000110012?10011110 Azolla_caroliniana 02100?0?01002?00000000110110000?110300??101(01)22(01)0?111?120??21001100140001?0110 Blechnum_occidentale 1011210?11102100001010300020001(01)1100001?1001221112111001310000100112110011110 Cheiropleuria_bicuspis 1300211100011?00000010000100010?110000??1000110?12?0???1300100001002011011000 Cyathea_lepifera 1011310?111020021010103300210010110010??101012101110???1300100110002110011000 Blotiella_pubescens 1011311011002102001011300020010?110000??1001221102110001310000110012010011110 Dennstaedtia_punctilobula 1011310?11002002001011100111010?110000?0100022100101(01)1213101011?0012010011110 Histiopteris_incisa 10113110111020000010113001100110110000??1001221102110001310000000112010011110 Lindsaea_odorata 1011100?100021000010101001000010110000??1001221102?11011310000100012010011110 Lonchitis_hirsuta 1011310?11002000001010300110010?110000??1000221102110001310100110012010011110 Microlepia_strigosa 1011310?11002102001010100110010?1100000?1011221001111011310100010012010011110 Monachosorum_henryi 1011310?110020000010102001(12)0010?110000??100122101010???1310100110113010011110 Pteridium_aquilinum 1011310?01002002001011300111010?1100011(01)1001221102110001310100010012010011110 Calochlaena_dubia 1011310?01011102001010100010010?110010??101012100111(01)121300100000102010011000 Dicksonia_antarctica 1011310?01002102000010330020010?1100001?101112100111(01)121300100000102010011000 Dipteris_conjugata 1010211101011?000010100001100010110000?0100112101210???1310000001002010011000 Davallia_mariesii 1011310?10002102101010300120001(01)110100??1001221012111011310000000112110011110 Elaphoglossum_hybridum 1301100?01102?02001010300?200010110000??1001220?12?0???131000011001{23}110011110 Nephrolepis_cordifolia 1011210?1010220010101030002000101100001?1001221012111011310000110012110011110 Onoclea_sensibilis 13113110111021000100102001200010110000?01011221011111011310010110012110011110 Rumohra_adiantiformis 1011310?001021020010103001200010110000??1001221012111231310000110012110011110 Diplopterygium_glaucum 1010310?001021000000101001000010110000??1000?1101000???1200100001002111011000 Stromatopteris_moniliformis 1011100?01002100001110100?000110100000?0101011101010???12000000011?0001011000 Micropolypodium_okuboi 1001110?110021000000101000100010110100??100122101210???13101100001{01}3110011111 Cephalomanes_thysanostomum 1011310?010??1000000?0110000010?110000??1020?1100111(01)01120011000110101?0110?1 Lygodium_japonicum 1111310?01002000000010110100010?110000?01000110?10?11011000100110112010011110 Angiopteris_evecta 1011310?0012001100001034(01)0210010111010?1011000111000???0??0100101122011000010 Marsilea_quadrifolia 12100?1001002?10000000100110010?11020110101(01)22110101(01)140??2(12)001000140001??110 Matonia_pectinata 1011310?00002000001010100111010?110000??1000121010011231210100111022010011000 Metaxya_rostrata 1011210?0101(12)102001011100110010?110000??100012101010???13001001100?2010011000 Botrychium_strictum 0311310?010201000000003010(12)0100?100000??0100000??0?0???0??0100001110001001000 Osmunda_cinnamomea 1311310?010200000010101000(12)0010?110000?01000110??0?0???1120110011112011011000 Ceratopteris_thalictroides 13113110000020000000003000210010110200??1000?2110211000131010001011201?001110 Plagiogyria_japonica 1311210?00002?02001010100020000?110000??1001121112110001300100110012010011000 Loxogramme_grammitoides 1001111000002?000000?01101200012110000??100022111210???1310010000103?10011111 Polypodium_australe 1001210?111022001000103001200010110000??100122101210???13100000001{01}2110011110 Psilotum_nudum 030?????00020?0000?010??(01)0(01)0010?0??(01)000?01000010?000???0??0000001110001011012 Acrostichum_aureum 11112110010021000010103400(12)10010110200?11001220?02?0???1310100010012010011110 Adiantum_raddianum 1011310?000021000011102001(12)00010110000??1000221102110001310100110012010011110 Coniogramme_japonica 1011311011102(012)000010101001(12)00010110000?1100022111210???1310100000?12010011110 Platyzoma_microphyllum 1(03)11210?01002?00101110100110010?110000??100022111200???131110000011(13)010011110 Pteris_fauriei 1011310?010021000010101000(12)10011110000??1000221102110001310101000112010011110 Taenitis_blechnoides 1011211001002?00001010?001(12)0010?110000??100022111210???1310101010112010011110 Salvinia_cucullata 0(23)01211001002?00000000110110010?0??300??103(01)2210?111?120??21001100140101?0110 Actinostachys_digitata 11020???00002?00000010100010010?110000??1000110??0?10001000000000120001011110 Thelypteris_beddomei 1011310?010022020010102000200010110000??1000221012111011310000110112110011110 Vittaria_flexuosa 1001111000002?000011102001(12)00012110000??100022110210???1310000000013010011111 Lycopodium_digitatum 03020?0?00020?0000??10??1000000?110010?00100000?2??0???0??0100000100001001000 Equisetum_arvense 0?020?0?10011?0000??00??1010010?110001?10100?0???0?0???0??04100100?3010011010 Cycas_circinalis 0311110?01020?000000?0301030110?1?1010??2100000?10?0???0??2300??20?40001?0?10 ; END; BEGIN ASSUMPTIONS; OPTIONS DEFTYPE=unord PolyTcount=MINSTEPS ; END; BEGIN TREES; UTREE Default_bush = [&U] (Anemia_mexicana,Asplenium_filipes,Azolla_caroliniana,Blechnum_occidentale,Cheiropleuria_bicuspis,Cyathea_lepifera,Blotiella_pubescens,Dennstaedtia_punctilobula,Histiopteris_incisa,Lindsaea_odorata,Lonchitis_hirsuta,Microlepia_strigosa,Monachosorum_henryi,Pteridium_aquilinum,Calochlaena_dubia,Dicksonia_antarctica,Dipteris_conjugata,Davallia_mariesii,Elaphoglossum_hybridum,Nephrolepis_cordifolia,Onoclea_sensibilis,Rumohra_adiantiformis,Diplopterygium_glaucum,Stromatopteris_moniliformis,Cephalomanes_thysanostomum,Lygodium_japonicum,Angiopteris_evecta,Marsilea_quadrifolia,Matonia_pectinata,Metaxya_rostrata,Botrychium_strictum,Osmunda_cinnamomea,Ceratopteris_thalictroides,Plagiogyria_japonica,Loxogramme_grammitoides,Polypodium_australe,Psilotum_nudum,Acrostichum_aureum,Adiantum_raddianum,Coniogramme_japonica,Platyzoma_microphyllum,Taenitis_blechnoides,Salvinia_cucullata,Actinostachys_digitata,Thelypteris_beddomei,Vittaria_flexuosa); UTREE Default_bush = [&U] (Anemia_mexicana,Asplenium_filipes,Azolla_caroliniana,Blechnum_occidentale,Cheiropleuria_bicuspis,Cyathea_lepifera,Blotiella_pubescens,Dennstaedtia_punctilobula,Histiopteris_incisa,Lindsaea_odorata,Lonchitis_hirsuta,Microlepia_strigosa,Monachosorum_henryi,Pteridium_aquilinum,Calochlaena_dubia,Dicksonia_antarctica,Dipteris_conjugata,Davallia_mariesii,Elaphoglossum_hybridum,Nephrolepis_cordifolia,Onoclea_sensibilis,Rumohra_adiantiformis,Diplopterygium_glaucum,Stromatopteris_moniliformis,Cephalomanes_thysanostomum,Lygodium_japonicum,Angiopteris_evecta,Marsilea_quadrifolia,Matonia_pectinata,Metaxya_rostrata,Botrychium_strictum,Osmunda_cinnamomea,Ceratopteris_thalictroides,Plagiogyria_japonica,Loxogramme_grammitoides,Polypodium_australe,Psilotum_nudum,Acrostichum_aureum,Adiantum_raddianum,Coniogramme_japonica,Platyzoma_microphyllum,Taenitis_blechnoides,Salvinia_cucullata,Actinostachys_digitata,Thelypteris_beddomei,Vittaria_flexuosa); UTREE Default_bush = [&U] (Anemia_mexicana,Asplenium_filipes,Azolla_caroliniana,Blechnum_occidentale,Cheiropleuria_bicuspis,Cyathea_lepifera,Blotiella_pubescens,Dennstaedtia_punctilobula,Histiopteris_incisa,Lindsaea_odorata,Lonchitis_hirsuta,Microlepia_strigosa,Monachosorum_henryi,Pteridium_aquilinum,Calochlaena_dubia,Dicksonia_antarctica,Dipteris_conjugata,Davallia_mariesii,Elaphoglossum_hybridum,Nephrolepis_cordifolia,Onoclea_sensibilis,Rumohra_adiantiformis,Diplopterygium_glaucum,Stromatopteris_moniliformis,Cephalomanes_thysanostomum,Lygodium_japonicum,Angiopteris_evecta,Marsilea_quadrifolia,Matonia_pectinata,Metaxya_rostrata,Botrychium_strictum,Osmunda_cinnamomea,Ceratopteris_thalictroides,Plagiogyria_japonica,Loxogramme_grammitoides,Polypodium_australe,Psilotum_nudum,Acrostichum_aureum,Adiantum_raddianum,Coniogramme_japonica,Platyzoma_microphyllum,Taenitis_blechnoides,Salvinia_cucullata,Actinostachys_digitata,Thelypteris_beddomei,Vittaria_flexuosa); UTREE * Default_bush = [&U] (Anemia_mexicana,Asplenium_filipes,Azolla_caroliniana,Blechnum_occidentale,Cheiropleuria_bicuspis,Cyathea_lepifera,Blotiella_pubescens,Dennstaedtia_punctilobula,Histiopteris_incisa,Lindsaea_odorata,Lonchitis_hirsuta,Microlepia_strigosa,Monachosorum_henryi,Pteridium_aquilinum,Calochlaena_dubia,Dicksonia_antarctica,Dipteris_conjugata,Davallia_mariesii,Elaphoglossum_hybridum,Nephrolepis_cordifolia,Onoclea_sensibilis,Rumohra_adiantiformis,Diplopterygium_glaucum,Stromatopteris_moniliformis,Cephalomanes_thysanostomum,Lygodium_japonicum,Angiopteris_evecta,Marsilea_quadrifolia,Matonia_pectinata,Metaxya_rostrata,Botrychium_strictum,Osmunda_cinnamomea,Ceratopteris_thalictroides,Plagiogyria_japonica,Loxogramme_grammitoides,Polypodium_australe,Psilotum_nudum,Acrostichum_aureum,Adiantum_raddianum,Coniogramme_japonica,Platyzoma_microphyllum,Taenitis_blechnoides,Salvinia_cucullata,Actinostachys_digitata,Thelypteris_beddomei,Vittaria_flexuosa); END; BEGIN NOTES; TEXT CHARACTER=4 TEXT= 'Vouchers_checked_for_all_and_Kubitizki_1990.___See_also_Alan''s_e-mail_05.26.94.__This_character_largely_modelled_after_Nixon_et_al._1994.'; TEXT TAXON=28 CHARACTER=15 TEXT= Camus_in_Kubitzki_1990; TEXT TAXON=29 CHARACTER=15 TEXT= 'Johnson_1986,_p._10'; TEXT CHARACTER=16 TEXT= vouchers; TEXT TAXON=8 CHARACTER=16 TEXT= 'not_seen_in_D._punctilobula,_but_well_documented_in_many_other_Dennstaedtia_spp.__Kubitzki_1990;_ARS_pers._obs.'; TEXT TAXON=14 CHARACTER=16 TEXT= 'Bower_1923,_p._169'; TEXT TAXON=15 CHARACTER=16 TEXT= Kubitzki_1990; TEXT TAXON=16 CHARACTER=16 TEXT= 'D._Palmer_(pers._comm.)'; TEXT TAXON=17 CHARACTER=16 TEXT= 'Bower_1923,_p.168'; TEXT TAXON=18 CHARACTER=16 TEXT= Kubitzki_1990; TEXT TAXON=19 CHARACTER=16 TEXT= 'ARS_12/13/94_e-mail_to_KMP:__In_Elaphoglossum,_the_ventilation_bands_are_not_visible_in_the_voucher,_but_may_be_there_in_living_material_(see_Mickel_&_Atehortua_1980;_also_Lloyd_1970,_and_Kubitzki_1990).'; TEXT TAXON=27 CHARACTER=16 TEXT= fresh_material; TEXT TAXON=35 CHARACTER=16 TEXT= 'Bower_1923,_1926'; TEXT TAXON=10 CHARACTER=16 TEXT= 'Kramer_1957,_p._112'; TEXT TAXON=3 CHARACTER=50 TEXT= 'Eames_1936,_p._256'; TEXT CHARACTER=50 TEXT= vouchers_checked; TEXT TAXON=5 CHARACTER=50 TEXT= 'Bower_1928,_p._205'; TEXT TAXON=8 CHARACTER=50 TEXT= 'Bower_1923,_p._215'; TEXT TAXON=9 CHARACTER=50 TEXT= voucher; TEXT TAXON=11 CHARACTER=50 TEXT= voucher; TEXT TAXON=12 CHARACTER=50 TEXT= 'Eames_1936;_"M._speluncae"'; TEXT TAXON=13 CHARACTER=50 TEXT= 'Kramer_1990:__simultaneously_maturing'; TEXT TAXON=14 CHARACTER=50 TEXT= 'Bower_1923,_Eames_1936'; TEXT TAXON=15 CHARACTER=50 TEXT= Kramer_1990; TEXT TAXON=16 CHARACTER=50 TEXT= Kramer_1990; TEXT TAXON=17 CHARACTER=50 TEXT= 'gradate_maturation_in_other_sp._of_Dipteris_---_Bower_1923'; TEXT TAXON=21 CHARACTER=50 TEXT= 'Bower,_Eames_1936;_Labouriau_1958,_p._131'; TEXT TAXON=23 CHARACTER=50 TEXT= Kramer_1990; TEXT TAXON=24 CHARACTER=50 TEXT= Kramer_1990; TEXT TAXON=27 CHARACTER=50 TEXT= 'sporangia_are_solitary,_but_mature_simultaneously_with_respect_to_adjacent_sporangia'; TEXT TAXON=29 CHARACTER=50 TEXT= 'Eames_1936,_p._213'; TEXT TAXON=30 CHARACTER=50 TEXT= Kramer_1990; TEXT TAXON=31 CHARACTER=50 TEXT= 'Kramer_1990,_Qiu_et_al._1995'; TEXT TAXON=33 CHARACTER=50 TEXT= 'Kramer_1990:_simultaneous'; TEXT TAXON=35 CHARACTER=50 TEXT= voucher; TEXT TAXON=36 CHARACTER=50 TEXT= voucher; TEXT TAXON=42 CHARACTER=50 TEXT= 'Tryon_1961,_p._95'; TEXT TAXON=45 CHARACTER=50 TEXT= 'Eames_1936,_p._256'; TEXT TAXON=7 CHARACTER=22 TEXT= Troop_&_Mickel_1968; TEXT TAXON=8 CHARACTER=22 TEXT= 'Troop_&_Mickel_1968_-_citing_Conrad_(1908)_for_this_species'; TEXT TAXON=9 CHARACTER=22 TEXT= Troop_&_Mickel_1968; TEXT TAXON=11 CHARACTER=22 TEXT= Troop_&_Mickel_1968; TEXT TAXON=12 CHARACTER=22 TEXT= Kubitizki_1990; TEXT TAXON=14 CHARACTER=22 TEXT= 'Troop_&_Mickel_1968_-_citing_Webster_1958_for_this_sp.'; TEXT TAXON=31 CHARACTER=22 TEXT= Troop_&_Mickel_1968; TEXT TAXON=35 CHARACTER=22 TEXT= 'Kubitizki_1990:_"occasional_stolons_spring_from_a_leaf_base";_Ogura_1972:_"in_Plagiogyria_pycnophylla"'; TEXT CHARACTER=22 TEXT= 'vouchers;_Troop_&_Mickel_1968'; TEXT CHARACTER=26 TEXT= vouchers; TEXT TAXON=24 CHARACTER=26 TEXT= 'N/A.___Kaplan_1977,_p._43'; TEXT TAXON=27 CHARACTER=26 TEXT= 'Holttum_1964,_p.478'; TEXT CHARACTER=60 TEXT= Tryon_and_Lugardon__1991; TEXT TAXON=21 CHARACTER=61 TEXT= Kubitzki_1990; TEXT TAXON=25 CHARACTER=61 TEXT= Kubitzki_1990; TEXT TAXON=26 CHARACTER=61 TEXT= Kubitzki_1990; TEXT TAXON=33 CHARACTER=61 TEXT= Kubitzki_1990; TEXT TAXON=36 CHARACTER=61 TEXT= 'Kubitzki_1990;_green_at_time_of_dispersal'; TEXT CHARACTER=62 TEXT= Tryon_&_Lugardon_1991; TEXT CHARACTER=59 TEXT= 'Bell_1979,_Sheffield_&_Bell_1987,_Tryon_&_Lugardon_1991'; TEXT CHARACTER=61 TEXT= 'Kubitzki_1990,_Tryon_&_Lugardon_1991'; TEXT CHARACTER=63 TEXT= 'Lloyd_1981:_Polypodium;_Tryon_&_Lugardon_1991_-_see_especially_the_family_and_generic_descriptions.'; TEXT TAXON=6 CHARACTER=63 TEXT= see_Sphaeropteris_in_Tryon_&Lugardon_1991; TEXT CHARACTER=64 TEXT= 'Lloyd_1981:_Polypodium;_Tryon_&_Lugardon_1991_-_see_especially_family_and_generic_descriptions.'; TEXT TAXON=1 CHARACTER=64 TEXT= 'T&L_1991,_p._109,_Fig._11:_granulate'; TEXT TAXON=4 CHARACTER=64 TEXT= 'T&L_1991,_p._531,_Figs._1&2'; TEXT TAXON=5 CHARACTER=64 TEXT= 'T&L_1991,_p._80,_Fig._1,_3:_rugulate'; TEXT TAXON=9 CHARACTER=64 TEXT= 'T&L_1991,_pg._290,_text:_fine_irregular_surface'; TEXT TAXON=10 CHARACTER=64 TEXT= 'T&L_1991,_p._298-99,_Figs._15_and_17.__uniformly_granulate'; TEXT TAXON=11 CHARACTER=64 TEXT= 'T&L_1991,_p._291-293_and_Figs._1-6:_essentially_granulate_-_some_coarse_surface_deposits.__KMP_originally_scored_this_as_0.__ARS_changed_to_1_03/95,_deciding_that_the_coarse_surface_deposits_were_actually_part_of_the_perispore_sculpturing.'; TEXT TAXON=41 CHARACTER=64 TEXT= 'T&L_1991,_p._175_(text):_irregularly_rugulate,_papillate'; TEXT TAXON=8 CHARACTER=64 TEXT= 'KMP_had_originally_scored_as_1_based_on_T&L_1991,_p._271_text;_ARS_changed_to_?_03/95'; TEXT TAXON=16 CHARACTER=64 TEXT= 'KMP_had_originally_scored_as_1_based_on_T&L_1991_,_p._231_Fig._1;_ARS_changed_to_0__03/95.__See_also_Figs._10-12._Prob_ok_as_0.'; TEXT TAXON=6 CHARACTER=64 TEXT= see_Sphaeropteris_in_Tryon_&Lugardon_1991; TEXT TAXON=6 CHARACTER=66 TEXT= see_Sphaeropteris_in_Tryon_&Lugardon_1991.__KMP_had_originally_scored_as_1_based_on_Cyathea_photos_in_T&L.__ARS_changed_to_0_based_on_Sphaeropteris.; TEXT TAXON=42 CHARACTER=64 TEXT= 'KMP_had_originally_scored_as_1_based_on_T&L_1991,_p._123-;_ARS_changed_to_0__03/95.___See_Fig._5_-_perispore=_coalescent_granulate_material,_therefore_prob_better_as_0.'; TEXT CHARACTER=65 TEXT= '_Tryon_&_Lugardon_1991_-_see_especially_the_family_and_generic_descriptions._See_also_general_introductory_comments_to_book_where_T&L_define_a_2-layered_exospore_as_a_blechnoid_exospore.'; TEXT CHARACTER=66 TEXT= '_Tryon_&_Lugardon_1991_-_see_especially_the_family_and_generic_descriptions.'; TEXT TAXON=37 CHARACTER=64 TEXT= 'Close_relatives_P._vulgare_&_P._glycyrrhiza_are_smooth.__P._virginianum:_some_with_more_elaborate_perispore,_cf._T_&_L_131.15-17_with_131.18-19.__Also_131:21-22:_echinate_perispore.__UC_has_LM_picture_of_P._australe_spore_attached_to_specimen:_smooth'; TEXT TAXON=17 CHARACTER=58 TEXT= 'ARS_did_a_sporangial_mount:_interrupted_bow._See_Bierhorst_1971,_pgs._307_(top_of_2nd_column),_312_(Figs._16-15,_c,d)_and_p._313_(Figs._16-16,_a,b).'; TEXT TAXON=29 CHARACTER=54 TEXT= 'Eames_p._210-211,_Fig._137b.__Indusium_sealed_&_cup-shaped_(basal_attach?_each_sorus_surrounded_by_indusium,_which_originates_from_base_of__sorus).__See_also_Campbell_1893_&_Johnson_1898a,1898b,_1933_and_4/17/95_emails'; TEXT CHARACTER=52 TEXT= vouchers_seen_for_all; TEXT TAXON=42 CHARACTER=52 TEXT= 'margin_of_pouch-like_segments_is_unmodified'; TEXT TAXON=46 CHARACTER=52 TEXT= 'ARS_email_4/18/95,_4:17:_indusiate:_has_reflexed_margin.__See_voucher_and_Bierhorst_(1971)_p._223_and_fig._14.6.'; TEXT TAXON=3 CHARACTER=53 TEXT= '_KP_email_4/21/95:_12:39.__Too_little_tissue_to_know_what_is_going_on.__Uncertain_where_the_indusia_originates_from_-_abaxial_or_adaxial_,_therefore_?__Eames_(1936):_sporocarps_(indusia=sporocarp_wall)_on_lower_lobe_are_borne_terminally.'; TEXT TAXON=29 CHARACTER=53 TEXT= 'Eames_p._210-211:_sorus_marginal.__Fig._137b:_indusium_partly_from_abaxial_leaf_surface_and_partly_from__leaf_margin._See_papers_by_Campbell_1893_&_Johnson_1898a,1898b.,_1933.__See_also_4/17/95_emails.'; TEXT TAXON=45 CHARACTER=53 TEXT= 'KP_email_4/21/95:_12:39.__Too_little_tissue_to_know_what_is_going_on.__Uncertain_where_indusium_originates_from_-_abaxial_or_adaxial_,_therefore_?__Eames_(1936):_sporocarps_(indusia=sporocarp_wall)__terminal_upon_a_branch_of_a_segment_of_submersed_leaf'; TEXT TAXON=46 CHARACTER=53 TEXT= '_See_voucher_and_Bierhorst_(1971)_p._223_and_fig._14.6.'; TEXT TAXON=21 CHARACTER=54 TEXT= 'Bower_1928,_p.155,_fig._681.__T&T_1982,_p.586,_fig._4,__-_looks_like_a_laterally_attached_hood-like_indusium;_is_supposed_to_be_same_as_Matteucia.__But_see_Bower_1928,_p._153,_fig._L_-_basal?__No_-_see_Labouriau_1958,_p._131'; TEXT TAXON=26 CHARACTER=54 TEXT= 'ARS_email_4/21/95,_1:58'; TEXT TAXON=45 CHARACTER=54 TEXT= Eames_1936; TEXT TAXON=46 CHARACTER=54 TEXT= 'ARS_email_4/18/95,_4:17pm:_indusiate:_has_reflexed_margin.__See_voucher_and_Bierhorst_(1971)_p._223_and_fig._14.6.'; TEXT TAXON=3 CHARACTER=55 TEXT= 'distal_pore:_Bower_1928,_p.260.__Eames_1936,_P._245-246'; TEXT CHARACTER=53 TEXT= vouchers_seen_for_all; TEXT CHARACTER=54 TEXT= vouchers_seen_for_all; TEXT CHARACTER=55 TEXT= vouchers_seen_for_all; TEXT TAXON=8 CHARACTER=55 TEXT= 'segment_margin_and_abaxial_cells_contribute__equally_to_the_formation_of_a_"cup".'; TEXT TAXON=15 CHARACTER=55 TEXT= '"cup"_is_bilobed,_"valves"_connate_@_base'; TEXT TAXON=16 CHARACTER=55 TEXT= 'cup_is_bilobed,_"valves"_connate_@_base'; TEXT TAXON=21 CHARACTER=55 TEXT= 'Bower_1928,_p.153-155,_figs._678_and_681.__T&T_1982,_p.586,_fig._4,__-_looks_like_a_laterally_attached_hood-like_indusium;_is_supposed_to_be_same_as_Matteucia_-_which_appears_extrorse.__Yes_see_Labouriau_1958,_p._131'; TEXT TAXON=26 CHARACTER=55 TEXT= 'ARS_email:_4/21/95,_10:15.'; TEXT TAXON=29 CHARACTER=55 TEXT= 'Eames_1936,_p._209-211,_p.214.__See_also_Gifford_and_Foster''s_figures_on_Marsilea_and_papers_by_Campbell_1893_&_Johnson_1898a,1898b,_1933'; TEXT TAXON=45 CHARACTER=55 TEXT= 'Eames_1936,_P._233,_fig._148.'; TEXT CHARACTER=27 TEXT= 'States_scored_mainly_from_Kubitizki_(1990)_and_Ogura_(1972).__Some_clarifications_taken_from_Schmid_(1982).__White_&_Turner_1988:_Calochlaena._Qiu_et_al_1995:_Metaxya.'; TEXT TAXON=1 CHARACTER=27 TEXT= 'Ogura_1972:_"mexicana"_=_typical_solenostele'; TEXT TAXON=3 CHARACTER=27 TEXT= 'Schmid_1982,_p._880-881:__not_protostele'; TEXT TAXON=14 CHARACTER=27 TEXT= 'Schmid_1982,_p._901-902:_not_a_dictyostele,_but_a_solenostele.'; TEXT TAXON=15 CHARACTER=27 TEXT= White_&_Turner_1988; TEXT TAXON=20 CHARACTER=27 TEXT= 'See_also_Schmid_1982,_p._900.'; TEXT TAXON=25 CHARACTER=27 TEXT= 'Schmid_1982:_ectophloic_siphonostele.__Ogura_1972:_protostele_with_parenchymatous_pith.__Acc._to_Schmid,_p._890,_ectophloic_siphonosteles_lack_leaf_gaps,_therefore_I_scored_as_solenostele.'; TEXT TAXON=26 CHARACTER=27 TEXT= 'see_also_Schmid_1982,_p._881'; TEXT TAXON=28 CHARACTER=27 TEXT= Hill_&_Camus_1986; TEXT TAXON=31 CHARACTER=27 TEXT= Qiu_et_al._1995; TEXT TAXON=33 CHARACTER=27 TEXT= 'Schmid_1982,_p._889'; TEXT TAXON=38 CHARACTER=27 TEXT= 'See_also_Schmid_1982,_p._900_and_Kubitizki_1990_-_solenostele_between_rhizome_and_aerial_stem.'; TEXT TAXON=42 CHARACTER=27 TEXT= 'Schmid_1982:_ectophloic_siphonostele.__Ogura_1972:_medullated_protostele_with_parenchymatous_pith.__Acc._to_Schmid,_p._890,_ectophloic_siphonosteles_lack_leaf_gaps,_therefore_I_scored_as_solenostele.'; TEXT TAXON=45 CHARACTER=27 TEXT= 'Schmid_1982,_p._880-881:__not_protostele'; TEXT TAXON=46 CHARACTER=27 TEXT= 'Schmid_1982,_p._889:_ectophloic_siphonostele.__Ogura_1972:_medullated_protostele_with_parenchymatous_pith.__Acc._to_Schmid,_p._890,_ectophloic_siphonosteles_lack_leaf_gaps,_therefore_I_scored_as_solenostele.'; TEXT TAXON=48 CHARACTER=27 TEXT= 'See_also_Schmid_1982,_p._890'; TEXT CHARACTER=28 TEXT= 'polycyclic_includes_Ogura''s_(1972)_acyclostele_term,_and_the_IIB1c_and_IIB2c_terms_in_Schmid''s_(1983)_Table_1_-_see_pp._868-873.'; TEXT TAXON=6 CHARACTER=28 TEXT= 'Ogura_1972,_Kubitizki_1990,_Schmid_1982_(IIB2c)'; TEXT TAXON=8 CHARACTER=28 TEXT= 'Ogura_1972,_Kubitizki_1990,_Schmid_1982_(IIB1c)'; TEXT TAXON=14 CHARACTER=28 TEXT= 'Ogura_1972,_Kubitizki_1990,_Schmid_1982_(IIB1c)_-_see_also_p._902'; TEXT TAXON=28 CHARACTER=28 TEXT= 'Ogura_1972,_Hill_and_Camus_1986,_Schmid_1982_(IIB2c)'; TEXT TAXON=30 CHARACTER=28 TEXT= 'Ogura_1972,_Kubitizki_1990,_Schmid_1982_(IIB1c)'; TEXT TAXON=34 CHARACTER=28 TEXT= 'Ogura_1972_-_p._358,_Schmid_1982_(IIB2c)'; TEXT TAXON=39 CHARACTER=28 TEXT= 'Ogura_1972,_Schmid_1982_(IIB1c)'; TEXT TAXON=43 CHARACTER=28 TEXT= '_Kubitizki_1990,_Schmid_1982_(IIB1c)'; TEXT CHARACTER=23 TEXT= 'N.B._For_base->_apex_of_stipe,_NOT_the_rachis!___Used_mostly_the_following_references:__Kubitizki_1990,_Ogura_1972,_Lin_&_DeVol_1977,_1978,_Keating_1968.'; TEXT TAXON=3 CHARACTER=23 TEXT= 'Bierhorst_1971,_Warmbrodt_&_Evert_1978'; TEXT TAXON=7 CHARACTER=23 TEXT= 'Ogura_1972,_p._116_(as_Lonchitis_pubescens).__Voucher_(see_ARS_email_5/2/95).'; TEXT TAXON=13 CHARACTER=23 TEXT= 'Nair_&_Sen_1974,_Kubitizki_1990'; TEXT TAXON=15 CHARACTER=23 TEXT= White_&_Turner_1988; TEXT TAXON=1 CHARACTER=23 TEXT= 'Kubitzi_1990,_Ogura_1972'; TEXT TAXON=2 CHARACTER=23 TEXT= 'Kubitzi_1990,_Ogura_1972'; TEXT TAXON=4 CHARACTER=23 TEXT= 'Kubitzi_1990,_Ogura_1972,_Lin_&_DeVol_1978'; TEXT TAXON=5 CHARACTER=23 TEXT= 'Kubitzi_1990,_Ogura_1972,_Lin_&_DeVol_1978'; TEXT TAXON=6 CHARACTER=23 TEXT= 'Kubitzi_1990,_Ogura_1972'; TEXT TAXON=8 CHARACTER=23 TEXT= 'Keating_1968,_Ogura_1972'; TEXT TAXON=9 CHARACTER=23 TEXT= 'Keating_1968,_Ogura_1972'; TEXT TAXON=10 CHARACTER=23 TEXT= _Ogura_1972; TEXT TAXON=11 CHARACTER=23 TEXT= Keating_1968; TEXT TAXON=12 CHARACTER=23 TEXT= 'Kubitzi_1990,_Ogura_1972'; TEXT TAXON=14 CHARACTER=23 TEXT= 'Keating_1968,_Ogura_1972'; TEXT TAXON=16 CHARACTER=23 TEXT= _Ogura_1972; TEXT TAXON=17 CHARACTER=23 TEXT= Lin__&_DeVol_1978; TEXT TAXON=18 CHARACTER=23 TEXT= 'Lin_&_DeVol_1978,_p._91'; TEXT TAXON=19 CHARACTER=23 TEXT= 'Ogura_1972,_p._378'; TEXT TAXON=20 CHARACTER=23 TEXT= 'Ogura_1972,_P._115,_Fig._114b.__Note_where_bundles_fuse=rachis,_not_stipe!'; TEXT TAXON=21 CHARACTER=23 TEXT= 'Ogura_1972,_p._378'; TEXT TAXON=22 CHARACTER=23 TEXT= Kubitzi_1990; TEXT TAXON=23 CHARACTER=23 TEXT= _Ogura_1972; TEXT TAXON=24 CHARACTER=23 TEXT= Ogura_1972; TEXT TAXON=25 CHARACTER=23 TEXT= voucher; TEXT TAXON=26 CHARACTER=23 TEXT= 'Kubitzi_1990,_Ogura_1972_-_p._345_and_pp._108-109'; TEXT TAXON=27 CHARACTER=23 TEXT= Lin_and_DeVol_1978._p._86; TEXT TAXON=28 CHARACTER=23 TEXT= 'Ogura_1972,_p._300-301.__Polycyclic.'; TEXT TAXON=29 CHARACTER=23 TEXT= 'Ogura_1972,_p._108'; TEXT TAXON=30 CHARACTER=23 TEXT= 'Ogura_1972,_p._108_and_386'; TEXT TAXON=31 CHARACTER=23 TEXT= 'Ogura_1972,_p._372_"Amphidesmium",_Keating_1968'; TEXT TAXON=32 CHARACTER=23 TEXT= 'Ogura_1972,_p._288-289_and_p._112.__Bierhorst_1971,_fig._11-7F.'; TEXT TAXON=33 CHARACTER=23 TEXT= 'Ogura_1972,_p._108,_p._99'; TEXT TAXON=34 CHARACTER=23 TEXT= 'Ogura_1972,_p._359;_p._109,_Fig._110:C.'; TEXT TAXON=35 CHARACTER=23 TEXT= 'Kubitzi_1990,_Ogura_1972_-_p._364-366.'; TEXT TAXON=36 CHARACTER=23 TEXT= 'voucher_(see_ARS_email_5/2/95)'; TEXT TAXON=37 CHARACTER=23 TEXT= 'Kubitzi_1990,_Ogura_1972_-_p._391'; TEXT TAXON=38 CHARACTER=23 TEXT= 'N/A.__Gifford_&_Foster:__Psilotum_nudum_has_no_leaf_trace_(it_also_has_no_stipe!)'; TEXT TAXON=39 CHARACTER=23 TEXT= 'Ogura_1972,_p._356'; TEXT TAXON=40 CHARACTER=23 TEXT= 'living_material_-_no_voucher_-_see_ARS_email_5/2/95.'; TEXT TAXON=41 CHARACTER=23 TEXT= 'Lin_&_DeVol_1977,_p._97'; TEXT TAXON=42 CHARACTER=23 TEXT= 'Ogura_1972,_p._335,_Fig._379D'; TEXT TAXON=43 CHARACTER=23 TEXT= 'ARS_email_5/2/95'; TEXT TAXON=44 CHARACTER=23 TEXT= 'ARS_email_5/2/95'; TEXT TAXON=45 CHARACTER=23 TEXT= 'Bierhorst_1971,_p._341_"simple";_Ogura_1972,_p._401,_fig._452'; TEXT TAXON=46 CHARACTER=23 TEXT= 'Ogura_1972,_p._109'; TEXT TAXON=47 CHARACTER=23 TEXT= 'Lin_&_DeVol_1978,_p._87;_Kubitzki_1990'; TEXT TAXON=48 CHARACTER=23 TEXT= 'voucher_(see_ARS_email_5/2/95)'; TEXT CHARACTER=24 TEXT= 'Stipe,_NOT_rachis!__Though_state_0_seems_broad,_all_are_variations_on_the_horseshoe_shape.'; TEXT TAXON=1 CHARACTER=24 TEXT= 'Kubitizki_1990,_Ogura_1972'; TEXT TAXON=2 CHARACTER=24 TEXT= 'Kubitizki_1990,_Ogura_1972'; TEXT TAXON=3 CHARACTER=24 TEXT= 'Bierhorst_1971,_Warmbrodt_&_Evert_1978'; TEXT TAXON=4 CHARACTER=24 TEXT= 'Kubitizki_1990,_Ogura_1972,_Lin_&_DeVol_1978'; TEXT TAXON=5 CHARACTER=24 TEXT= 'Kubitizki_1990,_Ogura_1972_-_p._109,_Lin_&_DeVol_1978'; TEXT TAXON=6 CHARACTER=24 TEXT= 'Kubitizki_1990,_Ogura_1972,_p.111'; TEXT TAXON=7 CHARACTER=24 TEXT= 'voucher;_Ogura_1972,_p._116,_fig._115:C.'; TEXT TAXON=8 CHARACTER=24 TEXT= 'Keating_1968,_Ogura_1972'; TEXT TAXON=9 CHARACTER=24 TEXT= 'ARS_email_5/3/95;_Ogura_1972'; TEXT TAXON=10 CHARACTER=24 TEXT= Ogura_1972; TEXT TAXON=11 CHARACTER=24 TEXT= Ogura_1972; TEXT TAXON=12 CHARACTER=24 TEXT= 'Kubitizki_1990,_Ogura_1972'; TEXT TAXON=13 CHARACTER=24 TEXT= Kubitizki_1990; TEXT TAXON=14 CHARACTER=24 TEXT= Keating_1968; TEXT TAXON=15 CHARACTER=24 TEXT= White_&_Turner_1988; TEXT TAXON=16 CHARACTER=24 TEXT= _Ogura_1972; TEXT TAXON=17 CHARACTER=24 TEXT= Lin_&_DeVol_1978; TEXT TAXON=18 CHARACTER=24 TEXT= 'Lin_&_DeVol_1978,_p._91'; TEXT TAXON=19 CHARACTER=24 TEXT= 'Ogura_1972,_p._378'; TEXT TAXON=20 CHARACTER=24 TEXT= '_Ogura_1972,_p._115,_fig._114b_(note_the_bundles_fuse_together_in_rachis,_NOT_stipe!).'; TEXT TAXON=21 CHARACTER=24 TEXT= '_Ogura_1972,_p._378'; TEXT TAXON=22 CHARACTER=24 TEXT= Kubitizki_1990; TEXT TAXON=23 CHARACTER=24 TEXT= Kubitizki_1990; TEXT TAXON=24 CHARACTER=24 TEXT= Kubitizki_1990; TEXT TAXON=25 CHARACTER=24 TEXT= 'Ogura_1972,_p._108,_p._391'; TEXT TAXON=26 CHARACTER=24 TEXT= 'Kubitizki_1990,_Ogura_1972,_p._345_and_108-9.__See_ARS_email_5/2/95'; TEXT TAXON=27 CHARACTER=24 TEXT= '"T".__Kubitizki_1990,_Lin_&_DeVol_1978,_p._86'; TEXT TAXON=28 CHARACTER=24 TEXT= 'concentric_rings.__Ogura_1972,_p._300-301'; TEXT TAXON=29 CHARACTER=24 TEXT= 'ARS_email_5/2/95.__Bower_1926,_p._180;_Ogura_1972,_p._397,_figs._445,_447'; TEXT TAXON=30 CHARACTER=24 TEXT= 'Ogura_1972,_p._108,_p._386.__"semicircular"'; TEXT TAXON=31 CHARACTER=24 TEXT= 'Ogura_1972,_p._372.__"Amphidesmium"'; TEXT TAXON=32 CHARACTER=24 TEXT= 'Ogura_1972,_p._288-289,_p._112;_Bierhorst_1971,_fig._11-7F.'; TEXT TAXON=33 CHARACTER=24 TEXT= 'Ogura_1972,_p._108,_p._99'; TEXT TAXON=34 CHARACTER=24 TEXT= 'Ogura_1972,_p._359,_p._109_Fig._110:C'; TEXT TAXON=35 CHARACTER=24 TEXT= 'Kubitizki_1990,_Ogura_1972,_p._366_(top).'; TEXT TAXON=36 CHARACTER=24 TEXT= 'voucher;_ARS_email_5/2/95.'; TEXT TAXON=37 CHARACTER=24 TEXT= 'Ogura_1972,_p._391,_Kubitizki_1990'; TEXT TAXON=38 CHARACTER=24 TEXT= 'NA_(Gifford_&_Foster:_P._nudum_has_no_leaf_trace)'; TEXT TAXON=39 CHARACTER=24 TEXT= 'Ogura_1972,_p._356,_fig._404'; TEXT TAXON=40 CHARACTER=24 TEXT= 'Lin_&_DeVol_1978,_p._87,_Table_3'; TEXT TAXON=41 CHARACTER=24 TEXT= 'Lin_&_DeVol_1978,_p._87,_Table_3'; TEXT TAXON=42 CHARACTER=24 TEXT= 'Ogura_1972,_p._335,_Fig._379D'; TEXT TAXON=43 CHARACTER=24 TEXT= 'Lin_&_DeVol_1978,_p._87,_Table_3'; TEXT TAXON=44 CHARACTER=24 TEXT= 'ARS_email_5/2/95'; TEXT TAXON=45 CHARACTER=24 TEXT= 'Ogura_1972,_p._401,_Bierhorst_1971,_p._341_"simple"'; TEXT TAXON=46 CHARACTER=24 TEXT= 'Lin_&_DeVol_1978,_p.__86;_Ogura_1972,_p._329:_lines_7-8_from_bottom'; TEXT TAXON=47 CHARACTER=24 TEXT= 'Kubitizki_1990,_Lin_&_DeVol_1978'; TEXT TAXON=48 CHARACTER=24 TEXT= 'ARS_email_5/2/95'; TEXT TAXON=28 CHARACTER=25 TEXT= 'ARS_email_5/4/95.__Bierhorst_1960,_fig._52'; TEXT TAXON=32 CHARACTER=25 TEXT= 'Bierhorst_1960,_White_1963b,_Kim_et_al._1993'; TEXT TAXON=38 CHARACTER=25 TEXT= 'Bierhorst_1960;_1971_-_p._166'; TEXT TAXON=28 CHARACTER=41 TEXT= 'Bower_1923,_p.302;_Bierhorst_1971,_p.363'; TEXT TAXON=32 CHARACTER=41 TEXT= 'Bierhorst_1971,_p._147'; TEXT TAXON=38 CHARACTER=41 TEXT= 'Bierhorst_1971,_p._186'; TEXT CHARACTER=41 TEXT= 'Gifford_and_Foster_1988,_p._68'; TEXT CHARACTER=72 TEXT= 'All_homosporous_ferns_have_independent_gametophytes_(exosporic).__Heterosporous_ferns_have_gametophytes_that_are_dependent_on_the_sporophyte_(endosporic).'; TEXT TAXON=51 CHARACTER=41 TEXT= 'NA.__There_is_an_initial_free_nuclear_period_where_a_large_no._of_nuclei__aggregate_toward_inward-directed_end_of_embryo.__Cell_walls_form_progressively_in_upward_direction.__Not_comparable_to_horiz/vert_division_of_zygote_in_cellular_individuals.'; TEXT CHARACTER=15 TEXT= As_defined_in_text; TEXT TAXON=8 CHARACTER=62 TEXT= 'Tryon_&_Lugardon_1991;_p._271,_fig.5'; TEXT TAXON=51 CHARACTER=15 TEXT= ARS_Fax_10_May_95; TEXT TAXON=51 CHARACTER=16 TEXT= ARS_Fax_10_May_95; TEXT TAXON=3 CHARACTER=66 TEXT= 'Tryon_&_Lugardon_1991:_"rugulate"'; TEXT TAXON=4 CHARACTER=66 TEXT= 'Tryon_&_Lugardon_1991:_"gemmulate"'; TEXT TAXON=5 CHARACTER=66 TEXT= 'Tryon_&_Lugardon_1991:_"slightly_rugulate"'; TEXT TAXON=14 CHARACTER=66 TEXT= 'Tryon_&_Lugardon_1991:_"finely_undulate"'; TEXT TAXON=17 CHARACTER=66 TEXT= 'Tryon_&_Lugardon_1991:_"rugulate"'; TEXT TAXON=20 CHARACTER=66 TEXT= 'Tryon_&_Lugardon_1991:_"slightly_undulate"'; TEXT TAXON=23 CHARACTER=66 TEXT= 'Tryon_&_Lugardon_1991:_"rugulate"'; TEXT TAXON=30 CHARACTER=66 TEXT= 'Tryon_&_Lugardon_1991:_p._73,_Fig._4'; TEXT TAXON=41 CHARACTER=66 TEXT= 'KMP_had_originally_scored_as_0;_ARS_changed_to_?_03/95:__can''t_really_tell_from_Tryon_&_Lugardon_1991.'; TEXT TAXON=42 CHARACTER=66 TEXT= 'See_Tryon_&Lugardon_1991,_Fig_32.5_"ridged_exospore"'; TEXT TAXON=51 CHARACTER=60 TEXT= 'Dehgan_&_Dehgan_1988.__This_score_is_for_free-sporing_microspores.__Megaspores_are_not_free-sporing.'; TEXT TAXON=51 CHARACTER=59 TEXT= 'spores_of_Cycadaceae_appear_to_be_more_or_less_the_same_size,_but_more_importantly,_they_are_not_of_the_same_behaviour.__Female_sporogenesis_entails_degeneration_of_three_megaspores_and_only_one_functional_megaspore_is_formed.'; TEXT TAXON=51 CHARACTER=61 TEXT= 'No_green_color_reported_(Dehgan_&_Dehgan_1988)'; TEXT TAXON=51 CHARACTER=62 TEXT= Dehgan_&_Dehgan_1988; TEXT TAXON=51 CHARACTER=63 TEXT= 'NA;_no_perispore_in_Cycadales'; TEXT TAXON=51 CHARACTER=64 TEXT= 'NA;_no_perispore_in_Cycadales'; TEXT TAXON=51 TEXT= 'General_cycad_refs_used_for_scoring:__Gifford_&Foster_1988,_Bierhorst_1971,_Rothwell_&_Serbert_1994,_Kubitizki_1990,_Crane_1988,_Dehgan_&_Dehgan_1988,_Jones_1993,_Stevenson_1990'; TEXT TAXON=51 CHARACTER=65 TEXT= 'Dehgan_&_Dehgan_1988,_p._1502-1503'; TEXT TAXON=51 CHARACTER=66 TEXT= 'Dehgan_&_Dehgan_1988,_p._1507'; TEXT TAXON=51 CHARACTER=46 TEXT= 'Gifford_&_Foster_1988,_p._369.___Score_for_microspores_only.__Megaspores_are_not_free-sporing,_so_they_were_not_scored_(only_one_functional_megaspore_produced/megasporangium).'; TEXT CHARACTER=46 TEXT= 'See_"Spore-output"_table_in_Bower_1923,_p._262-263.'; TEXT TAXON=1 CHARACTER=46 TEXT= 'Bower_1923,_p._262-263'; TEXT TAXON=3 CHARACTER=46 TEXT= 'Megaspores_=_1/sporangium.__Microspores=32-64/sporangium.'; TEXT TAXON=5 CHARACTER=46 TEXT= 'Kubitizki_1990,_Bower_1923,_p._262-263'; TEXT TAXON=23 CHARACTER=46 TEXT= 'Bower_1923,_p._262-263'; TEXT TAXON=24 CHARACTER=46 TEXT= 'Bower_1923,_p._262-263;_Bierhorst_1971'; TEXT TAXON=25 CHARACTER=46 TEXT= Kubitizki_1990; TEXT TAXON=26 CHARACTER=46 TEXT= 'Bower_1923,_p._262-263.__Score_reported_could_be_incorrect;_the_character_appears_to_be_polymorphic_for_the_family_(see_Vandenboschia,_also_Hymenophyllaceae);_literature_reports_may_be_incorrect,_in_part.'; TEXT TAXON=27 CHARACTER=46 TEXT= 'Bower_1923,_p._262-263'; TEXT TAXON=28 CHARACTER=46 TEXT= 'Bower_1923,_p._262-263'; TEXT TAXON=29 CHARACTER=46 TEXT= 'Microspores:_64/sporangium;_Megaspores:_1/sporangium'; TEXT TAXON=32 CHARACTER=46 TEXT= 'Bower_1923,_p._262-263'; TEXT TAXON=33 CHARACTER=46 TEXT= Bierhorst_1971; TEXT TAXON=38 CHARACTER=46 TEXT= White_et._al_1977; TEXT TAXON=46 CHARACTER=46 TEXT= 'Bower_1923,_p._262-263'; TEXT TAXON=45 CHARACTER=46 TEXT= 'Megaspores:_1/sporangium.__Microspores:_32/sporangium'; TEXT TAXON=51 CHARACTER=2 TEXT= Gifford_&_Foster_1988; TEXT TAXON=42 CHARACTER=2 TEXT= see_KMP_files_for_drawings_and_reasoning; TEXT TAXON=45 CHARACTER=2 TEXT= 'see_KMP_files_for_drawings_and_reasoning.__In_hemidimorphic_comparison,_sporangiferous_trusses_appear_to_be_initiated_ftom_the_base_of_dissected_leaf_(see_Bierhorst_1971)'; TEXT CHARACTER=2 TEXT= vouchers_looked_at_for_all; TEXT TAXON=32 CHARACTER=2 TEXT= 'Bierhorst,_1971,_p._137,_beginning_about_line_9'; TEXT TAXON=51 CHARACTER=10 TEXT= both_branched_and_unbranched_hairs; TEXT TAXON=51 CHARACTER=11 TEXT= ARS_Fax_10_May_95; TEXT TAXON=51 CHARACTER=17 TEXT= 'eventually,_the_petioles_of_some_cycads_break_off_rather_cleanly,_e.g.,_Dioon,_but_Cycas_does_not_(Jones_1993,_p._124,_126);_also_pinna_of_some_genera_abscise,_e.g._Zamia,_but_not_in_Cycas.'; TEXT CHARACTER=10 TEXT= Vouchers_checked_for_all; TEXT CHARACTER=11 TEXT= Vouchers_checked_for_all; TEXT TAXON=39 CHARACTER=10 TEXT= hairs_very_short; TEXT TAXON=45 CHARACTER=10 TEXT= 'Kubitizki_1990_-_papillae_-_usually_interpreted_as_4_fused_hairs_atop,_which_are_uniseriate_hairs'; TEXT TAXON=2 CHARACTER=10 TEXT= 'hairs_very_short,_appressed'; TEXT TAXON=3 CHARACTER=10 TEXT= 'see_FNA_1993_(1-2_celled_papillae)'; TEXT CHARACTER=17 TEXT= Vouchers_checked_for_all; TEXT TAXON=6 CHARACTER=17 TEXT= 'Specimens_don''t_show_it,_but_many_spp._are_clearly_articulate'; TEXT CHARACTER=36 TEXT= Vouchers_checked_when_there_was_any_doubt; TEXT TAXON=2 CHARACTER=36 TEXT= 'probably_on_wet_rocks_-_related_spp.'; TEXT TAXON=17 CHARACTER=36 TEXT= sometimes_epipetric; TEXT TAXON=18 CHARACTER=36 TEXT= Voucher; TEXT TAXON=19 CHARACTER=36 TEXT= 'moist_earth_banks;_wet_rock_faces_(Burrows_1990)'; TEXT TAXON=20 CHARACTER=36 TEXT= Voucher; TEXT TAXON=24 CHARACTER=36 TEXT= Voucher; TEXT TAXON=25 CHARACTER=36 TEXT= 'Voucher;_"on_mossy_tree_trunk"'; TEXT TAXON=26 CHARACTER=36 TEXT= 'or_on_wet_rocks_-_related_spp.'; TEXT TAXON=29 CHARACTER=36 TEXT= seasonally_dry_areas; TEXT TAXON=36 CHARACTER=36 TEXT= 'Voucher_-_"on_rocky_bank"'; TEXT TAXON=37 CHARACTER=36 TEXT= 'Voucher_;_or_on_wet_rocks'; TEXT TAXON=38 CHARACTER=36 TEXT= 'Voucher_"high_up_on_tree",_but_also_know_to_occur_on_calcareous_cliffs,_therefore_not_always_epiphytic.__See_ARS_email_2/6/95_(10:21)'; TEXT TAXON=39 CHARACTER=36 TEXT= 'Voucher_"mangrove_swamp"'; TEXT TAXON=40 CHARACTER=36 TEXT= 'Voucher_"rupicolous"'; TEXT TAXON=42 CHARACTER=36 TEXT= Voucher; TEXT TAXON=48 CHARACTER=36 TEXT= 'Voucher_"on_muddy_rock";_Note:_many_spp._(but_not_all)_of_Vittaria_are_epiphytic!'; TEXT TAXON=51 CHARACTER=36 TEXT= ARS_Fax_10_May_95; TEXT TAXON=51 CHARACTER=3 TEXT= ARS_Fax_10_May_95; TEXT CHARACTER=3 TEXT= Vouchers_checked_for_all; TEXT TAXON=24 CHARACTER=3 TEXT= Voucher; TEXT TAXON=51 CHARACTER=4 TEXT= ARS_Fax_10_May_95; TEXT TAXON=23 CHARACTER=4 TEXT= Voucher; TEXT TAXON=30 CHARACTER=4 TEXT= 'Wagner_1952.__The_leaf_of_Matonia_is_similar_to_the_pedate_leaves_of_Adiantum,_where_the_early_leaves_are_clearly_pinnate,_but_the_pinnae_of_mature_leaves_are_re-oriented_so_as_to_make_the_leaf_look_dichotomously_branched._See_also_Mickel_def''n_of_pedate'; TEXT TAXON=45 CHARACTER=4 TEXT= 'wet_mount_of_leaf_from_voucher_shows_a_main_vein_running_up_the_center_of_large,_sterile_leaf.'; TEXT CHARACTER=5 TEXT= 'Vouchers_checked_for_all_and_Kubitizki_1990.___See_also_Alan''s_e-mail_05.26.94.__This_character_largely_modelled_after_Nixon_et_al._1994.'; TEXT TAXON=51 CHARACTER=5 TEXT= 'Cycas_has_a_single,_unbranched_vein_per_pinna,_therefore_2_vein_orders'; TEXT TAXON=38 CHARACTER=5 TEXT= NA; TEXT TAXON=38 CHARACTER=4 TEXT= NA; TEXT CHARACTER=7 TEXT= 'Vouchers_checked_for_all_and_Kubitizki_1990.___See_also_Alan''s_e-mail_05.26.94.__This_character_largely_modelled_after_Nixon_et_al._1994.'; TEXT TAXON=51 CHARACTER=7 TEXT= _See_general_Cycas_references.__Scored_the_same_way_by_Nixon_et_al_1994; TEXT TAXON=51 CHARACTER=8 TEXT= NA; TEXT TAXON=38 CHARACTER=7 TEXT= NA; TEXT TAXON=46 CHARACTER=7 TEXT= NA; TEXT TAXON=1 CHARACTER=7 TEXT= Voucher; TEXT TAXON=7 CHARACTER=7 TEXT= Voucher; TEXT TAXON=9 CHARACTER=7 TEXT= Voucher; TEXT TAXON=21 CHARACTER=7 TEXT= Voucher; TEXT TAXON=30 CHARACTER=7 TEXT= Voucher.__Only_fertile_blades_have_vein_fusion_around_sori; TEXT TAXON=41 CHARACTER=7 TEXT= Voucher; TEXT CHARACTER=8 TEXT= 'Vouchers_checked_for_all_and_Kubitizki_1990.___See_also_Alan''s_e-mail_05.26.94.__This_character_largely_modelled_after_Nixon_et_al._1994.'; TEXT TAXON=1 CHARACTER=8 TEXT= NA; TEXT TAXON=2 CHARACTER=8 TEXT= NA; TEXT TAXON=3 CHARACTER=8 TEXT= NA; TEXT TAXON=4 CHARACTER=8 TEXT= NA; TEXT TAXON=6 CHARACTER=8 TEXT= NA; TEXT TAXON=8 CHARACTER=8 TEXT= NA; TEXT TAXON=10 CHARACTER=8 TEXT= NA; TEXT TAXON=11 CHARACTER=8 TEXT= NA; TEXT TAXON=12 CHARACTER=8 TEXT= NA; TEXT TAXON=13 CHARACTER=8 TEXT= NA; TEXT TAXON=14 CHARACTER=8 TEXT= NA; TEXT TAXON=15 CHARACTER=8 TEXT= NA; TEXT TAXON=16 CHARACTER=8 TEXT= NA; TEXT TAXON=18 CHARACTER=8 TEXT= NA; TEXT TAXON=19 CHARACTER=8 TEXT= NA; TEXT TAXON=20 CHARACTER=8 TEXT= NA; TEXT TAXON=22 CHARACTER=8 TEXT= NA; TEXT TAXON=23 CHARACTER=8 TEXT= NA; TEXT TAXON=24 CHARACTER=8 TEXT= NA; TEXT TAXON=25 CHARACTER=8 TEXT= NA; TEXT TAXON=26 CHARACTER=8 TEXT= NA; TEXT TAXON=27 CHARACTER=8 TEXT= NA; TEXT TAXON=28 CHARACTER=8 TEXT= NA; TEXT TAXON=31 CHARACTER=8 TEXT= NA; TEXT TAXON=32 CHARACTER=8 TEXT= NA; TEXT TAXON=33 CHARACTER=8 TEXT= NA; TEXT TAXON=35 CHARACTER=8 TEXT= NA; TEXT TAXON=37 CHARACTER=8 TEXT= NA; TEXT TAXON=38 CHARACTER=8 TEXT= NA; TEXT TAXON=40 CHARACTER=8 TEXT= NA; TEXT TAXON=42 CHARACTER=8 TEXT= NA; TEXT TAXON=43 CHARACTER=8 TEXT= NA; TEXT TAXON=46 CHARACTER=8 TEXT= NA; TEXT TAXON=47 CHARACTER=8 TEXT= NA; TEXT TAXON=30 CHARACTER=8 TEXT= NA; TEXT TAXON=30 CHARACTER=5 TEXT= 'Scored_as_3_because_the_pseudodichotomous_blade_(trichotomous-pedate;_Kubitzki,_1990)_is_apparently_derived_by_repeated_development_of_successive_basal_basiscopic_pinnules,_creating_a_scorpioid_cymose_blade_pattern'; TEXT TAXON=51 CHARACTER=12 TEXT= 'stomata_haplocheilic_(Rothwell_&_Serbet_1994,_p._473,_char._12;_ring_of_subsidiary_cells_(Bierhorst_1971,_p._408).'; TEXT TAXON=51 CHARACTER=13 TEXT= 'Sen_&_De_1992,_p._256_-_perigenous_stomata_in_extant_cycads,_similar_to_ophioglossoids'; TEXT CHARACTER=12 TEXT= 'see_text_for_important_references.__Where_Sen_&_De_1992_had_a_predominance_of_type_shown,_I_scored_for_most_predominant_type.__If_Kondo_1962__and_Sen_&_De_conflicted_over_same_species,_I_followed_Kondo.'; TEXT CHARACTER=13 TEXT= 'see_text_for_important_references._Where_Sen_&_De_1992_had_a_predominance_of_type_shown,_I_scored_for_most_predominant_type.__If_Kondo_1962__and_Sen_&_De_conflicted_over_same_species,_I_followed_Kondo.'; TEXT TAXON=1 CHARACTER=12 TEXT= 'Kondo_1962_(specifies_mexicana),_Payne_1979,_Kubitzki_1990'; TEXT TAXON=2 CHARACTER=12 TEXT= 'Kondo_1962,_Payne_1979,_Kubitizki_1990_(principally_polocytic)'; TEXT TAXON=3 CHARACTER=12 TEXT= 'Sen_&_De_1991:_parameristic_infrequent;_Van_Cottem_1973'; TEXT TAXON=4 CHARACTER=12 TEXT= 'Kondo_1962_(specified_occidentale),_Sen_&_De_1992,_Van_Cottem_1973'; TEXT TAXON=5 CHARACTER=12 TEXT= Kondo_1962; TEXT TAXON=6 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=7 CHARACTER=12 TEXT= Sen_&_De_1992; TEXT TAXON=8 CHARACTER=12 TEXT= 'Sen_&_De_1992,_Kondo_1962'; TEXT TAXON=9 CHARACTER=12 TEXT= 'Sen_&_De_1992,_Kondo_1962'; TEXT TAXON=10 CHARACTER=12 TEXT= Sen_&_De_1992; TEXT TAXON=11 CHARACTER=12 TEXT= 'Thurston_1969;__guess_from_Van_Cottem_1973,_p._67'; TEXT TAXON=12 CHARACTER=12 TEXT= 'Sen_&_De_1992,_Kondo_1962'; TEXT TAXON=13 CHARACTER=12 TEXT= 'Sen_&_De_1992,_Kondo_1962'; TEXT TAXON=14 CHARACTER=12 TEXT= Kondo_1962; TEXT TAXON=15 CHARACTER=12 TEXT= Kubitizki_1990; TEXT TAXON=16 CHARACTER=12 TEXT= 'Sen_&_De_1992:_rarely_parameristic'; TEXT TAXON=17 CHARACTER=12 TEXT= Kondo_1962; TEXT TAXON=18 CHARACTER=12 TEXT= Kondo_1962; TEXT TAXON=19 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=20 CHARACTER=12 TEXT= _Sen_&_De_1992; TEXT TAXON=21 CHARACTER=12 TEXT= Kondo_1962; TEXT TAXON=22 CHARACTER=12 TEXT= 'Sen_&_De_1992:_rarely_parameristic;_Kondo_1962'; TEXT TAXON=23 CHARACTER=12 TEXT= 'Sen_&_De_1992,_Van_Cottem_1973:_"uniformity_in_Gleicheniaceae"_-_see_Dicranopteris;_Thurston_1969:_subtype_a'; TEXT TAXON=24 CHARACTER=12 TEXT= Van_Cottem_1973?_White_1977?; TEXT TAXON=25 CHARACTER=12 TEXT= 'Van_Cottem_1973,_Kondo_1962'; TEXT TAXON=26 CHARACTER=12 TEXT= 'NA,_Eames_1932'; TEXT TAXON=27 CHARACTER=12 TEXT= Kondo_1962; TEXT TAXON=28 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=29 CHARACTER=12 TEXT= 'Kubitizki_1990,_Mickel_&_Votava_1971'; TEXT TAXON=30 CHARACTER=12 TEXT= Kondo_1962; TEXT TAXON=31 CHARACTER=12 TEXT= 'Sen_&_De_1992:_rarely_diameristic'; TEXT TAXON=32 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992,_see_also_arguments_in_Payne_1979.'; TEXT TAXON=33 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992,_see_also_arguments_in_Payne_1979.'; TEXT TAXON=34 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992.__I_let_Kondo_override_Sen_&_De,_when_Kondo_has_our_exact_species'; TEXT TAXON=35 CHARACTER=12 TEXT= 'Kondo_1962,_Payne_1979'; TEXT TAXON=36 CHARACTER=12 TEXT= Kondo_1962; TEXT TAXON=37 CHARACTER=12 TEXT= Kondo_1962; TEXT TAXON=38 CHARACTER=12 TEXT= 'Pant_&_Khare_1971,_White_1977'; TEXT TAXON=39 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=40 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=41 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=42 CHARACTER=12 TEXT= 'Kubitizki_1990,_see_Tryon_1961,_fig._9.'; TEXT TAXON=43 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=44 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992.__I_let_Kondo_override_Sen_&_De'; TEXT TAXON=45 CHARACTER=12 TEXT= 'Sen_&_De_1992:_rarely_parameristic'; TEXT TAXON=46 CHARACTER=12 TEXT= Kondo_1962; TEXT TAXON=47 CHARACTER=12 TEXT= Sen_&_De_1992; TEXT TAXON=48 CHARACTER=12 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=1 CHARACTER=13 TEXT= 'Kondo_1962_(specifies_mexicana),_Payne_1979,_Kubitzki_1990'; TEXT TAXON=2 CHARACTER=13 TEXT= 'Kondo_1962,_Payne_1979,_Kubitizki_1990_(principally_polocytic)'; TEXT TAXON=3 CHARACTER=13 TEXT= 'Van_Cottem_1973,_Sen_&_De_1992'; TEXT TAXON=4 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992,_Van_Cottem_1973'; TEXT TAXON=5 CHARACTER=13 TEXT= Kondo_1962; TEXT TAXON=6 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=7 CHARACTER=13 TEXT= Sen_&_De_1992; TEXT TAXON=8 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=9 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=10 CHARACTER=13 TEXT= Sen_&_De_1992; TEXT TAXON=11 CHARACTER=13 TEXT= 'Thurston_1969;_guess_from_Van_Cottem_1973,_p._67'; TEXT TAXON=12 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=13 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=14 CHARACTER=13 TEXT= Kondo_1962; TEXT TAXON=15 CHARACTER=13 TEXT= Kubitzki_1990; TEXT TAXON=16 CHARACTER=13 TEXT= '_Sen_&_De_1992:_rarely_mesogenous'; TEXT TAXON=17 CHARACTER=13 TEXT= Kondo_1962; TEXT TAXON=18 CHARACTER=13 TEXT= Kondo_1962; TEXT TAXON=19 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=20 CHARACTER=13 TEXT= Sen_&_De_1992; TEXT TAXON=21 CHARACTER=13 TEXT= Kondo_1962; TEXT TAXON=22 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=23 CHARACTER=13 TEXT= 'Sen_&_De_1992,_Van_Cottem_1973,_Thurston_1969:_subtype_a'; TEXT TAXON=24 CHARACTER=13 TEXT= 'Van_Cottem_1973,_White_1977'; TEXT TAXON=25 CHARACTER=13 TEXT= 'Van_Cottem_1973,_Kondo_1962'; TEXT TAXON=26 CHARACTER=13 TEXT= 'NA,_Eames_1932'; TEXT TAXON=27 CHARACTER=13 TEXT= Kondo_1962; TEXT TAXON=28 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=29 CHARACTER=13 TEXT= 'Kubitizki_1990,_Mickel_&_Votava_1971'; TEXT TAXON=30 CHARACTER=13 TEXT= Kondo_1962; TEXT TAXON=31 CHARACTER=13 TEXT= 'Kubitizki_1990,_Sen_&_De_1992,_Payne_1979'; TEXT TAXON=32 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992,_see_Payne_1979_for_arguments'; TEXT TAXON=33 CHARACTER=13 TEXT= 'Sen_&_De_1992,_see_Payne_1979_for_arguments'; TEXT TAXON=34 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=35 CHARACTER=13 TEXT= 'Kondo_1962,_Payne_1979'; TEXT TAXON=36 CHARACTER=13 TEXT= Kondo_1962; TEXT TAXON=37 CHARACTER=13 TEXT= Kondo_1962; TEXT TAXON=38 CHARACTER=13 TEXT= 'Pant_&_Khare_1971,_White_1977'; TEXT TAXON=39 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=40 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=41 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=42 CHARACTER=13 TEXT= Kubitizki_1990; TEXT TAXON=43 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=44 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT TAXON=45 CHARACTER=13 TEXT= 'Sen_&_De_1992:_"rarely_mesogenous"'; TEXT TAXON=46 CHARACTER=13 TEXT= Kondo_1962; TEXT TAXON=47 CHARACTER=13 TEXT= Sen_&_De_1992; TEXT TAXON=48 CHARACTER=13 TEXT= 'Kondo_1962,_Sen_&_De_1992'; TEXT CHARACTER=1 TEXT= Gifford_&_Foster_1988; TEXT CHARACTER=6 TEXT= 'Vouchers_for_all.__Cf._char_28:_Nixon_et_al._(1994)'; TEXT TAXON=51 CHARACTER=6 TEXT= 'mous.__Hard_to_find_herbarium_specimen_with_basal_pinnae,_therefore_we_followed_Kubitizki_1990'; TEXT TAXON=41 CHARACTER=14 TEXT= 'often_2_states_on_same_frond!__Kubitizki_1990:_"variously_anadromous,_isodromous,_catadromous"'; TEXT TAXON=45 CHARACTER=14 TEXT= NA; TEXT TAXON=46 CHARACTER=14 TEXT= NA; TEXT TAXON=48 CHARACTER=14 TEXT= NA; TEXT TAXON=5 CHARACTER=14 TEXT= 'NA_-_dichotomous_primary_venation'; TEXT TAXON=17 CHARACTER=14 TEXT= 'NA_-_dichotomous_primary_venation'; TEXT TAXON=51 CHARACTER=30 TEXT= Gen_refs; TEXT CHARACTER=30 TEXT= 'vouchers;_Kubitizki_1990'; TEXT TAXON=3 CHARACTER=30 TEXT= FNA; TEXT CHARACTER=31 TEXT= 'vouchers;_Kubitizki_1990'; TEXT TAXON=3 CHARACTER=31 TEXT= FNA; TEXT TAXON=51 CHARACTER=31 TEXT= No_evidence_for_from_gen._refs.; TEXT CHARACTER=32 TEXT= 'vouchers;_Kubitizki_1990'; TEXT TAXON=1 CHARACTER=32 TEXT= NA; TEXT TAXON=3 CHARACTER=32 TEXT= NA; TEXT TAXON=5 CHARACTER=32 TEXT= NA; TEXT TAXON=7 CHARACTER=32 TEXT= NA; TEXT TAXON=8 CHARACTER=32 TEXT= NA; TEXT TAXON=11 CHARACTER=32 TEXT= NA; TEXT TAXON=12 CHARACTER=32 TEXT= NA; TEXT TAXON=13 CHARACTER=32 TEXT= NA; TEXT TAXON=14 CHARACTER=32 TEXT= NA; TEXT TAXON=15 CHARACTER=32 TEXT= NA; TEXT TAXON=16 CHARACTER=32 TEXT= NA; TEXT TAXON=26 CHARACTER=32 TEXT= NA; TEXT TAXON=27 CHARACTER=32 TEXT= NA; TEXT TAXON=29 CHARACTER=32 TEXT= NA; TEXT TAXON=30 CHARACTER=32 TEXT= NA; TEXT TAXON=31 CHARACTER=32 TEXT= NA; TEXT TAXON=32 CHARACTER=32 TEXT= NA; TEXT TAXON=33 CHARACTER=32 TEXT= NA; TEXT TAXON=35 CHARACTER=32 TEXT= NA; TEXT TAXON=38 CHARACTER=32 TEXT= NA; TEXT TAXON=42 CHARACTER=32 TEXT= NA; TEXT TAXON=44 CHARACTER=32 TEXT= NA; TEXT TAXON=45 CHARACTER=32 TEXT= NA; TEXT TAXON=46 CHARACTER=32 TEXT= NA; TEXT TAXON=51 CHARACTER=32 TEXT= NA; TEXT CHARACTER=37 TEXT= 'A_zero_score_indicates_no_mention_of_the_presence_of_canals_in_the_literature,_rather_than_a_positive_statement_that_they_do_not_occur_in_a_particular_taxon'; TEXT TAXON=3 CHARACTER=37 TEXT= 'Kubitizki_1990:_"has_mucilage"_-_prob_due_to_cyanobacteria_colonies_and_not_actial_canals.'; TEXT TAXON=6 CHARACTER=37 TEXT= 'Ogura_1972;_Mickel_1974,_p._476.__Cut_stems/petioles_of_Cyatheaceae_sometimes_exude_mucilage,_but_mucliage_canals_not_well-documented'; TEXT TAXON=15 CHARACTER=37 TEXT= 'White_and_Turner_1988:_mucilage_canals_in_petioles'; TEXT TAXON=28 CHARACTER=37 TEXT= 'Kubitizki_1990:_mucilage_ducts'; TEXT TAXON=35 CHARACTER=37 TEXT= 'Tryon_&_Tryon_1982:_has_mucilage_secreting_trichomes'; TEXT TAXON=51 CHARACTER=37 TEXT= Gen_refs; TEXT CHARACTER=38 TEXT= 'Gifford_&_Foster_1988,_White_1961,_1963.'; TEXT TAXON=14 CHARACTER=38 TEXT= 'Gifford_&_Foster_1988:_in_rhizome,_petiole,_root'; TEXT TAXON=29 CHARACTER=38 TEXT= 'White_1961,_1963:_roots_only'; TEXT TAXON=51 CHARACTER=38 TEXT= Gen_cycad_refs; TEXT CHARACTER=29 TEXT= 'Bierhorst_1971,_Gifford_and_Foster_1988'; TEXT TAXON=32 CHARACTER=29 TEXT= 'Most_gen_refs.__Unifacial_-_produces_secondary_xylem_centripetally_only.__See_also_G.W._Rothwell_&_E.E._Karrfalt.__1996.__Origin_and_ontogeny_of_tissues_in_the_ophioglossaceous_fern_Botrychium.__AJB_86_(6:Abstracts):48.'; TEXT TAXON=51 CHARACTER=29 TEXT= Gen_cycad_refs; TEXT CHARACTER=39 TEXT= Fabbri_&_Menicanti_1970.__Data_unavailable_for_most_taxa.; TEXT TAXON=51 CHARACTER=39 TEXT= Unknown; TEXT CHARACTER=40 TEXT= Payne_and_Peterson_1973.__Information_available_only_for_a_few_taxa; TEXT TAXON=14 CHARACTER=40 TEXT= 'Payne_and_Peterson_1973_reported_hypodermis_present_in_aquilinum_and_absent_in_latiusculum_(=aquilinum).__Therefore_it_is_prob._a_polymorphic_character_in_the_species'; TEXT TAXON=51 CHARACTER=40 TEXT= uncertain; TEXT CHARACTER=21 TEXT= 'Ogura_1972,_p._92'; TEXT TAXON=32 CHARACTER=21 TEXT= 'Ogura_1972,_p._288:_"no_mechanical_tissue_[in_petiole]"'; TEXT TAXON=51 CHARACTER=22 TEXT= Gen_refs; TEXT TAXON=45 CHARACTER=26 TEXT= 'Bower_1923,_p._68-69'; TEXT TAXON=51 CHARACTER=26 TEXT= Gen_refs; TEXT TAXON=51 CHARACTER=27 TEXT= 'Gen_refs;_Schmid_1982,_Beck_et_al_1982.'; TEXT TAXON=51 CHARACTER=21 TEXT= 'No_mention_of_sclerenchyma_in_cycads_in_Stevensen,_G&F,_Bierhorst,_etc.__This_is_somewhat_surprising_and_perhaps_there_is_sclerenchyma,_so_leave_as_a_?_for_now.'; TEXT TAXON=51 CHARACTER=28 TEXT= Gen_refs; TEXT CHARACTER=25 TEXT= 'Bierhorst_1960,_White_1963b,_Kim_et_al._1993'; TEXT TAXON=51 CHARACTER=25 TEXT= Gen_refs; TEXT CHARACTER=33 TEXT= Vouchers; TEXT TAXON=38 CHARACTER=33 TEXT= Kubitizki_1990; TEXT TAXON=45 CHARACTER=33 TEXT= Kubitizki_1990; TEXT TAXON=51 CHARACTER=33 TEXT= Gen_refs; TEXT CHARACTER=34 TEXT= vouchers; TEXT TAXON=51 CHARACTER=34 TEXT= Could_find_no_information_for_root_hairs; TEXT TAXON=51 CHARACTER=35 TEXT= 'up_to_8_protoxylem_points_(Bierhorst_1971,_p._377);_branch_roots_mostly_diarch'; TEXT TAXON=38 CHARACTER=35 TEXT= NA; TEXT TAXON=38 CHARACTER=34 TEXT= NA; TEXT TAXON=45 CHARACTER=34 TEXT= NA; TEXT TAXON=45 CHARACTER=35 TEXT= NA; TEXT TAXON=23 CHARACTER=34 TEXT= Smith_&_Smith_13107_UC; TEXT TAXON=24 CHARACTER=34 TEXT= 'rhizoids_on_stems_(how_it_absorbs);_Bierhorst_1971,_p._200'; TEXT TAXON=28 CHARACTER=34 TEXT= 'Hill_and_Camus_1986:_hairs_are_multicellular_(most_ferns_have_unicellular_hairs_on_roots)'; TEXT TAXON=29 CHARACTER=34 TEXT= 'Johnson_1986,_p._9'; TEXT TAXON=32 CHARACTER=34 TEXT= 'Hill_&_Camus_1986;_Bierhorst_1971,_p._132'; TEXT TAXON=39 CHARACTER=34 TEXT= 'Adams_and_Tomlinson_1979_-_Amer._Fern_J._69:_42-46'; TEXT CHARACTER=35 TEXT= 'Bierhorst_1971,_p._296_-_all_filicalean_ferns_have_2-4_protoxylem_points'; TEXT TAXON=1 CHARACTER=35 TEXT= 'Bierhotst_1971,_p._262'; TEXT TAXON=4 CHARACTER=35 TEXT= 'Bierhorst_1971,_p._296'; TEXT TAXON=24 CHARACTER=35 TEXT= 'Bierhorst_1971,_p._200'; TEXT TAXON=27 CHARACTER=35 TEXT= 'Bierhorst_1971,_p._262'; TEXT TAXON=28 CHARACTER=35 TEXT= 'Bierhorst_1971,_p._353'; TEXT TAXON=29 CHARACTER=35 TEXT= 'Johnson_1986,_p.9;_Bierhorst_1971,_p._330_(diarch)'; TEXT TAXON=32 CHARACTER=35 TEXT= 'Kubitizki_1990,_Bierhorst_1971,_p._132:_(2-5_arch)'; TEXT TAXON=33 CHARACTER=35 TEXT= 'Bierhorst_1971:_triarch'; TEXT TAXON=46 CHARACTER=35 TEXT= 'No_reference_explicitly_says_it_is_2-5_arch,_but_there_is_no_evidence_to_the_contrary.__Bierhorst_1971,_p._260_does_not_say_Schizeaceae_is_different_from_Anemia_and_Lygodium_in_this_way.'; TEXT TAXON=51 CHARACTER=42 TEXT= Gen_refs; TEXT CHARACTER=42 TEXT= 'General_references_(G&F_1988,_Bierhorst_1971...)'; TEXT TAXON=51 CHARACTER=47 TEXT= 'Microsporangia_more_or_less_acrostichoid_in_Cycas_circinalis_(Bierhorst_1971,_p._379,_fig._20-7A);_in_some_other_cycads,_microsporangia_are_sometimes_in_discrete_sori'; TEXT CHARACTER=47 TEXT= 'Vouchers;_Tryon_&_Tryon_1982,_Kubitizki_1990,_Bierhorst_1971,_Eames_1936,_Hill_&_Camus_1986'; TEXT TAXON=3 CHARACTER=47 TEXT= 'In_juvenile_megasporocarps_micro-_and_megasporangia_begin_to_grow,_but_eventually_the_microsporangia_die_leaving_a_single_functional_megasporangium.__Hence,_the_megasporangia_do_not_form_sori,_but_the_microsporangia_do.'; TEXT TAXON=5 CHARACTER=47 TEXT= sporangia_uniformly_distributed_over_lower_surface; TEXT TAXON=28 CHARACTER=47 TEXT= 'Hill_&_Camus_1986,_Bierhorst_1971:_sporangia_are_free_(not_fused)_but_clustered_in_sori'; TEXT TAXON=29 CHARACTER=47 TEXT= 'Eames_1936:_microsporangia_clustered_together_in_a_sorus.__Same_for_megasporangia.'; TEXT TAXON=34 CHARACTER=47 TEXT= 'ARS_email_1/10/95'; TEXT TAXON=35 CHARACTER=47 TEXT= Tryon_&_Tryon_1982; TEXT TAXON=39 CHARACTER=47 TEXT= sporangia_spread_uniformly_on_undersurface_of_lamina; TEXT TAXON=45 CHARACTER=47 TEXT= 'microsporangia_and_megasporangia_are_in_different_sori,_but_both_are_clustered_in_sori'; TEXT TAXON=46 CHARACTER=47 TEXT= sporangia_are_solitary_on_sporangiophores; TEXT TAXON=51 CHARACTER=48 TEXT= NA; TEXT CHARACTER=48 TEXT= 'Vouchers;_Bierhorst_1971,_Eames_1936,_Hill_&_Camus_1986,_Kubitizki_1990,_Tryon_&_Tryon_1982.__Round_sori_=_roughly_as_long_as_wide;_elongate_sori_=_longer_than_wide_-_discrete_or_confluent_sori.'; TEXT TAXON=1 CHARACTER=48 TEXT= NA; TEXT TAXON=5 CHARACTER=48 TEXT= NA; TEXT TAXON=19 CHARACTER=48 TEXT= NA; TEXT TAXON=27 CHARACTER=48 TEXT= NA; TEXT TAXON=32 CHARACTER=48 TEXT= NA; TEXT TAXON=33 CHARACTER=48 TEXT= NA; TEXT TAXON=34 CHARACTER=48 TEXT= 'ARS_email_1/10/95'; TEXT TAXON=35 CHARACTER=48 TEXT= 'Bower_1926,_p._277'; TEXT TAXON=39 CHARACTER=48 TEXT= NA; TEXT TAXON=46 CHARACTER=48 TEXT= NA; TEXT TAXON=51 CHARACTER=52 TEXT= General_references; TEXT TAXON=51 CHARACTER=53 TEXT= NA; TEXT TAXON=51 CHARACTER=54 TEXT= NA; TEXT TAXON=51 CHARACTER=55 TEXT= NA; TEXT TAXON=1 CHARACTER=53 TEXT= NA; TEXT TAXON=5 CHARACTER=53 TEXT= NA; TEXT TAXON=6 CHARACTER=53 TEXT= NA; TEXT TAXON=17 CHARACTER=53 TEXT= NA; TEXT TAXON=19 CHARACTER=53 TEXT= NA; TEXT TAXON=23 CHARACTER=53 TEXT= NA; TEXT TAXON=24 CHARACTER=53 TEXT= NA; TEXT TAXON=25 CHARACTER=53 TEXT= NA; TEXT TAXON=23 CHARACTER=54 TEXT= NA; TEXT TAXON=24 CHARACTER=54 TEXT= NA; TEXT TAXON=25 CHARACTER=54 TEXT= NA; TEXT TAXON=23 CHARACTER=55 TEXT= NA; TEXT TAXON=24 CHARACTER=55 TEXT= NA; TEXT TAXON=25 CHARACTER=55 TEXT= NA; TEXT TAXON=28 CHARACTER=53 TEXT= NA; TEXT TAXON=28 CHARACTER=54 TEXT= NA; TEXT TAXON=28 CHARACTER=55 TEXT= NA; TEXT TAXON=31 CHARACTER=53 TEXT= NA; TEXT TAXON=31 CHARACTER=54 TEXT= NA; TEXT TAXON=31 CHARACTER=55 TEXT= NA; TEXT TAXON=32 CHARACTER=53 TEXT= NA; TEXT TAXON=32 CHARACTER=54 TEXT= NA; TEXT TAXON=32 CHARACTER=55 TEXT= NA; TEXT TAXON=33 CHARACTER=53 TEXT= NA; TEXT TAXON=33 CHARACTER=54 TEXT= NA; TEXT TAXON=33 CHARACTER=55 TEXT= NA; TEXT TAXON=36 CHARACTER=53 TEXT= NA; TEXT TAXON=37 CHARACTER=53 TEXT= NA; TEXT TAXON=38 CHARACTER=53 TEXT= NA; TEXT TAXON=39 CHARACTER=53 TEXT= NA; TEXT TAXON=36 CHARACTER=54 TEXT= NA; TEXT TAXON=37 CHARACTER=54 TEXT= NA; TEXT TAXON=38 CHARACTER=54 TEXT= NA; TEXT TAXON=39 CHARACTER=54 TEXT= NA; TEXT TAXON=36 CHARACTER=55 TEXT= NA; TEXT TAXON=37 CHARACTER=55 TEXT= NA; TEXT TAXON=38 CHARACTER=55 TEXT= NA; TEXT TAXON=39 CHARACTER=55 TEXT= NA; TEXT TAXON=41 CHARACTER=53 TEXT= NA; TEXT TAXON=41 CHARACTER=54 TEXT= NA; TEXT TAXON=41 CHARACTER=55 TEXT= NA; TEXT TAXON=42 CHARACTER=53 TEXT= NA; TEXT TAXON=42 CHARACTER=54 TEXT= NA; TEXT TAXON=42 CHARACTER=55 TEXT= NA; TEXT TAXON=44 CHARACTER=53 TEXT= NA; TEXT TAXON=44 CHARACTER=54 TEXT= NA; TEXT TAXON=44 CHARACTER=55 TEXT= NA; TEXT TAXON=48 CHARACTER=53 TEXT= NA; TEXT TAXON=48 CHARACTER=54 TEXT= NA; TEXT TAXON=48 CHARACTER=55 TEXT= NA; TEXT TAXON=13 CHARACTER=53 TEXT= NA; TEXT TAXON=13 CHARACTER=54 TEXT= NA; TEXT TAXON=13 CHARACTER=55 TEXT= NA; TEXT TAXON=1 CHARACTER=54 TEXT= NA; TEXT TAXON=1 CHARACTER=55 TEXT= NA; TEXT TAXON=5 CHARACTER=54 TEXT= NA; TEXT TAXON=6 CHARACTER=54 TEXT= NA; TEXT TAXON=5 CHARACTER=55 TEXT= NA; TEXT TAXON=6 CHARACTER=55 TEXT= NA; TEXT TAXON=17 CHARACTER=54 TEXT= NA; TEXT TAXON=17 CHARACTER=55 TEXT= NA; TEXT TAXON=19 CHARACTER=54 TEXT= NA; TEXT TAXON=19 CHARACTER=55 TEXT= NA; TEXT TAXON=20 CHARACTER=54 TEXT= 'sub-lateral:_see_ARS_email_4/21/95_@_10:34'; TEXT TAXON=47 CHARACTER=54 TEXT= 'ARS_email_4/24/95_@_8:42am'; TEXT CHARACTER=56 TEXT= 'Bierhorst_1971,_Bower_1923,_Tryon_and_Tryon_1982'; TEXT TAXON=51 CHARACTER=56 TEXT= 'cells_of_sporangium_wall_collectively_called_an_"annulus"_by_Jeffrey_(1971),_but_do_not_function_as_such_(Bierhorst_1971,_p._380)'; TEXT CHARACTER=57 TEXT= 'Kubitizki_1990,_Bower_1923,_1926,_1928,_Tryon_and_Tryon_1982,_Qiu_et_al_1995'; TEXT TAXON=51 CHARACTER=57 TEXT= NA; TEXT TAXON=51 CHARACTER=58 TEXT= NA; TEXT TAXON=3 CHARACTER=57 TEXT= NA; TEXT TAXON=4 CHARACTER=57 TEXT= 'Bierhorst_1971,_p._314'; TEXT TAXON=1 CHARACTER=57 TEXT= Kubitizki_1990; TEXT TAXON=2 CHARACTER=57 TEXT= T&T_1982; TEXT TAXON=5 CHARACTER=57 TEXT= 'Kubitizki_1990,_Bower_1923,_p._254'; TEXT TAXON=6 CHARACTER=57 TEXT= 'Kubitizki_1990,_Bower_1926,_p._300'; TEXT TAXON=7 CHARACTER=57 TEXT= 'Bower_1926,_p._271.__N.B._for_Dennstaedtiaceae:__T&T_1982_say_"vertical_to_slightly_oblique,_at_least_the_indurated_portion_interrupted_by_the_stalk".__Bower_:_"these_sporangia_show_only_faint_traces_of_obliquity_of_the_annulus_-_it_is_almost_vertical"'; TEXT TAXON=17 CHARACTER=57 TEXT= 'Kubitizki_1990:_"slightly_oblique"'; TEXT TAXON=23 CHARACTER=57 TEXT= 'Bower_1926,_p._205'; TEXT TAXON=30 CHARACTER=57 TEXT= 'Kubitizki_1990,_Bower_1926,_p._224'; TEXT TAXON=31 CHARACTER=57 TEXT= 'Qiu_et_al._1995,_T&T_1982,_Kubitizki_1990'; TEXT TAXON=28 CHARACTER=57 TEXT= NA; TEXT TAXON=29 CHARACTER=57 TEXT= NA; TEXT TAXON=32 CHARACTER=57 TEXT= NA; TEXT TAXON=33 CHARACTER=57 TEXT= Bower; TEXT TAXON=34 CHARACTER=57 TEXT= 'Bower_1928,_p._71'; TEXT TAXON=35 CHARACTER=57 TEXT= 'Kubitizki_1990:_"slightly_oblique";_Bower_1926,_p._276-281'; TEXT TAXON=38 CHARACTER=57 TEXT= NA; TEXT TAXON=45 CHARACTER=57 TEXT= NA; TEXT CHARACTER=58 TEXT= 'Kubitizki_1990,_Bower_1923,_1926,_1928,_Tryon_and_Tryon_1982,_Qiu_et_al_1995'; TEXT TAXON=3 CHARACTER=58 TEXT= NA; TEXT TAXON=4 CHARACTER=58 TEXT= 'Bierhorst_1971,_p._314'; TEXT TAXON=5 CHARACTER=58 TEXT= '_Bower_1923,_p._254'; TEXT TAXON=6 CHARACTER=58 TEXT= 'Bower_1926,_p._300'; TEXT TAXON=7 CHARACTER=58 TEXT= 'Bower_1926,_p._271._(For_all_dennstaedtioids)'; TEXT TAXON=23 CHARACTER=58 TEXT= 'Bower_1926,_p._205'; TEXT TAXON=24 CHARACTER=58 TEXT= 'Bower_1926,_p._205'; TEXT TAXON=28 CHARACTER=58 TEXT= NA; TEXT TAXON=29 CHARACTER=58 TEXT= NA; TEXT TAXON=30 CHARACTER=58 TEXT= 'Bower_1926,_p._224;_Kubitizki_1990'; TEXT TAXON=31 CHARACTER=58 TEXT= 'Qiu_et_al_1995,_Kubitizki_1990,_T&T_1982'; TEXT TAXON=32 CHARACTER=58 TEXT= NA; TEXT TAXON=34 CHARACTER=58 TEXT= 'Bower_1928,_p._71'; TEXT TAXON=35 CHARACTER=58 TEXT= 'Bower_1926,_p._276'; TEXT TAXON=38 CHARACTER=58 TEXT= NA; TEXT TAXON=45 CHARACTER=58 TEXT= NA; TEXT CHARACTER=43 TEXT= 'Vouchers_checked_for_most;_Bierhorst_1971,_Bower_1923,_1926,_1928,_Kubitiaki_1990,_Qiu_et_al_1995,_T&T_1982.__See_also_ARS_e-mail_1/11/95_(10:02am)'; TEXT TAXON=51 CHARACTER=43 TEXT= Gen_refs; TEXT TAXON=3 CHARACTER=43 TEXT= 'Bierhorst_1971,_p._346_(c),_Campbell_1918,_p._392'; TEXT TAXON=29 CHARACTER=43 TEXT= 'Eames_1936,_Gupta_1962,_Johnson_1986:_ridge,_Bierhorst_1971,_p._332,_Fig._A'; TEXT TAXON=45 CHARACTER=43 TEXT= 'branched:_Eames,_p._232;_Bierhorst_1971,_p._344-5;_Campbell_1918,_p._379'; TEXT CHARACTER=44 TEXT= 'Vouchers_checked_for_most;_Bierhorst_1971,_Campbell_1918,_Eames_1936,_Gupta_1962,_Kubitizki_1990,_Marschall_1925'; TEXT TAXON=51 CHARACTER=44 TEXT= Gen_refs; TEXT TAXON=3 CHARACTER=44 TEXT= 'microsporangia_=_1;_megasporangia_=_0:_Bierhorst_1971,_p._344,_2nd_column_-_"eventually_microsporangial_initials_appear_on_the_stalk_below"_-_indicating_that_the_megasporangium_has_a_stalk.__Fig._18-5D_-_short_stalk;_Eames_1936'; TEXT TAXON=29 CHARACTER=44 TEXT= 'microsporangium_=_1;_megasporangium_=_0;_Gupta_1962,_p._66_"short_stalk"_and_p._55;_Bierhorst_1971,_p._334_&_336;_Eames_1936'; TEXT TAXON=30 CHARACTER=44 TEXT= Kubitizki_1990; TEXT TAXON=35 CHARACTER=44 TEXT= yet_another_character_differentiating_this_taxon_from_Osmunda!; TEXT TAXON=45 CHARACTER=44 TEXT= 'microsporangia_=_1:_Bierhorst_1971,_p._344_"stalks_of_microsporangia_are_longer,_thinner".__megasporangia_=_0:_Bierhorst_1971,_p._344,_1st_column:_"short_stalked_megasporangia";_Eames_1936,_p._233'; TEXT CHARACTER=45 TEXT= 'Vouchers;_Bierhorst_1968,_1971,_Campbell_1918,_Gupta_1962,_Eames_1936,_Kubitizki_1990,_Marschall_1925'; TEXT TAXON=3 CHARACTER=45 TEXT= 'both_microsporangia_and_megasporangia;_Eames_1936'; TEXT TAXON=5 CHARACTER=45 TEXT= 'Kubitizki_1990:_4-seriate'; TEXT TAXON=6 CHARACTER=45 TEXT= 'Kubitizki_1990:_4-seriate'; TEXT TAXON=7 CHARACTER=45 TEXT= 'Kubitizki_1990:_score=2_for_all_dennstaedtioids'; TEXT TAXON=15 CHARACTER=45 TEXT= 'Kubitizki_1990:_dicksonioids_to_6-seriate'; TEXT TAXON=17 CHARACTER=45 TEXT= 'Kubitizki_1990:_4-seriate'; TEXT TAXON=23 CHARACTER=45 TEXT= 'NA,_since_sporangia_are_sessile'; TEXT TAXON=24 CHARACTER=45 TEXT= Bierhorst_1968; TEXT TAXON=26 CHARACTER=45 TEXT= 'NA,_sporangia_nearly_sessile'; TEXT TAXON=29 CHARACTER=45 TEXT= 'microsporangia_and_megasporangia_=_2;_Bierhorst_1971,_Gupta_1962,_p._55'; TEXT TAXON=30 CHARACTER=45 TEXT= Kubitzki_1990; TEXT TAXON=31 CHARACTER=45 TEXT= 'Kubitizki_1990:_4-seriate'; TEXT TAXON=33 CHARACTER=45 TEXT= Kubitizki_1990; TEXT TAXON=34 CHARACTER=45 TEXT= 'NA,_sporangia_are_sessile_-_there_is_no_stalk'; TEXT TAXON=35 CHARACTER=45 TEXT= 'Kubitizki_1990:_ca._6-seriate'; TEXT TAXON=36 CHARACTER=45 TEXT= 'Kubitizki_1990:_polypodioids=2'; TEXT TAXON=39 CHARACTER=45 TEXT= 'Kubitizki_1990:_pterids=2'; TEXT TAXON=45 CHARACTER=45 TEXT= 'Bierhorst_1971,_p._344;_Eames_1936,_p._234-235,_fig._149_&_151'; TEXT TAXON=51 CHARACTER=45 TEXT= Gen_refs; TEXT CHARACTER=49 TEXT= 'See_text_for_explanation_of_scores_restricted_to_taxa_with_bladed_fertile_fronds/segments_only_and_for_references.'; TEXT TAXON=1 CHARACTER=49 TEXT= 'NA,_fertile_segments_without_leaf_blade'; TEXT TAXON=3 CHARACTER=49 TEXT= 'NA,_fertile_lobe_modified_to_have_no_leaf_blade;_sporangium_essentially_terminal_on_modified_submerged_lobe'; TEXT TAXON=21 CHARACTER=49 TEXT= 'Although_Onoclea_fertile_blade_segments_are_very_reduced_(see_Tryon_&_Tryon_1982,_p._588),_the_sori_are_clearly_arranged_on_the_dorsal_surface.'; TEXT TAXON=29 CHARACTER=49 TEXT= 'We_consider_the_sporocarp_wall_of_Marsileaceae_taxa_to_be_homologous_to_a_leaf_blade,_and_sori_borne_marginally_on_this_blade_(see_Eames_1936,_p._211_and_Gupta_1962)'; TEXT TAXON=32 CHARACTER=49 TEXT= 'NA,_fertile_segments_without_leaf_blade'; TEXT TAXON=33 CHARACTER=49 TEXT= 'NA,_fertile_segments_without_leaf_blade'; TEXT TAXON=38 CHARACTER=49 TEXT= 'NA,_in_axil_of_leaf:_terminal_on_axil?__Complex_situation_(see_Bierhorst_1971,_Eames_1936,_Ogura_1972,_Tryon_&_Tryon_1982,_Wagner_1977)'; TEXT TAXON=42 CHARACTER=49 TEXT= Kubitizki_1990; TEXT TAXON=45 CHARACTER=49 TEXT= 'NA,_fertile_segments_without_leaf_blades'; TEXT TAXON=46 CHARACTER=49 TEXT= 'NA,_fertile_segments_without_leaf_blades'; TEXT TAXON=51 CHARACTER=49 TEXT= 'Microsporangia_are_arranged_on_dorsal_surface_of_microsporophyll.__Megasporangia_are_arranged_along_the_sporophyll_margin_(0),_but_I_scored_here_only_for_free-sporing_sporangial_tissues.__Only_microspores_are_free-sporing_in_Cycas.'; TEXT TAXON=51 CHARACTER=50 TEXT= Gen_refs; TEXT CHARACTER=68 TEXT= 'Predominantly_sensu_Nayar_and_Kaur_1971_plus_some_primary_literature,_Bierhorst_1971,_Bower_1923,_1926,_1928,_Eames_1936,_Kubitizki_1990,__Tryon_and_Tryon_1982.'; TEXT TAXON=13 CHARACTER=68 TEXT= Nair_and_Sen_1974; TEXT TAXON=51 CHARACTER=68 TEXT= Gen_refs; TEXT CHARACTER=69 TEXT= Followed_Nayar_&_Kaur_1971_primarily.__See_text_for_other_gen_refs_that_were_checked; TEXT TAXON=2 CHARACTER=69 TEXT= 'Both_naked_and_hairy_gametophytes_occur_in_this_genus.__Nayar_and_Kaur_mention_which_sub-groups_of_Asplenium_have_hairy_or_naked_gametophytes,_but_we_did_not_verify_subgroup_of_this_sp.__It_is_probably_hairy.'; TEXT TAXON=36 CHARACTER=69 TEXT= 'naked_and_hairy_gametophytes_occur_in_this_genus.__ARS_email_9:21_1/6/95_(prob._hairy)'; TEXT TAXON=51 CHARACTER=69 TEXT= Gen_refs; TEXT CHARACTER=70 TEXT= See_text_for_gametophyte_refs; TEXT TAXON=51 CHARACTER=70 TEXT= Gen_refs; TEXT TAXON=3 CHARACTER=70 TEXT= Eames_1936; TEXT CHARACTER=71 TEXT= 'Primary_refs:_Boullard_1957,_1979,_Campbell_1908,_Holloway_1930,_Bierhorst_1971,_Nayar_&_Kaur_1971'; TEXT TAXON=26 CHARACTER=71 TEXT= 'Boullard_1979;_also_checked_Holloway_1930_-_unclear,_Hymenophylls_may_be_susceptible_to_fungal_infection'; TEXT TAXON=33 CHARACTER=71 TEXT= Campbell_1908; TEXT TAXON=34 CHARACTER=71 TEXT= 'Uncertain_-_Mahabale_1948;_Boullard_1957'; TEXT TAXON=46 CHARACTER=71 TEXT= 'Bierhorst_1971;_Nayar_&_Kaur_1971'; TEXT TAXON=23 CHARACTER=71 TEXT= Boullard_refs; TEXT TAXON=51 CHARACTER=71 TEXT= Gen_refs; TEXT TAXON=51 CHARACTER=72 TEXT= Gen_refs; TEXT TAXON=42 CHARACTER=72 TEXT= Duckett_&_Pang_1985; TEXT TAXON=51 CHARACTER=73 TEXT= 'NA_-_there_are_no_anterhidia_in_Cycadaceae'; TEXT CHARACTER=73 TEXT= 'Bierhorst_1971,_Eames_1936,_Gifford_&_Foster_1988,_Nayar_&_Kaur_1971.__See_text_for_comments_on_heterosporous_ferns'; TEXT CHARACTER=74 TEXT= 'Bierhorst_1971,_Eames_1936,_Gifford_&_Foster_1988,_Nayar_&_Kaur_1971.___See_text_for_comments_on_heterosporous_ferns'; TEXT TAXON=45 CHARACTER=74 TEXT= 'Eames_1936,_p._237:_"Archegonia_deeply_sunken".__Salvinia''s_female_gametophyte_undergoes_considerably_more_vegetative_growth_than_other_heterosporous_ferns,_though_this_is_much_less_than_homosporous_ferns'; TEXT TAXON=3 CHARACTER=73 TEXT= 'Ambiguous;_see_character_description'; TEXT TAXON=3 CHARACTER=74 TEXT= 'Eames,_p._254,_fig._166A:_cellular_gametophyte_-_archegonia_appear_deeply_embedded'; TEXT TAXON=29 CHARACTER=73 TEXT= 'Ambiguous;_see_character_description'; TEXT TAXON=29 CHARACTER=74 TEXT= 'Ambiguous;_see_character_description'; TEXT TAXON=32 CHARACTER=74 TEXT= 'Bierhorst_1971,_Eames_1936'; TEXT TAXON=45 CHARACTER=73 TEXT= 'Ambiguous;_see_character_description'; TEXT TAXON=51 CHARACTER=74 TEXT= Gen_refs; TEXT CHARACTER=75 TEXT= 'Bierhorst_1971,_Campbell_1892,_Eames_1936,_Gifford_&_Foster_1988,_Nayar_&_Kaur_1971,_Stokey_&_Atkinson_1956,_M.D._Turner_(pers._comm._-_Metaxya).'; TEXT TAXON=1 CHARACTER=75 TEXT= '(3-rarely_5),_Nayar_&_Kaur_1971'; TEXT TAXON=2 CHARACTER=75 TEXT= '"3"_Tryon_&_Tryon_1982,_Nayar_&_Kaur_1971'; TEXT TAXON=3 CHARACTER=75 TEXT= '"few"'; TEXT TAXON=4 CHARACTER=75 TEXT= '"3"'; TEXT TAXON=5 CHARACTER=75 TEXT= '"numerous",_Nayar_&_Kaur_1971'; TEXT TAXON=6 CHARACTER=75 TEXT= '"5",_Tryon_&_Tryon_1982,_Nayar_&_Kaur_1971'; TEXT TAXON=7 CHARACTER=75 TEXT= '"3"_for_all_dennstaedtioids'; TEXT TAXON=15 CHARACTER=75 TEXT= '"5+"_for_all_dicksonioids,_Tryon_&_Tryon_1982,_Nayar_&_Kaur_1971'; TEXT TAXON=17 CHARACTER=75 TEXT= '"numerous",_Nayar_&_Kaur_1971'; TEXT TAXON=23 CHARACTER=75 TEXT= '"6-10"_for_gleichenioids,_Nayar_&_Kaur_1971,_Tryon_&_Tryon_1982'; TEXT TAXON=25 CHARACTER=75 TEXT= '"3",_Tryon_&_Tryon_1982'; TEXT TAXON=26 CHARACTER=75 TEXT= '"5+"_for_all_hymenophylls,_Tryon_&_Tryon_1982'; TEXT TAXON=27 CHARACTER=75 TEXT= '"3-rarely_5"'; TEXT TAXON=28 CHARACTER=75 TEXT= '"numerous",_Tryon_&_Tryon_1982'; TEXT TAXON=29 CHARACTER=75 TEXT= Campbell_1892; TEXT TAXON=30 CHARACTER=75 TEXT= '"numerous",_Nayar_&_Kaur_1971'; TEXT TAXON=31 CHARACTER=75 TEXT= '"5+",_Tryon_&_Tryon_1982'; TEXT TAXON=32 CHARACTER=75 TEXT= '"numerous",_Tryon_&_Tryon_1982'; TEXT TAXON=33 CHARACTER=75 TEXT= '"8-25_cells",_Tryon_&_Tryon_1982,_Nayar_&_Kaur_1971'; TEXT TAXON=34 CHARACTER=75 TEXT= '"3"'; TEXT TAXON=35 CHARACTER=75 TEXT= '"numerous/variable"_,_Tryon_&_Tryon_1982'; TEXT TAXON=36 CHARACTER=75 TEXT= '"3"'; TEXT TAXON=37 CHARACTER=75 TEXT= '"3"'; TEXT TAXON=38 CHARACTER=75 TEXT= '"numerous",_Gifford_&_Foster_1988'; TEXT TAXON=39 CHARACTER=75 TEXT= '"3"_for_all_pteroids'; TEXT TAXON=45 CHARACTER=75 TEXT= Eames_1936; TEXT TAXON=46 CHARACTER=75 TEXT= '"3-rarely_5"'; TEXT TAXON=47 CHARACTER=75 TEXT= '"3"'; TEXT TAXON=48 CHARACTER=75 TEXT= '"3"'; TEXT TAXON=51 CHARACTER=75 TEXT= 'NA_-_There_are_no_antheridia_in_Cycadaceae'; TEXT CHARACTER=76 TEXT= 'Bierhorst_1971,_Bower_1926,_Eames_1936,_Nayar_&_Kaur_1971_(p._321),_Stokey_&_Atkinson_1956,_M.D._Turner_(pers._comm.)'; TEXT TAXON=1 CHARACTER=76 TEXT= '4-5'; TEXT TAXON=2 CHARACTER=76 TEXT= '4-5'; TEXT TAXON=3 CHARACTER=76 TEXT= '3-4,_Eames_1936'; TEXT TAXON=4 CHARACTER=76 TEXT= '4-5'; TEXT TAXON=5 CHARACTER=76 TEXT= '6-8_(7-12)'; TEXT TAXON=6 CHARACTER=76 TEXT= '6-8'; TEXT TAXON=7 CHARACTER=76 TEXT= '4-5_for_all_dennstaedtioids'; TEXT TAXON=15 CHARACTER=76 TEXT= '6-8+_for_all_dicksonioids'; TEXT TAXON=17 CHARACTER=76 TEXT= '6-8'; TEXT TAXON=23 CHARACTER=76 TEXT= '8-10_for_all_gleichenioids'; TEXT TAXON=25 CHARACTER=76 TEXT= '4-5'; TEXT TAXON=26 CHARACTER=76 TEXT= 4?_7?_Nayar_&_Kaur_1971; TEXT TAXON=27 CHARACTER=76 TEXT= '4-5'; TEXT TAXON=28 CHARACTER=76 TEXT= '2-3-4,_Nayar_&_Kaur_1971,_Eames_1936,_Bierhorst_1971'; TEXT TAXON=29 CHARACTER=76 TEXT= 2; TEXT TAXON=30 CHARACTER=76 TEXT= '7-12'; TEXT TAXON=31 CHARACTER=76 TEXT= '6-8_(Mel_Turner,_pers._comm.)'; TEXT TAXON=32 CHARACTER=76 TEXT= '7-8,_Bower,_Eames_1936'; TEXT TAXON=33 CHARACTER=76 TEXT= '6,_Eames_1936'; TEXT TAXON=34 CHARACTER=76 TEXT= '4-5'; TEXT TAXON=35 CHARACTER=76 TEXT= '6-8,_Stokey_&_Atkinson_1956'; TEXT TAXON=36 CHARACTER=76 TEXT= 3; TEXT TAXON=37 CHARACTER=76 TEXT= '3-5'; TEXT TAXON=38 CHARACTER=76 TEXT= '4-6'; TEXT TAXON=39 CHARACTER=76 TEXT= '4-5_for_all_pteroids'; TEXT TAXON=45 CHARACTER=76 TEXT= '3-4'; TEXT TAXON=46 CHARACTER=76 TEXT= 3; TEXT TAXON=47 CHARACTER=76 TEXT= '4-5'; TEXT TAXON=48 CHARACTER=76 TEXT= '4-5'; TEXT TAXON=51 CHARACTER=76 TEXT= 'Apparently,_only_1_cell_high_in_Dioon'; TEXT CHARACTER=77 TEXT= 'Farrar_1967,_1974,_Nayar_&_Kaur_1971'; TEXT TAXON=25 CHARACTER=77 TEXT= 'Farrar_1967:_present_for_Grammitis_nimbata,_a_close_relative'; TEXT TAXON=26 CHARACTER=77 TEXT= 'Farrar_1974,_Nayar_&_Kaur_1971'; TEXT TAXON=36 CHARACTER=77 TEXT= 'present_in_L._involuta_and_L._lanceolata:_Nayar_&_Kaur_1971,_p._364,_365.__Quite_possibly_in_this_sp.'; TEXT TAXON=48 CHARACTER=77 TEXT= Farrar_1974; TEXT TAXON=51 CHARACTER=77 TEXT= 'gametophytes_are_not_free-living'; TEXT CHARACTER=67 TEXT= 'Nayar_&_Kaur_1968,_1971.__See_text_for_other_refs'; TEXT TAXON=3 CHARACTER=67 TEXT= See_figs._in_Eames_1936; TEXT TAXON=13 CHARACTER=67 TEXT= see_figs._in_Nair_&_Sen_1974; TEXT TAXON=24 CHARACTER=67 TEXT= 'early_stages_not_known_-_becoming_spherical_mass_later_on'; TEXT TAXON=29 CHARACTER=67 TEXT= 'Prob_polar,_see_Campbell_1892_and_Eames_1936'; TEXT TAXON=31 CHARACTER=67 TEXT= Early_stages_not_known; TEXT TAXON=32 CHARACTER=67 TEXT= Nayar_&_Kaur_1971_say_Botrychium_is_polar_and_then_say_that_early_stages_are_not_known.__Confusing?; TEXT TAXON=37 CHARACTER=67 TEXT= 'Nayar_&_Kaur_1968,_1971'; TEXT TAXON=38 CHARACTER=67 TEXT= 'Bierhorst_1971,_p._187;_Darnell-Smith_1917,_fig._6;_Whittier_1975:__Looks_polar,_first_wall_parallel_to_equatorial_plane.'; TEXT TAXON=42 CHARACTER=67 TEXT= 'Tryon_1964,_Duckett_&_Pang_1984'; TEXT TAXON=51 CHARACTER=67 TEXT= 'free-nuclear_division_of_megaspore;_uncertain_about_megaspores'; TEXT TAXON=3 CHARACTER=6 TEXT= NA; TEXT TAXON=29 CHARACTER=6 TEXT= NA; TEXT TAXON=38 CHARACTER=6 TEXT= NA; TEXT TAXON=46 CHARACTER=6 TEXT= NA; TEXT CHARACTER=51 TEXT= Vouchers_checked_for_all; TEXT TAXON=1 CHARACTER=51 TEXT= NA; TEXT TAXON=5 CHARACTER=51 TEXT= NA; TEXT TAXON=3 CHARACTER=51 TEXT= 'Microsporangia_form_sori.__Megasporangia_do_not_form_sori_-_one_megasporangium/megasporocarp'; TEXT TAXON=8 CHARACTER=51 TEXT= '5_sporangia/sorus_-_voucher'; TEXT TAXON=10 CHARACTER=51 TEXT= 'Some_Lindsaea_spp._have_more_that_12_sporangia/sorus.__Voucher_has_sori_broken_up_-_can''t_tell.'; TEXT TAXON=17 CHARACTER=51 TEXT= Herbarium_specimens; TEXT TAXON=19 CHARACTER=51 TEXT= NA; TEXT TAXON=23 CHARACTER=51 TEXT= 'Voucher;_Kubitizki_1990'; TEXT TAXON=24 CHARACTER=51 TEXT= 'Voucher_has_15-20_sporangia/sorus.__Kubitizki_1990'; TEXT TAXON=27 CHARACTER=51 TEXT= NA; TEXT TAXON=28 CHARACTER=51 TEXT= Voucher; TEXT TAXON=29 CHARACTER=51 TEXT= 'Johnson_1986,_p._35_species_description_for_quadrifolia:_12_microsporangia/sorus;_3-7_sporangia/sorus'; TEXT TAXON=30 CHARACTER=51 TEXT= 'Bower_1926:_6-9_sporangia/sorus'; TEXT TAXON=32 CHARACTER=51 TEXT= NA; TEXT TAXON=33 CHARACTER=51 TEXT= NA; TEXT TAXON=38 CHARACTER=51 TEXT= voucher; TEXT TAXON=39 CHARACTER=51 TEXT= NA; TEXT TAXON=42 CHARACTER=51 TEXT= 'Voucher:_hardly_room_for_12!__Tryon_1961,_p._95:__"sporangia_in_several_stages_of_development_are_found_along_a_single_vein_and_up_to_13_have_been_observed_on_a_single_pinna"'; TEXT TAXON=45 CHARACTER=51 TEXT= 'Eames_1936,_p._234_(top)'; TEXT TAXON=46 CHARACTER=51 TEXT= NA; TEXT TAXON=51 CHARACTER=51 TEXT= NA; TEXT TAXON=38 CHARACTER=77 TEXT= 'Bierhorst_1971,_p._186;__Farrar_&_Johnson-Groh_1990,_p._1168'; TEXT TAXON=32 CHARACTER=77 TEXT= 'there_are_"gemmae"_(brood_bodies)_borne_on_underground_stems;_no_gemmae_on_gametophytes'; TEXT TAXON=50 TEXT= 'Bierhorst_1971,_Boullard_1979,_Brown_1976,_Gifford_&_Foster_1988,_FNA_1992,_Kubitizki_1990,_Ogura_1972,_Schmid_1982,_Tryon_&_Lugardon_1990,_Tryon_&_Tryon_1982,_Brown_1976,_Duckett_1973,_Hauke_1957,_1979,_Johnson_1937,_Scagel_1984'; TEXT TAXON=50 CHARACTER=1 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=2 TEXT= 'NA;_following_arguments_of_Bierhorst_1971_&_Ogura_1972_-_no-one_takes_stand_on_whether_the_sporangiophore_is_leaf_or_stem.__There_are_no_"fertile_leaves".__Sporangiophores_likely_of_stem_origin_with_sporangia_attached_directly_to_stems.'; TEXT TAXON=50 CHARACTER=3 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=4 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=5 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=6 TEXT= NA; TEXT TAXON=50 CHARACTER=7 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=8 TEXT= NA; TEXT TAXON=50 CHARACTER=9 TEXT= 'Ogura_1972,_pgs._124,_125,_248;_Scagel_et_al._1984,_p._441;_Johnson_1937'; TEXT TAXON=50 CHARACTER=10 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=11 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=12 TEXT= 'Parallel_to_preceding_wall:_see_Ogura_1972,_p._242,_Fig._269,_esp._269-4,_269-5.__See_also_email_to_ARS_June_1_1995.__See_also_Hauke_1957,_p._178'; TEXT TAXON=50 CHARACTER=13 TEXT= 'See_Hauke_1957,_p._178,_and_esp._Fig._2:__"Strasburger_pointed_out_that_the_2_outer_cells_were_subsidiary_cells";_Ogura_1972,_p._242,_Fig._269,_esp._Fig._269-4_and_269-5.__Mesogenous_origin_is_very_clear_for_subsidiary_cells.__See_email_to_ARS_6/1/95'; TEXT TAXON=50 CHARACTER=14 TEXT= NA; TEXT TAXON=50 CHARACTER=15 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=16 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=17 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=18 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=19 TEXT= 'NA_(leaves_are_sessile)'; TEXT TAXON=50 CHARACTER=20 TEXT= NA; TEXT TAXON=50 CHARACTER=21 TEXT= 'Ogura_1972,_p._242_"colorless_sclerenchyma";_Brown_1976:_"collenchyme_annulaire"_-_did_tests_showing_E._arvense_did_not_have_sclerenchyma,_but_collenchyma'; TEXT TAXON=50 CHARACTER=22 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=23 TEXT= 'NA_(no_stipe)'; TEXT TAXON=50 CHARACTER=24 TEXT= 'NA_(no_stipe)'; TEXT TAXON=50 CHARACTER=25 TEXT= 'see_Bierhorst_1971,_p._85_and_Fig._27-8_(f-k)'; TEXT TAXON=50 CHARACTER=26 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=27 TEXT= 'Schmid_1982,_p._905'; TEXT TAXON=50 CHARACTER=28 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=29 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=30 TEXT= 'herbarium_specimens;_Hauke_1979:_p._391;_Ogura_1972,_p._240;_Scagel_et_al._1984,_p._441'; TEXT TAXON=50 CHARACTER=31 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=32 TEXT= NA; TEXT TAXON=50 CHARACTER=33 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=34 TEXT= herbarium_specimens; TEXT TAXON=50 CHARACTER=35 TEXT= 'Gifford_&_Foster_1988,_p._187_"triarch_or_tetrarch".__Ogura_1972,_p._247,_249.'; TEXT TAXON=50 CHARACTER=36 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=37 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=38 TEXT= 'Bierhorst_1971,_p._87'; TEXT TAXON=50 CHARACTER=39 TEXT= not_mentionned_in_Fabbri_&_Menicanti_1970; TEXT TAXON=50 CHARACTER=40 TEXT= 'Ogura_1972,_p._129:_"hypodermis_is_present_only_on_abaxial_side_of_leaf"'; TEXT TAXON=50 CHARACTER=41 TEXT= 'Gifford_&_Foster_1988,_p._68,_Fig._6-1'; TEXT TAXON=50 CHARACTER=42 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=43 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=44 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=45 TEXT= NA; TEXT TAXON=50 CHARACTER=46 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=47 TEXT= NA; TEXT TAXON=50 CHARACTER=48 TEXT= NA; TEXT TAXON=50 CHARACTER=49 TEXT= 'NA_(since_the_sporangiophores_have_no_blades)'; TEXT TAXON=50 CHARACTER=51 TEXT= NA; TEXT TAXON=50 CHARACTER=52 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=53 TEXT= NA; TEXT TAXON=50 CHARACTER=54 TEXT= NA; TEXT TAXON=50 CHARACTER=50 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=55 TEXT= NA; TEXT TAXON=50 CHARACTER=56 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=57 TEXT= NA; TEXT TAXON=50 CHARACTER=58 TEXT= NA; TEXT TAXON=50 CHARACTER=59 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=60 TEXT= 'T&L_1991,_p._586:_"circular_aperture_with_large_subapertural_opturator_in_Equisetum_is_unique_in_pteridophytes"'; TEXT TAXON=50 CHARACTER=61 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=62 TEXT= T&L_1991; TEXT TAXON=50 CHARACTER=63 TEXT= 'see_T&L_1991,_p._587,_Fig._11,_to_see_how_thin_perispore_is_relative_to_exospore'; TEXT TAXON=50 CHARACTER=64 TEXT= 'abundant_spherules_seem_to_be_part_of_the_epispore_morphology_-_see_T&L_1991'; TEXT TAXON=50 CHARACTER=65 TEXT= 'T&L_1991,_p._586'; TEXT TAXON=50 CHARACTER=66 TEXT= 'T&L_1991,_p._587,__Figs._8_&_12:_exospore_looks_smooth'; TEXT TAXON=50 CHARACTER=67 TEXT= 'Bierhorst_1971,_p._94_shows_that_the_spore_sheds_its_outer_coat_before_dividing.__Therefore_it_is_impossible_to_determine_the_orientation_of_the_first_division_with_reference_to_the_aperture_since_it_is_no_longer_there_for_reference.'; TEXT TAXON=50 CHARACTER=68 TEXT= 'Duckett_1973:__looks_elongate-thalloid/branched_-_eventually_forming_a_pin-cushion_shape,_i.e._there_is_ultimately_more_dimensionality_here_than_in_other_ribbon-like_gametophytes.__T&T_1982_say_"thallose_strap-shaped,_branched".'; TEXT TAXON=50 CHARACTER=69 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=70 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=71 TEXT= Boullard_1979; TEXT TAXON=50 CHARACTER=72 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=73 TEXT= 'Duckett_1973,_Hauke_1979,_p._392'; TEXT TAXON=50 CHARACTER=74 TEXT= Duckett_1973; TEXT TAXON=50 CHARACTER=75 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=76 TEXT= Gen_refs; TEXT TAXON=50 CHARACTER=77 TEXT= Gen_refs; TEXT TAXON=49 TEXT= 'Bierhorst_1971,_Bruce_1979,_Eames_1936,_FNA_1992,_Gifford_&_Foster_1988,_Kubitizki_1990,_Ogura_1072,_Ollgaard_1987,_Pixley_1968,_Rolleri_1972,_Tryon_&_Lugardon_1991,_Tryon_&_Tryon_1982,_Wagner_&_Beitel_1992,_Whittier_1981'; TEXT TAXON=49 CHARACTER=1 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=2 TEXT= 'Gifford_&_Foster_1988:_"the_sporophylls_may_be_aggregated_into_definite_strobili_and_may_be_quite_different_from_vegetative_leaves"_and_they_refer_to_a_photo_of_L._digitatum;_herbarium_specimens'; TEXT TAXON=49 CHARACTER=3 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=4 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=5 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=6 TEXT= NA; TEXT TAXON=49 CHARACTER=7 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=8 TEXT= NA; TEXT TAXON=49 CHARACTER=9 TEXT= 'no_mention_of_in_Ogura_1972,_p._124'; TEXT TAXON=49 CHARACTER=10 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=11 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=12 TEXT= 'Ogura_1972,_p._122:_compares_Lycopodium_with_Marattiaceae,_Osmundaceae,_and_Ophioglossaceae.__See_also_Rolleri_1972:_good_drawings_of_L._thyoides_(p._270)_a_closely_related_sp.,_that_shows_the_perigenous_pattern.'; TEXT TAXON=49 CHARACTER=13 TEXT= 'Ogura_1972,_p._122;_Rolleri_1972'; TEXT TAXON=49 CHARACTER=14 TEXT= NA; TEXT TAXON=49 CHARACTER=15 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=16 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=17 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=18 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=19 TEXT= NA; TEXT TAXON=49 CHARACTER=20 TEXT= NA; TEXT TAXON=49 CHARACTER=21 TEXT= Ogura_1972; TEXT TAXON=49 CHARACTER=22 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=23 TEXT= NA; TEXT TAXON=49 CHARACTER=24 TEXT= NA; TEXT TAXON=49 CHARACTER=25 TEXT= 'Bierhorst_1971,_p._9'; TEXT TAXON=49 CHARACTER=26 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=27 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=28 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=29 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=30 TEXT= herbarium_specimens; TEXT TAXON=49 CHARACTER=31 TEXT= herbarium_specimens; TEXT TAXON=49 CHARACTER=32 TEXT= NA; TEXT TAXON=49 CHARACTER=33 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=34 TEXT= 'Ogura_1972,_p._135;_herbarium_specimens'; TEXT TAXON=49 CHARACTER=35 TEXT= 'See_original_notes_&__emails_on_the_topic_-_6/6-9/95.__Pixley_1968,_p._160:_"ontogeny_in_Ly._roots_with_crescentic_xylem_in_tr-sec__seen_to_involve_3_or_more_protoxylem_groups".__See_also_Bierhorst_1971,_p._12;_Gifford_&_Foster_1988,_p._114.__See_text'; TEXT TAXON=49 CHARACTER=36 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=37 TEXT= 'Ogura_1972,_p._129_(leaves),_p._203_(stem),_p._211,_last_line_of_leaf_section.__Wagner_&_Beitel_1992,_p._680:_scored_mucilage_canals_present_for_Diphasiastrum'; TEXT TAXON=49 CHARACTER=38 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=39 TEXT= no_mention_of_in_Fabbri_&_Menicanti_1970; TEXT TAXON=49 CHARACTER=40 TEXT= 'Bierhorst_1971,_p._9_refers_to_hypodermis_in_stem.__Ogura_1972_does_not_mention_a_hypodermis_for_Lycopodium_leaves,_and_our_scores_are_for_leaves_only.'; TEXT TAXON=49 CHARACTER=41 TEXT= Gifford_&_Foster_1988; TEXT TAXON=49 CHARACTER=42 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=43 TEXT= 'Gifford_&_Foster_1988,_Fig._9-10B'; TEXT TAXON=49 CHARACTER=44 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=45 TEXT= 'photos_in_Gifford_&_Foster_1988;_also_figs._in_Bierhorst_1971_-_looks_like_many_more_than_10_cells_wide.__From_herbarium_specimens,_it_appears_sporangia_have_short_stalk_or_pad_that_is_many_cells_wide'; TEXT TAXON=49 CHARACTER=46 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=47 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=48 TEXT= NA; TEXT TAXON=49 CHARACTER=49 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=50 TEXT= 'NA;_see_definition_in_text_-_since_there_is_only_one_sporangium_per_leaf,_then_NA.'; TEXT TAXON=49 CHARACTER=51 TEXT= NA; TEXT TAXON=49 CHARACTER=52 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=53 TEXT= NA; TEXT TAXON=49 CHARACTER=54 TEXT= NA; TEXT TAXON=49 CHARACTER=55 TEXT= NA; TEXT TAXON=49 CHARACTER=56 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=57 TEXT= NA; TEXT TAXON=49 CHARACTER=58 TEXT= NA; TEXT TAXON=49 CHARACTER=59 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=60 TEXT= T&L_1991; TEXT TAXON=49 CHARACTER=61 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=62 TEXT= 'although_T&L_1991_talk_about_a_"flange-like_structure_near_the_equator"_in_Lycopodium_(p._596),_in_Wagner_&_Beitel_1992,_p._681,_equatorial_ridge_is_scored_as_absent_for_Diphasiastrum'; TEXT TAXON=49 CHARACTER=63 TEXT= T&L_1991; TEXT TAXON=49 CHARACTER=64 TEXT= T&L_1991; TEXT TAXON=49 CHARACTER=65 TEXT= 'See_original_notes_for_reasoning.__T&L_1991,_p._6_&_p._590:_main_layer_formed_by_lamellae_...as_spores_mature,__lamellae__scarcely_apparent_&_form_compact_layer._...characteristic_diffuse_inner_layer...provides_useful_recognition_feature_of_Ly._spores.'; TEXT TAXON=49 CHARACTER=66 TEXT= T&L_1991; TEXT TAXON=49 CHARACTER=67 TEXT= 'Eames_1936,_p._13,_Fig._11.__Looks_like_equatorial_germination:_first_cell_wall_parallel_to_polar_axis_of_spore'; TEXT TAXON=49 CHARACTER=68 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=69 TEXT= 'Whittier_1981:_no_evidence_of_hairs;_Bruce_1979:_"no_paraphyses_around_sex_organs";_no_indication_of_hairs'; TEXT TAXON=49 CHARACTER=70 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=71 TEXT= Whittier_1981; TEXT TAXON=49 CHARACTER=72 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=73 TEXT= 'Whittier_1981:_"embedded";_Gifford_&_Foster_1988_drawings'; TEXT TAXON=49 CHARACTER=74 TEXT= 'Whittier_1981:_"necks_extend_well_above_the_gametophyte_surfaces";_Bruce_1979,_figs._36,_41:_shows_them_well_protruding;_figs._in_Gifford_&_Foster_also'; TEXT TAXON=49 CHARACTER=75 TEXT= Gen_refs; TEXT TAXON=49 CHARACTER=76 TEXT= 'G&F_1988:_arch_with_6_or_more_neck_canal_cells;_from_figs._arch_neck_cell_tiers_seem_fewer_than_6.__Eames_1936,_fig._14_and_his_text:_4-6_cells_high.__However,_see_Bruce_1979,_figs._32,_36,_37,_and_41_esp.__Necks_look_at_least_7-10_cells_long.'; TEXT TAXON=49 CHARACTER=77 TEXT= Gen_refs; TEXT TAXON=27 CHARACTER=2 TEXT= 'FNA:_fertile_pinnae_borne_toward_apex_of_fertile_leaves'; TEXT TAXON=29 CHARACTER=2 TEXT= 'Wagner_&_Wagner_1977,_p._254'; TEXT TAXON=38 CHARACTER=30 TEXT= 'Ogura_1972,_p._16'; TEXT TAXON=24 CHARACTER=33 TEXT= 'Bierhorst_1971,_p._196:_"limited_number_of_true_roots"'; END; BEGIN MACCLADE; Version 3.05; LastModified -1350143145; Singles 1000&/0; END; tv-0.5/ncl-2.0/data/LPMorph.nex0000775000076400007640000003770107236527360013006 00000000000000#NEXUS [MacClade 3.01 registered to Equator, UCMP] BEGIN DATA; DIMENSIONS NTAX=27 NCHAR=113; [!This is the final revised morphological matrix for land plants (LP-MORPH), corrected 12/93, per comments of co-authors. **used in the Ann .Mo. Bot. 81: 451-483 (Mishler et al. 1994) green plant synthesis paper. Characters are re-numbered as they are used in our text, but you can see Karen Renzaglia's old numbers (from the sperm data set, Garbary et al. 1993, Pl. Syst. & Evol., which see for more details on characters), or reference to other literature (M&C = Mishler and Churchill, 1985, Cladistics 1:305-328) as footnotes to the characters.] FORMAT MISSING=? GAP=- SYMBOLS= " 0 1 2 3 4 5 6"; [OPTIONS MSTAXA=UNCERTAIN ;] CHARLABELS [1] apical_cell_in_antheridia [2] div._pat._in_young_antheridia [3] endogenous_antheridia [4] antheridial_stalk [5] operculum_cells [6] sperm_in_pollen_tube [7] number_of_sperm_per_male_struc. [8] nascent_spermatids [9] diagonal_spindle_in_final_mitot [10] replication_of_the_centrioles [11] time_of_origin_of_centrioles [12] basal_bodies_and_flagella [13] bicentrioles [14] basal_body_position [15] proximal_extension_A [16] proximal_extension_B [17] stellate_transition [18] connect._fibers_betw._basal_bod [19] basal_body_structure [20] BB_staggering_assoc._w._MT_grow [21] regression_of_LS [22] 'LS/AM_elongation_longit.' [23] spline_aperture [24] sline_aperture_location [25] position_of_developing_MLS [26] plaque_stratified_betw._blephar [27] 'spline/LS_orientation' [28] posterior_notch_to_LS [29] LS_position [30] stray_spline_MT [31] accessory_band_of_MTs [32] maturational_elongation_of_AM [33] spline_shank [34] osmiophilic_crest [35] anterior_osmiophilic_crest [36] changes_in_BBs_at_mat. [37] matrix_around_BBs [38] posterior_of_the_stellate_patt. [39] flagellar_scales [40] late_blepharoplast_w._transient [41] direction_of_flagellar_emergenc [42] nuclear_shape_at_maturity [43] nuclear_posterior_shape [44] median_constriction [45] splin_attached_to_nucleus [46] spline_growth_assoc._w._nucl._s [47] direction_of_nuclear_compaction [48] condensed_chromatin_strands [49] diverticulum_during_shaping [50] number_of_gyres_of_nucleus [51] dense_body_in_ant._mitochondrio [52] mit._assoc._w._plastids_in_sper [53] mit._assoc._w._plastids_in_sper [54] specialized_ant._mito. [55] specialized_posterior_mito. [56] additional_mito._in_ant._of_cel [57] origin_of_AM [58] osmophilic_material_underneath [59] change_from_cristae_sacs_to_baf [60] monoplastidic_sperm [61] plastid_determines_division_pol [62] starch_grains_in_single_plastid [63] sperm_plastid_contacting_nucleu [64] fibrillenscheide [65] cytoplasmic_loss [66] embryo [67] cuticle [68] lunularic_acid [69] elaters [70] oil_bodies [71] 'D-Methionine' [72] stomates [73] vert_div_of_zygote [74] xylem [75] phloem [76] perine_layer_on_spores [77] 'aerial_sporophyte_axis_(persist' [78] columella [79] Multicellular_rhizoids [80] leaves_on_gam. [81] independent_sporophyte [82] branched_sporophyte [83] tracheids [84] lignin [85] 'long_exserted_seta_(of_liv._typ' [86] oil_body_cells [87] spore_mother_cells_lobed [88] 'capsule_2-4_valved' [89] 'caps_wall_cells_w/_trans_thick' [90] thick_caps._wall [91] elongate_antheridia [92] aerial_calyptra [93] paraphyses [94] costate_leaves [95] peristome [96] operculum [97] cylindical_sprogen_layer [98] transfer_cells_on_gam_side [99] transfer_cells_on_spor.__side [100] seed [101] megaphyll [102] microphyll [103] 'lateral,_broad_sporangia' [104] exarch_maturation_of_xylem [105] cp_DNA_inversion [106] sporangia_borne_on_leaves [107] trichomes [108] flavonoids [109] retention_of_zygote [110] sheathed_hairs [111] polyphenolics_induced_by_sex [112] parenchyma [113] beaked_muscilage_papillae ; STATELABELS 1 absent present, 2 'four-celled' 'two-celled', 3 absent present, 4 absent present, 5 absent present, 6 absent present, 7 1000+ '100-1000' '16-24' 2, 8 paired not_paired, 9 absent present, 10 present absent, 11 always_present sperm._mother_cells sperm._moth._cell_progenitor earlier, 12 two more_than_two, 13 present absent, 14 right_angles 'side-by-side' 'staggered_ant-post' staggered_continous, 15 absent long short, 16 'ventral_-_dorsal' ventral, 17 present absent, 18 present absent fine_filaments_w._centrin, 19 monomorphic dimorphic, 20 absent present, 21 absent complete partial, 22 parallel perpendicular, 23 absent present, 24 left_of_center right_of_center, 25 adjacent_to_BBs beneath_BBs, 26 absent present, 27 90_deg. 45_deg., 28 absent present, 29 under_all_BBs under_ABB_only under_some_BBs, 30 absent present develops_late, 31 absent present, 32 absent posterior, 33 wide less_than_4_tubules, 34 absent present, 35 absent present, 36 absent dense_material_at_tip BB_cartwheel_w._plug BB_triplets_impreg._w._matrixma, 37 homogenous mottled, 38 extracell._or_partly entirely_intracell., 39 present absent, 40 yes no, 41 toward_side toward_rear toward_anterior, 42 ovoid elongate, 43 not_expanded expanded, 44 absent present, 45 yes detached_at_maturity never_attached, 46 absent present, 47 outer_shell anterior_to_posterior at_equal_rates_along_nucl. general_increase_in_density, 48 'spaghetti-like' perpendicular_to_spline 'spiral-central_strand' general_compaction spikes irregular_plates solid_mass_from_ant._tip, 49 absent present, 50 not_coiled '0.5-3' greater_than_3, 51 absent present, 52 absent present, 53 absent present, 54 present absent, 55 present absent, 56 absent row_of_mito._behind_AM numerous_unspecialized, 57 fusion elongation, 58 absent present, 59 absent present, 60 present absent, 61 'present_-_at_poles' 'present_-_asymmetrical' absent, 62 more_than_one one, 63 absent present, 64 absent present, 65 absent partial 'complete_(or_tiny_remn.)', 66 absent present, 67 absent present, 68 absent present, 69 absent present, 70 absent present, 71 not_recognize recognize, 72 absent present, 73 absent present, 74 absent present, 75 absent present, 76 absent present, 77 absent present, 78 absent present, 79 absent present, 80 absent 'present_(of_moss_type)' 'present_(of_junger._type)', 81 absent present, 82 absent present, 83 absent present, 84 absent present, 85 absent present, 86 absent present, 87 absent present, 88 absent present, 89 absent present, 90 'absent_(unistrat.)' 'present_(2-10_strat.)', 91 absent present, 92 absent present, 93 absent present, 94 absent present, 95 absent present, 96 absent present, 97 absent present, 98 absent present, 99 absent present, 100 absent present, 101 absent present, 102 absent present, 103 absent present, 104 absent present, 105 absent present, 106 absent present, 107 absent present, 108 absent present, 109 absent present, 110 absent present, 111 absent present, 112 absent present, 113 absent present, ; MATRIX [----+--10|----+--20|----+--30|----+--40|----+--50|----+--60|----+--70|----+--80|----+--90|----+-100|----+-110|---] CHARA ?????0??0030?00?020???0??0???00?0000000?11000000010??1?1?011201020000000000000000000000000?0000000000000?00100000 NITELL ?????0??0030?00?020???0?000??00?0000000?11000000010001???0?1201020000000000000000000000000?0000000000000?00100000 COLEOC_PUL ?????0???000?00?0?0?000?000??0000000000?00?00???000000?1??0000?010000000000000000000000000?0000000000000?00011100 COLEOC_ORB ?????0??1000?00?0?0?000?000??0000000000?00?00???000000?1??0000?010000000000000000000000000?0000001000000?00011110 PHAEOCEROS 0011000001101111100?200?101000010003001?1101001101111000011011102110001110000100000000000000000001000000?00010110 NOTOTHYLAS 0011000001101111100?200?101000010003001?1101001101111000011011102110001110000100000000000000000001000000?00010110 MARCHANTIA 000100000110121001112011101100000003001?1100001011001000001010112111110000000000000001000000000001100000000110110 SPHAEROCARPOS 000100000110121001112011101100001003001?1100001011001000001010??211111000000000000000{01}000000000001100000?00110110 PELLIA 010100000110121001112011101000000003001?1100101011001000001010112111110000000000000010111100000000000000?00110110 BLASIA 0?0100000110121001112011101100000003001?1100001011001000001010112111110000000000000010111100000001100000?00110110 JUNGERMANNIA 010100000110121001112011101000000003001?1100101011001000001010112111110000000002000010111100000000100000?00110110 HAPLOMITRIUM 010100000110121?01112010101000?00?03001?11000015?10010000010?1??2111110000000000000010110000000001100000?00110110 TREUBIA 01010000011012100111?010101000?00?03?01?11?0001???0??0000??0?0??211111000000000000001011110000000??00000?00110110 SPHAGNUM 110100011110121011111011101012010003001?1100012201011000001001002110001100011111000000000001000100000000?00010110 ANDREAEA 1101100111101210?1112011101010010003001?1100012201011000001000002110001001011111000000000011110000100000?00010111 POLYTRICHUM 110110011110121001112011101011011003001?1100012201011000001000002110001101111111000000000011111110100000?00010110 HYPNUM 110110011110121001112011101011010003001?1100012211011000001000002110001101111111000000000011111111100000000110110 TAKAKIA 11011001111012100111?01110101??10?03?01?1100?????10?10000?1000??2110001001??11?10000000000110?0000100000?00110111 LYCOPODIELLA 0?00001?1110140?020?010?1010000?0?00101?10?000??00001010?000?0001110001101111000111100000000000001100111000110110 LYCOPODIUM 0?00001011101221020?010?101000010000101?10000?3310000010?0100010{12}110001101111000111100000000000001100111000110110 SELAGINELLA 0??0?01??110?2210?0?200?101000010000101?110000?401001000?010?000211000110111100011110000000000000??00111000110110 EQUISETUM 0?0000111111030?0100010?1110201001100011111000330100001110012?00111000110111100011110000000000000??00?00110110110 PTERIDIUM 0?000021112103210?00010?111020100112?011111000330200001110012?001110001111111000111100000000000001101000111110110 MARSILEA 0??0?0211121030?0100010?1110200000020011110000160200001010012?00111000111111100011110000000000000??01000?11110110 OSMUNDA 0?000021112103210?00010?1110201001110011111000330100001110012?001110001111111000111100000000000001101000111110110 GINKGO ?????13?11?1030?0100010?1?1020000110011020?02???00000112?0012?0001100011011?100011110000000000000??11000111110110 ZAMIA ?????13?11?1030?0100010?1?1020000110011020?02???00000112?0012?0001100011011?100011110000000000000??11000111110110 ; END; BEGIN ASSUMPTIONS; OPTIONS DEFTYPE=unord PolyTcount=MINSTEPS ; TYPESET * order_two = unord: 1-6 8-49 51-113, ord: 7 50; WTSET * CURRENT = 1: 1-113; EXSET sperm_only = 1-65; EXSET general_morph = 66-113; END; begin paup; constraint moss+trach = (1,2,3,4,5,6,7,8,9,10,11,12,13,(14,15,16,17,18,19,20,21,22,23,24,25,26,27)); constraint horn+moss+trach = (1,2,3,4,7,8,9,10,11,12,13,(5,6,14,15,16,17,18,19,20,21,22,23,24,25,26,27)); constraint bryos = (1,2,3,4,(19,20,21,22,23,24,25,26,27,(5,6,7,8,9,10,11,12,13,14,15,16,17,18))); end; BEGIN NOTES; TEXT CHARACTER=1 TEXT= 'KAREN''S_#2'; TEXT CHARACTER=2 TEXT= 'KAREN''S_#3'; TEXT CHARACTER=3 TEXT= 'KAREN''S_#5'; TEXT CHARACTER=4 TEXT= 'KAREN''S_#6'; TEXT CHARACTER=5 TEXT= 'KAREN''S_#7'; TEXT CHARACTER=6 TEXT= 'KAREN''S_#8'; TEXT CHARACTER=7 TEXT= 'KAREN''S_#10__!ORD'; TEXT CHARACTER=8 TEXT= 'KAREN''S_#12'; TEXT CHARACTER=9 TEXT= 'KAREN''S_#14'; TEXT TAXON=20 TEXT= 'Lycopodium_obscurum_added_from_Karen''s_notes_sent_3/1/93_--_note_that_the_old_Lycop_is_now_Lycopodiella_!'; TEXT CHARACTER=10 TEXT= 'KAREN''S_#15'; TEXT CHARACTER=11 TEXT= 'KAREN''S_#16'; TEXT CHARACTER=12 TEXT= 'KAREN''S_#17 '; TEXT CHARACTER=13 TEXT= 'KAREN''S_#18'; TEXT CHARACTER=14 TEXT= 'KAREN''S_#19 '; TEXT CHARACTER=15 TEXT= 'KAREN''S_#20'; TEXT CHARACTER=16 TEXT= 'KAREN''S_#21'; TEXT CHARACTER=17 TEXT= 'KAREN''S_#22'; TEXT CHARACTER=18 TEXT= 'KAREN''S_#24'; TEXT CHARACTER=19 TEXT= 'KAREN''S_#25'; TEXT CHARACTER=20 TEXT= 'KAREN''S_#26'; TEXT CHARACTER=21 TEXT= 'KAREN''S_#27'; TEXT CHARACTER=22 TEXT= 'KAREN''S_#28'; TEXT CHARACTER=23 TEXT= 'KAREN''S_#30'; TEXT CHARACTER=24 TEXT= 'KAREN''S_#31'; TEXT CHARACTER=25 TEXT= 'KAREN''S_#32'; TEXT CHARACTER=26 TEXT= 'KAREN''S_#34'; TEXT CHARACTER=27 TEXT= 'KAREN''S_#35'; TEXT CHARACTER=28 TEXT= 'KAREN''S_#37'; TEXT CHARACTER=29 TEXT= 'KAREN''S_#38'; TEXT CHARACTER=30 TEXT= 'KAREN''S_#39'; TEXT CHARACTER=31 TEXT= 'KAREN''S_#40'; TEXT CHARACTER=32 TEXT= 'KAREN''S_#44'; TEXT CHARACTER=33 TEXT= 'KAREN''S_#47'; TEXT CHARACTER=34 TEXT= 'KAREN''S_#49'; TEXT CHARACTER=35 TEXT= 'KAREN''S_#50'; TEXT CHARACTER=36 TEXT= 'KAREN''S_#51'; TEXT CHARACTER=37 TEXT= 'KAREN''S_#52'; TEXT CHARACTER=38 TEXT= 'KAREN''S_#53'; TEXT CHARACTER=39 TEXT= 'KAREN''S_#54'; TEXT CHARACTER=40 TEXT= 'KAREN''S_#55'; TEXT CHARACTER=41 TEXT= 'KAREN''S_#57'; TEXT CHARACTER=42 TEXT= 'KAREN''S_#58'; TEXT CHARACTER=43 TEXT= 'KAREN''S_#59'; TEXT CHARACTER=44 TEXT= 'KAREN''S_#61'; TEXT CHARACTER=45 TEXT= 'KAREN''S_#63'; TEXT CHARACTER=46 TEXT= 'KAREN''S_#64'; TEXT CHARACTER=47 TEXT= 'KAREN''S_#65'; TEXT CHARACTER=48 TEXT= 'KAREN''S_#66'; TEXT CHARACTER=49 TEXT= 'KAREN''S_#67 '; TEXT CHARACTER=50 TEXT= 'KAREN''S_#69__ORD!'; TEXT CHARACTER=51 TEXT= 'KAREN''S_#70'; TEXT CHARACTER=52 TEXT= 'KAREN''S_#71'; TEXT CHARACTER=53 TEXT= 'KAREN''S_#72'; TEXT CHARACTER=54 TEXT= 'KAREN''S_#74'; TEXT CHARACTER=55 TEXT= 'new_character_added_by_Karen_3/1/93'; TEXT CHARACTER=56 TEXT= 'KAREN''S_#75'; TEXT CHARACTER=57 TEXT= 'KAREN''S_#76'; TEXT CHARACTER=58 TEXT= 'KAREN''S_#77'; TEXT CHARACTER=59 TEXT= 'KAREN''S_#79'; TEXT CHARACTER=60 TEXT= 'KAREN''S_#80'; TEXT CHARACTER=61 TEXT= 'KAREN''S_#81'; TEXT CHARACTER=62 TEXT= 'KAREN''S_#83'; TEXT CHARACTER=63 TEXT= 'KAREN''S_#84'; TEXT CHARACTER=64 TEXT= 'KAREN''S_#86'; TEXT CHARACTER=65 TEXT= 'KAREN''S_#89'; TEXT CHARACTER=77 TEXT= 'of_moss/tracheophyte_type'; TEXT CHARACTER=80 TEXT= unord.; TEXT CHARACTER=85 TEXT= 'of_the_liverwort_type_(non-homologous_to_those_of_the_moss/tracheophyte_lineage)__--__M&C_char._#9'; TEXT CHARACTER=88 TEXT= 'on_a_regular_basis_(Andreaea_considered_non-homologous)_--_M&C_char._#14'; TEXT CHARACTER=108 TEXT= see_Markham_in_Zinsmeister_&_Mues; TEXT CHARACTER=90 TEXT= 'caps._wall_2-10_cells_thick_--__M&C_char._#19_--_thick_caps._walls_in_horn.,_mosses,_and_tracheo._considered_non-nomologous'; TEXT CHARACTER=89 TEXT= M&C_char._#18; TEXT CHARACTER=86 TEXT= M&C_char._#10; TEXT CHARACTER=87 TEXT= M&C_char._#13; TEXT TAXON=18 CHARACTER=80 TEXT= considered_homologous_with_mosses; TEXT TAXON=15 CHARACTER=94 TEXT= assuming_loss_in_some_spp.; TEXT TAXON=17 CHARACTER=94 TEXT= assuming_loss_in_some_spp.; TEXT TAXON=15 CHARACTER=74 TEXT= possible_homology_in_Andreobryum_?; TEXT CHARACTER=82 TEXT= with_multiple_sporangia; TEXT CHARACTER=109 TEXT= through_sporogenesis; TEXT TAXON=15 CHARACTER=72 TEXT= fide_Murray_1988; TEXT TAXON=15 CHARACTER=93 TEXT= fide_Murray_1988; TEXT TAXON=15 CHARACTER=113 TEXT= 'in_Andreaobryum_only_(fide_Murray_1988),_Andreaea_has_normal_moss-like_muscilage_papillae'; TEXT CHARACTER=113 TEXT= homology_accepted_from__Murray_1988; TEXT CHARACTER=106 TEXT= Bremer_char._#_64; TEXT CHARACTER=107 TEXT= Bremer_#_67; TEXT CHARACTER=105 TEXT= from_Raubeson_and_Jansen_1992; TEXT CHARACTER=103 TEXT= Crane; TEXT CHARACTER=104 TEXT= Crane; TEXT CHARACTER=102 TEXT= Crane; TEXT TAXON=4 CHARACTER=9 TEXT= not_sure_of_homology_with_mosses_+_tracheophytes; TEXT CHARACTER=74 TEXT= 'N.B.,_homology_between_mosses_and_tracheophytes_not_agreed_to_by_all_co-authors'; TEXT CHARACTER=75 TEXT= 'N.B.,_homology_between_mosses_and_tracheophytes_not_agreed_to_by_all_co-authors'; TEXT TAXON=8 CHARACTER=86 TEXT= 'polymorphic_in_order;__Riella_has_differentiated_cells'; TEXT TAXON=18 CHARACTER=94 TEXT= 'state_difficult_to_determine_--_maybe_all_costa!'; TEXT TAXON=22 CHARACTER=102 TEXT= not_sure_if_homologous_with_lycophytes; END; BEGIN MACCLADE; v 3.0 -1322664995 1100&/0 0 0 END; tv-0.5/ncl-2.0/data/characters.nex0000775000076400007640000000640607236527354013605 00000000000000#nexus [! *************************************************** * This NEXUS file is designed to test the NCL by * * presenting it with several different variants * * of the CHARACTERS block. After each variant, * * a special 'showall' comment directs the nexus * * reader to spit out the contents of all blocks * * currently stored. The file reference.txt holds * * the output expected (use the DOS command fc or * * the UNIX command diff to compare your output to * * reference.txt to see if your implementation is * * working correctly. * *************************************************** ] begin taxa; dimensions ntax=6; taxlabels 'P. fimbriata' 'P. robusta' 'P. americana' 'P. myriophylla' 'P. polygama' 'P. macrophylla' ; end; [! ************* * Standard * ************* ] begin characters; dimensions nchar=45; format datatype=dna missing=? gap=-; matrix P._fimbriata acctcggcttaacgaacctcggcttaacgaacctcggcttaacga P._robusta acctcggcttaaccaacctcggcttaacgaacctcggcttaacga P._americana acgtcgctttca---acgtcgctttcaccaacgtcgctttcacca P._myriophylla acgtcgctttca---acgtcgctttcaccaacgtc?ctttcacca P._polygama acgtcgctctcaccaacgtcgctttcaccaacgtc?ctttcacca P._macrophylla acgtcgctctcaccaacgtcgctttcaccaacgtcgctttcacca ; end; [&showall] [! ********** * Tokens * ********** ] begin characters; dimensions nchar=3; charstatelabels 1 'leaf margins' / entire fimbriate, 2 'flower color' / 'white to cream' crimson, 3 'breeding system' / hermaphroditic gynomonoecious gynodioecious dioecious ; format tokens; matrix P._fimbriata fimbriate crimson gynomonoecious P._robusta fimbriate crimson gynomonoecious P._americana entire white_to_cream hermaphroditic P._myriophylla entire white_to_cream hermaphroditic P._polygama entire white_to_cream dioecious P._macrophylla entire crimson gynodioecious ; end; [&showall] [! *********** * Symbols * *********** ] begin characters; dimensions nchar=3; charstatelabels 1 'leaf margins' / entire fimbriate, 2 'flower color' / 'white to cream' crimson, 3 'breeding system' / hermaphroditic gynomonoecious gynodioecious dioecious ; format notokens symbols="0123"; matrix P._fimbriata 111 P._robusta 111 P._americana 000 P._myriophylla 000 P._polygama 003 P._macrophylla 012 ; end; [&showall] [! ***************************** * Interleaved, missing taxa * ***************************** ] begin characters; dimensions ntax=4 nchar=15; format datatype=dna interleave; matrix P._fimbriata acctcggc P._robusta acctcggc P._americana acgtcgct P._myriophylla acgtcgct P._fimbriata ttaacga P._robusta ttaacca P._americana ctcacca P._myriophylla ttcacca ; end; [&showall] [! **************** ** transposed ** **************** ] begin characters; dimensions nchar=15; format datatype=dna transpose; matrix site_1 aaaaaa site_2 cccccc site_3 ccggcc site_4 tttttt site_5 cccccc site_6 gggggg site_7 ggcccc site_8 cctttt site_9 ttcttt site_10 tttttt site_11 aacccc site_12 aaaaaa site_13 cccccc site_14 gcccgg site_15 aaaaaa ; end; tv-0.5/ncl-2.0/data/GPMorph.nex0000775000076400007640000004752007236527357013007 00000000000000#NEXUS [MacClade 3.01 registered to Equator, UCMP] BEGIN DATA; DIMENSIONS NTAX=60 NCHAR=110; FORMAT MISSING=? GAP=- SYMBOLS= " a b c d e f g h i j k l m n o p q r s t u v w x y z"; OPTIONS MSTAXA=UNCERTAIN ; CHARLABELS [1] habitat [2] life_history [3] attached_to_substrate? [4] radial_symmetry [5] growth_form [6] veg._cells_contiguous [7] multinucleate_veg._cells [8] coenocytic [9] distromatic_foliar_thalli [10] plasmodesmata [11] parenchyma [12] filaments [13] filaments_with_acuminate_tips [14] 'cells_spindle-shaped' [15] zoospores [16] 'autospores/colonies' [17] vegetative_cell_w._flagella [18] gamete_production [19] 'multiple_sporulation/fission' [20] type_of_sex [21] chloroplast_shape [22] pyrenoids [23] thylakoid_membranes_trav._pyr. [24] number_of_flagellae [25] ret._of_flagella_during_div. [26] angle_of_basal_bodies [27] flagellar_beat [28] basal_bodies_distant_in_devel. [29] flagellae_extend_to_right [30] flag._app._with_180_deg._sym. [31] absolute_orientation [32] BB_overlap_in_mot._cells [33] BB_core_connection [34] mitotic_spindle_type [35] mitotic_spindle_closed [36] spindle_collapsing_at_telophase [37] cupping_microtubules [38] microtub._in_plane_of_cell_div. [39] phragmoplast [40] cell_plate_in_cytokinesis [41] centrioles_bet._daughter_nucleu [42] lactate_fermentation [43] Chaeto._autolysin_lyses_sporang [44] hydrogenase [45] secondary_carotenoids [46] siphonoxanthin [47] gelatin_liquifaction [48] photosyst._II [49] dormant_zygote_produced [50] sporulation [51] 'Zellteilung[_vs._sporulation]' [52] common_matrix [53] papillae_on_veg._cells [54] crystalline_cell_wall [55] stigma [56] #_of_contractile_vacuoles [57] apical_insertion_of_flagella [58] zoosporangia_abscise [59] zoosporangia_operculate [60] zoosporangial_exit_plug [61] keeled_flagella [62] urea_amidolyase [63] terminal_cap [64] prominent_proximal_sheath [65] 'organic_scales/covering' [66] transverse_septum [67] proximal_septum [68] SMAC [69] diaphasis [70] distal_fiber_in_motile_cell [71] specialized_zoosporangia [72] MLS_present [73] glycollate_oxidase [74] oogonium_assoc._w._sterile_cell [75] eggs_retained_in_oogonium [76] apical_cell_growth [77] flavonoids [78] zygote_retained [79] placental_transfer_cells [80] true_antheridia [81] archegonia [82] embryo [83] cuticle [84] monoterpenes [85] lunularic_acid [86] elaters [87] oil_bodies [88] 'D-Methionine' [89] stomata [90] vertical_division_of_zygote [91] pseudoelaters [92] xylem [93] phloem [94] perine_on_spores [95] aerial_sporophyte_axis [96] columella_in_sporangium [97] multicellular_rhizoids [98] leaves_on_gametophyte [99] articulated_peristome [100] independent_sporophyte [101] branched_sporophyte [102] orn._tracheid_walls [103] true_lignin [104] megaphylls [105] trichomes [106] vascular_cambium [107] eustele [108] seeds [109] axillary_branching [110] flowers ; STATELABELS 1 freshwater brackish_or_marine terrestrial, 2 haplontic diplontic isomorphic_alt. heteromorphic_alt., 3 no yes, 4 no yes, 5 unicell._or_coccoid multicellular coenobic, 6 no yes, 7 no yes, 8 no yes, 9 absent present, 10 absent present, 11 absent present, 12 no 'yes,_unbranched' 'yes,_branched' 'yes,multi-axial', 13 no yes, 14 no yes, 15 absent present 'present,flattened', 16 no yes, 17 no yes, 18 holocarpic heterocarpic, 19 no yes, 20 isogamy anisogamy oogamy, 21 cup reticulated lateral_cup 'H-shaped' 'bi-polar' sets_of_comp.rings incomp._rings multiple_disks spiral stellate plate axile, 22 absent present, 23 no yes, 24 2 4 1 4+ 0, 25 no yes, 26 angled perpendicular parallel, 27 'trailing-undulating' breast_stroke, 28 no yes, 29 no yes, 30 no yes, 31 CCW CW DO, 32 absent present, 33 absent present, 34 metacentri centric, 35 absent present, 36 absent present, 37 no yes, 38 absent present, 39 no yes, 40 no yes, 41 no yes, 42 absent present, 43 no yes, 44 no yes, 45 no yes, 46 absent present, 47 no yes, 48 low_molec._wt. high_molec._wt., 49 no yes, 50 absent present, 51 no yes, 52 no yes, 53 no yes, 54 no yes, 55 no yes, 56 2 2+ 1 absent, 57 no yes, 58 no yes, 59 no yes, 60 no yes, 61 no yes, 62 no yes, 63 absent bilobed 'plate-like', 64 no yes, 65 no yes, 66 absent present, 67 absent present, 68 absent present, 69 absent present, 70 absent present, 71 absent present, 72 no yes, 73 no yes, 74 no yes, 75 no yes, 76 no yes, 77 no yes, 78 no yes, 79 no yes, 80 no yes, 81 no yes, 82 no yes, 83 no yes, 84 no yes, 85 no yes, 86 no yes, 87 no yes, 88 no yes, 89 no yes, 90 no yes, 91 no yes, 92 no yes, 93 no yes, 94 no yes, 95 no yes, 96 no yes, 97 no yes, 98 no yes, 99 no yes, 100 no yes, 101 no yes, 102 no yes, 103 no yes, 104 no yes, 105 no yes, 106 no yes, 107 no yes, 108 no yes, 109 no yes, 110 no yes, ; MATRIX Glycine_max cdbabbaaabbaaaaaabacha??a????a??abaaaabba????a??babaa??daaaaa?aaa??aaaa?bbbbbbb??bb?aaabbaabbbbaaaabbbbbbbbbbb Oryza_sativa cdbabbaaabbaaaaaabacha??a????a??abaaaabba????a??babaa??daaaaa?aaa??aaaa?bbbbbbb??bb?aaabbaabbbbaaaabbbbbbbbbbb Zamia_pumila cdbabbaaabbaaaaaabacha??a????a??abaaaabba????a??babaa?adaaaaa?aaaaaaaaabbbbbbbbbbbb?aaabbaabbbbaaaabbbbbbbbbaa Psilotum cdbabbaaabbaaaaaabacha??a????a??abaaaabba????a??babaa??daaaaa?aaa??aaaabbbbbbbbbbbb?aaabbaabbbbaaaabbbbbaaaaaa Equisetum_arvense cdbabbaaabbaaaaaabacha??a????a??abaaaabba????a??babaa?adaaaaa?aaaaaaaaabbbbbbbbbbbb?aaabbaabbbbaaaabbbbaaaaaaa Atrichum cdbabbaaabbaaaaaabacha??a?a?ba??abaaaabba????a??babaaa?daaaaa?aaaaaaaaabbbbbabbbbbb?aaabbaabbbbbbbaaaaaaaaaaaa Fissidens_taxifolius cdbabbaaabbaaaaaabacha??aaa?ba?babaaaabba????a??babaaaadaaaaa?aaaaaaaaabbbbbbbbbbbbaaaabbaabbbbbbbbaaaaaaaaaaa Plagiomnium_cuspidatum cdbabbaaabbaaaaaabacha??aaa?ba?babaaaabba????a??babaaaadaaaaa?aaaaaaaaabbbbbbbbbbbbaaaabbaabbbbbbbbaaaaaaaaaaa Notothylas_breutellii cdbabbaaabbaaaaaabachb??aaa?ba?babaaaabba????a??babaaaadaaaaa?aaaaaaaaabbbbbabbbbbbaaaabbbbaaaabaaaaaaaaaaaaaa Phaeoceros_laevis cdbabbaaabbaaaaaabachb??aaa?ba?babaaaabba????a??babaaaadaaaaa?aaaaaaaaabbbbbabbbbbbaaaabbbbaaaabaaaaaaaaaaaaaa Porella_pinnata cdbabbaaabbaaaaaabacha??aaa?ba?babaaaabba????a??babaaaadaaaaa?aaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaa Conocephalum_conicum cdbabbaaabbaaaaaabacha??aaa?ba?babaaaabba????a??babaaaadaaaaa?aaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaa Asterella_tenella cdbabbaaabbaaaaaabacha??aaa?ba?babaaaabba????a??babaaaadaaaaa?aaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaa Riccia cdbabbaaabbaaaaaabacha??aa??ba?babaaaabba????a??babaaaadaaaaa?aaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaa Coleochaete_nitellarum aababbaaabbbaabaabacbbaaaaaabaababaaaabba????a??bbbaaaa?aaaaa?aabaaaaaabbbbaabbaaaaaaaa?aaaaaaaaaaaaaaaaaaaaaa Klebsormidium_flaccidum aaaab?aaababaabaaaaabbaaaaaabaababaaaaaba????a??bbbaaaa?aa?aaaaaaaaaaaa?baaaaaaaaaaaaaa?aaaaaaaaaaaaaaaaaaaaaa Micromonas_pusila b?aaaaaaaaaaaabab?a?abacb?aaa???abbaaaaa?????a???baaaaadaaaaa?aaabbaaaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Mantoniella_squamata b?aaaaaaaaaaaabab?a?abacbaaaaaababbaaaaa?????a?b?baaaabdaaaaa?aabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Nephroselmis_pyriformis b?aaaaaaaaaaaabab?a?abaababaab?babbaaaaa?????a???baaaaacbaaaa?aabbabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Pedinomonas_minutissima b?aaaaaaaaaaaabab?a?abacb?a?ab??abbaaaaa?????a???baaaabcaaaaa?aaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Tetraselmis_carteriiformis b?aaaaaaaaaaaabab?a?ababbcbbabaaaabbbbaaa????a???baaaababaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Enteromorpha_intestinalis bcbabbaabaaaaabaaabbgbababbaabababbaaaaaa????a?aabbaba??baaaaabbabababaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Ulva_fasciata bcbabbaabaaaaabaaabbgbababbaabababbaaaaaa??b?a?aabbaba??baaaaabbabababaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Ulothrix_zonata adbabbaaaaabaabaaabagbababbaabababbaaaaaa?a??a?aabbabababaaaa?abbbababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Cymopolia_barbata bbbbbbbbaaadaaaaabbbhba?a?ba?b??abbaaaaaa???????abaaaa?dbabaa?aaa???b?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Batophora_oerstedtii bbbbbbaaa?acaabaabbahb??abba?bababbaaaaaa???????abaaaabdbabaa?a?aaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Codium_decorticatum bbbabbbbaaadaaaaabbbhbaeabbaabababbaaaaaa????b?babaaaa?dbaaaa?aaa???a?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Cladophoropsis_membranosa bcbabbbaaaacaabaabba?bababbaab??abbaaaaaa????a?aabbaaa??baaba?a?a???a?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Blastophysa_rhizopus bcbabbbaabacaabaabba?bababbaabababbaaaaaa????b?babbaaa?dba?ba?aaaaa?ab?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Trentepohlia_sp. ccbabbaaabacaabaabbaba?babbaabababbaaa?a?????a??abbaaaa?bbaab?a???aaa?bb?aabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Cephaleuros_parasiticus ccbabbaaabacaabaabbaba?babbaabababbaaa?a?????a??abbaaaa?bbaab?a??aaaa?bb?aabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Characium_vacuolatum aabaaaaaaaaaabbaaaba?bbaa?baabbaabbbabaa?????a??abaaab??baaaa?aaaba?abaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Dunaliella_parva baaaaaaaaaaaaababaaaabbab?b?abbaa?????aa?????a???baaaa?dbaaaa?aaa???abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Chlamydomonas_reinhardtii aaaaaaaaaaaaaabababaabbaaabaabbaabbbabaab??b?a?abbaaabbabaaaabaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Volvox_carteri aaaacaaaaaaaaaabbbbc?b?a???babbaabbba?aa?????a???babab??baaaa?aaa???abaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Chlorococcopsis_min aaaaaaaaaaaaaabaaaba?bbaa?baabbaabbbabaa?????a??abaaab??baaaa?aaabaaabaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Draparnaldia_plumosa aababbaaabacbabaaabagbababbaabbaabbbababa?b??a??bbbabababaaaabaaabababaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Uronema_belkae aababbaaababbabaaabagbababbaabbaabbbababa?b??a??bbbabababaaaa?aaabababaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Chlamydomonas_moewusii aaaaaaaaaaaaaabababaab?aaab?abbaa?????aa?????a??bbaabbbabaaaa?aaa???abaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Stephanosphaera_pluvialis aaaacaaaaaaaaaabbabacbbababbabbaabbbabaa?????a??bbabbbbbbaaaa?aaa??babaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Carteria_radiosa aaaaaaaaaaaaaabababaabbbaabaabbaa?????aa?????a??bbaabbbabaaaa?aaaba?abaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Gonium_pectorale aaaacaaaaaaaaaabbabaabba?cbbabbaabbbabaa?????a??bbababbabaaaa?aaabababaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Chlorella_kessleri aaaaaaaaaaaaaaaba?b??b??a???????????abaa?a?baaa??baaa??d?aaa????a???a?a??aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Chlorella_vulgaris aaaaaaaaaaaaaaaba?b?ab??a???????????abaa?b?aaaa??baaa??d?aaa?b??a???a?a?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Prototheca_wickerhamii aaaaaaaaaaaaaaaba?b??b??a???????????abaa?????a???baaa??d?aaa????a???a?a??aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Chlorella_protothecoides aaaaaaaaaaaaaaaba?b??b??a???????????abaa?b?aaaa??baaa??d?aaa????a???a?a??aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Chlorella_minutissima aaaaaaaaaaaaaaaba?b??b??a???????????abaa?a?aaaa??baaa??d?aaa????a???a?a??aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Neochloris_aquaticus aaaaaabaaaaaaabaaaba?baaa?baabcabbbbabaa?????a??abaaaa??baaaa?aaabababaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Neochloris_vigenis aaaaaabaaaaaaabaaaba?baaa??aabcabbbbabaa?????a??abaaaa??baaaa?aaaba?abaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Pediastrum_duplex aaaacbaaaaaaaabaaaba?b?aabbaabcabbbbabaab????a??bbaaaab?baaaa?ababababaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Scenedesmus_obliquus aaaacbaaaaaaaaabaaba?b?ea???a????bbbabaa???bbab??baaaa???aaaabaaa???a?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Characium_hindakii aabaaabaaaaaabbaaaba?baaa?baabca?bbbabaa?????a??abaaaa??baaaa?aaaba?abaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Chlorella_fusca aaaaaaaaaaaaaaaba?b?ab??a???????????abaa?b?bbab??baaa??d?aaa????a???a?a??aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 'Ankistrodesmus_falcatus(sti)' aaaaaaaaaaaaababa?b??b??a???????????abaa?????a???baaa??d?aaa????a???a?a??aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Pseudotrebouxia_gigantea aaaaaaaaaaaaaacaa?a??baaa?baaba?aabbbbaaa????a???baaaa?dbaaaa?aaabaaabaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Pleurastrum_terrestre aaaabbaaaaabaacaa?a??baaa?baaba?aabbbbaaa????a???baaaa?dbaaaa?aaabaaabaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Characium_perforatum aabaaaaaaaaaabbaaaba?bbaa?baababa?bb?aaa?????a??abaaaa??baaaa?aaaba?abaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Parietochloris_pseudoalveolaris aaaaaaaaaaaaaabaaaba?bbaa?baababa?bb?aaa?????a??abaaaa??baaaa?caabaaabaa?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Friedmannia_israelensis {ac}aaaaaaaaaaaaacaaaa??baaabbaababaabbbbaaa????a???baaaa?dbaaaa?aaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Hypothetical_ancestor baaaaaaaaaaaaabababa?aaaaaaaaa?baaaaaaaaa????a?aabaaaaadaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ; END; BEGIN ASSUMPTIONS; OPTIONS DEFTYPE=unord PolyTcount=MINSTEPS ; END; BEGIN NOTES; TEXT CHARACTER=26 TEXT= 'relative_to_direction_of_motion_--_Mark''s_#21'; TEXT CHARACTER=14 TEXT= 'vegetative_cells_or_zoospores__Mark''s_#42'; TEXT CHARACTER=24 TEXT= 'on_vegetative_cells_or_zoospores__Mark''s_#43'; TEXT CHARACTER=5 TEXT= 'Mark''s_#1_(modified_c=coenobic)'; TEXT CHARACTER=18 TEXT= 'Mark''s_#3'; TEXT CHARACTER=20 TEXT= 'Mark''s_#6_(modified)'; TEXT CHARACTER=21 TEXT= 'Mark''s_#7-perhaps_omit?'; TEXT CHARACTER=43 TEXT= 'Mark''s_#15'; TEXT CHARACTER=25 TEXT= 'Mark''s_#18'; TEXT CHARACTER=28 TEXT= 'BB_in_motile_cells_distant_from_one_another_via_migration_in_development_--_Mark''s_#45'; TEXT CHARACTER=34 TEXT= 'Mark''s_#47'; TEXT CHARACTER=1 TEXT= 'of_free_living_vegetative_stage_--_Mark''s_#48'; TEXT CHARACTER=17 TEXT= 'Mark''s_#49'; TEXT CHARACTER=38 TEXT= 'microtubules_forming_in_plane_of_cell_division_--_Mark''s_#50'; TEXT CHARACTER=36 TEXT= 'Mark''s_#51'; TEXT CHARACTER=7 TEXT= 'Mark''s_#52-related_to_#8.'; TEXT CHARACTER=6 TEXT= 'in_multicellular_organism_--_Mark''s_#54'; TEXT CHARACTER=12 TEXT= 'veg._cells_form_filaments_--_Mark''s_#55_(modified_-_c=branched_filaments)'; TEXT CHARACTER=15 TEXT= 'Mark''s_#57-combine_with_16?'; TEXT CHARACTER=11 TEXT= 'Mark''s_#58'; TEXT CHARACTER=3 TEXT= 'veg._cell_or_thallus_attached_--_Mark''s_#60_(Modify_def_to_include_attachment_by_specialized_structure?)'; TEXT CHARACTER=10 TEXT= 'Mark''s_#62-are_all_of_these_structurally_similar?'; TEXT CHARACTER=2 TEXT= 'Mark''s_#63_(modified,_d_=_heteromorphic_alt.)_CHECK_CODING!'; TEXT CHARACTER=35 TEXT= 'with_distinct_membrane_--_Mark''s_#64'; TEXT CHARACTER=42 TEXT= 'in_veg._cell_--_Mark''s_#67'; TEXT CHARACTER=16 TEXT= 'produced_by_vegetative_thallus_or_cells_--_Mark''s_#68'; TEXT CHARACTER=44 TEXT= 'produced_by_veg._cells_--_Mark''s_#69'; TEXT CHARACTER=45 TEXT= 'produced_by_veg._cell_--_Mark''s_#70'; TEXT CHARACTER=47 TEXT= 'veg._cells_capable_--_Mark''s_#71'; TEXT CHARACTER=49 TEXT= 'Mark''s_#72'; TEXT CHARACTER=51 TEXT= 'in_veg._cells_--_Mark''s_#77'; TEXT CHARACTER=52 TEXT= 'surrounds_cells_--_Mark''s_#80'; TEXT CHARACTER=53 TEXT= 'Mark''s_#83-CHECK_if_includes_zoospores.'; TEXT CHARACTER=13 TEXT= 'Mark''s_#84'; TEXT CHARACTER=40 TEXT= 'in_veg_cells__-_Mark''s_#86'; TEXT CHARACTER=54 TEXT= 'in_veg_cells_or_zoospores_--_Mark''s_#87'; TEXT CHARACTER=41 TEXT= 'between_nucleus_and_plane_of_cleavage_--_Mark''s_#88'; TEXT CHARACTER=19 TEXT= 'in_veg._cells,_to_produce_zoospores_or_gametes_--_Mark''s_#89'; TEXT CHARACTER=55 TEXT= 'in_veg._cells_or_zoospores_--_Mark''s_#92'; TEXT CHARACTER=56 TEXT= 'in_veg_cells_or_zoospores_--_Mark''s_#93_(modified,_d=absent)'; TEXT CHARACTER=23 TEXT= 'thylakoid_membranes_traverse_pyrenoids_--Mark''s_#_98'; TEXT CHARACTER=37 TEXT= 'surround_centrioles_during_mitosis_--_Mark''s_#101'; TEXT CHARACTER=72 TEXT= 'multi-layered_structure_--_Mark''s_#102'; TEXT CHARACTER=29 TEXT= 'on_motile_cells_--_Mark''s_#107'; TEXT CHARACTER=73 TEXT= 'produced_by_veg._cells_--_Mark''s_#108'; TEXT CHARACTER=39 TEXT= 'microtubules_formed_during_cytokinesis_--_Mark''s_#110'; TEXT CHARACTER=74 TEXT= 'Mark''s_#111'; TEXT CHARACTER=4 TEXT= 'if_multicellular_(?)_--_Mark''s_#164'; TEXT CHARACTER=33 TEXT= 'basal_body_core_connection_--_Mark''s_#202'; TEXT CHARACTER=31 TEXT= 'Mark''s_#201'; TEXT CHARACTER=9 TEXT= 'Mark''s_#200'; TEXT CHARACTER=32 TEXT= 'basal_body_overlap_in_motile_cells_--_Mark''s_#195'; TEXT CHARACTER=50 TEXT= 'Mark''s_#194'; TEXT CHARACTER=71 TEXT= 'Mark''s_#192'; TEXT CHARACTER=48 TEXT= 'photosystem_II_light_harvesting_complex_--_Mark''s_#189'; TEXT CHARACTER=70 TEXT= 'Mark''s_#188'; TEXT CHARACTER=69 TEXT= 'Mark''s_#185'; TEXT CHARACTER=27 TEXT= 'Mark''s_#180'; TEXT CHARACTER=68 TEXT= 'or_system_1_fiber_--_Mark''s_#178'; TEXT CHARACTER=67 TEXT= 'Mark''s_#175'; TEXT CHARACTER=66 TEXT= 'Mark''s_#173'; TEXT CHARACTER=60 TEXT= 'zoosporangial_exit_aperature_possesses_plug_--_Mark''s_#170'; TEXT CHARACTER=46 TEXT= 'independent_of_environment_--_Mark''s_#169'; TEXT CHARACTER=65 TEXT= 'of_veg._or_motile_cells_--_Mark''s_#168'; TEXT CHARACTER=64 TEXT= 'Mark''s_#167'; TEXT CHARACTER=63 TEXT= 'Mark''s_#166'; TEXT CHARACTER=8 TEXT= 'Mark''s_#165'; TEXT CHARACTER=62 TEXT= 'Mark''s_#163-modified,_includes_plate-like'; TEXT CHARACTER=59 TEXT= 'Mark''s_#162'; TEXT CHARACTER=61 TEXT= 'Mark''s_#160'; TEXT CHARACTER=58 TEXT= 'Mark''s_#159'; TEXT CHARACTER=57 TEXT= 'Mark''s_#157'; TEXT CHARACTER=22 TEXT= 'Mark''s_#155'; TEXT CHARACTER=109 TEXT= 'Mark''s_#154'; TEXT CHARACTER=108 TEXT= 'Mark''s_#153'; TEXT CHARACTER=75 TEXT= 'Mark''s_#112'; TEXT CHARACTER=76 TEXT= 'Mark''s_#113'; TEXT CHARACTER=77 TEXT= 'Mark''s_#114'; TEXT CHARACTER=78 TEXT= 'Mark''s_#117'; TEXT CHARACTER=79 TEXT= 'Mark''s_#118'; TEXT CHARACTER=83 TEXT= 'Mark''s_#119'; TEXT CHARACTER=80 TEXT= 'Mark''s_#120'; TEXT CHARACTER=81 TEXT= 'Mark''s_#121'; TEXT CHARACTER=82 TEXT= 'Mark''s_#122-maybe_should_substitute_"sporic_meiosis"_as_in_Graham_et_al._1991.'; TEXT CHARACTER=84 TEXT= 'Mark''s_#123'; TEXT CHARACTER=87 TEXT= 'Mark''s_#124'; TEXT CHARACTER=86 TEXT= 'Mark''s_#125'; TEXT CHARACTER=85 TEXT= 'Mark''s_#126'; TEXT CHARACTER=89 TEXT= 'Mark''s_#127'; TEXT CHARACTER=88 TEXT= 'Mark''s_#128'; TEXT CHARACTER=96 TEXT= 'Mark''s_#129'; TEXT CHARACTER=91 TEXT= 'Mark''s_#130'; TEXT CHARACTER=93 TEXT= 'Mark''s_#133'; TEXT CHARACTER=92 TEXT= 'Mark''s_#134'; TEXT CHARACTER=30 TEXT= 'flagellar_apparatus_components_displaying_180_deg._rotational_symmetry_--_Mark''s_#135'; TEXT CHARACTER=94 TEXT= 'Mark''s_#136'; TEXT CHARACTER=95 TEXT= 'of_moss-tracheophyte_type_--_Mark''s_#137'; TEXT CHARACTER=98 TEXT= 'of_moss_type_--_Mark''s_#138'; TEXT CHARACTER=97 TEXT= 'Mark''s_#139'; TEXT CHARACTER=103 TEXT= 'Mark''s_#140'; TEXT CHARACTER=102 TEXT= 'Mark''s_#141'; TEXT CHARACTER=100 TEXT= 'Mark''s_#142'; TEXT CHARACTER=101 TEXT= 'Mark''s_#143'; TEXT CHARACTER=104 TEXT= 'Mark''s_#146'; TEXT CHARACTER=105 TEXT= 'Mark''s_#147'; TEXT CHARACTER=106 TEXT= 'Mark''s_#148'; TEXT CHARACTER=107 TEXT= 'Mark''s_#149'; TEXT TAXON=24 CHARACTER=2 TEXT= CHECK; TEXT TAXON=26 CHARACTER=7 TEXT= check; TEXT TAXON=26 CHARACTER=8 TEXT= CHECK; TEXT TAXON=40 CHARACTER=57 TEXT= 'early_in_ontogeny,_flagella_are_apical'; TEXT TAXON=35 CHARACTER=57 TEXT= flagella_apical_in_early_ontogeny; END; BEGIN MACCLADE; v 3.0 -1322665186 1000&/0 0 0 END; tv-0.5/ncl-2.0/data/distances.nex0000775000076400007640000001303307236527355013436 00000000000000#nexus begin taxa; dimensions ntax=8; taxlabels taxon_1 taxon_2 taxon_3 taxon_4 taxon_5 taxon_6 taxon_7 taxon_8; end; [! *************************************************** * Non-interleaved, lower-triangular, no diagonals * *************************************************** ] begin distances; format nodiagonal; matrix taxon_1 taxon_2 1 taxon_3 2 3 taxon_4 4 5 6 taxon_5 7 8 9 10 taxon_6 11 12 13 14 15 taxon_7 16 17 18 19 20 21 taxon_8 22 23 24 25 26 27 28; end; [&showall] [! ************************************************ * Non-interleaved, lower-triangular, diagonals * ************************************************ ] begin distances; matrix taxon_1 0 taxon_2 1 0 taxon_3 2 3 0 taxon_4 4 5 6 0 taxon_5 7 8 9 10 0 taxon_6 11 12 13 14 15 0 taxon_7 16 17 18 19 20 21 0 taxon_8 22 23 24 25 26 27 28 0; end; [&showall] [! *************************************************** * Non-interleaved, upper-triangular, no diagonals * *************************************************** ] begin distances; format triangle=upper nodiagonal; matrix taxon_1 1 2 3 4 5 6 7 taxon_2 8 9 10 11 12 13 taxon_3 14 15 16 17 18 taxon_4 19 20 21 22 taxon_5 23 24 25 taxon_6 26 27 taxon_7 28 taxon_8; end; [&showall] [! ************************************************ * Non-interleaved, upper-triangular, diagonals * ************************************************ ] begin distances; format triangle=upper; matrix taxon_1 0 1 2 3 4 5 6 7 taxon_2 0 8 9 10 11 12 13 taxon_3 0 14 15 16 17 18 taxon_4 0 19 20 21 22 taxon_5 0 23 24 25 taxon_6 0 26 27 taxon_7 0 28 taxon_8 0; end; [&showall] [! ******************************************* * Non-interleaved, rectangular, diagonals * ******************************************* ] begin distances; format triangle=both; matrix taxon_1 0 1 2 3 4 5 6 7 taxon_2 1 0 8 9 10 11 12 13 taxon_3 2 3 0 14 15 16 17 18 taxon_4 4 5 6 0 19 20 21 22 taxon_5 7 8 9 10 0 23 24 25 taxon_6 11 12 13 14 15 0 26 27 taxon_7 16 17 18 19 20 21 0 28 taxon_8 22 23 24 25 26 27 28 0; end; [&showall] [! *********************************************** * Interleaved, lower-triangular, no diagonals * *********************************************** ] begin distances; format nodiagonal interleave; matrix taxon_1 taxon_2 1 taxon_3 2 3 taxon_4 4 5 taxon_5 7 8 taxon_6 11 12 taxon_7 16 17 taxon_8 22 23 taxon_3 taxon_4 6 taxon_5 9 10 taxon_6 13 14 15 taxon_7 18 19 20 taxon_8 24 25 26 taxon_6 taxon_7 21 taxon_8 27 28; end; [&showall] [! ******************************************** * Interleaved, lower-triangular, diagonals * ******************************************** ] begin distances; format interleave; matrix taxon_1 0 taxon_2 1 0 taxon_3 2 3 taxon_4 4 5 taxon_5 7 8 taxon_6 11 12 taxon_7 16 17 taxon_8 22 23 taxon_3 0 taxon_4 6 0 taxon_5 9 10 0 taxon_6 13 14 15 taxon_7 18 19 20 taxon_8 24 25 26 taxon_6 0 taxon_7 21 0 taxon_8 27 28 0; end; [&showall] [! *********************************************** * Interleaved, upper-triangular, no diagonals * *********************************************** ] begin distances; format nodiagonal triangle=upper interleave; matrix taxon_1 1 2 taxon_2 8 taxon_3 taxon_1 3 4 taxon_2 9 10 taxon_3 14 15 taxon_4 19 taxon_5 taxon_1 5 6 7 taxon_2 11 12 13 taxon_3 16 17 18 taxon_4 20 21 22 taxon_5 23 24 25 taxon_6 26 27 taxon_7 28 taxon_8; end; [&showall] [! ******************************************** * Interleaved, upper-triangular, diagonals * ******************************************** ] begin distances; format triangle=upper interleave; matrix taxon_1 0 1 2 taxon_2 0 8 taxon_3 0 taxon_1 3 4 taxon_2 9 10 taxon_3 14 15 taxon_4 0 19 taxon_5 0 taxon_1 5 6 7 taxon_2 11 12 13 taxon_3 16 17 18 taxon_4 20 21 22 taxon_5 23 24 25 taxon_6 0 26 27 taxon_7 0 28 taxon_8 0; end; [&showall] [! ****************************************** * Interleaved, rectangular, no diagonals * ****************************************** ] begin distances; format interleave triangle=both; matrix taxon_1 0 1 2 3 taxon_2 1 0 8 9 taxon_3 2 3 0 14 taxon_4 4 5 6 0 taxon_5 7 8 9 10 taxon_6 11 12 13 14 taxon_7 16 17 18 19 taxon_8 22 23 24 25 taxon_1 4 5 taxon_2 10 11 taxon_3 15 16 taxon_4 19 20 taxon_5 0 23 taxon_6 15 0 taxon_7 20 21 taxon_8 26 27 taxon_1 6 7 taxon_2 12 13 taxon_3 17 18 taxon_4 21 22 taxon_5 24 25 taxon_6 26 27 taxon_7 0 28 taxon_8 28 0; end; tv-0.5/ncl-2.0/data/GPCombined.nex0000775000076400007640000064530307236527355013443 00000000000000#NEXUS [MacClade 3.01 registered to Brent D. Mishler, Duke University] [**The final matrix GP-COMB used in the Ann .Mo. Bot. 81: 451-483 (Mishler et al. 1994) green plant synthesis paper.] BEGIN DATA; DIMENSIONS NTAX=59 NCHAR=2289; FORMAT DATATYPE=DNA MISSING=? GAP=- INTERLEAVE SYMBOLS="0 1 2 3 4 5 6 7"; OPTIONS MSTAXA=UNCERTAIN ; MATRIX [ 10 20 30 40 50] [ . . . . .] Glycine_max TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTGTAAGTATGAACTAA [50] Oryza_sativa TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTGCAAGTATGAACTAA [50] Zamia_pumila TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTGTCAGTATGAACTAT [50] Psilotum_n ?????????????????????????????????????????????????? [50] Equisetum_ar ?????????????????????????????????????????????????? [50] Atrichum_angus ?????????????????????????????????????????????????? [50] Notothylas_bre ?????????????????????????????????????????????????? [50] Phaeoceros_lae ?????????????????????????????????????????????????? [50] Porella_pi ?????????????????????????????????????????????????? [50] Conocephal_con ?????????????????????????????????????????????????? [50] Asterella_tene ?????????????????????????????????????????????????? [50] Riccia ?????????????????????????????????????????????????? [50] Klebsormid_fla ?????????????????????????????????????????????????? [50] Coleochaet_nit ?????????????????????????????????????????????????? [50] Fissidens_taxi ?????????????????????????????????????????????????? [50] Plagiomnium_cu ????????????????????????????????TGTGTAAGTATAAACT-C [49] Micromonas_pus ?????????????????????????????????????????????????? [50] Mantoniel_squa ?????????????????????????????????????????????????? [50] Nephroselm_pyr ?????????????????????????????????????????????????? [50] Pedinomonas_mi ?????????????????????????????????????????????????? [50] Tetraselm_cart ?????????????????????????????????????????????????? [50] Enteromorpha ?????????????????????????????????????????????????? [50] Ulva_fasci ?????????????????????????????????????????????????? [50] Ulothrix_zo ?????????????????????????????????????????????????? [50] Cympolia_barba ?????????????????????????????????????????????????? [50] Batophora_oers ?????????????????????????????????????????????????? [50] Codium_decort ?????????????????????????????????????????????????? [50] Cladophoro ?????????????????????????????????????????????????? [50] Blastophysa_rh ?????????????????????????????????????????????????? [50] Trentepohlia ?????????????????????????????????????????????????? [50] Cephaleuro_par ???????C-TGTCTCAAAGA-TAAGCCATGCATGTCTAAGTATAA---GC [45] Characium_vac TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Dunaliella_par TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Chlamyd_reinha TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Volvox_carteri TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Chlorococc_min TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Draparn_plum ?????????????????????????????????????????????????? [50] Uronema_belk ?????????????????????????????????????????????????? [50] Chlamydom_moew ?????????????????????????????????????????????????? [50] Stephanos_pl ?????????????????????????????????????????????????? [50] Carteria_rad ?????????????????????????????????????????????????? [50] Gonium_pecto ?????????????????????????????????????????????????? [50] Chlorella_kess TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Chlorella_vulg TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Protothec_wic TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAA--TGG [48] Chlorella_prot TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTGAGTATAACCTG- [49] Chlorella_min TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Neochloris_aqu TCATATGCTTGTCTCAAAGATTAACCCATGCATGTCTAAGTATAAACTGC [50] Neochloris_vig TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Pediastrum_dup TCATATGCTTGTCTCAGAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Scenedesm_obl TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Characium_hin TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Chlorella_fus TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Ankistrodesmus TCATATGCTTRTCTCAAAGATTAAGCCATGCATGTC?AAGTATAAACTGC [50] Pseudotreb_gig ?????????????????????????????????????????????????? [50] Pleurastr_terr ?????????????????????????????????????????????????? [50] Characium_per TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Parietochl_pse TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] Friedmannia_is TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGC [50] [ 60 70 80 90 100] [ . . . . .] Glycine_max TTCA-GACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTGTT [99] Oryza_sativa TTC-GAACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTGTT [99] Zamia_pumila TTT-GGACGGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTCTT [99] Psilotum_n ?????????????????GCGAATGGCTCATTAAATCAGTTATAGTTTCTT [100] Equisetum_ar ?????????????????GCGAATGGCTGATTAAATCAGTTATAGTTTCTT [100] Atrichum_angus ????????????????????????????ATTAAATCAGTTATAGTTTCTT [100] Notothylas_bre ?????????????????????????????????????????????????? [100] Phaeoceros_lae ?????????????????????????????????????????????????? [100] Porella_pi ????????????????????????????????????????????????TT [100] Conocephal_con ?????????????????????????????????????????????????? [100] Asterella_tene ???????CTGTGAAACTGCGAATGGCTC-TTAAATC-GTTATAGTTTCTT [98] Riccia ?????????????????????????????????????????????????? [100] Klebsormid_fla ?????????????????????????????????????????????????? [100] Coleochaet_nit ??????????????????????TGGCTCATTAAATCAGTTATAGTTT-TT [99] Fissidens_taxi ?????????????????????????????????????GTTATAGTTTCTT [100] Plagiomnium_cu TTTTGTACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTCTT [99] Micromonas_pus ????????????????????????????????????????AT-GTTTCTT [99] Mantoniel_squa ?????????????????????????????????????????????????? [100] Nephroselm_pyr ?????????????????????????????????????????????????? [100] Pedinomonas_mi ?????????????????????????????????????GAAATA-TTTCTT [99] Tetraselm_cart ????????????????????????????????????????ATAGTTTATT [100] Enteromorpha ????????????????????????????ATTAAATCAGTTAGAGTTTATT [100] Ulva_fasci ????????????????????????????????????????AGAGTTTATT [100] Ulothrix_zo ?????????????????????????????????????????????????? [100] Cympolia_barba ?????????????????????????????????????????????????? [100] Batophora_oers ?????????????????????????????????????????????????? [100] Codium_decort ?????????????????????????????????????????????????? [100] Cladophoro ?????????????????????????????????????????????????? [100] Blastophysa_rh ?????????????????????????????????????????????????? [100] Trentepohlia ???????CTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTC-ATT [99] Cephaleuro_par TTTA-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTT-ATT [93] Characium_vac TT-A-TACGGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Dunaliella_par TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Chlamyd_reinha TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Volvox_carteri TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Chlorococc_min TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Draparn_plum ?????????????????????????????????????????????????? [100] Uronema_belk ???????????????????????????????????????????GTTTATT [100] Chlamydom_moew ????????????????????????????ATTAAATCAGTTATAATTTATT [100] Stephanos_pl ?????????????????GCGAATGGCTCATTAAATCAGTTATAGTTTATT [100] Carteria_rad ?????????????????GCGAATGGCTCATTAAATCAGTTATAGTTTATT [100] Gonium_pecto ????????????????????????GCTCATTAAATCAG-TATAGTTTATT [99] Chlorella_kess TTTA-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [99] Chlorella_vulg TTTA-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [99] Protothec_wic TT-A-TACTATGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [96] Chlorella_prot TTTACTACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [99] Chlorella_min TTTA-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [99] Neochloris_aqu TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Neochloris_vig TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Pediastrum_dup TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Scenedesm_obl TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Characium_hin TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Chlorella_fus TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Ankistrodesmus TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Pseudotreb_gig ????????????????????????????????????????????????TT [100] Pleurastr_terr ??????????????????????????????????TCAGTTATAGTTTATT [100] Characium_per TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Parietochl_pse TT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [98] Friedmannia_is TTTA-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATT [99] [ 110 120 130 140 150] [ . . . . .] Glycine_max TGATGGTATC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [144] Oryza_sativa TGATGGTACG-TGCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [144] Zamia_pumila TGATGGTACTCTGCTACAC---GGATAACCGTAGTAA-TTCTAGAGCTAA [145] Psilotum_n TGATGGTACCTTGCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [146] Equisetum_ar TGATGGTACCTTGCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [146] Atrichum_angus T-ATGGTACCTTGCTACTC---GGATAACCGTAGTA--TTCTA-AGCTAA [143] Notothylas_bre ????????CCTT-CTACTC---GGATAAC-G-AGTAA-TTCTA-AGCTAA [142] Phaeoceros_lae ?GATGGTACCTTGCTACTC---GGATAACC--AGTAA-TTCTA-AGCTAA [143] Porella_pi TGATGGTACCTTGCTACTC---GGATAACC-TAGTAA-TTCTAGAGCTAA [145] Conocephal_con ?????????????????????????????????????????????????? [150] Asterella_tene TGATGGTGCCTT-CTACTC---GGATAACCG-AGTAA-TTCTAGAGCTAA [142] Riccia ?????????TTTACTACTC---GGATAACC-TAGTAA-TTCTAG-GCTAA [144] Klebsormid_fla ????????CCTTA-TACTC---GGATAACCGTAGTAAGTTCTA-AGCTAA [145] Coleochaet_nit TGATGGTAGCC---TACTC---GGATAACC-T-GTAA-TTCTAGAGCTAT [140] Fissidens_taxi T-ATGGTACCTTGCTACTC---GGATAACCGTAGTAA-TTCTA-AGCTAA [144] Plagiomnium_cu TGATGGTACCTTGCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [145] Micromonas_pus TGGTGGTGTTTTACTACAT---GGATAACCGTAGTAA-TTCT-G-GCTAA [143] Mantoniel_squa ???????????????????????????????????AA-TACATGCG-T-- [146] Nephroselm_pyr ????????CCTT-CT-CTC---GGAT?ACCGTAGTA---TCT-G-GCTAA [140] Pedinomonas_mi TGATGGTGAAAATCTACAC---GGATACCCGT-GTA--TTCT-GAGCTAA [142] Tetraselm_cart TGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [145] Enteromorpha TGATGGTACCACACTACTC---GGATAACCGTAGTAA-AGCTACAGCTAA [146] Ulva_fasci TGATGGTACCACACTACTC----GATAACCGTAGTAA-AGCTAC-GCTAA [144] Ulothrix_zo ???????????????????????GATAACCGTAGTAA-TTCTAGA-CTAA [148] Cympolia_barba ?????????????????????????????????????????????????? [150] Batophora_oers ?????????????????????????????????????????????????? [150] Codium_decort ?????????????????????????????????????????????????? [150] Cladophoro ?????????????????????????????????????????????????? [150] Blastophysa_rh ??????TAC-TTGCTACTT---GGATAACC--AGTAA-TTCAGAAGCTAA [143] Trentepohlia T-ATGGTGT-TT-CTACTC---GGATAACC--AGGAA-AACTAGAGCTAA [140] Cephaleuro_par TGATGGTG-TTTGTTACTC---GGATAACCGTAGGA----CTAGAGCTAA [135] Characium_vac TGATGGTACC-TCTTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [143] Dunaliella_par TGATGGTACCTT--TACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [142] Chlamyd_reinha TGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [143] Volvox_carteri TGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [143] Chlorococc_min TGATGGTACC-TATTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [143] Draparn_plum ????????????CTTACTC---GGATAACTGTAGTAA-TTCTA-AGCTAA [145] Uronema_belk TGATGATACCTT--TCCTC----GATAACCGT-GTA--TTCTAGAGCTAA [141] Chlamydom_moew TGATGGTAC-TTACTACTT---GGATAACCGTAGTAA-TTCTAGAGCTAA [145] Stephanos_pl TGATGGTACCTT--TACTC---GGATAACCGTAGTAA-TTCTAG-GCTAA [143] Carteria_rad TGATGGTAC-TTGGTACTC---GGATAACTGTACCAA-AG-TAGAGCTAA [144] Gonium_pecto TGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [144] Chlorella_kess TGATGGTACCTTACTAC-C---GGATAACCGTAGTAA-TTCTAGAGCTAA [144] Chlorella_vulg TGATGGTAC-TTACTACTC---GGATACCCGTAGTAA-ATCTAGAGCTAA [144] Protothec_wic TGATGGTACC-TACTACTC---GGATACCCGTAGTAA-TTCTAGAGCTAA [141] Chlorella_prot TGATGGTACC-TGCTACTG---GGATACCCGTAGTAA-TTCTAGAGCTAA [144] Chlorella_min TGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [144] Neochloris_aqu TGATGGTACC-TCCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [143] Neochloris_vig TGATGGTACC-TCCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [143] Pediastrum_dup TGATGGTACCTT-CTACTC---GGATACCCGTAGTAA-TTCTAGAGCTAA [143] Scenedesm_obl TGGTGGTACCTTACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [144] Characium_hin TGATGGTACCTT-CTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [143] Chlorella_fus TGGTGGTACCTTACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [144] Ankistrodesmus TGATGGTACC--TCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [142] Pseudotreb_gig TGATGGTGCCTTACT-CTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [145] Pleurastr_terr TGATGGTACACTACTACTC---GGATAACCGTAGTAA-TTCTAGGGCTAA [146] Characium_per TGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [143] Parietochl_pse TGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [143] Friedmannia_is TGATGGTACC--CTTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAA [143] [ 160 170 180 190 200] [ . . . . .] Glycine_max TACGTGCAACAAACCCCGACTTC--TGGAAGGGATGCATTTATTAGATAA [192] Oryza_sativa TACGTGCAACAAACCCCGACTTCC-GGG-AGGGGCGCATTTATTAGATAA [192] Zamia_pumila TACGTGCACCAAATCCCGACTTTT-TG-AAGGGACGCATCTATTAGATAA [193] Psilotum_n TACGTGCACCAACTCCCGACTTC--CGG-AGGGACGCATTTATTAGATAA [193] Equisetum_ar TACGTGCACCAACTCCCGACTTC--TGG--GGGA-GCATTTATTAGATAA [191] Atrichum_angus TACGTGCACAAACTCCCGACCTC--TGGAAGGG-CG-TTTTATTAGATAA [189] Notothylas_bre -ACGTGCAACAACTCCCGACTC---TGGAAGG-AG--ATTTATTAGATAA [185] Phaeoceros_lae T-CGTGCAACAACTCCCGGCTTT--TGG-AGGG-TGT-TTT-TTAG-TAA [185] Porella_pi TACGTGCACCAACTCCCGACTTC--TGGAAGGG-CGTATTTATTAGATAA [192] Conocephal_con ?ACGTGCACC-AGGCTCGAC----?TGGAAGGGG----TTTTTTAGATAA [191] Asterella_tene TACGTGCACCAACGCCCGACTTT-CCGGAAGGG--TGTTTTATTAGATAA [189] Riccia TACGTGCACCAACGCCCGACTTCG-CGGAAGGGCTGTATTTATTGGATAA [193] Klebsormid_fla TACGTGCACCAAATCCCGACTTC--TGGAAG?ACGTGATTTATTAGATAA [193] Coleochaet_nit ACCGTGC-CC--ATCC-GACTTC--TGGAAGG--GGTATTTGTTAGATAA [182] Fissidens_taxi TACGTGCACAAACTCC-GACTCG-?TGGA-GGGACG-ATTTATTAGATAA [190] Plagiomnium_cu TACGTGCACAAAATCCCGACTGG---G?AAGGGA??GATTTATTGGATAA [192] Micromonas_pus TACATGC-GTAAATCCCGACTTC---GGAAGGGACGTATTTATTAGAT-A [188] Mantoniel_squa -----------AATCCCGAC-TC---GG--GGG--GT-TTTATTAGAT-- [174] Nephroselm_pyr TACGTGC-GCAACACCCGACTTC---GGAAGGGTTGT-TATATTAGATAA [185] Pedinomonas_mi TACGT-C-GTAA---CTCCATT----GG-AGG-T----TTT-TT-G-TCC [174] Tetraselm_cart TACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATTT [192] Enteromorpha TACGTGC-GTAACTCCCGACYC---CG-AAGGGACGT-TTTATTAGATTC [190] Ulva_fasci TACGTGC-GTAACTCCCGACTTA--CG-AAGGGACG-ATTTATTAGATTC [189] Ulothrix_zo TACGTGT-GTAAATCCCGACT?A--CG-AAGGGACGTATTTATTA?ATCC [194] Cympolia_barba ?????????????????????????????????????????????????? [200] Batophora_oers ?????????????????????????????????????????????????? [200] Codium_decort ?????????????????????????????????????????????????? [200] Cladophoro ?????????????????????????????????????????????????? [200] Blastophysa_rh TACAT-C-GCGGATCCCAGACTTC-TGGAAGGGACGTATTTATTAGATAA [190] Trentepohlia TACGTGC-GTAAATCCCGACCTCC---GAAGGGACGTATTTATTAGATAA [186] Cephaleuro_par TACGTGC-GTAAATCCCGA--TC---GGAAGGGA-G-ATTTATTAGATAA [177] Characium_vac TACGTGC-GTAAATCCCGACTTA--TGGAAGGGACGTATTTATTAGATAA [190] Dunaliella_par TACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAA [189] Chlamyd_reinha TACGTGC-GCACAACCCGACTTC--TGGAAGGGTCGTATTTATTAGATAA [190] Volvox_carteri TACGTGC-GCACAACCCGACTTC--TGGAAGGGTCGTATTTATTAGATAA [190] Chlorococc_min TACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAA [190] Draparn_plum TACGTGCTTCAAGTCCCAACTTC--TGGAAGGG---TGGTTATAAGA-GT [189] Uronema_belk TACGTGC-GCAACTCCCGACTTC--TGG--GGGA-GTGTT-ATTAGATCT [184] Chlamydom_moew TACATGCGGATAATCCCAACTTC--TGGAAGGGACGTATTTATTAGATAA [193] Stephanos_pl TACGTGC-GTAAATCCCGACTTC--TGGAAGGGA-GTATTTATTAGATAA [189] Carteria_rad TACGTGC-GTAAATCCCGACTCA--C-GAAGGGACGTATTTATTAGATAA [190] Gonium_pecto TACGTGC-GCACAACCCGACTTC--TGGAAGGGTCGTATTTATTAGATAA [191] Chlorella_kess TACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATTT [191] Chlorella_vulg TACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAA [191] Protothec_wic TACGTGC-GCACATCCCGACTTC--TGGAAGGGACGTATTTATTAGATCC [188] Chlorella_prot TACCTGC-GCAAACCCCGACTTTGGTGGAAGGGGTGTATTTATTAGATCC [193] Chlorella_min TACGTGC-GCAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAT [191] Neochloris_aqu TACGTGC-GTAAAACCCGACTTC--TGGAAGGGTCGTATATATTAGATAA [190] Neochloris_vig TACGTGC-GTAAAACCCGACTTC--TGGAAGGGTCGTATATATTAGATAA [190] Pediastrum_dup TACGTGC-GTAAAACCCGACTTC--TGGAAGGGTCGTATATATTAGATAA [190] Scenedesm_obl TACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATATATTAGATAA [191] Characium_hin TACGTGC-GTAAAACCCGACTTC--TGGAAGGGTCGTATATATTAGATAA [190] Chlorella_fus TACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATATATTAGATAA [191] Ankistrodesmus TACGTGC-GCAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAA [189] Pseudotreb_gig TACGTGC-GCACATCCCGACTCC----GAAGGGA-G--TTTATTAGATAA [187] Pleurastr_terr TACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAA [193] Characium_per TACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAA [190] Parietochl_pse TACGTGC-GCACATCCCGACTTC--TGGAAGGGACGTATTTATTAGATTA [190] Friedmannia_is TACGTGC-GTAAACCCCGACTTC--TGGAAGGGGCGTATTTATTAGATAA [190] [ 210 220 230 240 250] [ . . . . .] Glycine_max AAGGTCAACACAGGC-TCTGCCTGTGCT-TTGATGATTCATGATAACTCG [240] Oryza_sativa AAGGCTGACGCGGGC-TCCGCCCGCGAT-CCGATGATTCATGATAACTCG [240] Zamia_pumila AAGGCCGATGCGGGC-TTTGCCCGGCGT-TTGGTGAATCATGATACCTTG [241] Psilotum_n AAGGCCGATGCGGGC-TT-GCCCGGTTATGC-GT-ATTCATGATAACTCT [239] Equisetum_ar AAGGCCGATGCGGGC-TGTGCCCGGTAA----CGGATTC--GATAACTTC [234] Atrichum_angus AAGGCCGATGC-GGC-TT-GCCCGGTAT-TCGGTGACTCA-GATAACTCG [234] Notothylas_bre AAG---GATG---GC-TT-GTCCCGTTT-A--CTGAATC-TGATAACTCC [223] Phaeoceros_lae AAG---GA-GCGG-C-TT-GTCCCGGTTTACGGTGAA-CW-GATAACTCC [226] Porella_pi AAGACCGATGCGGGC--T-GCCCGGTGTTGCGGTGAATCATGATAACTCG [239] Conocephal_con AAGACCGATGGGGGTGCT-GCC-GGTGATTC-GGGA-TC-TGATAACTCG [236] Asterella_tene AAGACCGATG---GC-TT-GCC-CGGTGATT-CGGAATCATGATAACTCG [232] Riccia AAGGCCGATG-GGGC-TTGCCCCGGTGTTT-CGTGAATCATGATAACTCG [240] Klebsormid_fla AAGGCCAATGCGGGC-TT--CCCGGTATTGCGGTGAATCATGATAACTCG [240] Coleochaet_nit AAGACCAAT----GC-TC-GCCCGGTGTT-CGGTGAATC--GATAACTCC [223] Fissidens_taxi AAGGC-GA-T-C-------GCC-GGTGTT---GCGAATCA-GATAAC?AG [225] Plagiomnium_cu AAGGCCGA-TGCGGGCT-TGCCCGGTTC-GCGG-GAC----GATAAC--G [232] Micromonas_pus AAGAC--AC----------CTC--GTCT-GCGGTGAATCATGATAACTTC [223] Mantoniel_squa AAGACC-AC----------CTCG-TTCT-GCGGTGAATCA-GAT-ACTT- [208] Nephroselm_pyr AAGACCGAC----CT-TCG-GCG-TTCT-TCGGTGAATCATGATATTTCC [227] Pedinomonas_mi -AACC-AGC-----C-TT-GGGG--TTT-TCTGTGAATC-TGATACTTTC [211] Tetraselm_cart AAG-CGG-C---AGC-TTT-C---GTC---CGGTGAA-CA-GATAACTTC [227] Enteromorpha -AGACCGAC-CGTGC-TTGCCGTCTTT----GGTGAATCATGGTAACTTC [233] Ulva_fasci AAGGCCGAC-TGC---TTGACGTCTTT----GGTGAATCATGGTAACTTC [231] Ulothrix_zo AAGAC?GAC-CGC---TTG-CACCTTT----GGTGAATCATA-TAACTTC [234] Cympolia_barba ?????????????????????????????????????????????????? [250] Batophora_oers ?????????????????????????????????????????????????? [250] Codium_decort ?????????????????????????????????????????????????? [250] Cladophoro ?????????????????????????????????????????????????? [250] Blastophysa_rh AAGGCYGAC-CGGGC-TT---CCCGAGTGCAGGTGACT-ATGATAGACAT [234] Trentepohlia GAGGCCGGAACGCGC-TTAGGCCCGCT--TCGGTGAATCATAATA-ACTT [232] Cephaleuro_par GAGGC-GAC-CGGGC-TT-GTCCCGCT--TCGGTGA-TC-TGATAACTCA [219] Characium_vac AAGGCCAGC-CGGGC-T-TGCCCGACCC-TAGGCGAATCATGATAACTTC [236] Dunaliella_par AAGGCCAGC-CGGGC-T-TGCCCGACTC-TTGGCGAATCATGATAACTTC [235] Chlamyd_reinha AAGGCCAGC-CGGGC-TCTGCCCGACCT-GCGGTGAATCATGATAACTTC [237] Volvox_carteri AAGGCCAGC-CGGGC-TTTGCCCGTTGA-ATGGTGAATCATGATAACTTC [237] Chlorococc_min AAGGCCAGC-CGGGC-T-TGCCCGACCT-ATGGCGAATCATGATAACTTC [236] Draparn_plum AAGGCCAA--ACGCT---CTCCCGATTT---GA-GAC-----ATAAGTCC [225] Uronema_belk -AGGC-A------GC----TCCCGACA----GGTGA-TCATG-TAACTCC [216] Chlamydom_moew AAGGCCAGC-CGTGC-T-TGCACGATCC-TGGTTGATTCATGATAACTTC [239] Stephanos_pl AAGGCCAGC-GAGGC-TTGCTCGACTCTT-GG-CGAATCATGATAACTTG [235] Carteria_rad AAGGCCAGC-CGGGC-T-TGCCCGACTTTT-GGCGACTCATGATAACTTC [236] Gonium_pecto AAGGCCAGC----GC-TTTGCCCGACT--GCGGTGAATCATGATAACTTC [234] Chlorella_kess AAGGCCGAC-CCGGC-TCTGCCGGTCTC-GCGGTGAATCATGATAACTTC [238] Chlorella_vulg AAGGCCGAC-CGGGCTTCTGCCCGACTC-GCGGTGAATCATGATAACTTC [239] Protothec_wic AAGGCCGAC-CGGGC-T-TGCCCGACTC-GCGGTGAATCATGATAACTTT [234] Chlorella_prot AAGGCCGAC-CGGGC-TC-GCCCGACTC-GCGGTGACTCATGATAACTTT [239] Chlorella_min AAGGCCGAC-CGGGC-TCTGCCCGACTC-GCGGTGAATCATGATAACTTC [238] Neochloris_aqu AAGACC-AG-CCGGAC-TTTGTCCGACCCGCGGTGACTCATGATATCTTC [237] Neochloris_vig AAGACC-AG-CCGGAC-TTTG????GCCCGCGGTGACTCATGATATCTTC [237] Pediastrum_dup AAGGCCGAGCCG??C-TTTGTCCGACCC-GCGGTGAATCATGATATCTTC [238] Scenedesm_obl AAGGCCGAC-CGAGC-TTTGCTCGACCC-GCGGTGAATCATGATATCTTC [238] Characium_hin AAGGCCGAC-CGGGC-TTGCCCGACCC--GCGGTGAATCATGATATCTTC [236] Chlorella_fus AAGGCCGAC-CGGGC-TT?GCCCGACCC-GCGGTGAATCATGATATCTTC [238] Ankistrodesmus AAGGCCGAC-CGGGC-TCTGCCCGACCC-GCGGTGAATCATGATAACTTC [236] Pseudotreb_gig AAGGC-GAG-CCGGG-GC--CCCGAGAC-GCGGTGAATCA-GATAAC--C [228] Pleurastr_terr AAGGCCGAC-CGGACTC-G-TCCGACCC-GCGGTGAA-CCTGATAACTTC [238] Characium_per AAGGCCGAC-CGGGC-T-TGCCCGACTC-GCGGTGAATCATGATAACTTC [236] Parietochl_pse AAGGCCGAC-CGGGC-TCTGCCCGACTC-GCGGTGACTCATGATAACTTC [237] Friedmannia_is AAGGCCGAC-CGGGC-TTTGCCCGACTC-GCGGTGAATCATGATAACTTC [237] [ 260 270 280 290 300] [ . . . . .] Glycine_max TCGGATCGCACGGCCTTTGTGCCGGCGACGCATCATTCAAATTTCTGCCC [290] Oryza_sativa ACGGATCGCACGGCCCTCGTGCCGGCGACGCATCATTCAAATTTCTGCCC [290] Zamia_pumila ATGGATTGCATGGCCCTCGAGCCGGCGACGCTTCATTCAAATTTCTGCCC [291] Psilotum_n GCGAATCGCACGGCC??????????????????????????????????? [289] Equisetum_ar CCGGATCGCACGGCCT????ACGGGTGA?????????????????????? [284] Atrichum_angus TCGAATCGCACGGCCTTA???????????????????????????????? [284] Notothylas_bre TCGAATCGCACGGCCCT????????????????????????????????? [273] Phaeoceros_lae TCGGATCGCACGGCCCT????????????????????????????????? [276] Porella_pi TCGAATCGCACGGCC??????????????????????????????????? [289] Conocephal_con ACGAATCGCACGGCC??????????????????????????????????? [286] Asterella_tene ACGAATCGCACGGCCT?????????????????????????????????? [282] Riccia ACGAATCGCACGGCCCCC???????????????????????????????? [290] Klebsormid_fla TCGAATCGCACGGCCTTTGCGCTG?????????????????????????? [290] Coleochaet_nit TCG?ATCGCACGGCCT?????????????????????????????????? [273] Fissidens_taxi TCGAATCGACCC?????????????????????????????????????? [275] Plagiomnium_cu TCGAATCGCA-GGCCG?????????????????????????????????? [281] Micromonas_pus -CGGATCGCATGGCTTCAA??????????????????????????????? [272] Mantoniel_squa -CGGATC-CATGGCTTCAA?GCCG?CGATGTTCCATTCAAATTTCTGCCC [256] Nephroselm_pyr ACGGATCGCAT--CTTCCC??????????????????????????????? [275] Pedinomonas_mi ?????????????????????????????????????????????????? [261] Tetraselm_cart ACGAATCGCATGGCCTCCGCGCCGGCGATGTTTCATTCAAATTTCTGCCC [277] Enteromorpha ACGAATCGCA-GG--TTTACCCCGG????????????????????????? [280] Ulva_fasci ACGAATCGCAGGG--TTTATC????????????????????????????? [279] Ulothrix_zo ACGAATCGCATGG-CCTTGTGC-GGC???????????????????????? [282] Cympolia_barba ?????????????????????????????????????????????????? [300] Batophora_oers ?????????????????????????????????????????????????? [300] Codium_decort ?????????????????????????????????????????????????? [300] Cladophoro ?????????????????????????????????????????????????? [300] Blastophysa_rh CACACGAATC???????????????????????????????????????? [284] Trentepohlia CAC--GAATCG---CTG-GTC---GAACYGA??????????????????? [273] Cephaleuro_par ACGA-TCG------CTG-GTCCGTGAACCGC??????????????????? [261] Characium_vac ACGAATCGCATGCCCTC-GTGGCGGCGATGTTTCATTCAAATTTCTGCCC [285] Dunaliella_par ACGAATCGCACGGC-TTCGTGCCGGCGATGTTTCATTCAAATTTCTGCCC [284] Chlamyd_reinha ACGAATCGTATGGGCTC-GTCCCGACGATGTTTCATTCAAATTTCTGCCC [286] Volvox_carteri ACGAATCGTATGGCCAC-GTGCCGACGATGTTTCATTCAAATTTCTGCCC [286] Chlorococc_min ACGGACCGCATGGCCTT-GTCGCGGCGGCGTTTCATTCAAATTTCTGCCC [285] Draparn_plum ACG-ATCGCA--GCCT--GGTGACGGGTGA???????????????????? [270] Uronema_belk ACGAATCGC--GGCC---GCGC???????????????????????????? [261] Chlamydom_moew ACGAATCGCATGGCCTT-GTGCCGGC???????????????????????? [288] Stephanos_pl ACGAATCGCATGGCCTG-GTAACGGGTGA????????????????????? [284] Carteria_rad ACGAATCGCATGGCCTG-GTAACGGGTGA????????????????????? [285] Gonium_pecto ACGAATCGTATGGCCTG-GTAACGGGTGA????????????????????? [283] Chlorella_kess ACGAATCGCATGGCCTT-GCGCCGGCGATGTTTCATTCAAATTTCTGCCC [287] Chlorella_vulg ACGAATCGCATGGCCTT-GTGCCGGCGATGTTTCATTCAAATTTCTGCCC [288] Protothec_wic ACGAATCGCATGGCCTTTGTGCCGGCGATGTTTCATTCAAATTTCTGCCC [284] Chlorella_prot ACGAATCGCATGGTCTCTGCACCGGCGATGTTTCATTCAAATTTCTGCCC [289] Chlorella_min ACGAATCGCATGGCCTC-GTGCCGGCGATGTTTCATTCAAATTTCTGCCC [287] Neochloris_aqu ACGAATCGCATGGCCTT-GTGCACGGCATGTTTCATTCAAATTTCTGCCC [286] Neochloris_vig ACGAATCGCATGGCCTT-GTG????CGATGTTTCATTCAAATTTCTGCCC [286] Pediastrum_dup ACGAATCGCATGGCCTT-GCGCCGGCGATGTTTCATTCAAATTTCTGCCC [287] Scenedesm_obl ACGAAGCGCATGGCCTT-GTGCCGGCGCTGTTCCATTCAAATTTCTGCCC [287] Characium_hin ACGAATCGCATAGCCTT-GTGCTAGCGA-GTTTCATTCAAATTTCTGCCC [284] Chlorella_fus ACGAAGCGCATGGCCTT-GCGCCGGCGCTGTTCCATTCAAATTTCTGCCC [287] Ankistrodesmus ACGAATCGCATAGCCTC-GTGCTGGCGATGTTTCATTCAAATTTCTGCCC [285] Pseudotreb_gig ACGAATCG--TAGCCTT-GTGCCGC????????????????????????? [275] Pleurastr_terr ACGAATCGCATGGCCTT-GC-CC??????????????????????????? [286] Characium_per ACGAATCGCACAGCCTT-GTGCTGGCGATGTTTCATTCAAATTTCTGCCC [285] Parietochl_pse ACGAATCGCAT-GCCTTCGTGCCGGCGATGTTTCATTCAAATTTCTGCCC [286] Friedmannia_is ACGAATCGCATGGCCTT-GTGCCGGCGATGTTTCATTCAAATTTCTGCCC [286] [ 310 320 330 340 350] [ . . . . .] Glycine_max TATCAACTTTCGATGGTAGGATAGTGGCCTACCATGGTGGTGACGGGTGA [340] Oryza_sativa TATCAACTTTCGATGGTAGGATAGGGGCCTACCATGGTGGTGACGGGTGA [340] Zamia_pumila TATCAACTTTCGATGGCAGGATAGAGGCCTACCATGGTGGTGACGGGTGA [341] Psilotum_n ?????????????????????????????????????TGGTGACGGGTGA [339] Equisetum_ar ?????????????????????????????????????????????????? [334] Atrichum_angus ?????????????????????????????????????????????????? [334] Notothylas_bre ?????????????????????????????????????????????????? [323] Phaeoceros_lae ?????????????????????????????????????????????????A [326] Porella_pi ?????????????????????????????????????????????????? [339] Conocephal_con ?????????????????????????????????????????????????? [336] Asterella_tene ?????????????????????????????????????????????????? [332] Riccia ?????????????????????????????????????????????????? [340] Klebsormid_fla ????????????????????????????????????????TAACGGGTGA [340] Coleochaet_nit ?????????????????????????????????????????????????? [323] Fissidens_taxi ????????????????????????????????????????TGACGGGTGA [325] Plagiomnium_cu ?????????????????????????????????????????????????? [331] Micromonas_pus ?????????????????????????????????????????????????? [322] Mantoniel_squa TATCAACTTTCGACGGTAGGATAGAGGCCTACCGTGGTGTTCACGGGTGA [306] Nephroselm_pyr ?????????????????????????????????????????????????? [325] Pedinomonas_mi ????????????????????????????????????????????CGGTGA [311] Tetraselm_cart TATCAATTTGCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [327] Enteromorpha ?????????????????????????????????????????????????? [330] Ulva_fasci ?????????????????????????????????????????????????? [329] Ulothrix_zo ?????????????????????????????????????????????????? [332] Cympolia_barba ?????????????????????????????????????????????????? [350] Batophora_oers ?????????????????????????????????????????????????? [350] Codium_decort ?????????????????????????????????????????????????? [350] Cladophoro ???????????????????????TTGGACTAC-A-CCT-T--ACG-GTAG [344] Blastophysa_rh ?????????????????????????GGCCTACCACGGTATCGACGGGTGA [334] Trentepohlia ?????????????????????????????????????????????????? [323] Cephaleuro_par ?????????????????????????????????????????????????? [311] Characium_vac TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [335] Dunaliella_par TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [334] Chlamyd_reinha TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [336] Volvox_carteri TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [336] Chlorococc_min TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [335] Draparn_plum ?????????????????????????????????????????????????? [320] Uronema_belk ?????????????????????????????????????????????????? [311] Chlamydom_moew ??????????????????????????????????????????ACGGCTGA [338] Stephanos_pl ?????????????????????????????????????????????????? [334] Carteria_rad ?????????????????????????????????????????????????? [335] Gonium_pecto ?????????????????????????????????????????????????? [333] Chlorella_kess TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [337] Chlorella_vulg TATCAACTTTTGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [338] Protothec_wic TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [334] Chlorella_prot TATCAACTTT-GTCGGTAGGATAGAGGCCTACCGAGGTGTTCACGGGTGA [338] Chlorella_min TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [337] Neochloris_aqu TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [336] Neochloris_vig TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [336] Pediastrum_dup TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [337] Scenedesm_obl TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [337] Characium_hin TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [334] Chlorella_fus TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [337] Ankistrodesmus TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [335] Pseudotreb_gig ?????????????????????????????????????????????????? [325] Pleurastr_terr ?????????????????????????????????????????????????? [336] Characium_per TATCAACTTTCGATGGTAACGTAGTGGGTTACCATGGTGGTAACGGGTGA [335] Parietochl_pse TATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGA [336] Friedmannia_is TATCAACTTTCGATGGTTGGATAGAGGCCAACCATGGTGGTAACGGGTGA [336] [ 360 370 380 390 400] [ . . . . .] Glycine_max CGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [390] Oryza_sativa CGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [390] Zamia_pumila CGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCCGAGAAACGGCTACCA [391] Psilotum_n CGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [389] Equisetum_ar CGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [384] Atrichum_angus ???AGAATT----TTCGATTCCGGA-AGGGAGCCTGAGAA-CGGCTACCA [378] Notothylas_bre ????????????GTTCGATTCCGGAGAGGGA--C-GAGAAACGGCTACCA [370] Phaeoceros_lae CGGA-AATTAGGGTTCGATTCCGGA-A-GGAGCCTGAGAAACGGCTACCA [373] Porella_pi ??????????????????????????????????????AAACGGCTACCA [389] Conocephal_con ?????????????????????????????GAGCCTGAGAAACAGCTACCA [386] Asterella_tene ??????????????????????????AGGGAGCCTGAG?AACGGCTACCA [382] Riccia ?????????????????????????????????????????????????? [390] Klebsormid_fla CGGAGAATT?GGGTTCGATTCCGGAGA?GGAGCCTGAGAAACGGCTACCA [390] Coleochaet_nit ??????????????????????GGAGAGGGAGCCTGAGAAACGGCTACCA [373] Fissidens_taxi CGGA?AATTAGGGTTCGATTCCG-A-A-GGAGCCTGAG---CGGCTACCA [369] Plagiomnium_cu ???????????????????????GA-A-GGAGCCT-AG---CGGCTACCA [375] Micromonas_pus ?????????????????????????????????????????????????? [372] Mantoniel_squa CGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [356] Nephroselm_pyr ?????????????????????????????????????????CGGCTACCA [375] Pedinomonas_mi CG??GAATT?GGGTTCGTTCCGG--GAGGGAGCCTGAGAAACGGCTACC- [358] Tetraselm_cart CGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [377] Enteromorpha ??????ATTAGG?TTCGATTCCGGA?AGGGAGCCT?AGG--CGGCTACCA [378] Ulva_fasci ????GGATTAGGGTTCGATTCCGGAGA--GAGCCTGAG---CGGCTACCA [374] Ulothrix_zo ?GGAGTATTAGT?TTCTTTTCCGGAGA--CA-CCTGAG---C-GCTACCA [375] Cympolia_barba ???????TATGGGTTTGATTCCGGAGAGGGAGCTTGAGA-CTGGCTACCA [399] Batophora_oers ?GGAGGTTGAGGGTTTGATTCCGGATT-GGA-CCTGAGA--CGGC--CC- [393] Codium_decort ??????ATC-GGGTTTGGTTCCGGAGA--GAGCCTGAGGC-CGGCTACCA [396] Cladophoro CGGAGGATTAGGGTTCGGATTCCGGAGGGGAGCCTG-GA--CGGCTACCA [391] Blastophysa_rh CGGAGGATTAGGGTTCGATTCCGGAGGGGGAGCCTGAGA-ACGGCTACCA [383] Trentepohlia ?????????????????????????????????????????????????? [373] Cephaleuro_par ???????????????????????????GGGAGCCTGAGAAACGGCTACCA [361] Characium_vac CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [385] Dunaliella_par CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [384] Chlamyd_reinha CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAGATGGCTACCA [386] Volvox_carteri CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAGATGGCTACCA [386] Chlorococc_min CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [385] Draparn_plum CGGAGGATTAGGGTTCGGTTCCGGA-AGGGAGCCTGAGAAATGGCTACCA [369] Uronema_belk ?????????????TTCGATTCCGGAGA--GAGCCTGAGGAACGGCTACCA [359] Chlamydom_moew C----AATCAGGGTTCGATTCCGG-GAGGGAGCCT-AG---CGGCT-CCA [378] Stephanos_pl CGG-GGATTAGGGTTCGATTCCGG-GAGGGAGCCTGAGAAACGGCTACCA [382] Carteria_rad CGGAGGATTAGGGTTCGATTCCGGAGA-GGAGCCTGAGAGATGGCTACCA [384] Gonium_pecto CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAGATGGCTACCA [383] Chlorella_kess CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [387] Chlorella_vulg CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [388] Protothec_wic CGGAGGATCAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [384] Chlorella_prot CGGAGGATCAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [388] Chlorella_min CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [387] Neochloris_aqu CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [386] Neochloris_vig CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [386] Pediastrum_dup CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [387] Scenedesm_obl CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [387] Characium_hin CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [384] Chlorella_fus CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [387] Ankistrodesmus CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [385] Pseudotreb_gig ????GGATTAGGGTTCG?TTCCGGAGAGGGAGCCTGAG---CGGCT-CCA [371] Pleurastr_terr ??????ATTAGGGTTCGATTCCGG-GAGGGAGCCTGAG---CGGCTACCA [382] Characium_per CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [385] Parietochl_pse CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA [386] Friedmannia_is CGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAGACGGCTACCA [386] [ 410 420 430 440 450] [ . . . . .] Glycine_max -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGG [438] Oryza_sativa -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGG [438] Zamia_pumila -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGG [439] Psilotum_n -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCC-GAC-CGGG [435] Equisetum_ar -CATCCAAGGAAGGCAGCGGGCGCGCAAATTACCC-AATCC-GACACGGG [431] Atrichum_angus -CATCCA---AAGGCAG-?-??-?-?--ATT-CCC-AATCC-GAC--GGG [413] Notothylas_bre -CATCC--?--AGGCAG---????----ATTACCC-AATCC-GA---GGG [403] Phaeoceros_lae -CATCC-AG-AAGGCA-CA--CGCGC--ATTACCC-AATCC-GAC-CGGG [412] Porella_pi -CATCCAAGG-AGGCAGCCGG-GCG---ATTACCC-AATACCGACACAGG [432] Conocephal_con -CATCCAAGGA-GGCAGCAGGCGCG---ATTACCC-AATCCCGACACGGG [430] Asterella_tene -CATCC-AG-AAGGCAG-A---GC-C--ATTACCC-AATCC-GAC----- [415] Riccia ???????????????????????CGCAAATTACCC-A-TCC-GAC----- [432] Klebsormid_fla -CATCCAAGGAAGGCAGCAGGCGCGC--ATT-CCC-AATCCTG-T-CAGG [433] Coleochaet_nit -CATCCAAGGA?GGCAG--GGCGCG--GATTACCC-AATCCTGATACAGG [417] Fissidens_taxi -CATCC--GGAAGGCAGC--GCGCGC--ATTACCC-AATCC-GA---GGG [407] Plagiomnium_cu -CATCC-AGGAAGGC--C----------ATTACCC-AACTCCGA---GGG [407] Micromonas_pus ?????????????????????????????????????????????????? [422] Mantoniel_squa -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGG [404] Nephroselm_pyr -CATCCAA--AAGGC-GC--GCGCGC--ATTA-CC-AATCCTGAC-CAGG [414] Pedinomonas_mi -CATC-AAGGAAGGC-GCGGGCGCGC--ATTACCC-AATCC-GAGA--GG [399] Tetraselm_cart -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGG [425] Enteromorpha GCATCCGAGGAAGGCAGC-GGCGCGCAAATTACCC-AATCCTG--GCAGG [424] Ulva_fasci -CATCC-A--AAGGCAGCA-GCGCGCAAATTACCC-AATCCTGA---AGG [415] Ulothrix_zo --ATCC-GGAACGGCAG--GGCGC----AT--CCC-CTTCCT-----AG- [407] Cympolia_barba -CATCCAAGG-AGGCAGC-GGCGCGAAAATTACCC-AATCTAGATATTGT [445] Batophora_oers --YTTCC-GG--GGC-GC-GGCGC----ATY-CCC-AATC--GACATTGT [428] Codium_decort --CATCC-GGAAGGC-GC--GCGCGC-AATTACCC-AATCCCC--CGGGT [436] Cladophoro -CATCC-AGG-AGGCAGCAGGCGCGC--ATTACCC-AATCC-AAC--AGG [432] Blastophysa_rh -CAACCAAGGTAGG-AGCAGGCGCG---ATTACCC-AATCCTGAC-CGGG [426] Trentepohlia ?????????????????????????????????????????????????? [423] Cephaleuro_par -CATCCAAGGAA-GCAGCAGGCGCGC--ATTACCCAAATCCCAAGGT--G [405] Characium_vac -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCCGACACGGG [433] Dunaliella_par -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCCAACACGGG [432] Chlamyd_reinha -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCCGACACGGG [434] Volvox_carteri -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCCGACACGGG [434] Chlorococc_min -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCCGACACGGG [433] Draparn_plum -CATCCAAGGAAGGCAGC-GGCGCGC-AATTACCC-AATCCTGACA--GG [413] Uronema_belk -CATCC--GGAAGGC-GC---CGCGC--ATTACCC-AATCC-GA---GGG [395] Chlamydom_moew --ATCC--GGAAGGC-GC-?-CGCGT-AATTACCC-AATCC------GGG [413] Stephanos_pl -CATCC-AGGAAGGCAGCAGGCGCGC--ATTACCC-AATCCGAA---GGG [424] Carteria_rad -CATCCAAGGAAGGCAGCA-GCGCGC--ATTACCC-AATCCTAAC-CGGG [428] Gonium_pecto -CATC--AGGAAGGC----GGCGCGC--ATTACCC-AATCCGAC---GGG [420] Chlorella_kess -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGG [435] Chlorella_vulg -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGG [436] Protothec_wic -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGG [432] Chlorella_prot -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGG [436] Chlorella_min -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGG [435] Neochloris_aqu -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGG [434] Neochloris_vig -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGG [434] Pediastrum_dup -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGATACGGG [435] Scenedesm_obl -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGATACGGG [435] Characium_hin -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGG [432] Chlorella_fus -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGATACGGG [435] Ankistrodesmus -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGATACGGG [433] Pseudotreb_gig -CATC---GGAAGGCAGC--GCGC-C--ATTACCC-AATCCTG-T-CAGG [409] Pleurastr_terr -CATCCA-GGAAGGCAGC--GCGCGC--ATTACCC-AATCCTGA---GGG [422] Characium_per -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATACTGACACAGT [433] Parietochl_pse -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGG [434] Friedmannia_is -CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGG [434] [ 460 470 480 490 500] [ . . . . .] Glycine_max GAGGTAGTGACAATAAATAACAATACCGGGCTC-ATTGAGTCTGGTAATT [487] Oryza_sativa GAGGTAGTGACAATAAATAACAATACCGGGCGCTTTAGTGTCTGGTAATT [488] Zamia_pumila GAGGTAGTGACAATAAATAACAATACTGGGCTCATC-GAGTCTGGTAATT [488] Psilotum_n GAGGTAGTGACAATAAATAA-AATACTGGGCTTTTCAAAGTCTGGTAATT [484] Equisetum_ar GAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATT [481] Atrichum_angus GAGGTAGT-ACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATT [462] Notothylas_bre GAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATT [453] Phaeoceros_lae GAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATT [462] Porella_pi ?AGGTAGTGACAATAAATAACAATACTGGGCTTTACCAAGTCTGGTAATT [482] Conocephal_con G-GGT-GTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATT [478] Asterella_tene GAGG-AGTGACAATAAATAACAATACTGGGCT-TTACAAGTCTGGTAATT [463] Riccia GA--TAGTGACAATAAATAACAATAGTGGGCT-TTACAA-TC--GTAATT [476] Klebsormid_fla GAGGTAGTGAC-ATAAATAACAATGCTGGGCTTTTCAAAGTCTGGCAATT [482] Coleochaet_nit GAGGTAG--ACAATAAATAACA-TACTGGGCTTTTA-AAGTCTGGT?ATT [463] Fissidens_taxi GAGGTAGT-ACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATT [456] Plagiomnium_cu GAGGTAGTGACAATAAATAACAATACTGGGC--TTACGGGCCCG---ATT [452] Micromonas_pus ?????????????????????????????????????????????????? [472] Mantoniel_squa GAGGTAGTGACAATAAATAACAATATCGGGGTTTTTCAA??????????? [454] Nephroselm_pyr GAGGTAGTGAC-ATAAATAACAATACCGGGCTTTTTCAAGTCTGGTAATT [463] Pedinomonas_mi GAGG-AGTGGACAGAAATATCGTGACTGTGCCCTTGTGGCAGAGTCTTCG [448] Tetraselm_cart GAGGTAGTGACAATAAATAACAATACCGGGCTTTT-CAA??????????? [474] Enteromorpha GAGGTAGTGACAATAAATATCA-TTCTGGGC-CACTTG-GTCCGGTAATT [471] Ulva_fasci GAGGTA-TGACAATAAATATCAATTCTGGGC-CACAT--GTCCGGTAATT [461] Ulothrix_zo -AGAT-GTGACAATA-AT-AC-ATACTGC-C-CA---G-GTCYGGT?ATT [446] Cympolia_barba GAGGTAGTGACAATAAATAACAATGTTGGACTTGTAAA-GTTTGGTAATT [494] Batophora_oers GAG-T-GTG-CGACAAATAACAATGCCGGGC-TTATCAAGTTTGGTAATT [474] Codium_decort GAGGT-GTGACGAGACATAACAACGACGTGC-TCAACGAGTGGG-TCGAT [483] Cladophoro GAGGT-GTG-C--GAAATAGCAAT--CGAGCATTT---CTCTG--CAATT [471] Blastophysa_rh GAGGTAGTGACAATAAATAACAGTATCTGGC-TCT-CAGTCCG-ATGCTT [473] Trentepohlia ?????????????????????????????????????????????????? [473] Cephaleuro_par GAGGTGGTGG???GAAATAACGATGCTCCGGCCTCTG-GTCGGG?TAATC [454] Characium_vac GAGGTAGTGACAATAAATAACAATACTGGGCATTT--ATGTCTGGTAATT [481] Dunaliella_par GAGGTAGTGACAATAAATAACAATACCGGGCATTT--TTGTCTGGTAATT [480] Chlamyd_reinha GAGGTAGTGACAATAAATAACAATACCGGGCGCTTC-GCGTCTGGTAATT [483] Volvox_carteri GAGGTAGTGACAATAAATAACAATACCGGGCGCTTA-GCGTCTGGTAATT [483] Chlorococc_min GAGGTAGTGACAATAAATAACAATGCGGGGCCTA---TGGTCTTGCAATT [480] Draparn_plum GAGGTAGT-ACAATAAATAACAATACCGGGCATTAA-ATGTCTGGTAATT [461] Uronema_belk G-GG--GTGACAATAAATAACAATACCGGGCATTT--ATGTCTGGT--TT [438] Chlamydom_moew GAGGT--TGACAATAAATAACAATA-TCGGGCATCCAATGTCTGATAATT [460] Stephanos_pl GAGGTAGTGA-AAT-AATAACAATACCGGGCATTT--ATGTCTGGTAATT [470] Carteria_rad GAGGTAGTGACAATAAATAACAATACTGGGCATTT--TTGTCTGGTAATT [476] Gonium_pecto GAGGTAGTGACAATAAATAACAATACCGG--TC----GCGTCTGGTAATT [464] Chlorella_kess GAGGTAGTGACAATAAATAACAATACCGGGCCTTTTCAGGTCTGGTAATT [485] Chlorella_vulg GAGGTAGTGACAATAAATAACAATACTGGGCCTTTTCAGGTCTGGTAATT [486] Protothec_wic GAGGTAGTGACAATAAATAACAATACCGGGCCT-CACAGGTCTGGTAATT [481] Chlorella_prot GAGGTAGTGACAATAAATAACAATACCGGGCCT-CACAGGTCTGGTAATT [485] Chlorella_min GAGGTAGTGACAATAAATAACAATACCGGGCCT-TTCAGGTCTGGTAATT [484] Neochloris_aqu GAGGTAGTGACAATAAATAACAATACCGGGCACATC-GTGTCTGGTAATT [483] Neochloris_vig GAGGTAGTGACAATAAATAACAATACCGGGCACATC-GTGTCTGGTAATT [483] Pediastrum_dup GAGGTAGTGACAATAAATAACAATACTGGGCACTTC-GTGTCTGGTAATT [484] Scenedesm_obl GAGGTAGTGACAATAAATAACAATACCGGGCATTTT-ATGTCTGGTAATT [484] Characium_hin GAGGTAGTGACAATAAATAACAATACCGGGCACATC-GTGTCTGGTAATT [481] Chlorella_fus GAGGTAGTGACAATAAATAACAATACCGGGCATTTC-ATGTCTGGTAATT [484] Ankistrodesmus GAGGTAGTGACAATAAATAACAATACCGGGCWTTCA-ATGTCTGGTAATT [482] Pseudotreb_gig GAGGTA-TGACAATAAATAACAATACCGGGCTTTTTCAAGTCTGGTAATT [458] Pleurastr_terr GAGGTAGTGACAATAAATAACAATACCGGGCATTTA-ATGTCTGGTAATT [471] Characium_per GAGGTAGTGACAAAAAATATCGATGGTGGGCTCTTTCGAGTTTGCCAATT [483] Parietochl_pse GAGGTAGTGACAATAAATAACTATGCTTGGCTC-TTCGAGTCGGGCAATA [483] Friedmannia_is GAGGTAGTGACAATAAATAACAATACCGGGCTTTTTCAAGTCTGGTAATT [484] [ 510 520 530 540 550] [ . . . . .] Glycine_max GGAATGAGTACAATCTAAATCCCTTAACGATGGATCCATTGAAGGGCAAG [537] Oryza_sativa GGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAG [537] Zamia_pumila GGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAG [537] Psilotum_n GGAATGAGTACAATCTAAACCC???????????????????????????? [534] Equisetum_ar GGAATGAGTACAATCTAAATCC???????????????????????????? [531] Atrichum_angus GGAATGAGTACAATCTAAATCCCTTAA--A???????????????????? [510] Notothylas_bre GGAATGAGTACAATCTAAATCCCTTAA--A???????????????????? [501] Phaeoceros_lae GGAATGA-TACAATCTAAATCCCTTAAC?????????????????????? [511] Porella_pi GGAATGAGTACAATCTAAATCC???????????????????????????? [532] Conocephal_con GGAATGAGAACAATCTAAATC????????????????????????????? [528] Asterella_tene GGAATGAGTACAATCTAAATCCC??????????????????????????? [513] Riccia GGAA--AGTACAATCTAAATCCCTTA???????????????????????? [524] Klebsormid_fla GGAATG???????????????????????????????????????????? [532] Coleochaet_nit GGAATGAGTACAATCTAAATCTC??????????????????????????? [513] Fissidens_taxi GGAATGAGTACAATCTAAATCCCTTAA--A???????????????????? [504] Plagiomnium_cu GG--TGAGTA?AATCT-AATCCCTTAA??????????????????????? [499] Micromonas_pus ?????????????????????????????????????????????????? [522] Mantoniel_squa ?????????????????????????????????????????????????? [504] Nephroselm_pyr GGAATG???????????????????????????????????????????? [513] Pedinomonas_mi ?????????????????????????????????????????????????? [498] Tetraselm_cart ?????????????????????????????????????????????????? [524] Enteromorpha GGAATG???????????????????????????????????????????? [521] Ulva_fasci GGAAT?AGTACAATGTAAA?CCCT-AAC-A???????????????????? [509] Ulothrix_zo GGAATGAGTACAATCTAAATCCCTTA???????????????????????? [496] Cympolia_barba GTAATG------GAGTAA-TCC-TTGAAC????????????????????? [536] Batophora_oers GGAATGAGT--AACGTAAAYGCCTTA???????????????????????? [522] Codium_decort GG--TG-GA--AACTTAAAATCCC-CA??????????????????????? [527] Cladophoro GAAATGAGAA-AATTTAAACCACTTAAC-A---ATC?????????????? [516] Blastophysa_rh GGAAT-A-TA-AATCTAAATCCCTTAAC-A???????????????????? [519] Trentepohlia ?????????????????????????????????????????????????? [523] Cephaleuro_par GGAATGAGAA--ATTTA??TCCCTTA???????????????????????? [502] Characium_vac GGAATGAGTACAATGTAAATATCTTAACGA-GTATCCATTGGAGGGCAAG [530] Dunaliella_par GGAATGAGTACAATCTAAATCCCTTAACGA-GTATCCATTGGAGGGCAAG [529] Chlamyd_reinha GGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAG [532] Volvox_carteri GGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAG [532] Chlorococc_min GGAATGAGAACAATGTAAATATCTTAACGA-GTATCCATTGGAGGGCAAG [529] Draparn_plum GGA??GA?TAC?ATCTAAATCC???????????????????????????? [511] Uronema_belk GGAATGAGTACAATCTAA??CCCTTAA??????????????????????? [488] Chlamydom_moew GGAATG???????????????????????????????????????????? [510] Stephanos_pl GGA-TGAGTACAATGTAAATAT???????????????????????????? [519] Carteria_rad GGAATGAGTACAATCTAAATCC???????????????????????????? [526] Gonium_pecto GGA?TGAGT?CAATCTAAATCC???????????????????????????? [514] Chlorella_kess GGAATGAGTACAATCTAAACCCCTTAACGA-GGATCAATTGGAGGGCAAG [534] Chlorella_vulg GGAATGAGTACAATCTAAACCCCTTAACGA-GGATCAATTGGAGGGCAAG [535] Protothec_wic GGAATGAGTACAACCTAAACACCTTAACGA-GGATCAATTGGAGGGCAAG [530] Chlorella_prot GGAATGAGTACAATCTAAACCCCTTAACGA-GGATCAATTGGAGGGCAAG [534] Chlorella_min GGAATGAGTACAATCTAAACCCCTTAACGA-GGATCAATTGGAGGGCAAG [533] Neochloris_aqu GGAATGAGTACAATCTAAATCCCTTAACGA-GTATCCATTGGAGGGCAAG [532] Neochloris_vig GGAATGAGTACAATCTAAATCCCTTAACGA-GTATCCATTGGAGGGCAAG [532] Pediastrum_dup GGAATGAGTACAATCTAAATCCCTTAACGA-GTATCCATTGGAGGGCAAG [533] Scenedesm_obl GGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAG [533] Characium_hin GGAATGAGTACAATCTAAATCCCTTAACGA-GTATCAATTGGAGGGCAAG [530] Chlorella_fus GGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAG [533] Ankistrodesmus GGAATGAGTACAATTTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAG [531] Pseudotreb_gig GGAT?????????????????????????????????????????????? [508] Pleurastr_terr GGAATG???????????????????????????????????????????? [521] Characium_per GGAATGAGTACAATCTAAATCCCTTAACGA-GGATCAATTGGAGGGCAAG [532] Parietochl_pse GGAATGAGTACAATCTAAATCCCTTAACGA-GGATCAATTGGAGGGCAAG [532] Friedmannia_is GGAATGAGTACAATCTAAATCCCTTAACGA-GGATCAATTGGAGGGCAAG [533] [ 560 570 580 590 600] [ . . . . .] Glycine_max TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [587] Oryza_sativa TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [587] Zamia_pumila TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [587] Psilotum_n ?????????????????????????????????????????????????? [584] Equisetum_ar ?????????????????????????????????????????????????? [581] Atrichum_angus ?????????????????????????????????????????????????? [560] Notothylas_bre ?????????????????????????????????????????????????? [551] Phaeoceros_lae ?????????????????????????????????????????????????? [561] Porella_pi ?????????????????????????????????????????????????? [582] Conocephal_con ?????????????????????????????????????????????????? [578] Asterella_tene ?????????????????????????????????????????????????? [563] Riccia ?????????????????????????????????????????????????? [574] Klebsormid_fla ?????????????????????????????????????????????????? [582] Coleochaet_nit ?????????????????????????????????????????????????? [563] Fissidens_taxi ?????????????????????????????????????????????????? [554] Plagiomnium_cu ?????????????????????????????????????????????????? [549] Micromonas_pus ?????????????????????????????????????????????????? [572] Mantoniel_squa ?????????????????????????????????????????????????? [554] Nephroselm_pyr ?????????????????????????????????????????????????? [563] Pedinomonas_mi ?????????????????????????????????????????????????? [548] Tetraselm_cart ?????????????????????????????????????????????????? [574] Enteromorpha ?????????????????????????????????????????????????? [571] Ulva_fasci ?????????????????????????????????????????????????? [559] Ulothrix_zo ?????????????????????????????????????????????????? [546] Cympolia_barba ?????????????????????????????????????????????????? [586] Batophora_oers ?????????????????????????????????????????????????? [572] Codium_decort ?????????????????????????????????????????????????? [577] Cladophoro ?????????????????????????????????????????????????? [566] Blastophysa_rh ?????????????????????????????????????????????????? [569] Trentepohlia ?????????????????????????????????????????????????? [573] Cephaleuro_par ?????????????????????????????????????????????????? [552] Characium_vac TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [580] Dunaliella_par TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [579] Chlamyd_reinha TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [582] Volvox_carteri TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [582] Chlorococc_min TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [579] Draparn_plum ?????????????????????????????????????????????????? [561] Uronema_belk ?????????????????????????????????????????????????? [538] Chlamydom_moew ?????????????????????????????????????????????????? [560] Stephanos_pl ?????????????????????????????????????????????????? [569] Carteria_rad ?????????????????????????????????????????????????? [576] Gonium_pecto ?????????????????????????????????????????????????? [564] Chlorella_kess TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [584] Chlorella_vulg TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [585] Protothec_wic TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [580] Chlorella_prot TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [584] Chlorella_min TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [583] Neochloris_aqu TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [582] Neochloris_vig TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [582] Pediastrum_dup TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [583] Scenedesm_obl TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [583] Characium_hin TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [580] Chlorella_fus TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [583] Ankistrodesmus TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [581] Pseudotreb_gig ?????????????????????????????????????????????????? [558] Pleurastr_terr ?????????????????????????????????????????????????? [571] Characium_per TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [582] Parietochl_pse TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [582] Friedmannia_is TCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAG [583] [ 610 620 630 640 650] [ . . . . .] Glycine_max TTGTTGCAGTTAAAAAGCTCGTAGTTGGACCTTGGGTTGGGTCGATC-GG [636] Oryza_sativa TTGTTGCAGTTAAAAAGCTCGTAGTTGGACCTTGGGCGCGGCCGGGCCGG [637] Zamia_pumila TTGTTGCAGTTAAAAAGCTCGTAGTTGGATCTTGGGACGGCCCGGCC-GG [636] Psilotum_n ?????????????????????????????????????????????????? [634] Equisetum_ar ?????????????????????????????????????????????????? [631] Atrichum_angus ?????????????????????????????????????????????????? [610] Notothylas_bre ?????????????????????????????????????????????????? [601] Phaeoceros_lae ?????????????????????????????????????????????????? [611] Porella_pi ?????????????????????????????????????????????????? [632] Conocephal_con ?????????????????????????????????????????????????? [628] Asterella_tene ?????????????????????????????????????????????????? [613] Riccia ?????????????????????????????????????????????????? [624] Klebsormid_fla ?????????????????????????????????????????????????? [632] Coleochaet_nit ?????????????????????????????????????????????????? [613] Fissidens_taxi ?????????????????????????????????????????????????? [604] Plagiomnium_cu ?????????????????????????????????????????????????? [599] Micromonas_pus ?????????????????????????????????????????????????? [622] Mantoniel_squa ?????????????????????????????????????????????????? [604] Nephroselm_pyr ?????????????????????????????????????????????????? [613] Pedinomonas_mi ?????????????????????????????????????????????????? [598] Tetraselm_cart ?????????????????????????????????????????????????? [624] Enteromorpha ?????????????????????????????????????????????????? [621] Ulva_fasci ?????????????????????????????????????????????????? [609] Ulothrix_zo ?????????????????????????????????????????????????? [596] Cympolia_barba ?????????????????????????????????????????????????? [636] Batophora_oers ?????????????????????????????????????????????????? [622] Codium_decort ?????????????????????????????????????????????????? [627] Cladophoro ?????????????????????????????????????????????????? [616] Blastophysa_rh ?????????????????????????????????????????????????? [619] Trentepohlia ?????????????????????????????????????????????????? [623] Cephaleuro_par ?????????????????????????????????????????????????? [602] Characium_vac TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGATGTGTTGTCGC-GG [629] Dunaliella_par TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTGTAGC-GG [628] Chlamyd_reinha TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGGTGGTGC-GG [631] Volvox_carteri TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGGTGGTGC-GG [631] Chlorococc_min TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGACCACGC-GG [628] Draparn_plum ?????????????????????????????????????????????????? [611] Uronema_belk ?????????????????????????????????????????????????? [588] Chlamydom_moew ?????????????????????????????????????????????????? [610] Stephanos_pl ?????????????????????????????????????????????????? [619] Carteria_rad ?????????????????????????????????????????????????? [626] Gonium_pecto ?????????????????????????????????????????????????? [614] Chlorella_kess TTGCTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGCGGGGCCTGCC-GG [633] Chlorella_vulg TTGCTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGACCTGCC-GG [634] Protothec_wic TTGCTGCAGTTAAAAAGCTCGTAGTTGGATTTCGAGGTCGTCCTGCT-GG [629] Chlorella_prot TTGCTGCAGTTAAAAAGCTCGTAGTCGAACTTCGGGGGGCCCGGGCC-GG [633] Chlorella_min TTGCTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGGCACGTC-GG [632] Neochloris_aqu TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GG [631] Neochloris_vig TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GG [631] Pediastrum_dup TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GG [632] Scenedesm_obl TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GG [632] Characium_hin TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GG [629] Chlorella_fus TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GG [632] Ankistrodesmus TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTAGGTTCCATC-GG [630] Pseudotreb_gig ?????????????????????????????????????????????????? [608] Pleurastr_terr ?????????????????????????????????????????????????? [621] Characium_per TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGCGGAGCC-GA [631] Parietochl_pse TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTCGCGCC-GG [631] Friedmannia_is TTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGCGCTACC-GG [632] [ 660 670 680 690 700] [ . . . . .] Glycine_max TCCGCC-TCC--GTGTGCACCGGTC-GGCT--GTCCCTTCTGCCGGCGAT [680] Oryza_sativa TCCGCC-TCACGGCAGGCACCGACCTGCT--CGACCCTTCTGCCGGCGAT [684] Zamia_pumila TCCGCT-TTTTTGGGTGTGCACCGGCCGTTTCGTCCCTTTTGTTGGCGGC [685] Psilotum_n ?????????????????????????????????????????????????? [684] Equisetum_ar ?????????????????????????????????????????????????? [681] Atrichum_angus ?????????????????????????????????????????????????? [660] Notothylas_bre ?????????????????????????????????????????????????? [651] Phaeoceros_lae ?????????????????????????????????????????????????? [661] Porella_pi ?????????????????????????????????????????????????? [682] Conocephal_con ?????????????????????????????????????????????????? [678] Asterella_tene ?????????????????????????????????????????????????? [663] Riccia ?????????????????????????????????????????????????? [674] Klebsormid_fla ?????????????????????????????????????????????????? [682] Coleochaet_nit ?????????????????????????????????????????????????? [663] Fissidens_taxi ?????????????????????????????????????????????????? [654] Plagiomnium_cu ?????????????????????????????????????????????????? [649] Micromonas_pus ?????????????????????????????????????????????????? [672] Mantoniel_squa ?????????????????????????????????????????????????? [654] Nephroselm_pyr ?????????????????????????????????????????????????? [663] Pedinomonas_mi ?????????????????????????????????????????????????? [648] Tetraselm_cart ?????????????????????????????????????????????????? [674] Enteromorpha ?????????????????????????????????????????????????? [671] Ulva_fasci ?????????????????????????????????????????????????? [659] Ulothrix_zo ?????????????????????????????????????????????????? [646] Cympolia_barba ?????????????????????????????????????????????????? [686] Batophora_oers ?????????????????????????????????????????????????? [672] Codium_decort ?????????????????????????????????????????????????? [677] Cladophoro ?????????????????????????????????????????????????? [666] Blastophysa_rh ?????????????????????????????????????????????????? [669] Trentepohlia ?????????????????????????????????????????????????? [673] Cephaleuro_par ?????????????????????????????????????????????????? [652] Characium_vac TCTGCC-TCT-GGTACGTACTGCGTTCGA---GCATCTTTCTGCTGGGGA [674] Dunaliella_par TCAGCC-TTT-GGTGAGTACTGCTACGGC---CCACCTTTCTGCCGGGGA [673] Chlamyd_reinha TCCGCC-TCT-GGTGTGCACTGCTCTGCT---CCACCTTCCTGCCGGGGA [676] Volvox_carteri TCCGCC-TCT-GGTGTGCACTGCTCTGCT---CCACCTTCCTGCCGGGGA [676] Chlorococc_min TCTGCC-TCT-GGTACGTACTGCGCCTGG---CCACCTTTCTGCTGGGGA [673] Draparn_plum ?????????????????????????????????????????????????? [661] Uronema_belk ?????????????????????????????????????????????????? [638] Chlamydom_moew ?????????????????????????????????????????????????? [660] Stephanos_pl ?????????????????????????????????????????????????? [669] Carteria_rad ?????????????????????????????????????????????????? [676] Gonium_pecto ?????????????????????????????????????????????????? [664] Chlorella_kess TCCGCCGTTTCGGTGTGCACTGGCAGGGC----CGCCTTGTTGCCGGGGA [679] Chlorella_vulg TCCGCCGTTTCGGTGTGCACTGGCAGGGC---TCACCTTGTTGCCGGGGA [681] Protothec_wic TCCGCCGTTTCGGTGTGCACTGGCGCGGC---GGTCTTTGTTGCTGGGGA [676] Chlorella_prot TCCCCCCGCCCTCTGCGCACTGGCATGGCG--CCCCCCTGTTGCTGGGGA [681] Chlorella_min TCCGCCGTTTCGGTGTGCACTGGCGGGGC---CCACCTTGTTGCCGGGGA [679] Neochloris_aqu TCCGCC-TAT-GGTGAGTACTGCTATGGC---CTTCCTTTCTGCCGGGGA [676] Neochloris_vig TCCGCC-TCT-GGTGAGTACTGCTATGGC---CTTCCTTTCTGCCGGGGA [676] Pediastrum_dup TCCGCC-TAT-GGTGAGTACTGCTACGGC---CTCCCTTTCTGCCGGGGA [677] Scenedesm_obl TCCGCC-TAT-GGTGAGTACTGCTATGGC---CTTCCTTTCTGTCGGGGA [677] Characium_hin TCCGCC-TAT-GGTGAGTACTGCTATGGC---CTTCCTTTCTGCCGGGGA [674] Chlorella_fus TCCGCC-TAT-GGTGAGTACTGCTATGGC---CTTCCTTTCTGTCGGGGA [677] Ankistrodesmus TCCGCC-TAT-GGTGAGTACTGCTGTGGC---CTTCCTTTTTGCCGGGGA [675] Pseudotreb_gig ?????????????????????????????????????????????????? [658] Pleurastr_terr ?????????????????????????????????????????????????? [671] Characium_per TCTGCCCTTTGGGTATGCATTGGCTTTGC---CTATCTTGCTGCCGGGGA [678] Parietochl_pse TCCGCCGTTTCGGTGTGCACTGGCGTGGC---CCACCTTGCTGCCGGGGA [678] Friedmannia_is TCCGCCGATTCGGTGTGCACTGGTCGCGC---CCATCTTGCTGCCGGGGA [679] [ 710 720 730 740 750] [ . . . . .] Glycine_max GCG---CTCCTGTCCTTAACTGGCCGGG-TCGTGCC-TCC-GGTGCTGTT [724] Oryza_sativa GCG---CTCCTGGCCTTAACTGGCCGGGTTCGTGCC-TCC-GGCGCCGTT [729] Zamia_pumila GCG---CACCTGGCCTTAACTGTCTGGG-TCGCGGT-TCC--ACGCTGTT [728] Psilotum_n ?????????????????????????????????????????????????? [734] Equisetum_ar ?????????????????????????????????????????????????? [731] Atrichum_angus ?????????????????????????????????????????????????? [710] Notothylas_bre ?????????????????????????????????????????????????? [701] Phaeoceros_lae ?????????????????????????????????????????????????? [711] Porella_pi ?????????????????????????????????????????????????? [732] Conocephal_con ?????????????????????????????????????????????????? [728] Asterella_tene ?????????????????????????????????????????????????? [713] Riccia ?????????????????????????????????????????????????? [724] Klebsormid_fla ?????????????????????????????????????????????????? [732] Coleochaet_nit ?????????????????????????????????????????????????? [713] Fissidens_taxi ?????????????????????????????????????????????????? [704] Plagiomnium_cu ?????????????????????????????????????????????????? [699] Micromonas_pus ?????????????????????????????????????????????????? [722] Mantoniel_squa ?????????????????????????????????????????????????? [704] Nephroselm_pyr ?????????????????????????????????????????????????? [713] Pedinomonas_mi ?????????????????????????????????????????????????? [698] Tetraselm_cart ?????????????????????????????????????????????????? [724] Enteromorpha ?????????????????????????????????????????????????? [721] Ulva_fasci ?????????????????????????????????????????????????? [709] Ulothrix_zo ?????????????????????????????????????????????????? [696] Cympolia_barba ?????????????????????????????????????????????????? [736] Batophora_oers ?????????????????????????????????????????????????? [722] Codium_decort ?????????????????????????????????????????????????? [727] Cladophoro ?????????????????????????????????????????????????? [716] Blastophysa_rh ?????????????????????????????????????????????????? [719] Trentepohlia ?????????????????????????????????????????????????? [723] Cephaleuro_par ?????????????????????????????????????????????????? [702] Characium_vac CGAG--CTCCTGGGCTTAATTGTCTGGG-ACTCGGAATC--AGCGAAGTG [719] Dunaliella_par CGTG--CTCCTGGGCTTAACTGTCCGGG-ACACGGAATC--GGCGAGGTT [718] Chlamyd_reinha CGGG--CTCCTGGGCTTCACTGTCTGGG-ACTCGGAGTC--GGCGAGGTT [721] Volvox_carteri CGGG--CTCCTGGGCTTCACTGTATGGG-ACTCGGAGTC--GGCGAGGTT [721] Chlorococc_min CG-C--CTCCTGGGCTTCACTGTCTGGGGGGTGGGAGTC--AGCGAAGTG [718] Draparn_plum ?????????????????????????????????????????????????? [711] Uronema_belk ?????????????????????????????????????????????????? [688] Chlamydom_moew ?????????????????????????????????????????????????? [710] Stephanos_pl ?????????????????????????????????????????????????? [719] Carteria_rad ?????????????????????????????????????????????????? [726] Gonium_pecto ?????????????????????????????????????????????????? [714] Chlorella_kess CGGG--CTCCTGGGCTTCACTGTCCGGG-ACTCGGAGTC--GGCGCTGTT [724] Chlorella_vulg CGGG--CTCCTGGGCTTCACTGTCCGGG-ACTCGGAGTC--GGCGCTGTT [726] Protothec_wic CGTG--CTCCTGGGCTTCACTGTCCGGG-ACTCGGAGTC--AGCGAGGTT [721] Chlorella_prot CGGCG-CTCCTGGGCTTTGCTGTCCGGG-GCCCGGAGTC--AGCGAGGTT [727] Chlorella_min CGGG--CTCCTGGGATTCA-TTTCCTGGGACTCGGAGTC--GGCGAGGTT [724] Neochloris_aqu CGGG--CTCCTGGGCTTAACTGTCCGGG-ACTCGGAGTC--GGCGTTGTT [721] Neochloris_vig CGG---CTCCTGGGCTTGACTGTCCGGG-ACTCGGAGTC--GGCGTTGTT [720] Pediastrum_dup CGAG--TTGCTGGGCTTCACTGTCCGGT-GCTTGGAGTC--GGCGTTGTT [722] Scenedesm_obl CGGG--CTTCTGGGCTTCACTGTCCGGG-ACTCGGAGTC--GACGTGGTT [722] Characium_hin CGGG--CTCCTGGGATTAACTTATCGGG-ACTCGGAGTC--GGCGTTGTT [719] Chlorella_fus CGGG--CTTCTGGGCTTAATTGTCCGGG-ACTCGGAGTC--GACGTGGTT [722] Ankistrodesmus CGGT--CTCCTGGGCTTCACTGTCCGGG-AATCGGAGTC--GGCGATGAT [720] Pseudotreb_gig ?????????????????????????????????????????????????? [708] Pleurastr_terr ?????????????????????????????????????????????????? [721] Characium_per -GGCG-CTCCTGGGCTTCATTGCTCGGG-ACGTTTAGTC--GGCGAGGTT [723] Parietochl_pse CGGG--CTCCTGGGCTTCACTGTCCGGG-ACTCGGAGTC--GGCGAGGTT [723] Friedmannia_is CAGG--CTGCTGGGCTTAACTGTCTGGC-ACCTGGAGTC--GGCGAGGTT [724] [ 760 770 780 790 800] [ . . . . .] Glycine_max ACTTTGAAGAAATTAGAGTGCTCAAAGCAAGC-CTACGCTCTGTATACAT [773] Oryza_sativa ACTTTGAAGAAATTAGAGTGCTCAAAGCAAGC-CATCGCTCTGGATACAT [778] Zamia_pumila ACTTTGAAAAAATTAGAGTGCTCAAAGCAAGC-TTATGCTCTGAATACAT [777] Psilotum_n ?????????????????????????????????????????????????? [784] Equisetum_ar ?????????????????????????????????????????????????? [781] Atrichum_angus ?????????????????????????????????????????????????? [760] Notothylas_bre ?????????????????????????????????????????????????? [751] Phaeoceros_lae ?????????????????????????????????????????????????? [761] Porella_pi ?????????????????????????????????????????????????? [782] Conocephal_con ?????????????????????????????????????????????????? [778] Asterella_tene ?????????????????????????????????????????????????? [763] Riccia ?????????????????????????????????????????????????? [774] Klebsormid_fla ?????????????????????????????????????????????????? [782] Coleochaet_nit ?????????????????????????????????????????????????? [763] Fissidens_taxi ?????????????????????????????????????????????????? [754] Plagiomnium_cu ?????????????????????????????????????????????????? [749] Micromonas_pus ?????????????????????????????????????????????????? [772] Mantoniel_squa ?????????????????????????????????????????????????? [754] Nephroselm_pyr ?????????????????????????????????????????????????? [763] Pedinomonas_mi ?????????????????????????????????????????????????? [748] Tetraselm_cart ?????????????????????????????????????????????????? [774] Enteromorpha ?????????????????????????????????????????????????? [771] Ulva_fasci ?????????????????????????????????????????????????? [759] Ulothrix_zo ?????????????????????????????????????????????????? [746] Cympolia_barba ?????????????????????????????????????????????????? [786] Batophora_oers ?????????????????????????????????????????????????? [772] Codium_decort ?????????????????????????????????????????????????? [777] Cladophoro ?????????????????????????????????????????????????? [766] Blastophysa_rh ?????????????????????????????????????????????????? [769] Trentepohlia ?????????????????????????????????????????????????? [773] Cephaleuro_par ?????????????????????????????????????????????????? [752] Characium_vac ACCTTGAGCAAACAAGAGTGTTCAAAGCAAGC-CTACGCTCTGAATTTTT [768] Dunaliella_par ACTTTGAGTAAATTAGAGTGTTCAAAGCAAGC-CTACGCTCTGAATACAT [767] Chlamyd_reinha ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACAT [770] Volvox_carteri ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACAT [770] Chlorococc_min ACCTTGAGCAAACAAGAGAGTTCAAAGCAAGC-CTACGCTCTGAATTTTT [767] Draparn_plum ?????????????????????????????????????????????????? [761] Uronema_belk ?????????????????????????????????????????????????? [738] Chlamydom_moew ?????????????????????????????????????????????????? [760] Stephanos_pl ?????????????????????????????????????????????????? [769] Carteria_rad ?????????????????????????????????????????????????? [776] Gonium_pecto ?????????????????????????????????????????????????? [764] Chlorella_kess ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACAT [773] Chlorella_vulg ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACAT [775] Protothec_wic ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-TACCGCTCTGAATACAT [770] Chlorella_prot ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-ATCCGCTCTGAATACAT [776] Chlorella_min ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACAT [773] Neochloris_aqu ACTTTGAGTAAATTGGAGTGTTCAAAGCAAGC-CTGCGCTCTGAACATTT [770] Neochloris_vig ACTTTGAGTAAATTGGAGTGTTCAAAGCAAGC-CTGCGCTCTGAACATTT [769] Pediastrum_dup ACTTTGAGTAAATTAGAGTGTTCAAAGCAACG-ATACGCCCTGAATACTT [771] Scenedesm_obl ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-TTACGCCA-GAATACTT [770] Characium_hin ACTTTGAGTAAATTAGAGTGTTCAAAGCAAGC-CTGCGCTCTGAATACTT [768] Chlorella_fus ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-TTACGCCCTGAATACTT [771] Ankistrodesmus ACTTTGAGTAAATTAGAGTGTTCAAAGCAAGC-CTACGCTCTGAATACTT [769] Pseudotreb_gig ?????????????????????????????????????????????????? [758] Pleurastr_terr ?????????????????????????????????????????????????? [771] Characium_per ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTTTGCATACAT [772] Parietochl_pse ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACAT [772] Friedmannia_is ACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACAT [773] [ 810 820 830 840 850] [ . . . . .] Glycine_max TAGCATGGGATAACACCACAGGATTCTGATCCTATTGTGTTGGCCTTCGG [823] Oryza_sativa TAGCATGGGATAACATCATAGGATTCCGGTCCTATTGTGTTGGCCTTCGG [828] Zamia_pumila TAGCATGGAATAACGGTATAGGATTCTGGTCCTATTGCGTTGGCCTTCGG [827] Psilotum_n ?????????????????????????????????????????????????? [834] Equisetum_ar ?????????????????????????????????????????????????? [831] Atrichum_angus ?????????????????????????????????????????????????? [810] Notothylas_bre ?????????????????????????????????????????????????? [801] Phaeoceros_lae ?????????????????????????????????????????????????? [811] Porella_pi ?????????????????????????????????????????????????? [832] Conocephal_con ?????????????????????????????????????????????????? [828] Asterella_tene ?????????????????????????????????????????????????? [813] Riccia ?????????????????????????????????????????????????? [824] Klebsormid_fla ?????????????????????????????????????????????????? [832] Coleochaet_nit ?????????????????????????????????????????????????? [813] Fissidens_taxi ?????????????????????????????????????????????????? [804] Plagiomnium_cu ?????????????????????????????????????????????????? [799] Micromonas_pus ?????????????????????????????????????????????????? [822] Mantoniel_squa ?????????????????????????????????????????????????? [804] Nephroselm_pyr ?????????????????????????????????????????????????? [813] Pedinomonas_mi ?????????????????????????????????????????????????? [798] Tetraselm_cart ?????????????????????????????????????????????????? [824] Enteromorpha ?????????????????????????????????????????????????? [821] Ulva_fasci ?????????????????????????????????????????????????? [809] Ulothrix_zo ?????????????????????????????????????????????????? [796] Cympolia_barba ?????????????????????????????????????????????????? [836] Batophora_oers ?????????????????????????????????????????????????? [822] Codium_decort ?????????????????????????????????????????????????? [827] Cladophoro ?????????????????????????????????????????????????? [816] Blastophysa_rh ?????????????????????????????????????????????????? [819] Trentepohlia ?????????????????????????????????????????????????? [823] Cephaleuro_par ?????????????????????????????????????????????????? [802] Characium_vac TAGCATGGAATCACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTAG [817] Dunaliella_par TAGCATGGAATAACACGATAGGACTCTGG-CTTATCTTGTTGGTCTGTAA [816] Chlamyd_reinha TAGCATGGAATAACACGATAGGACTCTGG-CCTATCT-GTTGGTCTGTGG [818] Volvox_carteri TAGCATGGAATAACACGATAGGACTCTGG-CCTATCT-GTTGGTCTGTGG [818] Chlorococc_min TAGCATGGAATCACACGATAGGACTGTGG-CCTATCTTGTTGGTCTGTGG [816] Draparn_plum ?????????????????????????????????????????????????? [811] Uronema_belk ?????????????????????????????????????????????????? [788] Chlamydom_moew ?????????????????????????????????????????????????? [810] Stephanos_pl ?????????????????????????????????????????????????? [819] Carteria_rad ?????????????????????????????????????????????????? [826] Gonium_pecto ?????????????????????????????????????????????????? [814] Chlorella_kess TAGCATGGAATAACACGATAGGACTCTGG-CCTATCCTGTTGGTCTGTAG [822] Chlorella_vulg TAGCATGGAATAACACGATAGGACTCTGG-CCTATCCTGTTGGTCTGTAG [824] Protothec_wic TAGCATGGAATAACATGATAGGACTCTGG-CTTATCTTGTTGGTCTGTAA [819] Chlorella_prot TAGCATGGAATAACATGATAGGACTCTGG-CTTATCACGTTGGTCTGTAA [825] Chlorella_min TAGCATGGAATAACACGATAGGACTCTGG-CCTATCCTGTTGGTCTGTAG [822] Neochloris_aqu TAGCATGGAATAACACGATAGGACTCTGG-CCTATCCTGTTGGTCTGTAG [819] Neochloris_vig TAGCATGGAATAACACGATAGGACTCTGG-CCTATCCTGTTGGTCTGTAG [818] Pediastrum_dup TAGCATGGAATAACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTAG [820] Scenedesm_obl TAGCATGGAATAACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTAG [819] Characium_hin TAGCATGGAATAACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTAG [817] Chlorella_fus TAGCATGGAATAACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTAG [820] Ankistrodesmus TAGCATGGAATATCGCGATAGGACTCTGG-CCTATCTCGTTGGTCTGTAG [818] Pseudotreb_gig ?????????????????????????????????????????????????? [808] Pleurastr_terr ?????????????????????????????????????????????????? [821] Characium_per CAGCATGGAATATCACGAGAGGACTCTGG-CCTATCTTGTTGGTCTGTGG [821] Parietochl_pse TAGCATGGAATAACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTGG [821] Friedmannia_is TAGCATGGAATAACACGATAGGACTCTGG-CCTATCTCGTTGGTCTGTGG [822] [ 860 870 880 890 900] [ . . . . .] Glycine_max GATCGGA-GTAATGATTAACAGGGACAGTCGGGGGCATTCGTATTTCATA [872] Oryza_sativa GATCGGA-GTAATGATTAATAGGGACAGTCGGGGGCATTCGTATTTCATA [877] Zamia_pumila GACCGGA-GTAATGATTAACAGGGACGGTCGGGGGCATTCGTATTTCATT [876] Psilotum_n ?????????????????????????????????????????????????? [884] Equisetum_ar ?????????????????????????????????????????????????? [881] Atrichum_angus ?????????????????????????????????????????????????? [860] Notothylas_bre ?????????????????????????????????????????????????? [851] Phaeoceros_lae ?????????????????????????????????????????????????? [861] Porella_pi ?????????????????????????????????????????????????? [882] Conocephal_con ?????????????????????????????????????????????????? [878] Asterella_tene ?????????????????????????????????????????????????? [863] Riccia ?????????????????????????????????????????????????? [874] Klebsormid_fla ?????????????????????????????????????????????????? [882] Coleochaet_nit ?????????????????????????????????????????????????? [863] Fissidens_taxi ?????????????????????????????????????????????????? [854] Plagiomnium_cu ?????????????????????????????????????????????????? [849] Micromonas_pus ?????????????????????????????????????????????????? [872] Mantoniel_squa ?????????????????????????????????????????????????? [854] Nephroselm_pyr ?????????????????????????????????????????????????? [863] Pedinomonas_mi ?????????????????????????????????????????????????? [848] Tetraselm_cart ?????????????????????????????????????????????????? [874] Enteromorpha ?????????????????????????????????????????????????? [871] Ulva_fasci ?????????????????????????????????????????????????? [859] Ulothrix_zo ?????????????????????????????????????????????????? [846] Cympolia_barba ?????????????????????????????????????????????????? [886] Batophora_oers ?????????????????????????????????????????????????? [872] Codium_decort ?????????????????????????????????????????????????? [877] Cladophoro ?????????????????????????????????????????????????? [866] Blastophysa_rh ?????????????????????????????????????????????????? [869] Trentepohlia ?????????????????????????????????????????????????? [873] Cephaleuro_par ?????????????????????????????????????????????????? [852] Characium_vac GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [866] Dunaliella_par GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [865] Chlamyd_reinha GACCGGA-GTAATGATTAAGAGGGGTAGTCGGGGGCATTCGTATTCCGTT [867] Volvox_carteri GATCGGA-GTAATGATTAAGAGGGGTAGTCGGGGGCATTCGTATTCCGTT [867] Chlorococc_min GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [865] Draparn_plum ?????????????????????????????????????????????????? [861] Uronema_belk ?????????????????????????????????????????????????? [838] Chlamydom_moew ?????????????????????????????????????????????????? [860] Stephanos_pl ?????????????????????????????????????????????????? [869] Carteria_rad ?????????????????????????????????????????????????? [876] Gonium_pecto ?????????????????????????????????????????????????? [864] Chlorella_kess GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCGAT [871] Chlorella_vulg GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [873] Protothec_wic GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [868] Chlorella_prot GACCGGA-GTAATGATTGAGAGGGACAGTCGGGGGCATTCGTATTTCATT [874] Chlorella_min GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [871] Neochloris_aqu GACCAGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [868] Neochloris_vig GACCAGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [867] Pediastrum_dup GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [869] Scenedesm_obl GACCGGA-GTAATGATTAAGAG?GACAGTCGGGGGCATTCGTATTTCATT [868] Characium_hin GACCAGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [866] Chlorella_fus GACTGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [869] Ankistrodesmus GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [867] Pseudotreb_gig ??????????????????????????????????????????????CATT [858] Pleurastr_terr ?????????????????????????????????????????????????? [871] Characium_per GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [870] Parietochl_pse GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [870] Friedmannia_is GACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATT [871] [ 910 920 930 940 950] [ . . . . .] Glycine_max GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACAACTGCGAAAGCA [922] Oryza_sativa GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACAACTGCGAAAGCA [927] Zamia_pumila GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACCACTGCGAAAGCA [926] Psilotum_n ?????????????????????????????????????????????????? [934] Equisetum_ar ?????????????????????????????????????????????????? [931] Atrichum_angus ????????????????????????????????????CTTCTGCGAAAGCA [910] Notothylas_bre ?????????????????????????????????????????????????? [901] Phaeoceros_lae ?????????????????????????????????????????????????? [911] Porella_pi ?????????????????????????????????????????????????? [932] Conocephal_con ?????????????????????????????????????????????????? [928] Asterella_tene ????????????????????????????????????CTTCTGCGAAAGCA [913] Riccia ????????????????????????????????????????????AAAGCA [924] Klebsormid_fla ?????????????????????????????????????????????????? [932] Coleochaet_nit ?????????????????????????????????????????????????? [913] Fissidens_taxi ?????????????????????????????????????????????????? [904] Plagiomnium_cu ????????TGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCA [899] Micromonas_pus ?????????????????????????????????????????????????? [922] Mantoniel_squa ?????????????????????????????????????????????????? [904] Nephroselm_pyr ?????????????????????????????????????????????????? [913] Pedinomonas_mi ?????????????????????????????????????????????????? [898] Tetraselm_cart ???????????????????????????????????????????????GCA [924] Enteromorpha ?????????????????????????????????????????????????? [921] Ulva_fasci ?????????????????????????????????????????????????? [909] Ulothrix_zo ???????????????????????????????????????????????GCA [896] Cympolia_barba ????????????????????????????????????????????AAAGCA [936] Batophora_oers ???????????????????????????????GGATCCAACTGCGAAAGCA [922] Codium_decort ???????????????????????????????????CCTAAGCGAAAGCAG [927] Cladophoro ???????????????????????????????????????TGCGAAAGCA- [915] Blastophysa_rh ??????????????????????????CCGATAGACGAACCATCTGAAGAT [919] Trentepohlia ???????????????????????ACGGAAGACGAACTTCTGCGAAAGCAT [923] Cephaleuro_par ?????????????????????????????????????????????????? [902] Characium_vac GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCA [916] Dunaliella_par GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCA [915] Chlamyd_reinha GTCAGAGGTGAAATTCTTGGATTTACGGAAGACGAACATCTGCGAAAGCA [917] Volvox_carteri GTCAGAGGTGAAATTCTTGGATTTACGGAAGACGAACATCTGCGAAAGCA [917] Chlorococc_min GTCAGAGGTGAAATTCTTGGATTTATGAAACACGAACATCTGCGAAAGCA [915] Draparn_plum ?????????????????????????????????????????????????? [911] Uronema_belk ???????????????????????????????????????????GAAAGCA [888] Chlamydom_moew ????????TGAAATTCTTGGATTTCGGAAAGACCTACCACTGCGAA?GCA [910] Stephanos_pl ?????????????????????????????????????????????????? [919] Carteria_rad ?????????????????????????????????????????????????? [926] Gonium_pecto ?????????????????????????????????????????????????? [914] Chlorella_kess GTCAGAGGTGAAATTCTTGGATTTTCGAAAGACGAACTACTGCGAAAGCA [921] Chlorella_vulg GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCA [923] Protothec_wic GTCAGAGGTGAAATTCTTGGATTTATGAAAGAC?AACTACTGCGAAAGCA [918] Chlorella_prot GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCA [924] Chlorella_min GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCA [921] Neochloris_aqu GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCA [918] Neochloris_vig GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCA [917] Pediastrum_dup GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCA [919] Scenedesm_obl GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCA [918] Characium_hin GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCA [916] Chlorella_fus GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCA [919] Ankistrodesmus GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCA [917] Pseudotreb_gig GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCA [908] Pleurastr_terr ?????????????????????????????????????????????????? [921] Characium_per GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCA [920] Parietochl_pse GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCA [920] Friedmannia_is GTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAACG [921] [ 960 970 980 990 1000] [ . . . . .] Glycine_max TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [972] Oryza_sativa TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [977] Zamia_pumila TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [976] Psilotum_n ?????????????????????????AAGAACGAAAGTTGGG--CTCGAAG [982] Equisetum_ar ?????????????????????????AAGAACGAAAGTTGG---CTCGAAG [978] Atrichum_angus TTTGCCAAGGATGTTTTCATTAATCAAG???GAAAGTTGGGGGCTCGAAG [960] Notothylas_bre ????????????????????????????????AAAGTTGGGG-CTCGAAG [950] Phaeoceros_lae ???????????????????????????????GAAAGTTGGG--CTCGAAG [959] Porella_pi ?????????????????????????AA?AAC?AAAGTTGGG--CTCGAA- [979] Conocephal_con ??????AAGGATGTTT--ATTAA--AA-AA-GAAA-TTG-------GAAG [964] Asterella_tene TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [963] Riccia TTTGCCAAGGATGTTTTCATTAAT-AACAA--AAAGTTGG?GGCTCGAAG [971] Klebsormid_fla ??????AAGGATGTTTTCATTAAT---GA--GAAAGTTGGGGGCTCGAAG [977] Coleochaet_nit ?????????????????CATTAATCAAGAA-GAAAGTTGGGGGCTCGAAG [962] Fissidens_taxi ???????????????????????????????????????????CTCGAAG [954] Plagiomnium_cu TTTGCCAAGGATGTTTTCGTTAATCAA-AA-GAAAGTTGGGGGCTCGAAG [947] Micromonas_pus ????????????????????????????????AAAGTTGGGGGCTCGAAG [972] Mantoniel_squa ?????????????????????????????????????????????????G [954] Nephroselm_pyr ????????????????????????????????????????GGGCTCGGAG [963] Pedinomonas_mi ???????????????????????????????????????GGGGATCGAAG [948] Tetraselm_cart TTTGTCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [974] Enteromorpha ????????????????????????????????????????GGGCTCGAAG [971] Ulva_fasci ???????????????????????????????????????GGGGCTCGAAG [959] Ulothrix_zo TT-GCCAAGGATGTTTTCATTGATCAACAA-GAAAGTTGGGGGCTC---- [940] Cympolia_barba TTTGTCAAGGGTATCTTCATTGATCAAGAAC---AGTTGGGGGATCG--G [981] Batophora_oers TTCC----GGGCGCTCTCGTTGATCAAGAAC---AGTTGGGGGATCGAAG [965] Codium_decort TCGCCAAGGACACTTCCTTGTGATCAAGA-CGAAAGTT--GGGATCGAAG [974] Cladophoro TTGCCAAGGACGCTTTCATTA-GTCAAGGACGAAAGTCGGGGGATCGAAG [964] Blastophysa_rh TTGCCAAGGATCGTTTTCTTTGATC------GAAAGTTGGGGGCTCGAAG [963] Trentepohlia TTG-CAAGGATGTTTTCATT-GATCAAGAA-GAAAGTCGG-GGCTCGAAG [969] Cephaleuro_par ??????????????????????????????????GTCGG-GGGCTCG-CG [950] Characium_vac TTTGCCAAGGATGTTTTCATTGATCAAGAACGAAAGTTGGGGGCTCGAAG [966] Dunaliella_par TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [965] Chlamyd_reinha TTGGCCAAGGATACTTTCATTGATCAAGAACGAAAGTTGGGGGCTCGAAG [967] Volvox_carteri TTTGCCAAGGATACTTTCATTGATCAAGAACGAAAGTTGGGGGCTCGAAG [967] Chlorococc_min TTTGCCAAGGATGTTTTCATTGATCAAGAACGAAAGTTGGGGGCTCGAAG [965] Draparn_plum ?????????????????????????AA???CGAAAGTT-GGGGCTCGAAG [960] Uronema_belk TTTGCCAAGT?TGTCTTCATTAATCAA-AA-GAAAGTTGGGGGCTCGAAG [936] Chlamydom_moew TTTGCCAAGGATGTTTTCATT?ATCAAGAA?GAAAGTAGGGGGCTCGAAG [960] Stephanos_pl ???????????????????????????????????????????CTCGAAG [969] Carteria_rad ?????????????????????????AA-A--GAAA-TTGG-GGCTCGAAG [971] Gonium_pecto ??????????????????????????????????????????GCTCGAAG [964] Chlorella_kess TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [971] Chlorella_vulg TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [973] Protothec_wic TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [968] Chlorella_prot TTTGCCAAGGATGTTTTCATTGATCAAGAACGAAAGTTGGGGGCTCGAAG [974] Chlorella_min TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [971] Neochloris_aqu TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [968] Neochloris_vig TTTGCCAAGGATGTTT-CATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [966] Pediastrum_dup TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [969] Scenedesm_obl TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [968] Characium_hin TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [966] Chlorella_fus TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [969] Ankistrodesmus TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [967] Pseudotreb_gig TTTGCCAAGGATGTTTTCATTAATC--GAA-GAAAGTTGGGGGCTCGAAG [955] Pleurastr_terr ???????????????????????????????GAAAGTT-GGGGCTC-AAG [969] Characium_per TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [970] Parietochl_pse TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [970] Friedmannia_is TTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAG [971] [ 1010 1020 1030 1040 1050] [ . . . . .] Glycine_max ACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CCAGGG [1020] Oryza_sativa ACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CCAGGG [1025] Zamia_pumila ACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CCAGGG [1024] Psilotum_n ACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGG- [1029] Equisetum_ar AC-ATCA?ATACCG-TCCTAGTCTCAACCATAAACGA-GC?GA-CTAGGG [1024] Atrichum_angus ACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1008] Notothylas_bre ACGATCAGATAC---TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [996] Phaeoceros_lae ACGAT-AG-TACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1005] Porella_pi ACGAT-AGATACCG-TCCTAGTCTCAACCATAAACGATGCCGAGCTAGGG [1027] Conocephal_con ACGATCAGATACC---CCTAGTCTCAACCATAAACGATGCCGA-CTAG-- [1008] Asterella_tene ACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGG- [1010] Riccia ACGATCAGATACC--TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1018] Klebsormid_fla ACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1025] Coleochaet_nit ACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGACCTAGG- [1010] Fissidens_taxi ACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1002] Plagiomnium_cu ACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [995] Micromonas_pus ATGATTAGATA--A-TCCTAGTCTCAACCATAAACGATGC?GA-CTAGGG [1018] Mantoniel_squa ATGATTA-ATAC-A-TC-TAGTCTC-ACCATAAACGGAYCYGA-CWA--G [996] Nephroselm_pyr ATGATTAG---CCA-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1008] Pedinomonas_mi ACGATCAGATACC--TC-TAGTCTCTACCATAAACTAT-CCGA-CTAGGG [993] Tetraselm_cart ACGATTAGATACCG-TCCTAGTCTC-ACCAT-AACGA--CCGA-C-AGGG [1017] Enteromorpha ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGAT-CCGA-CCAGGG [1018] Ulva_fasci ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1007] Ulothrix_zo ----TYAGATACCG-TCG-AG-C-CAACCATAA-CGAYGCC-A--TAGG- [977] Cympolia_barba ATGATTAGATACCA-TCCTAGTCTCAACCATAAACCATGCCAA-TTAGGG [1029] Batophora_oers ATGATTAGATACCA-TCCTAGTCTCAACCATAAACTATGCCAA-Y-AGGG [1012] Codium_decort ATGATT--ATACCG-TCGTAGTCCCAACTGTAAACTATGCCAT-CTGGGG [1020] Cladophoro ACGATTAGATA-CG-TCGTAGTCTCGACCATAAACGATGCCAA-TTAGGG [1011] Blastophysa_rh ATGATTAGATACCGGTCGTAGTCTCAACCATAAAC-ATGCCCA-CTA--G [1009] Trentepohlia ACGATTAGATACCG-TCGTAGTCTCGACCATAAACGATGCCGA-CTAGGG [1017] Cephaleuro_par -CGCTT-GGTACCG-TCGTAGTCTCGACCATAAACGATGCCG--CTAGGG [995] Characium_vac ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1014] Dunaliella_par ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1013] Chlamyd_reinha ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1015] Volvox_carteri ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1015] Chlorococc_min ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1013] Draparn_plum ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGG- [1007] Uronema_belk ACGATTAGATACCG-T-GTAGTCTCAACCATAAACGATGCCGA-CTAGG- [982] Chlamydom_moew ACGATTAGATACCG-TCGTAGTCTCTACCATAAACGATGCCGA-CCAGGG [1008] Stephanos_pl ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1017] Carteria_rad ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1019] Gonium_pecto ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1012] Chlorella_kess ACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1019] Chlorella_vulg ACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1021] Protothec_wic ACGATTAGATACCG-TCCTAGTCTCAACCGTAAACGATGCCGA-CTAGGG [1016] Chlorella_prot ACGATTAGATACCG-TCCTAGTCTCAACCGTAAACGATGCCGA-CTCGGG [1022] Chlorella_min ACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1019] Neochloris_aqu ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1016] Neochloris_vig ACGATTAGATACCG-TCGTAGACTCAACCATAAACGATGCCGA-CTAGGG [1014] Pediastrum_dup ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1017] Scenedesm_obl ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1016] Characium_hin ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1014] Chlorella_fus ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1017] Ankistrodesmus ACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1015] Pseudotreb_gig ACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1003] Pleurastr_terr WCGATT-GATACCG-T--TAGWCTCAAY--TA-WCGATGCC-A--TAGG- [1008] Characium_per ACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1018] Parietochl_pse ACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1018] Friedmannia_is ACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGG [1019] [ 1060 1070 1080 1090 1100] [ . . . . .] Glycine_max ATCAGCGGATGTTGCTTTTAGGACTCCGCTGGCACCTTAT-GAGAAATCG [1069] Oryza_sativa ATCGGCGGATGTTGCTTATAGGACTCCGCCGGCACCTTAT-GAGAAATCA [1074] Zamia_pumila ATCGGCGGATGTTGCTCTAAGGACTCCGCCGGCACCTTAT-GAGAAATCA [1073] Psilotum_n -TC-GCGGATGTTACCTTGATGACTCCGCCGGCACCTTAT--AGAAATC- [1074] Equisetum_ar ATT--CGGATGTTACTTCAATGACTCTGCCGGCACCTTAT-GAGAAATCA [1071] Atrichum_angus ATTTGCGGGTGTTAATTTGATGACCCCG-AAGCACCTTAT-GAGAAATC- [1055] Notothylas_bre ATTGGCGGGTGTTAATTAGATGACTCCGCCAGCACCTTAT-GAGAAATCA [1045] Phaeoceros_lae ATTGGCGGATGTTAATTAGATGACTCCGCCAGCACCTTAT-GAGAAATCA [1054] Porella_pi ATTG--GGATGTTAATTTGATGACTCCGC-AGCACCTTAT-GAGAAATCA [1073] Conocephal_con ATC--CGGATGT?CTTTTGATGACTCCGCCGGCACCTCCA-GAGAAATCA [1055] Asterella_tene ATCG--GGATGT?GATTAGATGACTCCGCCGGCACCTCCATGAGAAATCA [1058] Riccia ATCGGCGGATGT?GATTTGATGACTCCGCCGGCACCTCCT-GAGAAATCA [1067] Klebsormid_fla ATTGGCGGATGTTAATTTGATGACTCCGCCAGCACCTTAT-GAGAAATC- [1073] Coleochaet_nit ATCAACGGATGTTAATTTAATGACTCCGCCAGCACCTTAT--AGAAA-CA [1057] Fissidens_taxi ATTGGCGGGTGTTGATTTGATGACCCCGCCAGCACCTTGA-GAGAAAT-- [1049] Plagiomnium_cu ATTGGCGGGTGTTGATTCGATGACCCCGCCAGCACCTTAT-GAGAAATC- [1043] Micromonas_pus A--GGCGGATGTTAATT-GATGACTCCGC-AGCACCTTAT-GAGAAATCA [1063] Mantoniel_squa ATTCAC--ATCTTAAT---AT--CTC--CCA-CACCTTAT--A-AAATC- [1032] Nephroselm_pyr ATTGGCAGATGTTAGTTCGATGACTCTGCCAGCACCTTAT--AGAAATC- [1055] Pedinomonas_mi ATTGGTGGACGTT-GTTTT?CGACTCCATCAGCACCTTAT-GAGAAATCA [1041] Tetraselm_cart ATTGGCAGA--TT--TT--ATG--TCTGCCAGCACCTTAT-GAGAAAT-A [1057] Enteromorpha ATTGCCGGGTGTTTTTTTGATGACTCCGCCAGCACCTCAT-GAGAAATCA [1067] Ulva_fasci ATTGGCGGGGTGTTTTTTTATGACTCCGC-AGCACCTCAT-GAGAAATCA [1055] Ulothrix_zo AT-GGCGGGYGTTTTTTT--TG-CTCCGC-ACA-CCTTAT-GAGAAATCA [1020] Cympolia_barba ATCGTTGAGC-GTTGATTAGTGACCTCGTCGGCACCATAT-TAGAAATTA [1077] Batophora_oers ATCGGC-GGGGT-CTTTA-C-GTGTCCTCGTCGGCCCCTT-GAGAAA-CA [1056] Codium_decort ATCGG--GGCTG-ATGAATTGCCG-CCG-GCACCCTCCGA-GAAATTAAA [1064] Cladophoro ATTGGA-GGGCGGATAGATAT-CCTCCTCCAGCACCTTCC-GCGAAAGCA [1058] Blastophysa_rh ATCAGG-AG--ATTTAT-TTCGACTTCTCCGGCACTCCAT-GAGAAATCA [1054] Trentepohlia ATCGGA-GG-TTTTTTTTA-TGACCTCTCCGG-ACCT--A-CAGAAATCA [1060] Cephaleuro_par ATCGGA-GGTGGGTTTTTTATG-CCTCTCCGGGCACCTTC-GAGAAATCA [1042] Characium_vac ATTGGCAGGTGTTCAATTGATGACCCTGCCAGCACCTTAT-GAGAAATCA [1063] Dunaliella_par ATTGGCAGGTGTTTCGTTGATGACCCTGCCAGCACCTTAT-GAGAAATCA [1062] Chlamyd_reinha ATTGGCAGATGTTCTTTTGATGACTCTGCCAGCACCTTAT-GAGAAATCA [1064] Volvox_carteri ATTGGCAGATGTTCTTTTGATGACTCTGCCAGCACCTTAT-GAGAAATCA [1064] Chlorococc_min ATTGGCGGGCGTCCTTTTGATGACCCCGCCGGCACCTTAT-GAGAAATCA [1062] Draparn_plum ATCGGT?GGAGTTTTTTCGAT-ACTCCATGGGCACCTTAT-GAGAAATC- [1054] Uronema_belk ATCGGTGGA--TTTTTT-----ACTCCGTGGGCACCTTAT-GAGAAATC- [1023] Chlamydom_moew ATTGGCAGGTGTTCCTTTGATGACCCTGCCAGCACCTTGA-GAGAAATCA [1057] Stephanos_pl ATTGGCAGGTGTTTCGTTGATGACCCTGCCAGCACCTTAT-GAGAAATC- [1065] Carteria_rad ATTGGCAGGCGTTTTGTTAACGACCCTGC-AGCACCTTAT--AGAAATC- [1065] Gonium_pecto ATTGGCAGATGTTCCTTTGATGACTCTGCCAGCACCTTAT-GAGAAATCA [1061] Chlorella_kess ATCGGCGGATGTTTCTTCGATGACTCCGCCGGCACCTTAT-GAGAAATCA [1068] Chlorella_vulg ATCGGCGGATGTTTCTTCGATGACTCCGCCGGCACCTTAT-GAGAAATCA [1070] Protothec_wic ATCGGCGGACGTTCTATCGATGACTCCGCCGGCACCTTAT-GAGAAATCA [1065] Chlorella_prot ATCGGTGGTCGTTCATTCAATGACACCACCGGCACCTCAT-GAGAAATCA [1071] Chlorella_min ATCGGCGGGTGTTCTTTTGATGACCCCGCCGGCACCTTAT-GAGAAATCA [1068] Neochloris_aqu ATTGGCGGACGTTTCATTGATGACTCCGCCAGCACCTTAT-GAGAAATCA [1065] Neochloris_vig ATTTGCGGACGTTTCATTGATGACTCCGCCAGCACCTTGT-GAGAAATCA [1063] Pediastrum_dup ATTGGCGGATGTTTTTTTGATGACTCCGCCAGCACCTTAT-GAGAAATCA [1066] Scenedesm_obl ATTGGCGAATGTTTTTTTAATGACTTCGCCAGCACCTTAT-GAGAAATCA [1065] Characium_hin ATTGGCGAACGTTTCATTGATGACTTCGCCAGAACCTTAT-GAGAAATCA [1063] Chlorella_fus ATTGGCGAATGTTTTTTTAATGACTTCGCCAGCACCTTAT-GAGAAATCA [1066] Ankistrodesmus ATTGGAGGATGTTCTTTTGATGACTTCTCCAGCACCTTAT-GAGAAATCA [1064] Pseudotreb_gig ATTGGCGGGTGTTCTTTCGATGACCCCGCCAGCACCTTAT-GAGAAATC- [1051] Pleurastr_terr ATTGTGCCGATGTTTATTCAATTACTCCGCCACACCTYAT-GA-AAATC- [1055] Characium_per ATTGGCGGACGTTCATTCGATGACTCCGCCAGCACCTTAT-GAGAAATCA [1067] Parietochl_pse ATTGGCGGATGTTTTATCGATGACTCCGCCAGCACCTTAT-GAGAAATCA [1067] Friedmannia_is ATTGGCGGGTGTTCTATCGATGACCCCGCCAGCACCTTAT-GAGAAATCA [1068] [ 1110 1120 1130 1140 1150] [ . . . . .] Glycine_max AAGTCTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1119] Oryza_sativa AAGTCTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1124] Zamia_pumila AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1123] Psilotum_n AAGTCTTTGGGTTCCGGGGGGA???????????????????????????? [1124] Equisetum_ar AAGTCTTTGGGTTCC----GGA-T?????????????????????????? [1116] Atrichum_angus AAGTATTTGGGTTCCGGGGGGAGTATG??????????????????????? [1105] Notothylas_bre AAGTTTTTGGGTTCCGG????????????????????????????????? [1095] Phaeoceros_lae AAGTTTTTGGGTTCCGGGGGGAGTAT???????????????????????? [1104] Porella_pi AAGTTTTTGGGTTCC??????????????????????????????????? [1123] Conocephal_con AA-TTTTTGGGTTCC??????????????????????????????????? [1104] Asterella_tene AAGTTTTTGGGTTCCGGGGGGAG-ATG??????????????????????? [1107] Riccia AAGTTTTTGGGTTCCGGGGGGAGTAT???????????????????????? [1117] Klebsormid_fla -AGTTTTTGGGTTCCGGGGGGA-TATGGTC???????????????????? [1121] Coleochaet_nit AAGTTCTTGGGTTCC??????????????????????????????????? [1107] Fissidens_taxi AAGTTTTTGGGTTCCGGGGGGAGTATG??????????????????????? [1099] Plagiomnium_cu -AGTTTTTGGGTTCCGGGGGGAGTATG??????????????????????? [1092] Micromonas_pus AA-TTTTTGGGTTCCGGGA??????????????????????????????? [1112] Mantoniel_squa AA-TTTTT?????????????????????????????????????????? [1081] Nephroselm_pyr AAGTTTTTGGGTTCC??????????????????????????????????? [1105] Pedinomonas_mi AAGTCTTT?????????????????????????????????????????? [1091] Tetraselm_cart AAGTTTTTGGGTT????????????????????????????????????? [1107] Enteromorpha AAGTCTTTGGGTTCCGGGGGGAG?ATGG?????????????????????? [1117] Ulva_fasci AAGTTTTTGGGTTCCGGGGGGA?TATGGTC?CAA???????????????? [1105] Ulothrix_zo AAGTYTTTGGGYTCCGGGGAG??TATGGTC???????????????????? [1070] Cympolia_barba TAAATCTACAGGCTTGGGGGGGAA?????????????????????????? [1127] Batophora_oers TAAATTTGGGCTCCGGG???TAGTATGGT????????????????????? [1106] Codium_decort AGATCTTGGGCTTCCGGGGAGC?TAGTGCTCAGTGTGGTG?????????? [1114] Cladophoro AAATTTATG?CTTC?GGGGGGAGTAT???????????????????????? [1108] Blastophysa_rh AAGTCTTTGGGTTC???????????????????????????????????? [1104] Trentepohlia AAGTT--TGGGTTCC??????????????????????????????????? [1108] Cephaleuro_par AAGTTGTTGGGTTCC?GGGGGAGTATGG?????????????????????? [1092] Characium_vac AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1113] Dunaliella_par AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1112] Chlamyd_reinha AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1114] Volvox_carteri AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1114] Chlorococc_min AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1112] Draparn_plum AAGTCTTTGGGTTCCGGGGGGA???????????????????????????? [1104] Uronema_belk -A-TCTTTGGGTTCCGGGGGGA-TAT???????????????????????? [1070] Chlamydom_moew GAGTCTTTGGGTTCCGGGGGGAGTATGG?????????????????????? [1107] Stephanos_pl -AGTTTTTGGGTTCC?GGGGGA???????????????????????????? [1114] Carteria_rad -A-TTTTTGGGTTCCGGGGGGA???????????????????????????? [1113] Gonium_pecto AA-TTTTTGG-TTCCGGGGGGAGGA????????????????????????? [1109] Chlorella_kess AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1118] Chlorella_vulg AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1120] Protothec_wic AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1115] Chlorella_prot AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1121] Chlorella_min AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1118] Neochloris_aqu AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1115] Neochloris_vig AAGTTTTTGGGT--CGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1111] Pediastrum_dup AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1116] Scenedesm_obl AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1115] Characium_hin AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1113] Chlorella_fus AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1116] Ankistrodesmus AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1114] Pseudotreb_gig -AGTTTTTGGGTTCCGGGGGGAGTATGG?????????????????????? [1100] Pleurastr_terr AAGWWTTT---TTCC??GGGGAGTATG??????????????????????? [1102] Characium_per AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1117] Parietochl_pse AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1117] Friedmannia_is AAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGG [1118] [ 1160 1170 1180 1190 1200] [ . . . . .] Glycine_max AATTGACGGAA-GGGCA-CCACCAGGAGTGGAGCCTGCGGCT-AATTTGA [1166] Oryza_sativa AATTGACGGAA-GGGCA-CCACCAGGCGTGGGGCCTGCGGCTTAATTTGA [1172] Zamia_pumila AATTGACGGAA-GGGCA-CCACCAGGAGTGGAGCCTGCGGCTTAATTTGA [1171] Psilotum_n ?????????????????????????????????????????????????? [1174] Equisetum_ar ?????????????????????????????????????????????????? [1166] Atrichum_angus ?????????????????????????????????????????????????? [1155] Notothylas_bre ?????????????????????????????????????????????????? [1145] Phaeoceros_lae ?????????????????????????????????????????????????? [1154] Porella_pi ?????????????????????????????????????????????????? [1173] Conocephal_con ?????????????????????????????????????????????????? [1154] Asterella_tene ?????????????????????????????????????????????????? [1157] Riccia ?????????????????????????????????????????????????? [1167] Klebsormid_fla ?????????????????????????????????????????????????? [1171] Coleochaet_nit ?????????????????????????????????????????????????? [1157] Fissidens_taxi ?????????????????????????????????????????????????? [1149] Plagiomnium_cu ?????????????????????????????????????????????????? [1142] Micromonas_pus ?????????????????????????????????????????????????? [1162] Mantoniel_squa ?????????????????????????????????????????????????? [1131] Nephroselm_pyr ?????????????????????????????????????????????????? [1155] Pedinomonas_mi ?????????????????????????????????????????????????? [1141] Tetraselm_cart ?????????????????????????????????????????????????? [1157] Enteromorpha ?????????????????????????????????????????????????? [1167] Ulva_fasci ?????????????????????????????????????????????????? [1155] Ulothrix_zo ?????????????????????????????????????????????????? [1120] Cympolia_barba ?????????????????????????????????????????????????? [1177] Batophora_oers ?????????????????????????????????????????????????? [1156] Codium_decort ?????????????????????????????????????????????????? [1164] Cladophoro ?????????????????????????????????????????????????? [1158] Blastophysa_rh ?????????????????????????????????????????????????? [1154] Trentepohlia ?????????????????????????????????????????????????? [1158] Cephaleuro_par ?????????????????????????????????????????????????? [1142] Characium_vac AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1161] Dunaliella_par AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1160] Chlamyd_reinha AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1162] Volvox_carteri AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1162] Chlorococc_min AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1160] Draparn_plum ?????????????????????????????????????????????????? [1154] Uronema_belk ?????????????????????????????????????????????????? [1120] Chlamydom_moew ?????????????????????????????????????????????????? [1157] Stephanos_pl ?????????????????????????????????????????????????? [1164] Carteria_rad ?????????????????????????????????????????????????? [1163] Gonium_pecto ?????????????????????????????????????????????????? [1159] Chlorella_kess AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1166] Chlorella_vulg AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1168] Protothec_wic AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1163] Chlorella_prot AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1169] Chlorella_min AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1166] Neochloris_aqu AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1163] Neochloris_vig AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1159] Pediastrum_dup AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1164] Scenedesm_obl AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1163] Characium_hin AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1161] Chlorella_fus AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1164] Ankistrodesmus AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1162] Pseudotreb_gig ?????????????????????????????????????????????????? [1150] Pleurastr_terr ?????????????????????????????????????????????????? [1152] Characium_per AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1165] Parietochl_pse AATTGACGGAAAGGGCAGCCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1167] Friedmannia_is AATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGA [1166] [ 1210 1220 1230 1240 1250] [ . . . . .] Glycine_max CTCAACACGGGGAAACTTACCAGGTCCAGACATAGTAAGG-TTGACAGAC [1215] Oryza_sativa CTCAACACGGGGAAACTTACCAGGTCCAGACATAGCAAGGATTGACAGAC [1222] Zamia_pumila CTCAACACGGGGAAACTTACCAGGTCCAGACATAGCAAGGATTGACAGAT [1221] Psilotum_n ??????????????????????????????????????GGATTGACAGAT [1224] Equisetum_ar ??????????????????????????????????????????TGACAGAT [1216] Atrichum_angus ?????????????????????????????????????????????????? [1205] Notothylas_bre ?????????????????????????????????????????????????? [1195] Phaeoceros_lae ?????????????????????????????????????????????????? [1204] Porella_pi ?????????????????????????????????????????????????? [1223] Conocephal_con ?????????????????????????????????????????????????? [1204] Asterella_tene ?????????????????????????????????????????????????? [1207] Riccia ????????????????????????????????????????????????AT [1217] Klebsormid_fla ?????????????????????????????????????????????????? [1221] Coleochaet_nit ?????????????????????????????????????????????????? [1207] Fissidens_taxi ?????????????????????????????????????????????????? [1199] Plagiomnium_cu ?????????????????????????????????????????????????? [1192] Micromonas_pus ?????????????????????????????????????????????????? [1212] Mantoniel_squa ?????????????????????????????????????????????????? [1181] Nephroselm_pyr ?????????????????????????????????????????????????? [1205] Pedinomonas_mi ?????????????????????????????????????????????????? [1191] Tetraselm_cart ?????????????????????????????????????????????????? [1207] Enteromorpha ????????????AAACTTACCAGGTCCAGACATGGA---GATTGACAGAT [1214] Ulva_fasci ?????????????????????????????????????????????????? [1205] Ulothrix_zo ?????????????????????????????????????????????????? [1170] Cympolia_barba ????????????????????????????????????????????????TT [1227] Batophora_oers ?????????????????????????????????????????????????? [1206] Codium_decort ?????????????????????????????????????????????????? [1214] Cladophoro ??????????????????????????????????????????????AGAT [1208] Blastophysa_rh ?????????????????????????????????????????????????? [1204] Trentepohlia ?????????????????????????????????????????????????? [1208] Cephaleuro_par ????????????AAACTTACCAGGTCCAGACATGGT-AG-AT-GACAGAT [1189] Characium_vac CTCAACACGGGGAAACTTACCAGGTCCAGACACGGGGAGGATTGACAGAT [1211] Dunaliella_par CTCAACACGGGAAAACTTACCAGGTCCAGACACGGGGAGGATTGACAGAT [1210] Chlamyd_reinha CTCAACACGGGGAAACTTACCAGGTCCAGACACGGGAAGGATTGACAGAT [1212] Volvox_carteri CTCAACACGGGGAAACTTACCAGGTCCAGACACGGGAAGGATTGACAGAT [1212] Chlorococc_min CTCAACACGGGGAAACTTACCAGGTCCAGACACGGGGAGGATTGACAGAT [1210] Draparn_plum ?????????????????????????????????????????????????? [1204] Uronema_belk ?????????????????????????????????????????????????? [1170] Chlamydom_moew ??????????????????????????????????????????????AGAT [1207] Stephanos_pl ?????????????????????????????????????????????????? [1214] Carteria_rad ????????????????????????????????????????????ACAGAT [1213] Gonium_pecto ??????????????????????????????????????????TGACAGAT [1209] Chlorella_kess CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1216] Chlorella_vulg CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1218] Protothec_wic CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1213] Chlorella_prot CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1219] Chlorella_min CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1216] Neochloris_aqu CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1213] Neochloris_vig CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1209] Pediastrum_dup CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1214] Scenedesm_obl CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1213] Characium_hin CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1211] Chlorella_fus CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1214] Ankistrodesmus CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1212] Pseudotreb_gig ?????????????????????????????????????????????????? [1200] Pleurastr_terr ?????????????????????????????????????????????????? [1202] Characium_per CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1215] Parietochl_pse CTCAACACGGGAAAACTTACCAGGTCCAGACATGTGAAGGATTGACAGAT [1217] Friedmannia_is CTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGAT [1216] [ 1260 1270 1280 1290 1300] [ . . . . .] Glycine_max TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCCTTCTTAGT [1265] Oryza_sativa TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1272] Zamia_pumila TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1271] Psilotum_n TGAGAGCTCTTTCTTGGTTCTATGGGTGGT---G-ATGGCCGTT---AGT [1267] Equisetum_ar TGAGAGCTCTTTCTTGATTCTATGGGTGGTAGTGCATGGCCGTTCTTAGT [1266] Atrichum_angus ??????CTCTTTCTTGATTCTATGGGTGGT-GTGCATGGCCGTT-TT-GT [1252] Notothylas_bre ??????????????????????????????????CA-GGCCGTT-TTAGT [1243] Phaeoceros_lae ?????????????????????????????T--TGCATGGCCGTT-TTAGT [1251] Porella_pi ???????????????????????????????????????CC-----TAGT [1268] Conocephal_con ??????CTCTTTCTT-ATTCTATGGGT--T--TGCAT---CGTTCTTAGT [1246] Asterella_tene ?????????????????????????????????????????????????? [1257] Riccia TGAGAGCTCTTTCTTGATTCTATGGGT--T--TGCATGGCCG-TCTTAGT [1262] Klebsormid_fla ?????????????????????????????????????????????????? [1271] Coleochaet_nit ???????????????????????????????????AT--CCAGTTTTCGT [1255] Fissidens_taxi ??????CTCTTTCTTGATTCTATGGGTG-T-GTGCATGGCCGTT-TTAGT [1246] Plagiomnium_cu ??AGAGCTCTTTCTTGGTTCTATGGGTGGT-GTGCATGGCCGTT-TTAGT [1240] Micromonas_pus ?????????????????????????????T-GTGCATGGCCGTTCTT-GT [1260] Mantoniel_squa ?????????????????????????????T-G-GCWTGGCCGTT-TT-GT [1227] Nephroselm_pyr ??????????????????????????????????CATGGCCGTTCTTAGT [1255] Pedinomonas_mi ?????????????????????????????????GCATGGCCGTTCTTAGT [1241] Tetraselm_cart ????????????????????TATGGGTG-T-GTGCATGGCCGTTCTTAGT [1255] Enteromorpha TGAGAGCTCTTTCTTGGTTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1264] Ulva_fasci ???????????????????CTATGGGT-GTGGTGCATG-CCGTTCTTAGT [1253] Ulothrix_zo ?????????????????????ATGG-TAGTTG---ATGGCCGTTCT--GT [1214] Cympolia_barba TGAT-GC--TTTCTTGATTCT-TGGGTGGTGGTGCATGGCC-TTTTT-GT [1271] Batophora_oers ?????????TTTCTTGATT--A-GGGT--------ATGGCCATTCTTAGT [1245] Codium_decort ??????CTCTTTCTTGATTCC-TGA-TGGTG-TGCATGGCCGATCTCAGC [1261] Cladophoro TGATAGCTCTTT-AAGATTTTTTGGATGGTG--GCATGGCCGTTCTTAGT [1255] Blastophysa_rh ??????????????????????????????T-TGCATGGCCGTTCTTAGT [1253] Trentepohlia ??????????????????????????????TGTGCATGGCCGTTCTT-GT [1257] Cephaleuro_par TGATAGCTCTTTCTTGGTTCTATGGGTGTGGGGGCATGGCCGTTCTTAGT [1239] Characium_vac TGAGAGCTCTTTCTTGATTCTGTGGGTGGTGGTGCATGGCCGTTCTTAGT [1261] Dunaliella_par TGAGAGCTCTTTCTTGATTCTGTGGGTGGTGGTGCATGGC?GTTCTTAGT [1260] Chlamyd_reinha TGAGAGCTCTTTCTTGATTCTGTGGGTGGTGGTGCATGGCCGTTCTTAGT [1262] Volvox_carteri TGAGAGCTCTTTCTTGATTCTGTGGGTGGTGGTGCATGGCCGTTCTTAGT [1262] Chlorococc_min TGAGAGCTCTTTCTTGATTCTGTGGGTGGTGGTGCATGGCCGTTCTTAGT [1260] Draparn_plum ????????????????????????????????????TGGCCGTTCTTAGT [1254] Uronema_belk ?????????????????TTCTATGG-TGGTG?TG?ATGGCCGTTCTTAGT [1219] Chlamydom_moew T?AGAGCTCTTT?TTGATTCT-TGGGTGGTGGTGCATGGCCGTTCTTAGT [1256] Stephanos_pl ??????CTCTTTCTTGATTCT-TGGGTGGT-GTGC-TGGCCGTTCTTAGT [1261] Carteria_rad TGAGAGCTCTTTCTTGATTCT-TGGGTGGT--TGCATGGCCGTTCTTAGT [1260] Gonium_pecto TGAGAGCTCTTTCTTGATTCTGTGGGTG-T--TGCATGGCCGTTCTTAGT [1256] Chlorella_kess TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1266] Chlorella_vulg TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1268] Protothec_wic TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1263] Chlorella_prot TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1269] Chlorella_min TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1266] Neochloris_aqu TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1263] Neochloris_vig TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1259] Pediastrum_dup TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATAGGCGTTCTTAGT [1264] Scenedesm_obl TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1263] Characium_hin TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1261] Chlorella_fus TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1264] Ankistrodesmus TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1262] Pseudotreb_gig ??????????????????????????????????????GCCGTTCTTAGT [1250] Pleurastr_terr ?????????????????????????????TGGTGCATGGCCGTTCTTAGT [1252] Characium_per TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1265] Parietochl_pse TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1267] Friedmannia_is TGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGT [1266] [ 1310 1320 1330 1340 1350] [ . . . . .] Glycine_max TGGTGGAGCGATTTGTCTGGTT-AATTCCGTTAACCAACGAGACCTCAGC [1314] Oryza_sativa TGGTGGAGCGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1321] Zamia_pumila TGGTGGAGCGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCGGC [1320] Psilotum_n TGGTGGAG-G-TTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1314] Equisetum_ar TGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1315] Atrichum_angus TGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAAC-AACGAGACCTCAGC [1300] Notothylas_bre TGGTGGAGTGA-TTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1291] Phaeoceros_lae TGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1300] Porella_pi TGGTGGAG-G--TTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1314] Conocephal_con TGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1295] Asterella_tene TGGTGG-GTGATTTGTCTGGTT-AATTCCGTTAACGAAGGAGACCTCAGC [1305] Riccia TGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1311] Klebsormid_fla ????????????????????????????????AACGAACGAGACCTCAGC [1321] Coleochaet_nit TCW-GGAGTGATTTGTCTG-TT-AATTC?G?TAACGAAGGAG?CCTCAGC [1302] Fissidens_taxi TGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1295] Plagiomnium_cu TGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1289] Micromonas_pus TGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1309] Mantoniel_squa TGGTGGAGTGATT--TCTGGTT-AATTCCGTTAAC-AAC-AGACCTCWGC [1272] Nephroselm_pyr TGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGC [1304] Pedinomonas_mi TGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCGAC [1290] Tetraselm_cart TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1304] Enteromorpha TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAA-GAGACCTCAGC [1312] Ulva_fasci TGGTGGGTTGCCTTGTCAGGTT-GATTC-GGTAACGAACGAGACCTCAGC [1301] Ulothrix_zo TGATGGGTCTGGCCTTC---TT-GATTCCGGTAA----CGA-ACY-YA-C [1253] Cympolia_barba TCGTGGGTTGCCCTGTCTGGTT-GACTCCGTTAACGAACGAGATCTCAAC [1320] Batophora_oers TC-TGGGTTATCTTGTCTGGTT-GACTCCGTTAACCA---A-ACCTCAGC [1289] Codium_decort CG-TGGGTTGACCT-TCAGGTT-C-CTCCGGTAAY-Y-C-AGACCTCGAC [1304] Cladophoro TCGTGGATTGATTTGTCAGGTT-G-TTCCGG--ACGGA-G-GACCC--GC [1297] Blastophysa_rh TGGTGGGTTGGCTTGTCAGGTT-GATTCCGGT-ACGAACGAGACCTCCGC [1301] Trentepohlia TGGT-GGTTGGCTTGT---GTT-GATTCCGGTAACGAACGAGACCTCAGC [1302] Cephaleuro_par TGGTGGGTTGGCTTGTCGGGTT-GATTCCGGGAACGAACGAGACCTCAGC [1288] Characium_vac TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1310] Dunaliella_par TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1309] Chlamyd_reinha TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1311] Volvox_carteri TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1311] Chlorococc_min TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1309] Draparn_plum TGGTGGGTTGCCTTGTCAGGTT-GATTC-GG-AACGAACG-GACCTCAGC [1300] Uronema_belk TGGTGGGTTGCCTTGTCAGGTT-GATTC?GGTAACGAACGAGACC-CAGC [1267] Chlamydom_moew TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1305] Stephanos_pl TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1310] Carteria_rad TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1309] Gonium_pecto TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1305] Chlorella_kess TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1315] Chlorella_vulg TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1317] Protothec_wic TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1312] Chlorella_prot TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1318] Chlorella_min TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1315] Neochloris_aqu TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1312] Neochloris_vig TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1308] Pediastrum_dup TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1313] Scenedesm_obl TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1312] Characium_hin TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1310] Chlorella_fus TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1313] Ankistrodesmus TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1311] Pseudotreb_gig TGGTGGG-TGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1298] Pleurastr_terr TGGT?GGTTGCCTTGTCAGGTT-GATTCCGGTAACGAAGGAGACCTCAGC [1301] Characium_per TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1314] Parietochl_pse TGGTGGGTTGCCTTGTCAGGTTCGATTCCGGTAACGAACGAGACCTCAGC [1317] Friedmannia_is TGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGC [1315] [ 1360 1370 1380 1390 1400] [ . . . . .] Glycine_max CTGCTAAATAGCTAT--------------------------AGCTTCTTA [1338] Oryza_sativa CTGCTAACTAGCTATGCGGAGCCATCCCTCCGCAGCT----AGCTTCTTA [1367] Zamia_pumila CTGCTAACTAGCTACGCGGAGGGTTTCTTTCGTGGCC----AGCTTCTTA [1366] Psilotum_n CTGCTAACTAGTTACGCGAAGGATCCTCTTCGTGGCC----AACTT-TTA [1359] Equisetum_ar CTGCTAACTAGTTACGCGAAGACTTGTCTTCGTGGCC----AACTTCTTA [1361] Atrichum_angus CTGCTAACTAGTTACACGAAGAATC-TCTTTGTGGCC----AACTT-TTA [1344] Notothylas_bre CTGCTAACTAGTTACAC-AAGAACCTTCTTCGTGGCC----AACTTCTTA [1336] Phaeoceros_lae CTGCTAACTAGTTACACGAAGAACCTTCTTCGTGGCC----AACTTCTTA [1346] Porella_pi CTGCTAACTAGTTACACGAAGAATCTTCTTTGTGGCC----AACTT-TTA [1359] Conocephal_con CTGCTAACTA-CTACGCGAGTCCATTTTTTGTCCTGCGC--AGCTT-TTA [1341] Asterella_tene CTGCTAACTA-CTACGCGGGGGTWCTCCCCTGCGGCC----AGCTT-TTA [1349] Riccia CTGCTAACTAGCTACGCGGGGGTTCTCCCTGCGGCC-----AGCTT---A [1353] Klebsormid_fla CTGCTAACTAGTTACACGGAGATTCTTCTCCGTGGCC----AACTTCTTA [1367] Coleochaet_nit CTGCTAACTAGGCTAACGTTTTGTTGGGAC------------ACTTGTTA [1340] Fissidens_taxi CTGCTAACTAGTTACGCGAAGGATTTCTCTCCTTGGCGGCCAACTTCTTA [1345] Plagiomnium_cu CTGCTAACTAGTTACGCGAAGGATTTCCTCCTTTGCGGCC-AACTTC--A [1336] Micromonas_pus CTGCTAAATAGTCATACGCTACTCT-TAGCGCAGT------GACTTCTTA [1352] Mantoniel_squa CTGCTAAATAGTCATACGCTACTCT-TAGCGCAGT------GACTTCTTA [1315] Nephroselm_pyr CTGCTAAATAGTCACGCGATGCTCCTGCATGGCGGCG----GACTT-TTA [1349] Pedinomonas_mi CTGCTAAATAGGTTCAGTATCGATGCGTCGATGCTTG----GAGCTTTTA [1336] Tetraselm_cart CTGCTAAATAGTTACTCCTACTTTGGTAGGAGGTG------AACTT-TTA [1347] Enteromorpha CTGCTAAATAGTGACGATTGCTCGGCAGTCGCG--------CGCTT-TTA [1353] Ulva_fasci CTGCTAAATAGTGACGTCTGCTTCGGCAGTCGCG-------CGCTTGTTA [1344] Ulothrix_zo C-GCTAAA-AGTTCCYTYGGCAGTTGGCA------------CACTT-TTA [1288] Cympolia_barba CTACTAAATAGTATTACATCATTGTAGAAATATAT------ACCTTCTTA [1364] Batophora_oers CT-CTAAA-A-CGGCCTCTCCTTAGGAGTGC----------CCCYTCYTA [1326] Codium_decort CTGCCAAATAGCACCGGCCCTTCCGATGGC-----------ACCTTCTTG [1343] Cladophoro CTACTAACTAGCTCTACCTGAACTTCAGGTAGCC-------AGCTT-TTA [1339] Blastophysa_rh CTGCTAAATAGCCACTCCGGGGGCCC---------------GGCTTCTTA [1336] Trentepohlia CTGCTAAATAGTA-CTTTCGGTT---CCCA-GC--------AACTTCTTA [1339] Cephaleuro_par CTGCTAAATAGTTGCCCCCGCCTCGGTGGGGGTCGA-----GACTTGTTA [1333] Characium_vac CTGCTAAATAGTAAC--------------------------TACTTCTTA [1334] Dunaliella_par CTACTAAATAGTCAC--------------------------GACTTCTTA [1333] Chlamyd_reinha CTGCTAAATAGTCAG--------------------------GACTTCTTA [1335] Volvox_carteri CTGCTAAATAGTCAGCATGACTGCGGTGCGCA---------GACTTCTTA [1352] Chlorococc_min CTGCTAAATAGTCAC--------------------------GACTTCTTA [1333] Draparn_plum CTGCTAAATAGTCACCTTCTCGCGGCAGGC-----------CACTTC--A [1337] Uronema_belk CTGCTAAATAGTCACC-----GCGGCAGGA-----------GACTT-TTA [1300] Chlamydom_moew CTGCTAAATAGTCGGCGGTCCTTTCTGGATCGCCTC-----GACTTCTTA [1350] Stephanos_pl CTGCTAAATAGTCACGGGACCTTGGTACACGCTT-------GACTT-TTA [1352] Carteria_rad CTGCTAAATAGTCACGATTGCTTTTTGGCAGTCGGCA----GACTTCTTA [1355] Gonium_pecto CTGCTAAATAGTCAGCATCCTGCGGTGCGCA----------GACTT-TTA [1344] Chlorella_kess CTGCTAAATAGTCAC--------------------------GACTTCTTA [1339] Chlorella_vulg CTGCTAAATAGTCAC--------------------------GACTTCTTA [1341] Protothec_wic CTGCTAAATAGTGCT--------------------------TACTTCTTA [1336] Chlorella_prot CTGCTAAATAGTTTT--------------------------AACTTCTTA [1342] Chlorella_min CTGCTAAATAGTCAC--------------------------GACTTCTTA [1339] Neochloris_aqu CTGCTAAATAGTCAC--------------------------GACTTCTTA [1336] Neochloris_vig CTGCTAAATAGT???--------------------------GACTTCTTA [1332] Pediastrum_dup CTGCTAAATAGTCAC--------------------------GACTTCTTA [1337] Scenedesm_obl CTGCTAAATAGTCTC--------------------------GACTTCTTA [1336] Characium_hin CTGCTAAATAGTCCG--------------------------GACTTCTTA [1334] Chlorella_fus CTGCTAAATAGTCCT--------------------------GACTTCTTA [1337] Ankistrodesmus CTGCTAAATAGTCAC--------------------------GACTTCTTA [1335] Pseudotreb_gig CTGCTAAATAGTCACGGCTGCTTTYCAGTCGGCA-------GACTT-TTA [1340] Pleurastr_terr CTGCTAAATAGTC-CTAATCTTCTCGCGGTTAGCT------GACTT?TTA [1344] Characium_per CTGCTAAATAGTC-C--------------------------GACTTCTTA [1337] Parietochl_pse CTGCTAAATAGTCAC--------------------------GACTTCTTA [1341] Friedmannia_is CTGCTAAATAGTCAC--------------------------GACTTCTTA [1339] [ 1410 1420 1430 1440 1450] [ . . . . .] Glycine_max GAGGGACTATGGCCGCTTAGGCCAC----GGAAGTTTGAGGCAATAACAG [1384] Oryza_sativa GAGGGACTATGGCCGTTTAGGCCAC----GGAAGTTTGAGGCAATAACAG [1413] Zamia_pumila GAGGGACTATGGCCGTTTAGGCCAT----GGAAGTTTGAGGCAATAACAG [1412] Psilotum_n GAGGGACTATGGCCGCCTAGGCCAT----GGA?????????????????? [1405] Equisetum_ar GAGGGACTATGGCCGTCTAGGCCAT----GGA?????????????????? [1407] Atrichum_angus GAGGGACTATTGGCGTCT-GCCAAT----GGAA????????????????? [1389] Notothylas_bre GAGGGACTATTTGCGTCTA-CGAAT----GGAA????????????????? [1381] Phaeoceros_lae GAGGGACTATTTGCGTCTAGCGAAT----GGAA????????????????? [1392] Porella_pi GAGGGACTATT--CGTCTAGCCAAT----GGA?????????????????? [1403] Conocephal_con GAGGGACT---GG--TC--GCC-AC----GGAA????????????????? [1379] Asterella_tene GAGGGACTGTCGGCGTCTAGCCGA-----GGA?????????????????? [1394] Riccia GAGGGACT--CGG--TCTAGCCGAC----GGAA????????????????? [1395] Klebsormid_fla GAGGGACTATTTGGCGTCTACAGCCAAT-GGAA?TTTGA??????????? [1416] Coleochaet_nit GAGGGACTGTGAGGCGCTTAGCTCAT---GGA?????????????????? [1387] Fissidens_taxi GAGGGACTATCGGCGTCT-AGCCGAT---GGAA?TTT?A??????????? [1391] Plagiomnium_cu GAGGGACTATCGGCGTC---GCCGAT---GGAAG?TTGA??????????? [1380] Micromonas_pus GAGGGACTATGTGCGTTT-GCACAT----GGAA-TT?????????????? [1396] Mantoniel_squa GAGGGACTATGTGCGTTTWGCACAT----GGAA-TTTGA??????????? [1360] Nephroselm_pyr GAGGGACTATCGGTATT-A-CCGAT----GGA?????????????????? [1393] Pedinomonas_mi GAGGGACT-TCGGATCC-A-CCGGT----GGAAGT??????????????? [1379] Tetraselm_cart GAGGGACTATTGGCGTTT-GCCAAT----GGAAGTTA????????????? [1392] Enteromorpha GAGGGACTGTTGGCG-TCTAGCCAAT---GGAAGTAT????????????? [1399] Ulva_fasci GAGGGACTGTTGGCG-TCTAGCCAATT--GGAAGTATGA??????????? [1391] Ulothrix_zo GAGGGACT-TTGGCG-TCT-GCCAAT---GGAAGTAT-A??????????? [1331] Cympolia_barba GGGGAACTATC-AGTT-CAAACCGAT---GGAAG???????????????? [1409] Batophora_oers -A-GGAC--TCGGCG--CAA?????????????????????????????? [1370] Codium_decort GAGGGACTGGCGCGAGAGCCGGACGCG??????????????????????? [1393] Cladophoro GAGGGACTCTCGGAA-TGAAACCAA----GGAA????????????????? [1384] Blastophysa_rh GAGGGACTATGGCTCGAATAGGCCAT---GGAA????????????????? [1383] Trentepohlia -A---ACTATTACATCA????????????????????????????????? [1385] Cephaleuro_par GAGGGACTATTAGCG-ATTTTCA--CTAATT--AA-T????????????? [1377] Characium_vac GAGGGACTATTGGCG-TTTAGTCAAT---GGAAGTGTGAGGCAATAACAG [1380] Dunaliella_par GAGGGACTATTGGCG-TTTAGCCAAT---GGAAGTGTGAGGCAATAACAG [1379] Chlamyd_reinha GAGGGACTATTGGCG-TTTAGCCAAT---GGAAGTATGAGGCGATAACAG [1381] Volvox_carteri GAGGGACTATTGGCG-TTCAGCCAAT---GGAAGTATGAGGCGATAACAG [1398] Chlorococc_min GAGGGACTATTGGCG-TTTAGCCAGT---GGAAGTGTGAGGCAATAACAG [1379] Draparn_plum GAGGGACTATTGCCG-TTTAGGC??????????????????????????? [1386] Uronema_belk GAGGGACTATTGTC---TTAGGCAAT---GAAGTA??????????????? [1344] Chlamydom_moew GAGGGACTATTGACGTT-TAGTCAAT---GGAAG???????????????? [1396] Stephanos_pl GAGGGACTATTGGCGTTACAGTCAAT---GGA?????????????????? [1399] Carteria_rad GAGGGACTATTGTCG-TTTAGGCAG????????????????????????? [1404] Gonium_pecto GAGGGACTATTGGCG-TTCAGCCAAT---GGA?????????????????? [1390] Chlorella_kess GAGGGACTATTGGCG-A-TAGCCAAT---GGAAGCATGAGGCAATAACAG [1384] Chlorella_vulg GAGGGACTATTGGCG-A-TAGCCAAT---GGAAGCATGAGGCAATAACAG [1386] Protothec_wic GAGGGACTATTGGCG-A-TAGCCAAT---GGAAGCTTGAGGCAATAACAG [1381] Chlorella_prot GAGGGACTCTCGGCG-A-TAGCCGAG---GGAAGCTTGAGGCAATAACAG [1387] Chlorella_min GAGGGACTATTGGCG-A-TAGCCAGT---GGAAGCATGAGGCAATAACAG [1384] Neochloris_aqu GAGGGACTATTGGCG-TTTAGTCAAT---GGAAGTATGAGGCAATAACAG [1382] Neochloris_vig GAGGGACTATTGGCG--TTAGTCAATT--GGAAGTATGAGGCAATAACAG [1378] Pediastrum_dup GAGGGACTATTGGCG-TTTAGTCAAT---GGAAGTATGAGGCAATAACAG [1383] Scenedesm_obl GAGGGACTATTGGCG--TTAGTCAAT---GGAAGTATGAGGCAATAACAG [1381] Characium_hin GAGGGACTATTGACG-TTTAGTCAAT---GGAAGTATGAGGCAATAACAG [1380] Chlorella_fus GAGGGACTATTGGCG--TTAGTCAAT---GGAAGTATGAGGCAATAACAG [1382] Ankistrodesmus GAGGGACTGTTGGCG--TTAGCCAAC---GGAAGTATGAGGCAATAACAG [1380] Pseudotreb_gig GAGGGACTTTTGGCG-ACTAGCCAAA---GGAAGTGTG???????????? [1386] Pleurastr_terr GAGGGACTATTGGCG-TTT-GTCAAT---GGAA-TAT????????????? [1388] Characium_per GAGGGACTTTCGGCG-TTTAGCCGAA---GGAAGTGTGAGGCGATAACAG [1383] Parietochl_pse GAGGGACTCTCGGCG-ACTAGCCGAT---GGAAGTGTGAGGCGATAACAG [1387] Friedmannia_is GAGGGACTTTTGGCGCCTTAGCCAAA---GGAAGTGTGAGGCGATAACAG [1386] [ 1460 1470 1480 1490 1500] [ . . . . .] Glycine_max GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1433] Oryza_sativa GTCTGTGATGCCCTTAGATGTTCTGGG--CGCACGCGCGCTACACTGATG [1461] Zamia_pumila GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1461] Psilotum_n ?????????????????????????????????????????????????? [1455] Equisetum_ar ?????????????????????????????????????????????????? [1457] Atrichum_angus ?????????????????????????????????????????????????? [1439] Notothylas_bre ?????????????????????????????????????????????????? [1431] Phaeoceros_lae ?????????????????????????????????????????????????? [1442] Porella_pi ?????????????????????????????????????????????????? [1453] Conocephal_con ?????????????????????????????????????????????????? [1429] Asterella_tene ?????????????????????????????????????????????????? [1444] Riccia ?????????????????????????????????????????????????? [1445] Klebsormid_fla ?????????????????????????????????????????????????? [1466] Coleochaet_nit ?????????????????????????????????????????????????? [1437] Fissidens_taxi ?????????????????????????????????????????????????? [1441] Plagiomnium_cu ?????????????????????????????????????????????????? [1430] Micromonas_pus ?????????????????????????????????????????????????? [1446] Mantoniel_squa ?????????????????????????????????????????????????? [1410] Nephroselm_pyr ?????????????????????????????????????????????????? [1443] Pedinomonas_mi ?????????????????????????????????????????????????? [1429] Tetraselm_cart ?????????????????????????????????????????????????? [1442] Enteromorpha ?????????????????????????????????????????????????? [1449] Ulva_fasci ?????????????????????????????????????????????????? [1441] Ulothrix_zo ?????????????????????????????????????????????????? [1381] Cympolia_barba ?????????????????????????????????????????????????? [1459] Batophora_oers ?????????????????????????????????????????????????? [1420] Codium_decort ?????????????????????????????????????????????????? [1443] Cladophoro ?????????????????????????????????????????????????? [1434] Blastophysa_rh ?????????????????????????????????????????????????? [1433] Trentepohlia ?????????????????????????????????????????????????? [1435] Cephaleuro_par ?????????????????????????????CGCACGCGCGCTACACTGATG [1427] Characium_vac GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1429] Dunaliella_par GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1428] Chlamyd_reinha GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGACG [1430] Volvox_carteri GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGACG [1447] Chlorococc_min GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1428] Draparn_plum ?????????????????????????????????????????????????? [1436] Uronema_belk ?????????????????????????????????????????????????? [1394] Chlamydom_moew ?????????????????????????????????????????????????? [1446] Stephanos_pl ?????????????????????????????????????????????????? [1449] Carteria_rad ?????????????????????????????????????????????????? [1454] Gonium_pecto ?????????????????????????????????????????????????? [1440] Chlorella_kess GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1433] Chlorella_vulg GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1435] Protothec_wic GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1430] Chlorella_prot GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACAATGATG [1436] Chlorella_min GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1433] Neochloris_aqu GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1431] Neochloris_vig GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1427] Pediastrum_dup GTCTGTGATGCCCTTAGATGTTCTGGGGCCGCACGTGCGCTACACTGATG [1433] Scenedesm_obl GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1430] Characium_hin GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1429] Chlorella_fus GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1431] Ankistrodesmus GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCAC-CGCGCTACACTGACG [1428] Pseudotreb_gig ?????????????????????????????????????????????????? [1436] Pleurastr_terr ?????????????????????????????????????????????????? [1438] Characium_per GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGACG [1432] Parietochl_pse GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1436] Friedmannia_is GTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATG [1435] [ 1510 1520 1530 1540 1550] [ . . . . .] Glycine_max TATTCAACGAGTCTATAGCCTTGGCCGACAGGTCCGGGTAATCTTTG-AA [1482] Oryza_sativa TATCCAACGAGTATATAGCCTGGTCCGACAGGCCCGGGTAATCTTGGGAA [1511] Zamia_pumila TATTCAACGAGTCTATAACCTGGGCCGGGAGGTCCGGGAAATCTGGCGAA [1511] Psilotum_n ?????????????????????????????????????????????????? [1505] Equisetum_ar ?????????????????????????????????????????????????? [1507] Atrichum_angus ?????????????????????????????????????????????????? [1489] Notothylas_bre ?????????????????????????????????????????????????? [1481] Phaeoceros_lae ????????????????????????????????????????ATCTTTG-AA [1491] Porella_pi ?????????????????????????????????????????????????? [1503] Conocephal_con ?????????????????????????????????????????????????? [1479] Asterella_tene ?????????????????????????????????????????????????? [1494] Riccia ?????????????????????????????????????????????????? [1495] Klebsormid_fla ?????????????????????????????????????????????????? [1516] Coleochaet_nit ?????????????????????????????????????????????????? [1487] Fissidens_taxi ???????????????????????????????????????AATCTTCTGAA [1491] Plagiomnium_cu ?????????????????????????????????????????????????? [1480] Micromonas_pus ?????????????????????????????????????????????????? [1496] Mantoniel_squa ?????????????????????????????????????????????????? [1460] Nephroselm_pyr ?????????????????????????????????????????????????? [1493] Pedinomonas_mi ?????????????????????????????????????????????????? [1479] Tetraselm_cart ?????????????????????????????????????????????????? [1492] Enteromorpha ?????????????????????????????????????????????????? [1499] Ulva_fasci ????????????????????????????ACAGAGTCGGGTAATCTT-G-A [1489] Ulothrix_zo ?????????????????????????????????????????????????? [1431] Cympolia_barba ????????????????????????????????????GG?AATCTATG-CA [1508] Batophora_oers ?????????????????????????????????????????????????? [1470] Codium_decort ?????????????????????????????????????????????????? [1493] Cladophoro ?????????????????????????????????????????????????? [1484] Blastophysa_rh ?????????????????????????????????????????????????? [1483] Trentepohlia ?????????????????????????????????????????????????? [1485] Cephaleuro_par TATTCAACGAGTCTATAGCCTTGGCCGACAGGTCCGGGTAATCTTTG-AA [1476] Characium_vac CATTCAACGAGCCTAT--CCTTGGCCGAGAGGTCCGGGTAATCTTTG-AA [1476] Dunaliella_par CATTCAACGAGCCTAT--CCTTGGCCGAGAGGTCCGGGTAATCTTTG-AA [1475] Chlamyd_reinha CGACCAACGAGCCTAT--CCTTGGCCGAGAGGCCCGGGTAATCTT-GTAA [1477] Volvox_carteri CGACCAACGAGCCTAT--CCTTGGCCGAGAGGCCCGGGTAATCTT-GTAA [1494] Chlorococc_min CATTCAACGAGCCTAT--CCTTGGCCGAGAGGCCCGGGTAATCTTTG-AA [1475] Draparn_plum ?????????????????????????????????????????????????? [1486] Uronema_belk ?????????????????????????????????????????????????? [1444] Chlamydom_moew ????????????????????????-????????????????????????? [1495] Stephanos_pl ?????????????????????????????????????????????????? [1499] Carteria_rad ?????????????????????????????????????????????????? [1504] Gonium_pecto ?????????????????????????????????????????????????? [1490] Chlorella_kess CAATCAACGAGCCTAG--CCTTGGCCGAGAGGCCCGGGTAATCTTTG-AA [1480] Chlorella_vulg CATTCAACGAGCCTAG--CCTTGGCCGAGAGGCCCGGGTAATCTTCG-AA [1482] Protothec_wic CATGCAACGAGCCTAG--CCTTGGCCGAGAGGCCCGGGTAATCTCAT-AA [1477] Chlorella_prot CGGTCAACGAGCCCAG--CCTTGGCCGACAGGCCCGGGTAATCTCGC-AA [1483] Chlorella_min CATTCAGCGAGCCTAG--CCTTGACCGAGAGGTCCGGGTAATCTTTG-AA [1480] Neochloris_aqu CGTTCAACAAGCCTAT--CCTTGACCGAGAGGTCCGGGTAATCTTTG-AA [1478] Neochloris_vig CGTTCAACAAGCCTAT--CCTTGACCGAGAG---CGGGTAATCTTTG-AA [1471] Pediastrum_dup CATTCAACGAGCCTAT--CCTTGACCGAGAGGTCCGGGTAATCTTTG-AA [1480] Scenedesm_obl CATTCAACAAGCCTAT--CCTTGACCGAAGGGTCTGGGTAATCTTTG-AA [1477] Characium_hin CATTCAACGAGCCTAT--CCTTGGCCGAGAGGTCCGGGTAATCTTTG-AA [1476] Chlorella_fus CATTCAACAAGCCTAT--CCTTGACCGAAAGGTCCGGGTAATCTTTG-AA [1478] Ankistrodesmus CATTCAACGAGCCTAT--CCTTGACCGAGAGGTCTGGGTAATCTGTG-AA [1475] Pseudotreb_gig ?????????????????????????????????????????????????? [1486] Pleurastr_terr ?????????????????????????????????????????????????? [1488] Characium_per CATTCAACGAGTCTAT--CCTTGGCCGAGAGGTCCGGGTAATCTGAG-AA [1479] Parietochl_pse CATTCAACGAGCCTAG--CCTTGGCCGACAGGCCCGGGTAATCTTGC-AA [1483] Friedmannia_is CAATCAACGAGCCTAT--CCTTGACCGACAGGTCCGGGTAATCTTTG-AA [1482] [ 1560 1570 1580 1590 1600] [ . . . . .] Glycine_max ATTTCATCGTGATGGGGATAGATCATTGCAATTGTTGGTCTTCAACGAGG [1532] Oryza_sativa ATTTCATCGTGATGGGGATAGATCATTGCAATTGTTGGTCTTCAACGAGG [1561] Zamia_pumila ATTTCATCGTGATGGGGATAGATCATTGCAATTATTGATCTTCAACGAGG [1561] Psilotum_n ?????????????????????????????????????GTCTTCAAC-A-G [1553] Equisetum_ar ??????????????????????????????????????TCTTCAACTAGG [1557] Atrichum_angus ?????????????????ATAGATCATTGC-ATTATTGATCTTCAA--A-G [1535] Notothylas_bre ???????????????GGA-AGATCATTGC-ATTATTGATCTTCAAC-AGG [1528] Phaeoceros_lae ATTTCATCGTGAT--GGATAGATCATTGCAATTATTGATCTT-AA----G [1534] Porella_pi ??????????????????????????????????????TCTTCAAC-AGG [1552] Conocephal_con ??????????????????TAGATCATT?C?ATT?TTGATCTTGAA----- [1524] Asterella_tene ?????????????????????????????????????????????????? [1544] Riccia ?????????????????????????TTGC?ATTATTGATCTTCAAC-A-G [1543] Klebsormid_fla ?????????????????????????????????????????????????? [1566] Coleochaet_nit ????????????????????????????????????G-TCTCGAACGA-G [1535] Fissidens_taxi ATTTCATCGTGAT--GGATAGATCATTGCAATTATTGATCTTCAAC-A-G [1537] Plagiomnium_cu ?????????????????????ATCATTGC-ATTATTGATCTTCAAC---G [1526] Micromonas_pus ???????????????????????????????????????????????AG- [1545] Mantoniel_squa ?????????????????????????????????????????????????? [1510] Nephroselm_pyr ???????????????????????????????????????????????AGG [1543] Pedinomonas_mi ?????????????????????????????????????????????????? [1529] Tetraselm_cart ?????????????????????????????????????????????????? [1542] Enteromorpha ?????????????????????????????????????????????????? [1549] Ulva_fasci AACT--ATCGT--TGGGA---AACATTGCAATTATTGTTCTTCAAC-AGG [1531] Ulothrix_zo ?????????????????????????????????????????????????? [1481] Cympolia_barba CATGCTTCGTGAT?AGGACGAATATTGGAATTGTT-ATTCTTTAACG--G [1555] Batophora_oers ??????????????????????????????????????????-??????? [1519] Codium_decort ?????????????????????????????????????????????????G [1543] Cladophoro ??????????????????????????????????????????C-ACGAGG [1533] Blastophysa_rh ??????????????????????AC-TGCAATT-T--GGTCT-CAACG--G [1526] Trentepohlia ??????????????????????????????????????????-??????? [1534] Cephaleuro_par ATTTCATCGTGATGGGGATAGATCATTGCAATTGTTGGTCTTCAACGAGG [1526] Characium_vac ACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGG [1526] Dunaliella_par ACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGG [1525] Chlamyd_reinha ACCGCGTCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGG [1527] Volvox_carteri ACCGCGTCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGG [1544] Chlorococc_min ACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGG [1525] Draparn_plum ????????????????????????????????????????????????GG [1536] Uronema_belk ????????????????????????????????????AGTCTTCAAC-A-G [1492] Chlamydom_moew ????????????????????????????????????????????????GG [1545] Stephanos_pl ?????????????????????????????????????????????????G [1549] Carteria_rad ??????????????????????????????????????TCTT-AACGAGG [1553] Gonium_pecto ??????????????????????????????????????????????ACGG [1540] Chlorella_kess ACTGCATCGTGATGGGGATAGATTATTGCAATTATTAATCTTCAACGAGG [1530] Chlorella_vulg ACTGCATCGTGATGGGGATAGATTATTGCAATTATTAATCTTCAACGAGG [1532] Protothec_wic CCTGCATCGTGATGGGGATAGATTATTGCAATTATTAATCTTCAACGAGG [1527] Chlorella_prot CCCGCATCGTGATGGGGATAGATCATTGCAATTATTGATCTTCAACGAGG [1533] Chlorella_min TCTGCATCGTGATGGGGATAGATTATTGCAATTATTAATCTTCAACGAGG [1530] Neochloris_aqu ACCGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGG [1528] Neochloris_vig ACCGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGG [1521] Pediastrum_dup ACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGG [1530] Scenedesm_obl ACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGG [1527] Characium_hin ACTGCATCGTGATGGGGCTAGACTTTTGCAATTATTAGTCTTCAACGAGG [1526] Chlorella_fus ACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGG [1528] Ankistrodesmus ACTGCGTCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGG [1525] Pseudotreb_gig ?????????????????????????????????????????????????? [1536] Pleurastr_terr ?????????????????????????????????????GTCTTCAACGAGG [1538] Characium_per ACTGCGTCGTGACGGGGCTAGATTATTGCAATTATTAATCTTCAACGAGG [1529] Parietochl_pse ACTGCATCGTGATGGGGCTAGATTATTGCAATTATTAATCTTCAACGAGG [1533] Friedmannia_is ACTGCATCGTGATGGGGATAGATTATTGCAATTATTAATCTTCAACGAGG [1532] [ 1610 1620 1630 1640 1650] [ . . . . .] Glycine_max AATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCC [1581] Oryza_sativa AATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCC [1610] Zamia_pumila AATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCC [1610] Psilotum_n AATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCC [1602] Equisetum_ar AATTCCTAGTAAGC-CGAGTCATCAGCTCGCGTTGACTA--GTCCCTGCC [1604] Atrichum_angus AATTCC-AGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1583] Notothylas_bre AAT-CCT-GTAAGCGCGAGTCATCAGCTCGCGTT-ACTAC-GTCCCTGCC [1574] Phaeoceros_lae AATT--TAGTAAGCGCGAGTCATCAGCTCG-GTTGACTA--GTCCCTGCC [1579] Porella_pi AAT-CCTAGTAAGC-CGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCC [1599] Conocephal_con AATTCC--GTA--CGCGAGTC-T----TCGCGCTGATT-C-GTCCCTGCC [1563] Asterella_tene ?????????????????AGTCATCAGCTCGCGTTGACTAC-GTCCCTGCC [1593] Riccia AATTCC-AGTAA---CGAGTCGAACAGTCGCGCTGACTAC-GTCCCTGCC [1588] Klebsormid_fla ???????????????????????????TCGCGTTGATTTA-GTCCCTGCC [1615] Coleochaet_nit AATACCTAGTAAGCGCTCGTCATCAGCGTGCGCT-ACTAC-GTCCCTGCC [1583] Fissidens_taxi AATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCC [1586] Plagiomnium_cu AATTCC-AGTAAGCGCGAGTCATCAGCTCG-GTTGACTAC--TCCCTGCC [1572] Micromonas_pus AATGCCT-GTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1593] Mantoniel_squa ?????????????????????????????????????????????????? [1560] Nephroselm_pyr AATGCCT-GTAA--GCGAGTCATCAGCTCGCGTTGATTA--GTCCCTGCC [1588] Pedinomonas_mi ?????????????????????????????????????????GTCCCTGTC [1579] Tetraselm_cart ???????????????????TCATCAGATCGCGTTGATTA--GTCCCTGCC [1590] Enteromorpha ????CCTAGTAAGCGCGAGTCATCATCTCGCGTTGATTAC-GTCCCTGCC [1598] Ulva_fasci AATGCCTAGTAAG--CGAGTCATCATCTCGCGTTGATTAC-GTCCCTGCC [1578] Ulothrix_zo ?????????????????????????????G-GTT-ATTA---TCCCT-CC [1525] Cympolia_barba AATGCCTAGTAAGTACCAGTCATCAACCGGTGTTGATTAT-GTCCCTGCT [1604] Batophora_oers ????????????????????????AGCTTGCGTTGATTA----CCCTGCC [1565] Codium_decort AATGCCTAGTA---CCGGGT--GGATCCCGCGACGATTGC-GTCCCTGCC [1587] Cladophoro AATGC-T-GT-AGCGCGAGTCATCAACTCGCGTTGATTAC-GTCCCTGCC [1579] Blastophysa_rh AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1575] Trentepohlia ??????????????????????????????CGTTGATTAT---CCCTGCC [1581] Cephaleuro_par AATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCC [1575] Characium_vac AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1575] Dunaliella_par AATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1574] Chlamyd_reinha AATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1576] Volvox_carteri AATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1593] Chlorococc_min AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1574] Draparn_plum AATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTACCGTCCCTGCC [1586] Uronema_belk AATGCCTAGTAAGCG--AGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1539] Chlamydom_moew AATGCCTAGTAAGCGTGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1594] Stephanos_pl AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1598] Carteria_rad AATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1602] Gonium_pecto AATGCCTAGTAAGCGCGAGTCATCAGCTCG-GTTGATTAC-GTCCCTGCC [1588] Chlorella_kess AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1579] Chlorella_vulg AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1581] Protothec_wic AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1576] Chlorella_prot AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1582] Chlorella_min AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1579] Neochloris_aqu AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1577] Neochloris_vig AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1570] Pediastrum_dup AATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1579] Scenedesm_obl AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1576] Characium_hin AATGCCTAGTAAGCGCGATTCATCAGATCGCGTTGATTAC-GTCCCTGCC [1575] Chlorella_fus AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1577] Ankistrodesmus AATGCCTAGTAGGCGCGATTCATCAGATCGCGCCGATTAC-GTCCCTGCC [1574] Pseudotreb_gig ????CCTAGTAAGCG--AGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1583] Pleurastr_terr AATGCCTAGTAAGCG--AGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1585] Characium_per AATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCC [1578] Parietochl_pse AATGCCTAGTAAGGCCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1582] Friedmannia_is AATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCC [1581] [ 1660 1670 1680 1690 1700] [ . . . . .] Glycine_max CTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1628] Oryza_sativa CTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1657] Zamia_pumila CTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGATCC---GGTGA [1657] Psilotum_n CTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1649] Equisetum_ar CTTTGTACACACTGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1651] Atrichum_angus CTTTGTACACACC-CCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1629] Notothylas_bre CTTTGTACACAC-GCC-GTCGCTCCTACCGATTGAATGGTCC---GGTGA [1619] Phaeoceros_lae CTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1626] Porella_pi CTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATGGTCC----GTGA [1643] Conocephal_con CTTTGT-C-C-CCGCCC--CGCTCCT-CCGATTGAATGGTCC---GGTGA [1604] Asterella_tene CTTTGTACACAC-GCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1639] Riccia CTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1635] Klebsormid_fla CTTTGTACACAC-GCCCGTCGCTCCTACCGATTGAATGATCC---GGTGA [1661] Coleochaet_nit CTTTGTACACAC-GCCCGTCGCTCCTACCGATAGAATGCTCC---GGTGA [1629] Fissidens_taxi CTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1631] Plagiomnium_cu CTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1617] Micromonas_pus CTTTGTACACACC-CCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1639] Mantoniel_squa ?????????????????????????????????????????????????? [1610] Nephroselm_pyr CTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATG-TGC--TGGT?A [1633] Pedinomonas_mi CTTTGTAC-CAC-GCCCGT-GCTACTACCGATTGAATC-TTT---GGTGA [1622] Tetraselm_cart CTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATG-TG--TTGGTGA [1635] Enteromorpha CTTTGTACACACCGCCCGTCGCTCCTACCGATTGAACG-TGC--TG--GA [1643] Ulva_fasci CTTTGTACACAC-GCCCGTCGCTCCTACCGATTGAACG-TGC--TGGTGA [1624] Ulothrix_zo CTTTGTACA-AC--CCCGTC---CC--CCGATTGAATG--GC-GTAAAGA [1564] Cympolia_barba CTTTGT-CTCACCGCC-GTCGCTTGATCCGACGTTAC-AGT---TGGTGA [1648] Batophora_oers CTYT--AC-CAC--CC-GTCGCTTGATCCTGTCTTGC-A-T----YGTGA [1603] Codium_decort CTTTGTACACAC-GCC-GTCGCT-GATACTGATGGCAG-AAC--TGG--A [1629] Cladophoro GTTTGTACACACCGCCCGTCGCTCC-ACCGATTGGGTG-TGCG-T---GA [1623] Blastophysa_rh CTTTGT-C-C-CCGCC-GTCGCTCCTACC-ATT-GATG-TGC--TGGTGA [1616] Trentepohlia ----GTAC-C-CC-CCCGT-GCTCCTTCCGATTGGGTG-TGG--TGGTGA [1620] Cephaleuro_par CTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA [1622] Characium_vac CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1622] Dunaliella_par CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1621] Chlamyd_reinha CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1623] Volvox_carteri CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1640] Chlorococc_min CTTTGTACACAC-GCCCGTCGCTCCTACCGATTGAGTG-TGC--TGGTGA [1620] Draparn_plum CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-T-C--TGGT-A [1631] Uronema_belk CTTTGTACACAC-GCCCGTCGCTCCT-CCGATTGGGTG-TGT--GGGTGA [1584] Chlamydom_moew CTTTGTACWYWC-GCCCGTYGCTCCTACCGATTGGGTG-TGC--TGGTGA [1640] Stephanos_pl CTTTGTACACACCGCCCGTCGCTCC-ACCGATTGGGTG-TGC--TGGTGA [1644] Carteria_rad CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1649] Gonium_pecto CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1635] Chlorella_kess CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1626] Chlorella_vulg CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1628] Protothec_wic CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1623] Chlorella_prot CTTTGTACACACCGCCCGTCGCTCCTACCGATTGAGTG-TGC--TGGTGA [1629] Chlorella_min CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1626] Neochloris_aqu CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1624] Neochloris_vig CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1617] Pediastrum_dup CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1626] Scenedesm_obl CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1623] Characium_hin CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1622] Chlorella_fus CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1624] Ankistrodesmus CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1621] Pseudotreb_gig CTTTGTACACAC-GCCCGTCGCTCCTACCGATTGGGTG-TGC--T-GTGA [1628] Pleurastr_terr CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1632] Characium_per CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1625] Parietochl_pse CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGA [1629] Friedmannia_is CTTTGTACACACCGCCCGTCGCTCCTACCGATTGGATG-TGC--TGGTGA [1628] [ 1710 1720 1730 1740 1750] [ . . . . .] Glycine_max AGTGTTCGG--ATTGCGGT------------------------------- [1645] Oryza_sativa AGTGTTCGG--ATCGCGGCGACGGGGGCGGTTCGCCGCCCCCGACGTCGC [1705] Zamia_pumila AGTGTTCGG--ATCGTGCCGACGACGGCGGTTCGCTGGGCGCGACGTCGC [1705] Psilotum_n AGTTTTCGG--ATTGCGGCGAGCGGTCCGCCGGCACGTTGT--------- [1688] Equisetum_ar AGTTTTCGG--ATT-CGGCGACGCTGGCGGT-CGCCGGCGACGTTGT--- [1694] Atrichum_angus AGTTTTCGG--ATCG--GG-TG-ATCGGGTT-G-GTTCGG?GACTTGT-- [1669] Notothylas_bre AGTTTTCGG--ATTG-CGGCGACACCGGGTCACCGCCGGGGACGTT-T-- [1663] Phaeoceros_lae AGTTTTCGG--ATTG-CGGCG?ACA?CGGGT?ACCGCCGGGACGTTGT-- [1671] Porella_pi AGTTTTCGG--ATTGCGGCGACGCGGCGGTTCGCTGCCGGGACGTTGT-- [1689] Conocephal_con AGAGTTCGG--A-CG-CGGCG?ACGTGC?GTCGCCGCCGGGACGTTGT-- [1648] Asterella_tene -GAGTTCGG--ATCG-CGGCGACGCGCGGTTCGCCGCCGGGACGTTG--- [1682] Riccia -GAGTTCGG--ATCG----CGAC-----GTTCGCCGC-GGGACGTTGT-- [1670] Klebsormid_fla AGTTTTCGG--ATTGCGGCTACTGGTCCGCCGCCGAAGAAGCTGTGAG-- [1707] Coleochaet_nit AGCATTCGG--ATCGCCACCGGCGGGCAACTCCGGAGACGGCATG----- [1672] Fissidens_taxi AGTTTTCGG--ATTG-CG?CG?AC?GGGTTCGCCGCGCGCTGT------- [1671] Plagiomnium_cu AGTTTTCGG--ATCG-CG??A?C????GTTCGCCGC?GG?GACGTTGT-- [1662] Micromonas_pus AGCGTTCGG--ACCGT-GGCTTTCTGA??G?TTCG?CCGTCGGATGGCCT [1686] Mantoniel_squa ?????????????????????????????????????????????????? [1660] Nephroselm_pyr GGAGTCCGG--AT?AT???GCGGGTGGGTCC?GCCG?C?TCCGCCCGT-- [1679] Pedinomonas_mi GGCTCACGG--ACTGTCGTGCTTCCTTCCTCGTGTTGGTTGTACTTC--- [1667] Tetraselm_cart GGAGTT?GG--ATTGGCAGTTTGTGGTGG?TTCG?CCACTGCTTACAGCT [1683] Enteromorpha AGCGTTAGG--ACTGG--AACCTTGGGCCGGTCTCCTGCCCATGGTTTC- [1688] Ulva_fasci AGCGTTAGG--ACTGGAACTTTGGCCGGTCTCCTGCCCATTGTTTC---- [1668] Ulothrix_zo TTTGCGGAATTGCT-TTCACGTTAGTTCCAAGCTCTTACCAC-------- [1605] Cympolia_barba ACTGTTTGG--ATTATCCTTGTTCCGTGAAGACGTTACAGGTT------- [1689] Batophora_oers AAAGTTTGG--AT--GYCTTCCGAAA?CGGTTACGCCTA----------- [1638] Codium_decort A--CCGGGG--ACGC-GCC?TTT??TGGGAGCCCCGCT------------ [1662] Cladophoro AAT-TTCGG--ATTAGACAACCTACCGT?AGGG?GTCGT?T--------- [1661] Blastophysa_rh AGCA-ACG---ACT-TGGA?CACCCTCGGGT?ATTTGC------------ [1649] Trentepohlia AGAGTTCGG--ACTGGACCAGGCTAGCAATA--CCC--TTG--------G [1656] Cephaleuro_par AGTGTTCGG--ATTGCGGCGACGTGAGCGGTTCGCTGCCCGCGACGTTGT [1670] Characium_vac AGTGTTCGG--ACTGGCT-------------------------------- [1638] Dunaliella_par AGTGTTTGG--ACTG-GTT------------------------------- [1637] Chlamyd_reinha AGTGTTCGG--ATTGAGCT------------------------------- [1640] Volvox_carteri AGTGTTCGG--ATTGACTTTGACTGGGGCAACCTGGTCATGGTT------ [1682] Chlorococc_min AGTGTTCGG--ACTTGCG-------------------------------- [1636] Draparn_plum AGCGTTCGG--A-TGAAGCGGTGGGACTCTCCTGCCCTCCC--------- [1669] Uronema_belk AGCGCTCGG--AT?GGGGCGGTCGGAGTCTCCCACCCCCT---------- [1622] Chlamydom_moew AGTGTTCGG--ATTGGCTTTGAGGGG-TGG-CAACTCCCCAG-AGCC--- [1682] Stephanos_pl AGTGTTGGG--ATTGACTT--AGTGG-TGGGCA-CTCCA-TGTTGTT--- [1684] Carteria_rad AGTGTTCGG--ATCGGA-GTCCTTGGCTGG-CAACAGTTGAGGTTTCT-- [1693] Gonium_pecto AGTGTTCGG--ATTGATC--GGCTGG---GGCAACTCGGCCTTGATT--- [1675] Chlorella_kess AGTGTTCGG--ATTGGC???????????????????????????GC-C-- [1671] Chlorella_vulg AGTGTTCGG--ATTGGC???????????????????????????GC-C-- [1673] Protothec_wic AGTGTTCGG--ATTGGC???????????????????????????GC-C-- [1668] Chlorella_prot AGTGTTCGG--ATTGGC???????????????????????????GC-C-- [1674] Chlorella_min AGTGTTCGG--ATTGGC???????????????????????????GC-C-- [1671] Neochloris_aqu AGTGTTCGG--ATTGGCC??????????????????????????????-- [1670] Neochloris_vig AGTGTTCGG--ATTGGC???????????????????????????GC-C-- [1662] Pediastrum_dup AGTGTTCGG--ATTGGCC??????????????????????????????-- [1672] Scenedesm_obl AGTGTTCGG--ATTGGC???????????????????????????GC-C-- [1668] Characium_hin AGTGTTCGG--ATTGGCC??????????????????????????????-- [1668] Chlorella_fus AGTGTTCGG--ATTGGC???????????????????????????GC-C-- [1669] Ankistrodesmus AGTGTTCGG--ATTGGC???????????????????????????GC-C-- [1666] Pseudotreb_gig AGCGTTCGG--ATTGCGTTAGTCGGGTTTTCCGCCTCCTCTCACT----- [1671] Pleurastr_terr AAAGTTTGG--ACTGGCGGTAGGCGGGTGGTTCGCCATCTGCTGCTGCC- [1679] Characium_per AGTGTTCGG--ATCGGCT??????????????????????????????-- [1671] Parietochl_pse AGTGTTCGG--ATTGGCC??????????????????????????????-- [1675] Friedmannia_is AGTGTTCGG--ATTGGCC??????????????????????????????-- [1674] [ 1760 1770 1780 1790 1800] [ . . . . .] Glycine_max GAGAAGTCCACTGAACCTTATCATTTAGAGGAAGGAGAAGTCGTAACAAG [1695] Oryza_sativa GAGAAGTCCATTGAACCTTATCATTTAGAGGAAGGAGAAGTCGTAACAAG [1755] Zamia_pumila GAGAAGTTCATTGAACCTTATCATTTAGAGGAAGGAGAAGTCGTAACAAG [1755] Psilotum_n GAGAAGTTCATTAAACCTTATCATTTAGAGGAA????????????????? [1738] Equisetum_ar GAGAAGTTCATTGAACCTTACCATTTAGAG???????????????????? [1744] Atrichum_angus GAGAA-TTCATTAAA--TTATCATTTAGAGGAA????????????????? [1716] Notothylas_bre GA-AA-TTCATTAAACCTTATCATTTA?A????????????????????? [1711] Phaeoceros_lae GAGAAG-TCATTAAACCTTATC-TTTAGAGGAA????????????????? [1719] Porella_pi GAGAAGTTTATTAAACCTTATCATTTA?A????????????????????? [1739] Conocephal_con GAGAAGTTCTTT-AACCTTATCA-TTAGA????????????????????? [1696] Asterella_tene GA-AAGTTCTTTAAACCTTATCA??????????????????????????? [1731] Riccia GAGAAGTTCTTTAAACCTTATC-TTTAGA????????????????????? [1719] Klebsormid_fla GCAAGGTTCATTAAACCTTATCATTTAGAGGA?????????????????? [1757] Coleochaet_nit -AGAA-TT-GTTGAACCTTATCGTTTAGAGGA?????????????????? [1719] Fissidens_taxi GAGAAGTTCATTAAACCTTATCATTTAGA--A?????????????????? [1719] Plagiomnium_cu GAGAAG-TCATTAAACCTTATCATTTA-AG???????????????????? [1710] Micromonas_pus GGGAAGTTCGTT-AACCTTATCA??????????????????????????? [1735] Mantoniel_squa ?????????????????????????????????????????????????? [1710] Nephroselm_pyr CAGAAGTTCTTCAAACCCTCGCATTTAGAG???????????????????? [1729] Pedinomonas_mi GGGAAGT--ATACA--CCTGATGATTAGAGGA?????????????????? [1713] Tetraselm_cart GAGAAGTTCTCCAAACCCCCCCATT-AG?????????????????????? [1732] Enteromorpha --GAATTTCGTT-AACCCTC--GTTTAGAG-A?????????????????? [1732] Ulva_fasci GGGAATTTCGTT-AACCCTCCC???????????????????????????? [1717] Ulothrix_zo GAGAAGTT-ATT-AACCCTCCCA??????????????????????????? [1653] Cympolia_barba --GAAATTCGGTGAACC-----ACCTGTTAT??????????????????? [1732] Batophora_oers --GAA-TTCTCTTAACC-----ACCT-TTA???????????????????? [1679] Codium_decort AACCACTTTTCTAA???????????????????????????????????? [1712] Cladophoro GAGAAGTTCATTAACCCTTCACC?AGAG?AA??????????????????? [1711] Blastophysa_rh GGGAAATGTGTTAAACCCTCCCATCTA?A????????????????????? [1699] Trentepohlia GGAAGTCCGTTTAAACCCTCCCTA?????????????????????????? [1706] Cephaleuro_par GAGAAGTCCACTGAACCTTATCATTTAGAGGAAGGA?????????????? [1720] Characium_vac GGGAAGAACATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1688] Dunaliella_par GGGAAGAACATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1687] Chlamyd_reinha GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1690] Volvox_carteri GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1732] Chlorococc_min GGGAAGAACATTAAACCCTCCCACTTAGAGGAAGGAGAAGTCGTAACAAG [1686] Draparn_plum GAGAAGTTCGTTAAACCCTCCCACC????????????????????????? [1719] Uronema_belk GAGAAGTCCGTTAAACCCTCCCACCTA-AGGAA????????????????? [1671] Chlamydom_moew GAGAAGATCATTAAACCCTCCCACCTAGAG???????????????????? [1732] Stephanos_pl GAGAACAACATTAAACCCTCCCACCTAGA--??????????????????? [1732] Carteria_rad GAGAAGTTCATTAAACCCTCCC???????????????????????????? [1743] Gonium_pecto GAAAAGTTCATTAAACCCTCCCAC?????????????????????????? [1725] Chlorella_kess -AGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1720] Chlorella_vulg GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1723] Protothec_wic GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1718] Chlorella_prot GAGAAGTTCATTAAACCCTCCCACTTAGAGGAAGGAGAAGTCGTAACAAG [1724] Chlorella_min GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1721] Neochloris_aqu AAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1720] Neochloris_vig AACAAGT-CATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1711] Pediastrum_dup GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1722] Scenedesm_obl GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1718] Characium_hin AAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1718] Chlorella_fus GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1719] Ankistrodesmus GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1716] Pseudotreb_gig GAGAAGTTCGTTAAACCCTCCCACCT-GAG-A?????????????????? [1719] Pleurastr_terr GGGAAATTCTTTAAACCCTCCCACCTAGAG-AA????????????????? [1728] Characium_per GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAG [1721] Parietochl_pse GAGAAGTTCATTAAACCCTCCCACCTAGAGTAAGCAGAAGTCGTAACAAG [1725] Friedmannia_is GAGAAGTTCTCTAAACCCTCCCATCTAGAGGAAGGAGAAGTCGTAACAAG [1724] [ 1810 1820 1830 1840 1850] [ . . . . .] Glycine_max GTTTCCGTAG???????????????????????????????????GACCC [1745] Oryza_sativa GTTTCCGTAG???????????????????????GCACCGCTGGCCGACCC [1805] Zamia_pumila GTTTCCGTAG???????????????????????????????????????? [1805] Psilotum_n ?????????????????????????????????????????????????? [1788] Equisetum_ar ?????????????????????????????????GCACCATCGACCGACCG [1794] Atrichum_angus ?????????????????????????????????GCAC?AT?GACCGACCG [1766] Notothylas_bre ???????????????????????????????????????????????CC? [1761] Phaeoceros_lae ?????????????????????????????????GCACCATCGACCGACCA [1769] Porella_pi ?????????????????????????????????????????????????? [1789] Conocephal_con ????????????????????????????????????CCAGCGACCATGAG [1746] Asterella_tene ?????????????????????????????????T?AACATCGACCGACCA [1781] Riccia ?????????????????????????????????????????????????? [1769] Klebsormid_fla ?????????????????????????????????????????????????? [1807] Coleochaet_nit ??????????????????????????????????CACCACGCGCCGATCC [1769] Fissidens_taxi ?????????????????????????????????????????????????? [1769] Plagiomnium_cu ?????????????????????????????????GCACCATCGACCGACCG [1760] Micromonas_pus ?????????????????????????????????????????????????? [1785] Mantoniel_squa ?????????????????????????????????????????????????? [1760] Nephroselm_pyr ?????????????????????????????????????????????????? [1779] Pedinomonas_mi ?????????????????????????????????????????????????? [1763] Tetraselm_cart ????????????????????????????????????CCATCGACCGACCA [1782] Enteromorpha ??????????????????????????????????????????ACC?ACCA [1782] Ulva_fasci ???????????????????????????????????????????????CCA [1767] Ulothrix_zo ?????????????????????????????????????????????????? [1703] Cympolia_barba ??????????????????????????????????TGTGTTAAGCACCGAG [1782] Batophora_oers ?????????????????????????????????????????????????? [1729] Codium_decort ?????????????????????????????????????????????????? [1762] Cladophoro ??????????????????????????????????????????GCCAACCA [1761] Blastophysa_rh ?????????????????????????????????????????GACCGACCA [1749] Trentepohlia ?????????????????????????????????????????????????? [1756] Cephaleuro_par ???????????????????????????????????????????GCTGCCA [1770] Characium_vac GTTTCCGTAG???????????????????????????????????????? [1738] Dunaliella_par GTTTCCGTAG???????????????????????????????????????? [1737] Chlamyd_reinha GTTTCCGTAG???????????????????????????????????????? [1740] Volvox_carteri GTTACCGTAGGTGAACCTGCGGAAGGATCATTG????????????????? [1782] Chlorococc_min GTTTCCGTAG???????????????????????????????????????? [1736] Draparn_plum ???????????????????????????????????????????????CC? [1769] Uronema_belk ?????????????????????????????????????????????????? [1721] Chlamydom_moew ???????????????????????????????????????TCGACCGACC? [1782] Stephanos_pl ?????????????????????????????????GCACCATCGACCGACCA [1782] Carteria_rad ?????????????????????????????????GCACCATCGACCGACCA [1793] Gonium_pecto ?????????????????????????????????GCACCATCGACCGACCA [1775] Chlorella_kess GTTTCCG??????????????????????????????????????????? [1770] Chlorella_vulg GTTTCCG??????????????????????????????????????????? [1773] Protothec_wic GTTTCCG??????????????????????????????????????????? [1768] Chlorella_prot GTTTCCG??????????????????????????????????????????? [1774] Chlorella_min GTTTCCG??????????????????????????????????????????? [1771] Neochloris_aqu GTTTCCGTAG???????????????????????????????????????? [1770] Neochloris_vig GTTTCCG??????????????????????????????????????????? [1761] Pediastrum_dup GTTTCCGTAG???????????????????????????????????????? [1772] Scenedesm_obl GTTTCCG??????????????????????????????????????????? [1768] Characium_hin GTTTCCGTAG???????????????????????????????????????? [1768] Chlorella_fus GTCTCCG??????????????????????????????????????????? [1769] Ankistrodesmus GTTTCCG??????????????????????????????????????????? [1766] Pseudotreb_gig ?????????????????????????????????????????????????? [1769] Pleurastr_terr ?????????????????????????????????????????????????? [1778] Characium_per GTTTCCGTAG???????????????????????????????????????? [1771] Parietochl_pse GTTTCCGTAG???????????????????????????????????????? [1775] Friedmannia_is GTTTCCGTAG???????????????????????????????????????? [1774] [ 1860 1870 1880 1890 1900] [ . . . . .] Glycine_max TGAT?CTTCT?TGAAGGGTTC?GAGTGAGAGCA?TACCTGTCGGGACCCG [1795] Oryza_sativa TGAT?CTTCTGTGAAGGGTTC?GAGTTGGAGCA?CGCCTGTCGGGACCCG [1855] Zamia_pumila ?????????????????????????????????????????????????? [1855] Psilotum_n ?????????????????????????????????????????????????? [1838] Equisetum_ar TGAT?CTTCTGTGAAAGGTTT?GAGTGAGAGCA?TACCTGCTGGGACCC? [1844] Atrichum_angus TGAT?CTTCTGTGAAAGGTTT?GAGTGTGAGC??T?CCTGCTGGGACCC? [1816] Notothylas_bre TGAT?CTTCTGTGA?AGGTTT?GAGTGTGAGCA?TACCTGCTGGGACCC? [1811] Phaeoceros_lae TGAT?CTTCTGTGAAAGGTTT??AGTGTGA??A?TACCTGCTGGGACCC? [1819] Porella_pi ?????????????????????????????????????????????????? [1839] Conocephal_con CATC?TCGATGCGAAAGGTT??GAGT??GAGCG?TGCCTGTTGGGACCC? [1796] Asterella_tene TGAT?CTTCTGTGAAAGGTTC?G?GT?GGAGCA?TGCCTGTTGGGACCC? [1831] Riccia ????????????A?AAGGTTCGGAGTAAGAGCAT?GCCT?TTGGGACCC? [1819] Klebsormid_fla ?????????????????????????????????????????????????? [1857] Coleochaet_nit GGAGA?ATGTCGGAAGGGTTC?GAGCTGAGA?A??GTATGTTGGGACCC? [1819] Fissidens_taxi ??????TTCTGTGAAAGGTTC?GAGTGTGAGCA?TACCTGTTGGGAC??? [1819] Plagiomnium_cu TGAT?CTTCTGTGAAAGGTTT?GAGTGTGAGCA?CACATGTTGGGACCC? [1810] Micromonas_pus ??????????????????????????????????????????GGGACC?? [1835] Mantoniel_squa ??????????????????????????????????????TGCTGGGACC?? [1810] Nephroselm_pyr TGAT?CTTCTGTGAAAGGTTT?GAGT?CGAGCA??ACCTGTTGGGACC?? [1829] Pedinomonas_mi ?????????????????????????????AGCA?GATATGTTGG??CCC? [1813] Tetraselm_cart TGAT?CTTTTGTGAAAGGTTT?GAGTACGAGCA?TACCTGTTGGGACCC? [1832] Enteromorpha T?AT?CTTCTGTGAAAGG?TC??A?TACGA??G?TACCTTTTGGGACCCT [1832] Ulva_fasci TGAT?C?TCTGTGAAAGGTT??GAGTACGAGCG?TACCTGTTGGGACC?? [1817] Ulothrix_zo ??AT?CTTCTGTGAT?GGTTC?GAGTACGAGCAGTACCT?TTGGGACCC? [1753] Cympolia_barba TTCT?CTTTTACGAAAAACTC?GAGTGTGAGCA?TGCCGTT?A?GATCT? [1832] Batophora_oers ?????????????????????????????????????????TGG?ACC?? [1779] Codium_decort ?????????????????????????????????????????????????? [1812] Cladophoro TGATGCTTTTGTG??AGGTTT?GAGC??GAGCG?CAGTCG?TAGGACCCG [1811] Blastophysa_rh TGAT?CTTCTGAGAAAGGTTC?GAGTTGGAGCG?TGCCT?TTGGGACCC? [1799] Trentepohlia ??TC?CTCACAT?ATATCTTT?T?ATTCATAAC?TACCT?TTGGGACCC? [1806] Cephaleuro_par TGAT?CTTCTGTG???GGTTC?GAGTAGGAGCG?G?CCTGTTGGGACCGG [1820] Characium_vac ?????????????????????????????????????????????????? [1788] Dunaliella_par ?????????????????????????????????????????????????? [1787] Chlamyd_reinha ?????????????????????????????????????????????????? [1790] Volvox_carteri ?????????????????????????????????????????????????? [1832] Chlorococc_min ?????????????????????????????????????????????????? [1786] Draparn_plum TGAT?CTTCTGTGAAAGGT???GAGTACGAGCA?TACCT?TTGGGACCC? [1819] Uronema_belk ??????????????????????GAGT?CGAGCA??ACCT?TTGGGACCC? [1771] Chlamydom_moew TAGAGCTTCTGCGAAAGGTTT?GAGTGCGAGCA?TA?ATGTTGGGACC?? [1832] Stephanos_pl TGAT?CTTCTGTGAAAGGTTT?GAGTGCGAGCA?TACCTGTTGGGACCC? [1832] Carteria_rad TGA?GCTTCTGC?AAAGGTTT?GAGTGCG?GTG?T?ACT?TTGGGACCC? [1843] Gonium_pecto TGTTGCTTTTGCGAAAGGTT??GAGTGCGAGCA?TACCTGTTGGGACCC? [1825] Chlorella_kess ?????????????????????????????????????????????????? [1820] Chlorella_vulg ?????????????????????????????????????????????????? [1823] Protothec_wic ?????????????????????????????????????????????????? [1818] Chlorella_prot ?????????????????????????????????????????????????? [1824] Chlorella_min ?????????????????????????????????????????????????? [1821] Neochloris_aqu ?????????????????????????????????????????????????? [1820] Neochloris_vig ?????????????????????????????????????????????????? [1811] Pediastrum_dup ?????????????????????????????????????????????????? [1822] Scenedesm_obl ?????????????????????????????????????????????????? [1818] Characium_hin ?????????????????????????????????????????????????? [1818] Chlorella_fus ?????????????????????????????????????????????????? [1819] Ankistrodesmus ?????????????????????????????????????????????????? [1816] Pseudotreb_gig ??????????????????????????????????????????GGG?CCC? [1819] Pleurastr_terr ?????????????????????????????????????????????????? [1828] Characium_per ?????????????????????????????????????????????????? [1821] Parietochl_pse ?????????????????????????????????????????????????? [1825] Friedmannia_is ?????????????????????????????????????????????????? [1824] [ 1910 1920 1930 1940 1950] [ . . . . .] Glycine_max AAAGATGGTGAACT?TGCCTGAGCGGGG?CGAAGCCAGAGGAAACTCTGG [1845] Oryza_sativa AAAGATGGTGAACTATGCCTGAGCGGGG?CGAAGCCAGAGGAAACTCTGG [1905] Zamia_pumila ?????????????????????????????????????????????????? [1905] Psilotum_n ?????????????????????????????????????????????????? [1888] Equisetum_ar AAAGATGGTGAACTATGCCTGAGCAGGG?CGAAGCCAGAGGAAACTCTGG [1894] Atrichum_angus ?AAGATGGTGAACTATGCCTGAGC?AGG?CGAAGCCAGAGGAAACTCTGG [1866] Notothylas_bre ???GATGGTGA?CTATGCCTGAGCAGGG?CGAAGCCAGAGGAAACTCTGG [1861] Phaeoceros_lae ?AAGATGGTGAACTATGCCTGAGTCAGG?CGAAGCCAGAGGAAACTCTGG [1869] Porella_pi ?????????????????????????????????????????????????? [1889] Conocephal_con ?AAGATGGTGA?CTATGC?TGAGCAGG??CGAAGCCGGAGGAAACTCCGG [1846] Asterella_tene ?AAGATGGTGAACTATGC?TGAGCAGGG?CGAAGTCAGAGGAAACTCTGG [1881] Riccia ?AAGATGGTGAACTAT???TGAG?A?GG?CGAAGCCAGAGGAAACTCTGG [1869] Klebsormid_fla ??AGATGGTGAACTATGCCTGAGGCAGG?CGAAGCCAGAGGAAACTCTGG [1907] Coleochaet_nit ??AGATGGTGAACTATGCCTGA??AGG??CGAAGCCAGAGGAAACTCTGG [1869] Fissidens_taxi ?AAGATGGTGAACTAT???TGA???AGG?CGAAGCCAGAGGAAACTCTGG [1869] Plagiomnium_cu ??AGATGGTGAACTATGCCTGAGCAGGG?CGAAGCCAGAGGAAACTCTGG [1860] Micromonas_pus ??AGATGGTGAACTATG??TGAGCA?GG?CGAAGCCAGAGGAAACTCTGG [1885] Mantoniel_squa ???GATGGTGAACTATG?CTGAGCA?GG?CGAAGCCAGAGGAAACTCTGG [1860] Nephroselm_pyr ???GATGGTGAACTATGCCTGAGCA?GG?CGAAGCCAGAGGAAACTCTGG [1879] Pedinomonas_mi ??AGATGGTGAACTATG?CTGAAC?GGG?TGAAGCCAGGGGAAACT?TGG [1863] Tetraselm_cart ??AGATGGTGAACTATGCCTGAGCA?GG?CGAAGCCAGAGGAAACTCTGG [1882] Enteromorpha TAAGATGGTGAACTATGCCTGA?CA?GG?CGAAGCCAGAGGAAACTCTGG [1882] Ulva_fasci AAAGATGGTGAACTATG?CTGAGCA?GG?CGAAGCCAGAGGAAACTC?GG [1867] Ulothrix_zo ?AAGATGGTGATCTATGCCTGAGCAGGG??GAAGCCAGAGGAAACTCTGG [1803] Cympolia_barba ??AGATGGTGA?CTATACTTGGGTAG?A?TGTAGC?AGGAGAAATTCTGG [1882] Batophora_oers ??AGATGGT???CTATGCTTGGGTAGGA?CGAAG?CTGGGGAAACTCTGA [1829] Codium_decort ?????????????????????????????????????????????????? [1862] Cladophoro G??GATGGTGAACTATGCCTGGTGCACGACGAAGCGC??GGAAACGCCGG [1861] Blastophysa_rh ?AAGATGGTGAACTATGCCTGAGCA?GG?CGAAGCCAGAGGAAACTCTGG [1849] Trentepohlia ?AAGATGGTGAACTATGCCTGATCAGG??CGAAGCCAGAGGAAACTCTGG [1856] Cephaleuro_par G??GATGGTGAACTATGCCTGATCAGG??CGAAGCCAGAGGAAACTCTGG [1870] Characium_vac ?????????????????????????????????????????????????? [1838] Dunaliella_par ?????????????????????????????????????????????????? [1837] Chlamyd_reinha ?????????????????????????????????????????????????? [1840] Volvox_carteri ?????????????????????????????????????????????????? [1882] Chlorococc_min ?????????????????????????????????????????????????? [1836] Draparn_plum AAAGATGGTGAACTATGCCTGAGCGAGG?CGAAGC?AGAGGAAACTCTGG [1869] Uronema_belk ?AAGATGGTGAACTATG?CTGAGCA?GG?CGAAGCCAGAGGAAACTCTGG [1821] Chlamydom_moew ??AGATGGTGAACTATGCCTGGGCAGGG?TGAAGCCAGAGGAAACTCTGG [1882] Stephanos_pl AAAGATGGTGAACTATGCCTGAGCAAGG?TGAAGCCAGAGGAAACTCTGG [1882] Carteria_rad ??AGATGGTGAACTATGCCTGAGCAGGG?TGAAGCCAGAGGAAACTCTGG [1893] Gonium_pecto ?AAGATGGTGAA?TATGCCTGAGCAAGA?TGAAGCCAGAGGAAACTCTGG [1875] Chlorella_kess ?????????????????????????????????????????????????? [1870] Chlorella_vulg ?????????????????????????????????????????????????? [1873] Protothec_wic ?????????????????????????????????????????????????? [1868] Chlorella_prot ?????????????????????????????????????????????????? [1874] Chlorella_min ?????????????????????????????????????????????????? [1871] Neochloris_aqu ?????????????????????????????????????????????????? [1870] Neochloris_vig ?????????????????????????????????????????????????? [1861] Pediastrum_dup ?????????????????????????????????????????????????? [1872] Scenedesm_obl ?????????????????????????????????????????????????? [1868] Characium_hin ?????????????????????????????????????????????????? [1868] Chlorella_fus ?????????????????????????????????????????????????? [1869] Ankistrodesmus ?????????????????????????????????????????????????? [1866] Pseudotreb_gig ???GATGGTG??CTATG?CTGAGC??GG?C?AAGCCAGAGGAAACTCTGG [1869] Pleurastr_terr ?????????????????????????????????????????????????? [1878] Characium_per ?????????????????????????????????????????????????? [1871] Parietochl_pse ?????????????????????????????????????????????????? [1875] Friedmannia_is ??AGATGGTG??CTATGCCTGAGC??GG?CGAAGC?AGAGGA???TCTGG [1874] [ 1960 1970 1980 1990 2000] [ . . . . .] Glycine_max TGGAGGCCC?GCAGCGATACTGACGTGCAAATCG?TTCGTCTGACTTGGG [1895] Oryza_sativa TGGAGGCTC?GAAGCGATACTGACGTGCAAATCG?TTCGTCTGACTTGGG [1955] Zamia_pumila ?????????????????????????????????????????????????? [1955] Psilotum_n ?????????????????????????????????????????????????? [1938] Equisetum_ar TGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTTGGG [1944] Atrichum_angus TGGAGGCTC?G?AGC?ATACTGACGTGCAAATCG?TTCGTCAGACTTGGG [1916] Notothylas_bre TGGAGGCTC?GTAGCGATACTGA?GTGCAAATCG?TTCGTCAGACTTGGG [1911] Phaeoceros_lae TGGAGGCTC?GTAGCGATACTGA?GTGC?AATCG?TTCGTCAGACTTGGG [1919] Porella_pi ?????????????????????????????????????????????????? [1939] Conocephal_con TGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTC?TCAGACTCGGG [1896] Asterella_tene TGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTCGGG [1931] Riccia TGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTTGGG [1919] Klebsormid_fla TGGAGGCTC?G?A?CGATACTGACGTGCAAATCG?TTCGTCAG?CTTGGG [1957] Coleochaet_nit TGGAAGATC?GCAGC?ATACTGACGTGCAAATCG?TTCGTCGGACTTG?G [1919] Fissidens_taxi TGGAGGCTC?GTAGCGATACTGACGTGCAAATCG??T?GT?AGACTTGGG [1919] Plagiomnium_cu TGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTTGGG [1910] Micromonas_pus TGGAGGCTC?GTAGCGATACTGACGTGC?AATCG?TTCGTCGGACTTGGG [1935] Mantoniel_squa TGGA??CTC?GT?GCGATACTGACGTGC?AATCG?TTCGTCGGACTTGGG [1910] Nephroselm_pyr TGGA??CTC?GTA??G?TACTGACGTGCAAATCG?TTCGTCGGACTTGGG [1929] Pedinomonas_mi TGGAGGCTC?GTAGC?ATACTGACGAGC?AATCG?TTCGT?TGATTTGGG [1913] Tetraselm_cart TGGAGGCTC?GTAGATGTGCT?ACGTGCAAATCG?CTTTTCGGACTTGGG [1932] Enteromorpha TG?AGGCTC?GTAGATGTGCT?ACGTGCAAATCGCCTTTTCGGACTTGGG [1932] Ulva_fasci TGGAGGCTCGG?AGATGTGCT?ACGTGC?AATCG?CTTTTCGGACTTGGG [1917] Ulothrix_zo TGGAGGCTC?GTAGAT?TGCTG?CGTGC?AATCG?CTT?TCGGACTTGG? [1853] Cympolia_barba TGGATGTTC?GAAAGTGTGC?GA?GTGC?AATCG?CTTCTCAAACCTGAG [1932] Batophora_oers TGGAGGTCC?GAAGCT?TGCTGA?GTGCAAATCG?CTTCTCA?ACT?GAG [1879] Codium_decort ?????????????????????????????????????????????????? [1912] Cladophoro TGGAGGTCG?G?AGATGTGCT?ACGTGC?AATCG?CTTTTCAGACATGGG [1911] Blastophysa_rh TGGAGGCTC?GTAGATGTGCTGA?GTGCAAAT?G??T?TTCGGACTTGGG [1899] Trentepohlia TGGAGGCTC?GTA?ATGTGCT?ACGTGCAAATCG?CTTTTCGGAATTGG? [1906] Cephaleuro_par TGGAGGCTC?GTAGATGTGCT?ACGTGCAAATCG?CTTTTCGGAATTGGG [1920] Characium_vac ?????????????????????????????????????????????????? [1888] Dunaliella_par ?????????????????????????????????????????????????? [1887] Chlamyd_reinha ?????????????????????????????????????????????????? [1890] Volvox_carteri ?????????????????????????????????????????????????? [1932] Chlorococc_min ?????????????????????????????????????????????????? [1886] Draparn_plum T??AGGCTC?GTA?ATGTGCTGACGTGC?AATCG?CTTTTCGGACTTGGG [1919] Uronema_belk TGGAGGCTC?GTAGATGTGCTGACGTGCAAATCG?CTTTTCGGACTTGGG [1871] Chlamydom_moew TGGAGGCTC?GTAGATGTGCTGACGTGCAAATCG?CTTTTCTGACCTGGG [1932] Stephanos_pl TGGAGGCCT?GTAGATGTGCTGACGTGCAAATCG?CTTTTCTGACTTGGG [1932] Carteria_rad TGGAGGCTC?GTAGATGTGCTGACGTGCAAATCG?CTTTTCGGACTTGGG [1943] Gonium_pecto TGGAGGTCTGGTAGATGTGCTGACGTGC?AATCG?CTTTTCTGACTTGGG [1925] Chlorella_kess ?????????????????????????????????????????????????? [1920] Chlorella_vulg ?????????????????????????????????????????????????? [1923] Protothec_wic ?????????????????????????????????????????????????? [1918] Chlorella_prot ?????????????????????????????????????????????????? [1924] Chlorella_min ?????????????????????????????????????????????????? [1921] Neochloris_aqu ?????????????????????????????????????????????????? [1920] Neochloris_vig ?????????????????????????????????????????????????? [1911] Pediastrum_dup ?????????????????????????????????????????????????? [1922] Scenedesm_obl ?????????????????????????????????????????????????? [1918] Characium_hin ?????????????????????????????????????????????????? [1918] Chlorella_fus ?????????????????????????????????????????????????? [1919] Ankistrodesmus ?????????????????????????????????????????????????? [1916] Pseudotreb_gig TG?AGGCTC?G?AGATGTGCTGACGTGC??ATCG?CTTTTCGGACTTGGG [1919] Pleurastr_terr ?????????????????????????????????????????????????? [1928] Characium_per ?????????????????????????????????????????????????? [1921] Parietochl_pse ?????????????????????????????????????????????????? [1925] Friedmannia_is TGGAGGCTC?G?AGATGTGCTGACGTGC?AATCG?CTTTTC?GACTTGG? [1924] [ 2010 2020 2030 2040 2050] [ . . . . .] Glycine_max TATAGGGGCGAAAGACTAATCGAACCGTGCG?GG?GGCCCCGGAAAGAGT [1945] Oryza_sativa TATAGGGGCGAAAGACTAATCGAACCATGCG?GG?GGCCTCGGG?AGAGT [2005] Zamia_pumila ?????????????????????????????????????????????????? [2005] Psilotum_n ?????????????????????????????????????????????????? [1988] Equisetum_ar TATAGGGGCGAAAGACTAATCGAACCATGCG?GG?GGCCCTGGGAAGAGT [1994] Atrichum_angus ?ATA????C?AAAGACT?ATCGAACCATGCG?AG?GGCCCCGGGAAGAGT [1966] Notothylas_bre TATAGGGGCGAAAG?CTAATCG???????????????CCCCGGG?AGAGT [1961] Phaeoceros_lae TATA?GGGC???AGACTAATCGAACCATGCG??G?GGCCCCGGG?AGAGT [1969] Porella_pi ?????????????????????????????????????????????????? [1989] Conocephal_con ?ATA??????AAAGACT?ATCGAACCATGCG?G???GCCCCGGGAAGAGT [1946] Asterella_tene ?ATA??????AAAGACTAATCGAACCATGCG?GA?GGCCCCGGGAAGAGT [1981] Riccia ?ATAG??G??AAAGA?TAATCGAACCATCTAGTA?AGCCCCGGGAAGAGT [1969] Klebsormid_fla ??TA??GCGGAAAGACTAATCGAACCAT???????????????GAAGAGT [2007] Coleochaet_nit TATA????C?AAAGACT?ATC?AACCATGCG?GG?G?CTCCGGG?AGAGT [1969] Fissidens_taxi TATAGGGGC???AGACTAATCGAAC?AT?CG??G?GGCCCCTGGAAGAGT [1969] Plagiomnium_cu TATAGGGGC?AAAGACTAATCGAACCATGCG?AG?GGCCCCTGGAAGAGT [1960] Micromonas_pus TATA???????AAGACT?ATC?AA????GG????GAGCCCCGGG?AGAGT [1985] Mantoniel_squa TATA????C?AAAGACT?ATC?AACCAT?????????????????AGAGT [1960] Nephroselm_pyr TATA?GG?CGAAAGACT?ATC?AACCATGCG?GG?GGCCCCAGGAAGAGT [1979] Pedinomonas_mi ?ATAGGGGCG?AAGACTAATCGAACCAT??????????TCCGG???GAGT [1963] Tetraselm_cart ??TA????CGAAAGACT?ATC?AACCATGCG?AT?GGCCCTGGGAAGAGT [1982] Enteromorpha TATA??GGC?AAAGACTAATCGAACCAT???????GG???TGGAAAGAGT [1982] Ulva_fasci TATA??GG????A?ACT?ATCGAACCATCGA?T??GGC?CTGGAAAGAGT [1967] Ulothrix_zo ?ATAGGGG?G?AAGACT?ATCGAAC?AT?????????CCTT?GGAAGAGT [1903] Cympolia_barba TTTAGGGGC???AGACTAATC?AACCA??????????????????????? [1982] Batophora_oers TA?A?GGGC?AAA?ACTAA??????????????????????????????? [1929] Codium_decort ??????????????????????????????ACGGCGGCGGCGGG?AGAGT [1962] Cladophoro TATAGGGGC?AAAGACTAATCGAACCAT?GG?CA?TGGTCCGGG?AGAGT [1961] Blastophysa_rh TATA?GGGCGAAAGACT?ATC?AACCAT??????????????GGAAGAGT [1949] Trentepohlia ??CA??G?????A?A??AATCGAACCATGCG?AT?GGTCCCGGGTAGAGT [1956] Cephaleuro_par TGT?????CGAAAGACTAATCGA?CCATGAG?TG?GTC???GGGTAGAGT [1970] Characium_vac ?????????????????????????????????????????????????? [1938] Dunaliella_par ?????????????????????????????????????????????????? [1937] Chlamyd_reinha ?????????????????????????????????????????????????? [1940] Volvox_carteri ?????????????????????????????????????????????????? [1982] Chlorococc_min ?????????????????????????????????????????????????? [1936] Draparn_plum ?ATA????C???AGA?T?AT??AACCAT?????????????????????? [1969] Uronema_belk TATA???GCGAAA?ACT?ATC?AACCATGCA?TC?GGCCCTGGG?AGAGT [1921] Chlamydom_moew CATAGGGGCGAAAGACTAATCGAACCAT?CTAGTA??????????????? [1982] Stephanos_pl TATAGGGGCGAA?GACTAATCGAACCAT????????????TGGGAAGAGT [1982] Carteria_rad TATAGGGGCGAAAGACTAATCGAACCATG?T?C??G?CCCCAGGAAGAGT [1993] Gonium_pecto ?ATAGGGG????AGACT?ATCGAACCATGC??TC?GGCCCTGGG?AGAGT [1975] Chlorella_kess ?????????????????????????????????????????????????? [1970] Chlorella_vulg ?????????????????????????????????????????????????? [1973] Protothec_wic ?????????????????????????????????????????????????? [1968] Chlorella_prot ?????????????????????????????????????????????????? [1974] Chlorella_min ?????????????????????????????????????????????????? [1971] Neochloris_aqu ?????????????????????????????????????????????????? [1970] Neochloris_vig ?????????????????????????????????????????????????? [1961] Pediastrum_dup ?????????????????????????????????????????????????? [1972] Scenedesm_obl ?????????????????????????????????????????????????? [1968] Characium_hin ?????????????????????????????????????????????????? [1968] Chlorella_fus ?????????????????????????????????????????????????? [1969] Ankistrodesmus ?????????????????????????????????????????????????? [1966] Pseudotreb_gig ??TA??GGCG??AGACTAATCGAACCAT??????????????GG?AGAGT [1969] Pleurastr_terr ???????????????????????????????????GGCC?TGGG?AGAGT [1978] Characium_per ?????????????????????????????????????????????????? [1971] Parietochl_pse ?????????????????????????????????????????????????? [1975] Friedmannia_is ??TAGGGGCGAAAGACTCATC?AACCAT??????????????GG?AGAGT [1974] [ 2060 2070 2080 2090 2100] [ . . . . .] Glycine_max TATCTTTTCTGTTT?AACA?GCCT?GCCC?ACCCTGGAAA?GCCTCAGCC [1995] Oryza_sativa T?TCTTTTCTGCTT?AAC?GGCCC?GCCA?AC?CTGGAAACGGTTCAGCC [2055] Zamia_pumila ?????????????????????????????????????????????????? [2055] Psilotum_n ?????????????????????????????????????????????????? [2038] Equisetum_ar TCTCTTTTCTTTTT?AACA?ACTT?GCCC?ACCCTGAAATCGGATCAACC [2044] Atrichum_angus TCTCTTTTCT?TTT?AACA?GCCT?GCCT??CCCTGGAATCGGATTACC? [2016] Notothylas_bre TCTC?TTTCTTTTT?AACA?GCCT?GCCT?ACCCTGAAATCGGATTACCC [2011] Phaeoceros_lae TCTCTTTTCT?TTT?AACA???CT?GCCT?GCCCTGAAATCGGATTACCC [2019] Porella_pi ?????????????????????????????????????????????????? [2039] Conocephal_con TTTCTTTTCT?TTT??AC?GACCT?GCC??GCCCTGGAATCGCTTTATGC [1996] Asterella_tene TTTCTTTTCT??TT??AC?GACC??GCCG?GCCCTGAAATCGCATTACGC [2031] Riccia TTTCTT?TCTT?TT??AC?GACC??GCC??GCC?TG?AATCGCA?TACGC [2019] Klebsormid_fla TCTCTTTTCTTTTT?AACAGTCC??GCCC?ACCCTGGAATCAGATTAACT [2057] Coleochaet_nit TTT?TTTTCTTTTT?GACA?GTCG??AGC?GCCCTGGAATTGATT?C?CG [2019] Fissidens_taxi TCTCTTTTCT?TTT?AAC?GGCCT?GCCT???CCTGGAATCGGATTACCC [2019] Plagiomnium_cu TCTCT?TTCT?TTT??AC?GGCCC?GACG?ACCCTGGAATCGGTTCACCC [2010] Micromonas_pus TCTCTTTTCTTTTT?A?CA?GCCT??CGC?GCCCTGGAATCGGTTT?GCC [2035] Mantoniel_squa TCTCTTTTCTTTTT??ACA?GCCT?T?GC?GCCCTGGAATCGGTTT?GCC [2010] Nephroselm_pyr TCTCTTTTCTTTTT?AACA?GCCC?GCCC?ACCCTGGAATCGGATTATCC [2029] Pedinomonas_mi T?TCTTTTCTTTTT??ACA?GCCT?GTA??GCCCTGGAATCGGATT?CCC [2013] Tetraselm_cart TCTCTTTTCTTTTT?AACAGGCTC?GAAG?GCCCTGGAATCTAATCATTA [2032] Enteromorpha TCTC?TTTCTTTT??AACA?GCCC?CA?G?ACCCTGGAATCGAGTCATTC [2032] Ulva_fasci TCTCTTTTCTTTTC?AACCAGGGG??A?G?A?CCTGGAATCGAGTC?TTC [2017] Ulothrix_zo TCTCTTTTCTTTTT?AA?A?GCC???A?G?ACCC?GG?ATCG?GTC?TTC [1953] Cympolia_barba ?????????????????????????????????????????????????? [2032] Batophora_oers ?????????????????????????????????????????????????? [1979] Codium_decort TCTCTTTTCTTGTT?GACGAGCT??AAGG?ACCCTGGAA?C???TC??CG [2012] Cladophoro TGTCTTTTCTTTTT?AACA?GCTC?GCA???CCCTGGAATCAGATTATCT [2011] Blastophysa_rh TCTCTTTTCTTCTT?GA?GA?CCC?GAAG??CCCTGGAATCGGATCATCC [1999] Trentepohlia TATCTTTTCTACTT?AACGA?CCC?GAAG?GCCCT?GAATCGGATCATCC [2006] Cephaleuro_par T?TCTTTTCTGCTT?AACGAGCCC?GAAG?GC?CTGGAATCGGATCATCC [2020] Characium_vac ?????????????????????????????????????????????????? [1988] Dunaliella_par ?????????????????????????????????????????????????? [1987] Chlamyd_reinha ?????????????????????????????????????????????????? [1990] Volvox_carteri ?????????????????????????????????????????????????? [2032] Chlorococc_min ?????????????????????????????????????????????????? [1986] Draparn_plum ?????????????????????????????????????????????????? [2019] Uronema_belk TCTCTTTTCTTTTT?AAC?AGCT??GAAG?GCCCTGGAATCGAATCATTC [1971] Chlamydom_moew ????????????????CACCGCTC?GAAA?GCCCTGGAATCG?AT?ATTC [2032] Stephanos_pl TCTCTTTTCT?TTT?AAC?AGC?CGGAAG?GCCCTGGAATCGAATC?TTC [2032] Carteria_rad TCTCTTTTCTTTTTCAAC?A?C?C?GAAG?GCCCTGGAATCGAAT??TTC [2043] Gonium_pecto TCTCTTTTCT?TTT?AAC?A?CCC?GAAG?GC?CTGGAATCGAAT??TTC [2025] Chlorella_kess ?????????????????????????????????????????????????? [2020] Chlorella_vulg ?????????????????????????????????????????????????? [2023] Protothec_wic ?????????????????????????????????????????????????? [2018] Chlorella_prot ?????????????????????????????????????????????????? [2024] Chlorella_min ?????????????????????????????????????????????????? [2021] Neochloris_aqu ?????????????????????????????????????????????????? [2020] Neochloris_vig ?????????????????????????????????????????????????? [2011] Pediastrum_dup ?????????????????????????????????????????????????? [2022] Scenedesm_obl ?????????????????????????????????????????????????? [2018] Characium_hin ?????????????????????????????????????????????????? [2018] Chlorella_fus ?????????????????????????????????????????????????? [2019] Ankistrodesmus ?????????????????????????????????????????????????? [2016] Pseudotreb_gig TCTCTTTTCT?TTT??AC?AGCT??GAAG?GCCCTGGAATCGGCT?ATCC [2019] Pleurastr_terr TCTCTTTTCT?TTT??AC?AGC?C?GAAG?GCCCTGGAATCGAATC??TC [2028] Characium_per ?????????????????????????????????????????????????? [2021] Parietochl_pse ?????????????????????????????????????????????????? [2025] Friedmannia_is TCTCTTTTCTTCTT?AACAA?CCC?GAAG?G?CCTGGAATCGGCTCATCC [2024] [ 2110 2120 2130 2140 2150] [ . . . . .] Glycine_max GGAG??GTAGGGTCCAGCGGCTGGA?AGAGCACCGCACGTCGCGTGGTGT [2045] Oryza_sativa GGAG??GTAGGGTCCAGCGGC?GGAGAGA???GCACACGTCGCGCGGTGT [2105] Zamia_pumila ?????????????????????????????????????????????????? [2105] Psilotum_n ?????????????????????????????????????????????????? [2088] Equisetum_ar GGAG??ATAGGGTCCAGCGGTTGGT?AAAGCA?CGCAGGTC?TGCGGTGT [2094] Atrichum_angus GGAG??ATAGGGTCCAGCGGCTGGT?AAAGCACCGCAC?TCTTGCGG?GT [2066] Notothylas_bre GGAG??ATAGGGTCCAGCGGCTGGT?AAAGCACCACACG?CTTGCGGTGT [2061] Phaeoceros_lae GGA???ATAGGGTCCAGCGGCTGGT?AAAGCACCACACGTCTTGCGGTGT [2069] Porella_pi ?????????????????????????????????????????????????? [2089] Conocephal_con GGAG??ATAGGGCCCAGCGGTCGGT?AAAGCGTCGCAAGTCTTGCGG?GT [2046] Asterella_tene GGAG??ATAGGGCCCAGCGGTCGGC?AAAGCGTCGCA?GTCTTGCGG?GT [2081] Riccia ?GAG??ATAGGGCCCA?CGGTCGGC?AAAGCGTCGCA??TCT??CGGCGT [2069] Klebsormid_fla GGAG??ATAGGGTCCAGCGACTGGG?AAAGCATCGCACGTCTCGCGGTGT [2107] Coleochaet_nit GCG???GAGGGTGC?GAAAGCTGGC?AGAGCGCGCACTGGT???CGGTGT [2069] Fissidens_taxi GGAG??ATAGGGTCCAGCGGCCGGT?AAAG???CGCACGTCTTGCGG?GT [2069] Plagiomnium_cu GGAG??ATAGGGTCCAGCGGCCGGT?AAAGCACCGCACGTCTCGCGGTGT [2060] Micromonas_pus GGAG??ATA?GGCCCAACGGCTGGT?AAAGCACTGCACGT?TCGCAGTGT [2085] Mantoniel_squa GGAG??ATA?GGCCCAACGGCTGGT?AAAGCACTGCA?GT??CGCAGTGT [2060] Nephroselm_pyr GGAG??ATA?GGCCCAGCGGCTGGT?AAAG?C?CACT?CTTGCGG?GT?? [2079] Pedinomonas_mi GGA???ATAGGGTGATGTGGCTGGT?AAAGCACCTCACGTCTTGAGGTGT [2063] Tetraselm_cart GGAG??ATAGGGCTCAGAAGTCGGT?AAAGCACCGCACGTC?CGCGG?GT [2082] Enteromorpha GGAG??ATAGGGTTCAGTGCCTGGT?AAAGCACA??TC?T?T???GGTGT [2082] Ulva_fasci GGAG??ATAGGGTTC?GTGCCTGGT??AAGCACCACACGTCTCGTGGTGT [2067] Ulothrix_zo GGAG??ATAGGGTTCAGTGGCTGGT??AAGCATCGCACGTCT?GCGGT?T [2003] Cympolia_barba ?????????????????????????????????????????????????? [2082] Batophora_oers ?????????????????????????????????????????????????? [2029] Codium_decort GGA???ATAGGGTTTGACGGCAGGT??T?GCGCCGCCCC??G?TGCGC?G [2062] Cladophoro G?AG??AT?AGGGCTCAGAGCTGGT?AAAGCGTTGCAA??CTCGCAACGT [2061] Blastophysa_rh GGAG??ATAGGCCCAT?TGGTCGGT?AAAGCACCGCACGT?T?GCGGTGT [2049] Trentepohlia GGAG??ATAGGGCTCAGAGGTCGGT?ACAAGCGCCGCACATCACGTGCGT [2056] Cephaleuro_par GGAG??ATAGGGCTCAGAGGTGGGT??AGAGCGCCGCACATCACGTGC?T [2070] Characium_vac ?????????????????????????????????????????????????? [2038] Dunaliella_par ?????????????????????????????????????????????????? [2037] Chlamyd_reinha ?????????????????????????????????????????????????? [2040] Volvox_carteri ?????????????????????????????????????????????????? [2082] Chlorococc_min ?????????????????????????????????????????????????? [2036] Draparn_plum ?????????????????????????????????????????????????? [2069] Uronema_belk GGA???ATAGGGCTCAGCA?CTGGT?AAAGCACCGCACGTCTCGCGGTGT [2021] Chlamydom_moew GGAG??ATCGGGCTT?GCCGCTGGG?AAAGCCTCT?AGTTTTGA?GGTGT [2082] Stephanos_pl GGAG?AGTAGGGCCCAGCAGCTGGT?AAAGCACCGCACTTCTCGTGGTGT [2082] Carteria_rad GGAG??ATAGGGCTCAGAGGCTGGT??AAGCACCGCACTT?TCGCGGTGT [2093] Gonium_pecto GGAG??ATAGGGCTCAGAGGTTGGT?AAAGCACCGCAGTTCTCGCGGTGT [2075] Chlorella_kess ?????????????????????????????????????????????????? [2070] Chlorella_vulg ?????????????????????????????????????????????????? [2073] Protothec_wic ?????????????????????????????????????????????????? [2068] Chlorella_prot ?????????????????????????????????????????????????? [2074] Chlorella_min ?????????????????????????????????????????????????? [2071] Neochloris_aqu ?????????????????????????????????????????????????? [2070] Neochloris_vig ?????????????????????????????????????????????????? [2061] Pediastrum_dup ?????????????????????????????????????????????????? [2072] Scenedesm_obl ?????????????????????????????????????????????????? [2068] Characium_hin ?????????????????????????????????????????????????? [2068] Chlorella_fus ?????????????????????????????????????????????????? [2069] Ankistrodesmus ?????????????????????????????????????????????????? [2066] Pseudotreb_gig GGAG??A?AGGGCCCA?AAGCTGGT??AAGCACTGCACTTCTCGGCAGTG [2069] Pleurastr_terr GGAG??A?AGGGCTCAGAAGCTGGT?AAAG??C?GCA?GTCT?GCGGT?G [2078] Characium_per ?????????????????????????????????????????????????? [2071] Parietochl_pse ?????????????????????????????????????????????????? [2075] Friedmannia_is GGAG??ATAGGGCTC?GAGGTT?GT?AAAGCACTGCACT????GCAGT?T [2074] [ 2160 2170 2180 2190 2200] [ . . . . .] Glycine_max CCGGTGCCCC?C???GGC??GGCCCTTGA231011000110000001027 Oryza_sativa CCGGTGCCCC?C???GGC??GGCCCTTGA231011000110000001027 Zamia_pumila ?????????????????????????????231011000110000001027 Psilotum_n ?????????????????????????????231011000110000001027 Equisetum_ar CCGGTGCCCC?C???GGC??GGCCCTTGA231011000110000001027 Atrichum_angus CCGGGGCCC??C???GGC??GGCCCGTGA231011000110000001027 Notothylas_bre CCGGTG?CCC?????GGC??GGCCCGTG?231011000110000001027 Phaeoceros_lae CCGGTGGCCC?CT??GGC??GGCCCGTGA231011000110000001027 Porella_pi ?????????????????????????????231011000110000001027 Conocephal_con CCGGTGCGCC?CCC?GAC??GGTCC??GA231011000110000001027 Asterella_tene CCGGTG?GCC?CCC?GAC??GGCCCC?GA231011000110000001027 Riccia CCGGTGCTCATCCCCTAAAA?CCAG?AGA231011000110000001027 Klebsormid_fla CTGGTGCGCC?CT??GAC??GGCCCTTGA00001?000101001000001 Coleochaet_nit C?GGTG?AC??CCG???T??T?CCCTAGA001011000111001001021 Fissidens_taxi CAGGTGCCCT?C???GGC??GGCCCT?GA231011000110000001027 Plagiomnium_cu CAGGTGGCCC?TC??GGC??GGCCCGTGA231011000110000001027 Micromonas_pus CCGGTGC?CT?CC??GG???GGCCC?TGA1?000000000000101?0?0 Mantoniel_squa CCGGTGCACT?CCC?GAC??GGCCC???A1?000000000000101?0?0 Nephroselm_pyr CTGGTGCGCC?CTC?GAC??GGCCC??G?1?000000000000101?0?0 Pedinomonas_mi ?C?GTGC?TC?TC???AC???C??CTTGA1?000000000000101?0?0 Tetraselm_cart CCGGAGCGCC?ATT?GAC??GATCCTTGA1?000000000000101?0?0 Enteromorpha CCGGCGCGCA?GTC?GAGTCGGTCCGTGA121011001000001000116 Ulva_fasci CCGGCGCGCC?A?C?GA???GGTCCGTGA121011001000001000116 Ulothrix_zo CTGGAGCGCT?ACC?A?C???GTCCTTGA031011000001001000106 Cympolia_barba ?????????????????????????????111111110003000001117 Batophora_oers ?????????????????????????????111111000?02001001107 Codium_decort TCTGGCCC?C???C??????GGCGGTCC?111011110003000001117 Cladophoro CCCGAGCGCC?TC??CAC??GGCCCTTAA12101110000200100110? Blastophysa_rh ???ACGTTGC??????A????CCCCTTAA12101110010200100110? Trentepohlia CCGGTGCGCC?ATC?GAC??GGTCCT???221011000102001001101 Cephaleuro_par CGG?TGCGCC?ATC??AC????TCC???A221011000102001001101 Characium_vac ?????????????????????????????00100000000001100010? Dunaliella_par ?????????????????????????????100000000000001010000 Chlamyd_reinha ?????????????????????????????000000000000001010100 Volvox_carteri ?????????????????????????????00002000000000011112? Chlorococc_min ?????????????????????????????00000000000000100010? Draparn_plum ?????????????????????????????001011000102101000106 Uronema_belk ?C?GCGCGC??GAT?GA???GGTCC?TGA001011000101101000106 Chlamydom_moew CCCGTGCGCC?GAT??AC??GATCCTT?A000000000000001010100 Stephanos_pl CCGGCGCGCT?AGT?CAC??GGTCCGTGA000020000000000110102 Carteria_rad CTGGCGCGTC?GAC?GAC??GGTCCTT?A000000000000001010100 Gonium_pecto CCGGCGCGC??GTT?GA????GTCC??GA000020000000000110100 Chlorella_kess ?????????????????????????????00000000000000010?1?? Chlorella_vulg ?????????????????????????????00000000000000010?1?0 Protothec_wic ?????????????????????????????00000000000000010?1?? Chlorella_prot ?????????????????????????????00000000000000010?1?? Chlorella_min ?????????????????????????????00000000000000010?1?? Neochloris_aqu ?????????????????????????????00000010000000100010? Neochloris_vig ?????????????????????????????00000010000000100010? Pediastrum_dup ?????????????????????????????00002100000000100010? Scenedesm_obl ?????????????????????????????00002100000000010010? Characium_hin ?????????????????????????????00100010000001100010? Chlorella_fus ?????????????????????????????00000000000000010?1?0 Ankistrodesmus ?????????????????????????????00000000000001010?1?? Pseudotreb_gig TCCGGAGCCC?ACC?GAC??GGCCC?TGA00000000000000200?0?? Pleurastr_terr TC?GCGCGC??GAT??AC??GGTCC?TGA00001100000100200?0?? Characium_per ?????????????????????????????00100000000001100010? Parietochl_pse ?????????????????????????????00000000000000100010? Friedmannia_is CCGGAGCGCC?ATT?GAG?CGGCCCTTGA{02}000000000000020000?? [ 2210 2220 2230 2240 2250] [ . . . . .] Glycine_max 0??0????0??010000110????0??10100??300000?000??0000 Oryza_sativa 0??0????0??010000110????0??10100??300000?000??0000 Zamia_pumila 0??0????0??010000110????0??10100?0300000?000000000 Psilotum_n 0??0????0??010000110????0??10100??300000?000??0000 Equisetum_ar 0??0????0??010000110????0??10100?0300000?000000000 Atrichum_angus 0??0?0?10??010000110????0??101000?300000?000000000 Notothylas_bre 1??000?10?1010000110????0??1010000300000?000000000 Phaeoceros_lae 1??000?10?1010000110????0??1010000300000?000000000 Porella_pi 0??000?10?1010000110????0??1010000300000?000000000 Conocephal_con 0??000?10?1010000110????0??1010000300000?000000000 Asterella_tene 0??000?10?1010000110????0??1010000300000?000000000 Riccia 0??00??10?1010000110????0??1010000300000?000000000 Klebsormid_fla 10000001001010000010????0??1110000?00?000000000000 Coleochaet_nit 10000001001010000110????0??1110000?00000?001000000 Fissidens_taxi 0??000?10?1010000110????0??1010000300000?000000000 Plagiomnium_cu 0??000?10?1010000110????0??1010000300000?000000000 Micromonas_pus 1021?000???01100000?????0???100000300000?000110000 Mantoniel_squa 1021000000101100000?????0?1?100001300000?001110000 Nephroselm_pyr 100101001?101100000?????0???100000210000?001101000 Pedinomonas_mi 1021?0?01??01100000?????0???100001200000?000001000 Tetraselm_cart 10112110100001111000????0???1000010100000000100000 Enteromorpha 10101100101011000000????0?0011010??100000110101010 Ulva_fasci 10101100101011000000??1?0?0011010??100000110101010 Ulothrix_zo 10101100101011000000?0??0?00110101010000?011101010 Cympolia_barba 10?0?10?1??011000000???????010000?310100?000???1?0 Batophora_oers 1??0110?101011000000???????0100001310100?0?0001110 Codium_decort 10401100101011000000????1?1010000?310000?000???0?0 Cladophoro 101011001??011000000????0?0011000??10010?0?0???0?0 Blastophysa_rh 10101100101011000000????1?1011000?310?10?00000?01? Trentepohlia 0?101100101011000?0?????0??0110000?11001?0???000?1 Cephaleuro_par 0?101100101011000?0?????0??0110000?11001?0??0000?1 Characium_vac 1100?10011001110100?????0??010001??10000?00010?010 Dunaliella_par 1101?1?01100?????00?????0???10000?310000?000???010 Chlamyd_reinha 11000100110011101001??1?0?011000110100001000101010 Volvox_carteri 1?0???1011001110?00?????0???10101??10000?000???010 Chlorococc_min 1100?10011001110100?????0??010001??10000?000100010 Draparn_plum 10101100110011101010?1??0??11101010100001000101010 Uronema_belk 10101100110011101010?1??0??1110101010000?000101010 Chlamydom_moew 1?0001?01100?????00?????0??1100111010000?000???010 Stephanos_pl 1101011011001110100?????0??1101111110000?000??1010 Carteria_rad 111001001100?????00?????0??1100111010000?00010?010 Gonium_pecto 110?211011001110100?????0??1101011010000?000101010 Chlorella_kess 1??0???????????0100?0?1000??1000??3?000????0???0?0 Chlorella_vulg 1??0???????????0100?1?0000??1000??3?000?1??0???0?0 Protothec_wic 1??0???????????0100?????0???1000??3?000????0???0?0 Chlorella_prot 1??0???????????0100?1?0000??1000??3?000????0???0?0 Chlorella_min 1??0???????????0100?0?0000??1000??3?000????0???0?0 Neochloris_aqu 1000?10012011110100?????0??010000??10000?000101010 Neochloris_vig 1000??0012011110100?????0??010000??10000?00010?010 Pediastrum_dup 1?001100120111101001????0??1100001?10000?010101010 Scenedesm_obl 1?40???0????1110100???1101??10000???00001000???0?0 Characium_hin 1000?100120?1110100?????0??010000??10000?00010?010 Chlorella_fus 1??0???????????0100?1?1101??1000??3?000????0???0?0 Ankistrodesmus 1??0???????????0100?????0???1000??3?000????0???0?0 Pseudotreb_gig 1000?10010?001111000????0???10000?310000?000100010 Pleurastr_terr 1000?10010?001111000????0???10000?310000?000100010 Characium_per 1100?1001010?11?000?????0??010000??10000?00010?010 Parietochl_pse 1100?1001010?11?000?????0??010000??10000?200100010 Friedmannia_is 10001100101001111000????0???10000?310000?000100010 [ 2260 2270 2280 ] [ . . . ] Glycine_max ?1111111??11?00011001111000011111111111 Oryza_sativa ?1111111??11?00011001111000011111111111 Zamia_pumila 111111111111?00011001111000011111111100 Psilotum_n 111111111111?00011001111000011111000000 Equisetum_ar 111111111111?00011001111000011110000000 Atrichum_angus 111110111111?00011001111111000000000000 Notothylas_bre 111110111111000011110000100000000000000 Phaeoceros_lae 111110111111000011110000100000000000000 Porella_pi 111111111111111100000000000000000000000 Conocephal_con 111111111111111100000000000000000000000 Asterella_tene 111111111111111100000000000000000000000 Riccia 111111111111111100000000000000000000000 Klebsormid_fla ?100000000000000?0000000000000000000000 Coleochaet_nit 1111001100000000?0000000000000000000000 Fissidens_taxi 111111111111000011001111111100000000000 Plagiomnium_cu 111111111111000011001111111100000000000 Micromonas_pus ?00000000000000000000000000000000000000 Mantoniel_squa 000000000000000000000000000000000000000 Nephroselm_pyr 000000000000000000000000000000000000000 Pedinomonas_mi 000000000000000000000000000000000000000 Tetraselm_cart 000000000000000000000000000000000000000 Enteromorpha 0?0000000000000000000000000000000000000 Ulva_fasci 0?0000000000000000000000000000000000000 Ulothrix_zo 000000000000000000000000000000000000000 Cympolia_barba 000000000000000000000000000000000000000 Batophora_oers 000000000000000000000000000000000000000 Codium_decort 000000000000000000000000000000000000000 Cladophoro 000000000000000000000000000000000000000 Blastophysa_rh 000000000000000000000000000000000000000 Trentepohlia 1?0010000000000000000000000000000000000 Cephaleuro_par 1?0010000000000000000000000000000000000 Characium_vac 0?0000000000000000000000000000000000000 Dunaliella_par 000000000000000000000000000000000000000 Chlamyd_reinha 000000000000000000000000000000000000000 Volvox_carteri 0?0000000000000000000000000000000000000 Chlorococc_min 0?0000000000000000000000000000000000000 Draparn_plum 0?0000000000000000000000000000000000000 Uronema_belk 0?0000000000000000000000000000000000000 Chlamydom_moew 0?0000000000000000000000000000000000000 Stephanos_pl 0?0000000000000000000000000000000000000 Carteria_rad 0?0000000000000000000000000000000000000 Gonium_pecto 0?0000000000000000000000000000000000000 Chlorella_kess ??0000000000000000000000000000000000000 Chlorella_vulg ?00000000000000000000000000000000000000 Protothec_wic ??0000000000000000000000000000000000000 Chlorella_prot ??0000000000000000000000000000000000000 Chlorella_min ??0000000000000000000000000000000000000 Neochloris_aqu 0?0000000000000000000000000000000000000 Neochloris_vig 0?0000000000000000000000000000000000000 Pediastrum_dup 0?0000000000000000000000000000000000000 Scenedesm_obl 000000000000000000000000000000000000000 Characium_hin 0?0000000000000000000000000000000000000 Chlorella_fus ??0000000000000000000000000000000000000 Ankistrodesmus ??0000000000000000000000000000000000000 Pseudotreb_gig 0?0000000000000000000000000000000000000 Pleurastr_terr 0?0000000000000000000000000000000000000 Characium_per 0?0000000000000000000000000000000000000 Parietochl_pse 0?0000000000000000000000000000000000000 Friedmannia_is 000000000000000000000000000000000000000 ; END; BEGIN CODONS; GENCODE UNIVNUC ; END; BEGIN ASSUMPTIONS; OPTIONS DEFTYPE=unord PolyTcount=MINSTEPS ; EXSET gaps+unalignsites = 50-55 110-122 171-176 214-220 228-232 267-280 482-489 657-663 676-690 699-713 729-731 737-743 782-785 1362-1391 1416-1429 1691-1695 1709-1755; EXSET LSU = 50-55 110-122 171-176 214-220 228-232 267-280 482-489 657-663 676-690 699-713 729-731 737-743 782-785 1362-1391 1416-1429 1691-1695 1709-1755 1834-2179; EXSET SSU = 1-1833; EXSET MOLECULES = 1-2179; EXSET MORPHOLOGY = 2180-2289; END; BEGIN MACCLADE; v 3.0 -1471374107 1000&/0 0 0 END; tv-0.5/ncl-2.0/data/P95rbcl.nex0000775000076400007640000020154207236527361012702 00000000000000#NEXUS [MacClade 3.05 registered to Franois Lutzoni, ] BEGIN DATA; DIMENSIONS NTAX=51 NCHAR=1206; FORMAT DATATYPE=DNA MISSING=? GAP=- ; MATRIX [ 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480 490 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800 810 820 830 840 850 860 870 880 890 900 910 920 930 940 950 960 970 980 990 1000 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100 1110 1120 1130 1140 1150 1160 1170 1180 1190 1200 ] [ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] Anemia_mexicana TATACTCCCCAGTATCAAACCAAAGATACTGATATATTGGCAGCCTTTCGAATGACTCCGCAACCGGGAGTACCTCCCGAGGAGGCTGGAGCTGCGGTCGCTGCTGAGTCCTCCACGGGTACATGGACCACGGTATGGACGGATGGACTTACCAGTCTTGATCGTTACAAGGGTCGGTGCTACGATATTGAACCCGTTGCCGGAGAGACAAATCAATATATCGCTTATGTAGCTTACCCCTTGGATTTATTTGAAGAAGGTTCTGTTACTAATTTGCTAACTTCTATTGTAGGTAACGTATTTGGATTCAAAGCCTTGCGTGCTCTACGCCTAGAGGATTTAAGAATTCCTCCTGCTTATTCAAAAACGTTCCTAGGGCCGCCCCACGGCATCCAGGTCGAAAGAGATAAATTAAATAAATATGGTCGTCCCTTATTAGGATGTACAATTAAGCCCAAACTAGGTTTATCCGCCAAAAATTATGGTAGAGCCGTTTATGAATGTCTTCGTGGCGGACTTGATTTTACCAAGGATGATGAGACCGTCAATTCCCAACCATTCATTCGTTGGCGCGATCGTTTCCTATTTGTAGCAGAAGCTCTTTTTAAATCCCAAGCCGAAACGGGCGAAATCAAGGGACATTACTTAAATGCTACTGCAGGTCACTGCGATGAAATGATAAAAAGGGCGGTCTTCGCTAGGGAATTGGGTGCGCCTATCGTTATGCACGACTACCTGACTGGAGGATATACCGCAAATACCAGCTTGGCCTTCTACTGCCGAGATAATGGATTGCTTTTACACATTCACCGCGCAATGCATGCCGTAATTGATAGACAAAAGAATCACGGCATGCATTTTCGTGTATTGGCTAAAACATTACGTATGTCCGGTGGAGATCATATCCATGCTGGGACTGTAGTCGGTAAACTCGAAGGAGAACGAGAAGTTACTTTAGGATTCGTTGATTTACTTCGCGACGATTATATTGAAAAAGATCGTAGTCGCGGTATCTACTTCACCCAGGACTGGGTATCTATGCCAGGAGTACTGCCCGTAGCTTCTGGAGGCATCCACGTATGGCACATGCCCGCTTTAACTGAAATATTCGGAGATGATTCTGTATTGCAATTCGGTGGAGGAACCTTAGGGCATCCCTGGGGAAATGCACCTGGAGCTGTTGCAAATCGAGTTGCATTGGAAGCT [1206] Asplenium_filipes TATACCCCCGAATACAAGACCAAAGATACTGACATCTCAGCAGCTTTCCGGATGACCCCACAACCCGGAGTACCGGCTGAAGAAGCCGGAGCTGCGGTAGCAGCGAAATCCTCCACAGGTACGTGGACCACTGTATGGACAGATGGGTTGACCAGCCTTGACCGTTACAAGGGCCGATGCTACGACATCGAGCCCGTCGCTGGGGAAGAAAACCAGTATATCGCGTATGTAGCTTATCCCTTGGACCTCTTCGAAGAAGGTTCCGTCACCAACTTATTTACTTCCATTGTAGGTAACGTTTTCGGATTTAAGGCTCTACGTGCCCTACGCTTGGAAGACCTTCGAATCCCCCCCGCTTACTCCAAAACTTTCCTTGGACCGCCTCATGGTATTCAGGTCGAAAGGGATAAATTGAACAAATATGGACGTCCTCTACTGGGATGTACGATCAAGCCAAAATTAGGCCTATCTGCTAAAAATTACGGTAGAGCTGTTTATGAATGCCTTCGTGGTGGACTTGATTTTACAAAAGATGATGAAAACGTAAACTCGCAACCATTCATGCGTTGGAGAGATCGTTTTTTATTTGTTGCAGAAGCTCTCTTCAAAGCCCAAGCTGAAACAGGCGAAATCAAGGGGCATTACTTAAACGCCACCGCAGGTACATGTGAAGAAATGTTAAAGAGAGCTGTTTTTGCTAGAGAATTGGGTGCACCGATTGTCATGCATGACTACCTGACCGGAGGGTTTACCGCAAATACCAGTTTAGCTTTTTATTGCAGAGACAATGGACTGCTTCTTCATATTCATCGCGCGATGCATGCTGTGATTGATAGACAACGAAATCACGGTATGCATTTTCGTGTACTGGCAAAAGCATTGCGCATGTCCGGTGGGGATCACGTACACGCTGGAACTGTAGTAGGTAAACTGGAAGGGGAAAGAGAAGTCACTTTGGGTTTCGTTGATTTACTCCGCGACGATTATATCGAGAAAGATCGTGCACGCGGTGTTTATTTCACCCAAGATTGGGTCTCCATGCCGGGTGTATTCCCCGTTGCTTCGGGGGGTATCCACGTATGGCACATGCCAGCTCTAACCGAAATCTTTGGGGACGACTCTGTCCTACAGTTCGGTGGAGGAACTTTGGGACATCCCTGGGGAAATGCACCCGGTGCGGTAGCCAACCGAGTCGCGTTAGAAGCT [1206] Azolla_caroliniana TACACTCCCGATTATGTTACCAAAGATACCGATATTTTGGCAGCTTTCCGAATGACCCCGCAACCCGGAGTCCCACCCGAAGAGGCTGGAGCTGCGGTAGCTGCGGAATCTTCTACAGGTACATGGACCACCGTATGGACAGATGGACTTACCAGTCTTGACCGTTACAAAGGTAGATGCTATGATATCGAACCTGTTGCTGGAGAAGACAACCAATACATCGCATACGTAGCTTACCCCCTAGATTTATTCGAAGAGGGTTCCGTTACCAACATGTTTACCTCCATCGTAGGTAATGTATTCGGATTTAAGGCTCTACGCGCTCTTCGCCTAGAAGATCTTCGAATTCCCCCTGCTTATTCCAAAACTTTCATCGGACCACCCCACGGTATCCAGGTTGAAAGGGACAAACTGAACAAATATGGACGTCCTCTACTAGGATGCACGATAAAGCCAAAATTGGGCTTATCTGCTAAGAATTATGGTAGAGCTGTTTATGAATGTCTCCGCGGTGGACTTGACTTTACCAAGGATGATGAAAACGTAAACTCTCAACCATTCATGCGTTGGAGAGACCGTTTCCTATTCGTAGCAGAAGCTCTATTCAAGTCTCTGGCCGAAACGGGCGAAATCAAAGGACATTACTTGAACGCCACTGCAGGTACATGCGAAGAAATGCTAAAAAGAGCTCAATTCGCTAGAGAGTTGGGTGCACCAATCGTCATGCATGACTACCTGACCGGAGGTTTTACTGCAAACACTAGCTTGGCTTTCTACTGCCGAGACAATGGGCTACTTCTTCACATTCACCGCGCAATGCATGCTGTCATCGATAGACAGAGAAATCATGGTATACATTTCCGCGTGTTAGCCAAAGCATTACGTATGTCTGGTGGGGACCATATCCACTCCGGAACCGTAGTAGGTAAACTAGAAGGAGAGCGAGAAGTAACTCTGGGTTTTGTCGATCTACTTCGCGACGATTACATTGAAAAGGACCGTAGCCGCGGTATCTATTTCACCCAAGATTGGGTATCTATGCCAGGAGTATTGCCTGTAGCTTCAGGTGGTATCCACGTATGGCACATGCCCGCTCTAACCGAGATTTTTGGGGACGATTCCGTATTACAATTTGGTGGAGGAACCCTAGGCCATCCTTGGGGGAACGCACCCGGTGCTGTAGCTAACAGAGTGGCTTTGGAGGCT [1206] Blechnum_occidentale TACACCCCCGAATACAAGACCAAAGATACCGATATCTTAGCAGCTTTCCGGATGACCCCACAACCCGGAGTACCGGCTGAGGAAGCCGGAGCTGCGGTGGCTGCGGAATCCTCCACAGGTACGTGGACTACTGTCTGGACAGATGGGTTGACCAGTCTCGACCGTTACAAGGGCCGATGCTACGACATTGAACCCGTTGCTGGAGAAGAAAACCAGTATATTGCGTATGTAGCTTATCCTTTGGATCTATTTGAGGAAGGTTCCGTCACCAATTTGTTCACTTCCATTGTAGGTAATGTTTTTGGATTTAAGGCTCTACGCGCCATACGCTTGGAAGATCTTCGAATCCCTCCTGCATATTCTAAAACTTTCATTGGACCGCCTCACGGTATTCAAGTCGAAAGGGATAAACTGAACAAATATGGACGTCCCTTATTGGGATGTACAATCAAGCCAAAATTAGGTCTGTCTGCTAAAAATTATGGTAGAGCCGTCTACGAATGCCTTCGTGGTGGACTTGATTTTACAAAAGATGATGAAAACGTAAATTCCCAACCATTCATGCGTTGGAGAGATCGTTTCTTATTTGTAGCGGAAGCTCTTTTCAAAGCCCAGGCTGAAACGGGCGAAATCAAAGGGCATTACTTAAATGCTACTGCAGGTACGTGTGAGGAAATGTTGAAGAGAGCTGTTTTTGCTAGAGAGTTGGGTGCACCGATAGTCATGCATGACTACCTGACCGGAGGGTTTACCGCAAATACCAGCTTAGCTTTTTACTGCCGAGACAATGGACTGCTTCTCCACATTCACCGTGCGATGCATGCTGTTATCGATAGACAGCGGAATCACGGTATGCATTTTCGCGTATTGGCCAAAGCATTACGCATGTCCGGTGGGGATCATAT?C?CGCCGGAACTGTAGTAGGCAAACTAGAAGGTGAACGAGAAGTCACTTTGGGTTTCGTCGATTTACTTCGTGAAGATTATATTGAAAAAGATCGTAGCCGTGGTATTTATTTCACCCAAGATTGGGTATCTATGCCGGGTGTAATCCCCGTAGCTTCAGGGGGTATCCACGTCTGGCATATGCCCGCTCTAACCGATATCTTTGGGGACGACGCCGTATTACAGTTCGGCGGAGGAACCTTGGGACATCCTTGGGGAAACGCACCCGGTGCAGTAGCCAACCGAGTCGCATTAGAAGCT [1206] Cheiropleuria_bicuspis TACACTCCCAAGTATGAGACCAAAGACACCGATATCTTAGCAGCCTTTCGAATGACCCCGCAACCCGGAGTACCGCCTGAGGAAGCTGGAGCTGCAGTAGCTGCGGAATCTTCCACAGGTACATGGACCACTGTATGGACGGATGGACTTACTAGTCTCGATCGCTACAAAGGCCGATGCTATGATATCGAACCTGTTGCTGGGGAGGATAATCAGTATATTGCATATGTAGCTTATCCTTTGGATTTATTTGAAGAAGGTTCCGTTACCAATATGTTCACTTCCATTGTAGGTAACGTTTTTGGATTCAAGGCCCTACGCGCTCTCGGCTTAGAAGACCTTCGAATTCCTCCTGCTTATTCTAAAACTTTCATTGGGCCGCCCCATGGTATCCAGGTTGAAAGGGATAAGCTGAACAAATATGGGCGCCCCTTATTGGGATGTACAATCAAGCCAAAATTGGGCTTATCTGCTAAAAACTATGGCAGGGCTGTTTACGAATGTCTCCGTGGCGGACTTGATTCTACGAAGGATGATGAGAACGTAAATTCTCAACCATTTATGCGTTGGAGGGACCGGTTCGTGTCTGTGGCGGAAGCTCTTTTCAAGGCTCAGGCCGAAACGGGCGAAATAAAAGGACATTATCTAAATGCCACTGCGGGTACGTGTGAGGAAATGATGAAAAGAGCAGCCTTTGCTAGAGAATCGGGAGTACCCATCACCATGCATGATTACTTGACAGGAGGCTTCACTGCAAATACTAGCTTGGCCTTTTATTGTCGAGATAATGGGCTACTGCTTCATATCCACCGCGCGATGCATGCTGTTATCGATAGACAGAGAAATCACGGTATCCATTTCCGTGTCCTGGCCAAAGCATTGCGTATGTCCGGTGGGGATCATGTCCACGCCGGGACGGTAGTGGGTAAACTGGAGGGAGAACGAGACGTCACATTGGGTTTCGTCGATTTGCTACGCGACGATTATATCGAGAAAGACCGAAGCCGGGGTATATATTTCACTCAGGATTGGGTATCCATGCCAGGTGTATTTCCCGTAGCCTCGGGAGGTATCCACGTCTGGCATATGCCCGCTCTAACTGAAATCTTCGGAGATGATTCTGTCTCACAGTTCGGCGGAGGAACCTTGGGACACCCTGGGGGAAACGCACCAGGCGCTGTAGCTAATCGAGTTGCATTGGAAGCT [1206] Cyathea_lepifera TACACTCCCAAGTATGAGACCAAAGACACCGATATCTTGGCAGCCTTTCGAATGACCCCGCAACCCGGAGTACCGCCTGAGGAAGCTGGAGCTGCAGTAGCTGCGGAATCTTCCACAGGTACATGGACCACTGTATGGACGGATGGACTTACTAGTCTCGATCGCTACAAAGGCCGATGCTATGATATCGAACCTGTTGCTGGGGAGGATAATCAGTATATTGCATATGTAGCTTATCCTTTGGATTTATTTGAAGAAGGTTCCGTTACCAATATGTTCACTTCCATTGTAGGTAACGTTTTTGGATTCAAGGCCTTACGCGCTCTCCGCTTAGAAGATCTTCGAATTCCTCCTGCTTATTCTAAAACTTTCATTGGGCCGCCCCATGGTATCCAGGTTGAAAGGGATAAGCTGAACAAATATGGGCGTCCCTTATTAGGATGTACAATCAAGCCAAAATTGGGCTTATCTGCTAAAAATTATGGGAGAGCCGTTTATGAATGTCTCCGCGGTGGACTTGACTTCACCAAGGATGATGAGAACGTAAATTCCCAACCATTCATGCGTTGGAGAGATCGTTTCTTATTCGTAGCAGAAGCTCTCTTCAAATCTCAGGCCGAAACAGGCGAAATTAAGGGACATTACTTAAACGCTACTGCGGGTACGTGTGAAGAAATGTTGAAAAGAGCCTGTTTTGCTAGAGAATTGGGGGCACCAATTGTAATGCATGACTATCTGACCGGAGGGTTTACCGCAAACACTAGCTTGGCCTTCTATTGCCGAGATAATGGGCTGCTTCTTCACATTCACCGTGCAATGCATGCTGTCATCGATAGACAGAAAAATCACGGTATACATTTTCGTGTATTAGCAAAAGCATTACGTATGTCCGGTGGGGATCATGTTCACTCTGGGACTGTAGTAGGCAAACTAGAGGGAGAACGAGAAGTCACTTTGGGTTTTGTCGATTTGCTTCGCGACGATTATATTGAAAAAGACCGTAGCCGCGGCATCTATTTCACCCAAGATTGGGTATCTATGCCGGGCGTACTTCCCGTAGCTTCGGGGGGTATCCACGTATGGCATATGCCTGCTCTAACCGAAATCTTCGGAGACGATTCTGTCTTACAGTTCGGCGGAGGAACCCTGGGACATCCTTGGGGAAATGCGCCCGGTGCCGTAGCTAATCGAGTCGCGTTAGAGGCT [1206] Blotiella_pubescens TACACTCCCCAATATCAGACCAAAGACACTGATATTTTAGCGGCCTTCCGAATGACCCCACAACCTGGAGTACCGGCTGAAGAAGCGGGAGCTGCGGTAGCTGCCGAATCCTCTACGGGGACGTGGACCACTGTATGGACAGATGGGCTTACCAGCCTTGATCGCTACAAGGGCCGCTGCTACGATATCGAACCCGTCGCTGGGGAAGAAAACCAGTATATTGCATATGTAGCTTATCCCTTGGATCTATTCGAAGAAGGTTCTGTAACCAATTTATTCACTTCAATTGTAGGTAATGTTTCCGGATTCAAGGCCCTACGCGCTCTACGACTAGAAGACCTTCGAATTCCTCCTTCTTATTCTAAAACTTTCATTGGACCACT?CACGGTATTCAGGTCGAAAGGGACAAACTGAACAAATATGGACGTCCTTTATTGGGATGTACAATCAAGCCAAAATTGGGCTTGTCTGCTAAGAATTATGGGAGAGCCGTCTATGAATGCCTTCGGGGCGGACTTGATTTTACAAAAGACGACGAGAACGTGAATTCCCAACCATTCATGCGTTGGAGAGATCGTTTCTTATTCGTAGCAGAAGCTCTTTTCAAATCTCAGGCTGAAACAGGTGAAATCAAGGGACATTACTTAAATGCCACTGCAGGTACGTGTGAAGAGATGATGAAGAGAGCTTATTTTGCTAGAGAATTGGGTGTACCAATTATCATGCATGACTATTTGACCGGGGGATTTACCGCAAATACCAGCTTAGCTTATTATTGCAGGGACAATGGGCTGCTTCTTCATATTCACCGTGCGATGCATGCTGTCATCGATAGACAACGAAATCATGGTATGCACTTCCGCGTATTGGCCAAAGCATTACGCATGTCCGGCGGAGACCACATCCACGCCGGAACCGTAGTAGGCAAACTAGAGGGGGAGCGAGAAGTCACCTTGGGTTTTGTCGATTTGCTTCGCGATGATTACATCGAAAAGGATCGTAGCCGCGGCATCTATTTCACGCAGGATTGGGTATCTATGCCGGGTGTACTTCCCGTAGCTTCGGGGGGTATCCACGTCTGGCACATGCCCGCCCTAACCGAAATCTTCGGCGACGAT?CTGTCTTACAGTTCGGTGGCGGAACTTTGGGACATCCCTGGGGAAATGCACCCGGTGCCGTAGCTAACCGAGTTGCATTAGAAGCT [1206] Dennstaedtia_punctilobula TACACCCCCGGGTATAAGACCAAAGACACTGATATCTCAGCAGCCTTCCGCATGACCCCACAACCCGAAGTACCAGCTGAAGAAGCAGGAGCTGCGGTAGCTGCCGAATCCTCCACGGGTACATGGACCACTGTATGGACAGATGGACTTACCAGTCTTGATCGGTACAAGGGCCGGTGCTACGATATCGAACCCGTCGCTGGAGAGGAAAACCAGTATATCGCATATGTAGCTTATCCCTTGGATCTATTCGAGGAAGGTTCCGTCACTAATTTGTTCACGTCCATTGTAGGTAACGTTTTCGGATTTAAGGCCCTACGCGCTCTACGCCTAGAAGACCTTCGAATTCCCCCCGCTTATTCCAAAACTTTCATTGGACCACCTCATGGTATTCAGGTCGAAAGGGACAAACTGAACAAATATGGACGTCCCTTATTGGGATGTACAATCAAGCCAAAATTGGGCTTGTCCGCTAAGAATTATGGTAGAGCCGTCTATGAATGCCTTCGTGGTGGACTTGATTTCACAAAAGATGATGAGAACGTAAATTCCCAACCATTCATGCGTTGGAGGGATCGCTTCTTATTCGTGGCAGAAGCTCTTTTCAAATCCCAGGCTGAAACAGGCGAAATCAGGGGACATTACTTGAATGCCACTGCAGGTACATGTGAAGAGATGTTGAAGAGAGCTGTTTTTGCTAGAGAATTGGGTGTACCAATTGTCATGCACGACTACCTGACCGGAGGGTTTACCGCAAATACCAGCCTAGCTTTCTATTGCAGAGACAATGGGCTGCTTCTTCATATTCACCGCGCGATGCATGCTGCTATCGATAGACAACGAAATCACGGCATACATTTCCGCGTATTAGCCAAAGCATTACGGATGTCCGCCGGGGATCATATCCACGCCGGAACTGTAGTAGGCAAATTAGAGGGAGAACGAGAAGTCACTTTGGGTTTCGTTGATTTACTCCGCGATGATTACATCGAAAAAGATCGTAGCCGCGGTATCTATTTCACGCAAGATTGGGTGTCTATGCCGGGTGTACTCCCCGTAGCTTCAGGGGGTATCCACGTCTGGCACATGCCTGCCCTAACCGAAATCTTCGGGGACGATTCCGTCTTACAATTCGGTGGCGGAACTTTGGGACATCCCTGGGGGAACGCGCCCGGTGCCGTAGCTAACCGAGTCGCATTAGAAGCT [1206] Histiopteris_incisa TACACTCCCGAATATAAGACCAAGGACACTGATATTTTAGCAGCCTTCCGAATGACCCCACAACCTGGAGTACCAGCTGAGGAAGCCGGAGCTGCGGTAGCTGCGGAATCCTCCACGGGTACATGGACCACTGTATGGACAGATGGGCTTACCAGTCTCGATCGTTACAAGGGCCGGTGCTACGATATCGAACCCGTCGCTGGAGAAGAAAACCAGTATATTGCATATGTAGCTTATCCCTTGGATCTATTCGAAGAAGGTTCTGTAACCAATTTGTTCACTTCAATTGTAGGTAATGTTTTCGGATTCAAGGCCCTACGCGCTCTACGCCTAGAAGACCTTCGAATTCCCCCCGCTTATTCTAAAACTTTCATTGGACCGCCTCACGGTATTCAGGTCGAAAGGGATAAACTGAACAAATATGGACGTCCCTTATTGGGGTGTACAATCAAGCCAAAATTGGGCTTGTCTGCTAAGAATTATGGTAGAGCCGTCTATGAATGCCTTCGTGGTGGACTTGATTTCACAAAAGACGATGAAAACGTAAATTCCCAACCATTCATGCGTTGGAGAGATCGCTTCTTATTCGTAGCAGAAGCTCTTTTCAAATCCCAGGCTGAAACAGGTGAAATCAAGGGACATTACTTAAATGCCACTGCAGGTACGTGTGAAGAAATGATGAAGAGAGCTGTTTTTGCTAGAGAATTGGGTGCACCAATTGCCATGCATGACTACCTGACCGGGGGATTTACCGCAAATACCAGCTTAGCTTATTATTGCAGAGACAATGGGCTGCTTCTTCATATTCACCGTGCAATGCATGCTGTCATCGATAGACAACGGAATCATGGTATGCACTTCCGTGTATTGGCCAAAGCGTTACGCATGTCCGGCGGAGACCACATCCACGCCGGAACCGTAGTAGGCAAACTAGAGGGGGAGCGAGACGTCACCTTGGGTTTTGTCGATTTGCTTCGCGATGATTACATCGAAAAAGATCGTAGCCGCGGCATCTATTTCACGCAGGATTGGGTATCTATGCCGGGTGTACTCCCCGTAGCTTCAGGGGGTATCCACGTCTGGCACATGCCCGCCCTAACCGAAATCTTCGGGGACGATTCTGTCTTACAGTTCGGTGGCGGAACTTTGGGACATCCCTGGGGAAATGCGCCCGGTGCCGTAGCTAACCGAGTCGCATTAGAAGCT [1206] Lindsaea_odorata TATACTCCCGATTACAAAACCAAAGACACCGATATCCTAGCAGCCTTTCGAATGACCCCGCAGCCTGATGTGCCGGCTGAAGAAGCCGGAGCTGCCGTAGCTGCAGAGTCTTCAACGGGTACTTGGACTACTGTATGGACGGATGGCCTTACCAGTCTTGATCGTTACAAAGGCCGGTGCTACGATATTGAACCCGTTGCCGGAGAAGAAAATCAATATATTGCATATGTAGCATACCCTTTGGATTTATTCGAAGAAGGTTCTGTTACCAATTTATTCACTTCGATTGTAGGTAACGTGTTTGGGTTTAAAGCCCTACGTGCCCTACGGTTAGAAGATCTTCGAATCCCCCCAGCTTATTCCAAAACTTTTATTGGACCACCCCACGGTATTCAGGTTGAAAGGGATAAACTGAACAAATATGGACGTCCCTTATTGGGATGTACAATCAAGCCGAAACTGGGCTTATCTGCTAAAAACTACGGTAGGGCTGTTTACGAATGTCTACGCGGCGGCCTTGATTTCACAAAAGATGATGAGAACGTGAACTCCCAACCATTCATGCGTTGGAGAGATCGTTTTCTTTTCGTAGCAGAAGCTCTTTTTAAATCCCAGGCTGAAACAGGTGAAATTAAGGGGCATTACTTAAATGCTACTGCAGGTACGTGTGAGGAAATGATAAAAAGAGCGGTTTTTGCCAGAGAGTTGGGAGCACCAATTGTTATGCATGACTACCTAACCGGAGGTTTTACGGCTAATACTAGTTTAGCTTTTTATTGTAGAGACAATGGGCTGCTTCTCCACATTCACCGTGCAATGCATGCTGTTATCGATAGACAACGAAATCACGGGATGCATTTCCGCGTATTAGCTAAAGCATTGCGTATGTCCGGTGGGGATCATATACACGCTGGAACTGTAGTAGGCAAATTAGAAGGTGAACGAGAAGTTACTTTGGGTTTTGTCGATTTGCTGCGCGATGATTATATTGAAAAAGACCGTAATCGCGGCATCTATTTCACCCAAGATTGGGTATCTATGCCAGGTGTACTTCCCGTAGCTTCTGGGGGTATCCACGTTTGGCACATGCCCGCCTTGACTGAAATTTTCGGAGATGACTCTGTATTGCAGTTTGGCGGAGGAACTTTGGGACACCCCTGGGGAAATGCGCCTGGTGCTGTAGCCAACCGAGTTGCATTAGAGGCT [1206] Lonchitis_hirsuta TACACCCCCGATTATAAGACAAAAGATACTGATATCTTAGCAGCCTTTCGGATGACTCCGCAACCCGGGGTACCGGCCGAAGAAGCCGGAGCTGCGGTAGCTGCCGAATCTTCCACGGGTACGTGGACTACTGTATGGACGGATGGACTTACAAGCCTCGATCGATACAAGGGTCGGTGCTACGATATTGAACCTGTCGCTGGAGAGGAAAACCAATACATCGCATATGTAGCTTATCCCTTGGATCTATTCGAAGAAGGCTCCGTTACTAATTTATTTACCTCCATCGTAGGTAACGTATTCGGGTTCAAAGCCCTGCGCGCTCTACGGCTAGAAGACCTTCGGATTCCTCCCGCTTATTCTAAAACTTTTATTGGCCCCCCCCATGGCATTCAGGTCGAAAGGGATAAACTGAACAAATACGGACGTCCCCTATTGGGCTGTACAATCAAGCCAAAATTAGGATTATCCGCCAAGAATTACGGTAGAGCCGTCTATGAATGTCTCCGTGGTGGACTTGACTTCACAAAAGATGATGAAAACGTAAATTCTCAACCATTCATGCGTTGGAGAGATCGCTTCCTATTCGTAGCAGAAGCCCTTTTCAAATCCCAGGCGGAAACGGGTGAAATCAAAGGACACTACTTAAATGCCACCGCAGGTACATGTGAAGAAATGATGAAGAGGGCTGTTTTTGCCAGAGAATTGGGGGCACCAATTGTCATGCATGACTACCTTACCGGGGGGTTCACCGCAAATACTAGTTTAGCCCATTATTGTAGAGATAATGGGCTGCTTCTTCACATTCACCGCGCAATGCACGCTGTCATTGACAGACAACGAAATCACGGTATGCATTTCCGTGTATTAGCCAAAGCATTACGCATGTCCGGTGGAGATCATATCCACGCCGGAACTGTAGTAGGCAAACTAGAAGGGGAAAGAGAAGTCACCTTAGGTTTTGTCGATTTGCTCCGTGACGACTACATCGAAAAAGATCGTAGCCGTGGTATTTATTTCACCCAAGATTGGGTATCTATGCCAGGTGTCCTTCCCGTAGCTTCCGGGGGTATTCACGTCTGGCATATGCCCGCCCTAACCGAAATCTTTGGAGACGACTCCGTCTTACAATTCGGTGGAGGAACCTTAGGACACCCTTGGGGAAATGCGCCTGGTGCTGTAGCTAACCGAGTCGCATTAGAGGCT [1206] Microlepia_strigosa TACACTCCCGGATATAAGACTAAAGATACTGATATCTTAGCAGCCTTCCG?ATGACTCCTCAACCTGGAGTTCCACCTGAGGGAGCAGGGGCCGC?GTAGCTGCCGAATCTTCTACTGGTACATGGACCACTGTGTGGACCGATGGACTTACCAGCCTTAT?CGTTACAAAGGGCGCTGCTACGATATCGAACCCGTTGCTGGAGAAGAAAACCAGTATATCGCATATGTAGCTTATCCCCTGGATCTATTCGAGGAAGGTTCCGTTACTAATTTGTTCACTTCCAT?GTAGGTAATGTTTTCGGATTTAAGGCCCTACGCGCTCTACGCCTAGAAGACCTTCGAATTCCCCCTGCCTATTCCAAAACTTTCATTGGACCACCTCATGGTATTCAGGTCGAAAGAGACAAACTGAACAAATATGGACGTCCTTTATTGGGATGTACAATCAAGCCAAAATTGGGCTTGTCCGCTAAGAATTATGGTAGAGCTGTCTATGAATGCCTTCGTGGTGGACTTGATTTCACAAAAGATGATGAGAACGTAAATTCCCAACCATTCATGCGTTGGAGGGATCGTTTCTTATTCGTGGCAGAAGCTCTTTTCAAATCCCAGGCTGAAACAGGCGAAATCAAGGGACATTACTTAAATGCCACCGCAGGTACATGTGAAGAGATGATGAAGAGAGCTGTTTTTGCTAGAGAATTGGGTGCACCAATTGTCATGCACGACTACCTGACCGGAGGGTTCACTGCAAATACCAGCTTAGCTTATTATTGCAGAGACAATGGGCTACTTCTTCATATTCACCGCGCGATGCATGCTGTCATTGATAGACAACGAAATCACGGTATGCATTTCCGCGTATTGGCTAAAGCATTACGCATGTCCGGCGGAGATCATATCCATGCCGGAACTGTGGTAGGCAAATTAGAGGGGGAGCGAGACGTCACCTTGGGTTTCGTTGATTTACTCCGCGACGATTACATCGAAAAAGATCGTAGCCGCGGTATCTATTTCACGCAAGATTGGGTGTCTATGCCGGGTGTACTCCCCGTAGCTTCGGGGGGTATCCACGTCTGGCATATGCC?GCCCTAACCGAAATCTTCGGGGACGACTCTGTCTTACAATTCGGTGGCGGAACCTTGGGACATCCCTGGGGGAATGCGCCCGGTGCCGTAGCTAATCGAGTCGCATTAGAAGCT [1206] Monachosorum_henryi TACACTCCCGGATATAAGACCAAAGACACTGATATCTTAGCAGCCTCTCGAATGACTCCACAACCCGGAGTGCCGGCTGAAGAGGCGGGAGCTGCGGTAGCTGCGGAATCCTCCACGGGTACATGGACCACTGTATGGACAGACGG?CTTACCAGCCTCGATCGCTACAGGGCCCGGTGCTACGATATCGAACCCGTCGCTGGAGAGGAAAACCAGTATATCGCGTATGTAGCTTATCCCTTGGATCTATTCGAAGAAGGTTCCGTCACCAATTCGTTCACTTCTATTGTAGGTAACGTTTTCGGATTCAAGGCCCTACGCGCTCTACGCCTAGAAGACCTTCGAATTCCTCCTGCTTATTCCAAAACTTTCCAAGGACCGCCTCATGGTATTCAGGTCGAAAGGGACAAATTGAACAAATATGGACGTCCCTTTTT?GGATGTACAATCAAGCCAAAATTGGGCTTGTCTGCCAAGAATTATGGTAGAGCCGTCTACGAATGCCTTCGCGCCGGACTTGATTTCACAAAAGATGATGAAAACGTAAATTCCCAACCATTCATGCGTTGGAGAGACCGCTTCTTATTCGTAGCAGAAGCTCTCTTCAAAGCCCAGGCTGAAACGGGCGAAATCAAAGGACATTACTTAAACGCTACTGCAGGTACGTGTGAAGAAATGATGAAGAGAGCTGTTTTTGCTAGAGAATTGGGTGCACCGATTGTCATGCATGACTACTTAACCGGAGGGTTCACCGCAAATACCAGCTTAGCTTTATATTGCAGAGACAATGGGCTGCTTCTTCATATTCACCGCGCAACGCATGCTGTCATCGATAGACAGCGGAATCACGGCATGCACTTTCGCGTATTGGCCAAAGCATTACGCATGTCCGGTGGGGATCATATCCACGCCGGAACTGTAGTAGGCAAACTAGAGGGAGAACGAGAAGTCACCTTGGGTTTCGTCGATTTGCTTCGCGATGACTATATCGAAAAAGATCGTAGCCGCGGCATCTACTTTACCCAAGATTGGGTGTCTATGCCGGGTGTCATCCCCGTAGCTTCGGGGGGTATCCACGTCTGGCACATGCCCGCCCTAACCGAGATCTTCGGGGACGATTCTGTCTTGCAGTTCGGTGGCGGAACCTTGGGACATCCTTGGGGAAACGCGCCCGGTGCCGTAGCTACCCGAGTCGCATTAGAAGCT [1206] Pteridium_aquilinum TACACCCCCGAATATAAGACCAAAGACACTGATATCTTAGCAGCCTTCCGAATGACCCCACAACCCGGAGTACCGGCTGAGGAAGCAGGAGCTGCGGTAGCTGCAGAATCCTCCACGGGTACATGGACCACTGTATGGACAGACGGGCTTACCAGTCTTGATCGCTACAAGGGCCGATGCTACGATATTGAACCCGTCGCTGGAGAAGAAAACCAGTATATCGCATATGTAGCTTATCCCTTGGATCTATTTGAAGAAGGTTCTGTAACCAATTTGTTCACTTCAATTGTAGGTAATGTTTTCGGATTTAAGGCCCTACGCGCTCTACGCCTAGAAGACCTTCGAATTCCTCCCGCTTATTCTAAAACTTTCATTGGACCGCCTCACGGTATTCAGGTCGAAAGAGACAAACTGAACAAATATGGACGTCCCTTATTGGGATGTACAAACAAGCCAAAATTGGGCTTGTCTGCTAAAAATTACGGTAGAGCCGTCTATGAATGCCTTCGTGGTGGACTTGATTTCACAAAAGATGATGAAAACGTAAATTGCCAACCATTCATGCGTTGGAGAAATCGCTTCTTATTCGTATCAGAAGCTCTTTTCAAAGCCCAGGCTGAAACCGGCGAAATCAAGGGACATTACTTAAATGCCACTGCTGGTACGTGTGAAGAAATGATGAAGAGAGCTGCTTTTGCATACGAATTGGGTGTACCAATCGTCATGCATGACTACCTGACCGGGGGATTTACTGCAAATACCAGCTTAGCTTTTTATTGCAGAGACCATGGGCTGCTTCTCCACATTCACCGTGCAATGCATGCTGTCATCGATAGACAACGAAATCACGGTATACAATTCCGTGTATTGGCCAAAGCATTACGCATGTCCGGTGGAGACCACATTCACGCCGGAACTGTAGTAGGCAAACTAGAGGGAGAACGAGAAGTCACCTTGGGTTTTGTCGATTTTCTTCGCGATGATTACATCGAGAAAGATCGTAGCCGTGGCATCTATTTCACGCAGGATTGGGTATCTATGCCGGGTGTACTCCCCGTAGCCTCAGGGGGTATCCACGTCTGGCACATGCCCGCTCTAACCGAAATCTTCGGGGACGATTCTGTCTTGCAGTTCGGTGGCGGAACTTTAGGACATCCATGGGGAAATGCGCCTGGTGCCGTAGCTAACCGAGTCGCATTAGAAGCT [1206] Calochlaena_dubia TACACTCCCGATTATGTAACCAAAGACACCGATATATTGGCGGCCTTTCGAATGACCCCGCAACCCGGAGTACCGCCCGAGGAAGCTGGAGCTGCAGTAGCTGCGGAATCTTCCACAGGTACATGGACCACTGTATGGACGGATGGACTTACTAGTCTCGATCGCTACAAAGGTCGATGCTATGATATCGAACCTGTTTCTGGAGAGGAGAATCAGTATATTGCATATGTAGCTTATCCTTTGGATCTATTTGAAGAAGGTTCCGTTACCAATATGTTCACTTCCATTGTAGGTAATGTTTTCGGATTCAAAGCCCTACGCGCTCTCCGCTTAGAAGATCTTCGAATTCCTCCTGCTTATTCTAAGACTTTCATTGGACCGCCCCACGGCATCCAGGTTGAAAGAGATAAGCTGAACAAATATGGGCGTCCCTTATTAGGATGTACAATCAAACCGAAATTGGGCTTATCTGCTAAGAATTATGGGAGAGCCGTTTATGAATGTCTCCGTGGTGGACTTGACTTCACCAAGGATGATGAGAACGTAAATTCACAACCATTCATGCGTTGGAGAGATCGTTTCTTATTCGTAGCAGAAGCTCTCTTCAAAGCTCAAGCCGAAACAGGCGAAATTAAGGGACATTACTTAAACGCTACTGCAGGTACTTGTGAAGAGATGTTGAAAAGAGCCGTTTTTGCTAGAGAATTGGGGGTACCCATAGTCATGCATGACTATTTGACCGGAGGTTTTACCGCAAATACGAGCTTGGCTTTTTATTGTCGAGACAATGGGCTGCTTCTTCACATTCACCGTGCGATGCATGCTGTCATCGATAGACAAAAAAATCACGGTATACATTTCCGTGTATTAGCCAAAGCTTTACGTATGTCCGGTGGAGATCATATTCACGCTGGGACTGTAGTAGGCAAACTAGAGGGAGAACGAGAAGTTACTTTGGGCTTTGTCGATTTGCTTCGCGATGATTACATCGAAAAAGACCGTAGCCGCGGCATCTATTTCACCCAAGATTGGGTATCTATGCCGGGCGTACTTCCTGTAGCTTCGGGGGGTATCCATGTCTGGCATATGCCTGCTCTAACCGAAATATTCGGAGACGATTCCGTCTTACAGTTCGGCGGCGGAACTTTGGGACATCCTTGGGGAAATGCGCCCGGTGCCGTAGCTAATCGAGTCGCGTCAGAGGCT [1206] Dicksonia_antarctica TACACTCCCGATTATGCGACCAAAGACACCGATATCTTGGCGGCCTTTCGAATGACCCCGCAACCCGGAGTACCGCCTGAGGGAGCTGGAGCTGCAGTAGCTGCGGAATCTTCCACAGGTACATGGACCACTGTATGGACGGATGGACTTACTAGTCTCGATCGCTACAAAGGTCGATGCTATGATATCGAACCTGTTTCTGGAGAGGATAATCAGTATATTGCATATGTAGCCTATCCTTTGGATCTATTTGAAGAAGGTTCCGTTACCAATTTGTTCACTTCCATTGTAGGTAATGTTTTTGGATTCAAAGCCCTACGCGCTCTCCGCTTAGAAGATCTTCGAATTCCTCCTGCTTATTCTAAGACTTTCATTGGACCGCCCCACGGTATCCAGGTTGAAAGGGATAAGCTGAACAAATATGGGCGTCCCTTATTAGGATGTACAATCAAACCAAAATTGGGCTTATCTGCTAAGAATTATGGCAGAGCTGTTTATGAATGTCTCCGTGGTGGACTTGACTTCACCAAGGATGATGAGAACGTAAATTCCCAACCATTCATGCGTTGGAGAGATCGCTTCTTATTCGTAGCAGAAGCTCTCTTCAAAGCTCAGGCTGAAACAGGCGAAATTAAGGGACATTACCTAAATGCTACTGCAGGTACTTGTGAAGAAATGATGAAAAGAGCCGTTTTTGCTAGAGAATTGGGGGCACCAATTGTAATGCATGACTATCTGACCGGAGGGTTTACCGCAAACACTAGCTTGGCTTTTTACTGTCGAGACAATGGGCTGCTTCTTCACATTCACCGTGCGATGCATGCTGTCATCGATAGACAGAGAAATCACGGTATACATTTTCGTGTATTAGCCAAAGCATTACGTATGTCCGGTGGAGATCATATTCACGCTGGGACTGTAGTAGGCAAACTAGAGGGAGAACGAGAAGTCACTTTGGGCTTTGTCGATTTGCTTCGCGACGATTATATTGAAAAAGACCGTAGCCGCGGCATCTATTTCACCCAAGATTGGGTATCGATGCCAGGCGTACTTCCCGTAGCTTCGGGGGGTATCCATGTCTGGCATATGCCTGCTCTAACCGAAATCTTCGGAGACGATTCCGTGTTACAGTTCGGCGGAGGAACCTTGGGACATCCTTGGGGAAATGCGCCCGGTGCTGTAGCTAATCGAGTCGCGTCAGAGGCG [1206] Dipteris_conjugata TATACTCCCGATTATGAGACCAAAGATACTGACATCTTGGCAGCCTTCCGGATGACTCCGCAACCCGGGTTACCGCCTGAGGAAGCTGGAGCTGCAGTAGCTGCAGAATCTTCCACAGGTACGTGGACCACTGTGTGGACGGATGGACTGACTAGTCTCGATCGTTACAAGGGTCGATGCTACGACATCGAACCTGTTGCTGGGGAAGAGAATCAATATATCGCATATGTAGCTTATCCTTTGGATCTATTTGAAGAGGGTTCCGTCACCAATATGTTCACTTCCATTGTAGGTAACGTATTTGGATTTAAAGCCCCACGAGCTCTACGTTTGGAGGATCTGAGAATTCCTCCTGCTTATTCCAAGACTTTCATTGGGCCGCCTCACGGTATCCAAGTCGAAAGGGATAAACTGAACAAATATGGTCGTCCCTTGCTGGGATGTACAATCAAGCCAAAATTGGGCTTATCTGCTAAAAACTATGGCAGGGCTGTTTACGAATGTCTCCGTGGCGGACTTGATTTTACGAAGGATGATGAGAACGTAAATTCTCAACCATTCATGCGTTGGAGGGACCGGTTCCTGTTTGTGGCAGAAGCTCTTTTCAAGGCTCAGGCCGAAACGGGCGAAATAAAAGGACATTATCTAAATGCCACTGCGGGTACGTGTGAGGAAATGATGAAAAGAGCAATCTTTGCTAGAGAATCGGGAGCACCCATCGTCATGCATGATTATTTGACGGGAGGCTTCACTGCAAATACTAGCTTGGCCTTTTATTGTCGAGATAATGGGCTACTGCTTCATATCCACCGCGCGATGCATGCTGTTATCGATAGACAGAGAAATCACGGTATCCATTTTCGTGTCCTAGCCAAAGCATTGCGTATGAGCGGCGGGGATCATATCCACGTCGGGACCGTAGTGGGTAAACTGGAGGGAGAACGAGACGTCACACTGGGTTTCGTCGATTTGCTACGCGACGATTATATCGAGAAAGACCGAAGCCGTGGTATATATTTCACTCAGGATTGGGTATCCATGCCAGGTGTATTTCCCGTAGCCTCGGGAGGTATCCATGTCTGGCATATGCCCGCTCTAACTGAAATCCTCGGAGATGATTCTGTCTCACAGTTCGGCGGAGGAACCTTGGGACACCCCTGGGGAAACGCACCAGGCGCCGTAGCTAATCGAGTTGCATCGGAGGCT [1206] Davallia_mariesii TATACACCTGAATACAAGACCAAAGATACCGATATCTTAGCAGCATTTCGAATGACCCCACAACCTGGAGTACCAGCTGAGGAAGCTGGAGCTGCGGTAGCTGCAGAATCCTCCACAGGTACGTGGACCACTGTATGGACAGATGGGTTGACCAGCCTTGACCGTTACAAGGGCCGATGCTACGACATCGAACCCGTCGCTGGAGAAGAAAACCAGTATATCGCGTATGTAGCTTATCCTTTGGATCTATTTGAAGAAGGTTCTGTGACCAATTTATTCACCTCCATAGTAGGTAATGTCTTTGGATTTAAGGCTCTACGCGCTCTACGCTTGGAAGACCTTCGAATTCCTCCCGCTTATTCTAAAACTTTCCAGGGACCGCCTCATGGTATTCAGGTTGAAAGGGATAAACTGAACAAGTATGGACGCCCTTTATTGGGATGTACAATCAAGCCAAAATTGGGCCTGTCCGCTAAAAATTATGGTAGAGCCGTTTACGAATGCCTTCGTGGTGGACTTGATTTCACAAAAGATGATGAAAATGTGAATTCGCAGCCATTCATGCGTTGGAGAGATCGCTTCCTATTCGTGGCGGAAGCTCCTTTCAAATCCCAGGCTGAAACAGGGGAAATCAAAGGCCATTACTTAAATGCTACTGCAGGTACATCTGAAGAGATGTTGAAAAGAGCTGTTTTTGCTAGAGAGTTGGGTGCACCAATTGTCATGCATGACTATCTGACCGGAGGTTTTACCGCAAATACCAGCTTAGCTTTCTATTGCAGAGATAATGGACTGCTTCTTCATATTCACCGCGCGATGCATGCTGTAATCGATAGGCAGCGAAATCATGGTATGCATTTCCGTGTATTGGCCAAAGCGTTACGCATGTCCGGCGGGGATCATATACACGCTGGAACTGTAGTAGGCAAACTAGAAGGGGAGCGAGAAGTCACCCTTGGTTTCGTCGATTTACTTCGCGACGATTACATTGAAAAAGATCGTAGCCGTGGTATCTATTTCACGCAAGATTGGGTATCTATGCCAGGTGTACTTCCCGTAGCTTCGGGGGGTATCCACGTTTGGCACATGCCTGCTCTAACCGAAATCTTTGGGGACGATTCCGTATTACAGTTTGGCGGAGGAACCTTAGGACATCCTTGGGGAAATGCGCCAGGTGCGGTAGCTAACCGAGTTGCATTAGAAGCT [1206] Elaphoglossum_hybridum TACACCCCTGAGTACAAGACCTTAGATACCGATATATTAGCAGCGTTCAGAATGACCCCACAACCCGGAGTACCAGCTGAGGAAGCTGGAGCTGCGGTAGCTGCAGAATCCTCTACGGGTACGTGGACCACCGTATGGACAGATGGGTTGACTAGTCTTGATCGTTACAAGGGCCGATGCTACGATATCGAACCCGTTGCTGGAGAAGAAAACCAGTATATTGCATATGTAGCTTATCCTTTGGATCTCTTCGAAGAAGGTTCTGTCACCAATTTGTTCACTTCCATTGTAGGTAATGTTTTCGGATTTAAAGCCCTACGCGCTTTACGCTTAGAAGACCTTCGAATTCCTCCCGCTTATTCTAAAACCTTTATGGGACCGCCTCATGGTATTCAGGTCGAAAGGGATAAATTGAACAAATATGGACGTCCCTTATTAGGATGTACAATCAAGCCAAAGTTAGGTCTGTCTGCTAAAAATTATGGTAGAGCTGTCTACGAATGTCTCCGTGGTGGACTCGATTTCACAAAAGATGATGAAAATGTGAATTCTCAGCCATTCATGCGTTGGAGAGATCGCTTCCTATTTGTGGCGGAAGCTCTTTTCAAATCTCAGGCTGAAACAGGCGAAATCAAGGGACACTACTTAAATGCTACCGCAGGTACGTGTGAAGAGATGATGAAGAGAGCTGTTTTTGCTAGAGAATTAGGTGCACCAATTGTCATGCATGACTACTTGACCGGAGGGTTTACCGCAAATACCAGCTTAGCTCATTATTGTAGAGACAATGGGTTGCTTCTTCATATTCACCGCGCTATGCATGCTGTGATTGATAGACAACGAAATCACGGTATGCATTTTCGTGTATTGGCCAAAGCATTACGGATGTCCGGTGGAGATCATGTACACGCCGGAACCGTAGTGGGTAAACTAGAGGGGGAACGAGAAGTAACCCTGGGTTTCGTTGATTTACTTCGCGACGATTATATTGATAAAGATCGTAGTCGTGGTGTGTACTTCACACAAGATTGGGTGTCTATGCCGGGTGTAATCCCTGTAGCTTCGGGGGGTATACACGTCTGGCATATGCCTGCTCTAACCGAAATTTTTGGGGACGATTCCGTATTACAGTTTGGTGGAGGAACCTTGGGACATCCTTGGGGAAATGCACCCGGTGCGGTCGCTAACCGAGTTGCATTAGAAGCT [1206] Nephrolepis_cordifolia TACACCCCCGACTACCAAACCAAAGATACCGATATCTTAGCAGCATTCCGAATGACCCCACAACCCGGCGTACCGGCTGAGGAAGCCGGAGCTGCGGTAGCTGCAGAGTCATCCACGGGTACGTGGACCACTGTATGGACAGATGGATTGACCAGTCTTGATCGTTACAAGGGCCGATGCTACGACATCGAACCCGTCGCTGGAGAAGAAAACCAGTATATCGCTTATGTAGCTTATCCTTTGGATCTATTTGAAGAAGGTTCTGTCACCAATCTGTTCACCTCCATTGTAGGTAATGTTTTTGGGTTTAAGGCTCTACGCGCTCTACGCTTAGAAGACCTTCGAATTCCTCCTGCTTATTCTAAAACTTTCATTGGACCGCCTCATGGTATTCAGGTCGAAAGAGATAAACTGAATAAATATGGACGTCCTTTATTGGGATGTACAATCAAGCCCAAATTAGGCTTGTCTGCTAAAAATTATGGTCGAGCCGTCTACGAATGCCTTCGTGGGGGACTTGATTTCACAAAAGATGATGAAAATGTTAATTCCCAGCCATTCATGCGTTGGAGAGATCGATCCTTATTTGATGCAGAAGCTCTTTTTAAATCTCAGGCTGAAACAGGGGAAATCAAGGGGCATTACTTAAATGCTACTGCAGGTACATGTGAAGAAATGTTGAAAAGAGCTGTTTTCGCTAGAGAATTGGGTGCACCAATTGTCATGCATGACTACCTGACCGGAGGGTTTACCGCAAATACCAGCTTAGCTTTTTATTGTAGAGATAATTGGCTGCTTCTTCATATTCACCGTGCGATGCATGCTGTAATCGATAGACAACGAAATCACGGTATGCATTTCCGTGTATTGCCAAAAGCATTACGCATGTCCGGCGGAGATCATATACACGCCGGAACTGTAGTAGGCAAACTAGAAGGGGAACGAGAAGTCACTCTTGGTTTCGTCGATTTACTTCGCGACGATTACATCGAAAAAGATCGTAGCCGTGGTATCTATTTCACCCAAGATTGGGTATCTATGCCAGGTGTACTCCCCGTAGCTTCGGGGGGTATCCACGTATGGCACATGCCTGCTCTAACCGAAATCTTTGGGGACGATTCTGTATTACAGTTCGGTGGAGGAACCTTAGGACATCCTTGGGGAAATGCACCTGGTGCGGTAGCCAACCGAGTCGCATTAGAAGCT [1206] Onoclea_sensibilis TACACCCCCGAATACAAGACCAAAGATACCGACATCTTAGCAGCCTTTCGAATGACCCCACAACCCGGGGTACCGGCTGAGGAAGCCGGAGCTGCGGTAGCTGCGGAATCCTCCACGGGTACGTGGACCACTGTATGGACAGATGGGTTGACCAGCCTTGACCGTTACAAGGGCCGATGCTACGACATTGAACCCGTCGTTGGAGAAGAAAACCAGTATATCGCGTATGTAGCTTATCCCTTGGATCTATTCGAAGAAGGTTCCGTCACCAATTTGTTCACCTCCATTGTAGGTAATGTTTTCGGATTTAAGGCTCTACGCGCCCTACGCCTGGAAGACCTTCGAATCCCTCCTGCTTATTCCAAAACTTTCATTGGACCGCCTCATGGTATTCAGGTCGAAAGGGATAAACTGAACAAATACGGACGTCCCTTATTGGGATGTACAATCAAACCAAAATTAGGTCTGTCTGCTAAAAATTACGGTAGAGCCGTCTACGAATGCCTCCGTGGTGGACTTGATTTTACAAAAGATGATGAAAACGTAAATTCCCAGCCATTCATGCGTTGGAGAGATCGCTTCTTATTTGTAGCAGAAGCTCTTTTCAAATCCCAGGCTGAAACGGGCGAAATCAAGGGGCATTACCTAAATGCTACTGCAGGTACGTGTGAGGAAATGTTGAAGAGAGCTGTCTTTGCTAGAGAGTTGGGTGTACCGATAGTCATGCATGACTACCTGACCGGAGGGTTTACCGCAAATACCAGCTTAGCTTTTTATTGCCGAGACAATGGACTGCTTCTTCATATCCACCGTGCGATGCATGCTGTTATCGATAGACAACGAAATCACGGTATGCATTTTCGTGTATTGGCCAAAGCGTTGCGCATGTCTGGCGGAGACCATATACACGCCGGAACTGTAGTAGGCAAACTAGAAGGGGAACGGGAAGTGACTTTGGGTTTCGTCGATTTACTTCGCGACGATTATATTGAAAAAGATCGTAGCCGTGGTATCTATTTCACCCAAGATTGGGTATCTATGCCGGGTGTACTCCCCGTAGCTTCAGGGGGTATCCACGTCTGGCACATGCCCGCCCTAACTGAAATCTTTGGGGATGACTCTGTCTTACAGTTCGGTGGAGGAACCTTGGGACATCCTTGGGGAAATGCACCCGGTGCAGTAGCCAACCGAGTCGCGTTAGAAGCT [1206] Rumohra_adiantiformis TACACCCCCGAGTACCAAGACAAAGATACCGATATATTAGCAGCCTTCAGAATGACCCCACAACCCGGAGTACCGCCTGAGGAAGCCGGAGCTGCGGTGGCTGCAGAATCCTCCACGGGTACGTGGACCACTGTATGGACAGATGGGTTGACCAATCTTGACCGTTACAAGGGCCGATGCTACGACATCGAACCCGTCGCTGGAGAAGAAAATCAGTATATCGCGTACGTAGCTTATCCTTTGGATCTATTCGAAGAAGGTTCCGTCAACAATCTGTTCACCTCCATTGTAGGTAATGTTTTTGGATTTAAAGCTCTACGCGCTTTACGCTTGGAAGACCTTCGAATTCCTCCCGCTTATTCTAAAACTTTCATTGGACCGCCTCACGGTATTCAGGTCGAAAGGGATAAACTGAACAAATATGGACGTCCCTTATTGGGATGTACAATCAAGCCAAAATTAGGTCTGTCTGCTTTAAATTATGGTAGAGCCGTCTACGAATGCCTTCGCGGTGGACTTGATTTCACAAAAGATGATGAGAATGTGAATTCCCAGCCATTCATGCGTTGGAGAGATCGCTTCCTATTCGTAGCAGAGGCTCTTTTCAAATCCCAGGCTGAAACAGGCGAAATCAAGGGGCATTACTTAAATGCTACTGCAGGTACGTGTGAAGAAATGCTCAAGAGAGCTGTTTTCGCTAGAGAATTGGGTGCACCAATTGTCATGCATGACTACCTGACCGGAGGGTTTACTGCAAATACCACCTTAGCTTTTTATTGTAGAGACAATGGGCTGCTTCTCCATATTCACCGTGCGATGCATGCTGTGATTGATAGACAACGAAATCACGGTATACATTTTCGTGTATTGGCCAAAGCATTACGCATGTCCGGTGGAGATCATATACACGCCGGAACTGTAGTAGGCAAACTAGAGGGGGAGCGAGAAGTAACCCTAGGTTTCGTCGATTTGCTTCGCGATGATTACATTGAAAAAGATCGTAGCCGTGGTATCTATTTCACACAAGATTGGGTCTCTATGCCGGGTGTATTCCCCGTAGCTTCGGGTGGTATCCATGTCTGGCACATGCCTGCTCTAACCGAAATTTTCGGGGATGATTCCATATTACAGTTCGGTGGAGGAACCTTGGGACATCCTTGGGGAAATGCACCTGGTGCGGTAGCCAACCGAGTCGCATTAGAAGCT [1206] Diplopterygium_glaucum TATACTCCCGATTATGATACGAAAGATACTGATATCTTGGCAGCATTCCGAATGACTCCGCAACCTGGAGTACCGCCTGAGGAAGCTGGAGCTGCGGGAGCTGCGGAATCTTCCACAGGGACATGGACCACTGTATGGACTGATGGACTTACTAGTCTTGATCGTTATAAGGGTCGCTGTCATGATATCGAACCCGTCGCTGGAGAAGTAAATCAATATATTGCGTATGTAGCCTACCCCTTGGATTTATTCGAAGAAGGGTCCGTTACTAATATGTTCACCTCCATCGTAGGTAATGTTTTCGGATTCAAAGCCTTACGCGCTCTACGTTTGGAAGATCTGAGAATTCCTCCCGCTTATTCTAAGACTTTCATCGGCCCACCTCACGGTATCCAGGTCGAAAGAGATAAACTAAACAAATATGGTCGTCCTTTATTGGGATGTACAATCAAGCCAAAATTGGGCTTATCTGCGAAGAATTACGGCAGGGCTGTTTATGAATGTCTCCGCGGTGGACTTGATTTTACCAAGGATGACGAGAACGTAAATTCTCAGCCATTCATGCGTTGGAGAGATCGTTTCTTGTTTGTAGCAGAAGCTCTTTTCAAAGCTCAGGCTGAGACGGGCGAGATCAAGGGACATTACCTAAATGCTACTGCAGGTACGTGTGAGGAAATGTTGAAAAGAGCAATCTTTGCCAGAGAATTGGGAGCACCCATTGTCATGCACGACTATCTGACAGGAGGCTTTACCGCAAATACCAGCCTGGCTTTTTATTGTCGGGATAATGGACTACTGCTTCATATTCACCGTGCAATGCATGCTGTTATTGATAGACAGAGAAATCACGGTATACATTTTCGCGTATTGGCCAAAGCATTGCGTATGTCCGGTGGAGATCATATCCACGCCGGGACTGTAGTGGGTAAACTTGAGGGAGAACGAGAAGTTACCCTAGGTTTTGTCGATCTACTTCGTGATGATTATATTGAGAAAGACAGAAGTCGCGGGATCTATTTCACTCAAGATTGGGTATCTATGCCGGGTGTATTGCCTGTAGCTTCGGGGGGTATCCATGTCTGGCATATGCCCGCCCTAACTGAAATATTCGGCGATGATTCCGTCCTACAGTTCGGTGGGGGAACCTTGGGACATCCCTGGGGAAATGCACCAGGTGCTGTGGCTAATCGAGTCGCTCTAGAAGCT [1206] Stromapteris_moniliformis TATACTCCCGATTATGAGACCAAAGATACTGATATCTTGGCAGCATTCCGAATGACTCCGCAACCTGGAGTACCGCCTGAGGAAGCTGGAGCTGCAGTAGCTGCGGAATCTTCCACAGGTACATGGACCACTGTATGGACGGATGGACTTACTAGTCTTGATCGTTATAAGGGTCGGTGTCATGATATCGAACCTGTCGCTGGGGAGGAAAATCAATATATTGTGTATGTAGCTTACCCCCTGGATTTATTCGAAGAGGGTTCTGTTACTAATATGTTTACCTCCATCGTAGGCAACGTTTTCGGATTCAAAGCCTTACGCGCTCCACGTCTGGAAGATCTGAGAATTCCTCCCGCCTATTCTAAGACTTTCATCGGCCCGCCTCACGGTATCCAGGTCGAGAGAGATAAGCTAAACAAATATGGTCGTCCCCTGCTGGGATGTACAATCAAGCCGAAATTGGGCTTATCTGCCAAGAATTACGGTAGGGCTGTTTACGAATGTCTCCGTGGTGGACTTGATTTTACCAAGGATGACGAGAACGTAAATTCCCAGCCATTCATGCGTTGGAGGGATCGTTTCTTGTTTGTAGCAGAAGCTCTTTTCAAAGCTCAAGCTGAGACGGGCGAGTTCAAGGGACATTACCTAAACGCTACTGCAGGTACGTGTGAGGAAATGTTGAAAAGAGCAATCTTCGCCAGAGAATTGGGAGTACCCATCGTTATGCACGATTATTTGACAGGAGGCTTCACCGCAAATACCAGCCTGGCCTTCTACTGCCGGGATAATGGACTACTGCTTCATATTCACCGTGCGATGCATGCTGTTATTGATAGACAGAGAAATCACGGTATACATCTCCGCGTATTGGCCAAAGCATTACGCATGTCCGGTGGAGATCATATACACTCCGGGACCGTAGTAGGTAAACTTGAGGGAGAACGAGAAGTTACCTTAGGTTTCGTCGATTTGCTTCGTGATGATTATATTGAGAAAGATAGAAGTCGCGGTATCTATTTCACCCAAGATTGGGTATCTATGCCGGGTGTATTGCCCGTAGCTTCGGGAGGTATCCATGTCTGGCATATGCCCGCTCTAACTGAAATATTCGGGGATGACTCCGTCTTACAGTTCGGTGGGGGAACCTTGGGCCATCCCTGGGGAAATGCACCAGGTGCTGTGGCTAATCGAGTCGCCTTAGAGGCT [1206] Micropolypodium_okuboi TACACCCCCGAATACAAAACTAAAGATACCGACATCTTAGCAGCATTTCGAATGACCCCACAACCTGGAGTACCGGCTGAAGAAGCTGGAGCTGCGGTAGCTGCAGAATCCTCCACAGGTACGTGGACAACTGTATGGACAGATGGGTTGACTAGTCTTGACCGTTATAAGGGTCGATGCTACGACATTGAACCCGTCGCTGGAGAAGACAACCAGTATATCGCATATGTAGCTTATCCTTTGGATCTATTCGAAGAAGGTTCTGTTACTAATCTGTTTACCTCCATAGTTGGTAATGTATTTGGATTTAAGGCTCTACGTGCTATACGCTTGGAAGACCTTCGAATTCCTCCCGCTTATTCTAAAACTTTCATTGGACCGCCCCATGGTATTCAGGTTGAAAGAGATAAATTGAACAAATATGGACGTCCTTTATTAGGATGTACAATCAAGCCAAAATTGGGTCTGTCTGCTAAAAATTATGGTAGAGCCGTCTACGAATGTCTTCGTGGTGGACTTGATTTCACAAAAGATGATGAAAATTTGAATTCCCAGCCATTCATGCGTTGGAGAGATCGTTTCTTATTTTGTGCAGAAGCTCTTTTCAAATCCCAAGCTGAAACAGGGGAAATCAAAGGGCATTACTTAAACGCTACTGCAGGTACATGTGAAGAGATGTTCAAAAGAGCTGCTTTTGCTAGGGAATTGGGTGTACCAATTGTCATGCATGATTATCTAACCGGAGGGTTTACTGCAAATACCAGCTTAGCCTATTATTGCAGAGATAATGGACTGCTTCTTCATATTCACCGCGCAATGCATGCTGTTATCGATAGACAACGAAATCACGGTATGCATTTCCGTGTGCTGGCCAAAGCATTACGATTGCCCGGCGGAGATCATGTACATGCTGGAACTGTAGTAGGTCAATTAGAAGGAGAACGGGAAGTTACTCTCGGTTTCGTTGATTTGCTCCGTGACGATTTAATTGTAAAAGATCGGAGCCGTGGTGTTTATTTCACCCAAGATTGGGTATCTATGCCGGGTGTATTACCCGTAGCTTCAGGAGGTATCCATGTCTGGCACATGCCCGCTCTAACCGAGATCTTTGGGGATGATTCCGTATTACAGTTTGGCGGAGGAACCTTAGGTCATCCTTGGGGAAATGCGCCAGGTGCGGTAGCCAACCGAGTCGCATTGGAAGCT [1206] Cephalomanes_thysanostomum TATACTCCTGATTATCAAACCGCAGACACTGATATCTTGGCAGCGTTCCGAATGACTCCGCAACCTGGAGTACCACCAGAGGAAGCTGGAGCTGCAGTAGCTGCGGAATCTTCCACAGGTACATGGACCACAGTATGGACAGATGGGCTTACTAGCCTTGATCGTTATAAGGGTCGATGCTACGATATCGAACCTGTTCCTGGAAGCGATAATCAATATATTGCATATGTAGCTTATCCTTTAGATCTCTTTGAAGAAGGATCTGTTACGAATCTATTCACTTCGATTGTAGGTAACGTTTTTGGATTTAAAGCCTTACGTGCCCTACGGTTGGAAGATATAAGGGTTCCACCTGCTTATTCTAAAACATTCTCAGGACCACCTCATGGTATCCAAGTTGAAAGAGATAAACTGAACAAGTATGGTCGTCCTTTTTTAGGATGTACAATCAAACCAAAATTGGGTTTATCGGCTAAGAATTATGGTAGAGCTGTTTATGAATGTCTCCGTGGGGGGCTCGATTTTACTAAGGATGATGAGAACCGTAACTCTCAACCATTCATGCGTTGGCGGGATCGTTCCCTGTTTGTAGCAGAAGCTCTCTTTAAAGCTCAATCGGAAACAGGTGAAATCAAAGGGCATTATCTAAATGCTACTGCAGGTACGTGTGACGAGATGTTAAAGAGAGCATACTGTGCAAGAGAATTGGGAGTCCCTATTATTATGCATGATTACCTTACAGGAGGTTTTACTGCAAATACTACCCTAGCTTTGTACTGCCGAGATAATGGTCTACTCCTTCATATTCACCGCGCAATGCATGCTGTTATTGATAGACAGAAAAACCATGGTATGCACTTCCGTGTATTGGCCAAAGCCTTACGTATGTCTGGTGGAGATCATGTCCATGCTGGGACTGTAGTGGGTAAACTCGAAGGAGAACGAGAAATCACTCTAGGCTTCGTTGATTTGCTTCGTGACGATTATGTCGAGAAAGATCGAAGCCGTGGTATCTTTTTCACTCAATTTTGGGCATCTATGCCTGGTGTATTGCCTGTAGCGTCAGGAGGTATTCATGTTTGGCATATGCCTGCTCTGACTGAAATATTTGGAGATGATTCTGTCTTACAGTTCGGTGGTGGAACCTTAGGGCATCCTTGGGGAAATGCACCGGGTGCCGTGGCTAATAGAGTTGCATCGGAAGCC [1206] Lygodium_japonicum TACACTCCCGAATATGAAACAAAAGATACTGATATCTTAGCAGCTTTTCGAATGACCCCACAACCCGGAGTACCTCCCGAAGAAGCTGGAGCTGCAGTAGCTGCAGAATCTTCTACAGGTACGTGGACCACAGTCTGGACTGATGGGCTCACCAGTCTTGATCGTTACAAAGGTCGATGCTACGATATTGAACCCGTTGCTGGGGAGGAAAATCAATACATAGCCTATGTAGCTTATCCTTTGGATTTGTTTGAAGAAGGTTCCGTTACTAATATGTTCACCTCCATTGTAGGTAATGTATTCGGATTCAAAGCCTTACGGGCCTTACGCTTAGAAGATCTGAGAATCCCTCCTGCTTATTCAAAAACCTTCATGGGTCCTCCTCATGGTATCCAAGTCGAAAGGGACAAATTGAACAAATATGGTCGCCCCTTATTAGGATGTACGATTAAGCCCAAGTTGGGACTATCTGCCAAAAATTATGGTAGAGCTGTCTATGAATGCCTCCGTGGCGGACTGGATTTCACCAAGGATGATGAAAACGTTAATTCCCAACCGTTTATGCGTTGGAGGGATCGTTTCTTGTTCGTAGCAGAAGCTCTTTTCAAGTCTCAGGCTGAAACTGGCGAAATCAAGGGGCATTACTTAAACGCCACTGCGGGAACTTGCGAGGAAATGATGAAAAGAGCAGTCTTCGCTAGGGAACTAGGGGCGCCCATTGTCATGCACGACTATCTGACTGGAGGATTCACCGCAAATACTAGTTTGGCTTTTTACTGTAGAGATAATGGATTGCTTTTACATATTCACCGTGCAATGCATGCCGTTATCGACAGACAAAAAAACCACGGTATGCATTTCCGCGTATTGGCTAAAGGTCTACGCATGTCTGGTGGGGACCACATCCATGCAGGAACCGTAGTCGGAAAACTCGAAGGAGAACGAGAAGTCACTTTGGGGTTTGTCGATTTACTTCGTGACGATTATATCGAGAAAGACCGGAGTCGTGGTATCTACTTCACCCAGGATTGGGTATCCATGCCAGGCGTGATACCCGTAGCCTCCGGGGGTATACATGTTTGGCACATGCCCGCACTAACAGAAATCTTCGGGGACGATTCTGTCCTACAGTTTGGTGGAGGAACTTTGGGGCATCCTTGGGGAAACGCACCGGGCGCTGTTGCTAATCGAGTTGCTCTAGAAGCT [1206] Angiopteris_evecta TACACTCCTGAGTATGATACTAAGGATACTGATATCCTGGCAGCATTCCGAATGACTCCTCAACCTGGAGTACCGCCTGAAGAAGCGGGAGCTGCAGTAGCTGCCGAATCTTCTACCGGTACTTGGACTACTGTATGGACAGATGGGCTTACTAGCCTTGATCGTTACAAAGGTCGATGCTATGATATCGAACCTGTTGCTGGCGAAGAAAATCAATATATTGCTTATGTAGCTTATCCTTTGGATCTATTCGAAGAAGGTTCTGTCACCAATATGTTTACCTCTATCGTAGGTAACGTATTCGGATTCAAAGCTTTACGAGCTTTGCGATTAGAGGACTTAAGAATTCCTCCTGCTTATTCGAAAACTTTCCAAGGTCCGCCTCACGGTATCCAAGCTGAAAGAGATAAATTAAACAAGTATGGTCGTCCACTACTAGGATGTACTATCAAACCAAAATTAGGTTTATCTGCTAAAAACTATGGTAGAGCTGTTTATGAATGTCTTCGTGGTGGACTTGATTTTACGAAAGATGATGAGAACGTCAATTCTCAACCATTTATGCGTTGGAGAGATCGTTTCTTATTCGTAGCAGAAGCTCTTTTTAAGTCTCAAGCTGAGACAGGCGAAGTAAAAGGGCACTACTTAAATGCTACTGCAGGTACGTGTGAAGAAATGATGAAAAGAGCAATCTTTGCTAGAGAATTGGGCGCACCCATTGTCATGCACGACTATCTGACAGGAGGATTTACTGCAAATACTTCATTGGCTCATTATTGTAGAGATAATGGTCTTCTTCTTCATATTCACCGTGCAATGCATGCTGTTATTGACAGACAACGAAATCACGGTATGCATTTCCGTGTATTAGCTAAAGCTTTGCGTATGTCCGGTGGAGATCATGTTCACGCCGGTACGGTAGTGGGTAAACTTGAGGGAGAACGTGAAGTAACTTTAGGCTTCGTTGATTCACTTCGTGATGACTATATCGAAAAAGATCGAAGTCGTGGTATCTATTTCACTCAGGATTGGGTATCTATGCCGGGTGTATTCCCCGTAGCTTCAGGTGGTATTCATGTCTGGCATATGCCTGCTCTAACTGAGATTTTCGGAGATGATTCTGTATTACAATTTGGTGGAGGAACTCTAGGACACCCTTGGGGGAATGCACCTGGTGCAGTAGCTAATCGAGTTGCTTCAGAGGCT [1206] Marsilea_quadrifolia TACACTCCCGAATATCAGACCTCACCCCATGATATCTTGGCAGCCTTTAGAATGACCCCGCAACCCGGAGTACCACCTGAGGAAGCTGGAGCTGCAGTAGCTGCAGAATCTTCTACAGGTACATGGACTACCGTATGGACGGACGGACTTACCAGTCTTGACCGTTACAAAGGTCGTTGCTACGATATCGAACCCGTTCCCGGAGAGGAAAACCAATACATTGCATATGTAGCTTACCCCTTAGATTTATTTGAAGAGGGTTCTGTTACCAACATGTTCACCTCTATTGTAGGTAACGTATTTGGATTCAAGGCTCTACGTGCTCTTCGACTAGAAGATCTTCGAATCCCTCCTGCTTATTCCAAAACTTTCATTGGACCCCCTCACGGTATCCAGGTTGAAAGAGATAAACTGAACAAATACGGACGTCCTTTATTAGGATGTACCATCAAGCCAAAACTAGGCTTATCTGCTAAAAACTACGGTAGAGCTGTTTACGAATGTCTTCGTGGTGGACTTGACTTCACCAAGGATGATGAGAACGTAAACTCCCAACCATTCATGCGTTGGAGAGACCGTTTCTTATTCGTAGCAGAAGCTCTTTTCAAGTCTCAAGCTGAAACCGGCGAAATCAAGGGACACTACTTAAACGCTACTGCGGGTACTTGTGAAGAGATGCTGAAAAGAGCTGTTTTCGCAAGAGAGCTGGGAGCGCCTATTGTTATGCACGACTACCTGACCGGAGGGTTTACTGCAAATACTAGCTTAGCTTTCTACTGTCGAGACAACGGGTTGCTTCTTCACATTCACCGTGCAATGCATGCTGTTATCGATAGACAGAAAAACCACGGTATCCACTTCCGTGTATTAGCTAAAGCATTACGTATGTCTGGTGGGGACCACATCCACTCTGGAACCGTAGTAGGTAAACTAGAAGGTGAACGAGAAGTAACTTTGGGCTTCGTCGATTTGCTTCGCGACGATTACATTGAAAAAGATCGTAGCCGTGGTATCTACTTCACCCAAGATTGGGTATCTATGCCAGGGGTACTGCCCGTAGCTTCTGGAGGTATCCACGTATGGCACATGCCTGCTCTAACCGAAATCTTCGGAGACGATTCCGTCTTACAGTTCGGTGGAGGAACTCTGGGCCACCCTTGGGGAAATGCACCTGGAGCTGTAGCTAACAGAGTTGCGTTAGAGGCT [1206] Matonia_pectinata TATACCCCCAACTATCAAGTCAAAGATACAGATATCTTGGCAGCCTTCCGAATGACTCCGCAACCTGGGGTACCGCCTGAGGAAGCTGGAGCTGCAGTAGCTGCGGAATCTTCCACAGGTACCTGGACCACTGTATGGACAGATGGATTAACTAGTCTCGATCGTTACAAGGGTCGATGTTACGACATTGAGCCTGTTGCTGGGGAAGAAAATCAATATATTGCATATGTAGCTTATCCTTTAGATCTATTTGAAGAAGGTTCTGTTACTAATATGTTCACTTCCATCGTAGGTAACGTATTTGGATTCAAAGCCTTACGCGCCCTACGTTTAGAAGATCTGAGAATTCCTCCTGCTTATTCTAAGACTTTCATGGGGCCTCCCCACGGTATCCAAGTCGAAAGGGATAAATTGAACAAATACGGCCGTCCTCTACTGGGATGTACAATCAAACCGAAACTAGGTTTATCTGCCAAAAACTACGGTAGGGCAGTTTACGAATGTTTACGCGGTGGACTTGATTTTACGAAGGATGATGAAAACGTAAATCCCCAACCAATCATTCGTTGGAGAGATCGTTTCTTATTCGTAGCAGAAGCTCTTTTTAAATCCCAAGCGGAGACAGGGGAGATAAAGGGACATTATCTAAACGCTACCGCAGGTACATCTGAGGAAATGTTGAAAAGAGCCGTCTTCGCTAGGGAATTGGGAGTACCCATTGTCATGCATGAATATTTGACGGGAGGCTTCACTGCAAATACTAGTTTGGCCTTCTATTGCCGAGATAATGGTTTACTGCTTCATATTCACCGTGCAATGCATGCTGTTATCGATAGACAGAGAAATCATGGTATCCATTTCCGCGTATTGGCCAAAGCATTACGGACGTCCGGCGGGGATCACATACACGCCGGGACTGTAGTAGGTAAACTGGAGGGAGAACGAGAAGTCACGTTGGGTTTCGTCGATCTGCTTCGTGATGATTATATCGAAAAAGACCGAAGTCGTGGTATCTACTTCACCCAAGATTGGGTATCCATGCCAGGTGTACTGCCCGTAGCTTCGGGGGGCATTCATGTTTGGCACATGCCTGCTCTAACTGAAATCTTCGGAGACGATTCCGTCTTACAATTCGGTGGAGGAACCTTGGGACATCCCTGGGGAAATGCACCAGGTGCTGTAGCTAATCGAGTTGCCTTAGAGGCT [1206] Metaxya_rostrata TACACTCCCGATTACGTAACCAAAGACACCGATATCTTGGCGGCCTTTCGGATGACCCCGCAACCCGGAGTACCGGCTGAGGAAGCCGGAGCCGCGGTAGCAGCGGAATCCTCCACGGGTACATGGACCACTGTATGGACGGATGGGCTTACCAGTCTCGATCGCTACAAAGGTCGATGCTATGATATTGAACCCGTTGCCGGAGAAGATAATCAGTATATTGCATATGTAGCTTATCCTTTGGATCTATTTGAAGAAGGTTCGGTTACCAATATGTTCACTTCCATTGTAGGTAATGTTTTTGGATTCAAAGGCCTACGTGCTCTCCGCTTAGAAGATCTCCGAATTCCTCCTGCTTATTCTAAGACTTTTATTGGACCGCCTCACGGTATCCAAGTTGAAAGAGATAAGCTGAACAAATATGGGCGTCCCTTCTTAGGATGTACGATTAAGCCAAAATTGGGTTTATCCGCTAAGAACTATGGGAGAGCCGTTTATGAATGTCTCCGTGGTGGACTTGACTTCACCAAGGATGATGAGAACGTAAATTCCCAACCATTCATGCGATGGAGAGATCGCTTCTTATTTGTAGCGGAAGCTCTCTTCAAAGCTCAGGCTGAAACGGGCGAAATTAAGGGGCATTACTTAAATGCTACTGCAGGTACATGTGAAGAAATGTTGAAAAGAGCCGTTTTTGCTAGAGAATTGGGGGGCACAATTGTAATGCATGACTATCTAACCGAGGGTTTTACTGCAAATACTAGTTTGGCTTTTTACTGTCGAGACAATGGACTGCTTCTTCACATTCACCGTGCAATGCATGCTGTCATCGATAGACAGAGAAATCACGGTATACATTTTCGTGTATTAGCCAAAGCATTACGCATGTCTGGTGGAGACCATATCCACGCTGGAACTGTAGTGGGTAAATTAGAGGGAGAACGAGACGTCACTTTGGGATTTGTTGATTTGCTCCGCGAGGATTATGTCGAAAAAGATCGTAGCCGTGGCATCTATTTCACTCAAGATTGGGTATCTATGCCGGGCGTAATTCCCGTAGCTTCGGGGGGTATTCACGTTTGGCATATGCCCGCTCTAACCGAGATTTTCGGGGACGATTCCGTCTTACAGTTCGGGGGAGGAACCTTGGGACATCCTTGGGGAAATGCGCCCGGTGCCGTAGCCAATCGAGTCGCATCAGAGGCT [1206] Botrychium_strictum TACACTCCCGATTATGAAACCAAGGATACTGATATCCTAGCAGCTTTTCGAATGACTCCCCAACCTGGAGTGCCAGCTGCAGAAGCGGGAGCCGCGGTAGCTGCTGAATCTTCCACCGGTACGTGGACCACCGTATGGACCGATGGACTTACCAGCCTTGATCGTTATAAGGGTCGATGCTATGAAATCGAACCTGTTCCCGGGGAGGAAAATCAATTCATTGCTTATGTGGCGTATCCTCCAGATCTTTCTGAGGAAGGTTCTGTCACCAACATGTTCACTTCCATTGTAGGTAACGTATTCGGATTCAAGGCATTGAGAGCTTTACGGTTGGAAGATTCAAGAATTCCCCCTGCTTATTCTAAGACTTTCATGGGTCCGCCTCACGGTATTCAAGTCGAGAGGGATAAATTAAACAAATACGGTCGCCCCTTACTAGGATGTACCATCAAACCCAAATTGGGATTATCTGCCAAAAATTATGGTAGAGCTGTTTATGAATGTTTACGCGGTGGGCTCGATTTCACCAAGGATGATGAAAACGTAAATTCCCAACCGTTTATGCGTTGGAGAGATCGTTTCTTATTCGTGGCAGAAGCCCTTTTCAAATCTCAAGCTGAAACGGGTGAAATTAAGGGACATTACTCAAATGCTACCGCGGGTACTTGTGAGGAAATGCTAAAAAGAGCAGTATTTGCTCGAGAATTGGGAGTACCCATTGTCATGCACGATTATTTGACAGGAGGATTCACTGCAAATACTAGCTTAGCCTTCTACTGTTGGGATAATGGTCTACTCCTTCACATTCATCGTGCAATGCATGCTGTTATTGATAGACAAAAGAATCATGGTATCCACTTCCGTGTATTGGCCAAAGCATTGCGTATGTCCAGCGGGGATCATATTCATTCCGGTACTGTAGTGGGTAAACTTGAGGGAGAACGCGACATAACTCTAGGCTTCGTTGATCTACTCCGTGACGATTATATCGAGAAAGATCGAAGCCGCGGCATCTATTTCACCCAAGATTGGGTATCTATGCCGGGTGTACTGCCTGTAGCTTCAGGAGGCATCCACGTTTGGCATATGCCCGCTTTAACTGAGATCTTCGGGGACGATTCCGTACTCCAATTTGGTGGAGGAACTTTGGGACACCCATGGGGTAATGCACCTGGTGCAGTGGCTAATCGAGTTGCTCCGGAAGCT [1206] Osmunda_cinnamomea TATACTCCCGATTATGAGACCAAGGATACTGATATTTTGGCAGCATTCCGAATGACTCCCCAACCCGGAGTACCGGCTGAGGAAGCTGGAGCTGCAGTAGCTGCGGAATCTTCTACAGGTACGTGGACCACTGTATGGACGGATGGACTTACCAGTCTTGATCGTTATAAGGGTCGATGCTACGATATTGAACCTGTTGCTGGGGAAGAAAATCAATATATTGCTTATGTAGCTTATCCTCTGGACCTATTCGAAGAAGGTTCTGTTACCAATATGTTCACTTCCATTGTAGGTAACGTGTTCGGATTCAAAGCATTACGCGCTCTACGTTCGGAAGATTCGAGAATTCCTCCCGCGTATTCTAAGACTTTCATCGGGCCGCCTCACGGTATCCAGGTCGAAAGGGATAAATTGAACAAATATGGTCGTCCTTTGTTGGGATGTACGATTAAACCCAAATTGGGTTTATCTGCTAAGAATTATGGTAGAGCTGTTTATGAATGTCTTCGTGGTGGGCTTGATTTTACCAAAGATGATGAGAACGTGAATTCTCAACCATTCATGCGTTGGAGAGATCGTTTCTTGTTCGTAGCAGAAGCTCTTTTTAAAGCTCAAGCTGAAACCGGCGAGATTAAGGGACATTACTCGAATGCTACTGCAGGTACATGTGAAGAAATGATGAAAAGAGCAGTATTTGCTAGGGAATCGGGCGCACCTATTGTCATGCATGATTATTCGACGGGAGGCTTTACTGCAAATACTAGCTTGGCTTTTTATTGTCGAGATAATGGTCTACTTCTCCACATTCACCGTGCAATGCATGCCGTTATCGATAGGCAAAGGAATCACGGTATACACTTCCGTGTATTGGCTAAAGCATTGCGTATGTCTGGTGGAGATCATATTCATTCCGGTACTGTAGTGGGTAAACTTGAAGGGGAACGAGAAGTAACTTTGGGTTTTGTCGATTTACTCCGTGATGACTATATCGAAAAAGACCGAAGTCGCGGTATCTATTTCACTCAGGATTGGGTATCCATGCCGGGTGTATTTCCTGTAGCTTCCGGAGGTATCCATGTTTGGCATATGCCCGCTCTAACGGAAATTTTTGGGGATGATTCTGTATTACAGTTTGGTGGAGGGACCTTGGGACACCCTTGGGGAAATGCACCTGGTGCTGTAGCTAACCGAGTTGCTTTAGAGGCT [1206] Ceratopteris_thalictroides TACACTCCCGAGTATAAGGTCAAAGATACTGATATCTTAGCCGCTTTTCGAATGACCCCACAACCCGGAGTACCAGCTGAAGAGGCCGGAGCTGCGGTGGCTGCGGAATCCTCTACAGGTACATGGACCACAGTATGGACAGACGGACTTACTAGTCTTGATCGATACAAAGGTCGGTGCTACGATATTGAACCCGTTGCCGGGGAGGAAAACCAGTATATTGCATATGTAGCGTACCCCTTGGATTTATTTGAGGAAGGGTCCGTCACCAATATGCTGACTTCTATTGTAGGTAATGTTTTTGGATTCAAGGCCTTACGCGCTCTGCGCCTGGAAGACCTACGGATTCCTCCTGCTTATTCCAAGACTTTTCTTGGGCCTCCTCACGGTATTCAGGTCGAAAGAGATAAATTAAACAAATATGGTCGTCCTCTATTGGGATGTACAATCAAGCCAAAATTGGGCTTGTCTGCTAAAAATTATGGTAGAGCAGTTTACGAATGCCTTCGTGGTGGACTTGATTTCACAAAAGATGATGAAAACGTTAATTCCCAACCGTTTATGCGTTGGAGAGATCGCTTTTGCTTCGTAGCCGAAGCTCTTTATAAAGCCCAGAATGAAACCGGTGAAATTAAGGGACATTATTTAAATGCCACCGCGGGCACAACTGAAGAAATGCTTAGAAGAGCTGACTATGCCAGTGAATTGGGTGCACCAATCATCATGCATGACTATCTGACTGGTGGTTTTACCGCAAATACTAGTTTAGCTATCTATTCTAGAAACAAAGGTCTACTTCTTCATATTCACCGAGCCATGCATGCTGTTATTGATAGACAAAGAAATCATGGTATGCATTTCCGTGTTTTAGCCAAAGCCTTACGTATGTCTGGTGGAGATCATATCCATGCAGGAACTGTGGTGGGCAAATTAGAAGGTGAACGAGAAGTTACCCTGGGATTTGTCGATTTACTTCGCGACGACTACATTGAAAAAGATCGTAAGCGTGGTATATACTTCACCCAAGATTGGGTATCTATGCCTGGTGTAATTCCCGTAGCTTCAGGGGGTATTCACGTATGGCATATGCCCGCCCTAACCGAAATTTTTGGGGACGATTCTGTCTTACAATTTGGCGGGGGAACATTGGGACATCCTTGGGGAAATGCCCCTGGTGCCGTTGCTAACCGCGTAGCATTGGAGGCT [1206] Plagiogyria_japonica TACACTCCCGATTATGCGACCAAAGACACTGATATCTCGGCAGCTTTCGGAATGACCCCGCAACCCGGAGTGCCACCTGAGGAAGCTGGAGCTGCAGTAGCCGCGGAATCTTCCACGGGTACATGGACCACTGTATGGACGGATGGACTTACTAGTCTCGATCGCTACAACGGTCGATGCTACGATATCGAACCTGTTTCTGGGGAGGAAAATCAATATATTGCATATGTAGCTTACCCTCCGGATCTATTTGAAGAAGGGTCCGTTACCAATTCGTTCACTTCCATTGTAGGTAATGTATTTGGATTCAAAGCCCTACGCGCTCTCCGCCTAGAAGATCCTCGAATTCCTCCTGCTTATCCTAAGACTTTCATTGGACCGCCCCACGGTATTCAGGTCGAAAGGGATAAACTGAACAAATACGGGCGTCCCTTATTGGGATGTACAATCAAGCCAAATTTGGGCTTATCTGCTAAGAATTATGGTAGAGCCGTTTATGAGTGTCTCCGTGGTGGACTTGACTTCACCAAGGATGATGAGAACGTCAATTCCCAACCATTCATTCGTTGGAGAGATCGCTTCTTATTCGTAGCAGAAGCCCTCTTCAAAGCTCAGGCCGAAACAGGCGAAATCAAGGGACATTACTTGAATGCTACTGCAGGTACGTGTGAAGAACCGTCGAAAAGAGCTGTTTTTGCTAGGGAATTGGGAGCACCAATTGTAATGCATGACTACCTGACCGGAGGGTTCACCGCAAATACTAGCTTGGCCTTTTATTGTCGAGACAATGGGCTGCTTCTTCACATTCACCGTGCGATGCATGCCGTCATTGATAGACAAAAAAACCACGGTATGCATTTTCGTGTATTAGCCAAAGCATTACGTATGTCCGGTGGAGATCATGTTCACGCCGGGACTGTAGTAGGTAAACTGGAGGGAGAACGAGAAGTCACTTTGGGCTTTGTCGATTTTCTTCGCGACGATTATATAGAAAAAGACCGTAGCCGCGGTGTCTATTTCACCCAAGACTGGGTCTCTATGCCGGGTGTACTTCCCGTAGCTTCGGGGGGTATCCACGTCTGGCATATGCCCGCTCTAACCGAAATCTTCGGAGACGATTCCGTCTTACAGTTTGGCGGGGGAACCCTCGGACATCCCTGGGGAAATGCGCCCGGTGCCGTAGCTAATCGAGTCGCGTTAGAGGCT [1206] Loxogramme_grammitoides TACACCCCCGACTACAAGACCAAAGATACCGATATCTTAGCGGCGTTTCGAATGACCCCACAACCTGGAGTACCGGCTGAGGAAGCTGGAGCTGCGGTAGCTGCAGAATCCTCCACAGGTACATGGACCACTGTATGGACAGATGGGTTGACTAGTCTTGACCGTTACAAAGGACGATGCTACGACATCGAGCCTGTCGCTGGGGAGGAAAACCAGTATATCGCGTATGTAGCTTATCCTTTGGATCTATTTGAAGAAGGTTCTGTGACTAATTTATTCACCTCCATAGTAGGTAATGTCTCTGGATTTAAAGCTCCGCGCTCTCTGCGCCTGGAAGACCTTCGAATTCCTCCCGCTTATTCTAAAACTTTCATTGGACCACCTCATGGTATTCAGGTTGAAAGGGATAAACTGAACAAATATGGACGTCCCTTATTGGGATGTACAATCAAGCCAAAATTAGGTCTGTCTGCTAAAAATTATGGTAGAGCCGTCTACGAATGCCTCCGCGGTGGACTTGATTTCACAAAAGATGATGAAAATGTGAATTCCCAGCCATTCATGCGTTGGAGAGATCGCTTCCTATTTGTGGCAGAAGCTCTTTTCAAATCCCAGGCTGAAACAGGTGAAATCAAAGGGCATTACTTAAATGCTACCGCAGGTACATGTGAAGAAATGATGAAGAGAGCTATTTTTGCTAGGGAGTTGGGCGCACCAATCGTCATGCATGACTACTTGACCGGAGGGTTTACCGCAAATACCAGCTTAGCTTATTATTGCAGAGATAATGGACTACTTCTTCATATTCACCGCGCGATGCATGCTGTGATTGATAGGCAACGAAATCACGGCATGCATTTTCGTGTATTGGCCAAAGCGTTACGCATGTCCGGCGGGGATCATGTACACGCTGGAACTGTAGTAGGCAAACTAGAAGGGGAACGAGAAGTTACCCTTGGTTTTGTCGATTTACTTCGCGACGATTACATTGAGAAAGATCGTAACCGCGGCGTCTATTTCACCCAAGATTGGGTATCTATGCCGGGTGTACTACCCGTAGCTTCGGGGGGTATCCACGTATGGCACATGCCTGCTTTAACCGAAATCTTTGGGGACGATTCCGTATTACAATTTGGCGGAGGAACCTTAGGACATCCTTGGGGAAATGCGCCAGGTGCGGTAGCCAACCGAGTCGCATTGGAAGCT [1206] Polypodium_australe TACACCCCCGAATACAAAACCAAAGATACCGATATCTTAGCAGCATTTCGAATGACCCCACAACCTGGAGTACCGGCTGAGGAAGCTGGAGCTGCGGTAGCTGCAGAATCCTCCACAGGTACGTGGACAACTGTATGGACAGATGGGTTGACTAGCCTTGACCGTTACAAGGGCCGATGCTACGACATCGAACCCGTCGCTGGAGAAGAAAACCAGTATATCGCGTATGTAGCTTATCCTTTGGATCTATTCGAAGAAGGTTCCGTTACTAATTTGTTCACCTCTATAGTAGGTAATGTCTTTGGATTTAAGGCTCTACGCGCTCTACGCTTGGAAGACCTTCGAATTCCTCCCGCTTATTCTAAAACTTTCATGGGACCGCCTCATGGTATTCAGGTTGAAAGGGATAAATTGAACAAATATGGACGTCCTTTATTGGGATGTACAATCAAGCCAAAATTGGGTCTGTCTGCTAAAAATTACGGTAGAGCCGTCTACGAATGCCTTCGTGGTGGACTTGATTTCACAAAAGATGATGAAAATGTGAATTCCCAGCCATTCATGCGTTGGAGAGATCGTTTCCTATTTGTGGCAGAAGCTCTTTTCAAATCCCAAGCTGAAACAGGGGAAATCAAAGGACATTACTTAAACGCTACTGCAGGTACATGTGAAGAGATGATGAAAAGAGCTGTTTTTGCTAGGGAGTTGGGTGCACCAATTGTCATGCATGACTATCTAACCGGAGGGTTTACTGCAAATACCAGCTTAGCTTTTTATTGCAGAGATAATGGACTGCTTCTTCATATTCACCGCGCAATGCATGCTGTGATTGATAGGCAACGAAATCACGGTATGCATTTTCGTGTATTGGCCAAAGCGTTACGCATGTCCGGCGGAGATCATATACATGCTGGAACTGTAGTAGGCAAACTAGAAGGGGAACGAGATGTTACCCTTGGTTTCGTCGATTTACTTCGCGACGATTACATTGAAAAAGATCGTAGCCGCGGTATTTATTTCACCCAAGATTGGGTATCTATGCCGGGTGTATTCCCTGTAGCTTCAGGAGGTATCCACGTCTGGCACATGCCTGCTCTAACCGAAATCTTTGGGGACGATTCCGTATTACAGTTCGGCGGAGGAACCTTAGGACATCCTTGGGGAAATGCGCCAGGTGCAGTAGCCAACCGAGTCGCATTGGAAGCT [1206] Psilotum_nudum TATACCCCTGATTATAAAGTCAGTGATACTGATATCCTAGCAGCATTTCGAATGACTCCTCAACCTGGAGTACCACCTGAGGAAGCAGGAGCTGCAGTAGCTGCTGAGTCTTCCACCGGTACGTGGACCACTGTATGGACTGATGGACTTACCAGCCTGGATCGTTACAAGGGTCGATGTTATGGTATCGAACCTGTTGCTGGGGAAGAAAATCAATATATTGCCTATGTAGCATATCCATTGGATCTATTTGAGGAAGGTTCTGTTACCAACATGTTCACTTCCATTGTAGGTAATGTATTCGGATTCAAAGCATTGAGAGCTCTACGTCTGGAAGATTTAAGAATTCCCCCTGCTTATTCGAAGACCTTCATGGGTCCACCTCACGGTATCCAAGTTGAAAGAGATAAATTGAACAAATATGGACGTCCTTTATTGGGATGTACCATCAAACCTAAATTAGGTTTATCTGCTAAAAACTACGGTAGAGCGGTTTATGAATGTCTTCGTGGTGGACTTGATTTTACTAAAGATGATGAGAATGTCAATTCTCAACCTTTTATGCGTTGGAGAGATCGTTTCTTATTTGTAGCAGAAGCTCTTTTCAAATCCCAAGCTGAAACAGGTGAAATTAAGGGACATTATTTGAACGCCACTGCAGGTACTTGCGAAGAAATGATGAAAAGAGCAGTCTTCGCTCGAGAATTAGGAGCCCCCATTGTTATGCACGACTATTTGACAGGAGGATTTACTGCAAATACTAGTCTGGCTTTCTATTGTCGAGATAATGGTCTACTTCTTCATATTCACCGTGCCATGCATGCTGTTATTGATAGACAAAGAAATCATGGTATGCACTTCCGTGTATTGGCTAAAGCATTGCGTATGTCGGGTGGAGATCATGTCCATGCTGGTACTGTAGTAGGTAAGCTTGAAGGGGAACGAGACGTCACTCTGGGATTTGTTGATTTACTTCGTGATGATTATATTGAGAAGGACCGGAGCCGCGGCGTCTATTTCACTCAAGATTGGGTTTCTATGCCAGGTGTACTGCCTGTTGCTTCGGGGGGTATTCATGTTTGGCACATGCCAGCTTTAACTGAGATCTTTGGGGATGATTCTGTATTACAGTTCGGTGGAGGAACCTTGGGACATCCTTGGGGAAATGCACCAGGTGCTGTGGCTAATCGAGTTGCGTTGGAAGCC [1206] Acrostichum_aureum TATACTCCCGAATATCAGACCAAAGACACTGATATCTTAGCCGCTTTCCGAATGACCCCACAACCTGGAGTACCGGCTGAGGAGGCCGGGGCTGCAGTGGCTGCGGAATCCTCGACAGGTACATGGACAACAGTATGGACAGACGGACTTACTACTCTCGATCGCTACAAAGGCCGGTGCTACGATATTGAACCCGTTCCTGGGGAGGAAAATCAGTATATTGCATATGTAGCTTATCCTTTGGATTTATTTGAAGAAGGTTCCGTTACTAATATGTTCACTTCGATCGTAGGTAATGTTTTTGGATTCAAGGCCCTACGTGCTCTGCGTCTGGAAGACCTACGAATCCCTCCTGCCTATCCAAAAACTTTTATTGGACCTCCCCACGGTATCCAGGTAGAAAGGGATAAACTAAACAAATATGGCCGTCCTTTATTGGGATGTACAATCAAACCAAAATTGGGCTTGTCTGCTAAAAATTATGGTAGAGCAGTTTATGAATGCCTTCGTGGCGGACTTGATTTCACAAAAGATGATGAAAACGTTAATTCCCAACCGTTTATGCGTTGGAGAGATCGCTTTTTATTTGTAGCAGAAGCACTTTTCAAAGCCCTGGCTGAGACGGGTGAAATCAAGGGGCATTATTTAAATGCCACTGCAGGCACGTCTGAAGAAATGATGAAGAGAGCTCGTTTTGCCCGAGAATTGGGGGCACCAATCGTCATGCATGACTACCTAACTGGGGGATTTACCGCCAATACCAGCTTAGCTTTTTATTGTAGAGACAACGGATTGCTTCTTCATATTCACCGGGCAATGCATGCTGTCATCGATAGACAACGGAATCACGGTATGCATTTCCGTGTATTAGCCAAAGCCTTACGTATGTCTGGTGGGGATCATATTCATGCGGGAACTGTAGTAGGCAAACTAGAGGGCGAACGAGAAGTTACTCTGGGATTTGTCGACTTACTTCGCGACGACTACATTGAAAAAGATCGTAGCCGTGGTATCTACTTTACCCAAGATTGGGTATCTATGCCAGGTGTAATTCCCGTAGCTTCAGGGGGTATTCACGTATGGCACATGCCAGCTCTAACCGAAATCTTTGGGGACGATGCTGTCTTACAGTTCTGCGGAGGAACTTTGGGACATCCCTGGGGTAATGCACCCGGTGCTGTTGCTAACCGAGTTGCCTTGGAAGCT [1206] Adiantum_raddianum TACACTCCCGAATACGTGACCCTAGACACTGATATCTTAGCGGCTTTCCGAATGACTCCACAACCTGGAGTACCGGCTGAGGAAGCCGGAGCTGCAGTAGCTGCGGAATCTTCCACGGGTACATGGACTACTGTATGGACAGATGGACTTACTAGTCTTGATCGATATAAAGGCCGGTGCTATGATATTGAGCCTGTAGCTGGGGAAGAAAATCAGTATAT?GCATATGTAG?TTATCCTCTGGATTTATTCGAGGAAGGTTCTGTCACTAATATGCTGACTTATATTGTAGGTAATGTTTTTGGATTTAAGGCTCTACGGCCTCTGCGTCTGGAAGACTTACGAATCCCCCCCGCTTATTCCAAAACTTTTCTTGGACCCCCTCACGGTATTCAGGTGGAAAGGGATAAACTAAACAAATATGGCCGTCCCCTATTGGGATGTACAATCAAGCCAAAATTAGGCTTGTCTGCCAAGAATTATGGTAGAGCAGTTTATGAATGCCTTCGTGGTGGACTTGACTTTACAAAAGATGATGAAAACGTAAATTCCCAACCGTTTATGCGTTGGAGAGATCGGTTCCTATTCGTAGCAGAAGCCCTTTTCAAATCTCAGGCTGAAACGGGTGAAATCAAGGGGCATTACTTGAATGCCACTGCAGGTACGTGTGAAGAGATGATGAAGAGAGCTATTTTCGCCAGGGAATTGGGTGCGCCGATTGTCATGCATGACTATCTAACCGGGGGGTTTACCGCAAATACTAGCTTAGCCTTCTACTGCAGAGACAATGGGCTACTTCTGCATATTCACCGGGCGATACATGCTGTCATCGATAGACAGAAAAATCACGGTATGCATTTCCGTGTATTAGCCAAAGGATTACGGATGTCCGGTGGGGATCATATTCATGCCGGAACTGTAGTGGGCAAATTGGAAGGTGAACGAGAAGTTACCCTAGGATTTGTCGATTTACTCCGCGATGATTACATTGAAAAGGATCGTAGCCGTGGTATTTATTTCACCCAAGATTGGGTATCTATGCCGGGTGTCTTTCCCGTAGCTTCGGGAGGTATTCACGTCTGGCACATG?CCGCCTTAACCGAAATTTTCGGGGATGATGCCGTCCTACAATTTGGTGGAGGAACTTTGGGCCATCCTTGGGGAAATGCACCCGGTGCTGTAGCTAACCGAGTTGCATTAGAGGCT [1206] Coniogramme_japonica TACACTCCCGAATACAAGACCAAAGACACTGATATCTTAGCAGCTTTCCGAATGACCCCACAACCTGGAGTGCCGGCTGAGGAAGCCGGAGCTGCGGTAGCTGCGGAATCTTCCACGGGTACATGGACCACGGTATGGACAGATGGGCTTACTAATCTTGATCGCTATAAGGGCCGGTGCTACGATATCGAGCCCGTCGCTGGAGAGGAAAATCAGTATATTGCATATGTAGCTTATCCCTTGGATTTATTCGAGGAAGGTTCCGTCACCAATATGCTGACTTCTATTGTAGGTAATGTTTTCGGATTTAAGGCCCTACGCGCTCTGCGTCTGGAAGACCTGCGAATTCCCCCCGCTTATTCAAAAACTTTTATCGGACCCCCCCACGGTATTCAGGTGGAAAGGGATAAACTAAACAAATATGGACGTCCTCTATTGGGATGTACGATCAAGCCGAAGTTAGGCTTATCTGCTAAGAATTATGGTCGAGCAGTTTACGAATGCCTCCGTGGCGGACTTGATTTCACAAAAGATGATGAAAACGTAAATTCCCAACCGTTCATGCGTTGGAGAGATCGCTTCCTATTCGTAGCAGAAGCCCTTTTCAAATCCCAGGCTGAAACGGGTGAAATCAAGGGGCACTATTTAAATGCCACTGCAGGTACGTGTGAGGAGATGATGAAGAGAGCTGTTTTTGCCAGAGAATTGGGTGCACCAATCGTCATGCATGACTACCTGACCGGGGGTTTCACCGCAAATACCAGCTTAGCCTTTTATTGCAGAGACAATGGACTGCTTCTCCATATTCACCGGGCAATGCATGCTGTCATCGATAGGCAACGGAATCACGGTATACATTTCCGTGTATTAGCCAAGGCATTACGCATGTCTGGTGGGGATCACGTCCACGCCGGAACCGTAGTGGGCAAATTAGAAGGCGAACGGGAAGTCACCCTGGGATTTGTCGACCTACTTCGCGACGATTACATCGAGAAAGATCGTAGCCGCGGCGTCTATTTCACCCAAGATTGGGTATCCATGCCGGGTGTACTTCCCGTAGCTTCGGGGGGTATCCACGTCTGGCACATGCCTGCCCTAACCGAAATTTTCGGGGACGACTCCGTCTTACAATTCGGCGGTGGAACATTGGGACATCCCTGGGGAAACGCACCCGGTGCCGTGGCTAACCGAGTCGCATTAGAGGCT [1206] Platyzoma_microphyllum TACACTCCCGAATACAAGACCAAAGATACTGATATCTTAGCGGCTTTCCGAATGACCCCACAACCCGGAGTACCAGCTGAGGAGGCCGGAGCTGCAGTAGCTGCGGAATCGTCTACGGGTACATGGACCACGGTATGGACAGACGGACTTACCAGCCTCGATCGATACAAGGGCCGGTGTTATGATATTGAGCCCGTCGCTGGGGAGGAAAATCAATATATTGCGTATGTAGCTTATCCCCTGGATTTATTCGAGGAAGGTTCCGTCACGAATATGCTGACTTCCATTGTAGGTAATGTTTTTGGATTCAAGGCCCTACGCGCTCTGCGTCTCGAAGACCTACGAATTCCTCCTGCATATTCCAAAACTTTTATAGGACCCCCCCACGGTATTCAGGTAGAGAGGGATAAACTAAACAAATATGGACGCCCTCTACTGGGATGTACAATCAAGCCAAAATTAGGCTTGTCTGCCAAAAATTATGGTAGAGCAGTTTATGAATGCCTTCGCGGTGGACTTGATTTCACAAAAGATGATGAAAACGTGAATTCCAACCCGTTCATGCGTTGGAGAGATCGCTTTGTATTCGTAGCAGAGGCCCTATTTAAAGCTCAGGCCGAAACGGGTGAAATCAAGGGACATTATTTAAATGCCACTGCAGGCACCTGTGAAGAGATGTTGAAGAGAGCTGCTTTCGCCAGAGAATTGGGTGCACCAATTATCATGCATGACTACCTAACTGGAGGGTTTACCGCAAATACCAGCTTAGCTTTTTATTGCAGAGACAACGGACTACTTCTTCACATTCACCGGGCGATGCATGCTGTCATCGATAGACAACGGAATCACGGTATGCATTTCCGTGTATTAGCTAAAGGATTACGCATGTCTGGCGGGGATCATATCCATGCCGGAACTGTAGTGGGCAAATTAGAAGGCGAACGAGAAGTTACCCTGGGATTTGTCGACTTACTTCGCGACGATTATATTGAAAAGGATCGTAGCCGCGGTATCTATTTTACCCAAGACTGGGTATCCATGCCGGGTGTACTGCCCGTAGCCTCGGGCGGTATTCACGTATGGCACATGCCTGCTCTAACCGAAATTTTTGGGGACGATGCCGTCTTACAATTTGGTGGGGGAACGTTGGGACATCCATGGGGAAATGCACCCGGTGCTGTAGCGAACCGAGTTGCATTGGAAGCT [1206] Pteris_fauriei TACACTCCCGAATACAAAACCAAAGATACTGATATATTAGCGGCTTTCCGAATGACCCCACAACCTGGAGTACCGCCTGAGGAGGCCGGAGCTGCAGTAGCTGCTGAATCCTCTACGGGTACCTGGACCACGGTATGGACAGACGGACTTACCAGTCTCGATCGCTACAAGGGCCGGTGTTACGATATTGAGCCTGTTGCTGGGGAGGAAAATCAGTATATTGCGTATGTAGCTTATCCTCTGGACCTATTTGAGGAAGGTTCCGTCACCAATATGCTGACTTCCATTGTAGGTAATGTTTTTGGCTTCAAGGCCCTACGCGCTCTGCGTCTGGAAGACCTACGAATCCCTCCTGCGTATTCCAAAACTTTTATAGGACCCCCACACGGCATTCAGGTAGAAAGGGATAAACTAAACAAATATGGACGTCCCCTACTGGGATGTACAATCAAGCCAAAATTGGGCTTGTCTGCCAAAAATTATGGTAGAGCAGTTTATGAATGCCTTCGTGGTGGACTTGATTTCACGAAAGATGATGAAAACGTGAATTCCCAACCTTTCATGCGTTGGAGAGACCGCTTCTTATTTGTAGCAGAAGCCCTTTTTAAAGCCCAAGCAGAAACGGGTGAAGTCAAGGGACATTATTTAAATGCCACTGCAGGCACCTGTGAAGAGATGTTGAAGAGAGCTGTTTTCGCCAGAGAATTGGGTGCACCAATTGTCATGCATGACTACTTGACTGGGGGTTTTACCGCAAATACCAGCTTAGCTTTTTATTGCAGAGACAACGGACTACTTCTTCACATTCACCGGGCGATGCATGCTGTCATCGATAGACAACGGAATCACGGTATGCATTTCCGTGTATTAGCCAAAGCATTACGCATGTCTGGTGGGGATCATATCCATGCCGGAACTGTAGTGGGCAAATTAGAAGGCGAACGAGAAGTTACCCTGGGATTTGTCGACTTACTTCGCGACGATTATATTGAAAAGGATCGTAGTCGTGGCATCTATTTTACCCAAGATTGGGTATCCATGCCAGGTGTACTGCCCGTAGCTTCGGGTGGTATTCACGTCTGGCACATGCCTGCCCTAACCGAAATATTCGGGGACGATTCTGTCTTACAATTTGGCGGGGGAACGTTGGGACATCCCTGGGGAAATGCACCCGGTGCTGTAGCTAACCGAGTTGCGTCGGAAGCT [1206] Taenitis_blechnoides TACACTCCCGAATACAAGACCCTAGATACTGATATCTTAGCTGCTTTCCGAATGACCCCGCAACCTGGAGTACCAGCTGAGGAGGCCGGAGCTGCAGTAGCTGCGGAATCCTCTACGGGTACATGGACCACGGTATGGACAGACGGACTTACCAGTCTCGATCGATACAAGGGCCGGTGTTACGATGTCGAGCCCGTCGCTAGGGAGAAAAATCAGTATATTGCGTATGTAGCTTATCCCCTGGATTTATTCGAGGAAGGTTCCGTCACCAATATGCTGACTTCCATTGTAGGTAATGTTTTTGGATTCAAGGCCTTACGCGCTCTGCGTCTGGAAGACCTACGGATTCCTCCTGCGTATTCCAAAACTTTTATAGGACCCCCTCACGGTATTCAGGTAGAAAGGGATAAACTAAACAAATACGGACGTCCTCTACTGGGATGTACAATCAAGCCAAAATTAGGCTTGTCTGCCAAAAATTATGGTAGGGCAGTCTATGAATGCCTTCGTGGTGGACTTAATTTCACGAAAGATGATGAAAACGTAAATTCCCAACCGTTCATGCGTTGGAGAGATCGCCTCGTATTCGTAGCAGAAGCTCTTAATAAAGCCGTGTCCGAAACAGGTGAAATCAAGGGGCATTATTTAAATGCCACTGCAGGCAATTGTGAAGAGATGATGAAGAGAGCTGCGTTTGCCAGAGAATTGGGTGTACCAATCGTCATGCATGACTACCTCACTGGCGGGTTTACCGCAAATACTACCTTAGCATCTTATTGCAGAGACAATGGATTACTTCTTCATATTCACCGGGCGATGCATGCTGTCATCTCTAGACAACGGAATCATGGTATGCATTTCCGTGTATTAGCCAAAGCATTACGCATGTCCGGCGGGGATCATGTCCATGCCGGAACTGTAGTAGGCAAATTAGAAGGCGAACGAGAAGTTACTTTAGGATTCGTCGATTTACTTCGCGACGATTATATCGAAAAGGATCGTAATCGCGGCGTCTATTTTACCCAATATTGGGTTTCCATGCCGGGTGTACTGCCCGTAGCTTCGGGTGGTATTCACGTTTGGCACATGCCTGCCCTAACTGAAATTTTTGGGGACGATTCTGTCTTACAGTTTGGCGGGGGAACGTTGGGACATCCCTGGGGAAATGCACCCGGTGCTGTAGCTAACCCGGGTGCTTCGGAGGCT [1206] Salvinia_cucullata TACACTCCCGATTATGTGACCAAAGACACCGATATTTTGGCAGCTTTCCGAATGACTCCGCAACCTGGAGTACCACCTGAAGAGGCTGGAGCAGCTGTAGCTCCGGAATCTTCTACAGGTACATGGACCACCGTATGGACGGACGGACTTACCAGTCTTGATCGTTACAAAGGTAGATGCTACGATATCGAACCTGTTGCTGGGGAAGAAAACCAATACATCGCATATGTAGCTTACCCCCTAGATCTATTTGAAGAGGGTTCCGTTACCAACATGTTTACCTCTATCGTAGGTAATGTATTCGGATTTAAGGCTCTACGCGCCCTTCGCCTAGAAGACCTTCGAATTCCTCCTGCTTATTCCAAAACTTTCGAGGGACCGCCCCACGGTATCCAGGTTGAGAGGGACAAGCTGAACAAATACGGACGTCCTCTACTAGGATGCACGATCAAACCAAAATTGGGCTTATCCGCCAAGAATTATGGTAGAGCTGTTTACGAATGTCTTCGTGGAGGACTTGACTTTACCAAGGATGATGAAAACGTAAACTCACAGCCTTTCATGCGTTGGAGAGACCGTTTCCTATTCGTAGCAGAAGCTTTGTTCAAGGCTCAGGCCGAAACGGGCGAAGTCAAGGGACATTACTTGAACGCCACTGCAGGTAACAACGAGGAAATGATTAAAAGGGCTGTTTTTGCTAGAGAATTGGGCGCACCAATTGTCATGCATGACTACCTGACCGGAGGGTTTACTGCAAATACTAGCTTGTCTCATTACTGCCGAGACAACGGTCTACTTCTTCACATTCACCGCGCTATGCATGCTGTCATCGATAGACAGAGAAATCACGGTATACACTTCCGCGTGTTAGCTAAGGCATTACGTATGTCTGGTGGGGACCATATTCACGCTGGACCCGTAGTAGGTAAACTAGAGGGAGAGCGAGAAGTAACTCTGGGTTTCGTTGATCTGCTTCGCGATGATTTCATTGAAAAGGACCGTAGCCGCGGTATCTATTTCACCCAAGATTGGGTATCTATGCCAGGAGTACTGCCCGTAGCTTCAGGGGGTATCCACGTCTGGCACATGCCTGCTCTAACCGAGATTTTCGGAGATGACTCCGTATTACAATTCGGTGGAGGAACCCTAGGCCATCCTTGGGGGAATGCACCCGGCGCTGCAGCTAACAGAGTTGCTTTGGAAGCT [1206] Actinostachys_digitata TATACTCCTGACTACAAGACCAAAGACACTGATATCTTAGCAGCATTCCGAATGACTCCACAACCTGGGGTCCCGCCTGAGGAAGCCGGCGCTGCGGTAGCTGCTGAATCTTCCACTGGTACATGGACCACGGTATGGACAGACGGACTTACTAGTCTTGATCGGTACAAAGGGCGGTGCTACGACATCGAGCCCGTAGCTGGGGAGAAGAATCAATATATTGCATATGTAGCTTATCCTTTAGACCTATTTGAGGAAGGGTCCGTAACTAACATGTTTACTTCCATTGTAGGTAATGTATTTGGATTCAAGGCCTTACGGGCTTTACGCTTGGAAGATCTAAGAATTCCGCCTGCGTATTCAAAGACCTTTATTGGTCCGCCCCATGGTATCCAGGTCGAACGGGATAAATTGAACAAATATGGACGCCCCTTATTGGGATGTACAATTAAGCCAAAATTGGGATTATCTGCCAAAAATTATGGTAGAGCAGTTTATGAATGCCTCCGTGGTTTACTTGACCTCACGAAGGATGATGAGAATGTTAATTCCCAACTATTTATGGGTTGGCGTGATCGCTTCCCCTTCGTGACAGAAGCTCTTTCCAAATCTCAAGCCGAGACAGGTGAAATTAAAGGACATTACCTAAATGCCACTGCAGGTACTTGCGAGGAAATGCTAAAAAGGGCTCGGTTCGCTAGAGAACTCGGCGCACCCATAGTCATGCATGATTATTTGACAGGGGGGTTTACTGCAAATACCAGCTTGGCCTTTTATTGCCGCGATAACGGCTTACTTCTACACATTCACCGCGCAATGCATGCCGTAATCGATAGACAGAAAATTCACGGCATGCATTTCCGTGTATTAGCTAAGGGATTACGTATGCCCGGCGGGGATCACGTCCACGCTGGGACTGTAGTCGGTAAATTGGAGGGTGAACGAGAAGTTACTCGAGGATTTGTTGATTTACTTCGCGACGATTATATAGAGAAAGATCGTAGTCGCGGCATATACTTCACCCAGGACTGGGTATCCATGCCGGGGGTACTGCCCGTAGCTTCTGGGGGCATTCACGTATGGCACATGCCCGCCTTAACTGAAATATTTGGAGATGATGCCGTATTACAATTTGGTGGAGGAACCTTGGGTCATCCTTGGGGAAACGCCCCAGGAGCAGTTGCAAATCGCGTCGCTTTGGAAGCC [1206] Thelypteris_beddomei TACACCCCCGAATACAAGACCAAAGATACGGATATCTTAGCAGCCTTCCGAATGACCCCACAACCCGGAGTACCAGCTGAGGAAGCCGGAGCTGCGGTAGCTGCGGAATCCTCCACGGGTACGTGGACCACCGTATGGACAGACGGGTTGACCAGCCTCGACCGTTACAAGGGCCGATGCTACGACATTGAACCCGTCGCTGGAGAGGAAAACCAGTATATCGCGTATGTAGCTTATCCTTTGGATCTATTCGAAGAAGGTTCCGTCACTAATTTGTTCACCTCCATTGTAGGTAATGTTTTCGGATTTAAGGCTCTACGCGCTCTACGCTTGGAAGACCTTCGAATCCCTCCTGCTTATTCTAAAACTTTCATTGGACCGCCTCATGGTATTCAGGTCGAAAGGGATAAACTGAACAAATATGGACGTCCCTTATTGGGATGTACAATCAAGCCAAAATTAGGTCTGTCTGCTAAGAATTATGGTAGAGCCGTCTACGAATGCCTTCGTGGTGGACTTGATTTTACAAAGGATGATGAAAACGTAAATTCCCAGCCATTCATGCGTTGGAGAGATCGCTTCTTATTTGTAGCAGAAGCTCTTTTCAAATCCCAGGCTGAAACAGGCGAAATCAAAGGGCACTATTTAAATGCTACTGCAGGTACGTGTGAAGAAATGTTGAAGAGAGCTGTCTTTGCTAGGGAGTTGGGTGCACCAATAGTCATGCATGACTATCTGACTGGGGGGTTTACCGCAAATACCAGCTTAGCTATTTACTGCAGAGACAATGGACTGCTTCTTCATATTCACCGTGCGATGCATGCCGTGATCGATAGGCAACGAAATCACGGTATACATTTTCGTGTACTAGCCAAAGCATTACGCATGTCCGGTGGGGATCATATACACTCCGGAACTGTAGTAGGCAAACTAGAAGGGGAACGAGAAGTCACTTTGGGTTTCGTCGATTTACTTCGCGACGATTACATCGAGAAAGATCGTAGCCGTGGTATATATTTCACACAAGATTGGGTATCTATGCCGGGTGTACTCCCCGTAGCTTCCGGGGGTATCCACGTCTGGCACATGCCCGCTCTAACCGAAATCTTTGGGGACGACTCCGTCTTACAGTTCGGCGGAGGAACCTTGGGACATCCTTGGGGAAATGCACCCGGTGCGGTAGCCAACCGAGTCGCATTAGAAGCT [1206] Vittaria_flexuosa TACACTCCCGAATACAAGACTCTAGACACTGATATCCTAGCAGCTTCACGAATGACTCCACAACCTGGCGTACCGGCTGAGGAAGCTGGAGCTGCAGTAGCTGCGGAATCTTCCACGGGTACGTGGACCACGGTATGGACAGACGGGCTTACTAGTCTTGATCGATATAAGGGACGATGCTATGATATTGAGCCGGTAGCTGGGGAGGAAAATCAGTATATCGCATATGTAGCTTACCCTCTGGATTTATTTGAGGAAGGTTCCGTTACGAATATGTTCACTTCGATCGTAGGAAACGTTTTTGGGTTTAAGGCTCTACGCGCGTTGCGTCTGGAAGACTTGCGAATTCCTCCTGCTTATTCCAAAACCTTTGCAGGACCCCCTCATGGGATTCAAGTGGAAAGGGATAAACTAAATAAATATGGACGTCCCTTATTAGGATGTACAATCAAGCCAAAATTGGGCTTATCTGCCAAAAATTATGGTAGAGCGGTTTACGAGTGCCTTCGGGGTGGACTTGATTTCACAAAAGATGATGAAAATGTCAATTCCCAACCATTTATGCGGTGGAGAGATCGATTCTTATTCGTATTAGAAGCTCTTAATAAAGCCGTGGCTGAAACCGGTGAGGTCAAGGGCCATTACTTGAATGCTACTGCAGGTACATGTGAAGAGATGATGAAAAGAGCTGCGTGTGCAAGAGAATTGGGTGCACCAATCGTCATGCATGACTACTTGACGGGAGGGTTTACTGCAAATACCAGTTTAGCCCTTTATTGCAGAGATAATGGATTACTTCTACACATTCACAGGGCAATGCATGCCGTTATCGATAGACAGAAAATTCACGGTATGCATTTCCGTGTATTAGCTAAAGGATTACGTATGTCTGGCGGAGATCACATCCATGCCGGAACCGTAGTGGGCAAATTGGAAGGGGAACGAGAGGTTACCCTAGGATTTGTTGACTTACTTCGCGAGGATTCGATTGAAAAGGATCGTAACCGTGGCATCTATTTCTCGCAAGATTGGGTCTCTATGCCGGGTGTTATACCCGTAGCTTCAGGCGGTATCCATGCTTGGCATATGCCTGCCCTTACCGAACCTTTTGGGGATGACTCTGTCCTACAATTTGGTGGGGGAACCCTGGGACACCATTGGGGGAATGCACCCTGTGCCGTGGCTAACCGAGTCGCAGTGGAAGCG [1206] Equisetum_arvense TTTACTCCAGATTATGAAACCAAAGATACCGATATTTTAGCAGCATTCCGTATGACTCCTCAACCGGGAGTACCACCGGAAGAAGCAGGAGCAGCCGTAGCTGCTGAATCGTCCACGGGCACCTGGACTACCGTATGGACAGATGGACTTACTAGTCTTGATCGATATAAAGGTCGATGCTATAATATTGAACCTGTTGCTGGAGAAGATAATCAATTCATAGCTTATGTAGCCTACCCTTTAGATCTTTTTGAAGAAGGTTCTGTTACCAATCTTTTTACTTCAATTGTTGGTAATGTTTTCGGCTTCAAAGCTCTACGTGCTTTACGTTTAGAAGATTTAAGAATTCCTCCTGCTTACTCCAAAACTTTTATAGGACCACCCCACGGTATCCAGGTTGAAAGAGATAAGTTAAACAAATACGGTCGTCCTTTATTAGGTTGTACAATTAAACCAAAATTGGGACTATCTGCTAAAAACTATGGTAGAGCTGTTTATGAATGTCTTCGTGGTGGGCTTGATTTCACCAAAGATGATGAGAATGTAAACTCTCAACCCTTTATGCGTTGGAGAGATCGTTTCTTATTCGTAGCAGAAGCTCTTTTTAAATCCCAAGCTGAGACAGGTGAAATTAAAGGACATTACTTAAACGCTACTGCAGGTACATGTGAAGAAATGTTAAAAAGAGCAGTCTTCGCCAGAGAATTAGGAGCTCCTATTGTTATGCATGACTACCTAACAGGTGGTTTTACTGCAAATACTAGTCTAGCTTTTTACTGTCGAGATAATGGTTTACTTCTTCATATTCACCGAGCAATGCATGCTGTTATCGATAGACAAAAAAATCATGGTATTCACTTTCGTGTACTAGCTAAAGCATTACGTATGTCTGGAGGAGATCATATTCATACTGGTACTGTTGTTGGTAAACTTGAAGGTGAAAGAGACTTAACTTTAGGATTTGTTGATTTACTTCGCGACGACTTTATCGAAAAAGATCGAAGTCGCGGAATTTATTTCACTCAAGACTGGGTATCTATGCCTGGTGTACTTCCTGTAGCTTCGGGTGGTATTCACGTTTGGCACATGCCAGCTTTGACTGAAATTTTTGGAGATGACTCTGTATTACAATTTGGTGGAGGAACCTTAGGACACCCTTGGGGTAATGCACCAGGTGCTGTCGCTAATAGAGTTGCTGTCGAGGCT [1206] Lycopodium_digitatum TACACTCCTGATTATAAGACCAAAGAAACCGATATTCTGGCAGCATTTCGAATGACTCCTCAACTTGGAGTACCACCCGAGGAAGCGGGAGCCGCAGTAGCTGCTGAATCTTCCACTGGTACATGGACTACTGTTTGGACCGATGGACTTACCAGTCTCGATCGCTACAAAGGTCGGTGCTATGAAATTGAACCTGTTGCTGGAGAAAAAAATCAATATATTGCTTATGTAGCTTATCCTCTGGATCTGTTTGAGGAAGGTTCCGTTACTAACTTGTTCACTTCCATTGTAGGTAATGTATTTGGATTCAAAGCCTTACGAGCTTTACGTTTAGAAGATTTGCGAATTCCTCCTGCTTATTCCAAAACTTTCATGGGTCCGCCCCATGGTATCCAAGTCGAAAGAGACAAATTGAACAAATATGGCCGTCCTTTATTAGGATGTACTATTAAACCAAAATTAGGTTTATCCGCTAAAAACTATGGTAGAGCTGTTTATGAATGTCTTCGTGGTGGACTTGATTTCACTAAGGATGATGAAAACGTGAATTCTCAACCGTTTATGCGTTGGAGAGACCGTTTCTTATTCGTAGCAGAAGCTCTTTATAAAGCTCAAGCCGAAACAGGCGAAATTAAGGGTCATTACTTGAATGCTACCGCGGGTACATATGAAGAAATGCTTAAAAGGGCACATTGTGCTAAAGAATTAGGAGTGCCTATCGTAATGCATGACTATTTGACGGGAGGTTTCACCGCAAATACTAGTTTAGCCCATTATTGTCGAGACAATGGTCCACTGCTTCACATTCACCGCGCGATGCATGCAGTTATTGACAGACAAAAGAATCATGGTATTCACTTCCGTGTATTAGCTAAAGCATTACGTATGTCTGGTGGAGATCACATACACTCCGGTACTGTAGTAGGTAAACTCGAAGGAGAACGCCAAATAACTTTAGGTTTTGTTGATCTACTTCGTGATGACTATATCGAGAAGGACCGAAGCCGTGGTATTTATTTCACTCAAGATTGGGTATCTATGCCTGGTGTTTCGCCCGTAGCTTCGGGAGGTATTCATGTCTGGCACATGCCTGCTCTGACTGAAATCTTTGGAGATGATTCTGTATCACAATTCGGTGGGGGAACTTTGGGACACCCTTGGGGGAATGCACCCGGTGCAGTAGCAAACCGAGTTGCTTTAGAAGCT [1206] Cycas_circinalis TACACTCCTGAATATCAAACCAAAGATACCGATATCTTGGCAGCGTTCCGAGTAACTCCTCAACCTGGAGTGCCGCCTGAGGAAGCGGGAGCTGCAGTAGCCGCTGAATCTTCCACTGGTACATGGACCACTGTTTGGACCGATGGACTTACCAGTCTCGATCGTTACAAGGGGCGATGCTATGACATCGAGCCCGTTCCTGGGGAGAAAAATCAATTTATTGCCTATGTAGCTTACCCCTTAGACCTCTTTGAAGAAGGTTCTGTTACTAACATGTTCACTTCCATTGTAGGTAATGTATTTGGATTCAAAGCCCTACGAGCTCTACGCCTAGAAGATTTGCGAGTTCCTCCTGCTTATTCCAAAACTTTCCAAGGTCCACCTCATGGTATCCAAGTTGAAAGAGATAAATTAAACAAATATGGCCGTCCTCTATTGGGATGTACTATTAAACCCAAATTGGGTTTATCTGCCAAAAACTATGGTAGAGCAGTTTATGAATGTCTTCGTGGTGGACTTGATTTTACCAAAGATGATGAGAACGTAAATTCCCAACCATTTATGCGCTGGAGAGATCGTTTCTGCTTCTGTGCAGAAGCAATTTATAAAGCTCAGGCTGAGACGGGTGAAATTAAGGGACATTACTTGAATGCTACTGCAGGTACATGCGAAGAAATGATCAAAAGGGCAGTATTTGCCAGAGAATTGGGGGTTCCTATCGTCATGCATGACTACCTGACGGGAGGATTTACTGCAAATACCAGCTTGGCTCATTATTGCCGAGACAATGGCCTACTTCTTCACATTCACCGCGCAATGCATGCAGTTATTGACAGACAAAGAAATCATGGTATGCACTTCCGTGTGCTAGCTAAAGCATTGCGAATGTCCGGTGGAGATCATATTCACGGCGGTACTGTAGTAGGTAAACTTGAAGGAGAACGAGACGTAACTTTGGGTTTTGTTGATCTACTGCGTGACGATTTTATTGAAAGAGACCGAAGTCGTGGTATTTATTTCACCCAAGATTGGGTATCTATGCCAGGTGTTCTGCCCGTAGCTTCGGGGGGTATTCACGTTTGGCATATGCCTGCTCTAACCGAGATCTTTGGGGATGATTCCGTACTACAGTTCGGTGGGGGAACTTTGGGACACCCTTGGGGAAATGCACCTGGTGCAGTAGCGAATCGAGTTGCCTTAGAAGCT [1206] ; END; BEGIN CODONS; CODESET * UNTITLED = Universal.ext: all ; END; BEGIN ASSUMPTIONS; OPTIONS DEFTYPE=unord PolyTcount=MINSTEPS ; END; BEGIN MACCLADE; Version 3.05; LastModified -1350304765; Singles 1000&/0; END; tv-0.5/ncl-2.0/data/kenrickcrane.nex0000775000076400007640000000621207236527357014123 00000000000000#nexus [! Data from Table A2.2 in Appendix 2 of: Kenrick, Paul, and Peter r. Crane. 1997. The origin and early diversification of land plants: a cladistic study. Smithsonian Institution Press, Washington. (ISBN 1-56098-729-4) ] begin taxa; dimension ntax=15; taxlabels Andreaea Andreaeobryum Anthoceros Chara Coleochaete Equisetum Haplomitrium Horneophyton Huperzia Monoclea Notothylas Polytrichum Sphaerocarpos Sphagnum Takakia ; end; begin characters; dimensions nchar=34; format missing=? symbols="012"; charstatelabels 1 'Sporophyte cellularity' / unicellular multicellular, 2 'Sporophyte independence or dependence' / dependent independent, 3 'Well-developed sporangiophore' / absent present, 4 'Sporophyte branching' / absent present, 5 'Intercalary meristem' / absent present, 6 'Foot form' / bulbous tapering, 7 'Xylem-cell thickenings' / absent present, 8 'Sporangium' / absent present, 9 'Sporangium dehiscence' / linear operculate, 10 'Columella' / absent present, 11 'Elaters and pseudoelaters' / absent present, 12 'Zoospore flagella' / present absent, 13 'Perine' / absent present, 14 'Cuticle' / absent present, 15 'Stomates' / absent present, 16 'Gametophyte form' / thalloid axial, 17 'Gametophyte leaves' / absent present, 18 'Archegonium' / absent present, 19 'Anteridium morphology' / naked jacket, 20 'Antheridium development' / exogenous endogenous, 21 'Archegonium position' / superficial sunken, 22 'Gametangia distribution' / nonterminal terminal, 23 'Paraphyses' / absent present, 24 'Rhizoid cellularity' / unicellular multicellular, 25 'Protonema type' / nonfilamentous filamentous, 26 'Oil bodies' / absent present, 27 'Mucilage clefts' / absent present, 28 'Pseudopodium' / absent present, 29 'Pyrenoids' / present absent, 30 'Bicentriolar centrosomes' / orthogonal bicentriolar peripheral, 31 'Orientation of lamellae in multilayered structure' / '90 degrees' '40-45 degrees', 32 'Preprophase bands in mitosis' / absent present, 33 'Lunularic acid' / absent present, 34 'D-methionine' / 'not distinguished' distinguished ; matrix Andreaea 1000010101011101111001111001?11??1 Andreaeobryum 1010010101011101111001111000?????? Anthoceros 100010010111011001111000001001??01 Chara 00????????01?0?1000000000000?000?? Coleochaete 00????????0000?00000000000000000?? Equisetum 1111001100011110011010000000?21?01 Haplomitrium 10000001001101011110010?0100111?1? Horneophyton 11110?01?101?11101??1100??00?????? Huperzia 1111001100011111011011100000?????1 Monoclea 1000000100110100011000000100????1? Notothylas 10001001011101100111100000100111?? Polytrichum 1010010111011111111001111000?11?01 Sphaerocarpos 1000000100110100011000000100111?10 Sphagnum 1000000111011111111001010001111101 Takakia 101001010101?1011110010??000111??? ; end; tv-0.5/ncl-2.0/data/LPMolecular.nex0000775000076400007640000011567207236527360013650 00000000000000#NEXUS [MacClade 3.01 registered to Brent D. Mishler, Duke University] [**The final matrix LP-MOLEC used in the Ann .Mo. Bot. 81: 451-483 (Mishler et al. 1994) green plant synthesis paper.] [This data set was realigned in reference to these land plants only, thus it represents a different data set than 'rDNAmastr'] BEGIN DATA; DIMENSIONS NTAX=16 NCHAR=2148; FORMAT DATATYPE=DNA MISSING=? GAP=- ; OPTIONS MSTAXA=UNCERTAIN ; MATRIX [ 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480 490 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800 810 820 830 840 850 860 870 880 890 900 910 920 930 940 950 960 970 980 990 1000 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100 1110 1120 1130 1140 1150 1160 1170 1180 1190 1200 1210 1220 1230 1240 1250 1260 1270 1280 1290 1300 1310 1320 1330 1340 1350 1360 1370 1380 1390 1400 1410 1420 1430 1440 1450 1460 1470 1480 1490 1500 1510 1520 1530 1540 1550 1560 1570 1580 1590 1600 1610 1620 1630 1640 1650 1660 1670 1680 1690 1700 1710 1720 1730 1740 1750 1760 1770 1780 1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000 2010 2020 2030 2040 2050 2060 2070 2080 2090 2100 2110 2120 2130 2140 ] [ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] Glycine_max TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTGTAAGTATGAACTAATTCA-GACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTGTTTGATGGTATC-TACTACTCGGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCAACAAACCCCGACTTC-TGGAAGGGATGCATTTATTAGATAAAAGGTCAACACAGGCTCTGCCTGTGCT-TTGATGATTCATGATAACTCGTCGGATCGCACGGCCTTTGTGCCGGCGACGCATCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGTGGCCTACCATGGTGGTGACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCACATCCAAGGAAGGCAGCAGGCGCGCAAATTACCCAATCCTGACACGGGGAGGTAGTGACAATAAATAACAATACCGGGCTC-ATTGAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGATGGATCCATTGAAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGACCTTGGGTTGGGTCGATC-GGTCCGCC-TCC--GTGTGCACCGGTC-GGCT--GTCCCTTCTGCCGGCGATGCG---CTCCTGTCCTTAACTGGCCGGG-TCGTGCC-TCC-GGTGCTGTTACTTTGAAGAAATTAGAGTGCTCAAAGCAAGC-CTACGCTCTGTATACATTAGCATGGGATAACACCACAGGATTCTGATCCTATTGTGTTGGCCTTCGGGATCGGA-GTAATGATTAACAGGGACAGTCGGGGGCATTCGTATTTCATAGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACAACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATCAGATACCGTCCTAGTCTCAACCATAAACGATGCCGA-CCAGGGATCAGCGGATGTTGCTTTTAGGACTCCGCTGGCACCTTAT-GAGAAATCGAAGTCTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGAGTGGAGCCTGCGGCT-AATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACATAGTAAGG-TTGACAGACTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCCTTCTTAGTTGGTGGAGCGATTTGTCTGGTTAATTCCGTTAACCAACGAGACCTCAGCCTGCTAAATAGCTAT--------------------------AGCTTCTTAGAGGGACTAT-GGCCGCTTAGGCCACGGAAGTTTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGTATTCAACGAGTCTATAGCCTTGGCCGACAGGTCCGGGTAATCTTTG-AAATTTCATCGTGATGGGGATAGATCATTGCAATTGTTGGTCTTCAACGAGGAATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTACGTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCCGGTGAAGTGTTCGGATTGCGGT-------------------------------GAGAAGTCCACTGAACCTTATCATTTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG???????????????????????????????????GACCCTGAT?CTTCT?TGAAGGGTTC?GAGTGAGAGCATACCTGTCGGGACCCGAAAGATGGTGAACT?TGCCTGAGCGGGGCGAAGCCAGAGGAAACTCTGGTGGAGGCCC?GCAGCGATACTGACGTGCAAATCG?TTCGTCTGACTTGGGTATAGGGGCGAAAGACTAATCGAACCGTGCGGGGGCCCCGGAAAGAGTTATCTTTTCTGTTTAACA?GCCTGCCCACCCTGGAAA?GCCTCAGCCGGAGGTAGGGTCCAGCGGCTGGA?AGAGCACCGCACGTCGCGTGGTGTCCGGTG--CCCCCGGCGGCCCTTGA [2059] Oryza_sativa TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTGCAAGTATGAACTAATTC-GAACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTGTTTGATGGTACG-TGCTACTCGGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCAACAAACCCCGACTTCCGGG-AGGGGCGCATTTATTAGATAAAAGGCTGACGCGGGCTCCGCCCGCGAT-CCGATGATTCATGATAACTCGACGGATCGCACGGCCCTCGTGCCGGCGACGCATCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGGGGCCTACCATGGTGGTGACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCACATCCAAGGAAGGCAGCAGGCGCGCAAATTACCCAATCCTGACACGGGGAGGTAGTGACAATAAATAACAATACCGGGCGCTTTAGTGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGACCTTGGGCGCGGCCGGGCCGGTCCGCC-TCACGGCAGGCACCGACCTGCT--CGACCCTTCTGCCGGCGATGCG---CTCCTGGCCTTAACTGGCCGGGTTCGTGCC-TCC-GGCGCCGTTACTTTGAAGAAATTAGAGTGCTCAAAGCAAGC-CATCGCTCTGGATACATTAGCATGGGATAACATCATAGGATTCCGGTCCTATTGTGTTGGCCTTCGGGATCGGA-GTAATGATTAATAGGGACAGTCGGGGGCATTCGTATTTCATAGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACAACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATCAGATACCGTCCTAGTCTCAACCATAAACGATGCCGA-CCAGGGATCGGCGGATGTTGCTTATAGGACTCCGCCGGCACCTTAT-GAGAAATCAAAGTCTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGGGCCTGCGGCTTAATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACATAGCAAGGATTGACAGACTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGAGCGATTTGTCTGGTTAATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGCTATGCGGAGCC----ATCCCTCCGCAGCTAGCTTCTTAGAGGGACTAT-GGCCGTTTAGGCCACGGAAGTTTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG--CGCACGCGCGCTACACTGATGTATCCAACGAGTATATAGCCTGGTCCGACAGGCCCGGGTAATCTTGGGAAATTTCATCGTGATGGGGATAGATCATTGCAATTGTTGGTCTTCAACGAGGAATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTACGTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCCGGTGAAGTGTTCGGATCGCGGCGACGGGGGCGGTTCGCCGCCCCCGACGTCGCGAGAAGTCCATTGAACCTTATCATTTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG???????????????????????GCACCGCTGGCCGACCCTGAT?CTTCTGTGAAGGGTTC?GAGTTGGAGCACGCCTGTCGGGACCCGAAAGATGGTGAACTATGCCTGAGCGGGGCGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GAAGCGATACTGACGTGCAAATCG?TTCGTCTGACTTGGGTATAGGGGCGAAAGACTAATCGAACCATGCGGGGGCCTCGGG?AGAGTT?TCTTTTCTGCTTAAC?GGCCCGCCAAC?CTGGAAACGGTTCAGCCGGAGGTAGGGTCCAGCGGC?GGAGAGA???GCACACGTCGCGCGGTGTCCGGTG--CCCCCGGCGGCCCTTGA [2119] Zamia_pumila TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTGTCAGTATGAACTATTTT-GGACGGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTCTTTGATGGTACTCTGCTACACGGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCACCAAATCCCGACTTTTTG-AAGGGACGCATCTATTAGATAAAAGGCCGATGCGGGCTTTGCCCGGCGT-TTGGTGAATCATGATACCTTGATGGATTGCATGGCCCTCGAGCCGGCGACGCTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGCAGGATAGAGGCCTACCATGGTGGTGACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCCGAGAAACGGCTACCACATCCAAGGAAGGCAGCAGGCGCGCAAATTACCCAATCCTGACACGGGGAGGTAGTGACAATAAATAACAATACTGGGCTCATC-GAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATCTTGGGACGGCCCGGCC-GGTCCGCT-TTTTTGGGTGTGCACCGGCCGTTTCGTCCCTTTTGTTGGCGGCGCG---CACCTGGCCTTAACTGTCTGGG-TCGCGGT-TCC--ACGCTGTTACTTTGAAAAAATTAGAGTGCTCAAAGCAAGC-TTATGCTCTGAATACATTAGCATGGAATAACGGTATAGGATTCTGGTCCTATTGCGTTGGCCTTCGGGACCGGA-GTAATGATTAACAGGGACGGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACCACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATCAGATACCGTCCTAGTCTCAACCATAAACGATGCCGA-CCAGGGATCGGCGGATGTTGCTCTAAGGACTCCGCCGGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGAGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACATAGCAAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGAGCGATTTGTCTGGTTAATTCCGTTAACGAACGAGACCTCGGCCTGCTAACTAGCTACGCGGAGGG----TTTCTTTCGTGGCCAGCTTCTTAGAGGGACTAT-GGCCGTTTAGGCCATGGAAGTTTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGTATTCAACGAGTCTATAACCTGGGCCGGGAGGTCCGGGAAATCTGGCGAAATTTCATCGTGATGGGGATAGATCATTGCAATTATTGATCTTCAACGAGGAATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTACGTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGATCCGGTGAAGTGTTCGGATCGTGCCGACGACGGCGGTTCGCTGGGCGCGACGTCGCGAGAAGTTCATTGAACCTTATCATTTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????-????????????????? [2120] Psilotum_n ???????????????????????????????????????????????????????????????????GCGAATGGCTCATTAAATCAGTTATAGTTTCTTTGATGGTACCTTGCTACTCGGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCACCAACTCCCGACTTC-CGG-AGGGACGCATTTATTAGATAAAAGGCCGATGCGGGCTT-GCCCGGTTATGC-GT-ATTCATGATAACTCTGCGAATCGCACGGCC????????????????????????????????????????????????????????????????????????TGGTGACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCACATCCAAGGAAGGCAGCAGGCGCGCAAATTACCCAATCC-GAC-CGGGGAGGTAGTGACAATAAATAA-AATACTGGGCTTTTCAAAGTCTGGTAATTGGAATGAGTACAATCTAAACCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAGAACGAAAGTTGGG--CTCGAAGACGATCAGATACCGTCCTAGTCTCAACCATAAACGATGCCGA-CTAGG--TC-GCGGATGTTACCTTGATGACTCCGCCGGCACCTTAT--AGAAATC-AAGTCTTTGGGTTCCGGGGGGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGATTGACAGATTGAGAGCTCTTTCTTGGTTCTATGGGTGGT---G-ATGGCCGTT---AGTTGGTGGAG-G-TTTGTCTGGTTAATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACGCGAAGGA----TCCTCTTCGTGGCCAACTT-TTAGAGGGACTAT-GGCCGCCTAGGCCATGGA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GTCTTCAAC-A-GAATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTACGTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCCGGTGAAGTTTTCGGATTGCGGCGAGCGGTCCGCCGGCACGTTGT---------GAGAAGTTCATTAAACCTTATCATTTAGAGGAA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????-????????????????? [2103] Equisetum_ar ???????????????????????????????????????????????????????????????????GCGAATGGCTGATTAAATCAGTTATAGTTTCTTTGATGGTACCTTGCTACTCGGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCACCAACTCCCGACTTC-TGG--GGGA-GCATTTATTAGATAAAAGGCCGATGCGGGCTGTGCCCGGTAA----CGGATTC--GATAACTTCCCGGATCGCACGGCCT????ACGGGTGA????????????????????????????????????????????????????????????????????????CGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCACATCCAAGGAAGGCAGCGGGCGCGCAAATTACCCAATCC-GACACGGGGAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAGAACGAAAGTTGG---CTCGAAGAC-ATCA?ATACCGTCCTAGTCTCAACCATAAACGA-GC?GA-CTAGGGATT--CGGATGTTACTTCAATGACTCTGCCGGCACCTTAT-GAGAAATCAAAGTCTTTGGGTTCC----GGA-T??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTAGTGCATGGCCGTTCTTAGTTGGTGGAGTGATTTGTCTGGTTAATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACGCGAAGAC----TTGTCTTCGTGGCCAACTTCTTAGAGGGACTAT-GGCCGTCTAGGCCATGGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TCTTCAACTAGGAATTCCTAGTAAGC-CGAGTCATCAGCTCGCGTTGACTA-GTCCCTGCCCTTTGTACACACTGCCCGTCGCTCCTACCGATTGAATGGTCCGGTGAAGTTTTCGGATT-CGGCGACGCTGGCGGT-CGCCGGCGACGTTGT---GAGAAGTTCATTGAACCTTACCATTTAGAG?????????????????????????????????????????????????????GCACCATCGACCGACCGTGAT?CTTCTGTGAAAGGTTT?GAGTGAGAGCATACCTGCTGGGACCC?AAAGATGGTGAACTATGCCTGAGCAGGGCGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTTGGGTATAGGGGCGAAAGACTAATCGAACCATGCGGGGGCCCTGGGAAGAGTTCTCTTTTCTTTTTAACA?ACTTGCCCACCCTGAAATCGGATCAACCGGAGATAGGGTCCAGCGGTTGGT?AAAGCA?CGCAGGTC?TGCGGTGTCCGGTG--CCCCCGGCGGCCCTTGA [2108] Atrichum_angus ??????????????????????????????????????????????????????????????????????????????ATTAAATCAGTTATAGTTTCTTT-ATGGTACCTTGCTACTCGGATAACCGTAGTA--TTCTA-AGCTAATACGTGCACAAACTCCCGACCTC-TGGAAGGG-CGT-TTTATTAGATAAAAGGCCGATGC-GGCTT-GCCCGGTAT-TCGGTGACTCA-GATAACTCGTCGAATCGCACGGCCTTA?????????????????????????????????????????????????????????????????????????????????????AGAATT----TTCGATTCCGGA-AGGGAGCCTGAGAA-CGGCTACCACATCCA---AAGGCAG-?-??-?-?--ATT-CCCAATCC-GAC--GGGGAGGTAGT-ACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAA--A??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTTCTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAG???GAAAGTTGGGGGCTCGAAGACGATCAGATACCGTCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTTGCGGGTGTTAATTTGATGACCCCG-AAGCACCTTAT-GAGAAATC-AAGTATTTGGGTTCCGGGGGGAGTATG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCTTTCTTGATTCTATGGGTGGT-GTGCATGGCCGTT-TT-GTTGGTGGAGTGATTTGTCTGGTTAATTCCGTTAAC-AACGAGACCTCAGCCTGCTAACTAGTTACACGAAGAA----TC-TCTTTGTGGCCAACTT-TTAGAGGGACTATTGGC-GTCT-GCCAATGGAA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ATAGATCATTGC-ATTATTGATCTTCAA--A-GAATTCC-AGTAAGCGCGAGTCATCAGCTCGCGTTGATTACGTCCCTGCCCTTTGTACACACC-CCCGTCGCTCCTACCGATTGAATGGTCCGGTGAAGTTTTCGGATCG-GGTGATCGGGTT----G-GTTCGG?GACTTGT--GAGAA-TTCATTAAA--TTATCATTTAGAGGAA??????????????????????????????????????????????????GCAC?AT?GACCGACCGTGAT?CTTCTGTGAAAGGTTT?GAGTGTGAGC?T?CCTGCTGGGACCC??AAGATGGTGAACTATGCCTGAGC?AGGCGAAGCCAGAGGAAACTCTGGTGGAGGCTC?G?AGC?ATACTGACGTGCAAATCG?TTCGTCAGACTTGGG?ATA????C?AAAGACT?ATCGAACCATGCGAGGGCCCCGGGAAGAGTTCTCTTTTCT?TTTAACA?GCCTGCCT?CCCTGGAATCGGATTACC?GGAGATAGGGTCCAGCGGCTGGT?AAAGCACCGCAC?TCTTGCGG?GTCCGG-G-GCCCC?GGCGGCCCGTGA [2080] Fissidens_taxi ???????????????????????????????????????????????????????????????????????????????????????GTTATAGTTTCTTT-ATGGTACCTTGCTACTCGGATAACCGTAGTAA-TTCTA-AGCTAATACGTGCACAAACTCC-GACTCG?TGGA-GGGACG-ATTTATTAGATAAAAGGC-GAT-C-------GCC-GGTGTT---GCGAATCA-GATAAC?AGTCGAATCGACCC??????????????????????????????????????????????????????????????????????????????TGACGGGTGACGGA?AATTAGGGTTCGATTCCG-A-A-GGAGCCTGAG---CGGCTACCACATCC--GGAAGGCAGC--GCGCGC--ATTACCCAATCC-GA---GGGGAGGTAGT-ACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAA--A???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCGAAGACGATCAGATACCGTCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGTGTTGATTTGATGACCCCGCCAGCACCTTGA-GAGAAAT--AAGTTTTTGGGTTCCGGGGGGAGTATG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCTTTCTTGATTCTATGGGTG-T-GTGCATGGCCGTT-TTAGTTGGTGGAGTGATTTGTCTGGTTAATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACGCGAAGGATTTCTCTCCTTGGCGGCCAACTTCTTAGAGGGACTATCGGC-GTCTAGCCGATGGAA?TTT?A????????????????????????????????????????????????????????????????????????????????????????????????????AATCTTCTGAAATTTCATCGTGAT--GGATAGATCATTGCAATTATTGATCTTCAAC-A-GAATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTACGTCCCTGCCCTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATGGTCCGGTGAAGTTTTCGGATTGCG?CGAC-?-GGGTTCG----CCGCGCGCTGT---GAGAAGTTCATTAAACCTTATCATTTAGA--A??????????????????????????????????????????????????????????????????????????TTCTGTGAAAGGTTC?GAGTGTGAGCATACCTGTTGGGAC????AAGATGGTGAACTAT???TGA???AGGCGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG??T?GT?AGACTTGGGTATAGGGGC???AGACTAATCGAAC?AT?CG?GGGCCCCTGGAAGAGTTCTCTTTTCT?TTTAAC?GGCCTGCCT??CCTGGAATCGGATTACCCGGAGATAGGGTCCAGCGGCCGGT?AAAG???CGCACGTCTTGCGG?GTCAGGTG--CCCTCGGCGGCCCT?GA [2082] Plagiomnium_cu ????????????????????????????????TGTGTAAGTATAAACT-CTTTTGTACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTCTTTGATGGTACCTTGCTACTCGGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCACAAAATCCCGACTGG--G?AAGGGA?G-ATTTATTGGATAAAAGGCCGATGCGGGCTT-GCCCGGTTC-GCGG-GAC----GATAAC--GTCGAATCGCA-GGCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????GA-A-GGAGCCT-AG---CGGCTACCACATCC-AGGAAGGC--C----------ATTACCCAACTCCGA---GGGGAGGTAGTGACAATAAATAACAATACTGGGC--TTACGGGCCCG---ATTGG--TGAGTA?AATCT-AATCCCTTAA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCATTTGCCAAGGATGTTTTCGTTAATCAA-AA-GAAAGTTGGGGGCTCGAAGACGATCAGATACCGTCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGTGTTGATTCGATGACCCCGCCAGCACCTTAT-GAGAAATC--AGTTTTTGGGTTCCGGGGGGAGTATG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGAGCTCTTTCTTGGTTCTATGGGTGGT-GTGCATGGCCGTT-TTAGTTGGTGGAGTGATTTGTCTGGTTAATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACGCGAAGGATTTC-CTCCTTTGCGGCCAACTTC--AGAGGGACTATCGGC-GTC--GCCGATGGAAG?TTGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ATCATTGC-ATTATTGATCTTCAAC---GAATTCC-AGTAAGCGCGAGTCATCAGCTCG-GTTGACTAC-TCCCTGCCCTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATGGTCCGGTGAAGTTTTCGGATCGCG??A?C????GTTCGCCGC?GG?GACGTTGT---GAGAAG-TCATTAAACCTTATCATTTA-AG?????????????????????????????????????????????????????GCACCATCGACCGACCGTGAT?CTTCTGTGAAAGGTTT?GAGTGTGAGCACACATGTTGGGACCC???AGATGGTGAACTATGCCTGAGCAGGGCGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTTGGGTATAGGGGC?AAAGACTAATCGAACCATGCGAGGGCCCCTGGAAGAGTTCTCT?TTCT?TTT?AC?GGCCCGACGACCCTGGAATCGGTTCACCCGGAGATAGGGTCCAGCGGCCGGT?AAAGCACCGCACGTCTCGCGGTGTCAGGTG-GCCCTCGGCGGCCCGTGA [2074] Notothylas_bre ????????????????????????????????????????????????????????????????????????????????????????????????????????????CCTT-CTACTCGGATAAC-G-AGTAA-TTCTA-AGCTAA-ACGTGCAACAACTCCCGACT-C-TGGAAGG-A-G-ATTTATTAGATAAAAG---GATG---GCTT-GTCCCGTTT-A--CTGAATC-TGATAACTCCTCGAATCGCACGGCCCT???????????????????????????????????????????????????????????????????????????????????????????????GTTCGATTCCGGAGAGGGA--C-GAGAAACGGCTACCACATCC--?--AGGCAG---????----ATTACCCAATCC-GA---GGGGAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAA--A????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAAGTTGGGG-CTCGAAGACGATCAGATAC--TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGTGTTAATTAGATGACTCCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CA-GGCCGTT-TTAGTTGGTGGAGTGA-TTGTCTGGTTAATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACAC-AAGAA----CCTTCTTCGTGGCCAACTTCTTAGAGGGACTATTTGC-GTCTA-CGAATGGAA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGA-AGATCATTGC-ATTATTGATCTTCAAC-AGGAAT-CCT-GTAAGCGCGAGTCATCAGCTCGCGTT-ACTACGTCCCTGCCCTTTGTACACAC-GCC-GTCGCTCCTACCGATTGAATGGTCCGGTGAAGTTTTCGGATTGCGGCGACACCGGGTCACCG-CCGGGGACGTT-T--GA-AA-TTCATTAAACCTTATCATTTA?A????????????????????????????????????????????????????????????????????CC?TGAT?CTTCTGTGA?AGGTTT?GAGTGTGAGCATACCTGCTGGGACCC????GATGGTGA?CTATGCCTGAGCAGGGCGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGA?GTGCAAATCG?TTCGTCAGACTTGGGTATAGGGGCGAAAG?CTAATCG?????????????CCCCGGG?AGAGTTCTC?TTTCTTTTTAACA?GCCTGCCTACCCTGAAATCGGATTACCCGGAGATAGGGTCCAGCGGCTGGT?AAAGCACCACACG?CTTGCGGTGTCCGGTG-?CCC??GGCGGCCCGTG? [2076] Phaeoceros_lae ?????????????????????????????????????????????????????????????????????????????????????????????????????GATGGTACCTTGCTACTCGGATAACC--AGTAA-TTCTA-AGCTAAT-CGTGCAACAACTCCCGGCTTT-TGG-AGGG-TGT-TTT-TTAG-TAAAAG---GA-GCGG-CTT-GTCCCGGTTTACGGTGAA-CW-GATAACTCCTCGGATCGCACGGCCCT??????????????????????????????????????????????????????????????????????????????????ACGGA-AATTAGGGTTCGATTCCGGA-A-GGAGCCTGAGAAACGGCTACCACATCC-AG-AAGGCA-CA--CGCGC--ATTACCCAATCC-GAC-CGGGGAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGA-TACAATCTAAATCCCTTAAC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GAAAGTTGGG--CTCGAAGACGAT-AG-TACCGTCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGATGTTAATTAGATGACTCCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTAT?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????T--TGCATGGCCGTT-TTAGTTGGTGGAGTGATTTGTCTGGTTAATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACACGAAGAA----CCTTCTTCGTGGCCAACTTCTTAGAGGGACTATTTGC-GTCTAGCGAATGGAA???????????????????????????????????????????????????????????????????????????????????????????????????????????ATCTTTG-AAATTTCATCGTGAT--GGATAGATCATTGCAATTATTGATCTT-AA----GAATT--TAGTAAGCGCGAGTCATCAGCTCG-GTTGACTA-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCCGGTGAAGTTTTCGGATTGCGGCGACA-CGGGT?ACC--GCCGGGACGTTGT--GAGAAG-TCATTAAACCTTATC-TTTAGAGGAA??????????????????????????????????????????????????GCACCATCGACCGACCATGAT?CTTCTGTGAAAGGTTT??AGTGTGA??ATACCTGCTGGGACCC??AAGATGGTGAACTATGCCTGAGTCAGGCGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGA?GTGC?AATCG?TTCGTCAGACTTGGGTATA?GGGC???AGACTAATCGAACCATGCG?GGGCCCCGGG?AGAGTTCTCTTTTCT?TTTAACA???CTGCCTGCCCTGAAATCGGATTACCCGGA?ATAGGGTCCAGCGGCTGGT?AAAGCACCACACGTCTTGCGGTGTCCGGTG-GCCCCTGGCGGCCCGTGA [2082] Porella_pi ??????????????????????????????????????????????????????????????????????????????????????????????????TTTGATGGTACCTTGCTACTCGGATAACC-TAGTAA-TTCTAGAGCTAATACGTGCACCAACTCCCGACTTC-TGGAAGGG-CGTATTTATTAGATAAAAGACCGATGCGGGC-T-GCCCGGTGTTGCGGTGAATCATGATAACTCGTCGAATCGCACGGCC???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAACGGCTACCACATCCAAGG-AGGCAGCCGG-GCG---ATTACCCAATACCGACACAGG?AGGTAGTGACAATAAATAACAATACTGGGCTTTACCAAGTCTGGTAATTGGAATGAGTACAATCTAAATCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AA?AAC?AAAGTTGGG--CTCGAA-ACGAT-AGATACCGTCCTAGTCTCAACCATAAACGATGCCGAGCTAGGGATTG--GGATGTTAATTTGATGACTCCGC-AGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CC-----TAGTTGGTGGAG-G--TTGTCTGGTTAATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACACGAAGAA----TCTTCTTTGTGGCCAACTT-TTAGAGGGACTATT--C-GTCTAGCCAATGGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TCTTCAAC-AGGAAT-CCTAGTAAGC-CGAGTCATCAGCTCGCGTTGACTACGTCCCTGCCCTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATGGTCC-GTGAAGTTTTCGGATTGCGGCGACGCGGCGGTTCGCTGCCGGGACGTTGT--GAGAAGTTTATTAAACCTTATCATTTA?A??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2105] Conocephal_con ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ACGTGCACC-AGGCTCGAC---?TGGAAGGG--G--TTTTTTAGATAAAAGACCGATGGGGGTGCTGCC-GGTGATTC-GGGA-TC-TGATAACTCGACGAATCGCACGGCC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????GAGCCTGAGAAACAGCTACCACATCCAAGGA-GGCAGCAGGCGCG---ATTACCCAATCCCGACACGGGG-GGT-GTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGAACAATCTAAATC???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAGGATGTTT--ATTAA--AA-AA-GAAA-TTG-------GAAGACGATCAGATACC--CCTAGTCTCAACCATAAACGATGCCGA-CTAG--ATC--CGGATGT?CTTTTGATGACTCCGCCGGCACCTCCA-GAGAAATCAAA-TTTTTGGGTTCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCTTTCTT-ATTCTATGGGT--T--TGCAT---CGTTCTTAGTTGGTGGAGTGATTTGTCTGGTTAATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTA-CTACGCGAGTCCATTT--TTTGTCCTGCGCAGCTT-TTAGAGGGACT---GG---TC--GCC-ACGGAA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TAGATCATT?C?ATT?TTGATCTTGAA-----AATTCC--GTA--CGCGAGTC-T----TCGCGCTGATT-CGTCCCTGCCCTTTGT-C-C-CCGCCC--CGCTCCT-CCGATTGAATGGTCCGGTGAAGAGTTCGGA-CGCGGCGACGTGC--?GTCGCCGCCGGGACGTTGT--GAGAAGTTCTTT-AACCTTATCA-TTAGA?????????????????????????????????????????????????????????CCAGCGACC??????????????TGCGAAAGGTT??GAGT??GAGCGTGCCTGTTGGGACCC??AAGATGGTGA?CTATGC?TGAGCAGG?CGAAGCCGGAGGAAACTCCGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTC?TCAGACTCGGG?ATA??????AAAGACT?ATCGAACCATGCGG??GCCCCGGGAAGAGTTTTCTTTTCT?TTT?AC?GACCTGCC?GCCCTGGAATCGCTTTATGCGGAGATAGGGCCCAGCGGTCGGT?AAAGCGTCGCAAGTCTTGCGG?GTCCGGTGCGCCCCCGACGGTCC??GA [2058] Asterella_tene ?????????????????????????????????????????????????????????CTGTGAAACTGCGAATGGCTC-TTAAATC-GTTATAGTTTCTTTGATGGTGCCTT-CTACTCGGATAACCG-AGTAA-TTCTAGAGCTAATACGTGCACCAACGCCCGACTTTCCGGAAGGG-TGT-TTTATTAGATAAAAGACCGATG---GCTT-GCCC-GGTGATT-CGGAATCATGATAACTCGACGAATCGCACGGCCT??????????????????????????????????????????????????????????????????????????????????????????????????????????????AGGGAGCCTGAG?AACGGCTACCACATCC-AG-AAGGCAG-A---GC-C--ATTACCCAATCC-GAC-----GAGG-AGTGACAATAAATAACAATACTGGGCT-TTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTTCTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATCAGATACCGTCCTAGTCTCAACCATAAACGATGCCGA-CTAGG-ATCG--GGATGT?GATTAGATGACTCCGCCGGCACCTCCATGAGAAATCAAAGTTTTTGGGTTCCGGGGGGAG-ATG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGGTGG-GTGATTTGTCTGGTTAATTCCGTTAACGAAGGAGACCTCAGCCTGCTAACTA-CTACGCGGGGGT----WCTCCCCTGCGGCCAGCTT-TTAGAGGGACTGTCGGC-GTCTAGCCGA-GGA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGTCATCAGCTCGCGTTGACTACGTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCTACCGATTGAATGGTCCGGTGA-GAGTTCGGATCGCGGCGACGCGCG-GTTCGCCGCCGGGACGTTG---GA-AAGTTCTTTAAACCTTATCA????????????????????????????????????????????????????????????T?AACATCGACCGACCATGAT?CTTCTGTGAAAGGTTC?G?GT?GGAGCATGCCTGTTGGGACCC??AAGATGGTGAACTATGC?TGAGCAGGGCGAAGTCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTCGGG?ATA??????AAAGACTAATCGAACCATGCGGAGGCCCCGGGAAGAGTTTTCTTTTCT??TT?AC?GACC?GCCGGCCCTGAAATCGCATTACGCGGAGATAGGGCCCAGCGGTCGGC?AAAGCGTCGCA?GTCTTGCGG?GTCCGGTG?GCCCCCGACGGCCCC?GA [2097] Riccia ?????????????????????????????????????????????????????????????????????????????????????????????????????????????TTTACTACTCGGATAACC-TAGTAA-TTCTAG-GCTAATACGTGCACCAACGCCCGACTTCGCGGAAGGGCTGTATTTATTGGATAAAAGGCCGATG-GGGCTTGCCCCGGTGTTT-CGTGAATCATGATAACTCGACGAATCGCACGGCCCCC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CGCAAATTACCCA-TCC-GAC-----GA--TAGTGACAATAAATAACAATAGTGGGCT-TTACAA-TC--GTAATTGGAA--AGTACAATCTAAATCCCTTA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAAGCATTTGCCAAGGATGTTTTCATTAAT-AACAA--AAAGTTGG?GGCTCGAAGACGATCAGATACC-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATCGGCGGATGT?GATTTGATGACTCCGCCGGCACCTCCT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTAT??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ATTGAGAGCTCTTTCTTGATTCTATGGGT--T--TGCATGGCCG-TCTTAGTTGGTGGAGTGATTTGTCTGGTTAATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGCTACGCGGGGGT----TCTCCC-TGCGGCCAGCTT---AGAGGGACT--CGG---TCTAGCCGACGGAA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TTGC?ATTATTGATCTTCAAC-A-GAATTCC-AGTAA---CGAGTCGAACAGTCGCGCTGACTACGTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCCGGTGA-GAGTTCGGATCG---CGAC------GTTCGCCGC-GGGACGTTGT--GAGAAGTTCTTTAAACCTTATC-TTTAGA???????????????????????????????????????????????????????????????????????????????????A?AAGGTTCGGAGTAAGAGCATGCCT?TTGGGACCC??AAGATGGTGAACTAT???TGAG?A?GGCGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTTGGG?ATAG??G??AAAGA?TAATCGAACCAT??????GCCCCGGGAAGAGTTTTCTT?TCTT?TT?AC?GACC?GCC?GCC?TG?AATCGCA?TACGC?GAGATAGGGCCCA?CGGTCGGC?AAAGCGTCGCA??TCT??CGGCGTCCGGTGC?????????????????? [2084] Klebsormid_fla ????????????????????????????????????????????????????????????????????????????????????????????????????????????CCTTA-TACTCGGATAACCGTAGTAAGTTCTA-AGCTAATACGTGCACCAAATCCCGACTTC-TGGAAG?ACGTGATTTATTAGATAAAAGGCCAATGCGGGCTT--CCCGGTATTGCGGTGAATCATGATAACTCGTCGAATCGCACGGCCTTTGCGCTG??????????????????????????????????????????????????????????????????TAACGGGTGACGGAGAATT?GGGTTCGATTCCGGAGA?GGAGCCTGAGAAACGGCTACCACATCCAAGGAAGGCAGCAGGCGCGC--ATT-CCCAATCCTG-T-CAGGGAGGTAGTGAC-ATAAATAACAATGCTGGGCTTTTCAAAGTCTGGCAATTGGAATG??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAGGATGTTTTCATTAAT---GA--GAAAGTTGGGGGCTCGAAGACGATCAGATACCGTCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGATGTTAATTTGATGACTCCGCCAGCACCTTAT-GAGAAATC--AGTTTTTGGGTTCCGGGGGGA-TATGGTC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AACGAACGAGACCTCAGCCTGCTAACTAGTTACACGGAGAT----TCTTCTCCGTGGCCAACTTCTTAGAGGGACT??????????????????GGAA?TTTGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TCGCGTTGATTTAGTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCTACCGATTGAATGATCCGGTGAAGTTTTCGGATTGCGGCTACTGGTCCGCCGCCGAAGAAGCTGTGAG--GCAAGGTTCATTAAACCTTATCATTTAGAGGA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGATGGTGAACTATGCCTGAGGCAGGCGAAGCCAGAGGAAACTCTGGTGGAGGCTC?G?A?CGATACTGACGTGCAAATCG?TTCGTCAG?CTTGGG??TA??GCGGAAAGACTAATCGAACCAT?????????????GAAGAGTTCTCTTTTCTTTTTAACAGTCC?GCCCACCCTGGAATCAGATTAACTGGAGATAGGGTCCAGCGACTGGG?AAAGCATCGCACGTCTCGCGGTGTCTGGTGCGCCCT?GACGGCCCTTGA [2120] Coleochaet_nit ????????????????????????????????????????????????????????????????????????TGGCTCATTAAATCAGTTATAGTTT-TTTGATGGTAGCC---TACTCGGATAACC-T-GTAA-TTCTAGAGCTATACCGTGC-CC--ATCC-GACTTC-TGGAAGG--GGTATTTGTTAGATAAAAGACCAAT----GCTC-GCCCGGTGTT-CGGTGAATC--GATAACTCCTCG?ATCGCACGGCCT??????????????????????????????????????????????????????????????????????????????????????????????????????????GGAGAGGGAGCCTGAGAAACGGCTACCACATCCAAGGA?GGCAG--GGCGCG--GATTACCCAATCCTGATACAGGGAGGTAG--ACAATAAATAACA-TACTGGGCTTTTA-AAGTCTGGT?ATTGGAATGAGTACAATCTAAATCTC????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CATTAATCAAGAA-GAAAGTTGGGGGCTCGAAGACGATCAGATACCGTCCTAGTCTCAACCATAAACGATGCCGACCTAGG-ATCAACGGATGTTAATTTAATGACTCCGCCAGCACCTTAT--AGAAA-CAAAGTTCTTGGGTTCC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AT--CCAGTTTTCGTTCW-GGAGTGATTTGTCTG-TTAATTC?G?TAACGAAGGAG?CCTCAGCCTGCTAACTAGGCTAACG---------TTTTGTTGGGAC---ACTTGTTAGAGGGACT??????????????????GGA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????G-TCTCGAACGA-GAATACCTAGTAAGCGCTCGTCATCAGCGTGCGCT-ACTACGTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCTACCGATAGAATGCTCCGGTGAAGCATTCGGATCGCCACCGGCGGGCAACTCCGGAGACGGCATG------AGAA-TT-GTTGAACCTTATCGTTTAGAGGA????????????????????????????????????????????????????CACCACGCGCCGATCC???????????GGAAGGGTTC?GAGCTGAGA?A?GTATGTTGGGACCC???AGATGGTGAACTATGCCTGA??AGG?CGAAGCCAGAGGAAACTCTGGTGGAAGATC?GCAGC?ATACTGACGTGCAAATCG?TTCGTCGGACTTG?GTATA????C?AAAGACT?ATC?AACCATGCGGGG?CTCCGGG?AGAGTTTT?TTTTCTTTTTGACA?GTC?GAGCGCCCTGGAATTGATT?C?CGGCG?GAGGGTGC?GAAAGCTGGC?AGAGCG-CGCACTGGT??CGGTGTC?GGTG?AC?CCG??TT?CCCTAGA [2084] ; END; BEGIN CODONS; GENCODE UNIVNUC ; END; BEGIN ASSUMPTIONS; OPTIONS DEFTYPE=unord PolyTcount=MINSTEPS ; EXSET * POOR = 1-32 221-229 261-335 524-901 1123-1230 1360-1382 1422-1527 1702-1732 1766-1815; END; BEGIN MACCLADE; v 3.0 -1474214696 0100&/0 0 0 END; tv-0.5/ncl-2.0/data/characters.ref.txt0000775000076400007640000001664507236527354014413 00000000000000 *************************************************** * This NEXUS file is designed to test the NCL by * * presenting it with several different variants * * of the CHARACTERS block. After each variant, * * a special 'showall' comment directs the nexus * * reader to spit out the contents of all blocks * * currently stored. The file reference.txt holds * * the output expected (use the DOS command fc or * * the UNIX command diff to compare your output to * * reference.txt to see if your implementation is * * working correctly. * *************************************************** Reading "TAXA" block... Finished with "TAXA" block. ************* * Standard * ************* Reading "CHARACTERS" block... Finished with "CHARACTERS" block. ********** Contents of the TAXA block ********** TAXA block contains 6 taxa 1 P. fimbriata 2 P. robusta 3 P. americana 4 P. myriophylla 5 P. polygama 6 P. macrophylla ********** Contents of the CHARACTERS block ********** CHARACTERS block contains 6 taxa and 45 characters Data type is "DNA" Ignoring case Data matrix entries are expected to be single symbols Taxon labels are expected on left side of matrix Matrix neither transposed nor interleaved Missing data symbol is '?' No match character specified Gap character specified is '-' Valid symbols are: ACGT Equate macros in effect: B = {CGT} D = {AGT} H = {ACT} K = {GT} M = {AC} N = {ACGT} R = {AG} S = {CG} V = {ACG} W = {AT} X = {ACGT} Y = {CT} No characters were eliminated The following characters have been excluded: (no characters excluded) The following taxa have been deleted: (no taxa deleted) Data matrix: P. fimbriata ACCTCGGCTTAACGAACCTCGGCTTAACGAACCTCGGCTTAACGA P. robusta ACCTCGGCTTAACCAACCTCGGCTTAACGAACCTCGGCTTAACGA P. americana ACGTCGCTTTCA---ACGTCGCTTTCACCAACGTCGCTTTCACCA P. myriophylla ACGTCGCTTTCA---ACGTCGCTTTCACCAACGTC?CTTTCACCA P. polygama ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTC?CTTTCACCA P. macrophylla ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTCGCTTTCACCA ********** * Tokens * ********** Reading "CHARACTERS" block... Finished with "CHARACTERS" block. ********** Contents of the TAXA block ********** TAXA block contains 6 taxa 1 P. fimbriata 2 P. robusta 3 P. americana 4 P. myriophylla 5 P. polygama 6 P. macrophylla ********** Contents of the CHARACTERS block ********** CHARACTERS block contains 6 taxa and 3 characters Data type is "standard" Ignoring case Multicharacter tokens allowed in data matrix Taxon labels are expected on left side of matrix Character and character state labels: 1 leaf margins entire fimbriate 2 flower color white to cream crimson 3 breeding system hermaphroditic gynomonoecious gynodioecious dioecious Matrix neither transposed nor interleaved Missing data symbol is '?' No match character specified No gap character specified Valid symbols are: 01 No equate macros have been defined No characters were eliminated The following characters have been excluded: (no characters excluded) The following taxa have been deleted: (no taxa deleted) Data matrix: P. fimbriata fimbriate crimson gynomonoecious P. robusta fimbriate crimson gynomonoecious P. americana entire white to cream hermaphroditic P. myriophylla entire white to cream hermaphroditic P. polygama entire white to cream dioecious P. macrophylla entire crimson gynodioecious *********** * Symbols * *********** Reading "CHARACTERS" block... Finished with "CHARACTERS" block. ********** Contents of the TAXA block ********** TAXA block contains 6 taxa 1 P. fimbriata 2 P. robusta 3 P. americana 4 P. myriophylla 5 P. polygama 6 P. macrophylla ********** Contents of the CHARACTERS block ********** CHARACTERS block contains 6 taxa and 3 characters Data type is "standard" Ignoring case Data matrix entries are expected to be single symbols Taxon labels are expected on left side of matrix Character and character state labels: 1 leaf margins entire fimbriate 2 flower color white to cream crimson 3 breeding system hermaphroditic gynomonoecious gynodioecious dioecious Matrix neither transposed nor interleaved Missing data symbol is '?' No match character specified No gap character specified Valid symbols are: 0123 No equate macros have been defined No characters were eliminated The following characters have been excluded: (no characters excluded) The following taxa have been deleted: (no taxa deleted) Data matrix: P. fimbriata 111 P. robusta 111 P. americana 000 P. myriophylla 000 P. polygama 003 P. macrophylla 012 ***************************** * Interleaved, missing taxa * ***************************** Reading "CHARACTERS" block... Finished with "CHARACTERS" block. ********** Contents of the TAXA block ********** TAXA block contains 6 taxa 1 P. fimbriata 2 P. robusta 3 P. americana 4 P. myriophylla 5 P. polygama 6 P. macrophylla ********** Contents of the CHARACTERS block ********** CHARACTERS block contains 4 taxa and 15 characters Data type is "DNA" Ignoring case Data matrix entries are expected to be single symbols Taxon labels are expected on left side of matrix Matrix interleaved but not transposed Missing data symbol is '?' No match character specified No gap character specified Valid symbols are: ACGT Equate macros in effect: B = {CGT} D = {AGT} H = {ACT} K = {GT} M = {AC} N = {ACGT} R = {AG} S = {CG} V = {ACG} W = {AT} X = {ACGT} Y = {CT} No characters were eliminated The following characters have been excluded: (no characters excluded) The following taxa have been deleted: (no taxa deleted) Data matrix: P. fimbriata ACCTCGGCTTAACGA P. robusta ACCTCGGCTTAACCA P. americana ACGTCGCTCTCACCA P. myriophylla ACGTCGCTTTCACCA **************** ** transposed ** **************** Reading "CHARACTERS" block... Finished with "CHARACTERS" block. TAXA block contains 6 taxa 1 P. fimbriata 2 P. robusta 3 P. americana 4 P. myriophylla 5 P. polygama 6 P. macrophylla CHARACTERS block contains 6 taxa and 15 characters Data type is "DNA" Ignoring case Data matrix entries are expected to be single symbols Character labels are expected on left side of matrix Character and character state labels: 1 site 1 2 site 2 3 site 3 4 site 4 5 site 5 6 site 6 7 site 7 8 site 8 9 site 9 10 site 10 11 site 11 12 site 12 13 site 13 14 site 14 15 site 15 Matrix transposed but not interleaved Missing data symbol is '?' No match character specified No gap character specified Valid symbols are: ACGT Equate macros in effect: B = {CGT} D = {AGT} H = {ACT} K = {GT} M = {AC} N = {ACGT} R = {AG} S = {CG} V = {ACG} W = {AT} X = {ACGT} Y = {CT} No characters were eliminated The following characters have been excluded: (no characters excluded) The following taxa have been deleted: (no taxa deleted) Data matrix: P. fimbriata ACCTCGGCTTAACGA P. robusta ACCTCGGCTTAACCA P. americana ACGTCGCTCTCACCA P. myriophylla ACGTCGCTTTCACCA P. polygama ACCTCGCTTTCACGA P. macrophylla ACCTCGCTTTCACGA tv-0.5/ncl-2.0/data/GPMolecular.nex0000775000076400007640000042121107236527356013635 00000000000000#NEXUS [MacClade 3.01 registered to Equator, UCMP] BEGIN DATA; DIMENSIONS NTAX=61 NCHAR=2179; FORMAT DATATYPE=DNA MISSING=? GAP=- ; OPTIONS MSTAXA=UNCERTAIN ; MATRIX [ 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480 490 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800 810 820 830 840 850 860 870 880 890 900 910 920 930 940 950 960 970 980 990 1000 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100 1110 1120 1130 1140 1150 1160 1170 1180 1190 1200 1210 1220 1230 1240 1250 1260 1270 1280 1290 1300 1310 1320 1330 1340 1350 1360 1370 1380 1390 1400 1410 1420 1430 1440 1450 1460 1470 1480 1490 1500 1510 1520 1530 1540 1550 1560 1570 1580 1590 1600 1610 1620 1630 1640 1650 1660 1670 1680 1690 1700 1710 1720 1730 1740 1750 1760 1770 1780 1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000 2010 2020 2030 2040 2050 2060 2070 2080 2090 2100 2110 2120 2130 2140 2150 2160 2170 ] [ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] Emilian_huxleyi TCATATGCT-GTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAGCGACT--A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATGGTTTATTTGATGGTACCTTGCTACTT---GGATAACCGTAGTAA-TTCTAGAGCTAATACATGCAGGAGTTCCCGACTCAC--GG-AGGGATGTATTTATTAGATAAGAAACCAAACCGG---TCT-CCGGTTGC-GTGCTGAGTCATAATAACTGCTCGAATCGCACGGCTC-TACGCCGGCGATGGTTCATTCAAATTTCTGCCCTATCAGCTTTCGATGGTAGGATAGAGGCCTACCATGGCGTTAACGGGTAACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAATGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGTAAATTGCCCGAATCCTGACACAGGGAGGTAGTGACAAGAAATAACAATACAGGGCTATTT-TAGTCTTGTAATTGGAATGAGTACAATTTACATCTCTTCACGA-GGATCAATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTAAAGTTGTTGCAGTTAAAACGCTCGTAGTCGGATTTCGGGGCGGGCCGACC-GGTCTGCCGAT-GGGTATGCACTGGCCGGCGCGTCCTTCCACCCGGAGACCGCG------CCTACTCTTAACTGAGCGGGCGCGGGAGAC---GGGTCTTTTACTTTGAAAAAATCAGAGTGTTTCAAGCAGGCAGTCGCTCTTGCATGGATTAGCATGGGATAATGAAATAGGACTCTGGTGCTATTTTGTTGGTTTCGAACACCGGA-GTAATGATTAACAGGGACAGTCAGGGGCACTCGTATTCCGCCGAGAGAGGTGAAATTCTCAGACCAGCGGAAGACGAACCACTGCGAAAGCATTTGCCAGGGATGTTTTCACTGATCAAGAACGAAAGTTAGGGGATCGAAGACGATCAGATACCG-TCGTAGTCTTAACCATAAACCATGCCGA-CTAGGGATTGGAGGATGTTCCATTTGTGACTCCTTCAGCACCTTTC-GGGAAACTAAAGTCTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGAGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACATTGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCGATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCGCAGCCTGCTAAATAGCGACGCGAACCCTCCGTTCGCTGG------AGCTTCTTAGAGGGACAACTTGTCTTCAACAAGT----GGAAGTTCGCGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCACTCAACGAGTCTATCACCTTGACCGAGAGGTCCGGGTAATCTTTTGAAATTGCATCGTGATGGGGATAGATTATTGCAACTATTAATCTTCAACGAGGAATTCCTAGTAAGCGTGTGTCATCAGCGCACGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGATCCGGTGAGGCCCCCGGACTCGGGCGCCGCAGCTGGTTCTCCAGCCGCGACGCCGGGAAGCTGTCC-------GAACCTTATCATTTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAGGTGAACCTGCAGAAGGATCAAGC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2122] Anemonia_sulca TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAGC-ACTT--GTACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATCGTTTATTTGATTGTAC--GTTTACTACTTGGATAACCGTGGTAA-TTCTAGAGCTAATACATGCGAAGAGTCCCGACTTC--TGGAAGGGATGTATTTATTAGATTCAAAACCAATGCGGG-TTCTGCCCGGTGCTTTGGTGATTCATAGTAACTGATCGAATCGCATGGCCT-TGCGCTGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTGTCGATGGTAAGGTGTTGGCTTACCATGGTTACAACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACTCAGGGAGGTAGTGACAAGAACTAACAATACAGGGCTTTTGTAAGTCTTGTAATTGGAATGAGTACAACTTAAATCCTTTAACGA-GGATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTAAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGACTTCGGGGTGGCACGGCC-GGTCCGCCGCA-AGTGTGTCACTGGCCGGGCCGCTCTTCTTCGCAAAGACCGCGTGT------GCTCTTGACTGAGTGTGCGCGGGAGTT---GCGACGTTTACTTTGAAAAAATTAGAGTGTTCAAAGCAGGC--CAGCGCTTGAATACATAAGCATGGAATAATGGAATAGGACTTGGGTTCTATTTTGTTGGTTTCTGGAACCTGAAGTAATGATTAAGAGGGACAGTTGGGGGCATTCGTATTC-GTTGTCAGAGGTGAAATTCTTGGATTTACGAAAGACGAACTACTGCGAAAGCATTTGCCAAGAATGTTTTCATTAATCAAGAACGAAAGTTAGAGGCTCGAAGACGATCAGATACCG-TCCTAGTTATAACCATAAACGATGCCGA-CTAGGGATCAGAGAGTGTT-ATTGGATGACCTCTTTGGCACCTTAG-GGGAAACCAAAGTTTTTGGGTTTCGGGGGGAGTATGGTTGCAAAGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGAGTGGAGCCTGCG-CTTAATTTGACTCAACACGGGGAAACTCACCAGGTCCAGACATAGGAAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTTAACCTGCTAAATAGTTACGCCCATCGCGATGGGCAACT------AACTTCTTAGAGGGACTGTTGGTGTTTAACCAAAGTCAGGAA------GGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGACGATGTCAACGAGTCTCT--CCTTGGCCGAAAGGTCTGGGTAATCTTCTCAAACATCGTCGTGCTGGGGATAGATCATTGCAATTTTTGATCTTGAACGAGGAATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTACTACCGATTGAATGGTTTAGTGAGGACTCCTGATTGGCGCCGCGCCCCGGCCACGGAGCAGCGGACTGCC------GAGAAGTTGTTCAAACTTGATCATTTAGAGGAAGTAAAAGTCGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2122] Glycine_max TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTGTAAGTATGAACTAATTCA-GACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTGTTTGATGGTATC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCAACAAACCCCGACTTC--TGGAAGGGATGCATTTATTAGATAAAAGGTCAACACAGGC-TCTGCCTGTGCT-TTGATGATTCATGATAACTCGTCGGATCGCACGGCCTTTGTGCCGGCGACGCATCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGTGGCCTACCATGGTGGTGACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGGGAGGTAGTGACAATAAATAACAATACCGGGCTC-ATTGAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGATGGATCCATTGAAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGACCTTGGGTTGGGTCGATC-GGTCCGCC-TCC--GTGTGCACCGGTC-GGCT--GTCCCTTCTGCCGGCGATGCG---CTCCTGTCCTTAACTGGCCGGG-TCGTGCC-TCC-GGTGCTGTTACTTTGAAGAAATTAGAGTGCTCAAAGCAAGC-CTACGCTCTGTATACATTAGCATGGGATAACACCACAGGATTCTGATCCTATTGTGTTGGCCTTCGGGATCGGA-GTAATGATTAACAGGGACAGTCGGGGGCATTCGTATTTCATAGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACAACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CCAGGGATCAGCGGATGTTGCTTTTAGGACTCCGCTGGCACCTTAT-GAGAAATCGAAGTCTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGAGTGGAGCCTGCGGCT-AATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACATAGTAAGG-TTGACAGACTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCCTTCTTAGTTGGTGGAGCGATTTGTCTGGTT-AATTCCGTTAACCAACGAGACCTCAGCCTGCTAAATAGCTAT--------------------------AGCTTCTTAGAGGGACTATGGCCGCTTAGGCCAC----GGAAGTTTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGTATTCAACGAGTCTATAGCCTTGGCCGACAGGTCCGGGTAATCTTTG-AAATTTCATCGTGATGGGGATAGATCATTGCAATTGTTGGTCTTCAACGAGGAATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTGTTCGG--ATTGCGGT-------------------------------GAGAAGTCCACTGAACCTTATCATTTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG???????????????????????????????????GACCCTGAT?CTTCT?TGAAGGGTTC?GAGTGAGAGCA?TACCTGTCGGGACCCGAAAGATGGTGAACT?TGCCTGAGCGGGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCCC?GCAGCGATACTGACGTGCAAATCG?TTCGTCTGACTTGGGTATAGGGGCGAAAGACTAATCGAACCGTGCG?GG?GGCCCCGGAAAGAGTTATCTTTTCTGTTT?AACA?GCCT?GCCC?ACCCTGGAAA?GCCTCAGCCGGAG??GTAGGGTCCAGCGGCTGGA?AGAGCACCGCACGTCGCGTGGTGTCCGGTGCCCC?C???GGC??GGCCCTTGA [2074] Oryza_sativa TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTGCAAGTATGAACTAATTC-GAACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTGTTTGATGGTACG-TGCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCAACAAACCCCGACTTCC-GGG-AGGGGCGCATTTATTAGATAAAAGGCTGACGCGGGC-TCCGCCCGCGAT-CCGATGATTCATGATAACTCGACGGATCGCACGGCCCTCGTGCCGGCGACGCATCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGGGGCCTACCATGGTGGTGACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGGGAGGTAGTGACAATAAATAACAATACCGGGCGCTTTAGTGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGACCTTGGGCGCGGCCGGGCCGGTCCGCC-TCACGGCAGGCACCGACCTGCT--CGACCCTTCTGCCGGCGATGCG---CTCCTGGCCTTAACTGGCCGGGTTCGTGCC-TCC-GGCGCCGTTACTTTGAAGAAATTAGAGTGCTCAAAGCAAGC-CATCGCTCTGGATACATTAGCATGGGATAACATCATAGGATTCCGGTCCTATTGTGTTGGCCTTCGGGATCGGA-GTAATGATTAATAGGGACAGTCGGGGGCATTCGTATTTCATAGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACAACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CCAGGGATCGGCGGATGTTGCTTATAGGACTCCGCCGGCACCTTAT-GAGAAATCAAAGTCTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGGGCCTGCGGCTTAATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACATAGCAAGGATTGACAGACTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGAGCGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGCTATGCGGAGCCATCCCTCCGCAGCT----AGCTTCTTAGAGGGACTATGGCCGTTTAGGCCAC----GGAAGTTTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG--CGCACGCGCGCTACACTGATGTATCCAACGAGTATATAGCCTGGTCCGACAGGCCCGGGTAATCTTGGGAAATTTCATCGTGATGGGGATAGATCATTGCAATTGTTGGTCTTCAACGAGGAATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTGTTCGG--ATCGCGGCGACGGGGGCGGTTCGCCGCCCCCGACGTCGCGAGAAGTCCATTGAACCTTATCATTTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG???????????????????????GCACCGCTGGCCGACCCTGAT?CTTCTGTGAAGGGTTC?GAGTTGGAGCA?CGCCTGTCGGGACCCGAAAGATGGTGAACTATGCCTGAGCGGGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GAAGCGATACTGACGTGCAAATCG?TTCGTCTGACTTGGGTATAGGGGCGAAAGACTAATCGAACCATGCG?GG?GGCCTCGGG?AGAGTT?TCTTTTCTGCTT?AAC?GGCCC?GCCA?AC?CTGGAAACGGTTCAGCCGGAG??GTAGGGTCCAGCGGC?GGAGAGA???GCACACGTCGCGCGGTGTCCGGTGCCCC?C???GGC??GGCCCTTGA [2134] Zamia_pumila TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTGTCAGTATGAACTATTTT-GGACGGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTCTTTGATGGTACTCTGCTACAC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCACCAAATCCCGACTTTT-TG-AAGGGACGCATCTATTAGATAAAAGGCCGATGCGGGC-TTTGCCCGGCGT-TTGGTGAATCATGATACCTTGATGGATTGCATGGCCCTCGAGCCGGCGACGCTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGCAGGATAGAGGCCTACCATGGTGGTGACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCCGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGGGAGGTAGTGACAATAAATAACAATACTGGGCTCATC-GAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATCTTGGGACGGCCCGGCC-GGTCCGCT-TTTTTGGGTGTGCACCGGCCGTTTCGTCCCTTTTGTTGGCGGCGCG---CACCTGGCCTTAACTGTCTGGG-TCGCGGT-TCC--ACGCTGTTACTTTGAAAAAATTAGAGTGCTCAAAGCAAGC-TTATGCTCTGAATACATTAGCATGGAATAACGGTATAGGATTCTGGTCCTATTGCGTTGGCCTTCGGGACCGGA-GTAATGATTAACAGGGACGGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACCACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CCAGGGATCGGCGGATGTTGCTCTAAGGACTCCGCCGGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGAGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACATAGCAAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGAGCGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCGGCCTGCTAACTAGCTACGCGGAGGGTTTCTTTCGTGGCC----AGCTTCTTAGAGGGACTATGGCCGTTTAGGCCAT----GGAAGTTTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGTATTCAACGAGTCTATAACCTGGGCCGGGAGGTCCGGGAAATCTGGCGAAATTTCATCGTGATGGGGATAGATCATTGCAATTATTGATCTTCAACGAGGAATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGATCC---GGTGAAGTGTTCGG--ATCGTGCCGACGACGGCGGTTCGCTGGGCGCGACGTCGCGAGAAGTTCATTGAACCTTATCATTTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2134] Psilotum_n ???????????????????????????????????????????????????????????????????GCGAATGGCTCATTAAATCAGTTATAGTTTCTTTGATGGTACCTTGCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCACCAACTCCCGACTTC--CGG-AGGGACGCATTTATTAGATAAAAGGCCGATGCGGGC-TT-GCCCGGTTATGC-GT-ATTCATGATAACTCTGCGAATCGCACGGCC????????????????????????????????????????????????????????????????????????TGGTGACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCC-GAC-CGGGGAGGTAGTGACAATAAATAA-AATACTGGGCTTTTCAAAGTCTGGTAATTGGAATGAGTACAATCTAAACCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAGAACGAAAGTTGGG--CTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGG--TC-GCGGATGTTACCTTGATGACTCCGCCGGCACCTTAT--AGAAATC-AAGTCTTTGGGTTCCGGGGGGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGATTGACAGATTGAGAGCTCTTTCTTGGTTCTATGGGTGGT---G-ATGGCCGTT---AGTTGGTGGAG-G-TTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACGCGAAGGATCCTCTTCGTGGCC----AACTT-TTAGAGGGACTATGGCCGCCTAGGCCAT----GGA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GTCTTCAAC-A-GAATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATTGCGGCGAGCGGTCCGCCGGCACGTTGT---------GAGAAGTTCATTAAACCTTATCATTTAGAGGAA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2117] Equisetum_ar ???????????????????????????????????????????????????????????????????GCGAATGGCTGATTAAATCAGTTATAGTTTCTTTGATGGTACCTTGCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCACCAACTCCCGACTTC--TGG--GGGA-GCATTTATTAGATAAAAGGCCGATGCGGGC-TGTGCCCGGTAA----CGGATTC--GATAACTTCCCGGATCGCACGGCCT????ACGGGTGA????????????????????????????????????????????????????????????????????????CGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCGGGCGCGCAAATTACCC-AATCC-GACACGGGGAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAGAACGAAAGTTGG---CTCGAAGAC-ATCA?ATACCG-TCCTAGTCTCAACCATAAACGA-GC?GA-CTAGGGATT--CGGATGTTACTTCAATGACTCTGCCGGCACCTTAT-GAGAAATCAAAGTCTTTGGGTTCC----GGA-T??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTAGTGCATGGCCGTTCTTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACGCGAAGACTTGTCTTCGTGGCC----AACTTCTTAGAGGGACTATGGCCGTCTAGGCCAT----GGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TCTTCAACTAGGAATTCCTAGTAAGC-CGAGTCATCAGCTCGCGTTGACTA--GTCCCTGCCCTTTGTACACACTGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATT-CGGCGACGCTGGCGGT-CGCCGGCGACGTTGT---GAGAAGTTCATTGAACCTTACCATTTAGAG?????????????????????????????????????????????????????GCACCATCGACCGACCGTGAT?CTTCTGTGAAAGGTTT?GAGTGAGAGCA?TACCTGCTGGGACCC?AAAGATGGTGAACTATGCCTGAGCAGGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTTGGGTATAGGGGCGAAAGACTAATCGAACCATGCG?GG?GGCCCTGGGAAGAGTTCTCTTTTCTTTTT?AACA?ACTT?GCCC?ACCCTGAAATCGGATCAACCGGAG??ATAGGGTCCAGCGGTTGGT?AAAGCA?CGCAGGTC?TGCGGTGTCCGGTGCCCC?C???GGC??GGCCCTTGA [2123] Atrichum_angus ??????????????????????????????????????????????????????????????????????????????ATTAAATCAGTTATAGTTTCTTT-ATGGTACCTTGCTACTC---GGATAACCGTAGTA--TTCTA-AGCTAATACGTGCACAAACTCCCGACCTC--TGGAAGGG-CG-TTTTATTAGATAAAAGGCCGATGC-GGC-TT-GCCCGGTAT-TCGGTGACTCA-GATAACTCGTCGAATCGCACGGCCTTA?????????????????????????????????????????????????????????????????????????????????????AGAATT----TTCGATTCCGGA-AGGGAGCCTGAGAA-CGGCTACCA-CATCCA---AAGGCAG-?-??-?-?--ATT-CCC-AATCC-GAC--GGGGAGGTAGT-ACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAA--A??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTTCTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAG???GAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTTGCGGGTGTTAATTTGATGACCCCG-AAGCACCTTAT-GAGAAATC-AAGTATTTGGGTTCCGGGGGGAGTATG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCTTTCTTGATTCTATGGGTGGT-GTGCATGGCCGTT-TT-GTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAAC-AACGAGACCTCAGCCTGCTAACTAGTTACACGAAGAATC-TCTTTGTGGCC----AACTT-TTAGAGGGACTATTGGCGTCT-GCCAAT----GGAA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ATAGATCATTGC-ATTATTGATCTTCAA--A-GAATTCC-AGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACC-CCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATCG--GG-TG-ATCGGGTT-G-GTTCGG?GACTTGT--GAGAA-TTCATTAAA--TTATCATTTAGAGGAA??????????????????????????????????????????????????GCAC?AT?GACCGACCGTGAT?CTTCTGTGAAAGGTTT?GAGTGTGAGC??T?CCTGCTGGGACCC??AAGATGGTGAACTATGCCTGAGC?AGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?G?AGC?ATACTGACGTGCAAATCG?TTCGTCAGACTTGGG?ATA????C?AAAGACT?ATCGAACCATGCG?AG?GGCCCCGGGAAGAGTTCTCTTTTCT?TTT?AACA?GCCT?GCCT??CCCTGGAATCGGATTACC?GGAG??ATAGGGTCCAGCGGCTGGT?AAAGCACCGCAC?TCTTGCGG?GTCCGGGGCCC??C???GGC??GGCCCGTGA [2095] Notothylas_bre ????????????????????????????????????????????????????????????????????????????????????????????????????????????CCTT-CTACTC---GGATAAC-G-AGTAA-TTCTA-AGCTAA-ACGTGCAACAACTCCCGACTC---TGGAAGG-AG--ATTTATTAGATAAAAG---GATG---GC-TT-GTCCCGTTT-A--CTGAATC-TGATAACTCCTCGAATCGCACGGCCCT???????????????????????????????????????????????????????????????????????????????????????????????GTTCGATTCCGGAGAGGGA--C-GAGAAACGGCTACCA-CATCC--?--AGGCAG---????----ATTACCC-AATCC-GA---GGGGAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAA--A????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAAGTTGGGG-CTCGAAGACGATCAGATAC---TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGTGTTAATTAGATGACTCCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CA-GGCCGTT-TTAGTTGGTGGAGTGA-TTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACAC-AAGAACCTTCTTCGTGGCC----AACTTCTTAGAGGGACTATTTGCGTCTA-CGAAT----GGAA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGA-AGATCATTGC-ATTATTGATCTTCAAC-AGGAAT-CCT-GTAAGCGCGAGTCATCAGCTCGCGTT-ACTAC-GTCCCTGCCCTTTGTACACAC-GCC-GTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATTG-CGGCGACACCGGGTCACCGCCGGGGACGTT-T--GA-AA-TTCATTAAACCTTATCATTTA?A????????????????????????????????????????????????????????????????????CC?TGAT?CTTCTGTGA?AGGTTT?GAGTGTGAGCA?TACCTGCTGGGACCC????GATGGTGA?CTATGCCTGAGCAGGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGA?GTGCAAATCG?TTCGTCAGACTTGGGTATAGGGGCGAAAG?CTAATCG???????????????CCCCGGG?AGAGTTCTC?TTTCTTTTT?AACA?GCCT?GCCT?ACCCTGAAATCGGATTACCCGGAG??ATAGGGTCCAGCGGCTGGT?AAAGCACCACACG?CTTGCGGTGTCCGGTG?CCC?????GGC??GGCCCGTG? [2090] Phaeoceros_lae ?????????????????????????????????????????????????????????????????????????????????????????????????????GATGGTACCTTGCTACTC---GGATAACC--AGTAA-TTCTA-AGCTAAT-CGTGCAACAACTCCCGGCTTT--TGG-AGGG-TGT-TTT-TTAG-TAAAAG---GA-GCGG-C-TT-GTCCCGGTTTACGGTGAA-CW-GATAACTCCTCGGATCGCACGGCCCT??????????????????????????????????????????????????????????????????????????????????ACGGA-AATTAGGGTTCGATTCCGGA-A-GGAGCCTGAGAAACGGCTACCA-CATCC-AG-AAGGCA-CA--CGCGC--ATTACCC-AATCC-GAC-CGGGGAGGTAGTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGA-TACAATCTAAATCCCTTAAC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GAAAGTTGGG--CTCGAAGACGAT-AG-TACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGATGTTAATTAGATGACTCCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTAT?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????T--TGCATGGCCGTT-TTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACACGAAGAACCTTCTTCGTGGCC----AACTTCTTAGAGGGACTATTTGCGTCTAGCGAAT----GGAA???????????????????????????????????????????????????????????????????????????????????????????????????????????ATCTTTG-AAATTTCATCGTGAT--GGATAGATCATTGCAATTATTGATCTT-AA----GAATT--TAGTAAGCGCGAGTCATCAGCTCG-GTTGACTA--GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATTG-CGGCG?ACA?CGGGT?ACCGCCGGGACGTTGT--GAGAAG-TCATTAAACCTTATC-TTTAGAGGAA??????????????????????????????????????????????????GCACCATCGACCGACCATGAT?CTTCTGTGAAAGGTTT??AGTGTGA??A?TACCTGCTGGGACCC??AAGATGGTGAACTATGCCTGAGTCAGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGA?GTGC?AATCG?TTCGTCAGACTTGGGTATA?GGGC???AGACTAATCGAACCATGCG??G?GGCCCCGGG?AGAGTTCTCTTTTCT?TTT?AACA???CT?GCCT?GCCCTGAAATCGGATTACCCGGA???ATAGGGTCCAGCGGCTGGT?AAAGCACCACACGTCTTGCGGTGTCCGGTGGCCC?CT??GGC??GGCCCGTGA [2098] Porella_pi ??????????????????????????????????????????????????????????????????????????????????????????????????TTTGATGGTACCTTGCTACTC---GGATAACC-TAGTAA-TTCTAGAGCTAATACGTGCACCAACTCCCGACTTC--TGGAAGGG-CGTATTTATTAGATAAAAGACCGATGCGGGC--T-GCCCGGTGTTGCGGTGAATCATGATAACTCGTCGAATCGCACGGCC???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAACGGCTACCA-CATCCAAGG-AGGCAGCCGG-GCG---ATTACCC-AATACCGACACAGG?AGGTAGTGACAATAAATAACAATACTGGGCTTTACCAAGTCTGGTAATTGGAATGAGTACAATCTAAATCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AA?AAC?AAAGTTGGG--CTCGAA-ACGAT-AGATACCG-TCCTAGTCTCAACCATAAACGATGCCGAGCTAGGGATTG--GGATGTTAATTTGATGACTCCGC-AGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CC-----TAGTTGGTGGAG-G--TTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACACGAAGAATCTTCTTTGTGGCC----AACTT-TTAGAGGGACTATT--CGTCTAGCCAAT----GGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TCTTCAAC-AGGAAT-CCTAGTAAGC-CGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCCCTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATGGTCC----GTGAAGTTTTCGG--ATTGCGGCGACGCGGCGGTTCGCTGCCGGGACGTTGT--GAGAAGTTTATTAAACCTTATCATTTA?A???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2118] Conocephal_con ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ACGTGCACC-AGGCTCGAC----?TGGAAGGGG----TTTTTTAGATAAAAGACCGATGGGGGTGCT-GCC-GGTGATTC-GGGA-TC-TGATAACTCGACGAATCGCACGGCC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????GAGCCTGAGAAACAGCTACCA-CATCCAAGGA-GGCAGCAGGCGCG---ATTACCC-AATCCCGACACGGGG-GGT-GTGACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGAACAATCTAAATC???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAGGATGTTT--ATTAA--AA-AA-GAAA-TTG-------GAAGACGATCAGATACC---CCTAGTCTCAACCATAAACGATGCCGA-CTAG--ATC--CGGATGT?CTTTTGATGACTCCGCCGGCACCTCCA-GAGAAATCAAA-TTTTTGGGTTCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCTTTCTT-ATTCTATGGGT--T--TGCAT---CGTTCTTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTA-CTACGCGAGTCCATTTTTTGTCCTGCGC--AGCTT-TTAGAGGGACT---GG--TC--GCC-AC----GGAA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TAGATCATT?C?ATT?TTGATCTTGAA-----AATTCC--GTA--CGCGAGTC-T----TCGCGCTGATT-C-GTCCCTGCCCTTTGT-C-C-CCGCCC--CGCTCCT-CCGATTGAATGGTCC---GGTGAAGAGTTCGG--A-CG-CGGCG?ACGTGC?GTCGCCGCCGGGACGTTGT--GAGAAGTTCTTT-AACCTTATCA-TTAGA?????????????????????????????????????????????????????????CCAGCGACCATGAGCATC?TCGATGCGAAAGGTT??GAGT??GAGCG?TGCCTGTTGGGACCC??AAGATGGTGA?CTATGC?TGAGCAGG??CGAAGCCGGAGGAAACTCCGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTC?TCAGACTCGGG?ATA??????AAAGACT?ATCGAACCATGCG?G???GCCCCGGGAAGAGTTTTCTTTTCT?TTT??AC?GACCT?GCC??GCCCTGGAATCGCTTTATGCGGAG??ATAGGGCCCAGCGGTCGGT?AAAGCGTCGCAAGTCTTGCGG?GTCCGGTGCGCC?CCC?GAC??GGTCC??GA [2075] Asterella_tene ?????????????????????????????????????????????????????????CTGTGAAACTGCGAATGGCTC-TTAAATC-GTTATAGTTTCTTTGATGGTGCCTT-CTACTC---GGATAACCG-AGTAA-TTCTAGAGCTAATACGTGCACCAACGCCCGACTTT-CCGGAAGGG--TGTTTTATTAGATAAAAGACCGATG---GC-TT-GCC-CGGTGATT-CGGAATCATGATAACTCGACGAATCGCACGGCCT??????????????????????????????????????????????????????????????????????????????????????????????????????????????AGGGAGCCTGAG?AACGGCTACCA-CATCC-AG-AAGGCAG-A---GC-C--ATTACCC-AATCC-GAC-----GAGG-AGTGACAATAAATAACAATACTGGGCT-TTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTTCTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGG-ATCG--GGATGT?GATTAGATGACTCCGCCGGCACCTCCATGAGAAATCAAAGTTTTTGGGTTCCGGGGGGAG-ATG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGGTGG-GTGATTTGTCTGGTT-AATTCCGTTAACGAAGGAGACCTCAGCCTGCTAACTA-CTACGCGGGGGTWCTCCCCTGCGGCC----AGCTT-TTAGAGGGACTGTCGGCGTCTAGCCGA-----GGA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGTCATCAGCTCGCGTTGACTAC-GTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA-GAGTTCGG--ATCG-CGGCGACGCGCGGTTCGCCGCCGGGACGTTG---GA-AAGTTCTTTAAACCTTATCA????????????????????????????????????????????????????????????T?AACATCGACCGACCATGAT?CTTCTGTGAAAGGTTC?G?GT?GGAGCA?TGCCTGTTGGGACCC??AAGATGGTGAACTATGC?TGAGCAGGG?CGAAGTCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTCGGG?ATA??????AAAGACTAATCGAACCATGCG?GA?GGCCCCGGGAAGAGTTTTCTTTTCT??TT??AC?GACC??GCCG?GCCCTGAAATCGCATTACGCGGAG??ATAGGGCCCAGCGGTCGGC?AAAGCGTCGCA?GTCTTGCGG?GTCCGGTG?GCC?CCC?GAC??GGCCCC?GA [2110] Riccia ?????????????????????????????????????????????????????????????????????????????????????????????????????????????TTTACTACTC---GGATAACC-TAGTAA-TTCTAG-GCTAATACGTGCACCAACGCCCGACTTCG-CGGAAGGGCTGTATTTATTGGATAAAAGGCCGATG-GGGC-TTGCCCCGGTGTTT-CGTGAATCATGATAACTCGACGAATCGCACGGCCCCC???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CGCAAATTACCC-A-TCC-GAC-----GA--TAGTGACAATAAATAACAATAGTGGGCT-TTACAA-TC--GTAATTGGAA--AGTACAATCTAAATCCCTTA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAAGCATTTGCCAAGGATGTTTTCATTAAT-AACAA--AAAGTTGG?GGCTCGAAGACGATCAGATACC--TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATCGGCGGATGT?GATTTGATGACTCCGCCGGCACCTCCT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTAT??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ATTGAGAGCTCTTTCTTGATTCTATGGGT--T--TGCATGGCCG-TCTTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGCTACGCGGGGGTTCTCCCTGCGGCC-----AGCTT---AGAGGGACT--CGG--TCTAGCCGAC----GGAA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TTGC?ATTATTGATCTTCAAC-A-GAATTCC-AGTAA---CGAGTCGAACAGTCGCGCTGACTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGA-GAGTTCGG--ATCG----CGAC-----GTTCGCCGC-GGGACGTTGT--GAGAAGTTCTTTAAACCTTATC-TTTAGA???????????????????????????????????????????????????????????????????????????????????A?AAGGTTCGGAGTAAGAGCAT?GCCT?TTGGGACCC??AAGATGGTGAACTAT???TGAG?A?GG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTTGGG?ATAG??G??AAAGA?TAATCGAACCATCTAGTA?AGCCCCGGGAAGAGTTTTCTT?TCTT?TT??AC?GACC??GCC??GCC?TG?AATCGCA?TACGC?GAG??ATAGGGCCCA?CGGTCGGC?AAAGCGTCGCA??TCT??CGGCGTCCGGTGCTCATCCCCTAAAA?CCAG?AGA [2098] Klebsormid_fla ????????????????????????????????????????????????????????????????????????????????????????????????????????????CCTTA-TACTC---GGATAACCGTAGTAAGTTCTA-AGCTAATACGTGCACCAAATCCCGACTTC--TGGAAG?ACGTGATTTATTAGATAAAAGGCCAATGCGGGC-TT--CCCGGTATTGCGGTGAATCATGATAACTCGTCGAATCGCACGGCCTTTGCGCTG??????????????????????????????????????????????????????????????????TAACGGGTGACGGAGAATT?GGGTTCGATTCCGGAGA?GGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGC--ATT-CCC-AATCCTG-T-CAGGGAGGTAGTGAC-ATAAATAACAATGCTGGGCTTTTCAAAGTCTGGCAATTGGAATG??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAGGATGTTTTCATTAAT---GA--GAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGATGTTAATTTGATGACTCCGCCAGCACCTTAT-GAGAAATC--AGTTTTTGGGTTCCGGGGGGA-TATGGTC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AACGAACGAGACCTCAGCCTGCTAACTAGTTACACGGAGATTCTTCTCCGTGGCC----AACTTCTTAGAGGGACTATTTGGCGTCTACAGCCAAT-GGAA?TTTGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TCGCGTTGATTTA-GTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCTACCGATTGAATGATCC---GGTGAAGTTTTCGG--ATTGCGGCTACTGGTCCGCCGCCGAAGAAGCTGTGAG--GCAAGGTTCATTAAACCTTATCATTTAGAGGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGATGGTGAACTATGCCTGAGGCAGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?G?A?CGATACTGACGTGCAAATCG?TTCGTCAG?CTTGGG??TA??GCGGAAAGACTAATCGAACCAT???????????????GAAGAGTTCTCTTTTCTTTTT?AACAGTCC??GCCC?ACCCTGGAATCAGATTAACTGGAG??ATAGGGTCCAGCGACTGGG?AAAGCATCGCACGTCTCGCGGTGTCTGGTGCGCC?CT??GAC??GGCCCTTGA [2136] Coleochaet_nit ????????????????????????????????????????????????????????????????????????TGGCTCATTAAATCAGTTATAGTTT-TTTGATGGTAGCC---TACTC---GGATAACC-T-GTAA-TTCTAGAGCTATACCGTGC-CC--ATCC-GACTTC--TGGAAGG--GGTATTTGTTAGATAAAAGACCAAT----GC-TC-GCCCGGTGTT-CGGTGAATC--GATAACTCCTCG?ATCGCACGGCCT??????????????????????????????????????????????????????????????????????????????????????????????????????????GGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGA?GGCAG--GGCGCG--GATTACCC-AATCCTGATACAGGGAGGTAG--ACAATAAATAACA-TACTGGGCTTTTA-AAGTCTGGT?ATTGGAATGAGTACAATCTAAATCTC????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CATTAATCAAGAA-GAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGACCTAGG-ATCAACGGATGTTAATTTAATGACTCCGCCAGCACCTTAT--AGAAA-CAAAGTTCTTGGGTTCC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AT--CCAGTTTTCGTTCW-GGAGTGATTTGTCTG-TT-AATTC?G?TAACGAAGGAG?CCTCAGCCTGCTAACTAGGCTAACGTTTTGTTGGGAC------------ACTTGTTAGAGGGACTGTGAGGCGCTTAGCTCAT---GGA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????G-TCTCGAACGA-GAATACCTAGTAAGCGCTCGTCATCAGCGTGCGCT-ACTAC-GTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCTACCGATAGAATGCTCC---GGTGAAGCATTCGG--ATCGCCACCGGCGGGCAACTCCGGAGACGGCATG------AGAA-TT-GTTGAACCTTATCGTTTAGAGGA????????????????????????????????????????????????????CACCACGCGCCGATCCGGAGA?ATGTCGGAAGGGTTC?GAGCTGAGA?A??GTATGTTGGGACCC???AGATGGTGAACTATGCCTGA??AGG??CGAAGCCAGAGGAAACTCTGGTGGAAGATC?GCAGC?ATACTGACGTGCAAATCG?TTCGTCGGACTTG?GTATA????C?AAAGACT?ATC?AACCATGCG?GG?G?CTCCGGG?AGAGTTTT?TTTTCTTTTT?GACA?GTCG??AGC?GCCCTGGAATTGATT?C?CGGCG???GAGGGTGC?GAAAGCTGGC?AGAGCGCGCACTGGT???CGGTGTC?GGTG?AC??CCG???T??T?CCCTAGA [2098] Fissidens_taxi ???????????????????????????????????????????????????????????????????????????????????????GTTATAGTTTCTTT-ATGGTACCTTGCTACTC---GGATAACCGTAGTAA-TTCTA-AGCTAATACGTGCACAAACTCC-GACTCG-?TGGA-GGGACG-ATTTATTAGATAAAAGGC-GA-T-C-------GCC-GGTGTT---GCGAATCA-GATAAC?AGTCGAATCGACCC??????????????????????????????????????????????????????????????????????????????TGACGGGTGACGGA?AATTAGGGTTCGATTCCG-A-A-GGAGCCTGAG---CGGCTACCA-CATCC--GGAAGGCAGC--GCGCGC--ATTACCC-AATCC-GA---GGGGAGGTAGT-ACAATAAATAACAATACTGGGCTTTTACAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAA--A???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGTGTTGATTTGATGACCCCGCCAGCACCTTGA-GAGAAAT--AAGTTTTTGGGTTCCGGGGGGAGTATG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCTTTCTTGATTCTATGGGTG-T-GTGCATGGCCGTT-TTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACGCGAAGGATTTCTCTCCTTGGCGGCCAACTTCTTAGAGGGACTATCGGCGTCT-AGCCGAT---GGAA?TTT?A????????????????????????????????????????????????????????????????????????????????????????????????????AATCTTCTGAAATTTCATCGTGAT--GGATAGATCATTGCAATTATTGATCTTCAAC-A-GAATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCCCTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATTG-CG?CG?AC?GGGTTCGCCGCGCGCTGT-------GAGAAGTTCATTAAACCTTATCATTTAGA--A??????????????????????????????????????????????????????????????????????????TTCTGTGAAAGGTTC?GAGTGTGAGCA?TACCTGTTGGGAC????AAGATGGTGAACTAT???TGA???AGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG??T?GT?AGACTTGGGTATAGGGGC???AGACTAATCGAAC?AT?CG??G?GGCCCCTGGAAGAGTTCTCTTTTCT?TTT?AAC?GGCCT?GCCT???CCTGGAATCGGATTACCCGGAG??ATAGGGTCCAGCGGCCGGT?AAAG???CGCACGTCTTGCGG?GTCAGGTGCCCT?C???GGC??GGCCCT?GA [2098] Plagiomnium_cu ????????????????????????????????TGTGTAAGTATAAACT-CTTTTGTACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTCTTTGATGGTACCTTGCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGCACAAAATCCCGACTGG---G?AAGGGA??GATTTATTGGATAAAAGGCCGA-TGCGGGCT-TGCCCGGTTC-GCGG-GAC----GATAAC--GTCGAATCGCA-GGCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????GA-A-GGAGCCT-AG---CGGCTACCA-CATCC-AGGAAGGC--C----------ATTACCC-AACTCCGA---GGGGAGGTAGTGACAATAAATAACAATACTGGGC--TTACGGGCCCG---ATTGG--TGAGTA?AATCT-AATCCCTTAA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCATTTGCCAAGGATGTTTTCGTTAATCAA-AA-GAAAGTTGGGGGCTCGAAGACGATCAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGTGTTGATTCGATGACCCCGCCAGCACCTTAT-GAGAAATC--AGTTTTTGGGTTCCGGGGGGAGTATG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGAGCTCTTTCTTGGTTCTATGGGTGGT-GTGCATGGCCGTT-TTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAACTAGTTACGCGAAGGATTTCCTCCTTTGCGGCC-AACTTC--AGAGGGACTATCGGCGTC---GCCGAT---GGAAG?TTGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ATCATTGC-ATTATTGATCTTCAAC---GAATTCC-AGTAAGCGCGAGTCATCAGCTCG-GTTGACTAC--TCCCTGCCCTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTTTTCGG--ATCG-CG??A?C????GTTCGCCGC?GG?GACGTTGT--GAGAAG-TCATTAAACCTTATCATTTA-AG?????????????????????????????????????????????????????GCACCATCGACCGACCGTGAT?CTTCTGTGAAAGGTTT?GAGTGTGAGCA?CACATGTTGGGACCC???AGATGGTGAACTATGCCTGAGCAGGG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGCAAATCG?TTCGTCAGACTTGGGTATAGGGGC?AAAGACTAATCGAACCATGCG?AG?GGCCCCTGGAAGAGTTCTCT?TTCT?TTT??AC?GGCCC?GACG?ACCCTGGAATCGGTTCACCCGGAG??ATAGGGTCCAGCGGCCGGT?AAAGCACCGCACGTCTCGCGGTGTCAGGTGGCCC?TC??GGC??GGCCCGTGA [2089] Micromonas_pus ??????????????????????????????????????????????????????????????????????????????????????????AT-GTTTCTTTGGTGGTGTTTTACTACAT---GGATAACCGTAGTAA-TTCT-G-GCTAATACATGC-GTAAATCCCGACTTC---GGAAGGGACGTATTTATTAGAT-AAAGAC--AC----------CTC--GTCT-GCGGTGAATCATGATAACTTC-CGGATCGCATGGCTTCAA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAAGTTGGGGGCTCGAAGATGATTAGATA--A-TCCTAGTCTCAACCATAAACGATGC?GA-CTAGGGA--GGCGGATGTTAATT-GATGACTCCGC-AGCACCTTAT-GAGAAATCAAA-TTTTTGGGTTCCGGGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????T-GTGCATGGCCGTTCTT-GTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAAATAGTCATACGCTACTCT-TAGCGCAGT------GACTTCTTAGAGGGACTATGTGCGTTT-GCACAT----GGAA-TT?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AG-AATGCCT-GTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACC-CCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGCGTTCGG--ACCGT-GGCTTTCTGA??G?TTCG?CCGTCGGATGGCCTGGGAAGTTCGTT-AACCTTATCA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGGACC????AGATGGTGAACTATG??TGAGCA?GG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGCGATACTGACGTGC?AATCG?TTCGTCGGACTTGGGTATA???????AAGACT?ATC?AA????GG????GAGCCCCGGG?AGAGTTCTCTTTTCTTTTT?A?CA?GCCT??CGC?GCCCTGGAATCGGTTT?GCCGGAG??ATA?GGCCCAACGGCTGGT?AAAGCACTGCACGT?TCGCAGTGTCCGGTGC?CT?CC??GG???GGCCC?TGA [2114] Mantoniel_squa ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AA-TACATGCG-T-------------AATCCCGAC-TC---GG--GGG--GT-TTTATTAGAT--AAGACC-AC----------CTCG-TTCT-GCGGTGAATCA-GAT-ACTT--CGGATC-CATGGCTTCAA?GCCG?CGATGTTCCATTCAAATTTCTGCCCTATCAACTTTCGACGGTAGGATAGAGGCCTACCGTGGTGTTCACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGGGAGGTAGTGACAATAAATAACAATATCGGGGTTTTTCAA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GATGATTA-ATAC-A-TC-TAGTCTC-ACCATAAACGGAYCYGA-CWA--GATTCAC--ATCTTAAT---AT--CTC--CCA-CACCTTAT--A-AAATC-AA-TTTTT???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????T-G-GCWTGGCCGTT-TT-GTTGGTGGAGTGATT--TCTGGTT-AATTCCGTTAAC-AAC-AGACCTCWGCCTGCTAAATAGTCATACGCTACTCT-TAGCGCAGT------GACTTCTTAGAGGGACTATGTGCGTTTWGCACAT----GGAA-TTTGA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGCTGGGACC?????GATGGTGAACTATG?CTGAGCA?GG?CGAAGCCAGAGGAAACTCTGGTGGA??CTC?GT?GCGATACTGACGTGC?AATCG?TTCGTCGGACTTGGGTATA????C?AAAGACT?ATC?AACCAT?????????????????AGAGTTCTCTTTTCTTTTT??ACA?GCCT?T?GC?GCCCTGGAATCGGTTT?GCCGGAG??ATA?GGCCCAACGGCTGGT?AAAGCACTGCA?GT??CGCAGTGTCCGGTGCACT?CCC?GAC??GGCCC???A [2089] Nephroselm_pyr ????????????????????????????????????????????????????????????????????????????????????????????????????????????CCTT-CT-CTC---GGAT?ACCGTAGTA---TCT-G-GCTAATACGTGC-GCAACACCCGACTTC---GGAAGGGTTGT-TATATTAGATAAAAGACCGAC----CT-TCG-GCG-TTCT-TCGGTGAATCATGATATTTCCACGGATCGCAT--CTTCCC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CGGCTACCA-CATCCAA--AAGGC-GC--GCGCGC--ATTA-CC-AATCCTGAC-CAGGGAGGTAGTGAC-ATAAATAACAATACCGGGCTTTTTCAAGTCTGGTAATTGGAATG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGGCTCGGAGATGATTAG---CCA-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCAGATGTTAGTTCGATGACTCTGCCAGCACCTTAT--AGAAATC-AAGTTTTTGGGTTCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CATGGCCGTTCTTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCAGCCTGCTAAATAGTCACGCGATGCTCCTGCATGGCGGCG----GACTT-TTAGAGGGACTATCGGTATT-A-CCGAT----GGA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGGAATGCCT-GTAA--GCGAGTCATCAGCTCGCGTTGATTA--GTCCCTGCCCTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATG-TGC--TGGT?AGGAGTCCGG--AT?AT???GCGGGTGGGTCC?GCCG?C?TCCGCCCGT--CAGAAGTTCTTCAAACCCTCGCATTTAGAG??????????????????????????????????????????????????????????????????????TGAT?CTTCTGTGAAAGGTTT?GAGT?CGAGCA??ACCTGTTGGGACC?????GATGGTGAACTATGCCTGAGCA?GG?CGAAGCCAGAGGAAACTCTGGTGGA??CTC?GTA??G?TACTGACGTGCAAATCG?TTCGTCGGACTTGGGTATA?GG?CGAAAGACT?ATC?AACCATGCG?GG?GGCCCCAGGAAGAGTTCTCTTTTCTTTTT?AACA?GCCC?GCCC?ACCCTGGAATCGGATTATCCGGAG??ATA?GGCCCAGCGGCTGGT?AAAG?C?CACT?CTTGCGG?GT??CTGGTGCGCC?CTC?GAC??GGCCC??G? [2108] Pedinomonas_mi ???????????????????????????????????????????????????????????????????????????????????????GAAATA-TTTCTTTGATGGTGAAAATCTACAC---GGATACCCGT-GTA--TTCT-GAGCTAATACGT-C-GTAA---CTCCATT----GG-AGG-T----TTT-TT-G-TCC-AACC-AGC-----C-TT-GGGG--TTT-TCTGTGAATC-TGATACTTTC??????????????????????????????????????????????????????????????????????????????????????????????CGGTGACG??GAATT?GGGTTCGTTCCGG--GAGGGAGCCTGAGAAACGGCTACC--CATC-AAGGAAGGC-GCGGGCGCGC--ATTACCC-AATCC-GAGA--GGGAGG-AGTGGACAGAAATATCGTGACTGTGCCCTTGTGGCAGAGTCTTCG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGGGATCGAAGACGATCAGATACC--TC-TAGTCTCTACCATAAACTAT-CCGA-CTAGGGATTGGTGGACGTT-GTTTT?CGACTCCATCAGCACCTTAT-GAGAAATCAAAGTCTTT???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GCATGGCCGTTCTTAGTTGGTGGAGTGATTTGTCTGGTT-AATTCCGTTAACGAACGAGACCTCGACCTGCTAAATAGGTTCAGTATCGATGCGTCGATGCTTG----GAGCTTTTAGAGGGACT-TCGGATCC-A-CCGGT----GGAAGT??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GTCCCTGTCCTTTGTAC-CAC-GCCCGT-GCTACTACCGATTGAATC-TTT---GGTGAGGCTCACGG--ACTGTCGTGCTTCCTTCCTCGTGTTGGTTGTACTTC---GGGAAGT--ATACA--CCTGATGATTAGAGGA?????????????????????????????????????????????????????????????????????????????????????????????????AGCA?GATATGTTGG??CCC???AGATGGTGAACTATG?CTGAAC?GGG?TGAAGCCAGGGGAAACT?TGGTGGAGGCTC?GTAGC?ATACTGACGAGC?AATCG?TTCGT?TGATTTGGG?ATAGGGGCG?AAGACTAATCGAACCAT??????????TCCGG???GAGTT?TCTTTTCTTTTT??ACA?GCCT?GTA??GCCCTGGAATCGGATT?CCCGGA???ATAGGGTGATGTGGCTGGT?AAAGCACCTCACGTCTTGAGGTGT?C?GTGC?TC?TC???AC???C??CTTGA [2092] Tetraselm_cart ??????????????????????????????????????????????????????????????????????????????????????????ATAGTTTATTTGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATTTAAG-CGG-C---AGC-TTT-C---GTC---CGGTGAA-CA-GATAACTTCACGAATCGCATGGCCTCCGCGCCGGCGATGTTTCATTCAAATTTCTGCCCTATCAATTTGCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGGGAGGTAGTGACAATAAATAACAATACCGGGCTTTT-CAA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GCATTTGTCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCCTAGTCTC-ACCAT-AACGA--CCGA-C-AGGGATTGGCAGA--TT--TT--ATG--TCTGCCAGCACCTTAT-GAGAAAT-AAAGTTTTTGGGTT?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TATGGGTG-T-GTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTTACTCCTACTTTGGTAGGAGGTG------AACTT-TTAGAGGGACTATTGGCGTTT-GCCAAT----GGAAGTTA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TCATCAGATCGCGTTGATTA--GTCCCTGCCCTTTGTACACAC--CCCGTCGCTCCTACCGATTGAATG-TG--TTGGTGAGGAGTT?GG--ATTGGCAGTTTGTGGTGG?TTCG?CCACTGCTTACAGCTGAGAAGTTCTCCAAACCCCCCCATT-AG??????????????????????????????????????????????????????????CCATCGACCGACCATGAT?CTTTTGTGAAAGGTTT?GAGTACGAGCA?TACCTGTTGGGACCC???AGATGGTGAACTATGCCTGAGCA?GG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGATGTGCT?ACGTGCAAATCG?CTTTTCGGACTTGGG??TA????CGAAAGACT?ATC?AACCATGCG?AT?GGCCCTGGGAAGAGTTCTCTTTTCTTTTT?AACAGGCTC?GAAG?GCCCTGGAATCTAATCATTAGGAG??ATAGGGCTCAGAAGTCGGT?AAAGCACCGCACGTC?CGCGG?GTCCGGAGCGCC?ATT?GAC??GATCCTTGA [2111] Enteromorpha ??????????????????????????????????????????????????????????????????????????????ATTAAATCAGTTAGAGTTTATTTGATGGTACCACACTACTC---GGATAACCGTAGTAA-AGCTACAGCTAATACGTGC-GTAACTCCCGACYC---CG-AAGGGACGT-TTTATTAGATTC-AGACCGAC-CGTGC-TTGCCGTCTTT----GGTGAATCATGGTAACTTCACGAATCGCA-GG--TTTACCCCGG?????????????????????????????????????????????????????????????????????????????????ATTAGG?TTCGATTCCGGA?AGGGAGCCT?AGG--CGGCTACCAGCATCCGAGGAAGGCAGC-GGCGCGCAAATTACCC-AATCCTG--GCAGGGAGGTAGTGACAATAAATATCA-TTCTGGGC-CACTTG-GTCCGGTAATTGGAATG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGAT-CCGA-CCAGGGATTGCCGGGTGTTTTTTTGATGACTCCGCCAGCACCTCAT-GAGAAATCAAAGTCTTTGGGTTCCGGGGGGAG?ATGG????????????????????????????????????????????????????????????????????????????????????AAACTTACCAGGTCCAGACATGGA---GATTGACAGATTGAGAGCTCTTTCTTGGTTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAA-GAGACCTCAGCCTGCTAAATAGTGACGATTGCTCGGCAGTCGCG--------CGCTT-TTAGAGGGACTGTTGGCG-TCTAGCCAAT---GGAAGTAT???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CCTAGTAAGCGCGAGTCATCATCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAACG-TGC--TG--GAAGCGTTAGG--ACTGG--AACCTTGGGCCGGTCTCCTGCCCATGGTTTC---GAATTTCGTT-AACCCTC--GTTTAGAG-A????????????????????????????????????????????????????????????ACC?ACCAT?AT?CTTCTGTGAAAGG?TC??A?TACGA??G?TACCTTTTGGGACCCTTAAGATGGTGAACTATGCCTGA?CA?GG?CGAAGCCAGAGGAAACTCTGGTG?AGGCTC?GTAGATGTGCT?ACGTGCAAATCGCCTTTTCGGACTTGGGTATA??GGC?AAAGACTAATCGAACCAT???????GG???TGGAAAGAGTTCTC?TTTCTTTT??AACA?GCCC?CA?G?ACCCTGGAATCGAGTCATTCGGAG??ATAGGGTTCAGTGCCTGGT?AAAGCACA??TC?T?T???GGTGTCCGGCGCGCA?GTC?GAGTCGGTCCGTGA [2111] Ulva_fasci ??????????????????????????????????????????????????????????????????????????????????????????AGAGTTTATTTGATGGTACCACACTACTC----GATAACCGTAGTAA-AGCTAC-GCTAATACGTGC-GTAACTCCCGACTTA--CG-AAGGGACG-ATTTATTAGATTCAAGGCCGAC-TGC---TTGACGTCTTT----GGTGAATCATGGTAACTTCACGAATCGCAGGG--TTTATC???????????????????????????????????????????????????????????????????????????????????GGATTAGGGTTCGATTCCGGAGA--GAGCCTGAG---CGGCTACCA-CATCC-A--AAGGCAGCA-GCGCGCAAATTACCC-AATCCTGA---AGGGAGGTA-TGACAATAAATATCAATTCTGGGC-CACAT--GTCCGGTAATTGGAAT?AGTACAATGTAAA?CCCT-AAC-A???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGGTGTTTTTTTATGACTCCGC-AGCACCTCAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGA?TATGGTC?CAA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTATGGGT-GTGGTGCATG-CCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTC-GGTAACGAACGAGACCTCAGCCTGCTAAATAGTGACGTCTGCTTCGGCAGTCGCG-------CGCTTGTTAGAGGGACTGTTGGCG-TCTAGCCAATT--GGAAGTATGA?????????????????????????????????????????????????????????????????????????????????????????ACAGAGTCGGGTAATCTT-G-AAACT--ATCGT--TGGGA---AACATTGCAATTATTGTTCTTCAAC-AGGAATGCCTAGTAAG--CGAGTCATCATCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCTACCGATTGAACG-TGC--TGGTGAAGCGTTAGG--ACTGGAACTTTGGCCGGTCTCCTGCCCATTGTTTC----GGGAATTTCGTT-AACCCTCCC???????????????????????????????????????????????????????????????????????????CCATGAT?C?TCTGTGAAAGGTT??GAGTACGAGCG?TACCTGTTGGGACC??AAAGATGGTGAACTATG?CTGAGCA?GG?CGAAGCCAGAGGAAACTC?GGTGGAGGCTCGG?AGATGTGCT?ACGTGC?AATCG?CTTTTCGGACTTGGGTATA??GG????A?ACT?ATCGAACCATCGA?T??GGC?CTGGAAAGAGTTCTCTTTTCTTTTC?AACCAGGGG??A?G?A?CCTGGAATCGAGTC?TTCGGAG??ATAGGGTTC?GTGCCTGGT??AAGCACCACACGTCTCGTGGTGTCCGGCGCGCC?A?C?GA???GGTCCGTGA [2096] Ulothrix_zo ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GATAACCGTAGTAA-TTCTAGA-CTAATACGTGT-GTAAATCCCGACT?A--CG-AAGGGACGTATTTATTA?ATCCAAGAC?GAC-CGC---TTG-CACCTTT----GGTGAATCATA-TAACTTCACGAATCGCATGG-CCTTGTGC-GGC???????????????????????????????????????????????????????????????????????????GGAGTATTAGT?TTCTTTTCCGGAGA--CA-CCTGAG---C-GCTACCA--ATCC-GGAACGGCAG--GGCGC----AT--CCC-CTTCCT-----AG--AGAT-GTGACAATA-AT-AC-ATACTGC-C-CA---G-GTCYGGT?ATTGGAATGAGTACAATCTAAATCCCTTA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GCATT-GCCAAGGATGTTTTCATTGATCAACAA-GAAAGTTGGGGGCTC--------TYAGATACCG-TCG-AG-C-CAACCATAA-CGAYGCC-A--TAGG-AT-GGCGGGYGTTTTTTT--TG-CTCCGC-ACA-CCTTAT-GAGAAATCAAAGTYTTTGGGYTCCGGGGAG??TATGGTC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ATGG-TAGTTG---ATGGCCGTTCT--GTTGATGGGTCTGGCCTTC---TT-GATTCCGGTAA----CGA-ACY-YA-CC-GCTAAA-AGTTCCYTYGGCAGTTGGCA------------CACTT-TTAGAGGGACT-TTGGCG-TCT-GCCAAT---GGAAGTAT-A??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????G-GTT-ATTA---TCCCT-CCCTTTGTACA-AC--CCCGTC---CC--CCGATTGAATG--GC-GTAAAGATTTGCGGAATTGCT-TTCACGTTAGTTCCAAGCTCTTACCAC--------GAGAAGTT-ATT-AACCCTCCCA???????????????????????????????????????????????????????????????????????????????AT?CTTCTGTGAT?GGTTC?GAGTACGAGCAGTACCT?TTGGGACCC??AAGATGGTGATCTATGCCTGAGCAGGG??GAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGAT?TGCTG?CGTGC?AATCG?CTT?TCGGACTTGG??ATAGGGG?G?AAGACT?ATCGAAC?AT?????????CCTT?GGAAGAGTTCTCTTTTCTTTTT?AA?A?GCC???A?G?ACCC?GG?ATCG?GTC?TTCGGAG??ATAGGGTTCAGTGGCTGGT??AAGCATCGCACGTCT?GCGGT?TCTGGAGCGCT?ACC?A?C???GTCCTTGA [2032] Cympolia_barba ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TATGGGTTTGATTCCGGAGAGGGAGCTTGAGA-CTGGCTACCA-CATCCAAGG-AGGCAGC-GGCGCGAAAATTACCC-AATCTAGATATTGTGAGGTAGTGACAATAAATAACAATGTTGGACTTGTAAA-GTTTGGTAATTGTAATG------GAGTAA-TCC-TTGAAC???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AAAGCATTTGTCAAGGGTATCTTCATTGATCAAGAAC---AGTTGGGGGATCG--GATGATTAGATACCA-TCCTAGTCTCAACCATAAACCATGCCAA-TTAGGGATCGTTGAGC-GTTGATTAGTGACCTCGTCGGCACCATAT-TAGAAATTATAAATCTACAGGCTTGGGGGGGAA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TTTGAT-GC--TTTCTTGATTCT-TGGGTGGTGGTGCATGGCC-TTTTT-GTTCGTGGGTTGCCCTGTCTGGTT-GACTCCGTTAACGAACGAGATCTCAACCTACTAAATAGTATTACATCATTGTAGAAATATAT------ACCTTCTTAGGGGAACTATC-AGTT-CAAACCGAT---GGAAG??????????????????????????????????????????????????????????????????????????????????????????????????????GG?AATCTATG-CACATGCTTCGTGAT?AGGACGAATATTGGAATTGTT-ATTCTTTAACG--GAATGCCTAGTAAGTACCAGTCATCAACCGGTGTTGATTAT-GTCCCTGCTCTTTGT-CTCACCGCC-GTCGCTTGATCCGACGTTAC-AGT---TGGTGAACTGTTTGG--ATTATCCTTGTTCCGTGAAGACGTTACAGGTT---------GAAATTCGGTGAACC-----ACCTGTTAT?????????????????????????????????????????????????????TGTGTTAAGCACCGAGTTCT?CTTTTACGAAAAACTC?GAGTGTGAGCA?TGCCGTT?A?GATCT???AGATGGTGA?CTATACTTGGGTAG?A?TGTAGC?AGGAGAAATTCTGGTGGATGTTC?GAAAGTGTGC?GA?GTGC?AATCG?CTTCTCAAACCTGAGTTTAGGGGC???AGACTAATC?AACCA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2111] Batophora_oers ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGAGGTTGAGGGTTTGATTCCGGATT-GGA-CCTGAGA--CGGC--CC---YTTCC-GG--GGC-GC-GGCGC----ATY-CCC-AATC--GACATTGTGAG-T-GTG-CGACAAATAACAATGCCGGGC-TTATCAAGTTTGGTAATTGGAATGAGT--AACGTAAAYGCCTTA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGATCCAACTGCGAAAGCATTCC----GGGCGCTCTCGTTGATCAAGAAC---AGTTGGGGGATCGAAGATGATTAGATACCA-TCCTAGTCTCAACCATAAACTATGCCAA-Y-AGGGATCGGC-GGGGT-CTTTA-C-GTGTCCTCGTCGGCCCCTT-GAGAAA-CATAAATTTGGGCTCCGGG???TAGTATGGT??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TTTCTTGATT--A-GGGT--------ATGGCCATTCTTAGTTC-TGGGTTATCTTGTCTGGTT-GACTCCGTTAACCA---A-ACCTCAGCCT-CTAAA-A-CGGCCTCTCCTTAGGAGTGC----------CCCYTCYTA-A-GGAC--TCGGCG--CAA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????-???????????????????????????????AGCTTGCGTTGATTA----CCCTGCCCTYT--AC-CAC--CC-GTCGCTTGATCCTGTCTTGC-A-T----YGTGAAAAGTTTGG--AT--GYCTTCCGAAA?CGGTTACGCCTA-------------GAA-TTCTCTTAACC-----ACCT-TTA???????????????????????????????????????????????????????????????????????????????????????????????????????????????TGG?ACC????AGATGGT???CTATGCTTGGGTAGGA?CGAAG?CTGGGGAAACTCTGATGGAGGTCC?GAAGCT?TGCTGA?GTGCAAATCG?CTTCTCA?ACT?GAGTA?A?GGGC?AAA?ACTAA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2058] Codium_decort ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ATC-GGGTTTGGTTCCGGAGA--GAGCCTGAGGC-CGGCTACCA--CATCC-GGAAGGC-GC--GCGCGC-AATTACCC-AATCCCC--CGGGTGAGGT-GTGACGAGACATAACAACGACGTGC-TCAACGAGTGGG-TCGATGG--TG-GA--AACTTAAAATCCC-CA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CCTAAGCGAAAGCAGTCGCCAAGGACACTTCCTTGTGATCAAGA-CGAAAGTT--GGGATCGAAGATGATT--ATACCG-TCGTAGTCCCAACTGTAAACTATGCCAT-CTGGGGATCGG--GGCTG-ATGAATTGCCG-CCG-GCACCCTCCGA-GAAATTAAAAGATCTTGGGCTTCCGGGGAGC?TAGTGCTCAGTGTGGTG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCTTTCTTGATTCC-TGA-TGGTG-TGCATGGCCGATCTCAGCCG-TGGGTTGACCT-TCAGGTT-C-CTCCGGTAAY-Y-C-AGACCTCGACCTGCCAAATAGCACCGGCCCTTCCGATGGC-----------ACCTTCTTGGAGGGACTGGCGCGAGAGCCGGACGCG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GAATGCCTAGTA---CCGGGT--GGATCCCGCGACGATTGC-GTCCCTGCCCTTTGTACACAC-GCC-GTCGCT-GATACTGATGGCAG-AAC--TGG--AA--CCGGGG--ACGC-GCC?TTT??TGGGAGCCCCGCT------------AACCACTTTTCTAA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ACGGCGGCGGCGGG?AGAGTTCTCTTTTCTTGTT?GACGAGCT??AAGG?ACCCTGGAA?C???TC??CGGGA???ATAGGGTTTGACGGCAGGT??T?GCGCCGCCCC??G?TGCGC?GTCTGGCCC?C???C??????GGCGGTCC? [2091] Cladophoro ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TTGGACTAC-A-CCT-T--ACG-GTAGCGGAGGATTAGGGTTCGGATTCCGGAGGGGAGCCTG-GA--CGGCTACCA-CATCC-AGG-AGGCAGCAGGCGCGC--ATTACCC-AATCC-AAC--AGGGAGGT-GTG-C--GAAATAGCAAT--CGAGCATTT---CTCTG--CAATTGAAATGAGAA-AATTTAAACCACTTAAC-A---ATC???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGCGAAAGCA-TTGCCAAGGACGCTTTCATTA-GTCAAGGACGAAAGTCGGGGGATCGAAGACGATTAGATA-CG-TCGTAGTCTCGACCATAAACGATGCCAA-TTAGGGATTGGA-GGGCGGATAGATAT-CCTCCTCCAGCACCTTCC-GCGAAAGCAAAATTTATG?CTTC?GGGGGGAGTAT????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGATTGATAGCTCTTT-AAGATTTTTTGGATGGTG--GCATGGCCGTTCTTAGTTCGTGGATTGATTTGTCAGGTT-G-TTCCGG--ACGGA-G-GACCC--GCCTACTAACTAGCTCTACCTGAACTTCAGGTAGCC-------AGCTT-TTAGAGGGACTCTCGGAA-TGAAACCAA----GGAA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????C-ACGAGGAATGC-T-GT-AGCGCGAGTCATCAACTCGCGTTGATTAC-GTCCCTGCCGTTTGTACACACCGCCCGTCGCTCC-ACCGATTGGGTG-TGCG-T---GAAAT-TTCGG--ATTAGACAACCTACCGT?AGGG?GTCGT?T---------GAGAAGTTCATTAACCCTTCACC?AGAG?AA?????????????????????????????????????????????????????????????GCCAACCATGATGCTTTTGTG??AGGTTT?GAGC??GAGCG?CAGTCG?TAGGACCCGG??GATGGTGAACTATGCCTGGTGCACGACGAAGCGC??GGAAACGCCGGTGGAGGTCG?G?AGATGTGCT?ACGTGC?AATCG?CTTTTCAGACATGGGTATAGGGGC?AAAGACTAATCGAACCAT?GG?CA?TGGTCCGGG?AGAGTTGTCTTTTCTTTTT?AACA?GCTC?GCA???CCCTGGAATCAGATTATCTG?AG??AT?AGGGCTCAGAGCTGGT?AAAGCGTTGCAA??CTCGCAACGTCCCGAGCGCC?TC??CAC??GGCCCTTAA [2090] Blastophysa_rh ??????????????????????????????????????????????????????????????????????????????????????????????????????????TAC-TTGCTACTT---GGATAACC--AGTAA-TTCAGAAGCTAATACAT-C-GCGGATCCCAGACTTC-TGGAAGGGACGTATTTATTAGATAAAAGGCYGAC-CGGGC-TT---CCCGAGTGCAGGTGACT-ATGATAGACATCACACGAATC?????????????????????????????????????????????????????????????????GGCCTACCACGGTATCGACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGGGGGAGCCTGAGA-ACGGCTACCA-CAACCAAGGTAGG-AGCAGGCGCG---ATTACCC-AATCCTGAC-CGGGGAGGTAGTGACAATAAATAACAGTATCTGGC-TCT-CAGTCCG-ATGCTTGGAAT-A-TA-AATCTAAATCCCTTAAC-A????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CCGATAGACGAACCATCTGAAGATTTGCCAAGGATCGTTTTCTTTGATC------GAAAGTTGGGGGCTCGAAGATGATTAGATACCGGTCGTAGTCTCAACCATAAAC-ATGCCCA-CTA--GATCAGG-AG--ATTTAT-TTCGACTTCTCCGGCACTCCAT-GAGAAATCAAAGTCTTTGGGTTC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????T-TGCATGGCCGTTCTTAGTTGGTGGGTTGGCTTGTCAGGTT-GATTCCGGT-ACGAACGAGACCTCCGCCTGCTAAATAGCCACTCCGGGGGCCC---------------GGCTTCTTAGAGGGACTATGGCTCGAATAGGCCAT---GGAA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AC-TGCAATT-T--GGTCT-CAACG--GAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGT-C-C-CCGCC-GTCGCTCCTACC-ATT-GATG-TGC--TGGTGAAGCA-ACG---ACT-TGGA?CACCCTCGGGT?ATTTGC------------GGGAAATGTGTTAAACCCTCCCATCTA?A??????????????????????????????????????????????????????????????GACCGACCATGAT?CTTCTGAGAAAGGTTC?GAGTTGGAGCG?TGCCT?TTGGGACCC??AAGATGGTGAACTATGCCTGAGCA?GG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGATGTGCTGA?GTGCAAAT?G??T?TTCGGACTTGGGTATA?GGGCGAAAGACT?ATC?AACCAT??????????????GGAAGAGTTCTCTTTTCTTCTT?GA?GA?CCC?GAAG??CCCTGGAATCGGATCATCCGGAG??ATAGGCCCAT?TGGTCGGT?AAAGCACCGCACGT?T?GCGGTGT???ACGTTGC??????A????CCCCTTAA [2078] Trentepohlia ?????????????????????????????????????????????????????????CTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTC-ATTT-ATGGTGT-TT-CTACTC---GGATAACC--AGGAA-AACTAGAGCTAATACGTGC-GTAAATCCCGACCTCC---GAAGGGACGTATTTATTAGATAAGAGGCCGGAACGCGC-TTAGGCCCGCT--TCGGTGAATCATAATA-ACTTCAC--GAATCG---CTG-GTC---GAACYGA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ACGGAAGACGAACTTCTGCGAAAGCATTTG-CAAGGATGTTTTCATT-GATCAAGAA-GAAAGTCGG-GGCTCGAAGACGATTAGATACCG-TCGTAGTCTCGACCATAAACGATGCCGA-CTAGGGATCGGA-GG-TTTTTTTTA-TGACCTCTCCGG-ACCT--A-CAGAAATCAAAGTT--TGGGTTCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGTGCATGGCCGTTCTT-GTTGGT-GGTTGGCTTGT---GTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTA-CTTTCGGTT---CCCA-GC--------AACTTCTTA-A---ACTATTACATCA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????-?????????????????????????????????????CGTTGATTAT---CCCTGCC----GTAC-C-CC-CCCGT-GCTCCTTCCGATTGGGTG-TGG--TGGTGAAGAGTTCGG--ACTGGACCAGGCTAGCAATA--CCC--TTG--------GGGAAGTCCGTTTAAACCCTCCCTA??????????????????????????????????????????????????????????????????????????????TC?CTCACAT?ATATCTTT?T?ATTCATAAC?TACCT?TTGGGACCC??AAGATGGTGAACTATGCCTGATCAGG??CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTA?ATGTGCT?ACGTGCAAATCG?CTTTTCGGAATTGG???CA??G?????A?A??AATCGAACCATGCG?AT?GGTCCCGGGTAGAGTTATCTTTTCTACTT?AACGA?CCC?GAAG?GCCCT?GAATCGGATCATCCGGAG??ATAGGGCTCAGAGGTCGGT?ACAAGCGCCGCACATCACGTGCGTCCGGTGCGCC?ATC?GAC??GGTCCT??? [2085] Cephaleuro_par ???????C-TGTCTCAAAGA-TAAGCCATGCATGTCTAAGTATAA---GCTTTA-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTT-ATTTGATGGTG-TTTGTTACTC---GGATAACCGTAGGA----CTAGAGCTAATACGTGC-GTAAATCCCGA--TC---GGAAGGGA-G-ATTTATTAGATAAGAGGC-GAC-CGGGC-TT-GTCCCGCT--TCGGTGA-TC-TGATAACTCAACGA-TCG------CTG-GTCCGTGAACCGC????????????????????????????????????????????????????????????????????????????????????????????????GGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAA-GCAGCAGGCGCGC--ATTACCCAAATCCCAAGGT--GGAGGTGGTGG???GAAATAACGATGCTCCGGCCTCTG-GTCGGG?TAATCGGAATGAGAA--ATTTA??TCCCTTA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GTCGG-GGGCTCG-CG-CGCTT-GGTACCG-TCGTAGTCTCGACCATAAACGATGCCG--CTAGGGATCGGA-GGTGGGTTTTTTATG-CCTCTCCGGGCACCTTC-GAGAAATCAAAGTTGTTGGGTTCC?GGGGGAGTATGG????????????????????????????????????????????????????????????????????????????????????AAACTTACCAGGTCCAGACATGGT-AG-AT-GACAGATTGATAGCTCTTTCTTGGTTCTATGGGTGTGGGGGCATGGCCGTTCTTAGTTGGTGGGTTGGCTTGTCGGGTT-GATTCCGGGAACGAACGAGACCTCAGCCTGCTAAATAGTTGCCCCCGCCTCGGTGGGGGTCGA-----GACTTGTTAGAGGGACTATTAGCG-ATTTTCA--CTAATT--AA-T??????????????????????????????????????????CGCACGCGCGCTACACTGATGTATTCAACGAGTCTATAGCCTTGGCCGACAGGTCCGGGTAATCTTTG-AAATTTCATCGTGATGGGGATAGATCATTGCAATTGTTGGTCTTCAACGAGGAATTCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGACTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAATGGTCC---GGTGAAGTGTTCGG--ATTGCGGCGACGTGAGCGGTTCGCTGCCCGCGACGTTGTGAGAAGTCCACTGAACCTTATCATTTAGAGGAAGGA?????????????????????????????????????????????????????????GCTGCCATGAT?CTTCTGTG???GGTTC?GAGTAGGAGCG?G?CCTGTTGGGACCGGG??GATGGTGAACTATGCCTGATCAGG??CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGATGTGCT?ACGTGCAAATCG?CTTTTCGGAATTGGGTGT?????CGAAAGACTAATCGA?CCATGAG?TG?GTC???GGGTAGAGTT?TCTTTTCTGCTT?AACGAGCCC?GAAG?GC?CTGGAATCGGATCATCCGGAG??ATAGGGCTCAGAGGTGGGT??AGAGCGCCGCACATCACGTGC?TCGG?TGCGCC?ATC??AC????TCC???A [2099] Characium_vac TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACGGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC-TCTTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAATCCCGACTTA--TGGAAGGGACGTATTTATTAGATAAAAGGCCAGC-CGGGC-T-TGCCCGACCC-TAGGCGAATCATGATAACTTCACGAATCGCATGCCCTC-GTGGCGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCCGACACGGGGAGGTAGTGACAATAAATAACAATACTGGGCATTT--ATGTCTGGTAATTGGAATGAGTACAATGTAAATATCTTAACGA-GTATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGATGTGTTGTCGC-GGTCTGCC-TCT-GGTACGTACTGCGTTCGA---GCATCTTTCTGCTGGGGACGAG--CTCCTGGGCTTAATTGTCTGGG-ACTCGGAATC--AGCGAAGTGACCTTGAGCAAACAAGAGTGTTCAAAGCAAGC-CTACGCTCTGAATTTTTTAGCATGGAATCACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTAGGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCATTTGCCAAGGATGTTTTCATTGATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCAGGTGTTCAATTGATGACCCTGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACACGGGGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTGTGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTAAC--------------------------TACTTCTTAGAGGGACTATTGGCG-TTTAGTCAAT---GGAAGTGTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCATTCAACGAGCCTAT--CCTTGGCCGAGAGGTCCGGGTAATCTTTG-AAACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ACTGGCT--------------------------------GGGAAGAACATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2067] Dunaliella_par TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACCTT--TACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAAAAGGCCAGC-CGGGC-T-TGCCCGACTC-TTGGCGAATCATGATAACTTCACGAATCGCACGGC-TTCGTGCCGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCCAACACGGGGAGGTAGTGACAATAAATAACAATACCGGGCATTT--TTGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GTATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTGTAGC-GGTCAGCC-TTT-GGTGAGTACTGCTACGGC---CCACCTTTCTGCCGGGGACGTG--CTCCTGGGCTTAACTGTCCGGG-ACACGGAATC--GGCGAGGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAAGC-CTACGCTCTGAATACATTAGCATGGAATAACACGATAGGACTCTGG-CTTATCTTGTTGGTCTGTAAGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCAGGTGTTTCGTTGATGACCCTGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACACGGGGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTGTGGGTGGTGGTGCATGGC?GTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTACTAAATAGTCAC--------------------------GACTTCTTAGAGGGACTATTGGCG-TTTAGCCAAT---GGAAGTGTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCATTCAACGAGCCTAT--CCTTGGCCGAGAGGTCCGGGTAATCTTTG-AAACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTTGG--ACTG-GTT-------------------------------GGGAAGAACATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2066] Chlamyd_reinha TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GCACAACCCGACTTC--TGGAAGGGTCGTATTTATTAGATAAAAGGCCAGC-CGGGC-TCTGCCCGACCT-GCGGTGAATCATGATAACTTCACGAATCGTATGGGCTC-GTCCCGACGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAGATGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCCGACACGGGGAGGTAGTGACAATAAATAACAATACCGGGCGCTTC-GCGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGGTGGTGC-GGTCCGCC-TCT-GGTGTGCACTGCTCTGCT---CCACCTTCCTGCCGGGGACGGG--CTCCTGGGCTTCACTGTCTGGG-ACTCGGAGTC--GGCGAGGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACATTAGCATGGAATAACACGATAGGACTCTGG-CCTATCT-GTTGGTCTGTGGGACCGGA-GTAATGATTAAGAGGGGTAGTCGGGGGCATTCGTATTCCGTTGTCAGAGGTGAAATTCTTGGATTTACGGAAGACGAACATCTGCGAAAGCATTGGCCAAGGATACTTTCATTGATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCAGATGTTCTTTTGATGACTCTGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACACGGGAAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTGTGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAG--------------------------GACTTCTTAGAGGGACTATTGGCG-TTTAGCCAAT---GGAAGTATGAGGCGATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGACGCGACCAACGAGCCTAT--CCTTGGCCGAGAGGCCCGGGTAATCTT-GTAAACCGCGTCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGAGCT-------------------------------GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2069] Volvox_carteri TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GCACAACCCGACTTC--TGGAAGGGTCGTATTTATTAGATAAAAGGCCAGC-CGGGC-TTTGCCCGTTGA-ATGGTGAATCATGATAACTTCACGAATCGTATGGCCAC-GTGCCGACGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAGATGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCCGACACGGGGAGGTAGTGACAATAAATAACAATACCGGGCGCTTA-GCGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGGTGGTGC-GGTCCGCC-TCT-GGTGTGCACTGCTCTGCT---CCACCTTCCTGCCGGGGACGGG--CTCCTGGGCTTCACTGTATGGG-ACTCGGAGTC--GGCGAGGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACATTAGCATGGAATAACACGATAGGACTCTGG-CCTATCT-GTTGGTCTGTGGGATCGGA-GTAATGATTAAGAGGGGTAGTCGGGGGCATTCGTATTCCGTTGTCAGAGGTGAAATTCTTGGATTTACGGAAGACGAACATCTGCGAAAGCATTTGCCAAGGATACTTTCATTGATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCAGATGTTCTTTTGATGACTCTGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACACGGGAAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTGTGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAGCATGACTGCGGTGCGCA---------GACTTCTTAGAGGGACTATTGGCG-TTCAGCCAAT---GGAAGTATGAGGCGATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGACGCGACCAACGAGCCTAT--CCTTGGCCGAGAGGCCCGGGTAATCTT-GTAAACCGCGTCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGACTTTGACTGGGGCAACCTGGTCATGGTT------GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTACCGTAGGTGAACCTGCGGAAGGATCATTG?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2111] Chlorococc_min TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC-TATTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAAAAGGCCAGC-CGGGC-T-TGCCCGACCT-ATGGCGAATCATGATAACTTCACGGACCGCATGGCCTT-GTCGCGGCGGCGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCCGACACGGGGAGGTAGTGACAATAAATAACAATGCGGGGCCTA---TGGTCTTGCAATTGGAATGAGAACAATGTAAATATCTTAACGA-GTATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGACCACGC-GGTCTGCC-TCT-GGTACGTACTGCGCCTGG---CCACCTTTCTGCTGGGGACG-C--CTCCTGGGCTTCACTGTCTGGGGGGTGGGAGTC--AGCGAAGTGACCTTGAGCAAACAAGAGAGTTCAAAGCAAGC-CTACGCTCTGAATTTTTTAGCATGGAATCACACGATAGGACTGTGG-CCTATCTTGTTGGTCTGTGGGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAACACGAACATCTGCGAAAGCATTTGCCAAGGATGTTTTCATTGATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGCGTCCTTTTGATGACCCCGCCGGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGGAAACTTACCAGGTCCAGACACGGGGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTGTGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAC--------------------------GACTTCTTAGAGGGACTATTGGCG-TTTAGCCAGT---GGAAGTGTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCATTCAACGAGCCTAT--CCTTGGCCGAGAGGCCCGGGTAATCTTTG-AAACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCTACCGATTGAGTG-TGC--TGGTGAAGTGTTCGG--ACTTGCG--------------------------------GGGAAGAACATTAAACCCTCCCACTTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2065] Draparn_plum ????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTTACTC---GGATAACTGTAGTAA-TTCTA-AGCTAATACGTGCTTCAAGTCCCAACTTC--TGGAAGGG---TGGTTATAAGA-GTAAGGCCAA--ACGCT---CTCCCGATTT---GA-GAC-----ATAAGTCCACG-ATCGCA--GCCT--GGTGACGGGTGA??????????????????????????????????????????????????????????????????????CGGAGGATTAGGGTTCGGTTCCGGA-AGGGAGCCTGAGAAATGGCTACCA-CATCCAAGGAAGGCAGC-GGCGCGC-AATTACCC-AATCCTGACA--GGGAGGTAGT-ACAATAAATAACAATACCGGGCATTAA-ATGTCTGGTAATTGGA??GA?TAC?ATCTAAATCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AA???CGAAAGTT-GGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGG-ATCGGT?GGAGTTTTTTCGAT-ACTCCATGGGCACCTTAT-GAGAAATC-AAGTCTTTGGGTTCCGGGGGGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTC-GG-AACGAACG-GACCTCAGCCTGCTAAATAGTCACCTTCTCGCGGCAGGC-----------CACTTC--AGAGGGACTATTGCCG-TTTAGGC???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGAATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTACCGTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-T-C--TGGT-AAGCGTTCGG--A-TGAAGCGGTGGGACTCTCCTGCCCTCCC---------GAGAAGTTCGTTAAACCCTCCCACC????????????????????????????????????????????????????????????????????????CC?TGAT?CTTCTGTGAAAGGT???GAGTACGAGCA?TACCT?TTGGGACCC?AAAGATGGTGAACTATGCCTGAGCGAGG?CGAAGC?AGAGGAAACTCTGGT??AGGCTC?GTA?ATGTGCTGACGTGC?AATCG?CTTTTCGGACTTGGG?ATA????C???AGA?T?AT??AACCAT??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2098] Uronema_belk ?????????????????????????????????????????????????????????????????????????????????????????????GTTTATTTGATGATACCTT--TCCTC----GATAACCGT-GTA--TTCTAGAGCTAATACGTGC-GCAACTCCCGACTTC--TGG--GGGA-GTGTT-ATTAGATCT-AGGC-A------GC----TCCCGACA----GGTGA-TCATG-TAACTCCACGAATCGC--GGCC---GCGC???????????????????????????????????????????????????????????????????????????????????????????TTCGATTCCGGAGA--GAGCCTGAGGAACGGCTACCA-CATCC--GGAAGGC-GC---CGCGC--ATTACCC-AATCC-GA---GGGG-GG--GTGACAATAAATAACAATACCGGGCATTT--ATGTCTGGT--TTGGAATGAGTACAATCTAA??CCCTTAA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GAAAGCATTTGCCAAGT?TGTCTTCATTAATCAA-AA-GAAAGTTGGGGGCTCGAAGACGATTAGATACCG-T-GTAGTCTCAACCATAAACGATGCCGA-CTAGG-ATCGGTGGA--TTTTTT-----ACTCCGTGGGCACCTTAT-GAGAAATC--A-TCTTTGGGTTCCGGGGGGA-TAT?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TTCTATGG-TGGTG?TG?ATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTC?GGTAACGAACGAGACC-CAGCCTGCTAAATAGTCACC-----GCGGCAGGA-----------GACTT-TTAGAGGGACTATTGTC---TTAGGCAAT---GAAGTA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGTCTTCAAC-A-GAATGCCTAGTAAGCG--AGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCT-CCGATTGGGTG-TGT--GGGTGAAGCGCTCGG--AT?GGGGCGGTCGGAGTCTCCCACCCCCT----------GAGAAGTCCGTTAAACCCTCCCACCTA-AGGAA?????????????????????????????????????????????????????????????????????????????????????????GAGT?CGAGCA??ACCT?TTGGGACCC??AAGATGGTGAACTATG?CTGAGCA?GG?CGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGATGTGCTGACGTGCAAATCG?CTTTTCGGACTTGGGTATA???GCGAAA?ACT?ATC?AACCATGCA?TC?GGCCCTGGG?AGAGTTCTCTTTTCTTTTT?AAC?AGCT??GAAG?GCCCTGGAATCGAATCATTCGGA???ATAGGGCTCAGCA?CTGGT?AAAGCACCGCACGTCTCGCGGTGT?C?GCGCGC??GAT?GA???GGTCC?TGA [2050] Chlamydom_moew ??????????????????????????????????????????????????????????????????????????????ATTAAATCAGTTATAATTTATTTGATGGTAC-TTACTACTT---GGATAACCGTAGTAA-TTCTAGAGCTAATACATGCGGATAATCCCAACTTC--TGGAAGGGACGTATTTATTAGATAAAAGGCCAGC-CGTGC-T-TGCACGATCC-TGGTTGATTCATGATAACTTCACGAATCGCATGGCCTT-GTGCCGGC??????????????????????????????????????????????????????????????????ACGGCTGAC----AATCAGGGTTCGATTCCGG-GAGGGAGCCT-AG---CGGCT-CCA--ATCC--GGAAGGC-GC-?-CGCGT-AATTACCC-AATCC------GGGGAGGT--TGACAATAAATAACAATA-TCGGGCATCCAATGTCTGATAATTGGAATG??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGAAATTCTTGGATTTCGGAAAGACCTACCACTGCGAA?GCATTTGCCAAGGATGTTTTCATT?ATCAAGAA?GAAAGTAGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCTACCATAAACGATGCCGA-CCAGGGATTGGCAGGTGTTCCTTTGATGACCCTGCCAGCACCTTGA-GAGAAATCAGAGTCTTTGGGTTCCGGGGGGAGTATGG??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AGATT?AGAGCTCTTT?TTGATTCT-TGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCGGCGGTCCTTTCTGGATCGCCTC-----GACTTCTTAGAGGGACTATTGACGTT-TAGTCAAT---GGAAG??????????????????????????????????????????????????????????????????????????????????????????-?????????????????????????????????????????????????????????????????????????GGAATGCCTAGTAAGCGTGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACWYWC-GCCCGTYGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGCTTTGAGGGG-TGG-CAACTCCCCAG-AGCC---GAGAAGATCATTAAACCCTCCCACCTAGAG???????????????????????????????????????????????????????????TCGACCGACC?TAGAGCTTCTGCGAAAGGTTT?GAGTGCGAGCA?TA?ATGTTGGGACC????AGATGGTGAACTATGCCTGGGCAGGG?TGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGATGTGCTGACGTGCAAATCG?CTTTTCTGACCTGGGCATAGGGGCGAAAGACTAATCGAACCAT?CTAGTA???????????????????????????????CACCGCTC?GAAA?GCCCTGGAATCG?AT?ATTCGGAG??ATCGGGCTT?GCCGCTGGG?AAAGCCTCT?AGTTTTGA?GGTGTCCCGTGCGCC?GAT??AC??GATCCTT?A [2111] Stephanos_pl ???????????????????????????????????????????????????????????????????GCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACCTT--TACTC---GGATAACCGTAGTAA-TTCTAG-GCTAATACGTGC-GTAAATCCCGACTTC--TGGAAGGGA-GTATTTATTAGATAAAAGGCCAGC-GAGGC-TTGCTCGACTCTT-GG-CGAATCATGATAACTTGACGAATCGCATGGCCTG-GTAACGGGTGA???????????????????????????????????????????????????????????????????????CGG-GGATTAGGGTTCGATTCCGG-GAGGGAGCCTGAGAAACGGCTACCA-CATCC-AGGAAGGCAGCAGGCGCGC--ATTACCC-AATCCGAA---GGGGAGGTAGTGA-AAT-AATAACAATACCGGGCATTT--ATGTCTGGTAATTGGA-TGAGTACAATGTAAATAT???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCAGGTGTTTCGTTGATGACCCTGCCAGCACCTTAT-GAGAAATC--AGTTTTTGGGTTCC?GGGGGA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CTCTTTCTTGATTCT-TGGGTGGT-GTGC-TGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCACGGGACCTTGGTACACGCTT-------GACTT-TTAGAGGGACTATTGGCGTTACAGTCAAT---GGA???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCC-ACCGATTGGGTG-TGC--TGGTGAAGTGTTGGG--ATTGACTT--AGTGG-TGGGCA-CTCCA-TGTTGTT---GAGAACAACATTAAACCCTCCCACCTAGA--????????????????????????????????????????????????????GCACCATCGACCGACCATGAT?CTTCTGTGAAAGGTTT?GAGTGCGAGCA?TACCTGTTGGGACCC?AAAGATGGTGAACTATGCCTGAGCAAGG?TGAAGCCAGAGGAAACTCTGGTGGAGGCCT?GTAGATGTGCTGACGTGCAAATCG?CTTTTCTGACTTGGGTATAGGGGCGAA?GACTAATCGAACCAT????????????TGGGAAGAGTTCTCTTTTCT?TTT?AAC?AGC?CGGAAG?GCCCTGGAATCGAATC?TTCGGAG?AGTAGGGCCCAGCAGCTGGT?AAAGCACCGCACTTCTCGTGGTGTCCGGCGCGCT?AGT?CAC??GGTCCGTGA [2111] Carteria_rad ???????????????????????????????????????????????????????????????????GCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTAC-TTGGTACTC---GGATAACTGTACCAA-AG-TAGAGCTAATACGTGC-GTAAATCCCGACTCA--C-GAAGGGACGTATTTATTAGATAAAAGGCCAGC-CGGGC-T-TGCCCGACTTTT-GGCGACTCATGATAACTTCACGAATCGCATGGCCTG-GTAACGGGTGA???????????????????????????????????????????????????????????????????????CGGAGGATTAGGGTTCGATTCCGGAGA-GGAGCCTGAGAGATGGCTACCA-CATCCAAGGAAGGCAGCA-GCGCGC--ATTACCC-AATCCTAAC-CGGGGAGGTAGTGACAATAAATAACAATACTGGGCATTT--TTGTCTGGTAATTGGAATGAGTACAATCTAAATCC?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????AA-A--GAAA-TTGG-GGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCAGGCGTTTTGTTAACGACCCTGC-AGCACCTTAT--AGAAATC--A-TTTTTGGGTTCCGGGGGGA??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ACAGATTGAGAGCTCTTTCTTGATTCT-TGGGTGGT--TGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCACGATTGCTTTTTGGCAGTCGGCA----GACTTCTTAGAGGGACTATTGTCG-TTTAGGCAG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TCTT-AACGAGGAATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATCGGA-GTCCTTGGCTGG-CAACAGTTGAGGTTTCT--GAGAAGTTCATTAAACCCTCCC?????????????????????????????????????????????????????????????GCACCATCGACCGACCATGA?GCTTCTGC?AAAGGTTT?GAGTGCG?GTG?T?ACT?TTGGGACCC???AGATGGTGAACTATGCCTGAGCAGGG?TGAAGCCAGAGGAAACTCTGGTGGAGGCTC?GTAGATGTGCTGACGTGCAAATCG?CTTTTCGGACTTGGGTATAGGGGCGAAAGACTAATCGAACCATG?T?C??G?CCCCAGGAAGAGTTCTCTTTTCTTTTTCAAC?A?C?C?GAAG?GCCCTGGAATCGAAT??TTCGGAG??ATAGGGCTCAGAGGCTGGT??AAGCACCGCACTT?TCGCGGTGTCTGGCGCGTC?GAC?GAC??GGTCCTT?A [2122] Gonium_pecto ??????????????????????????????????????????????????????????????????????????GCTCATTAAATCAG-TATAGTTTATTTGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GCACAACCCGACTTC--TGGAAGGGTCGTATTTATTAGATAAAAGGCCAGC----GC-TTTGCCCGACT--GCGGTGAATCATGATAACTTCACGAATCGTATGGCCTG-GTAACGGGTGA???????????????????????????????????????????????????????????????????????CGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAGATGGCTACCA-CATC--AGGAAGGC----GGCGCGC--ATTACCC-AATCCGAC---GGGGAGGTAGTGACAATAAATAACAATACCGG--TC----GCGTCTGGTAATTGGA?TGAGT?CAATCTAAATCC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCAGATGTTCCTTTGATGACTCTGCCAGCACCTTAT-GAGAAATCAAA-TTTTTGG-TTCCGGGGGGAGGA?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGACAGATTGAGAGCTCTTTCTTGATTCTGTGGGTG-T--TGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAGCATCCTGCGGTGCGCA----------GACTT-TTAGAGGGACTATTGGCG-TTCAGCCAAT---GGA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ACGGAATGCCTAGTAAGCGCGAGTCATCAGCTCG-GTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGATC--GGCTGG---GGCAACTCGGCCTTGATT---GAAAAGTTCATTAAACCCTCCCAC???????????????????????????????????????????????????????????GCACCATCGACCGACCATGTTGCTTTTGCGAAAGGTT??GAGTGCGAGCA?TACCTGTTGGGACCC??AAGATGGTGAA?TATGCCTGAGCAAGA?TGAAGCCAGAGGAAACTCTGGTGGAGGTCTGGTAGATGTGCTGACGTGC?AATCG?CTTTTCTGACTTGGG?ATAGGGG????AGACT?ATCGAACCATGC??TC?GGCCCTGGG?AGAGTTCTCTTTTCT?TTT?AAC?A?CCC?GAAG?GC?CTGGAATCGAAT??TTCGGAG??ATAGGGCTCAGAGGTTGGT?AAAGCACCGCAGTTCTCGCGGTGTCCGGCGCGC??GTT?GA????GTCC??GA [2104] Chlorella_kess TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTTTA-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACCTTACTAC-C---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATTTAAGGCCGAC-CCGGC-TCTGCCGGTCTC-GCGGTGAATCATGATAACTTCACGAATCGCATGGCCTT-GCGCCGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGGGAGGTAGTGACAATAAATAACAATACCGGGCCTTTTCAGGTCTGGTAATTGGAATGAGTACAATCTAAACCCCTTAACGA-GGATCAATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGCTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGCGGGGCCTGCC-GGTCCGCCGTTTCGGTGTGCACTGGCAGGGC----CGCCTTGTTGCCGGGGACGGG--CTCCTGGGCTTCACTGTCCGGG-ACTCGGAGTC--GGCGCTGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACATTAGCATGGAATAACACGATAGGACTCTGG-CCTATCCTGTTGGTCTGTAGGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCGATGTCAGAGGTGAAATTCTTGGATTTTCGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATCGGCGGATGTTTCTTCGATGACTCCGCCGGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAC--------------------------GACTTCTTAGAGGGACTATTGGCG-A-TAGCCAAT---GGAAGCATGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCAATCAACGAGCCTAG--CCTTGGCCGAGAGGCCCGGGTAATCTTTG-AAACTGCATCGTGATGGGGATAGATTATTGCAATTATTAATCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGC???????????????????????????GC-C---AGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2099] Chlorella_vulg TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTTTA-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTAC-TTACTACTC---GGATACCCGTAGTAA-ATCTAGAGCTAATACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAAAAGGCCGAC-CGGGCTTCTGCCCGACTC-GCGGTGAATCATGATAACTTCACGAATCGCATGGCCTT-GTGCCGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTTTGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGGGAGGTAGTGACAATAAATAACAATACTGGGCCTTTTCAGGTCTGGTAATTGGAATGAGTACAATCTAAACCCCTTAACGA-GGATCAATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGCTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGACCTGCC-GGTCCGCCGTTTCGGTGTGCACTGGCAGGGC---TCACCTTGTTGCCGGGGACGGG--CTCCTGGGCTTCACTGTCCGGG-ACTCGGAGTC--GGCGCTGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACATTAGCATGGAATAACACGATAGGACTCTGG-CCTATCCTGTTGGTCTGTAGGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATCGGCGGATGTTTCTTCGATGACTCCGCCGGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAC--------------------------GACTTCTTAGAGGGACTATTGGCG-A-TAGCCAAT---GGAAGCATGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCATTCAACGAGCCTAG--CCTTGGCCGAGAGGCCCGGGTAATCTTCG-AAACTGCATCGTGATGGGGATAGATTATTGCAATTATTAATCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGC???????????????????????????GC-C--GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2102] Protothec_wic TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAA--TGGTT-A-TACTATGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC-TACTACTC---GGATACCCGTAGTAA-TTCTAGAGCTAATACGTGC-GCACATCCCGACTTC--TGGAAGGGACGTATTTATTAGATCCAAGGCCGAC-CGGGC-T-TGCCCGACTC-GCGGTGAATCATGATAACTTTACGAATCGCATGGCCTTTGTGCCGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATCAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGGGAGGTAGTGACAATAAATAACAATACCGGGCCT-CACAGGTCTGGTAATTGGAATGAGTACAACCTAAACACCTTAACGA-GGATCAATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGCTGCAGTTAAAAAGCTCGTAGTTGGATTTCGAGGTCGTCCTGCT-GGTCCGCCGTTTCGGTGTGCACTGGCGCGGC---GGTCTTTGTTGCTGGGGACGTG--CTCCTGGGCTTCACTGTCCGGG-ACTCGGAGTC--AGCGAGGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-TACCGCTCTGAATACATTAGCATGGAATAACATGATAGGACTCTGG-CTTATCTTGTTGGTCTGTAAGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGAC?AACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCCTAGTCTCAACCGTAAACGATGCCGA-CTAGGGATCGGCGGACGTTCTATCGATGACTCCGCCGGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTGCT--------------------------TACTTCTTAGAGGGACTATTGGCG-A-TAGCCAAT---GGAAGCTTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCATGCAACGAGCCTAG--CCTTGGCCGAGAGGCCCGGGTAATCTCAT-AACCTGCATCGTGATGGGGATAGATTATTGCAATTATTAATCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGC???????????????????????????GC-C--GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2097] Chlorella_prot TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTGAGTATAACCTG-TTTACTACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC-TGCTACTG---GGATACCCGTAGTAA-TTCTAGAGCTAATACCTGC-GCAAACCCCGACTTTGGTGGAAGGGGTGTATTTATTAGATCCAAGGCCGAC-CGGGC-TC-GCCCGACTC-GCGGTGACTCATGATAACTTTACGAATCGCATGGTCTCTGCACCGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTT-GTCGGTAGGATAGAGGCCTACCGAGGTGTTCACGGGTGACGGAGGATCAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGGGAGGTAGTGACAATAAATAACAATACCGGGCCT-CACAGGTCTGGTAATTGGAATGAGTACAATCTAAACCCCTTAACGA-GGATCAATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGCTGCAGTTAAAAAGCTCGTAGTCGAACTTCGGGGGGCCCGGGCC-GGTCCCCCCGCCCTCTGCGCACTGGCATGGCG--CCCCCCTGTTGCTGGGGACGGCG-CTCCTGGGCTTTGCTGTCCGGG-GCCCGGAGTC--AGCGAGGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-ATCCGCTCTGAATACATTAGCATGGAATAACATGATAGGACTCTGG-CTTATCACGTTGGTCTGTAAGACCGGA-GTAATGATTGAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTGATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCCTAGTCTCAACCGTAAACGATGCCGA-CTCGGGATCGGTGGTCGTTCATTCAATGACACCACCGGCACCTCAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTTTT--------------------------AACTTCTTAGAGGGACTCTCGGCG-A-TAGCCGAG---GGAAGCTTGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACAATGATGCGGTCAACGAGCCCAG--CCTTGGCCGACAGGCCCGGGTAATCTCGC-AACCCGCATCGTGATGGGGATAGATCATTGCAATTATTGATCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGAGTG-TGC--TGGTGAAGTGTTCGG--ATTGGC???????????????????????????GC-C--GAGAAGTTCATTAAACCCTCCCACTTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2103] Chlorella_min TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTTTA-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GCAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATATAAGGCCGAC-CGGGC-TCTGCCCGACTC-GCGGTGAATCATGATAACTTCACGAATCGCATGGCCTC-GTGCCGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGGGAGGTAGTGACAATAAATAACAATACCGGGCCT-TTCAGGTCTGGTAATTGGAATGAGTACAATCTAAACCCCTTAACGA-GGATCAATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGCTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGGCACGTC-GGTCCGCCGTTTCGGTGTGCACTGGCGGGGC---CCACCTTGTTGCCGGGGACGGG--CTCCTGGGATTCA-TTTCCTGGGACTCGGAGTC--GGCGAGGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACATTAGCATGGAATAACACGATAGGACTCTGG-CCTATCCTGTTGGTCTGTAGGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATCGGCGGGTGTTCTTTTGATGACCCCGCCGGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAC--------------------------GACTTCTTAGAGGGACTATTGGCG-A-TAGCCAGT---GGAAGCATGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCATTCAGCGAGCCTAG--CCTTGACCGAGAGGTCCGGGTAATCTTTG-AATCTGCATCGTGATGGGGATAGATTATTGCAATTATTAATCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGC???????????????????????????GC-C--GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2100] Neochloris_aqu TCATATGCTTGTCTCAAAGATTAACCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC-TCCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAAACCCGACTTC--TGGAAGGGTCGTATATATTAGATAAAAGACC-AG-CCGGAC-TTTGTCCGACCCGCGGTGACTCATGATATCTTCACGAATCGCATGGCCTT-GTGCACGGCATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGGGAGGTAGTGACAATAAATAACAATACCGGGCACATC-GTGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GTATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GGTCCGCC-TAT-GGTGAGTACTGCTATGGC---CTTCCTTTCTGCCGGGGACGGG--CTCCTGGGCTTAACTGTCCGGG-ACTCGGAGTC--GGCGTTGTTACTTTGAGTAAATTGGAGTGTTCAAAGCAAGC-CTGCGCTCTGAACATTTTAGCATGGAATAACACGATAGGACTCTGG-CCTATCCTGTTGGTCTGTAGGACCAGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGACGTTTCATTGATGACTCCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAC--------------------------GACTTCTTAGAGGGACTATTGGCG-TTTAGTCAAT---GGAAGTATGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCGTTCAACAAGCCTAT--CCTTGACCGAGAGGTCCGGGTAATCTTTG-AAACCGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGCC??????????????????????????????--AAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2099] Neochloris_vig TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC-TCCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAAACCCGACTTC--TGGAAGGGTCGTATATATTAGATAAAAGACC-AG-CCGGAC-TTTG????GCCCGCGGTGACTCATGATATCTTCACGAATCGCATGGCCTT-GTG????CGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGGGAGGTAGTGACAATAAATAACAATACCGGGCACATC-GTGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GTATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GGTCCGCC-TCT-GGTGAGTACTGCTATGGC---CTTCCTTTCTGCCGGGGACGG---CTCCTGGGCTTGACTGTCCGGG-ACTCGGAGTC--GGCGTTGTTACTTTGAGTAAATTGGAGTGTTCAAAGCAAGC-CTGCGCTCTGAACATTTTAGCATGGAATAACACGATAGGACTCTGG-CCTATCCTGTTGGTCTGTAGGACCAGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTT-CATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGACTCAACCATAAACGATGCCGA-CTAGGGATTTGCGGACGTTTCATTGATGACTCCGCCAGCACCTTGT-GAGAAATCAAAGTTTTTGGGT--CGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGT???--------------------------GACTTCTTAGAGGGACTATTGGCG--TTAGTCAATT--GGAAGTATGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCGTTCAACAAGCCTAT--CCTTGACCGAGAG---CGGGTAATCTTTG-AAACCGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGC???????????????????????????GC-C--AACAAGT-CATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2090] Pediastrum_dup TCATATGCTTGTCTCAGAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACCTT-CTACTC---GGATACCCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAAACCCGACTTC--TGGAAGGGTCGTATATATTAGATAAAAGGCCGAGCCG??C-TTTGTCCGACCC-GCGGTGAATCATGATATCTTCACGAATCGCATGGCCTT-GCGCCGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGATACGGGGAGGTAGTGACAATAAATAACAATACTGGGCACTTC-GTGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GTATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GGTCCGCC-TAT-GGTGAGTACTGCTACGGC---CTCCCTTTCTGCCGGGGACGAG--TTGCTGGGCTTCACTGTCCGGT-GCTTGGAGTC--GGCGTTGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAACG-ATACGCCCTGAATACTTTAGCATGGAATAACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTAGGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGATGTTTTTTTGATGACTCCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATAGGCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAC--------------------------GACTTCTTAGAGGGACTATTGGCG-TTTAGTCAAT---GGAAGTATGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGGGCCGCACGTGCGCTACACTGATGCATTCAACGAGCCTAT--CCTTGACCGAGAGGTCCGGGTAATCTTTG-AAACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGCC??????????????????????????????--GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2101] Scenedesm_obl TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGGTGGTACCTTACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATATATTAGATAAAAGGCCGAC-CGAGC-TTTGCTCGACCC-GCGGTGAATCATGATATCTTCACGAAGCGCATGGCCTT-GTGCCGGCGCTGTTCCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGATACGGGGAGGTAGTGACAATAAATAACAATACCGGGCATTTT-ATGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GGTCCGCC-TAT-GGTGAGTACTGCTATGGC---CTTCCTTTCTGTCGGGGACGGG--CTTCTGGGCTTCACTGTCCGGG-ACTCGGAGTC--GACGTGGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-TTACGCCA-GAATACTTTAGCATGGAATAACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTAGGACCGGA-GTAATGATTAAGAG?GACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGAATGTTTTTTTAATGACTTCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCTC--------------------------GACTTCTTAGAGGGACTATTGGCG--TTAGTCAAT---GGAAGTATGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCATTCAACAAGCCTAT--CCTTGACCGAAGGGTCTGGGTAATCTTTG-AAACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGC???????????????????????????GC-C--GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2097] Characium_hin TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACCTT-CTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAAACCCGACTTC--TGGAAGGGTCGTATATATTAGATAAAAGGCCGAC-CGGGC-TTGCCCGACCC--GCGGTGAATCATGATATCTTCACGAATCGCATAGCCTT-GTGCTAGCGA-GTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACGGGGAGGTAGTGACAATAAATAACAATACCGGGCACATC-GTGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GTATCAATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GGTCCGCC-TAT-GGTGAGTACTGCTATGGC---CTTCCTTTCTGCCGGGGACGGG--CTCCTGGGATTAACTTATCGGG-ACTCGGAGTC--GGCGTTGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAAGC-CTGCGCTCTGAATACTTTAGCATGGAATAACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTAGGACCAGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGAACGTTTCATTGATGACTTCGCCAGAACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCCG--------------------------GACTTCTTAGAGGGACTATTGACG-TTTAGTCAAT---GGAAGTATGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCATTCAACGAGCCTAT--CCTTGGCCGAGAGGTCCGGGTAATCTTTG-AAACTGCATCGTGATGGGGCTAGACTTTTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAAGCGCGATTCATCAGATCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGCC??????????????????????????????--AAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2097] Chlorella_fus TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGGTGGTACCTTACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATATATTAGATAAAAGGCCGAC-CGGGC-TT?GCCCGACCC-GCGGTGAATCATGATATCTTCACGAAGCGCATGGCCTT-GCGCCGGCGCTGTTCCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGATACGGGGAGGTAGTGACAATAAATAACAATACCGGGCATTTC-ATGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTTCTAGC-GGTCCGCC-TAT-GGTGAGTACTGCTATGGC---CTTCCTTTCTGTCGGGGACGGG--CTTCTGGGCTTAATTGTCCGGG-ACTCGGAGTC--GACGTGGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-TTACGCCCTGAATACTTTAGCATGGAATAACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTAGGACTGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGAATGTTTTTTTAATGACTTCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCCT--------------------------GACTTCTTAGAGGGACTATTGGCG--TTAGTCAAT---GGAAGTATGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCATTCAACAAGCCTAT--CCTTGACCGAAAGGTCCGGGTAATCTTTG-AAACTGCATCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGC???????????????????????????GC-C--GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTCTCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2098] Ankistrodesmus TCATATGCTTRTCTCAAAGATTAAGCCATGCATGTC?AAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC--TCTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GCAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAAAAGGCCGAC-CGGGC-TCTGCCCGACCC-GCGGTGAATCATGATAACTTCACGAATCGCATAGCCTC-GTGCTGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGATACGGGGAGGTAGTGACAATAAATAACAATACCGGGCWTTCA-ATGTCTGGTAATTGGAATGAGTACAATTTAAATCCCTTAACGA-GGATCCATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTAGGTTCCATC-GGTCCGCC-TAT-GGTGAGTACTGCTGTGGC---CTTCCTTTTTGCCGGGGACGGT--CTCCTGGGCTTCACTGTCCGGG-AATCGGAGTC--GGCGATGATACTTTGAGTAAATTAGAGTGTTCAAAGCAAGC-CTACGCTCTGAATACTTTAGCATGGAATATCGCGATAGGACTCTGG-CCTATCTCGTTGGTCTGTAGGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCGTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGAGGATGTTCTTTTGATGACTTCTCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAC--------------------------GACTTCTTAGAGGGACTGTTGGCG--TTAGCCAAC---GGAAGTATGAGGCAATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCAC-CGCGCTACACTGACGCATTCAACGAGCCTAT--CCTTGACCGAGAGGTCTGGGTAATCTGTG-AAACTGCGTCGTGATGGGGATAGATTATTGCAATTATTAGTCTTCAACGAGGAATGCCTAGTAGGCGCGATTCATCAGATCGCGCCGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGC???????????????????????????GC-C--GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2095] Pseudotreb_gig ??????????????????????????????????????????????????????????????????????????????????????????????????TTTGATGGTGCCTTACT-CTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GCACATCCCGACTCC----GAAGGGA-G--TTTATTAGATAAAAGGC-GAG-CCGGG-GC--CCCGAGAC-GCGGTGAATCA-GATAAC--CACGAATCG--TAGCCTT-GTGCCGC???????????????????????????????????????????????????????????????????????????????GGATTAGGGTTCG?TTCCGGAGAGGGAGCCTGAG---CGGCT-CCA-CATC---GGAAGGCAGC--GCGC-C--ATTACCC-AATCCTG-T-CAGGGAGGTA-TGACAATAAATAACAATACCGGGCTTTTTCAAGTCTGGTAATTGGAT????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATC--GAA-GAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGTGTTCTTTCGATGACCCCGCCAGCACCTTAT-GAGAAATC--AGTTTTTGGGTTCCGGGGGGAGTATGG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GCCGTTCTTAGTTGGTGGG-TGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCACGGCTGCTTTYCAGTCGGCA-------GACTT-TTAGAGGGACTTTTGGCG-ACTAGCCAAA---GGAAGTGTG??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????CCTAGTAAGCG--AGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACAC-GCCCGTCGCTCCTACCGATTGGGTG-TGC--T-GTGAAGCGTTCGG--ATTGCGTTAGTCGGGTTTTCCGCCTCCTCTCACT-----GAGAAGTTCGTTAAACCCTCCCACCT-GAG-A??????????????????????????????????????????????????????????????????????????????????????????????????????????????GGG?CCC????GATGGTG??CTATG?CTGAGC??GG?C?AAGCCAGAGGAAACTCTGGTG?AGGCTC?G?AGATGTGCTGACGTGC??ATCG?CTTTTCGGACTTGGG??TA??GGCG??AGACTAATCGAACCAT??????????????GG?AGAGTTCTCTTTTCT?TTT??AC?AGCT??GAAG?GCCCTGGAATCGGCT?ATCCGGAG??A?AGGGCCCA?AAGCTGGT??AAGCACTGCACTTCTCGGCAGTGTCCGGAGCCC?ACC?GAC??GGCCC?TGA [2098] Pleurastr_terr ????????????????????????????????????????????????????????????????????????????????????TCAGTTATAGTTTATTTGATGGTACACTACTACTC---GGATAACCGTAGTAA-TTCTAGGGCTAATACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAAAAGGCCGAC-CGGACTC-G-TCCGACCC-GCGGTGAA-CCTGATAACTTCACGAATCGCATGGCCTT-GC-CC???????????????????????????????????????????????????????????????????????????????????ATTAGGGTTCGATTCCGG-GAGGGAGCCTGAG---CGGCTACCA-CATCCA-GGAAGGCAGC--GCGCGC--ATTACCC-AATCCTGA---GGGGAGGTAGTGACAATAAATAACAATACCGGGCATTTA-ATGTCTGGTAATTGGAATG???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GAAAGTT-GGGGCTC-AAGWCGATT-GATACCG-T--TAGWCTCAAY--TA-WCGATGCC-A--TAGG-ATTGTGCCGATGTTTATTCAATTACTCCGCCACACCTYAT-GA-AAATC-AAGWWTTT---TTCC??GGGGAGTATG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TGGTGCATGGCCGTTCTTAGTTGGT?GGTTGCCTTGTCAGGTT-GATTCCGGTAACGAAGGAGACCTCAGCCTGCTAAATAGTC-CTAATCTTCTCGCGGTTAGCT------GACTT?TTAGAGGGACTATTGGCG-TTT-GTCAAT---GGAA-TAT??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GTCTTCAACGAGGAATGCCTAGTAAGCG--AGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAAAGTTTGG--ACTGGCGGTAGGCGGGTGGTTCGCCATCTGCTGCTGCC-GGGAAATTCTTTAAACCCTCCCACCTAGAG-AA????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GGCC?TGGG?AGAGTTCTCTTTTCT?TTT??AC?AGC?C?GAAG?GCCCTGGAATCGAATC??TCGGAG??A?AGGGCTCAGAAGCTGGT?AAAG??C?GCA?GTCT?GCGGT?GTC?GCGCGC??GAT??AC??GGTCC?TGA [2107] Characium_per TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAATCCCGACTTC--TGGAAGGGACGTATTTATTAGATAAAAGGCCGAC-CGGGC-T-TGCCCGACTC-GCGGTGAATCATGATAACTTCACGAATCGCACAGCCTT-GTGCTGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAACGTAGTGGGTTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATACTGACACAGTGAGGTAGTGACAAAAAATATCGATGGTGGGCTCTTTCGAGTTTGCCAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCAATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGCGGAGCC-GATCTGCCCTTTGGGTATGCATTGGCTTTGC---CTATCTTGCTGCCGGGGA-GGCG-CTCCTGGGCTTCATTGCTCGGG-ACGTTTAGTC--GGCGAGGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTTTGCATACATCAGCATGGAATATCACGAGAGGACTCTGG-CCTATCTTGTTGGTCTGTGGGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGACGTTCATTCGATGACTCCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTC-C--------------------------GACTTCTTAGAGGGACTTTCGGCG-TTTAGCCGAA---GGAAGTGTGAGGCGATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGACGCATTCAACGAGTCTAT--CCTTGGCCGAGAGGTCCGGGTAATCTGAG-AAACTGCGTCGTGACGGGGCTAGATTATTGCAATTATTAATCTTCAACGAGGAATGCCTAGTAAGCGCAAGTCATCAGCTTGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATCGGCT??????????????????????????????--GAGAAGTTCATTAAACCCTCCCACCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2100] Parietochl_pse TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTT-A-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC-TACTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GCACATCCCGACTTC--TGGAAGGGACGTATTTATTAGATTAAAGGCCGAC-CGGGC-TCTGCCCGACTC-GCGGTGACTCATGATAACTTCACGAATCGCAT-GCCTTCGTGCCGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTAGGATAGAGGCCTACCATGGTGGTAACGGGTGACGGAGGATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGGGAGGTAGTGACAATAAATAACTATGCTTGGCTC-TTCGAGTCGGGCAATAGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCAATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGTCGCGCC-GGTCCGCCGTTTCGGTGTGCACTGGCGTGGC---CCACCTTGCTGCCGGGGACGGG--CTCCTGGGCTTCACTGTCCGGG-ACTCGGAGTC--GGCGAGGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACATTAGCATGGAATAACACGATAGGACTCTGG-CCTATCTTGTTGGTCTGTGGGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTACTGCGAAAGCATTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGATGTTTTATCGATGACTCCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAAAGGGCAGCCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATGTGAAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTTCGATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAC--------------------------GACTTCTTAGAGGGACTCTCGGCG-ACTAGCCGAT---GGAAGTGTGAGGCGATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCATTCAACGAGCCTAG--CCTTGGCCGACAGGCCCGGGTAATCTTGC-AAACTGCATCGTGATGGGGCTAGATTATTGCAATTATTAATCTTCAACGAGGAATGCCTAGTAAGGCCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGGTG-TGC--TGGTGAAGTGTTCGG--ATTGGCC??????????????????????????????--GAGAAGTTCATTAAACCCTCCCACCTAGAGTAAGCAGAAGTCGTAACAAGGTTTCCGTAG????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? [2104] Friedmannia_is TCATATGCTTGTCTCAAAGATTAAGCCATGCATGTCTAAGTATAAACTGCTTTA-TACTGTGAAACTGCGAATGGCTCATTAAATCAGTTATAGTTTATTTGATGGTACC--CTTACTC---GGATAACCGTAGTAA-TTCTAGAGCTAATACGTGC-GTAAACCCCGACTTC--TGGAAGGGGCGTATTTATTAGATAAAAGGCCGAC-CGGGC-TTTGCCCGACTC-GCGGTGAATCATGATAACTTCACGAATCGCATGGCCTT-GTGCCGGCGATGTTTCATTCAAATTTCTGCCCTATCAACTTTCGATGGTTGGATAGAGGCCAACCATGGTGGTAACGGGTGACGGAGAATTAGGGTTCGATTCCGGAGAGGGAGCCTGAGAGACGGCTACCA-CATCCAAGGAAGGCAGCAGGCGCGCAAATTACCC-AATCCTGACACAGGGAGGTAGTGACAATAAATAACAATACCGGGCTTTTTCAAGTCTGGTAATTGGAATGAGTACAATCTAAATCCCTTAACGA-GGATCAATTGGAGGGCAAGTCTGGTGCCAGCAGCCGCGGTAATTCCAGCTCCAATAGCGTATATTTAAGTTGTTGCAGTTAAAAAGCTCGTAGTTGGATTTCGGGTGGGCGCTACC-GGTCCGCCGATTCGGTGTGCACTGGTCGCGC---CCATCTTGCTGCCGGGGACAGG--CTGCTGGGCTTAACTGTCTGGC-ACCTGGAGTC--GGCGAGGTTACTTTGAGTAAATTAGAGTGTTCAAAGCAGGC-CTACGCTCTGAATACATTAGCATGGAATAACACGATAGGACTCTGG-CCTATCTCGTTGGTCTGTGGGACCGGA-GTAATGATTAAGAGGGACAGTCGGGGGCATTCGTATTTCATTGTCAGAGGTGAAATTCTTGGATTTATGAAAGACGAACTTCTGCGAAAACGTTTGCCAAGGATGTTTTCATTAATCAAGAACGAAAGTTGGGGGCTCGAAGACGATTAGATACCG-TCCTAGTCTCAACCATAAACGATGCCGA-CTAGGGATTGGCGGGTGTTCTATCGATGACCCCGCCAGCACCTTAT-GAGAAATCAAAGTTTTTGGGTTCCGGGGGGAGTATGGTCGCAAGGCTGAAACTTAAAGGAATTGACGGAA-GGGCA-CCACCAGGCGTGGAGCCTGCGGCTTAATTTGACTCAACACGGGAAAACTTACCAGGTCCAGACATAGTGAGGATTGACAGATTGAGAGCTCTTTCTTGATTCTATGGGTGGTGGTGCATGGCCGTTCTTAGTTGGTGGGTTGCCTTGTCAGGTT-GATTCCGGTAACGAACGAGACCTCAGCCTGCTAAATAGTCAC--------------------------GACTTCTTAGAGGGACTTTTGGCGCCTTAGCCAAA---GGAAGTGTGAGGCGATAACAGGTCTGTGATGCCCTTAGATGTTCTGGG-CCGCACGCGCGCTACACTGATGCAATCAACGAGCCTAT--CCTTGACCGACAGGTCCGGGTAATCTTTG-AAACTGCATCGTGATGGGGATAGATTATTGCAATTATTAATCTTCAACGAGGAATGCCTAGTAAGCGCGAGTCATCAGCTCGCGTTGATTAC-GTCCCTGCCCTTTGTACACACCGCCCGTCGCTCCTACCGATTGGATG-TGC--TGGTGAAGTGTTCGG--ATTGGCC??????????????????????????????--GAGAAGTTCTCTAAACCCTCCCATCTAGAGGAAGGAGAAGTCGTAACAAGGTTTCCGTAG????????????????????????????????????????????????????????????????????????????????????????????AGATGGTG??CTATGCCTGAGC??GG?CGAAGC?AGAGGA???TCTGGTGGAGGCTC?G?AGATGTGCTGACGTGC?AATCG?CTTTTC?GACTTGG???TAGGGGCGAAAGACTCATC?AACCAT??????????????GG?AGAGTTCTCTTTTCTTCTT?AACAA?CCC?GAAG?G?CCTGGAATCGGCTCATCCGGAG??ATAGGGCTC?GAGGTT?GT?AAAGCACTGCACT????GCAGT?TCCGGAGCGCC?ATT?GAG?CGGCCCTTGA [2103] ; END; BEGIN CODONS; GENCODE UNIVNUC ; END; BEGIN ASSUMPTIONS; OPTIONS DEFTYPE=unord PolyTcount=MINSTEPS ; EXSET gaps+unalignsites = 50-55 110-122 171-176 214-220 228-232 267-280 482-489 657-663 676-690 699-713 729-731 737-743 782-785 1362-1391 1416-1429 1691-1695 1709-1755; EXSET LSU = 50-55 110-122 171-176 214-220 228-232 267-280 482-489 657-663 676-690 699-713 729-731 737-743 782-785 1362-1391 1416-1429 1691-1695 1709-1755 1834-2179; EXSET SSU = 1-1833; TAXSET landplants=3-14 17 18; TAXSET chlorophytes_s.l.=19-61; TAXSET LSU_only=3-4 7-10 12-33 39-44 57 58 61; END; BEGIN MACCLADE; v 3.0 -1322665249 1000&/0 0 0 END; tv-0.5/treeorder_dialog.h0000775000076400007640000000235007745532142012441 00000000000000/* * TreeView * A phylogenetic tree viewer. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: treeorder_dialog.h,v 1.2 2003/10/22 16:46:26 rdmp1c Exp $ #ifndef TREEORDER_DIALOGH #define TREEORDER_DIALOGH #include class TreeOrderDlg : public wxDialog { public: TreeOrderDlg (wxWindow *parent); int GetTreeOrder () { return radio_buttons->GetSelection(); }; void SetTreeOrder (int n) { radio_buttons->SetSelection(n); }; private: wxRadioBox *radio_buttons; }; #endif tv-0.5/tv.spec.in0000775000076400007640000000176307662677070010707 00000000000000%define name tv %define version @VERSION@ %define release 1 Summary: TreeView X. Name: %{name} Version: %{version} Release: %{release} Source: http://darwin.zoology.gla.ac.uk/~rpage/treeviewx/%{name}-%{version}.tar.gz Vendor: Roderic D. M. Page URL: http://darwin.zoology.gla.ac.uk/~rpage/treeviewx/ License: GPL Group: Sciences/Biology BuildRoot: %{_builddir}/%{name}-buildroot Prefix: %{_prefix} Requires: wxGTK >= 2.4.0 BuildRequires: wxGTK-devel >= 2.4.0 %description Phylogenetic tree viewer. %prep %setup -q %build if [ -x ./configure ]; then CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix} else CFLAGS="$RPM_OPT_FLAGS" ./autogen.sh --prefix=%{_prefix} fi make %install rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install %clean rm -rf $RPM_BUILD_ROOT %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %files %defattr(-,root,root) %doc AUTHORS ChangeLog COPYING INSTALL NEWS README %{_bindir}/* %changelog * Wed May 21 2003 R. D. M. Page - First draft of the spec file tv-0.5/treeorder_dialog.cpp0000775000076400007640000000402410206434544012765 00000000000000/* * TreeView * A phylogenetic tree viewer. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: treeorder_dialog.cpp,v 1.2 2005/02/21 19:41:24 rdmp1c Exp $ #include "treeorder_dialog.h" TreeOrderDlg::TreeOrderDlg (wxWindow *parent): wxDialog (parent, -1, wxT("Tree Order"),wxDefaultPosition, wxSize(185,185)) { // Top sizer wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); // Radiobuttons wxString *choices = new wxString[4]; choices[0] = wxT("Default"); choices[1] = wxT("Alphabetical"); choices[2] = wxT("\"Ladderise\" left"); choices[3] = wxT("\"Ladderise\" right"); radio_buttons = new wxRadioBox (this, -1, wxT("Order"), wxDefaultPosition, wxDefaultSize, 4, choices, 1, wxRA_SPECIFY_COLS); topsizer->Add (radio_buttons, 0, wxALIGN_CENTER); // Bottom panel has OK and Cancel buttons wxBoxSizer *okcancel_sizer = new wxBoxSizer( wxHORIZONTAL ); wxButton *ok_button = new wxButton( this, wxID_OK, wxT("OK") ); ok_button->SetDefault(); okcancel_sizer->Add (ok_button, 0, wxALL, 10 ); okcancel_sizer->Add( new wxButton( this, wxID_CANCEL, wxT("Cancel") ), 0, wxALL, 10 ); topsizer->Add( okcancel_sizer, 0, wxALIGN_CENTER ); SetAutoLayout( TRUE ); SetSizer( topsizer ); topsizer->Fit( this ); topsizer->SetSizeHints( this ); } tv-0.5/configure.in0000775000076400007640000000512111432544612011257 00000000000000# $Id: configure.in,v 1.19 2005/08/31 14:08:28 rdmp1c Exp $ dnl Process this file with autoconf to produce a configure script AC_INIT(tview.cpp) AM_INIT_AUTOMAKE(tv, 0.5) AC_PROG_CXX AC_LANG_CPLUSPLUS AC_PROG_INSTALL #AC_ARG_PROGRAM # We need ranlib to make the library, and we need to define make AC_PROG_RANLIB AC_PROG_MAKE_SET # Ensure that we set ENT (and set it to false). This flag affects # the Makefile for TreeLib AM_CONDITIONAL(ENT, false) dnl We need wxWindows to be installed AC_PATH_PROG(WX_CONFIG, wx-config, no) if [[ "$WX_CONFIG" = "no" ]] ; then AC_MSG_ERROR("Could not find wx-config: is wxWindows installed?") fi dnl Set compiler flagsthat don't relate to wxWindows CXXFLAGS="$CXXFLAGS -Wno-deprecated" dnl We use wx-config to set the compiler flags. In wxWindows 2.2.x dnl this was done using `wx-config --cflags` regardless of whether dnl the code is C or C++. Version 2.3.x uses --cxxflags for C++. dnl Because --cxxflags is not a valid option for wx-config prior dnl to 2.3.x, we need to check which version of wxWindows we are dnl using and set $CXXFLAGS accordingly. dnl AC_MSG_CHECKING(wxWindows version) wx_version=`$WX_CONFIG --version` AC_MSG_RESULT($wx_version) case "$wx_version" in 2.2.*) AC_MSG_WARN([wxWindows is older than 2.3., setting CXXFLAGS using --cflags]) CXXFLAGS="$CXXFLAGS `$WX_CONFIG --cflags` -DUSE_WXWINDOWS" ;; *) CXXFLAGS="$CXXFLAGS `$WX_CONFIG --cxxflags` -DUSE_WXWINDOWS" ;; esac LIBS="$LIBS `$WX_CONFIG --libs`" # Do we have SVG support? # Set this to 0 when building an RPM on Linux, # otherwise test for existence of SVG library. # The reason for this is wxGTK RPMs from wxWidgets.org # do not have the required SVG library (which is a contribution) AC_MSG_CHECKING(whether we will use SVG) USE_SVG=0 WX_SVG_LIB= if test "$USE_SVG" = 0 ; then AC_MSG_RESULT(no) else AC_MSG_RESULT(yes) dnl Andreas Pokorny provided this patch to test for the presence of SVG support. dnl Note that the name of the contributed SVG library changed between 2.4 and 2.6 (sigh) case "$wx_version" in 2.4.*) WX_SVG_LIB=[`$WX_CONFIG --basename`_dcsvg-`echo ${wx_version} | sed -e "s:\.[0-9]\{1,\}$::"`] ;; *) WX_SVG_LIB=[`$WX_CONFIG --basename`_svg-`echo ${wx_version} | sed -e "s:\.[0-9]\{1,\}$::"`] ;; esac AC_CHECK_LIB($WX_SVG_LIB, main, [], [AC_MSG_WARN("library required for SVG support not found")]) fi if test "$USE_SVG" = 1 ; then CXXFLAGS="$CXXFLAGS -DUSE_SVG" LIBS="$LIBS -l$WX_SVG_LIB" fi AC_OUTPUT(Makefile ncl-2.0/Makefile ncl-2.0/src/Makefile TreeLib/Makefile tv.spec) tv-0.5/tdoc.h0000775000076400007640000000256507327251314010063 00000000000000/* * TreeView * A phylogenetic tree viewer. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: tdoc.h,v 1.4 2001/07/24 10:49:48 rdmp1c Exp $ #ifdef __GNUG__ // #pragma interface #endif #ifndef __DOCSAMPLEH__ #define __DOCSAMPLEH__ #include "profile.h" #include "wx/docview.h" class TDocument: public wxDocument { DECLARE_DYNAMIC_CLASS(TDocument) private: public: /* ostream& SaveObject(ostream& stream); istream& LoadObject(istream& stream); */ virtual bool OnSaveDocument(const wxString& filename); virtual bool OnOpenDocument(const wxString& filename); TDocument(void); ~TDocument(void); }; #endif tv-0.5/aclocal.m40000664000076400007640000007615011432544630010615 00000000000000# generated automatically by aclocal 1.10 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_if(m4_PACKAGE_VERSION, [2.61],, [m4_fatal([this file was generated for autoconf 2.61. You have another version of autoconf. If you want to use that, you should regenerate the build system entirely.], [63])]) # Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.10' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.10], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.10])dnl _AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 3 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.60])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR tv-0.5/tv.pbproj/0000777000076400007640000000000011432555766010766 500000000000000tv-0.5/tv.pbproj/rpage.pbxuser0000775000076400007640000005502610217565215013415 00000000000000// !$*UTF8*$! { 20286C28FDCF999611CA2CEA = { activeBuildStyle = 05952DFCFFF02D1B11CA0E50; activeExecutable = F5731A4F03C71AF8018DF32A; activeTarget = 20286C34FDCF999611CA2CEA; addToTargets = ( 20286C34FDCF999611CA2CEA, ); breakpoints = ( F53CB89003CB1EC9012A40F8, ); executables = ( F5731A4F03C71AF8018DF32A, ); perUserDictionary = { PBXPerProjectTemplateStateSaveDate = 132771138; "PBXTemplateGeometry-F5CA7ECB015C094F0DCA290F" = { ContentSize = "{668, 621}"; LeftSlideOut = { Collapsed = NO; Frame = "{{0, 0}, {668, 621}}"; Split0 = { Collapsed = NO; Frame = "{{0, 0}, {668, 621}}"; Split0 = { Frame = "{{0, 0}, {668, 621}}"; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {484, 208}}"; }; Tab1 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {664, 208}}"; Split0 = { Frame = "{{0, 24}, {664, 184}}"; Split0 = { Frame = "{{0, 0}, {325, 184}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 123, Value, 85, Summary, 96.123, ); Frame = "{{334, 0}, {330, 184}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {664, 208}}"; LauncherConfigVersion = 7; }; Tab2 = { Frame = "{{0, 0}, {664, 50}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {664, 50}}"; }; }; Tab3 = { BuildMessageFrame = "{{0, 0}, {614, 203}}"; BuildTranscriptFrame = "{{0, 212}, {614, 85}}"; BuildTranscriptFrameExpanded = YES; Frame = "{{0, 0}, {612, 295}}"; }; Tab4 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 5; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {313, 531}}"; GroupTreeTableConfiguration = ( TargetStatusColumn, 18, MainColumn, 280, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {280, 398}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 237, ); Frame = "{{0, 0}, {278, 659}}"; MembersFrame = "{{0, 407}, {280, 252}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 236, ); }; Tab2 = { Frame = "{{0, 0}, {200, 100}}"; }; Tab3 = { Frame = "{{0, 0}, {200, 557}}"; TargetTableConfiguration = ( ActiveObject, 16, ObjectNames, 202.296, ); }; Tab4 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 197, enabledColumn, 31, ); Frame = "{{0, 0}, {250, 100}}"; }; TabCount = 5; TabsVisible = NO; }; NavBarShownByDefault = YES; StatusViewVisible = NO; Template = F5CA7ECB015C094F0DCA290F; ToolbarVisible = NO; WindowLocation = "{334, 179}"; }; PBXWorkspaceContents = ( { LeftSlideOut = { Split0 = { Split0 = { NavContent0 = { bookmark = B3D725CD07EF206500D12E3F; history = ( F5E2F10B05F7F86201A80003, F5E2F10F05F7F86201A80003, F5E2F11005F7F86201A80003, F5F3B9A406013AFC01A80002, F5F3B9A506013AFC01A80002, F5F3B9A606013AFC01A80002, F5F3B9A706013AFC01A80002, B3D725BD07EF206500D12E3F, B3D725BE07EF206500D12E3F, B3D725BF07EF206500D12E3F, B3D725C007EF206500D12E3F, B3D725C107EF206500D12E3F, B3D725C207EF206500D12E3F, B3D725C307EF206500D12E3F, F585386F06117B1901A80002, ); prevStack = ( F5E2F11205F7F86201A80003, F5E2F11305F7F86201A80003, F5E2F11405F7F86201A80003, F5E2F11505F7F86201A80003, F5E2F11605F7F86201A80003, F5E2F11805F7F86201A80003, F5E2F11A05F7F86201A80003, F5E2F11B05F7F86201A80003, F5E2F11C05F7F86201A80003, F5E2F11E05F7F86201A80003, F5E2F11F05F7F86201A80003, F5E2F12105F7F86201A80003, F5E2F12205F7F86201A80003, F5F3B9A906013AFC01A80002, F5F3B9AA06013AFC01A80002, F5F3B9AB06013AFC01A80002, F5F3B9AC06013AFC01A80002, F5F3B9AD06013AFC01A80002, F5F3B9AE06013AFC01A80002, F5F3B9AF06013AFC01A80002, F5F3B9B006013AFC01A80002, F585387006117B1901A80002, B3D725C407EF206500D12E3F, B3D725C507EF206500D12E3F, B3D725C607EF206500D12E3F, B3D725C707EF206500D12E3F, B3D725C807EF206500D12E3F, B3D725C907EF206500D12E3F, B3D725CA07EF206500D12E3F, B3D725CB07EF206500D12E3F, B3D725CC07EF206500D12E3F, ); }; NavCount = 1; NavGeometry0 = { Frame = "{{0, 0}, {684, 488}}"; NavBarVisible = YES; }; NavSplitVertical = NO; }; SplitCount = 1; Tab1 = { Debugger = { Split0 = { SplitCount = 2; }; SplitCount = 1; TabCount = 2; }; LauncherConfigVersion = 7; }; Tab2 = { LauncherConfigVersion = 3; Runner = { }; }; TabCount = 5; }; SplitCount = 1; Tab1 = { OptionsSetName = "Hierarchy, all classes"; }; TabCount = 5; }; }, ); PBXWorkspaceGeometries = ( { ContentSize = "{1070, 800}"; LeftSlideOut = { ActiveTab = 0; ActiveTabName = PBXGroupTreeModule; Collapsed = NO; Frame = "{{0, 23}, {1070, 777}}"; Split0 = { ActiveTab = 2; ActiveTabName = PBXBuildResultsModule; Collapsed = NO; Frame = "{{386, 0}, {684, 777}}"; Split0 = { Frame = "{{0, 289}, {684, 488}}"; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {572, 214}}"; }; Tab1 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {572, 150}}"; Split0 = { Frame = "{{0, 24}, {572, 126}}"; Split0 = { Frame = "{{0, 0}, {279, 126}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 123, Value, 85, Summary, 62.123, ); Frame = "{{288, 0}, {284, 126}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {572, 125}}"; LauncherConfigVersion = 7; }; Tab2 = { Frame = "{{0, 0}, {560, 253}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {560, 253}}"; }; }; Tab3 = { BuildMessageFrame = "{{0, 0}, {686, 37}}"; BuildTranscriptFrame = "{{0, 46}, {686, 197}}"; BuildTranscriptFrameExpanded = YES; Frame = "{{0, 0}, {684, 265}}"; }; Tab4 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 5; TabsVisible = YES; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {362, 777}}"; GroupTreeTableConfiguration = ( SCMStatusColumn, 22, TargetStatusColumn, 18, MainColumn, 307, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {247, 330}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 204, ); Frame = "{{0, 0}, {245, 549}}"; MembersFrame = "{{0, 339}, {247, 210}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 203, ); }; Tab2 = { Frame = "{{0, 0}, {226, 549}}"; }; Tab3 = { Frame = "{{0, 0}, {191, 803}}"; TargetTableConfiguration = ( ActiveObject, 16, ObjectNames, 202.296, ); }; Tab4 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 138, enabledColumn, 31, ); Frame = "{{0, 0}, {191, 549}}"; }; TabCount = 5; TabsVisible = YES; }; NavBarShownByDefault = YES; StatusViewVisible = YES; Template = F5F68CF101725D4C0D7A8F4C; ToolbarVisible = YES; WindowLocation = "{103, 92}"; }, ); PBXWorkspaceStateSaveDate = 132771138; }; perUserProjectItems = { B3D725BD07EF206500D12E3F = B3D725BD07EF206500D12E3F; B3D725BE07EF206500D12E3F = B3D725BE07EF206500D12E3F; B3D725BF07EF206500D12E3F = B3D725BF07EF206500D12E3F; B3D725C007EF206500D12E3F = B3D725C007EF206500D12E3F; B3D725C107EF206500D12E3F = B3D725C107EF206500D12E3F; B3D725C207EF206500D12E3F = B3D725C207EF206500D12E3F; B3D725C307EF206500D12E3F = B3D725C307EF206500D12E3F; B3D725C407EF206500D12E3F = B3D725C407EF206500D12E3F; B3D725C507EF206500D12E3F = B3D725C507EF206500D12E3F; B3D725C607EF206500D12E3F = B3D725C607EF206500D12E3F; B3D725C707EF206500D12E3F = B3D725C707EF206500D12E3F; B3D725C807EF206500D12E3F = B3D725C807EF206500D12E3F; B3D725C907EF206500D12E3F = B3D725C907EF206500D12E3F; B3D725CA07EF206500D12E3F = B3D725CA07EF206500D12E3F; B3D725CB07EF206500D12E3F = B3D725CB07EF206500D12E3F; B3D725CC07EF206500D12E3F = B3D725CC07EF206500D12E3F; B3D725CD07EF206500D12E3F = B3D725CD07EF206500D12E3F; F585386F06117B1901A80002 = F585386F06117B1901A80002; F585387006117B1901A80002 = F585387006117B1901A80002; F5E2F10B05F7F86201A80003 = F5E2F10B05F7F86201A80003; F5E2F10F05F7F86201A80003 = F5E2F10F05F7F86201A80003; F5E2F11005F7F86201A80003 = F5E2F11005F7F86201A80003; F5E2F11205F7F86201A80003 = F5E2F11205F7F86201A80003; F5E2F11305F7F86201A80003 = F5E2F11305F7F86201A80003; F5E2F11405F7F86201A80003 = F5E2F11405F7F86201A80003; F5E2F11505F7F86201A80003 = F5E2F11505F7F86201A80003; F5E2F11605F7F86201A80003 = F5E2F11605F7F86201A80003; F5E2F11805F7F86201A80003 = F5E2F11805F7F86201A80003; F5E2F11A05F7F86201A80003 = F5E2F11A05F7F86201A80003; F5E2F11B05F7F86201A80003 = F5E2F11B05F7F86201A80003; F5E2F11C05F7F86201A80003 = F5E2F11C05F7F86201A80003; F5E2F11E05F7F86201A80003 = F5E2F11E05F7F86201A80003; F5E2F11F05F7F86201A80003 = F5E2F11F05F7F86201A80003; F5E2F12105F7F86201A80003 = F5E2F12105F7F86201A80003; F5E2F12205F7F86201A80003 = F5E2F12205F7F86201A80003; F5F3B9A406013AFC01A80002 = F5F3B9A406013AFC01A80002; F5F3B9A506013AFC01A80002 = F5F3B9A506013AFC01A80002; F5F3B9A606013AFC01A80002 = F5F3B9A606013AFC01A80002; F5F3B9A706013AFC01A80002 = F5F3B9A706013AFC01A80002; F5F3B9A906013AFC01A80002 = F5F3B9A906013AFC01A80002; F5F3B9AA06013AFC01A80002 = F5F3B9AA06013AFC01A80002; F5F3B9AB06013AFC01A80002 = F5F3B9AB06013AFC01A80002; F5F3B9AC06013AFC01A80002 = F5F3B9AC06013AFC01A80002; F5F3B9AD06013AFC01A80002 = F5F3B9AD06013AFC01A80002; F5F3B9AE06013AFC01A80002 = F5F3B9AE06013AFC01A80002; F5F3B9AF06013AFC01A80002 = F5F3B9AF06013AFC01A80002; F5F3B9B006013AFC01A80002 = F5F3B9B006013AFC01A80002; }; projectwideBuildSettings = { }; wantsIndex = 1; wantsSCM = -1; }; 20286C34FDCF999611CA2CEA = { activeExec = 0; executables = ( F5731A4F03C71AF8018DF32A, ); }; B3D725BD07EF206500D12E3F = { fRef = F51C3DDD03C77A7801E7B49E; isa = PBXTextBookmark; name = "gtree.cpp: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1097; vrLoc = 0; }; B3D725BE07EF206500D12E3F = { fRef = F51C3DE603C77A7801E7B49E; isa = PBXTextBookmark; name = "treedrawer.cpp: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1177; vrLoc = 0; }; B3D725BF07EF206500D12E3F = { fRef = F51C3E0B03C77CE101E7B49E; isa = PBXTextBookmark; name = "assumptionsblock.cpp: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1117; vrLoc = 0; }; B3D725C007EF206500D12E3F = { fRef = F51C3E1D03C77CE101E7B49E; isa = PBXTextBookmark; name = "nexustoken.cpp: 1097"; rLen = 0; rLoc = 30389; rType = 0; vrLen = 2012; vrLoc = 0; }; B3D725C107EF206500D12E3F = { fRef = B3D725CE07EF206500D12E3F; isa = PBXTextBookmark; name = "defs.h: 21"; rLen = 25; rLoc = 659; rType = 0; vrLen = 1233; vrLoc = 0; }; B3D725C207EF206500D12E3F = { fRef = B3D725D207EF206500D12E3F; isa = PBXTextBookmark; name = "platform.h: 260"; rLen = 22; rLoc = 6931; rType = 0; vrLen = 917; vrLoc = 6564; }; B3D725C307EF206500D12E3F = { isa = PBXTargetBookmark; trg = 20286C34FDCF999611CA2CEA; uiCtxt = { TOCViewDetailVisibleRect = "{{0, 38}, {468, 434}}"; TOCViewExpandedItems = ( "com.apple.target-editor-pane.settings", "com.apple.target-editor-pane.settings.simple", "com.apple.target-editor-pane.info-plist", "com.apple.target-editor-pane.info-plist.simple", "com.apple.target-editor-pane.buildphases", ); TOCViewMasterVisibleRect = "{{0, 0}, {177, 434}}"; TOCViewSelectedItems = ( PBXTargetGccCompilerSettingsModule, ); }; }; B3D725C407EF206500D12E3F = { isa = PBXTargetBookmark; trg = 20286C34FDCF999611CA2CEA; uiCtxt = { TOCViewDetailVisibleRect = "{{0, 0}, {420, 207}}"; TOCViewExpandedItems = ( "com.apple.target-editor-pane.settings", "com.apple.target-editor-pane.settings.simple", "com.apple.target-editor-pane.info-plist", "com.apple.target-editor-pane.info-plist.simple", "com.apple.target-editor-pane.buildphases", ); TOCViewMasterVisibleRect = "{{0, 0}, {159, 459}}"; TOCViewSelectedItems = ( PBXProductURLTypesSettingsModule, ); }; }; B3D725C507EF206500D12E3F = { fRef = F51C3DDD03C77A7801E7B49E; isa = PBXTextBookmark; name = "gtree.cpp: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1097; vrLoc = 0; }; B3D725C607EF206500D12E3F = { fRef = F51C3DE603C77A7801E7B49E; isa = PBXTextBookmark; name = "treedrawer.cpp: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1177; vrLoc = 0; }; B3D725C707EF206500D12E3F = { fRef = F51C3E0B03C77CE101E7B49E; isa = PBXTextBookmark; name = "assumptionsblock.cpp: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1117; vrLoc = 0; }; B3D725C807EF206500D12E3F = { fRef = F51C3E1D03C77CE101E7B49E; isa = PBXTextBookmark; name = "nexustoken.cpp: 1097"; rLen = 0; rLoc = 30389; rType = 0; vrLen = 2012; vrLoc = 0; }; B3D725C907EF206500D12E3F = { fRef = B3D725CF07EF206500D12E3F; isa = PBXTextBookmark; name = "platform.h: 260"; rLen = 22; rLoc = 6931; rType = 0; vrLen = 894; vrLoc = 0; }; B3D725CA07EF206500D12E3F = { fRef = B3D725D007EF206500D12E3F; isa = PBXTextBookmark; name = "defs.h: 21"; rLen = 25; rLoc = 659; rType = 0; vrLen = 1233; vrLoc = 0; }; B3D725CB07EF206500D12E3F = { fRef = B3D725D107EF206500D12E3F; isa = PBXTextBookmark; name = "platform.h: 260"; rLen = 22; rLoc = 6931; rType = 0; vrLen = 917; vrLoc = 6564; }; B3D725CC07EF206500D12E3F = { isa = PBXTargetBookmark; trg = 20286C34FDCF999611CA2CEA; uiCtxt = { TOCViewDetailVisibleRect = "{{0, 38}, {468, 434}}"; TOCViewExpandedItems = ( "com.apple.target-editor-pane.settings", "com.apple.target-editor-pane.settings.simple", "com.apple.target-editor-pane.info-plist", "com.apple.target-editor-pane.info-plist.simple", "com.apple.target-editor-pane.buildphases", ); TOCViewMasterVisibleRect = "{{0, 0}, {177, 434}}"; TOCViewSelectedItems = ( PBXTargetGccCompilerSettingsModule, ); }; }; B3D725CD07EF206500D12E3F = { fRef = F51C3E4E03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tv.cpp: 573"; rLen = 0; rLoc = 19657; rType = 0; vrLen = 1163; vrLoc = 0; }; B3D725CE07EF206500D12E3F = { isa = PBXFileReference; name = defs.h; path = "/usr/local/include/wx-2.5/wx/defs.h"; refType = 0; }; B3D725CF07EF206500D12E3F = { isa = PBXFileReference; name = platform.h; path = "/usr/local/include/wx-2.5/wx/platform.h"; refType = 0; }; B3D725D007EF206500D12E3F = { isa = PBXFileReference; name = defs.h; path = "/usr/local/include/wx-2.5/wx/defs.h"; refType = 0; }; B3D725D107EF206500D12E3F = { isa = PBXFileReference; name = platform.h; path = "/usr/local/include/wx-2.5/wx/platform.h"; refType = 0; }; B3D725D207EF206500D12E3F = { isa = PBXFileReference; name = platform.h; path = "/usr/local/include/wx-2.5/wx/platform.h"; refType = 0; }; F51C3E1D03C77CE101E7B49E = { uiCtxt = { sepNavWindowFrame = "{{15, 71}, {750, 502}}"; }; }; F51C3E4D03C77F0C01E7B49E = { uiCtxt = { sepNavWindowFrame = "{{38, 50}, {750, 502}}"; }; }; F51C3E4E03C77F0C01E7B49E = { uiCtxt = { sepNavWindowFrame = "{{15, 71}, {750, 502}}"; }; }; F51C3E4F03C77F0C01E7B49E = { uiCtxt = { sepNavWindowFrame = "{{15, 71}, {750, 502}}"; }; }; F51C3E5003C77F0C01E7B49E = { uiCtxt = { sepNavWindowFrame = "{{23, 56}, {750, 502}}"; }; }; F51C3E5103C77F0C01E7B49E = { uiCtxt = { sepNavWindowFrame = "{{15, 71}, {750, 502}}"; }; }; F53CB88A03CB09B3012A40F8 = { uiCtxt = { sepNavWindowFrame = "{{38, 50}, {750, 502}}"; }; }; F53CB88D03CB0A26012A40F8 = { uiCtxt = { sepNavWindowFrame = "{{15, 71}, {750, 502}}"; }; }; F53CB89003CB1EC9012A40F8 = { fileReference = F51C3E5103C77F0C01E7B49E; isa = PBXFileBreakpoint; lineNumber = 49; state = 2; }; F5731A4F03C71AF8018DF32A = { activeArgIndex = 2147483647; activeArgIndices = ( ); argumentStrings = ( ); configStateDict = { }; debuggerPlugin = GDBDebugging; dylibVariantSuffix = ""; enableDebugStr = 1; environmentEntries = ( ); isa = PBXExecutable; name = tv; shlibInfoDictList = ( ); sourceDirectories = ( ); }; F585386F06117B1901A80002 = { fRef = F51C3E4E03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tv.cpp: __HAVE_BUILTIN_SETJMP__"; rLen = 0; rLoc = 88; rType = 0; vrLen = 633; vrLoc = 0; }; F585387006117B1901A80002 = { fRef = F51C3E4E03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tv.cpp: __HAVE_BUILTIN_SETJMP__"; rLen = 0; rLoc = 88; rType = 0; vrLen = 633; vrLoc = 0; }; F5E2F10B05F7F86201A80003 = { fRef = F51C3E4F03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tv.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1051; vrLoc = 0; }; F5E2F10F05F7F86201A80003 = { fRef = F5E2F10505F7EAD201A80003; isa = PBXBookmark; }; F5E2F11005F7F86201A80003 = { fRef = F5E2F10605F7EAD201A80003; isa = PBXBookmark; }; F5E2F11205F7F86201A80003 = { isa = PBXTargetBookmark; trg = 20286C34FDCF999611CA2CEA; }; F5E2F11305F7F86201A80003 = { fRef = F51C3E4E03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tv.cpp: __GNUC__"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1128; vrLoc = 0; }; F5E2F11405F7F86201A80003 = { fRef = F51C3E4F03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tv.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1051; vrLoc = 0; }; F5E2F11505F7F86201A80003 = { fRef = F51C3E4E03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tv.cpp: __GNUC__"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1128; vrLoc = 0; }; F5E2F11605F7F86201A80003 = { isa = PBXTargetBookmark; trg = 20286C34FDCF999611CA2CEA; }; F5E2F11805F7F86201A80003 = { isa = PBXTargetBookmark; trg = 20286C34FDCF999611CA2CEA; }; F5E2F11A05F7F86201A80003 = { isa = PBXTargetBookmark; trg = 20286C34FDCF999611CA2CEA; }; F5E2F11B05F7F86201A80003 = { fRef = F5E2F10505F7EAD201A80003; isa = PBXBookmark; }; F5E2F11C05F7F86201A80003 = { fRef = F5E2F10605F7EAD201A80003; isa = PBXBookmark; }; F5E2F11E05F7F86201A80003 = { fRef = F51C3E4E03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tv.cpp: __GNUC__"; rLen = 0; rLoc = 0; rType = 0; vrLen = 857; vrLoc = 0; }; F5E2F11F05F7F86201A80003 = { fRef = F51C3DDD03C77A7801E7B49E; isa = PBXTextBookmark; name = "gtree.cpp: __GNUC__"; rLen = 0; rLoc = 0; rType = 0; vrLen = 875; vrLoc = 0; }; F5E2F12105F7F86201A80003 = { fRef = F5E2F10505F7EAD201A80003; isa = PBXBookmark; }; F5E2F12205F7F86201A80003 = { fRef = F5E2F10605F7EAD201A80003; isa = PBXBookmark; }; F5F3B9A406013AFC01A80002 = { fRef = F51C3E5103C77F0C01E7B49E; isa = PBXTextBookmark; name = "tview.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 514; vrLoc = 1138; }; F5F3B9A506013AFC01A80002 = { fRef = F51C3E4D03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tproject.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 605; vrLoc = 1585; }; F5F3B9A606013AFC01A80002 = { fRef = F51C3E4C03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tdoc.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 857; vrLoc = 0; }; F5F3B9A706013AFC01A80002 = { fRef = F51C3DE303C77A7801E7B49E; isa = PBXTextBookmark; name = "profile.h: 414"; rLen = 0; rLoc = 11594; rType = 0; vrLen = 467; vrLoc = 11306; }; F5F3B9A906013AFC01A80002 = { isa = PBXTargetBookmark; trg = 20286C34FDCF999611CA2CEA; }; F5F3B9AA06013AFC01A80002 = { fRef = F51C3E5103C77F0C01E7B49E; isa = PBXTextBookmark; name = "tview.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 514; vrLoc = 1138; }; F5F3B9AB06013AFC01A80002 = { fRef = F51C3E4D03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tproject.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 605; vrLoc = 1585; }; F5F3B9AC06013AFC01A80002 = { fRef = F51C3DE303C77A7801E7B49E; isa = PBXTextBookmark; name = "profile.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 453; vrLoc = 11245; }; F5F3B9AD06013AFC01A80002 = { fRef = F51C3E4D03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tproject.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 605; vrLoc = 1585; }; F5F3B9AE06013AFC01A80002 = { fRef = F51C3E4C03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tdoc.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 857; vrLoc = 0; }; F5F3B9AF06013AFC01A80002 = { fRef = F51C3E4E03C77F0C01E7B49E; isa = PBXTextBookmark; name = "tv.cpp: __GNUC__"; rLen = 0; rLoc = 0; rType = 0; vrLen = 857; vrLoc = 0; }; F5F3B9B006013AFC01A80002 = { fRef = F51C3DE303C77A7801E7B49E; isa = PBXTextBookmark; name = "profile.h: 414"; rLen = 0; rLoc = 11594; rType = 0; vrLen = 467; vrLoc = 11306; }; } tv-0.5/tv.pbproj/project.pbxproj0000775000076400007640000007716410217565215013770 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 38; objects = { 0249A665FF388DC511CA2CEA = { isa = PBXApplicationReference; path = "TreeView X.app"; refType = 3; }; 0249A669FF388E3911CA2CEA = { isa = PBXFileReference; name = "libstdc++.a"; path = "/usr/lib/libstdc++.a"; refType = 0; }; 0249A66AFF388E3911CA2CEA = { fileRef = 0249A669FF388E3911CA2CEA; isa = PBXBuildFile; settings = { }; }; //020 //021 //022 //023 //024 //040 //041 //042 //043 //044 04313892FE3035C9C02AAC07 = { buildActionMask = 2147483647; files = ( B3D725A407EF0F1600D12E3F, ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; //040 //041 //042 //043 //044 //050 //051 //052 //053 //054 05952DFCFFF02D1B11CA0E50 = { buildRules = ( ); buildSettings = { COPY_PHASE_STRIP = NO; OPTIMIZATION_CFLAGS = "-O0"; }; isa = PBXBuildStyle; name = Development; }; 05952DFDFFF02D1B11CA0E50 = { buildRules = ( ); buildSettings = { COPY_PHASE_STRIP = YES; }; isa = PBXBuildStyle; name = Deployment; }; //050 //051 //052 //053 //054 //060 //061 //062 //063 //064 0640BAA4FFF0323A11CA0E50 = { isa = PBXFrameworkReference; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; refType = 0; }; 0640BAA5FFF0323A11CA0E50 = { isa = PBXFrameworkReference; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; refType = 0; }; //060 //061 //062 //063 //064 //190 //191 //192 //193 //194 195DF8C9FE9D4F0611CA2CBB = { children = ( 0249A665FF388DC511CA2CEA, ); isa = PBXGroup; name = Products; refType = 4; }; //190 //191 //192 //193 //194 //200 //201 //202 //203 //204 20286C28FDCF999611CA2CEA = { buildStyles = ( 05952DFCFFF02D1B11CA0E50, 05952DFDFFF02D1B11CA0E50, ); hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 20286C29FDCF999611CA2CEA; projectDirPath = ""; targets = ( 20286C34FDCF999611CA2CEA, ); }; 20286C29FDCF999611CA2CEA = { children = ( F51C3E0A03C77CB501E7B49E, F51C3DDC03C77A2301E7B49E, 20286C2AFDCF999611CA2CEA, 20286C2CFDCF999611CA2CEA, 20286C32FDCF999611CA2CEA, 195DF8C9FE9D4F0611CA2CBB, ); isa = PBXGroup; name = "«PROJECTNAME»"; path = ""; refType = 4; }; 20286C2AFDCF999611CA2CEA = { children = ( F53CB89103CB2010012A40F8, F51C3E4B03C77F0C01E7B49E, F51C3E4C03C77F0C01E7B49E, F51C3E4D03C77F0C01E7B49E, F51C3E4E03C77F0C01E7B49E, F51C3E4F03C77F0C01E7B49E, F51C3E5003C77F0C01E7B49E, F51C3E5103C77F0C01E7B49E, ); isa = PBXGroup; name = Sources; path = ""; refType = 4; }; 20286C2CFDCF999611CA2CEA = { children = ( F5E2F10005F77C4601A80003, F5E2F10505F7EAD201A80003, F5E2F10605F7EAD201A80003, B3D725A307EF0F1600D12E3F, ); isa = PBXGroup; name = Resources; path = ""; refType = 4; }; 20286C32FDCF999611CA2CEA = { children = ( 20286C33FDCF999611CA2CEA, 0249A669FF388E3911CA2CEA, 0640BAA4FFF0323A11CA0E50, 0640BAA5FFF0323A11CA0E50, F5E2F0FE05F777E801A80003, B3D725A507EF0F4D00D12E3F, B3D725A607EF0F4D00D12E3F, B3D725A707EF0F4D00D12E3F, B3D725A807EF0F4D00D12E3F, B3D725A907EF0F4D00D12E3F, B3D725AA07EF0F4D00D12E3F, B3D725AB07EF0F4D00D12E3F, B3D725AC07EF0F4D00D12E3F, B3D725AD07EF0F4D00D12E3F, B3D725AE07EF0F4D00D12E3F, B3D725B907EF198700D12E3F, B3D725BB07EF19DC00D12E3F, ); isa = PBXGroup; name = "External Frameworks and Libraries"; path = ""; refType = 4; }; 20286C33FDCF999611CA2CEA = { isa = PBXFrameworkReference; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; refType = 0; }; 20286C34FDCF999611CA2CEA = { buildPhases = ( 20286C35FDCF999611CA2CEA, 20286C36FDCF999611CA2CEA, 20286C38FDCF999611CA2CEA, 20286C3BFDCF999611CA2CEA, 04313892FE3035C9C02AAC07, ); buildSettings = { FRAMEWORK_SEARCH_PATHS = /usr/local/lib; HEADER_SEARCH_PATHS = "TreeLib/gport /usr/local/lib/wx/include/mac-ansi-release-static-2.5 /usr/local/include/wx-2.5"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = /usr/local/lib; OTHER_CFLAGS = "-Wno-deprecated -D__WXMAC__ -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -DUSE_WXWINDOWS -DNO_GCC_PRAGMA"; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = Carbon.r; PRODUCT_NAME = "TreeView X"; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = app; }; dependencies = ( ); isa = PBXApplicationTarget; name = tv; productInstallPath = "$(HOME)/Applications"; productName = "«PROJECTNAME»"; productReference = 0249A665FF388DC511CA2CEA; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleDocumentTypes CFBundleTypeExtensions tre CFBundleTypeIconFile doc.icns CFBundleTypeName TreeViewX document CFBundleTypeOSTypes TEXT CFBundleTypeRole Viewer CFBundleExecutable TreeView X CFBundleGetInfoString TreeView X (c) 2004 Roderic D. M. Page CFBundleIconFile app.icns CFBundleIdentifier uk.ac.gla.zoology.treeviewx CFBundleInfoDictionaryVersion 6.0 CFBundleName TreeView X CFBundlePackageType APPL CFBundleShortVersionString 0.4.1 CFBundleSignature TreX CFBundleVersion 0.5.0 CSResourcesFileMapped "; }; 20286C35FDCF999611CA2CEA = { buildActionMask = 2147483647; files = ( F51C3DF203C77A7801E7B49E, F51C3DF303C77A7801E7B49E, F51C3DF403C77A7801E7B49E, F51C3DF503C77A7801E7B49E, F51C3DF603C77A7801E7B49E, F51C3DF703C77A7801E7B49E, F51C3DF803C77A7801E7B49E, F51C3DF903C77A7801E7B49E, F51C3E0703C77AF401E7B49E, F51C3E2B03C77CE101E7B49E, F51C3E2C03C77CE101E7B49E, F51C3E2D03C77CE101E7B49E, F51C3E2E03C77CE101E7B49E, F51C3E2F03C77CE101E7B49E, F51C3E3003C77CE101E7B49E, F51C3E3103C77CE101E7B49E, F51C3E3203C77CE101E7B49E, F51C3E3303C77CE101E7B49E, F51C3E3403C77CE101E7B49E, F51C3E3503C77CE101E7B49E, F51C3E3603C77CE101E7B49E, F51C3E3703C77CE101E7B49E, F51C3E3803C77CE101E7B49E, F51C3E3903C77CE101E7B49E, F51C3E3A03C77CE101E7B49E, F51C3E5203C77F0C01E7B49E, F51C3E5403C77F0C01E7B49E, F51C3E5503C77F0C01E7B49E, F53CB88903CB0666012A40F8, F53CB88B03CB09B3012A40F8, F5E2F10A05F7EFFC01A80003, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 20286C36FDCF999611CA2CEA = { buildActionMask = 2147483647; files = ( F5E2F10705F7EAD201A80003, F5E2F10805F7EAD201A80003, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 20286C38FDCF999611CA2CEA = { buildActionMask = 2147483647; files = ( F51C3DFC03C77A7801E7B49E, F51C3DFD03C77A7801E7B49E, F51C3DFE03C77A7801E7B49E, F51C3DFF03C77A7801E7B49E, F51C3E0003C77A7801E7B49E, F51C3E0103C77A7801E7B49E, F51C3E0203C77A7801E7B49E, F51C3E3B03C77CE101E7B49E, F51C3E3C03C77CE101E7B49E, F51C3E3D03C77CE101E7B49E, F51C3E3E03C77CE101E7B49E, F51C3E3F03C77CE101E7B49E, F51C3E4003C77CE101E7B49E, F51C3E4103C77CE101E7B49E, F51C3E4203C77CE101E7B49E, F51C3E4303C77CE101E7B49E, F51C3E4403C77CE101E7B49E, F51C3E4503C77CE101E7B49E, F51C3E4603C77CE101E7B49E, F51C3E4703C77CE101E7B49E, F51C3E4803C77CE101E7B49E, F51C3E4903C77CE101E7B49E, F51C3E4A03C77CE101E7B49E, F51C3E5603C77F0C01E7B49E, F51C3E5703C77F0C01E7B49E, F5FAAF5503C9DF66011CDE4E, F53CB88F03CB0A26012A40F8, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 20286C3BFDCF999611CA2CEA = { buildActionMask = 2147483647; files = ( 20286C3CFDCF999611CA2CEA, 0249A66AFF388E3911CA2CEA, B3D725AF07EF0F4D00D12E3F, B3D725B007EF0F4D00D12E3F, B3D725B107EF0F4D00D12E3F, B3D725B207EF0F4D00D12E3F, B3D725B307EF0F4D00D12E3F, B3D725B407EF0F4D00D12E3F, B3D725B507EF0F4D00D12E3F, B3D725B607EF0F4D00D12E3F, B3D725B707EF0F4D00D12E3F, B3D725B807EF0F4D00D12E3F, B3D725BA07EF198700D12E3F, B3D725BC07EF19DC00D12E3F, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 20286C3CFDCF999611CA2CEA = { fileRef = 20286C33FDCF999611CA2CEA; isa = PBXBuildFile; settings = { }; }; //200 //201 //202 //203 //204 //B30 //B31 //B32 //B33 //B34 B3D725A307EF0F1600D12E3F = { fileEncoding = 30; isa = PBXFileReference; name = "libwx_mac-2.5.4.r"; path = "/usr/local/lib/libwx_mac-2.5.4.r"; refType = 0; }; B3D725A407EF0F1600D12E3F = { fileRef = B3D725A307EF0F1600D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725A507EF0F4D00D12E3F = { isa = PBXFileReference; name = "libwx_base_carbon_net-2.5.a"; path = "/usr/local/lib/libwx_base_carbon_net-2.5.a"; refType = 0; }; B3D725A607EF0F4D00D12E3F = { isa = PBXFileReference; name = "libwx_base_carbon_xml-2.5.a"; path = "/usr/local/lib/libwx_base_carbon_xml-2.5.a"; refType = 0; }; B3D725A707EF0F4D00D12E3F = { isa = PBXFileReference; name = "libwx_base_carbon-2.5.a"; path = "/usr/local/lib/libwx_base_carbon-2.5.a"; refType = 0; }; B3D725A807EF0F4D00D12E3F = { isa = PBXFileReference; name = "libwx_mac_adv-2.5.a"; path = "/usr/local/lib/libwx_mac_adv-2.5.a"; refType = 0; }; B3D725A907EF0F4D00D12E3F = { isa = PBXFileReference; name = "libwx_mac_core-2.5.a"; path = "/usr/local/lib/libwx_mac_core-2.5.a"; refType = 0; }; B3D725AA07EF0F4D00D12E3F = { isa = PBXFileReference; name = "libwx_mac_html-2.5.a"; path = "/usr/local/lib/libwx_mac_html-2.5.a"; refType = 0; }; B3D725AB07EF0F4D00D12E3F = { isa = PBXFileReference; name = "libwx_mac_xrc-2.5.a"; path = "/usr/local/lib/libwx_mac_xrc-2.5.a"; refType = 0; }; B3D725AC07EF0F4D00D12E3F = { isa = PBXFileReference; name = "libwxjpeg-2.5.a"; path = "/usr/local/lib/libwxjpeg-2.5.a"; refType = 0; }; B3D725AD07EF0F4D00D12E3F = { isa = PBXFileReference; name = "libwxpng-2.5.a"; path = "/usr/local/lib/libwxpng-2.5.a"; refType = 0; }; B3D725AE07EF0F4D00D12E3F = { isa = PBXFileReference; name = "libwxtiff-2.5.a"; path = "/usr/local/lib/libwxtiff-2.5.a"; refType = 0; }; B3D725AF07EF0F4D00D12E3F = { fileRef = B3D725A507EF0F4D00D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725B007EF0F4D00D12E3F = { fileRef = B3D725A607EF0F4D00D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725B107EF0F4D00D12E3F = { fileRef = B3D725A707EF0F4D00D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725B207EF0F4D00D12E3F = { fileRef = B3D725A807EF0F4D00D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725B307EF0F4D00D12E3F = { fileRef = B3D725A907EF0F4D00D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725B407EF0F4D00D12E3F = { fileRef = B3D725AA07EF0F4D00D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725B507EF0F4D00D12E3F = { fileRef = B3D725AB07EF0F4D00D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725B607EF0F4D00D12E3F = { fileRef = B3D725AC07EF0F4D00D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725B707EF0F4D00D12E3F = { fileRef = B3D725AD07EF0F4D00D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725B807EF0F4D00D12E3F = { fileRef = B3D725AE07EF0F4D00D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725B907EF198700D12E3F = { isa = PBXFileReference; name = "libwx_mac_svg-2.5.a"; path = "/usr/local/lib/libwx_mac_svg-2.5.a"; refType = 0; }; B3D725BA07EF198700D12E3F = { fileRef = B3D725B907EF198700D12E3F; isa = PBXBuildFile; settings = { }; }; B3D725BB07EF19DC00D12E3F = { isa = PBXFileReference; name = libz.dylib; path = /usr/lib/libz.dylib; refType = 0; }; B3D725BC07EF19DC00D12E3F = { fileRef = B3D725BB07EF19DC00D12E3F; isa = PBXBuildFile; settings = { }; }; //B30 //B31 //B32 //B33 //B34 //F50 //F51 //F52 //F53 //F54 F51C3DDC03C77A2301E7B49E = { children = ( F51C3E0303C77AF401E7B49E, F51C3DDD03C77A7801E7B49E, F51C3DDE03C77A7801E7B49E, F51C3DE103C77A7801E7B49E, F51C3DE203C77A7801E7B49E, F51C3DE303C77A7801E7B49E, F51C3DE403C77A7801E7B49E, F51C3DE503C77A7801E7B49E, F51C3DE603C77A7801E7B49E, F51C3DE703C77A7801E7B49E, F51C3DE803C77A7801E7B49E, F51C3DE903C77A7801E7B49E, F51C3DEA03C77A7801E7B49E, F51C3DEB03C77A7801E7B49E, F51C3DEC03C77A7801E7B49E, F51C3DED03C77A7801E7B49E, F51C3DEE03C77A7801E7B49E, F51C3DEF03C77A7801E7B49E, F5E2F10905F7EFFC01A80003, ); isa = PBXGroup; name = TreeLib; refType = 4; }; F51C3DDD03C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = gtree.cpp; path = TreeLib/gtree.cpp; refType = 2; }; F51C3DDE03C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = gtree.h; path = TreeLib/gtree.h; refType = 2; }; F51C3DE103C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = Parse.cpp; path = TreeLib/Parse.cpp; refType = 2; }; F51C3DE203C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = Parse.h; path = TreeLib/Parse.h; refType = 2; }; F51C3DE303C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = profile.h; path = TreeLib/profile.h; refType = 2; }; F51C3DE403C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = tokeniser.cpp; path = TreeLib/tokeniser.cpp; refType = 2; }; F51C3DE503C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = tokeniser.h; path = TreeLib/tokeniser.h; refType = 2; }; F51C3DE603C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = treedrawer.cpp; path = TreeLib/treedrawer.cpp; refType = 2; }; F51C3DE703C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = treedrawer.h; path = TreeLib/treedrawer.h; refType = 2; }; F51C3DE803C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = TreeLib.cpp; path = TreeLib/TreeLib.cpp; refType = 2; }; F51C3DE903C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = TreeLib.h; path = TreeLib/TreeLib.h; refType = 2; }; F51C3DEA03C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = treeorder.cpp; path = TreeLib/treeorder.cpp; refType = 2; }; F51C3DEB03C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = treeorder.h; path = TreeLib/treeorder.h; refType = 2; }; F51C3DEC03C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = treereader.cpp; path = TreeLib/treereader.cpp; refType = 2; }; F51C3DED03C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = treereader.h; path = TreeLib/treereader.h; refType = 2; }; F51C3DEE03C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = treewriter.cpp; path = TreeLib/treewriter.cpp; refType = 2; }; F51C3DEF03C77A7801E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = treewriter.h; path = TreeLib/treewriter.h; refType = 2; }; F51C3DF203C77A7801E7B49E = { fileRef = F51C3DE203C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3DF303C77A7801E7B49E = { fileRef = F51C3DE303C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3DF403C77A7801E7B49E = { fileRef = F51C3DE503C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3DF503C77A7801E7B49E = { fileRef = F51C3DE703C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3DF603C77A7801E7B49E = { fileRef = F51C3DE903C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3DF703C77A7801E7B49E = { fileRef = F51C3DEB03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3DF803C77A7801E7B49E = { fileRef = F51C3DED03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3DF903C77A7801E7B49E = { fileRef = F51C3DEF03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3DFC03C77A7801E7B49E = { fileRef = F51C3DE103C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3DFD03C77A7801E7B49E = { fileRef = F51C3DE403C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3DFE03C77A7801E7B49E = { fileRef = F51C3DE603C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3DFF03C77A7801E7B49E = { fileRef = F51C3DE803C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E0003C77A7801E7B49E = { fileRef = F51C3DEA03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E0103C77A7801E7B49E = { fileRef = F51C3DEC03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E0203C77A7801E7B49E = { fileRef = F51C3DEE03C77A7801E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E0303C77AF401E7B49E = { children = ( F51C3E0403C77AF401E7B49E, ); isa = PBXGroup; name = gport; refType = 4; }; F51C3E0403C77AF401E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = gdefs.h; path = TreeLib/gport/gdefs.h; refType = 4; }; F51C3E0703C77AF401E7B49E = { fileRef = F51C3E0403C77AF401E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E0A03C77CB501E7B49E = { children = ( F51C3E0B03C77CE101E7B49E, F51C3E0C03C77CE101E7B49E, F51C3E0D03C77CE101E7B49E, F51C3E0E03C77CE101E7B49E, F51C3E0F03C77CE101E7B49E, F51C3E1003C77CE101E7B49E, F51C3E1103C77CE101E7B49E, F51C3E1203C77CE101E7B49E, F51C3E1303C77CE101E7B49E, F51C3E1403C77CE101E7B49E, F51C3E1503C77CE101E7B49E, F51C3E1603C77CE101E7B49E, F51C3E1703C77CE101E7B49E, F51C3E1803C77CE101E7B49E, F51C3E1903C77CE101E7B49E, F51C3E1A03C77CE101E7B49E, F51C3E1B03C77CE101E7B49E, F51C3E1C03C77CE101E7B49E, F51C3E1D03C77CE101E7B49E, F51C3E1E03C77CE101E7B49E, F51C3E1F03C77CE101E7B49E, F51C3E2003C77CE101E7B49E, F51C3E2103C77CE101E7B49E, F51C3E2203C77CE101E7B49E, F51C3E2303C77CE101E7B49E, F51C3E2403C77CE101E7B49E, F51C3E2503C77CE101E7B49E, F51C3E2603C77CE101E7B49E, F51C3E2703C77CE101E7B49E, F51C3E2803C77CE101E7B49E, F51C3E2903C77CE101E7B49E, F51C3E2A03C77CE101E7B49E, ); isa = PBXGroup; name = "ncl-2.0"; refType = 4; }; F51C3E0B03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = assumptionsblock.cpp; path = "ncl-2.0/src/assumptionsblock.cpp"; refType = 2; }; F51C3E0C03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = assumptionsblock.h; path = "ncl-2.0/src/assumptionsblock.h"; refType = 2; }; F51C3E0D03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = charactersblock.cpp; path = "ncl-2.0/src/charactersblock.cpp"; refType = 2; }; F51C3E0E03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = charactersblock.h; path = "ncl-2.0/src/charactersblock.h"; refType = 2; }; F51C3E0F03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = datablock.cpp; path = "ncl-2.0/src/datablock.cpp"; refType = 2; }; F51C3E1003C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = datablock.h; path = "ncl-2.0/src/datablock.h"; refType = 2; }; F51C3E1103C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = discretedatum.cpp; path = "ncl-2.0/src/discretedatum.cpp"; refType = 2; }; F51C3E1203C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = discretedatum.h; path = "ncl-2.0/src/discretedatum.h"; refType = 2; }; F51C3E1303C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = discretematrix.cpp; path = "ncl-2.0/src/discretematrix.cpp"; refType = 2; }; F51C3E1403C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = discretematrix.h; path = "ncl-2.0/src/discretematrix.h"; refType = 2; }; F51C3E1503C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = distancedatum.cpp; path = "ncl-2.0/src/distancedatum.cpp"; refType = 2; }; F51C3E1603C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = distancedatum.h; path = "ncl-2.0/src/distancedatum.h"; refType = 2; }; F51C3E1703C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = distancesblock.cpp; path = "ncl-2.0/src/distancesblock.cpp"; refType = 2; }; F51C3E1803C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = distancesblock.h; path = "ncl-2.0/src/distancesblock.h"; refType = 2; }; F51C3E1903C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = nexus.cpp; path = "ncl-2.0/src/nexus.cpp"; refType = 2; }; F51C3E1A03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = nexus.h; path = "ncl-2.0/src/nexus.h"; refType = 2; }; F51C3E1B03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = nexusblock.cpp; path = "ncl-2.0/src/nexusblock.cpp"; refType = 2; }; F51C3E1C03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = nexusdefs.h; path = "ncl-2.0/src/nexusdefs.h"; refType = 2; }; F51C3E1D03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = nexustoken.cpp; path = "ncl-2.0/src/nexustoken.cpp"; refType = 2; }; F51C3E1E03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = nexustoken.h; path = "ncl-2.0/src/nexustoken.h"; refType = 2; }; F51C3E1F03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = nxsdate.cpp; path = "ncl-2.0/src/nxsdate.cpp"; refType = 2; }; F51C3E2003C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = nxsdate.h; path = "ncl-2.0/src/nxsdate.h"; refType = 2; }; F51C3E2103C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = nxsstring.cpp; path = "ncl-2.0/src/nxsstring.cpp"; refType = 2; }; F51C3E2203C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = nxsstring.h; path = "ncl-2.0/src/nxsstring.h"; refType = 2; }; F51C3E2303C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = setreader.cpp; path = "ncl-2.0/src/setreader.cpp"; refType = 2; }; F51C3E2403C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = setreader.h; path = "ncl-2.0/src/setreader.h"; refType = 2; }; F51C3E2503C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = taxablock.cpp; path = "ncl-2.0/src/taxablock.cpp"; refType = 2; }; F51C3E2603C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = taxablock.h; path = "ncl-2.0/src/taxablock.h"; refType = 2; }; F51C3E2703C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = treesblock.cpp; path = "ncl-2.0/src/treesblock.cpp"; refType = 2; }; F51C3E2803C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = treesblock.h; path = "ncl-2.0/src/treesblock.h"; refType = 2; }; F51C3E2903C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = xnexus.cpp; path = "ncl-2.0/src/xnexus.cpp"; refType = 2; }; F51C3E2A03C77CE101E7B49E = { fileEncoding = 30; isa = PBXFileReference; name = xnexus.h; path = "ncl-2.0/src/xnexus.h"; refType = 2; }; F51C3E2B03C77CE101E7B49E = { fileRef = F51C3E0C03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E2C03C77CE101E7B49E = { fileRef = F51C3E0E03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E2D03C77CE101E7B49E = { fileRef = F51C3E1003C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E2E03C77CE101E7B49E = { fileRef = F51C3E1203C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E2F03C77CE101E7B49E = { fileRef = F51C3E1403C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3003C77CE101E7B49E = { fileRef = F51C3E1603C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3103C77CE101E7B49E = { fileRef = F51C3E1803C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3203C77CE101E7B49E = { fileRef = F51C3E1A03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3303C77CE101E7B49E = { fileRef = F51C3E1C03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3403C77CE101E7B49E = { fileRef = F51C3E1E03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3503C77CE101E7B49E = { fileRef = F51C3E2003C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3603C77CE101E7B49E = { fileRef = F51C3E2203C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3703C77CE101E7B49E = { fileRef = F51C3E2403C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3803C77CE101E7B49E = { fileRef = F51C3E2603C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3903C77CE101E7B49E = { fileRef = F51C3E2803C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3A03C77CE101E7B49E = { fileRef = F51C3E2A03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3B03C77CE101E7B49E = { fileRef = F51C3E0B03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3C03C77CE101E7B49E = { fileRef = F51C3E0D03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3D03C77CE101E7B49E = { fileRef = F51C3E0F03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3E03C77CE101E7B49E = { fileRef = F51C3E1103C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E3F03C77CE101E7B49E = { fileRef = F51C3E1303C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4003C77CE101E7B49E = { fileRef = F51C3E1503C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4103C77CE101E7B49E = { fileRef = F51C3E1703C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4203C77CE101E7B49E = { fileRef = F51C3E1903C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4303C77CE101E7B49E = { fileRef = F51C3E1B03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4403C77CE101E7B49E = { fileRef = F51C3E1D03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4503C77CE101E7B49E = { fileRef = F51C3E1F03C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4603C77CE101E7B49E = { fileRef = F51C3E2103C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4703C77CE101E7B49E = { fileRef = F51C3E2303C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4803C77CE101E7B49E = { fileRef = F51C3E2503C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4903C77CE101E7B49E = { fileRef = F51C3E2703C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4A03C77CE101E7B49E = { fileRef = F51C3E2903C77CE101E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E4B03C77F0C01E7B49E = { fileEncoding = 30; isa = PBXFileReference; path = tdoc.cpp; refType = 2; }; F51C3E4C03C77F0C01E7B49E = { fileEncoding = 30; isa = PBXFileReference; path = tdoc.h; refType = 2; }; F51C3E4D03C77F0C01E7B49E = { fileEncoding = 30; isa = PBXFileReference; path = tproject.h; refType = 2; }; F51C3E4E03C77F0C01E7B49E = { fileEncoding = 30; isa = PBXFileReference; path = tv.cpp; refType = 2; }; F51C3E4F03C77F0C01E7B49E = { fileEncoding = 30; isa = PBXFileReference; path = tv.h; refType = 2; }; F51C3E5003C77F0C01E7B49E = { fileEncoding = 30; isa = PBXFileReference; path = tview.cpp; refType = 2; }; F51C3E5103C77F0C01E7B49E = { fileEncoding = 30; isa = PBXFileReference; path = tview.h; refType = 2; }; F51C3E5203C77F0C01E7B49E = { fileRef = F51C3E4C03C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E5403C77F0C01E7B49E = { fileRef = F51C3E4F03C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E5503C77F0C01E7B49E = { fileRef = F51C3E5103C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E5603C77F0C01E7B49E = { fileRef = F51C3E4B03C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; F51C3E5703C77F0C01E7B49E = { fileRef = F51C3E4E03C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; F53CB88903CB0666012A40F8 = { fileRef = F51C3E4D03C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; F53CB88A03CB09B3012A40F8 = { fileEncoding = 30; isa = PBXFileReference; path = treeorder_dialog.h; refType = 4; }; F53CB88B03CB09B3012A40F8 = { fileRef = F53CB88A03CB09B3012A40F8; isa = PBXBuildFile; settings = { }; }; F53CB88D03CB0A26012A40F8 = { fileEncoding = 30; isa = PBXFileReference; path = treeorder_dialog.cpp; refType = 4; }; F53CB88F03CB0A26012A40F8 = { fileRef = F53CB88D03CB0A26012A40F8; isa = PBXBuildFile; settings = { }; }; F53CB89103CB2010012A40F8 = { children = ( F53CB88A03CB09B3012A40F8, F53CB88D03CB0A26012A40F8, ); isa = PBXGroup; name = Dialogs; path = ""; refType = 2; }; F5E2F0FE05F777E801A80003 = { isa = PBXFileReference; name = "libwx_mac-2.4.0.dylib"; path = "/usr/local/lib/libwx_mac-2.4.0.dylib"; refType = 0; }; F5E2F10005F77C4601A80003 = { fileEncoding = 30; isa = PBXFileReference; name = "libwx_mac-2.4.0.r"; path = "/usr/local/lib/libwx_mac-2.4.0.r"; refType = 0; }; F5E2F10505F7EAD201A80003 = { isa = PBXFileReference; name = app.icns; path = bitmaps/mac/app.icns; refType = 2; }; F5E2F10605F7EAD201A80003 = { isa = PBXFileReference; name = doc.icns; path = bitmaps/mac/doc.icns; refType = 2; }; F5E2F10705F7EAD201A80003 = { fileRef = F5E2F10505F7EAD201A80003; isa = PBXBuildFile; settings = { }; }; F5E2F10805F7EAD201A80003 = { fileRef = F5E2F10605F7EAD201A80003; isa = PBXBuildFile; settings = { }; }; F5E2F10905F7EFFC01A80003 = { fileEncoding = 30; isa = PBXFileReference; name = nodeiterator.h; path = TreeLib/nodeiterator.h; refType = 2; }; F5E2F10A05F7EFFC01A80003 = { fileRef = F5E2F10905F7EFFC01A80003; isa = PBXBuildFile; settings = { }; }; F5FAAF5503C9DF66011CDE4E = { fileRef = F51C3E5003C77F0C01E7B49E; isa = PBXBuildFile; settings = { }; }; }; rootObject = 20286C28FDCF999611CA2CEA; } tv-0.5/tdoc.cpp0000775000076400007640000000376507327520522010421 00000000000000/* * TreeView * A phylogenetic tree viewer. * Copyright (C) 2001 Roderic D. M. Page * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. */ // $Id: tdoc.cpp,v 1.6 2001/07/25 10:37:06 rdmp1c Exp $ #ifdef __GNUG__ // #pragma implementation #endif #include "tdoc.h" #include "tview.h" // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/wx.h" #endif #if !wxUSE_DOC_VIEW_ARCHITECTURE #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h! #endif IMPLEMENT_DYNAMIC_CLASS(TDocument, wxDocument) TDocument::TDocument(void) { } TDocument::~TDocument(void) { } // Since text windows have their own method for saving to/loading from files, // we override OnSave/OpenDocument instead of Save/LoadObject bool TDocument::OnSaveDocument(const wxString& filename) { TView *view = (TView *)GetFirstView(); if (!view->WriteTrees (filename)) return FALSE; Modify(FALSE); return TRUE; } bool TDocument::OnOpenDocument(const wxString& filename) { TView *view = (TView *)GetFirstView(); if (!view->ReadTrees (filename)) return FALSE; SetFilename(filename, TRUE); Modify(FALSE); UpdateAllViews(); view->Activate(TRUE); // Ensures TView::OnActivate is called return TRUE; } tv-0.5/AUTHORS0000775000076400007640000000000007327225665010021 00000000000000