diff --git a/playground/java/src/org/broadinstitute/sting/indels/StrictlyUpperTriangularMatrix.java b/playground/java/src/org/broadinstitute/sting/indels/StrictlyUpperTriangularMatrix.java new file mode 100755 index 000000000..37e346eef --- /dev/null +++ b/playground/java/src/org/broadinstitute/sting/indels/StrictlyUpperTriangularMatrix.java @@ -0,0 +1,93 @@ +package org.broadinstitute.sting.indels; + +public class StrictlyUpperTriangularMatrix { + private double [] data; + private int size; + + public StrictlyUpperTriangularMatrix(int dimension) { + assert dimension >=2 : "Distance matrix can not be smaller than 2x2"; + if ( dimension % 2 == 0 ) { + int k = dimension >> 1; // dimension/2 + data = new double[k*(dimension-1)]; + } else { + int k = ( dimension -1 ) >> 1; // (dimension -1)/2 + data = new double[k*dimension]; + } + size = dimension; + } + + public double get(int i, int j) { + assert (i < size) && (j= j ) return 0.0; + + // we are guaranteed now that i < j; now + // translate i,j into the linear offset into our internal data array and return the value: + return data[ linearOffset(i,j) ]; + } + + public void set(int i, int j, double value) { + assert (i < size) && (j>= 1; // k/=2 + // now k is the offset of the first stored element in row i + return ( k + (j - i - 1)); + } + + private static void testMe() { + StrictlyUpperTriangularMatrix m = new StrictlyUpperTriangularMatrix(3); + + m.set(0,1,0.54321); + m.set(0,2,0.43215); + m.set(1,2,0.321); + + System.out.println( m.format()); + } + + public static void main(String[] argv) { + testMe(); + } +}