in progress
[jalview.git] / forester / java / src / org / forester / surfacing / PrintableSpeciesSpecificDomainSimilariyData.java
1 // $Id:
2 // 22:09:42 cmzmasek Exp $
3 //
4 // FORESTER -- software libraries and applications
5 // for evolutionary biology research and applications.
6 //
7 // Copyright (C) 2008-2009 Christian M. Zmasek
8 // Copyright (C) 2008-2009 Burnham Institute for Medical Research
9 // All rights reserved
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 //
25 // Contact: phylosoft @ gmail . com
26 // WWW: www.phylosoft.org/forester
27
28 package org.forester.surfacing;
29
30 import java.text.DecimalFormat;
31 import java.text.NumberFormat;
32 import java.util.Set;
33 import java.util.SortedMap;
34 import java.util.TreeMap;
35
36 import org.forester.util.DescriptiveStatistics;
37
38 class PrintableSpeciesSpecificDomainSimilariyData implements SpeciesSpecificDomainSimilariyData {
39
40     private final static NumberFormat   FORMATTER = new DecimalFormat( "0.0E0" );
41     final SortedMap<DomainId, Integer>  _combinable_domain_id_to_count_map;
42     final private int                   _key_domain_proteins_count;
43     final private int                   _key_domain_domains_count;
44     final private int                   _combinable_domains_count;
45     final private DescriptiveStatistics _key_domain_confidence_descriptive_statistics;
46
47     public PrintableSpeciesSpecificDomainSimilariyData( final int key_domain_proteins_count,
48                                                         final int key_domain_domains_count,
49                                                         final int combinable_domains,
50                                                         final DescriptiveStatistics key_domain_confidence_descriptive_statistics ) {
51         _key_domain_proteins_count = key_domain_proteins_count;
52         _key_domain_domains_count = key_domain_domains_count;
53         _combinable_domains_count = combinable_domains;
54         _key_domain_confidence_descriptive_statistics = key_domain_confidence_descriptive_statistics;
55         _combinable_domain_id_to_count_map = new TreeMap<DomainId, Integer>();
56     }
57
58     @Override
59     public void addProteinsExhibitingCombinationCount( final DomainId domain_id, final int count ) {
60         if ( getCombinableDomainIdToCountsMap().containsKey( domain_id ) ) {
61             throw new IllegalArgumentException( "Domain with id " + domain_id + " already exists" );
62         }
63         getCombinableDomainIdToCountsMap().put( domain_id, count );
64     }
65
66     @Override
67     public SortedMap<DomainId, Integer> getCombinableDomainIdToCountsMap() {
68         return _combinable_domain_id_to_count_map;
69     }
70
71     private int getCombinableDomainsCount() {
72         return _combinable_domains_count;
73     }
74
75     private DescriptiveStatistics getKeyDomainConfidenceDescriptiveStatistics() {
76         return _key_domain_confidence_descriptive_statistics;
77     }
78
79     private int getKeyDomainDomainsCount() {
80         return _key_domain_domains_count;
81     }
82
83     private int getKeyDomainProteinsCount() {
84         return _key_domain_proteins_count;
85     }
86
87     @Override
88     public int getNumberOfProteinsExhibitingCombinationWith( final DomainId domain_id ) {
89         if ( !getCombinableDomainIdToCountsMap().containsKey( domain_id ) ) {
90             throw new IllegalArgumentException( "Domain with id " + domain_id + " not found" );
91         }
92         return getCombinableDomainIdToCountsMap().get( domain_id );
93     }
94
95     @Override
96     public String toString() {
97         return toStringBuffer( DomainSimilarityCalculator.Detailedness.LIST_COMBINING_DOMAIN_FOR_EACH_SPECIES, false )
98                 .toString();
99     }
100
101     @Override
102     public StringBuffer toStringBuffer( final DomainSimilarityCalculator.Detailedness detailedness, final boolean html ) {
103         final StringBuffer sb = new StringBuffer();
104         if ( detailedness == DomainSimilarityCalculator.Detailedness.PUNCTILIOUS ) {
105             sb.append( " " );
106             sb.append( getKeyDomainDomainsCount() );
107             sb.append( ", " );
108             sb.append( getKeyDomainProteinsCount() );
109             sb.append( ", " );
110             sb.append( getCombinableDomainsCount() );
111             sb.append( ", " );
112             if ( html ) {
113                 sb.append( "<i>" );
114             }
115             sb.append( FORMATTER.format( getKeyDomainConfidenceDescriptiveStatistics().arithmeticMean() ) );
116             if ( html ) {
117                 sb.append( "</i>" );
118             }
119             if ( !getCombinableDomainIdToCountsMap().isEmpty() ) {
120                 sb.append( ":" );
121             }
122         }
123         final Set<DomainId> ids = getCombinableDomainIdToCountsMap().keySet();
124         int i = 0;
125         for( final DomainId domain_id : ids ) {
126             ++i;
127             sb.append( " " );
128             if ( html ) {
129                 sb.append( "<a href=\"" + SurfacingConstants.PFAM_FAMILY_ID_LINK + domain_id.getId() + "\">"
130                         + domain_id.getId() + "</a>" );
131             }
132             else {
133                 sb.append( domain_id.getId() );
134             }
135             if ( detailedness == DomainSimilarityCalculator.Detailedness.PUNCTILIOUS ) {
136                 sb.append( ":" );
137                 sb.append( getCombinableDomainIdToCountsMap().get( domain_id ) );
138             }
139             if ( i < ids.size() - 1 ) {
140                 sb.append( "," );
141             }
142         }
143         return sb;
144     }
145 }