JAL-2349 JAL-3855 experiment masking hidden columns in contact matrix
authorJim Procter <j.procter@dundee.ac.uk>
Fri, 21 Oct 2022 15:08:23 +0000 (16:08 +0100)
committerJim Procter <j.procter@dundee.ac.uk>
Fri, 21 Oct 2022 15:08:23 +0000 (16:08 +0100)
src/jalview/renderer/ContactMapRenderer.java

index 58e6ab1..ca7b0c8 100644 (file)
@@ -5,6 +5,7 @@ package jalview.renderer;
 
 import java.awt.Color;
 import java.awt.Graphics;
+import java.util.Iterator;
 
 import jalview.api.AlignViewportI;
 import jalview.datamodel.AlignmentAnnotation;
@@ -73,6 +74,11 @@ public class ContactMapRenderer implements AnnotationRowRendererI
         x++;
         continue;
       }
+      // feature still in development - highlight or omit regions hidden in
+      // the alignment - currently marks them as red rows
+      boolean maskHiddenCols = false;
+      // TODO: pass visible column mask to the ContactGeometry object so it maps
+      // only visible contacts to geometry
       // Bean holding mapping from contact list to pixels
       final ContactGeometry cgeom = new ContactGeometry(contacts,
               _aa.graphHeight);
@@ -86,10 +92,8 @@ public class ContactMapRenderer implements AnnotationRowRendererI
         // cend = (int) Math.min(contact_height,
         // Math.ceil(cstart + contacts_per_pixel * pixels_step));
 
-        // TODO show maximum colour for range - sort of done
-        // also need a 'getMaxPosForRange(start,end)' to accurately render
         Color col;
-        boolean rowsel = false;
+        boolean rowsel = false, containsHidden = false;
         if (columnSelection != null)
         {
           if (_aa.sequenceRef == null)
@@ -102,10 +106,18 @@ public class ContactMapRenderer implements AnnotationRowRendererI
             // numbering
             int s = _aa.sequenceRef.findIndex(ci.cStart);
             int e = _aa.sequenceRef.findIndex(ci.cEnd);
+            if (maskHiddenCols && hasHiddenColumns)
+            {
+              // TODO: turn into function and create test !!
+              Iterator<int[]> viscont = hiddenColumns
+                      .getVisContigsIterator(s, e, false);
+              containsHidden = !viscont.hasNext();
+            }
             if (s > 0 && s < _aa.sequenceRef.getLength())
             {
               rowsel = columnSelection.intersects(s, e);
             }
+
           }
         }
         // TODO: show selected region
@@ -122,13 +134,16 @@ public class ContactMapRenderer implements AnnotationRowRendererI
           {
             col = new Color(col.getBlue(), col.getBlue(), col.getBlue());
           }
-          g.setColor(col);
         }
         else
         {
           col = getColorForRange(min, max, contacts, ci.cStart, ci.cEnd);
-          g.setColor(col);
         }
+        if (containsHidden)
+        {
+          col = Color.red;
+        }
+        g.setColor(col);
         if (cgeom.pixels_step > 1)
         {
           g.fillRect(x * charWidth, ht, charWidth, 1 + cgeom.pixels_step);