- final double new_d = ( getDvalue( otu1, j ) + getDvalue( j, otu2 ) - d ) / 2;
- System.out.print( DF.format( new_d ) + " " );
- System.out.println( "going to remove: " + getDvalue( otu1, j ) + ", " + otu1 + ", " + _mappings[ j ] );
- _s.removePairing( getDvalue( otu1, j ), _mappings[ otu1 ], _mappings[ j ] );
- System.out.println( "going to remove: " + getDvalue( j, otu2 ) + ", " + otu2 + ", " + _mappings[ j ] );
- _s.removePairing( getDvalue( j, otu2 ), _mappings[ otu2 ], _mappings[ j ] );
- _s.addPairing( new_d, otu1, _mappings[ j ] );
- setDvalue( otu1, j, new_d );
- }
-
- private void setDvalue( final int i, final int j, final double d ) {
- if ( i < j ) {
- _d_values[ _mappings[ i ] ][ _mappings[ j ] ] = d;
+ final int mj = _mappings[ j ];
+ // final double new_d = ( getDvalueUnmapped( otu1, _mappings[ j ] ) + getDvalue( j, otu2 ) - d ) / 2;
+ // System.out.println( "\nnew d value: " + DF.format( new_d ) );
+ if ( otu1 < mj ) {
+ _s.removePairing( _d_values[ otu1 ][ mj ], otu1, mj );
+ }
+ else {
+ _s.removePairing( _d_values[ mj ][ otu1 ], mj, otu1 );
+ }
+ if ( _mappings[ otu2 ] < mj ) {
+ _s.removePairing( getDvalue( j, otu2 ), _mappings[ otu2 ], mj );
+ }
+ else {
+ _s.removePairing( getDvalue( j, otu2 ), mj, _mappings[ otu2 ] );
+ }
+ double new_d;
+ if ( otu1 < mj ) {
+ new_d = ( ( _d_values[ otu1 ][ mj ] + getDvalue( j, otu2 ) ) - d ) / 2;
+ _s.addPairing( new_d, otu1, mj );
+ _d_values[ otu1 ][ mj ] = new_d;
+ }
+ else {
+ new_d = ( ( _d_values[ mj ][ otu1 ] + getDvalue( j, otu2 ) ) - d ) / 2;
+ _s.addPairing( new_d, mj, otu1 );
+ _d_values[ mj ][ otu1 ] = new_d;