a98e03675609d324803c3768e9e9c773549e7cb2
[jalview.git] / forester / java / src / org / forester / surfacing / MinimalDomainomeCalculator.java
1
2 package org.forester.surfacing;
3
4 import java.util.ArrayList;
5 import java.util.HashSet;
6 import java.util.List;
7 import java.util.Set;
8 import java.util.SortedMap;
9
10 import org.forester.phylogeny.Phylogeny;
11 import org.forester.phylogeny.PhylogenyMethods;
12 import org.forester.phylogeny.PhylogenyNode;
13 import org.forester.phylogeny.iterators.PhylogenyNodeIterator;
14 import org.forester.protein.Domain;
15 import org.forester.protein.Protein;
16 import org.forester.species.BasicSpecies;
17 import org.forester.species.Species;
18
19 public final class MinimalDomainomeCalculator {
20
21     public static void main( final String[] args ) {
22         Set<String> a = new HashSet<String>();
23         Set<String> b = new HashSet<String>();
24         Set<String> c = new HashSet<String>();
25         Set<String> d = new HashSet<String>();
26         a.add( "x" );
27         a.add( "b" );
28         a.add( "c" );
29         b.add( "a" );
30         b.add( "b" );
31         b.add( "c" );
32         c.add( "a" );
33         c.add( "b" );
34         c.add( "c" );
35         c.add( "c" );
36         c.add( "f" );
37         d.add( "a" );
38         d.add( "c" );
39         d.add( "d" );
40         List<Set<String>> domains_per_genome_list = new ArrayList();
41         domains_per_genome_list.add( a );
42         domains_per_genome_list.add( b );
43         domains_per_genome_list.add( c );
44         domains_per_genome_list.add( d );
45         Set<String> x = x( domains_per_genome_list );
46         System.out.println( x );
47     }
48
49     static final public void calc( Phylogeny tre, SortedMap<Species, List<Protein>> protein_lists_per_species ) {
50         for( final PhylogenyNodeIterator iter = tre.iteratorPostorder(); iter.hasNext(); ) {
51             final PhylogenyNode node = iter.next();
52             if ( node.isInternal() ) {
53                 System.out.println();
54                 if ( node.getNodeData().isHasTaxonomy() ) {
55                     System.out.println( node.getNodeData().getTaxonomy().getScientificName() + ":" );
56                 }
57                 else {
58                     System.out.println( node.getName() + ":" );
59                 }
60                 final List<PhylogenyNode> e = node.getAllExternalDescendants();
61                 final List<Set<String>> domains_per_genome_list = new ArrayList();
62                 for( PhylogenyNode en : e ) {
63                     final String code = en.getNodeData().getTaxonomy().getTaxonomyCode();
64                     System.out.print( code + " " );
65                     //System.out.println( protein_lists_per_species );
66                     final List<Protein> x = protein_lists_per_species.get( new BasicSpecies( code ) );
67                     if ( x != null ) {
68                         final Set<String> d = new HashSet<String>();
69                         for( Protein protein : x ) {
70                             List<Domain> domains = protein.getProteinDomains();
71                             for( Domain domain : domains ) {
72                                 d.add( domain.getDomainId() );
73                             }
74                         }
75                         domains_per_genome_list.add( d );
76                     }
77                 }
78                 System.out.println();
79                 Set<String> x = x( domains_per_genome_list );
80                 System.out.println( x );
81             }
82         }
83     }
84
85     static final Set<String> x( List<Set<String>> domains_per_genome_list ) {
86         Set<String> first = domains_per_genome_list.get( 0 );
87         for( int i = 1; i < domains_per_genome_list.size(); ++i ) {
88             first.retainAll( domains_per_genome_list.get( i ) );
89         }
90         return first;
91     }
92 }