X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FColumnSelection.java;h=db83e76c485faa593084cbdeaacaf4a6aae7482f;hb=457478300feb669620d4d18b8e4ce77ebbfdc4ae;hp=3ccaab869730a770f4463eee8cb7242f136b43c1;hpb=6f04e0a80f3c3ba8087a1ad316debd395d0a4db0;p=jalview.git diff --git a/src/jalview/datamodel/ColumnSelection.java b/src/jalview/datamodel/ColumnSelection.java index 3ccaab8..db83e76 100644 --- a/src/jalview/datamodel/ColumnSelection.java +++ b/src/jalview/datamodel/ColumnSelection.java @@ -20,15 +20,15 @@ */ package jalview.datamodel; -import jalview.viewmodel.annotationfilter.AnnotationFilterParameter; -import jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField; - import java.util.ArrayList; import java.util.BitSet; import java.util.Collections; import java.util.List; import java.util.regex.PatternSyntaxException; +import jalview.viewmodel.annotationfilter.AnnotationFilterParameter; +import jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField; + /** * Data class holding the selected columns and hidden column ranges for a view. * Ranges are base 1. @@ -106,7 +106,7 @@ public class ColumnSelection void remove(int col) { - Integer colInt = new Integer(col); + Integer colInt = Integer.valueOf(col); if (selected.get(col)) { @@ -204,7 +204,7 @@ public class ColumnSelection // clear shifted bits and update List of selected columns selected.clear(temp); mask.set(temp - change); - order.set(i, new Integer(temp - change)); + order.set(i, Integer.valueOf(temp - change)); } } // lastly update the bitfield all at once @@ -309,7 +309,7 @@ public class ColumnSelection Integer colInt; for (int i = start; i < end; i++) { - colInt = new Integer(i); + colInt = Integer.valueOf(i); if (selection.contains(colInt)) { selection.remove(colInt); @@ -354,6 +354,22 @@ public class ColumnSelection } /** + * + */ + public boolean intersects(int from, int to) + { + // TODO: do this in a more efficient bitwise way + for (int f = from; f <= to; f++) + { + if (selection.isSelected(f)) + { + return true; + } + } + return false; + } + + /** * Answers true if no columns are selected, else false */ public boolean isEmpty() @@ -543,12 +559,52 @@ public class ColumnSelection * @param filterParams * @return */ - public int filterAnnotations(Annotation[] annotations, + public int filterAnnotations(AlignmentAnnotation ann_row, AnnotationFilterParameter filterParams) { + Annotation[] annotations = ann_row.annotations; // JBPNote - this method needs to be refactored to become independent of // viewmodel package this.clear(); + + if (ann_row.graph == AlignmentAnnotation.CUSTOMRENDERER && (filterParams + .getThresholdType() == AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD + || filterParams + .getThresholdType() == AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD)) + { + float tVal = filterParams.getThresholdValue(); + if (ann_row.sequenceRef != null) + { + // TODO - get ContactList from AlignmentView for non-seq-ref associatd + for (int column = 0; column < annotations.length; column++) + { + if (ann_row.annotations[column] == null) + { + continue; + } + + int cpos = ann_row.sequenceRef.findPosition(column) - 1; + ContactListI clist = ann_row.sequenceRef + .getContactListFor(ann_row, cpos); + for (int row = column + 8, + rowEnd = clist.getContactHeight(); row < rowEnd; row++) + { + if (filterParams + .getThresholdType() == AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD + ? (clist.getContactAt(row) > tVal) + : (clist.getContactAt(row) < tVal)) + { + addElement(column); + break; + // int column_forrowpos = ann_row.sequenceRef.findIndex(row + 1); + // addElement(column_forrowpos); + } + } + } + } + return selection.size(); + } + int addedCount = 0; int column = 0; do @@ -556,6 +612,7 @@ public class ColumnSelection Annotation ann = annotations[column]; if (ann != null) { + float value = ann.value; boolean matched = false; /* @@ -564,14 +621,14 @@ public class ColumnSelection */ if (filterParams .getThresholdType() == AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD - && ann.value > filterParams.getThresholdValue()) + && value > filterParams.getThresholdValue()) { matched = true; } if (!matched && filterParams .getThresholdType() == AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD - && ann.value < filterParams.getThresholdValue()) + && value < filterParams.getThresholdValue()) { matched = true; }