package jalview.ext.forester;
-import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceI;
import jalview.math.MatrixI;
+import jalview.util.MessageManager;
import java.io.IOException;
import java.io.Writer;
import java.text.DecimalFormat;
import java.text.NumberFormat;
+import java.util.NoSuchElementException;
+import java.util.stream.IntStream;
import org.forester.evoinference.matrix.distance.DistanceMatrix;
import org.forester.util.ForesterUtil;
private final MatrixI jalviewMatrix;
- private Sequence[] sequences;
+ private final String[] identifiers;
- private final double[][] values;
-
- private String[] identifiers;
-
- public ForesterMatrix(MatrixI jalviewInputMatrix,
- Sequence[] matrixSequences)
+ public ForesterMatrix(final MatrixI jalviewInputMatrix,
+ final SequenceI[] matrixSequences)
{
this.jalviewMatrix = jalviewInputMatrix;
- this.sequences = matrixSequences;
+ this.identifiers = new String[matrixSequences.length];
-
- if (jalviewMatrix.width() != jalviewMatrix.height())
+ int i = 0;
+ for (SequenceI sequence : matrixSequences)
{
- // some kind of warning?
+ identifiers[i] = sequence.getName();
+ i++;
}
- values = new double[jalviewMatrix.width()][jalviewMatrix.height()];
-
}
- public ForesterMatrix(MatrixI jalviewInputMatrix,
- String[] matrixIdentifiers)
+ public ForesterMatrix(final MatrixI jalviewInputMatrix,
+ final String[] matrixIdentifiers)
{
this.jalviewMatrix = jalviewInputMatrix;
this.identifiers = matrixIdentifiers;
-
- if (jalviewMatrix.width() != jalviewMatrix.height())
- {
- // some kind of warning?
- }
-
- values = new double[jalviewMatrix.width()][jalviewMatrix.height()];
-
}
@Override
- public String getIdentifier(int i)
+ public String getIdentifier(final int i)
{
- // TODO Auto-generated method stub
- return null;
+ return identifiers[i]; // add handling if index is out of bounds
}
+
@Override
- public int getIndex(String identifier)
+ public int getIndex(final String identifier)
{
- return 0;
+ try {
+ return IntStream.range(0, identifiers.length)
+ .filter(x -> identifier.equals(identifiers[x])).findAny()
+ .getAsInt(); // stream to bypass otherwise having to duplicate the
+ // list
+ // with Arrays.aslist
+ }
+ catch (NoSuchElementException ex) {
+ throw new Error(MessageManager.formatMessage(
+ "exception.invalid_matrix_identifier", new String[]
+ { identifier }));
+ }
}
+ /**
+ * Returns the length of whichever is longest, columns or rows
+ */
@Override
public int getSize()
{
- return jalviewMatrix.width();
+ return jalviewMatrix.getValues().length;
}
+ /**
+ * See {@link MatrixI#getValue(int,int)} except that the order of column, row
+ * in the parameters is inverted here (as that is how forester demands it)
+ */
@Override
- public double getValue(int col, int row)
+ public double getValue(final int col, final int row)
{
return jalviewMatrix.getValue(row, col);
}
@Override
- public void setIdentifier(int i, String identifier)
+ public void setIdentifier(final int i, final String identifier)
{
- // TODO Auto-generated method stub
+ identifiers[i] = identifier;
}
+ /**
+ * See {@link MatrixI#setValue()} except that the order of column, row in the
+ * parameters is inverted here (as that is how forester demands it)
+ */
@Override
- public void setValue(int col, int row, double distance)
+ public void setValue(final int col, final int row, final double distance)
{
jalviewMatrix.setValue(row, col, distance);
return null;
}
+ /**
+ * See {@link MatrixI#getValues()}
+ */
@Override
public double[][] getValues()
{
-
- return null;
+ return jalviewMatrix.getValues();
}
@Override
- public void write(Writer w) throws IOException // directly copied from
+ public void write(final Writer w) throws IOException // directly copied from
// forester
{
w.write(" ");
}
+ public static DistanceMatrix convertJalviewToForester(
+ final MatrixI jalviewInputMatrix,
+ final SequenceI[] matrixSequences)
+ {
+ return DataConversions.createForesterDistanceMatrix(
+ jalviewInputMatrix, matrixSequences);
+
+ }
+
+ public static DistanceMatrix convertJalviewToForester(
+ final MatrixI jalviewInputMatrix,
+ final String[] matrixIdentifiers)
+ {
+ return DataConversions.createForesterDistanceMatrix(
+ jalviewInputMatrix, matrixIdentifiers);
+
+ }
+
}
\ No newline at end of file