From: Jim Procter Date: Fri, 20 Aug 2021 14:12:11 +0000 (+0100) Subject: JAL-3855 JAL-2349 (d0h) class for holding and accessing PAE as a contact matrix X-Git-Tag: Release_2_11_4_0~562^2~1 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=b5ea0bbb85bef19c50fb4341bda9e9da9ef09b13;p=jalview.git JAL-3855 JAL-2349 (d0h) class for holding and accessing PAE as a contact matrix --- diff --git a/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java b/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java new file mode 100644 index 0000000..e61af44 --- /dev/null +++ b/src/jalview/ws/datamodel/alphafold/PAEContactMatrix.java @@ -0,0 +1,107 @@ +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.ContactRange; +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=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; + } + +}