X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FAlignmentSorter.java;h=693e7947f62fe281256ac8639894f43ff8e86a52;hb=e5cba1e6a138feeeb8cf5b5823b3cafc89e71b9f;hp=6c46a3e2dd225ec43a5e1917e59a8bc2876cbd0d;hpb=b0f76adef2787dd14566525e66a4073278e75d67;p=jalview.git diff --git a/src/jalview/analysis/AlignmentSorter.java b/src/jalview/analysis/AlignmentSorter.java index 6c46a3e..693e794 100755 --- a/src/jalview/analysis/AlignmentSorter.java +++ b/src/jalview/analysis/AlignmentSorter.java @@ -811,17 +811,23 @@ public class AlignmentSorter for (int f = 0; f < sf.length; f++) { // filter for selection criteria - if ( - // ignore features outwith alignment start-stop positions. - (sf[f].end < sstart || sf[f].begin > sstop) || - // or ignore based on selection criteria - (featureLabels != null && !AlignmentSorter - .containsIgnoreCase(sf[f].type, featureLabels)) - || (groupLabels != null - // problem here: we cannot eliminate null feature group features - && (sf[f].getFeatureGroup() != null && !AlignmentSorter - .containsIgnoreCase(sf[f].getFeatureGroup(), - groupLabels)))) + SequenceFeature feature = sf[f]; + + /* + * double-check feature overlaps columns (JAL-2544) + * (could avoid this with a findPositions(fromCol, toCol) method) + * findIndex returns base 1 column values, startCol/endCol are base 0 + */ + boolean noOverlap = seqs[i].findIndex(feature.getBegin()) > stop + 1 + || seqs[i].findIndex(feature.getEnd()) < start + 1; + boolean skipFeatureType = featureLabels != null + && !AlignmentSorter.containsIgnoreCase(feature.type, + featureLabels); + boolean skipFeatureGroup = groupLabels != null + && (feature.getFeatureGroup() != null && !AlignmentSorter + .containsIgnoreCase(feature.getFeatureGroup(), + groupLabels)); + if (noOverlap || skipFeatureType || skipFeatureGroup) { // forget about this feature sf[f] = null; @@ -830,7 +836,7 @@ public class AlignmentSorter else { // or, also take a look at the scores if necessary. - if (!ignoreScore && !Float.isNaN(sf[f].getScore())) + if (!ignoreScore && !Float.isNaN(feature.getScore())) { if (seqScores[i] == 0) { @@ -838,7 +844,7 @@ public class AlignmentSorter } seqScores[i]++; hasScore[i] = true; - scores[i] += sf[f].getScore(); // take the first instance of this + scores[i] += feature.getScore(); // take the first instance of this // score. } }