From 59f8f1014e5ef09bf93c8a2cabe11b846012a521 Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Fri, 24 Jun 2022 17:11:34 +0100 Subject: [PATCH] JAL-2349 JAL-3855 resolve sequence position for contact lookup and catch out bound contact requests --- src/jalview/renderer/ContactMapRenderer.java | 8 +- .../ws/datamodel/alphafold/PAEContactMatrix.java | 78 +++++++++++--------- 2 files changed, 50 insertions(+), 36 deletions(-) diff --git a/src/jalview/renderer/ContactMapRenderer.java b/src/jalview/renderer/ContactMapRenderer.java index c9198ed..aaa8a61 100644 --- a/src/jalview/renderer/ContactMapRenderer.java +++ b/src/jalview/renderer/ContactMapRenderer.java @@ -61,9 +61,11 @@ public class ContactMapRenderer implements AnnotationRowRendererI x++; continue; } - /* - * {profile type, #values, total count, char1, pct1, char2, pct2...} - */ + if (_aa.sequenceRef != null) + { + // get the sequence position for the column + column = _aa.sequenceRef.findPosition(column) - 1; + } ContactListI contacts = viewport.getContactList(_aa, column); if (contacts == null) { diff --git a/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java b/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java index e61af44..af8dfc3 100644 --- a/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java +++ b/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java @@ -8,69 +8,81 @@ import jalview.datamodel.ContactListI; import jalview.datamodel.ContactListImpl; import jalview.datamodel.ContactListProviderI; import jalview.datamodel.ContactMatrixI; -import jalview.datamodel.ContactRange; import jalview.datamodel.SequenceI; public class PAEContactMatrix implements ContactMatrixI { - SequenceI refSeq=null; - int maxrow=0,maxcol=0; - int[] indices1,indices2; + 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 + public PAEContactMatrix(SequenceI _refSeq, Map pae_obj) + throws Exception { refSeq = _refSeq; - while (refSeq.getDatasetSequence()!=null) + while (refSeq.getDatasetSequence() != null) { - refSeq=refSeq.getDatasetSequence(); + 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 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; + maxrow = row; } - if (maxcol= elements.length) + { + return null; + } + + return new ContactListImpl(new ContactListProviderI() { @Override public int getContactHeight() { - return maxcol-1; + return maxcol - 1; } - + @Override public double getContactAt(int column) { - if (column<0 || column>=elements[_column].length) + if (column < 0 || column >= elements[_column].length) { return -1; } @@ -95,7 +107,7 @@ public class PAEContactMatrix implements ContactMatrixI @Override public boolean hasReferenceSeq() { - return (refSeq!=null); + return (refSeq != null); } @Override -- 1.7.10.2