diff --git a/uk/ac/sanger/artemis/components/alignment/AbstractGraphPanel.java b/uk/ac/sanger/artemis/components/alignment/AbstractGraphPanel.java index 1f53fe42e48a02f0e8769c767cb3cbb5d6c7a639..075eb56df9ab770c015688568d93a9f06bafbc96 100644 --- a/uk/ac/sanger/artemis/components/alignment/AbstractGraphPanel.java +++ b/uk/ac/sanger/artemis/components/alignment/AbstractGraphPanel.java @@ -166,11 +166,11 @@ public class AbstractGraphPanel extends JPanel * @param val * @return */ - protected float getValue(int val) + protected float getValue(int val, boolean logScale) { if(val == 0) return 0.f; - return (float) (bamView.logScale ? Math.log(val) : val); + return (float) (logScale ? Math.log(val) : val); } protected void drawSelectionRange(final Graphics2D g2, diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java index ed133c2cf02ec9ad4c1667e7fc1b7045c98e44cc..8dcac2241bfff1a2dc22d206de234e7a296ef297 100644 --- a/uk/ac/sanger/artemis/components/alignment/BamView.java +++ b/uk/ac/sanger/artemis/components/alignment/BamView.java @@ -189,7 +189,7 @@ public class BamView extends JPanel private CoveragePanel coveragePanel; private SnpPanel snpPanel; - protected boolean logScale = false; + private boolean logScale = false; private Ruler ruler; private int nbasesInView; @@ -2729,7 +2729,7 @@ public class BamView extends JPanel laststart = -1; if(cbCoverageView.isSelected()) { - logMenuItem.setEnabled(true); + logMenuItem.setEnabled(false); coverageView.setPlotHeatMap(false); coverageView.setPlotByStrand(false); setViewportBtm(); diff --git a/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java b/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java index 6e03f0b193fd0eb5b6adaff5430506df1df6e498..64dbaa55c31135c22c92026a2c9c02651bd3f1af 100644 --- a/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java +++ b/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java @@ -70,6 +70,7 @@ import net.sf.samtools.SAMRecord; private List<HeatMapLn> heatPlots; private List<String> selected = new Vector<String>(); private boolean showGrid = false; + private boolean logScale = false; protected CoveragePanel(final BamView bamView) { @@ -309,7 +310,7 @@ import net.sf.samtools.SAMRecord; { g2.setColor(line.getLineColour()); int hgt2 = hgt/2; - float maxVal = getValue(max); + float maxVal = getValue(max, logScale); if(line.getPlotType() == LineAttributes.PLOT_TYPES[0]) { @@ -329,16 +330,16 @@ import net.sf.samtools.SAMRecord; else factor = -1; // reverse strand - y0 = (int) (hgt2 - (factor)*((getValue(thisPlot[i-1][col])/maxVal)*hgt2)); - y1 = (int) (hgt2 - (factor)*((getValue(thisPlot[i][col])/maxVal)*hgt2)); + y0 = (int) (hgt2 - (factor)*((getValue(thisPlot[i-1][col], logScale)/maxVal)*hgt2)); + y1 = (int) (hgt2 - (factor)*((getValue(thisPlot[i][col], logScale)/maxVal)*hgt2)); g2.drawLine(x0, y0, x1, y1); } } else { - y0 = (int) (hgt - ((getValue(thisPlot[i-1][0])/maxVal)*hgt)); - y1 = (int) (hgt - ((getValue(thisPlot[i][0])/maxVal)*hgt)); + y0 = (int) (hgt - ((getValue(thisPlot[i-1][0], logScale)/maxVal)*hgt)); + y1 = (int) (hgt - ((getValue(thisPlot[i][0], logScale)/maxVal)*hgt)); g2.drawLine(x0, y0, x1, y1); } } @@ -361,10 +362,10 @@ import net.sf.samtools.SAMRecord; { if(col == 0) shapeFwd.lineTo(xpos, - hgt2 - ((getValue(thisPlot[i][col])/maxVal)*hgt2)); + hgt2 - ((getValue(thisPlot[i][col], logScale)/maxVal)*hgt2)); else shapeBwd.lineTo(xpos, - hgt2 + ((getValue(thisPlot[i][col])/maxVal)*hgt2)); + hgt2 + ((getValue(thisPlot[i][col], logScale)/maxVal)*hgt2)); } } @@ -381,7 +382,7 @@ import net.sf.samtools.SAMRecord; { float xpos = i*windowSize*pixPerBase; shape.lineTo(xpos, - hgt - ((getValue(thisPlot[i][0])/maxVal)*hgt)); + hgt - ((getValue(thisPlot[i][0], logScale)/maxVal)*hgt)); } shape.lineTo(wid,hgt); g2.fill(shape); @@ -412,12 +413,12 @@ import net.sf.samtools.SAMRecord; heatPlots.add(new HeatMapLn(plotPos, plotPos+plotHgt, fName)); - float maxVal = getValue(max); + float maxVal = getValue(max, logScale); 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; + final float scaledValue = getValue(thisPlot[i][0], logScale) / maxVal; // set color based on value int colourIdx = (int)(definedColours.length * 0.999 * scaledValue); @@ -583,6 +584,10 @@ import net.sf.samtools.SAMRecord; c.gridy = c.gridy+1; opts.add(byStrand, c); + final JCheckBox logMenu = new JCheckBox("Log scale", logScale); + c.gridy = c.gridy+1; + opts.add(logMenu, c); + String window_options[] = { "OK", "Cancel" }; int select = JOptionPane.showOptionDialog(null, opts, "Coverage Options", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, @@ -595,6 +600,7 @@ import net.sf.samtools.SAMRecord; autoWinSize = autoSet.isSelected(); includeCombined = showCombined.isSelected(); plotByStrand = byStrand.isSelected(); + logScale = logMenu.isSelected(); try {