in pprogress...
[jalview.git] / forester_applications / src / org / forester / applications / domainloss_replacement.java
1
2 package org.forester.applications;
3
4 import java.io.File;
5 import java.util.Set;
6 import java.util.SortedSet;
7 import java.util.TreeSet;
8
9 import org.forester.io.parsers.util.ParserUtils;
10 import org.forester.phylogeny.Phylogeny;
11 import org.forester.phylogeny.PhylogenyNode;
12 import org.forester.phylogeny.iterators.PhylogenyNodeIterator;
13 import org.forester.util.ForesterUtil;
14
15 // javac -cp ~/SOFTWARE_DEV/ECLIPSE_WORKSPACE/forester/java/forester.jar
16 // ~/SOFTWARE_DEV/ECLIPSE_WORKSPACE/forester_applications/src/org/forester/applications/domainloss_replacement.java
17 // java -Xmx2048m -cp
18 // /home/czmasek/SOFTWARE_DEV/ECLIPSE_WORKSPACE/forester_applications/src/:/home/czmasek/SOFTWARE_DEV/ECLIPSE_WORKSPACE/forester/java/forester.jar
19 // org.forester.applications.domainloss_replacement
20 public class domainloss_replacement {
21
22     public static void main( final String args[] ) {
23         try {
24             if ( args.length != 2 ) {
25                 System.out
26                 .println( "Usage: domainloss_replacement <phylogeny file> <file with replacement characters>" );
27                 System.exit( -1 );
28             }
29             final Phylogeny p = ParserUtils.readPhylogenies( args[ 0 ] )[ 0 ];
30             final Set<String> replacement_domains = ForesterUtil.file2set( new File( args[ 1 ] ) );
31             for( final PhylogenyNodeIterator it = p.iteratorExternalForward(); it.hasNext(); ) {
32                 PhylogenyNode n = it.next();
33                 String name = null;
34                 if ( n.getNodeData().isHasTaxonomy()
35                         && !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getScientificName() ) ) {
36                     name = n.getNodeData().getTaxonomy().getScientificName();
37                 }
38                 else {
39                     name = n.getName();
40                 }
41                 final SortedSet<String> lost_chars = new TreeSet<String>();
42                 while ( !n.isRoot() ) {
43                     lost_chars.addAll( n.getNodeData().getBinaryCharacters().getLostCharacters() );
44                     n = n.getParent();
45                 }
46                 final int losses = lost_chars.size();
47                 lost_chars.retainAll( replacement_domains );
48                 final int intersection = lost_chars.size();
49                 final double percentage = ( 100.0 * intersection ) / losses;
50                 System.out.println( name + "\t" + intersection + "\t" + losses + "\t"
51                         + ForesterUtil.round( percentage, 3 ) );
52             }
53         }
54         catch ( final Exception e ) {
55             e.printStackTrace();
56             System.exit( -1 );
57         }
58     }
59 }