JAL-4375 JAL-4381 Removal of AnnotationColouring and associated code
authorBen Soares <b.soares@dundee.ac.uk>
Wed, 21 Feb 2024 17:31:58 +0000 (17:31 +0000)
committerBen Soares <b.soares@dundee.ac.uk>
Wed, 21 Feb 2024 17:31:58 +0000 (17:31 +0000)
src/jalview/datamodel/Annotation.java
src/jalview/datamodel/annotations/AlphaFoldAnnotationRowBuilder.java
src/jalview/datamodel/annotations/AnnotationColouring.java [deleted file]
src/jalview/datamodel/annotations/AnnotationColouringI.java [deleted file]
src/jalview/datamodel/annotations/AnnotationColouringPLDDT.java [deleted file]
src/jalview/datamodel/annotations/AnnotationColouringRanges.java [deleted file]
src/jalview/datamodel/annotations/AnnotationRowBuilder.java
src/jalview/renderer/AnnotationRenderer.java

index 996015c..dae3236 100755 (executable)
@@ -22,8 +22,6 @@ package jalview.datamodel;
 
 import java.awt.Color;
 
-import jalview.datamodel.annotations.AnnotationColouringI;
-
 /**
  * Holds all annotation values for a position in an AlignmentAnnotation row
  * 
@@ -62,11 +60,6 @@ public class Annotation
   public Color colour;
 
   /**
-   * link back to the AnnotationRowBuilder
-   */
-  private AnnotationColouringI annotationColouring = null;
-
-  /**
    * Creates a new Annotation object.
    * 
    * @param displayChar
@@ -132,7 +125,6 @@ public class Annotation
     secondaryStructure = that.secondaryStructure;
     value = that.value;
     colour = that.colour;
-    annotationColouring = that.getAnnotationColouring();
   }
 
   /**
@@ -224,14 +216,4 @@ public class Annotation
             && (secondaryStructure == '\0' || (secondaryStructure == ' '))
             && colour == null);
   }
-
-  public void setAnnotationColouring(AnnotationColouringI a)
-  {
-    this.annotationColouring = a;
-  }
-
-  public AnnotationColouringI getAnnotationColouring()
-  {
-    return annotationColouring;
-  }
 }
index d805a21..4e9553e 100644 (file)
@@ -2,6 +2,7 @@ package jalview.datamodel.annotations;
 
 import jalview.datamodel.Annotation;
 import jalview.structure.StructureImportSettings;
+import jalview.structure.StructureImportSettings.TFType;
 
 public class AlphaFoldAnnotationRowBuilder extends AnnotationRowBuilder
 {
@@ -19,9 +20,24 @@ public class AlphaFoldAnnotationRowBuilder extends AnnotationRowBuilder
   @Override
   public void processAnnotation(Annotation annotation)
   {
-    AnnotationColouringI ac = new AnnotationColouringPLDDT();
-    annotation.setAnnotationColouring(ac);
-    annotation.colour = ac.valueToColour(annotation.value);
+    if (annotation.value > 90)
+    {
+      // Very High
+      annotation.colour = new java.awt.Color(0, 83, 214);
+    }
+    if (annotation.value <= 90)
+    {
+      // High
+      annotation.colour = new java.awt.Color(101, 203, 243);
+    }
+    if (annotation.value <= 70)
+    {
+      // Confident
+      annotation.colour = new java.awt.Color(255, 219, 19);
+    }
+    if (annotation.value < 50)
+    {
+      annotation.colour = new java.awt.Color(255, 125, 69);
+    }
   }
-
 }
\ No newline at end of file
diff --git a/src/jalview/datamodel/annotations/AnnotationColouring.java b/src/jalview/datamodel/annotations/AnnotationColouring.java
deleted file mode 100644 (file)
index e8597e4..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-package jalview.datamodel.annotations;
-
-import java.awt.Color;
-import java.util.List;
-import java.util.Map;
-
-public abstract class AnnotationColouring implements AnnotationColouringI
-{
-  @Override
-  public Color valueToColour(float val)
-  {
-    return null;
-  }
-
-  @Override
-  public List<Map.Entry<Float, Color>> rangeColours(float val1, float val2)
-  {
-    return null;
-  }
-}
diff --git a/src/jalview/datamodel/annotations/AnnotationColouringI.java b/src/jalview/datamodel/annotations/AnnotationColouringI.java
deleted file mode 100644 (file)
index 83ea2eb..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-package jalview.datamodel.annotations;
-
-import java.awt.Color;
-import java.util.List;
-import java.util.Map;
-
-public interface AnnotationColouringI
-{
-  /**
-   * Return the colour associated with this value
-   * 
-   * @param val
-   * @return
-   */
-  public Color valueToColour(float val);
-
-  /**
-   * Given two values, val1 and val2, returns a list of (float,Color) pairs (as
-   * Map.Entry objects). The float is a proportional distance (should start with
-   * 0 and end with 1) and the Color is the color change from that point.
-   * 
-   * @param val1
-   * @param val2
-   * @return
-   */
-  public List<Map.Entry<Float, Color>> rangeColours(float val1, float val2);
-}
diff --git a/src/jalview/datamodel/annotations/AnnotationColouringPLDDT.java b/src/jalview/datamodel/annotations/AnnotationColouringPLDDT.java
deleted file mode 100644 (file)
index ca51120..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-package jalview.datamodel.annotations;
-
-import java.awt.Color;
-
-public class AnnotationColouringPLDDT extends AnnotationColouringRanges
-        implements AnnotationColouringI
-{
-  private static final Color BLUE = new Color(0, 83, 214);
-
-  private static final Color CYAN = new Color(101, 203, 243);
-
-  private static final Color YELLOW = new Color(255, 219, 19);
-
-  private static final Color ORANGE = new Color(255, 125, 69);
-
-  static
-  {
-    addFirstColour(ORANGE);
-    addValColour(50, YELLOW);
-    addValColour(70, CYAN);
-    addValColour(90, BLUE);
-  }
-}
diff --git a/src/jalview/datamodel/annotations/AnnotationColouringRanges.java b/src/jalview/datamodel/annotations/AnnotationColouringRanges.java
deleted file mode 100644 (file)
index bcb9e5c..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-package jalview.datamodel.annotations;
-
-import java.awt.Color;
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class AnnotationColouringRanges extends AnnotationColouring
-{
-  private static List<Color> colours = new ArrayList<Color>();
-
-  private static List<Float> values = new ArrayList<Float>();
-
-  protected static void addValColour(float v, Color c)
-  {
-    values.add(v);
-    colours.add(c);
-  }
-
-  protected static void addFirstColour(Color c)
-  {
-    colours.add(0, c);
-  }
-
-  static
-  {
-    // e.g.
-    // addFirstColour(Color.black); -infty..25 = black
-    // addValColour(25,Color.darkGray); 25..50 = darkGray
-    // addValColour(50,Color.gray); 50..75 = gray
-    // addValColour(75,Color.lightGray); 75..100 = lightGray
-    // addValColour(100,Color.white); 100..infty = white
-  }
-
-  @Override
-  public Color valueToColour(float val)
-  {
-    Color col = null;
-    boolean set = false;
-    for (int i = 0; i < values.size(); i++)
-    {
-      float compareVal = values.get(i);
-      if (colours.size() > i)
-      {
-        col = colours.get(i);
-      }
-      if (val < compareVal)
-      {
-        set = true;
-        break;
-      }
-    }
-    if (!set && colours.size() > values.size())
-    {
-      col = colours.get(values.size());
-    }
-    return col;
-  }
-
-  @Override
-  public List<Map.Entry<Float, Color>> rangeColours(float val1, float val2)
-  {
-    String cacheKey = cacheKey(val1, val2);
-    if (!valColorsCache.containsKey(cacheKey))
-    {
-      List<Map.Entry<Float, Color>> valCols = new ArrayList<>();
-      float v1 = val1 <= val2 ? val1 : val2;
-      float v2 = val1 <= val2 ? val2 : val1;
-      boolean reversed = val1 > val2;
-      Color col = null;
-      boolean set1 = false;
-      boolean set2 = false;
-      int i = 0;
-      while (i < values.size() && (!set1 || !set2))
-      {
-        float compareVal = values.get(i);
-        if (colours.size() > i)
-        {
-          col = colours.get(i);
-        }
-
-        if (!set1 && v1 < compareVal)
-        {
-          // add the initial checkpoint
-          valCols.add(valCol(reversed ? 1f : 0f, col));
-          set1 = true;
-        }
-
-        if (!set2 && v2 < compareVal)
-        {
-          // add the final checkpoint
-          valCols.add(valCol(reversed ? 0f : 1f, col));
-          set2 = true;
-          break;
-        }
-
-        if (set1) // && !set2
-        {
-          // add an intermediate checkpoint
-          float v = (compareVal - v1) / (v2 - v1);
-          valCols.add(valCol(reversed ? 1f - v : v, col));
-        }
-
-        i++;
-      }
-      if (colours.size() > i)
-      {
-        col = colours.get(i);
-      }
-      // add above the final checkpoint colour(s) if not set
-      if (!set1)
-      {
-        valCols.add(valCol(reversed ? 1f : 0f, col));
-        set1 = true;
-      }
-      if (!set2)
-      {
-        // add the final checkpoint
-        valCols.add(valCol(reversed ? 0f : 1f, col));
-        set2 = true;
-      }
-      if (reversed)
-      {
-        Collections.reverse(valCols);
-      }
-      // put in the cache
-      valColorsCache.put(cacheKey, valCols);
-    }
-
-    return getFromCache(cacheKey);
-  }
-
-  private Map.Entry<Float, Color> valCol(Float v, Color c)
-  {
-    return new AbstractMap.SimpleEntry<Float, Color>(v, c);
-  }
-
-  private Map<String, List<Map.Entry<Float, Color>>> valColorsCache = new HashMap<String, List<Map.Entry<Float, Color>>>();
-
-  private List<Map.Entry<Float, Color>> getFromCache(String key)
-  {
-    // return a copy of the list in case of element order manipulation (e.g.
-    // valCols.remove(0))
-    return new ArrayList<Map.Entry<Float, Color>>(valColorsCache.get(key));
-  }
-
-  private static String cacheKey(float f1, float f2)
-  {
-    return new StringBuilder().append(Float.hashCode(f1)).append(' ')
-            .append(Float.hashCode(f2)).toString();
-  }
-}
index 648b173..2dec59c 100644 (file)
@@ -50,23 +50,6 @@ public class AnnotationRowBuilder
     return tfType;
   }
 
-  /**
-   * Colouring model for the annotation
-   * 
-   * @param ac
-   */
-  private AnnotationColouringI annotationColouring = null;
-
-  public void setAnnotationColouring(AnnotationColouringI ac)
-  {
-    annotationColouring = ac;
-  }
-
-  public AnnotationColouringI getAnnotationColouring()
-  {
-    return annotationColouring;
-  }
-
   public String getName()
   {
     return name;
index 524e291..d0ee0e9 100644 (file)
@@ -32,10 +32,8 @@ import java.awt.Stroke;
 import java.awt.geom.AffineTransform;
 import java.awt.image.ImageObserver;
 import java.util.BitSet;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Hashtable;
-import java.util.List;
 import java.util.Map;
 
 import org.jfree.graphics2d.svg.SVGGraphics2D;
@@ -53,7 +51,6 @@ import jalview.datamodel.Annotation;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.ProfilesI;
-import jalview.datamodel.annotations.AnnotationColouringI;
 import jalview.renderer.api.AnnotationRendererFactoryI;
 import jalview.renderer.api.AnnotationRowRendererI;
 import jalview.schemes.ColourSchemeI;
@@ -1452,7 +1449,6 @@ public class AnnotationRenderer
         continue;
       }
 
-      boolean individualColour = false;
       if (aa_annotations[column].colour == null)
       {
         g.setColor(Color.black);
@@ -1460,17 +1456,14 @@ public class AnnotationRenderer
       else
       {
         g.setColor(aa_annotations[column].colour);
-        individualColour = true;
       }
 
       boolean value1Exists = column > 0
               && aa_annotations[column - 1] != null;
       float value1 = 0f;
-      Color color1 = null;
       if (value1Exists)
       {
         value1 = aa_annotations[column - 1].value;
-        color1 = aa_annotations[column - 1].colour;
       }
       float value2 = aa_annotations[column].value;
       boolean nextValueExists = aa_annotations.length > column + 1
@@ -1495,8 +1488,6 @@ public class AnnotationRenderer
       y1 = y - yValueToPixelHeight(value1, min, range, graphHeight);
       y2 = y - yValueToPixelHeight(value2, min, range, graphHeight);
 
-      float v1 = value1;
-      float v2 = value2;
       int a1 = (x - 1) * charWidth + charWidth / 2;
       int b1 = y1;
       int a2 = x * charWidth + charWidth / 2;
@@ -1506,7 +1497,6 @@ public class AnnotationRenderer
         // only draw an initial half-line
         a1 = x * charWidth;
         b1 = y1 + (y2 - y1) / 2;
-        v1 = value1 + (value2 - value1) / 2;
       }
       else if (x == eRes - sRes)
       {
@@ -1514,23 +1504,11 @@ public class AnnotationRenderer
         // line
         a2 = x * charWidth - 1;
         b2 = y1 + (y2 - y1) / 2;
-        v2 = value1 + (value2 - value1) / 2;
       }
       else
       {
       }
-      AnnotationColouringI ac = aa_annotations[column]
-              .getAnnotationColouring();
-      List<Map.Entry<Float, Color>> valCols = ac == null ? null
-              : ac.rangeColours(v1, v2);
-      if (valCols != null)
-      {
-        drawSegmentedLine(g, valCols, a1, b1, a2, b2);
-      }
-      else
-      {
-        drawLine(g, a1, b1, a2, b2);
-      }
+      drawLine(g, a1, b1, a2, b2);
       x++;
     }
 
@@ -1576,93 +1554,6 @@ public class AnnotationRenderer
     return dashedLineLookup.get(charWidth);
   }
 
-  private void drawSegmentedLine(Graphics g,
-          List<Map.Entry<Float, Color>> valCols, int x1, int y1, int x2,
-          int y2)
-  {
-    if (valCols == null || valCols.size() == 0)
-    {
-      return;
-    }
-    // let's only go forwards+up|down -- try and avoid providing right to left
-    // x values
-    if (x2 < x1)
-    {
-      int tmp = y2;
-      y2 = y1;
-      y1 = tmp;
-      tmp = x2;
-      x2 = x1;
-      x1 = tmp;
-      Collections.reverse(valCols);
-    }
-    Graphics2D g2d = (Graphics2D) g.create();
-    float yd = y2 - y1;
-    boolean reverse = yd > 0; // reverse => line going DOWN (y increasing)
-    Map.Entry<Float, Color> firstValCol = valCols.remove(0);
-    float firstVal = firstValCol.getKey();
-    Color firstCol = firstValCol.getValue();
-    int yy1 = 0;
-    yy1 = reverse ? (int) Math.ceil(y1 + firstVal * yd)
-            : (int) Math.floor(y1 + firstVal * yd);
-    Color thisCol = firstCol;
-    for (int i = 0; i < valCols.size(); i++)
-    {
-      Map.Entry<Float, Color> valCol = valCols.get(i);
-      float val = valCol.getKey();
-      Color col = valCol.getValue();
-      int clipX = x1 - 1;
-      int clipW = x2 - x1 + 2;
-      int clipY = 0;
-      int clipH = 0;
-      int yy2 = 0;
-      if (reverse) // line going down
-      {
-        yy2 = (int) Math.ceil(y1 + val * yd);
-        g2d.setColor(thisCol);
-        clipY = yy1 - 1;
-        clipH = yy2 - yy1;
-        if (i == 0)
-        {
-          // highest segment, don't clip at the top
-          clipY -= 2;
-          clipH += 2;
-        }
-        if (i == valCols.size() - 1)
-        {
-          // lowest segment, don't clip at the bottom
-          clipH += 2;
-        }
-      }
-      else // line going up (or level)
-      {
-        yy2 = (int) Math.floor(y1 + val * yd);
-        // g2d.setColor(Color.cyan); g2d.drawRect(x1 - 1, yy1, x2 - x1 + 1, yy2
-        // -
-        // yy1 + 1);
-        g2d.setColor(col);
-        clipY = yy2;
-        clipH = yy1 - yy2;
-        if (i == 0)
-        {
-          // lowest segment, don't clip at the bottom
-          clipH += 2;
-        }
-        if (i == valCols.size() - 1)
-        {
-          // highest segment, don't clip at the top
-          clipY -= 2;
-          clipH += 2;
-        }
-      }
-      g2d.setClip(clipX, clipY, clipW, clipH);
-      drawLine(g2d, x1, y1, x2, y2);
-      yy1 = yy2;
-      thisCol = col;
-    }
-    g2d.dispose();
-  }
-
   private static int yValueToPixelHeight(float value, float min,
           float range, int graphHeight)
   {