* @return LCA of node1 and node2
*/
public final static PhylogenyNode calculateLCA( PhylogenyNode node1, PhylogenyNode node2 ) {
+ if ( node1 == null ) {
+ throw new IllegalArgumentException( "first argument (node) is null" );
+ }
+ if ( node2 == null ) {
+ throw new IllegalArgumentException( "second argument (node) is null" );
+ }
if ( node1 == node2 ) {
return node1;
}
* @return LCA of node1 and node2
*/
public final static PhylogenyNode calculateLCAonTreeWithIdsInPreOrder( PhylogenyNode node1, PhylogenyNode node2 ) {
+ if ( node1 == null ) {
+ throw new IllegalArgumentException( "first argument (node) is null" );
+ }
+ if ( node2 == null ) {
+ throw new IllegalArgumentException( "second argument (node) is null" );
+ }
while ( node1 != node2 ) {
if ( node1.getId() > node2.getId() ) {
node1 = node1.getParent();
* @param n
* external PhylogenyNode whose strictly speciation related Nodes
* are to be returned
- * @return Vector of references to all strictly speciation related Nodes of
+ * @return References to all strictly speciation related Nodes of
* PhylogenyNode n of this Phylogeny, null if this Phylogeny is
* empty or if n is internal
*/
public static List<PhylogenyNode> getSuperOrthologousNodes( final PhylogenyNode n ) {
// FIXME
- PhylogenyNode node = n, deepest = null;
+ PhylogenyNode node = n;
+ PhylogenyNode deepest = null;
final List<PhylogenyNode> v = new ArrayList<PhylogenyNode>();
if ( !node.isExternal() ) {
return null;
return nodes;
}
- public static String inferCommonPartOfScientificNameOfDescendants( final PhylogenyNode node ) {
- final List<PhylogenyNode> descs = node.getDescendants();
- String sn = null;
- for( final PhylogenyNode n : descs ) {
- if ( !n.getNodeData().isHasTaxonomy()
- || ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getScientificName() ) ) {
- return null;
- }
- else if ( sn == null ) {
- sn = n.getNodeData().getTaxonomy().getScientificName().trim();
- }
- else {
- String sn_current = n.getNodeData().getTaxonomy().getScientificName().trim();
- if ( !sn.equals( sn_current ) ) {
- boolean overlap = false;
- while ( ( sn.indexOf( ' ' ) >= 0 ) || ( sn_current.indexOf( ' ' ) >= 0 ) ) {
- if ( ForesterUtil.countChars( sn, ' ' ) > ForesterUtil.countChars( sn_current, ' ' ) ) {
- sn = sn.substring( 0, sn.lastIndexOf( ' ' ) ).trim();
- }
- else {
- sn_current = sn_current.substring( 0, sn_current.lastIndexOf( ' ' ) ).trim();
- }
- if ( sn.equals( sn_current ) ) {
- overlap = true;
- break;
- }
- }
- if ( !overlap ) {
- return null;
- }
- }
- }
- }
- return sn;
- }
-
public static boolean isHasExternalDescendant( final PhylogenyNode node ) {
for( int i = 0; i < node.getNumberOfDescendants(); ++i ) {
if ( node.getChildNode( i ).isExternal() ) {
TAXONOMY_ID;
}
- public static enum TAXONOMY_EXTRACTION {
- NO, YES, PFAM_STYLE_ONLY;
- }
-
public static enum DESCENDANT_SORT_PRIORITY {
TAXONOMY, SEQUENCE, NODE_NAME;
}