+ private final void updateDvalue( final int otu1, final int otu2, final int j, final double 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;
+ }
+ }
+
+ private double getDvalue( final int i, final int j ) {
+ if ( i < j ) {
+ return _d_values[ _mappings[ i ] ][ _mappings[ j ] ];
+ }
+ return _d_values[ _mappings[ j ] ][ _mappings[ i ] ];
+ }
+