From 998e32af913a2494ee6ce7ac7f7415bfce96be61 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Wed, 21 Jun 2017 11:59:28 +0100 Subject: [PATCH] JAL-2480 clarify that findOverlaps excludes spanning contact features --- src/jalview/datamodel/Sequence.java | 16 +++------------- src/jalview/datamodel/features/SequenceFeaturesI.java | 4 +++- test/jalview/datamodel/SequenceTest.java | 10 ++++++++++ 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index 5915d7e..cdfde5c 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -1826,7 +1826,7 @@ public class Sequence extends ASequence implements SequenceI /* * if the start or end column is gapped, startPos or endPos may be to the * left or right, and we may have included adjacent or enclosing features; - * remove any that are not enclosing, non-contact features + * remove any that are not enclosing features */ if (endPos > this.end || Comparison.isGap(sequence[fromColumn - 1]) || Comparison.isGap(sequence[toColumn - 1])) @@ -1837,18 +1837,8 @@ public class Sequence extends ASequence implements SequenceI SequenceFeature sf = it.next(); int featureStartColumn = findIndex(sf.getBegin()); int featureEndColumn = findIndex(sf.getEnd()); - boolean noOverlap = featureStartColumn > toColumn - || featureEndColumn < fromColumn; - - /* - * reject an 'enclosing' feature if it is actually a contact feature - */ - if (sf.isContactFeature() && featureStartColumn < fromColumn - && featureEndColumn > toColumn) - { - noOverlap = true; - } - if (noOverlap) + if (featureStartColumn > toColumn + || featureEndColumn < fromColumn) { it.remove(); } diff --git a/src/jalview/datamodel/features/SequenceFeaturesI.java b/src/jalview/datamodel/features/SequenceFeaturesI.java index 40beae3..803ef0c 100644 --- a/src/jalview/datamodel/features/SequenceFeaturesI.java +++ b/src/jalview/datamodel/features/SequenceFeaturesI.java @@ -22,7 +22,9 @@ public interface SequenceFeaturesI /** * Returns a (possibly empty) list of features, optionally restricted to * specified types, which overlap the given (inclusive) sequence position - * range + * range. Contact features are included if either start or end (or both) lie + * within the range. Non-contact features which span the range are also + * included. * * @param from * @param to diff --git a/test/jalview/datamodel/SequenceTest.java b/test/jalview/datamodel/SequenceTest.java index 71999e8..094bb24 100644 --- a/test/jalview/datamodel/SequenceTest.java +++ b/test/jalview/datamodel/SequenceTest.java @@ -1458,6 +1458,16 @@ public class SequenceTest assertTrue(found.contains(sf1)); assertTrue(found.contains(sf2)); assertTrue(found.contains(sf4)); + + // columns 9-12 (F--G) includes F/G (once only) but not B/H feature + found = sq.findFeatures(9, 12); + assertEquals(1, found.size()); + assertTrue(found.contains(sf4)); + + // column 4 (C) includes enclosing BCD but not B/H feature + found = sq.findFeatures(4, 4); + assertEquals(1, found.size()); + assertTrue(found.contains(sf1)); } @Test(groups = { "Functional" }) -- 1.7.10.2