2 // FORESTER -- software libraries and applications
3 // for evolutionary biology research and applications.
5 // Copyright (C) 2008-2009 Christian M. Zmasek
6 // Copyright (C) 2008-2009 Burnham Institute for Medical Research
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 // Contact: phylosoft @ gmail . com
24 // WWW: www.phylosoft.org/forester
26 package org.forester.sdi;
28 import java.util.ArrayList;
29 import java.util.List;
31 import org.forester.phylogeny.Phylogeny;
32 import org.forester.phylogeny.PhylogenyMethods;
33 import org.forester.phylogeny.PhylogenyNode;
34 import org.forester.phylogeny.data.Event;
35 import org.forester.phylogeny.iterators.PhylogenyNodeIterator;
36 import org.forester.util.GeneralTable;
40 private final static boolean ROOT_BY_MINIMIZING_MAPPING_COST = false;
41 private final static boolean ROOT_BY_MINIMIZING_SUM_OF_DUPS = true;
42 private final static boolean ROOT_BY_MINIMIZING_TREE_HEIGHT = true;
43 GeneralTable<String, Integer> _orthologs = null;
44 GeneralTable<String, Integer> _paralogs = null;
45 GeneralTable<String, Integer> _super_orthologs = null;
46 GeneralTable<String, Integer> _ultra_paralogs = null;
48 private void doInferOrthologs( final Phylogeny gene_tree, final Phylogeny species_tree ) {
49 final SDIR sdiunrooted = new SDIR();
50 final Phylogeny assigned_tree = sdiunrooted.infer( gene_tree,
52 ROOT_BY_MINIMIZING_MAPPING_COST,
53 ROOT_BY_MINIMIZING_SUM_OF_DUPS,
54 ROOT_BY_MINIMIZING_TREE_HEIGHT,
57 final List<PhylogenyNode> external_nodes = new ArrayList<PhylogenyNode>();
58 for( final PhylogenyNodeIterator iterator = assigned_tree.iteratorExternalForward(); iterator.hasNext(); ) {
59 external_nodes.add( iterator.next() );
61 final PhylogenyMethods methods = PhylogenyMethods.getInstance();
62 for( int i = 0; i < external_nodes.size(); ++i ) {
63 for( int j = 0; j < external_nodes.size(); ++j ) {
65 final PhylogenyNode node_i = external_nodes.get( i );
66 final PhylogenyNode node_j = external_nodes.get( j );
67 final PhylogenyNode lca = methods.obtainLCA( node_i, node_j );
68 final Event event = lca.getNodeData().getEvent();
69 final String node_i_name = node_i.getNodeData().getSequence().getName();
70 final String node_j_name = node_j.getNodeData().getSequence().getName();
71 if ( event.isDuplication() ) {
72 increaseCounter( getOrthologs(), node_i_name, node_j_name );
75 increaseCounter( getParalogs(), node_i_name, node_j_name );
82 public GeneralTable<String, Integer> getOrthologs() {
86 public GeneralTable<String, Integer> getParalogs() {
90 public GeneralTable<String, Integer> getSuperOrthologs() {
91 return _super_orthologs;
94 public GeneralTable<String, Integer> getUltraParalogs() {
95 return _ultra_paralogs;
98 private void increaseCounter( final GeneralTable<String, Integer> table,
99 final String node_i_name,
100 final String node_j_name ) {
101 final Integer value = table.getValue( node_i_name, node_j_name );
102 if ( value == null ) {
103 table.setValue( node_i_name, node_j_name, 1 );
106 table.setValue( node_i_name, node_j_name, value.intValue() + 1 );
110 private void init() {
111 _orthologs = new GeneralTable<String, Integer>();
112 _paralogs = new GeneralTable<String, Integer>();
113 _super_orthologs = new GeneralTable<String, Integer>();
114 _ultra_paralogs = new GeneralTable<String, Integer>();
117 private void setOrthologs( final GeneralTable<String, Integer> orthologs ) {
118 _orthologs = orthologs;
121 private void setParalogs( final GeneralTable<String, Integer> paralogs ) {
122 _paralogs = paralogs;
125 private void setSuperOrthologs( final GeneralTable<String, Integer> super_orthologs ) {
126 _super_orthologs = super_orthologs;
129 private void setUltraParalogs( final GeneralTable<String, Integer> ultra_paralogs ) {
130 _ultra_paralogs = ultra_paralogs;