package jalview.ws.datamodel.alphafold; import java.util.Iterator; import java.util.List; import java.util.Map; import jalview.datamodel.ContactListI; import jalview.datamodel.ContactListImpl; import jalview.datamodel.ContactListProviderI; import jalview.datamodel.ContactMatrixI; import jalview.datamodel.SequenceI; public class PAEContactMatrix implements ContactMatrixI { SequenceI refSeq = null; int maxrow = 0, maxcol = 0; int[] indices1, indices2; float[][] elements; float maxscore; @SuppressWarnings("unchecked") public PAEContactMatrix(SequenceI _refSeq, Map pae_obj) throws Exception { refSeq = _refSeq; while (refSeq.getDatasetSequence() != null) { refSeq = refSeq.getDatasetSequence(); } // convert the lists to primitive arrays and store int length = _refSeq.getEnd() - _refSeq.getStart() + 1; // assume indices are with respect to range defined by _refSeq on the // dataset refSeq Iterator rows = ((List) pae_obj.get("residue1")).iterator(); Iterator cols = ((List) pae_obj.get("residue2")).iterator(); Iterator scores = ((List) pae_obj.get("distance")) .iterator(); elements = new float[length][length]; while (scores.hasNext()) { float escore = scores.next().floatValue(); int row = rows.next().intValue(); int col = cols.next().intValue(); if (maxrow < row) { maxrow = row; } if (maxcol < col) { maxcol = col; } elements[row - 1][col - 1] = escore; } maxscore = ((Double) pae_obj.get("max_predicted_aligned_error")) .floatValue(); } @Override public ContactListI getContactList(final int _column) { if (_column < 0 || _column >= elements.length) { return null; } return new ContactListImpl(new ContactListProviderI() { @Override public int getContactHeight() { return maxcol - 1; } @Override public double getContactAt(int column) { if (column < 0 || column >= elements[_column].length) { return -1; } // TODO Auto-generated method stub return elements[_column][column]; } }); } @Override public float getMin() { return 0; } @Override public float getMax() { return maxscore; } @Override public boolean hasReferenceSeq() { return (refSeq != null); } @Override public SequenceI getReferenceSeq() { return refSeq; } }