X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fdatamodel%2Falphafold%2FMappableContactMatrix.java;h=0e617d7ca801bda44947705eae21559ea21108f4;hb=e8b8c8601ccdc2fdb2093c5228c071d14182004f;hp=9a0173851353a20fbd26b7607503f3a6d3f07677;hpb=8a7a9401835f50b64bab13489de2781e8ced6ba8;p=jalview.git diff --git a/src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java b/src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java index 9a01738..0e617d7 100644 --- a/src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java +++ b/src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java @@ -193,21 +193,9 @@ public abstract class MappableContactMatrix> { throw new Error("Unimplemented when no local sequence given."); } - // return a ContactListI for column - // column is index into localFrame - // 1. map column to corresponding column in matrix - - final int _lcolumn = localFrame.findPosition(from); - final int _rcolumn = (from == to) ? _lcolumn - : localFrame.findPosition(to); - if (toSeq == null) - { - // no mapping - return new int[] { _lcolumn, _rcolumn }; - } - SequenceI lf = localFrame, uf = refSeq; + // check that localFrame is derived from refSeq // just look for dataset sequences and check they are the same. // in future we could use DBRefMappings/whatever. while (lf.getDatasetSequence() != null @@ -229,26 +217,45 @@ public abstract class MappableContactMatrix> + "' is not mappable for the given localFrame sequence. (" + localFrame.getName() + ")"); } + + // now look up from-to matrix columns in toSeq frame + + if (toSeq == null) + { + // no mapping - so we assume 1:1 + return new int[] { from, to }; + } + // from-to are matrix columns + // first locate on reference sequence - int[] mappedPositions = toSeq.locateInFrom(_lcolumn, _rcolumn); - // TODO - trim to localFrame ? - // if (mappedPositions!=null) { - // int s=-1,e=-1; - // for (int p=0;p=localFrame.getStart()) - // { - // s=p; // remember first position within local frame - // } - // if (e==-1 || mappedPositions[p]<=localFrame.getEnd()) - // { - // // update end pointer - // e=p; - // // compute local map - // mappedPositions[p] = localFrame.findIndex(mappedPositions[p]); - // } - // } - // } + int[] mappedPositions = toSeq.locateInFrom(from, to); + if (mappedPositions==null) + { + return null; + } + + // and now map to localFrame + // from-to columns on the associated sequence should be + // i. restricted to positions in localFrame + // ii. + +// int s = -1, e = -1; +// for (int p = 0; p < mappedPositions.length; p++) +// { +// if (s == -1 && mappedPositions[p] >= localFrame.getStart()) +// { +// s = p; // remember first position within local frame +// } +// if (e == -1 || mappedPositions[p] <= localFrame.getEnd()) +// { +// // update end pointer +// e = p; +// // compute local map +// mappedPositions[p] = localFrame.findIndex(mappedPositions[p]); +// } +// } +// int[] _trimmed = new int[e - s + 1]; +// return _trimmed; return mappedPositions; }