git://source.jalview.org
/
jalview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'develop' into releases/Release_2_11_3_Branch
[jalview.git]
/
src
/
jalview
/
io
/
NewickFile.java
diff --git
a/src/jalview/io/NewickFile.java
b/src/jalview/io/NewickFile.java
index
c414145
..
b3c0011
100755
(executable)
--- a/
src/jalview/io/NewickFile.java
+++ b/
src/jalview/io/NewickFile.java
@@
-26,15
+26,20
@@
// TODO: Extended SequenceNodeI to hold parsed NHX strings
package jalview.io;
// TODO: Extended SequenceNodeI to hold parsed NHX strings
package jalview.io;
-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.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
+import java.util.Locale;
import java.util.StringTokenizer;
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
/**
* 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
@@
-74,7
+79,7
@@
import java.util.StringTokenizer;
*/
public class NewickFile extends FileParse
{
*/
public class NewickFile extends FileParse
{
- SequenceNode root;
+ BinaryNode root;
private boolean HasBootstrap = false;
private boolean HasBootstrap = false;
@@
-87,13
+92,13
@@
public class NewickFile extends FileParse
boolean printRootInfo = true;
boolean printRootInfo = true;
- private com.stevesoft.pat.Regex[] NodeSafeName = new com.stevesoft.pat.Regex[] {
- new com.stevesoft.pat.Regex().perlCode("m/[\\[,:'()]/"), // test for
+ private Regex[] NodeSafeName = new Regex[] {
+ new Regex().perlCode("m/[\\[,:'()]/"), // test for
// requiring
// quotes
// requiring
// quotes
- new com.stevesoft.pat.Regex().perlCode("s/'/''/"), // escaping quote
+ new Regex().perlCode("s/'/''/"), // escaping quote
// characters
// characters
- new com.stevesoft.pat.Regex().perlCode("s/\\/w/_/") // unqoted whitespace
+ new Regex().perlCode("s/\\/w/_/") // unqoted whitespace
// transformation
};
// transformation
};
@@
-141,7
+146,7
@@
public class NewickFile extends FileParse
* @param newtree
* DOCUMENT ME!
*/
* @param newtree
* DOCUMENT ME!
*/
- public NewickFile(SequenceNode newtree)
+ public NewickFile(BinaryNode newtree)
{
root = newtree;
}
{
root = newtree;
}
@@
-170,7
+175,7
@@
public class NewickFile extends FileParse
* @param distances
* DOCUMENT ME!
*/
* @param distances
* DOCUMENT ME!
*/
- public NewickFile(SequenceNode newtree, boolean bootstrap,
+ public NewickFile(BinaryNode newtree, boolean bootstrap,
boolean distances)
{
root = newtree;
boolean distances)
{
root = newtree;
@@
-190,7
+195,7
@@
public class NewickFile extends FileParse
* @param rootdistance
* DOCUMENT ME!
*/
* @param rootdistance
* DOCUMENT ME!
*/
- public NewickFile(SequenceNode newtree, boolean bootstrap,
+ public NewickFile(BinaryNode newtree, boolean bootstrap,
boolean distances, boolean rootdistance)
{
root = newtree;
boolean distances, boolean rootdistance)
{
root = newtree;
@@
-271,8
+276,8
@@
public class NewickFile extends FileParse
root = new SequenceNode();
root = new SequenceNode();
- SequenceNode realroot = null;
- SequenceNode c = root;
+ BinaryNode realroot = null;
+ BinaryNode c = root;
int d = -1;
int cp = 0;
int d = -1;
int cp = 0;
@@
-282,18
+287,17
@@
public class NewickFile extends FileParse
String nodename = null;
String commentString2 = null; // comments after simple node props
String nodename = null;
String commentString2 = null; // comments after simple node props
- float DefDistance = (float) 0.001; // @param Default distance for a node -
+ double DefDistance = (float) 0.001; // @param Default distance for a node -
// very very small
int DefBootstrap = -1; // @param Default bootstrap for a node
// very very small
int DefBootstrap = -1; // @param Default bootstrap for a node
- float distance = DefDistance;
+ double distance = DefDistance;
int bootstrap = DefBootstrap;
boolean ascending = false; // flag indicating that we are leaving the
// current node
int bootstrap = DefBootstrap;
boolean ascending = false; // flag indicating that we are leaving the
// current node
- com.stevesoft.pat.Regex majorsyms = new com.stevesoft.pat.Regex(
- "[(\\['),;]");
+ Regex majorsyms = new Regex("[(\\['),;]");
int nextcp = 0;
int ncp = cp;
int nextcp = 0;
int ncp = cp;
@@
-314,29
+318,27
@@
public class NewickFile extends FileParse
continue;
}
continue;
}
-
- ;
d++;
if (c.right() == null)
{
c.setRight(new SequenceNode(null, c, null, DefDistance,
DefBootstrap, false));
d++;
if (c.right() == null)
{
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
}
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));
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)
}
if (realroot == null)
@@
-354,8
+356,7
@@
public class NewickFile extends FileParse
// Deal with quoted fields
case '\'':
// Deal with quoted fields
case '\'':
- com.stevesoft.pat.Regex qnodename = new com.stevesoft.pat.Regex(
- "'([^']|'')+'");
+ Regex qnodename = new Regex("'([^']|'')+'");
if (qnodename.searchFrom(nf, fcp))
{
if (qnodename.searchFrom(nf, fcp))
{
@@
-363,8
+364,7
@@
public class NewickFile extends FileParse
nodename = new String(
qnodename.stringMatched().substring(1, nl - 1));
// unpack any escaped colons
nodename = new String(
qnodename.stringMatched().substring(1, nl - 1));
// unpack any escaped colons
- com.stevesoft.pat.Regex xpandquotes = com.stevesoft.pat.Regex
- .perlCode("s/''/'/");
+ Regex xpandquotes = Regex.perlCode("s/''/'/");
String widernodename = xpandquotes.replaceAll(nodename);
nodename = widernodename;
// jump to after end of quoted nodename
String widernodename = xpandquotes.replaceAll(nodename);
nodename = widernodename;
// jump to after end of quoted nodename
@@
-398,8
+398,7
@@
public class NewickFile extends FileParse
* '"+nf.substring(cp,fcp)+"'"); }
*/
// verify termination.
* '"+nf.substring(cp,fcp)+"'"); }
*/
// verify termination.
- com.stevesoft.pat.Regex comment = new com.stevesoft.pat.Regex(
- "]");
+ Regex comment = new Regex("]");
if (comment.searchFrom(nf, fcp))
{
// Skip the comment field
if (comment.searchFrom(nf, fcp))
{
// Skip the comment field
@@
-415,8
+414,6
@@
public class NewickFile extends FileParse
Error = ErrorStringrange(Error, "Unterminated comment", 3, fcp,
nf);
}
Error = ErrorStringrange(Error, "Unterminated comment", 3, fcp,
nf);
}
-
- ;
}
// Parse simpler field strings
String fstring = nf.substring(ncp, fcp);
}
// Parse simpler field strings
String fstring = nf.substring(ncp, fcp);
@@
-432,12
+429,9
@@
public class NewickFile extends FileParse
+ fstring.substring(cend + 1);
}
+ fstring.substring(cend + 1);
}
- com.stevesoft.pat.Regex uqnodename = new com.stevesoft.pat.Regex(
- "\\b([^' :;\\](),]+)");
- com.stevesoft.pat.Regex nbootstrap = new com.stevesoft.pat.Regex(
- "\\s*([0-9+]+)\\s*:");
- com.stevesoft.pat.Regex ndist = new com.stevesoft.pat.Regex(
- ":([-0-9Ee.+]+)");
+ Regex uqnodename = new Regex("\\b([^' :;\\](),]+)");
+ Regex nbootstrap = new Regex("\\s*([0-9+]+)\\s*:");
+ Regex ndist = new Regex(":([-0-9Ee.+]+)");
if (!parsednodename && uqnodename.search(fstring)
&& ((uqnodename.matchedFrom(1) == 0) || (fstring
if (!parsednodename && uqnodename.search(fstring)
&& ((uqnodename.matchedFrom(1) == 0) || (fstring
@@
-477,7
+471,7
@@
public class NewickFile extends FileParse
{
try
{
{
try
{
- bootstrap = (new Integer(nbootstrap.stringMatched(1)))
+ bootstrap = (Integer.valueOf(nbootstrap.stringMatched(1)))
.intValue();
HasBootstrap = true;
} catch (Exception e)
.intValue();
HasBootstrap = true;
} catch (Exception e)
@@
-494,7
+488,8
@@
public class NewickFile extends FileParse
{
try
{
{
try
{
- distance = (new Float(ndist.stringMatched(1))).floatValue();
+ distance = (Double.valueOf(ndist.stringMatched(1)))
+ .floatValue();
HasDistances = true;
nodehasdistance = true;
} catch (Exception e)
HasDistances = true;
nodehasdistance = true;
} catch (Exception e)
@@
-525,7
+520,7
@@
public class NewickFile extends FileParse
else
{
// Find a place to put the leaf
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);
(HasDistances) ? distance : DefDistance,
(HasBootstrap) ? bootstrap : DefBootstrap, false);
parseNHXNodeProps(c, commentString2);
@@
-545,7
+540,7
@@
public class NewickFile extends FileParse
{
// Insert a dummy node for polytomy
// dummy nodes have distances
{
// 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);
(HasDistances ? 0 : DefDistance), 0, true);
newdummy.SetChildren(c.left(), newnode);
c.setLeft(newdummy);
@@
-584,7
+579,7
@@
public class NewickFile extends FileParse
// Just advance focus, if we need to
if ((c.left() != null) && (!c.left().isLeaf()))
{
// Just advance focus, if we need to
if ((c.left() != null) && (!c.left().isLeaf()))
{
- c = (SequenceNode) c.left();
+ c = (BinaryNode) c.left();
}
}
}
}
}
}
@@
-638,7
+633,7
@@
public class NewickFile extends FileParse
* @param commentString
* @param commentString2
*/
* @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
{
// TODO: store raw comment on the sequenceNode so it can be recovered when
// tree is output
@@
-658,10
+653,10
@@
public class NewickFile extends FileParse
try
{
// parse out code/value pairs
try
{
// parse out code/value pairs
- if (code.toLowerCase().equals("b"))
+ if (code.toLowerCase(Locale.ROOT).equals("b"))
{
int v = -1;
{
int v = -1;
- Float iv = new Float(value);
+ Float iv = Float.valueOf(value);
v = iv.intValue(); // jalview only does integer bootstraps
// currently
c.setBootstrap(v);
v = iv.intValue(); // jalview only does integer bootstraps
// currently
c.setBootstrap(v);
@@
-685,7
+680,7
@@
public class NewickFile extends FileParse
*
* @return DOCUMENT ME!
*/
*
* @return DOCUMENT ME!
*/
- public SequenceNode getTree()
+ public BinaryNode getTree()
{
return root;
}
{
return root;
}
@@
-839,7
+834,7
@@
public class NewickFile extends FileParse
*
* @return DOCUMENT ME!
*/
*
* @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 ((c.getName() == null) ? "" : nodeName(c.getName()))
+ ((HasBootstrap) ? ((c.getBootstrap() > -1)
@@
-856,7
+851,7
@@
public class NewickFile extends FileParse
*
* @return DOCUMENT ME!
*/
*
* @return DOCUMENT ME!
*/
- private String printRootField(SequenceNode root)
+ private String printRootField(BinaryNode root)
{
return (printRootInfo)
? (((root.getName() == null) ? "" : nodeName(root.getName()))
{
return (printRootInfo)
? (((root.getName() == null) ? "" : nodeName(root.getName()))
@@
-871,7
+866,7
@@
public class NewickFile extends FileParse
}
// Non recursive call deals with root node properties
}
// 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 != null)
{
@@
-883,20
+878,20
@@
public class NewickFile extends FileParse
{
if (root.isDummy())
{
{
if (root.isDummy())
{
- _print(tf, (SequenceNode) root.right());
- _print(tf, (SequenceNode) root.left());
+ _print(tf, root.right());
+ _print(tf, root.left());
}
else
{
tf.append("(");
}
else
{
tf.append("(");
- _print(tf, (SequenceNode) root.right());
+ _print(tf, root.right());
if (root.left() != null)
{
tf.append(",");
}
if (root.left() != null)
{
tf.append(",");
}
- _print(tf, (SequenceNode) root.left());
+ _print(tf, root.left());
tf.append(")" + printRootField(root));
}
}
tf.append(")" + printRootField(root));
}
}
@@
-904,7
+899,7
@@
public class NewickFile extends FileParse
}
// Recursive call for non-root nodes
}
// 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 != null)
{
@@
-916,40
+911,43
@@
public class NewickFile extends FileParse
{
if (c.isDummy())
{
{
if (c.isDummy())
{
- _print(tf, (SequenceNode) c.left());
+ _print(tf, c.left());
if (c.left() != null)
{
tf.append(",");
}
if (c.left() != null)
{
tf.append(",");
}
- _print(tf, (SequenceNode) c.right());
+ _print(tf, c.right());
}
else
{
tf.append("(");
}
else
{
tf.append("(");
- _print(tf, (SequenceNode) c.right());
+ _print(tf, c.right());
if (c.left() != null)
{
tf.append(",");
}
if (c.left() != null)
{
tf.append(",");
}
- _print(tf, (SequenceNode) c.left());
+ _print(tf, c.left());
tf.append(")" + printNodeField(c));
}
}
}
}
tf.append(")" + printNodeField(c));
}
}
}
}
- // Test
+ /**
+ *
+ * @param args
+ * @j2sIgnore
+ */
public static void main(String[] args)
{
try
{
if (args == null || args.length != 1)
{
public static void main(String[] args)
{
try
{
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]);
}
File fn = new File(args[0]);
@@
-970,7
+968,7
@@
public class NewickFile extends FileParse
trf.parse();
System.out.println("Original file :\n");
trf.parse();
System.out.println("Original file :\n");
- com.stevesoft.pat.Regex nonl = new com.stevesoft.pat.Regex("\n+", "");
+ Regex nonl = new Regex("\n+", "");
System.out.println(nonl.replaceAll(newickfile.toString()) + "\n");
System.out.println("Parsed file.\n");
System.out.println(nonl.replaceAll(newickfile.toString()) + "\n");
System.out.println("Parsed file.\n");