From c65931a7b6b0625f39b2e50d318b2b330679d64f Mon Sep 17 00:00:00 2001
From: tcarver <tjc>
Date: Wed, 24 Oct 2012 15:34:48 +0100
Subject: [PATCH] fixes for heatmap

---
 .../artemis/components/alignment/BamView.java |  6 +-
 .../components/alignment/CoveragePanel.java   | 70 ++++++++++++-------
 2 files changed, 46 insertions(+), 30 deletions(-)

diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java
index ca938c72d..b0d974619 100644
--- a/uk/ac/sanger/artemis/components/alignment/BamView.java
+++ b/uk/ac/sanger/artemis/components/alignment/BamView.java
@@ -677,7 +677,7 @@ public class BamView extends JPanel
     final int cov[] = new int[nbins];
     for(int i=0; i<nbins; i++)
       cov[i] = 0;
-    
+
     final CloseableIterator<SAMRecord> it = inputSam.queryOverlapping(refName, start, end);
     try
     {
@@ -1809,7 +1809,7 @@ public class BamView extends JPanel
     }
 
     int hgt = jspView.getVisibleRect().height-scaleHeight;
-    if(!cbCoverageStrandView.isSelected() && !cbCoverageHeatMap.isSelected())
+    if(!cbCoverageStrandView.isSelected() && !coverageView.isPlotHeatMap())
     {
       try
       {
@@ -1824,7 +1824,7 @@ public class BamView extends JPanel
     g2.translate(0, getJspView().getViewport().getViewPosition().y);
 
     coverageView.drawSelectionRange(g2, pixPerBase, start, end, getHeight(), Color.PINK);
-    coverageView.draw(g2, getWidth(), hgt);
+    coverageView.draw(g2, getWidth(), hgt, hideBamList);
     coverageView.drawMax(g2);  
   }
   
diff --git a/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java b/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java
index 8942ad5e0..1f46780d7 100644
--- a/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java
+++ b/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java
@@ -180,7 +180,7 @@ import net.sf.samtools.SAMRecord;
         }
       }
       
-      draw(g2, getWidth(), getHeight());
+      draw(g2, getWidth(), getHeight(), null);
     }
     
     protected void addRecord(SAMRecord thisRead, int offset, String fileName)
@@ -196,7 +196,7 @@ import net.sf.samtools.SAMRecord;
       }
 
       final int col;
-      if(plotByStrand && thisRead.getReadNegativeStrandFlag())
+      if(plotByStrand && !isPlotHeatMap() && thisRead.getReadNegativeStrandFlag())
         col = 1;
       else
         col = 0;
@@ -226,7 +226,7 @@ import net.sf.samtools.SAMRecord;
       }
     }
     
-    protected void draw(Graphics2D g2, int wid, int hgt)
+    protected void draw(Graphics2D g2, int wid, int hgt, List<Short> hideBamList)
     {
       int size = bamView.bamList.size();
       if(includeCombined)
@@ -237,35 +237,43 @@ import net.sf.samtools.SAMRecord;
       else
         lines = getLineAttributes(size);
 
-
       Enumeration<String> plotEum = plots.keys();
       while(plotEum.hasMoreElements())
       {
         String fileName = (String) plotEum.nextElement();
         int[][] thisPlot = plots.get(fileName);
 
-        int index;
+        int idx;
         if(fileName.equals("-1"))
-          index = lines.length-1;
+          idx = lines.length-1;
         else
-          index = bamView.bamList.indexOf(fileName);
+          idx = bamView.bamList.indexOf(fileName);
 
+        final LineAttributes line = lines[idx];
         if(plotHeatMap)
-          drawHeatMap(g2, hgt, index, thisPlot);
+        {
+          if(hideBamList != null)
+          {
+            for(Short i: hideBamList)
+              if(idx > i)
+                idx--;
+          }
+          drawHeatMap(g2, hgt, line, idx, thisPlot);
+        }
         else
-          drawLinePlot(g2, wid, hgt, index, thisPlot);
+          drawLinePlot(g2, wid, hgt, line, thisPlot);
       }
     }
     
-    private void drawLinePlot(final Graphics2D g2, int wid, int hgt, int index, int[][] thisPlot)
+    private void drawLinePlot(final Graphics2D g2, int wid, int hgt, LineAttributes line, int[][] thisPlot)
     {
-      g2.setColor(lines[index].getLineColour());
+      g2.setColor(line.getLineColour());
       int hgt2 = hgt/2;
       float maxVal = getValue(max);
       
-      if(lines[index].getPlotType() == LineAttributes.PLOT_TYPES[0])
+      if(line.getPlotType() == LineAttributes.PLOT_TYPES[0])
       {
-        g2.setStroke(lines[index].getStroke());
+        g2.setStroke(line.getStroke());
         for(int i=1; i<thisPlot.length; i++)
         {
           int x0 = (int) ((((i-1)*(windowSize)) + windowSize/2.f)*pixPerBase);
@@ -351,34 +359,34 @@ import net.sf.samtools.SAMRecord;
      * Draw as heat map
      * @param g2
      * @param hgt
-     * @param index
+     * @param line
+     * @param idx
      * @param thisPlot
      */
-    private void drawHeatMap(final Graphics2D g2, int hgt, int index, int[][] thisPlot)
+    private void drawHeatMap(final Graphics2D g2, int hgt, LineAttributes line, int idx, int[][] thisPlot)
     { // heat map
-      int NUMBER_OF_SHADES = 254;
+      int NUMBER_OF_SHADES = 240;
       int plotHgt = hgt/plots.size();
-      int plotPos = plotHgt * index;
-      Color definedColours[] = Plot.makeColours(lines[index].getLineColour(),
+      int plotPos = plotHgt * idx;
+      Color definedColours[] = Plot.makeColours(line.getLineColour(),
           NUMBER_OF_SHADES);
-      
+
       float maxVal = getValue(max);
       for(int i=0; i<thisPlot.length; i++)
       {
         int xpos = (int) (i*windowSize*pixPerBase);
-
         // this is a number between 0.0 and 1.0
         final float scaledValue = getValue(thisPlot[i][0]) / maxVal;
         // set color based on value
-        int colourIndex = 
+        int colourIdx = 
           (int)(definedColours.length * 0.999 * scaledValue);
 
-        if(colourIndex > definedColours.length - 1)
-          colourIndex = definedColours.length - 1;
-        else if (colourIndex < 0)
-          colourIndex = 0;
-        
-        g2.setColor(definedColours[ colourIndex ]);
+        if(colourIdx > definedColours.length - 1)
+          colourIdx = definedColours.length - 1;
+        else if (colourIdx <= 0)
+          continue;
+
+        g2.setColor(definedColours[ colourIdx ]);
         g2.fillRect(xpos, plotPos, windowSize, plotHgt);
       }
     }
@@ -433,6 +441,14 @@ import net.sf.samtools.SAMRecord;
       this.plotHeatMap = plotHeatMap;
     }
 
+    /**
+     * @return the plotHeatMap
+     */
+    protected boolean isPlotHeatMap()
+    {
+      return plotHeatMap;
+    }
+
     private void defineOpts()
     {
       final JPanel opts = new JPanel(new GridBagLayout());
-- 
GitLab