//Added by BCO //------------------------------------------------------------------------------ void Tree::traversenoquote (NodePtr p) { if (p) { if (p->IsLeaf()) { for (int i=0; i<(NEXUSString (p->GetLabel())).length(); i++) { if ((NEXUSString (p->GetLabel()))[i]!= '\'') { *treeStream <<(NEXUSString (p->GetLabel()))[i]; } } //*treeStream<<NEXUSString (p->GetLabel()); if (EdgeLengths) { *treeStream << ':' << p->GetEdgeLength (); } } else { *treeStream << "("; } traversenoquote (p->GetChild()); if (p->GetSibling()) { *treeStream << ","; } else { if (p != Root) { *treeStream << ")"; // 29/3/96 if ((p->GetAnc()->GetLabel() != "") && InternalLabels) { *treeStream << NEXUSString (p->GetAnc()->GetLabel ()) ; //here's the change from traverse } if (EdgeLengths && (p->GetAnc () != Root)) { *treeStream << ':' << p->GetAnc()->GetEdgeLength (); } } } traversenoquote (p->GetSibling()); } }
//------------------------------------------------------------------------------ // 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()); } }
//------------------------------------------------------------------------------ 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()); } }