rio - gsdir work...
[jalview.git] / forester / java / src / org / forester / sdi / GSDIR.java
1 // $Id:\r
2 // FORESTER -- software libraries and applications\r
3 // for evolutionary biology research and applications.\r
4 //\r
5 // Copyright (C) 2008-2013 Christian M. Zmasek\r
6 // All rights reserved\r
7 //\r
8 // This library is free software; you can redistribute it and/or\r
9 // modify it under the terms of the GNU Lesser General Public\r
10 // License as published by the Free Software Foundation; either\r
11 // version 2.1 of the License, or (at your option) any later version.\r
12 //\r
13 // This library is distributed in the hope that it will be useful,\r
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
16 // Lesser General Public License for more details.\r
17 //\r
18 // You should have received a copy of the GNU Lesser General Public\r
19 // License along with this library; if not, write to the Free Software\r
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\r
21 //\r
22 // Contact: phylosoft @ gmail . com\r
23 // WWW: www.phylosoft.org\r
24 \r
25 package org.forester.sdi;\r
26 \r
27 import java.util.ArrayList;\r
28 import java.util.List;\r
29 \r
30 import org.forester.phylogeny.Phylogeny;\r
31 import org.forester.phylogeny.PhylogenyMethods;\r
32 import org.forester.phylogeny.PhylogenyNode;\r
33 import org.forester.phylogeny.iterators.PhylogenyNodeIterator;\r
34 import org.forester.util.BasicDescriptiveStatistics;\r
35 \r
36 public class GSDIR extends GSDI {\r
37 \r
38     private int                              _min_duplications_sum;\r
39     private final BasicDescriptiveStatistics _duplications_sum_stats;\r
40     private final List<Phylogeny>            _min_duplications_sum_gene_trees;\r
41 \r
42     public GSDIR( final Phylogeny gene_tree, final Phylogeny species_tree, final boolean strip_gene_tree, final int x )\r
43             throws SDIException {\r
44         super( gene_tree, species_tree, true, strip_gene_tree, true, 1 );\r
45         _min_duplications_sum = Integer.MAX_VALUE;\r
46         _min_duplications_sum_gene_trees = new ArrayList<Phylogeny>();\r
47         _duplications_sum_stats = new BasicDescriptiveStatistics();\r
48         linkNodesOfG();\r
49         final List<PhylogenyNode> gene_tree_nodes_post_order = new ArrayList<PhylogenyNode>();\r
50         for( final PhylogenyNodeIterator it = gene_tree.iteratorPostorder(); it.hasNext(); ) {\r
51             gene_tree_nodes_post_order.add( it.next() );\r
52         }\r
53         for( final PhylogenyNode root : gene_tree_nodes_post_order ) {\r
54             _duplications_sum = 0;\r
55             _speciation_or_duplication_events_sum = 0;\r
56             _speciations_sum = 0;\r
57           \r
58             _gene_tree.reRoot( root.getId() ); //TODO reRoot( root )\r
59             PhylogenyMethods.preOrderReId( getSpeciesTree() );\r
60             //TEST, remove later\r
61             for( final PhylogenyNodeIterator it = _gene_tree.iteratorPostorder(); it.hasNext(); ) {\r
62                 final PhylogenyNode g = it.next();\r
63                 if ( g.isInternal() ) {\r
64                     g.setLink( null );\r
65                 }\r
66             }\r
67             geneTreePostOrderTraversal();\r
68            \r
69             if (  _duplications_sum < _min_duplications_sum ) {\r
70                 _min_duplications_sum = _duplications_sum;\r
71                 _min_duplications_sum_gene_trees.clear();\r
72                 _min_duplications_sum_gene_trees.add( getGeneTree().copy() );\r
73             }\r
74             else if (  _duplications_sum == _min_duplications_sum ) {\r
75                 _min_duplications_sum_gene_trees.add( getGeneTree().copy() );\r
76             }\r
77             System.out.println( getDuplicationsSum() );\r
78             _duplications_sum_stats.addValue(  _duplications_sum );\r
79         }\r
80     }\r
81 \r
82    \r
83    \r
84 \r
85     public int getMinDuplicationsSum() {\r
86         return _min_duplications_sum;\r
87     }\r
88 \r
89     public List<Phylogeny> getMinDuplicationsSumGeneTrees() {\r
90         return _min_duplications_sum_gene_trees;\r
91     }\r
92 \r
93     public BasicDescriptiveStatistics getDuplicationsSumStats() {\r
94         return _duplications_sum_stats;\r
95     }\r
96 }\r