// TODO: Extended SequenceNodeI to hold parsed NHX strings
package jalview.io;
-import java.util.Locale;
-
-import jalview.datamodel.SequenceNode;
-import jalview.util.MessageManager;
-
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
+import java.util.Locale;
import java.util.StringTokenizer;
import com.stevesoft.pat.Regex;
+import jalview.bin.Jalview;
+import jalview.datamodel.BinaryNode;
+import jalview.datamodel.SequenceNode;
+import jalview.util.MessageManager;
+
/**
* Parse a new hanpshire style tree Caveats: NHX files are NOT supported and the
* tree distances and topology are unreliable when they are parsed. TODO: on
*/
public class NewickFile extends FileParse
{
- SequenceNode root;
+ BinaryNode root;
private boolean HasBootstrap = false;
* @param newtree
* DOCUMENT ME!
*/
- public NewickFile(SequenceNode newtree)
+ public NewickFile(BinaryNode newtree)
{
root = newtree;
}
* @param distances
* DOCUMENT ME!
*/
- public NewickFile(SequenceNode newtree, boolean bootstrap,
+ public NewickFile(BinaryNode newtree, boolean bootstrap,
boolean distances)
{
root = newtree;
* @param rootdistance
* DOCUMENT ME!
*/
- public NewickFile(SequenceNode newtree, boolean bootstrap,
+ public NewickFile(BinaryNode newtree, boolean bootstrap,
boolean distances, boolean rootdistance)
{
root = newtree;
root = new SequenceNode();
- SequenceNode realroot = null;
- SequenceNode c = root;
+ BinaryNode realroot = null;
+ BinaryNode c = root;
int d = -1;
int cp = 0;
{
c.setRight(new SequenceNode(null, c, null, DefDistance,
DefBootstrap, false));
- c = (SequenceNode) c.right();
+ c = (BinaryNode) c.right();
}
else
{
if (c.left() != null)
{
// Dummy node for polytomy - keeps c.left free for new node
- SequenceNode tmpn = new SequenceNode(null, c, null, 0, 0, true);
+ BinaryNode tmpn = new SequenceNode(null, c, null, 0, 0, true);
tmpn.SetChildren(c.left(), c.right());
c.setRight(tmpn);
}
c.setLeft(new SequenceNode(null, c, null, DefDistance,
DefBootstrap, false));
- c = (SequenceNode) c.left();
+ c = (BinaryNode) c.left();
}
if (realroot == null)
// node string contains Comment or structured/extended NH format info
/*
* if ((fcp-cp>1 && nf.substring(cp,fcp).trim().length()>1)) { // will
- * process in remains System.err.println("skipped text:
+ * process in remains jalview.bin.Console.errPrintln("skipped text:
* '"+nf.substring(cp,fcp)+"'"); }
*/
// verify termination.
{
try
{
- distance = (Double.valueOf(ndist.stringMatched(1))).floatValue();
+ distance = (Double.valueOf(ndist.stringMatched(1)))
+ .floatValue();
HasDistances = true;
nodehasdistance = true;
} catch (Exception e)
else
{
// Find a place to put the leaf
- SequenceNode newnode = new SequenceNode(null, c, nodename,
+ BinaryNode newnode = new SequenceNode(null, c, nodename,
(HasDistances) ? distance : DefDistance,
(HasBootstrap) ? bootstrap : DefBootstrap, false);
parseNHXNodeProps(c, commentString2);
{
// Insert a dummy node for polytomy
// dummy nodes have distances
- SequenceNode newdummy = new SequenceNode(null, c, null,
+ BinaryNode newdummy = new SequenceNode(null, c, null,
(HasDistances ? 0 : DefDistance), 0, true);
newdummy.SetChildren(c.left(), newnode);
c.setLeft(newdummy);
// Just advance focus, if we need to
if ((c.left() != null) && (!c.left().isLeaf()))
{
- c = (SequenceNode) c.left();
+ c = (BinaryNode) c.left();
}
}
}
* @param commentString
* @param commentString2
*/
- private void parseNHXNodeProps(SequenceNode c, String commentString)
+ private void parseNHXNodeProps(BinaryNode c, String commentString)
{
// TODO: store raw comment on the sequenceNode so it can be recovered when
// tree is output
// more codes here.
} catch (Exception e)
{
- System.err.println(
+ jalview.bin.Console.errPrintln(
"Couldn't parse code '" + code + "' = '" + value + "'");
e.printStackTrace(System.err);
}
*
* @return DOCUMENT ME!
*/
- public SequenceNode getTree()
+ public BinaryNode getTree()
{
return root;
}
*
* @return DOCUMENT ME!
*/
- private String printNodeField(SequenceNode c)
+ private String printNodeField(BinaryNode c)
{
return ((c.getName() == null) ? "" : nodeName(c.getName()))
+ ((HasBootstrap) ? ((c.getBootstrap() > -1)
*
* @return DOCUMENT ME!
*/
- private String printRootField(SequenceNode root)
+ private String printRootField(BinaryNode root)
{
return (printRootInfo)
? (((root.getName() == null) ? "" : nodeName(root.getName()))
}
// Non recursive call deals with root node properties
- public void print(StringBuffer tf, SequenceNode root)
+ public void print(StringBuffer tf, BinaryNode root)
{
if (root != null)
{
{
if (root.isDummy())
{
- _print(tf, (SequenceNode) root.right());
- _print(tf, (SequenceNode) root.left());
+ _print(tf, root.right());
+ _print(tf, root.left());
}
else
{
tf.append("(");
- _print(tf, (SequenceNode) root.right());
+ _print(tf, root.right());
if (root.left() != null)
{
tf.append(",");
}
- _print(tf, (SequenceNode) root.left());
+ _print(tf, root.left());
tf.append(")" + printRootField(root));
}
}
}
// Recursive call for non-root nodes
- public void _print(StringBuffer tf, SequenceNode c)
+ public void _print(StringBuffer tf, BinaryNode c)
{
if (c != null)
{
{
if (c.isDummy())
{
- _print(tf, (SequenceNode) c.left());
+ _print(tf, c.left());
if (c.left() != null)
{
tf.append(",");
}
- _print(tf, (SequenceNode) c.right());
+ _print(tf, c.right());
}
else
{
tf.append("(");
- _print(tf, (SequenceNode) c.right());
+ _print(tf, c.right());
if (c.left() != null)
{
tf.append(",");
}
- _print(tf, (SequenceNode) c.left());
+ _print(tf, c.left());
tf.append(")" + printNodeField(c));
}
}
{
if (args == null || args.length != 1)
{
- System.err.println(
- "Takes one argument - file name of a newick tree file.");
- System.exit(0);
+ Jalview.exit(
+ "Takes one argument - file name of a newick tree file.", 0);
}
File fn = new File(args[0]);
}
treefile.close();
- System.out.println("Read file :\n");
+ jalview.bin.Console.outPrintln("Read file :\n");
NewickFile trf = new NewickFile(args[0], DataSourceType.FILE);
trf.parse();
- System.out.println("Original file :\n");
+ jalview.bin.Console.outPrintln("Original file :\n");
Regex nonl = new Regex("\n+", "");
- System.out.println(nonl.replaceAll(newickfile.toString()) + "\n");
-
- System.out.println("Parsed file.\n");
- System.out.println("Default output type for original input.\n");
- System.out.println(trf.print());
- System.out.println("Without bootstraps.\n");
- System.out.println(trf.print(false));
- System.out.println("Without distances.\n");
- System.out.println(trf.print(true, false));
- System.out.println("Without bootstraps but with distanecs.\n");
- System.out.println(trf.print(false, true));
- System.out.println("Without bootstraps or distanecs.\n");
- System.out.println(trf.print(false, false));
- System.out.println("With bootstraps and with distances.\n");
- System.out.println(trf.print(true, true));
+ jalview.bin.Console.outPrintln(nonl.replaceAll(newickfile.toString()) + "\n");
+
+ jalview.bin.Console.outPrintln("Parsed file.\n");
+ jalview.bin.Console.outPrintln("Default output type for original input.\n");
+ jalview.bin.Console.outPrintln(trf.print());
+ jalview.bin.Console.outPrintln("Without bootstraps.\n");
+ jalview.bin.Console.outPrintln(trf.print(false));
+ jalview.bin.Console.outPrintln("Without distances.\n");
+ jalview.bin.Console.outPrintln(trf.print(true, false));
+ jalview.bin.Console.outPrintln("Without bootstraps but with distanecs.\n");
+ jalview.bin.Console.outPrintln(trf.print(false, true));
+ jalview.bin.Console.outPrintln("Without bootstraps or distanecs.\n");
+ jalview.bin.Console.outPrintln(trf.print(false, false));
+ jalview.bin.Console.outPrintln("With bootstraps and with distances.\n");
+ jalview.bin.Console.outPrintln(trf.print(true, true));
} catch (java.io.IOException e)
{
- System.err.println("Exception\n" + e);
+ jalview.bin.Console.errPrintln("Exception\n" + e);
e.printStackTrace();
}
}