inprogress
[jalview.git] / forester / java / src / org / forester / evoinference / distance / S.java
1
2 package org.forester.evoinference.distance;
3
4 import java.util.ArrayList;
5 import java.util.List;
6 import java.util.Map.Entry;
7 import java.util.Set;
8 import java.util.SortedMap;
9 import java.util.SortedSet;
10 import java.util.TreeMap;
11 import java.util.TreeSet;
12
13 import org.forester.evoinference.matrix.distance.BasicSymmetricalDistanceMatrix;
14
15 public class S {
16
17     private final List<SortedMap<Double, SortedSet<Integer>>> _data;
18
19     S() {
20         _data = new ArrayList<SortedMap<Double, SortedSet<Integer>>>();
21     }
22
23     void addPairing( final double key, final int value, final int j ) {
24         final SortedMap<Double, SortedSet<Integer>> m = _data.get( j );
25         addPairing( key, value, m );
26     }
27
28     SortedMap<Double, SortedSet<Integer>> getS( final int j ) {
29         return _data.get( j );
30     }
31
32     Set<Entry<Double, SortedSet<Integer>>> getSentrySet( final int j ) {
33         return _data.get( j ).entrySet();
34     }
35
36     void initialize( final BasicSymmetricalDistanceMatrix d ) {
37         for( int j = 0; j < d.getSize(); ++j ) {
38             final TreeMap<Double, SortedSet<Integer>> map = new TreeMap<Double, SortedSet<Integer>>();
39             _data.add( map );
40             for( int i = 0; i < j; ++i ) {
41                 addPairing( d.getValues()[ i ][ j ], i, map );
42             }
43         }
44     }
45
46     void removePairing( final double key, final int value, final int j ) {
47         final SortedMap<Double, SortedSet<Integer>> m = _data.get( j );
48         final SortedSet<Integer> x = m.get( key );
49         if ( x.size() == 1 ) {
50             if ( !x.contains( value ) ) {
51                 //TODO remove me later
52                 throw new IllegalStateException( "!x.contains( value )" );
53             }
54             m.remove( key );
55         }
56         else if ( x.size() > 1 ) {
57             final boolean removed = x.remove( value );
58             if ( !removed ) {
59                 //TODO remove me later
60                 throw new IllegalStateException( value + " not found" );
61             }
62         }
63         else {
64             //TODO remove me later
65             throw new IllegalStateException( "empty" );
66         }
67     }
68
69     private static void addPairing( final double key, final int value, final SortedMap<Double, SortedSet<Integer>> m ) {
70         if ( !m.containsKey( key ) ) {
71             final TreeSet<Integer> x = new TreeSet<Integer>();
72             x.add( value );
73             m.put( key, x );
74         }
75         else {
76             if ( m.get( key ).contains( value ) ) {
77                 //TODO remove me later
78                 throw new IllegalStateException( "pairing " + key + " -> " + value + " already exists" );
79             }
80             m.get( key ).add( value );
81         }
82     }
83 }