From 5f9aef28807055a27c0104f6fbf608e9cf67d4d9 Mon Sep 17 00:00:00 2001
From: tcarver <tjc>
Date: Fri, 24 Jan 2014 15:03:55 +0000
Subject: [PATCH] add option to define a cut-off
---
.../components/alignment/CoveragePanel.java | 86 ++++++++++++++++---
1 file changed, 74 insertions(+), 12 deletions(-)
diff --git a/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java b/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java
index 64dbaa55c..2d01720ae 100644
--- a/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java
+++ b/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java
@@ -47,6 +47,7 @@ import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
+import javax.swing.JSeparator;
import javax.swing.JTextField;
import uk.ac.sanger.artemis.components.Plot;
@@ -71,11 +72,14 @@ import net.sf.samtools.SAMRecord;
private List<String> selected = new Vector<String>();
private boolean showGrid = false;
private boolean logScale = false;
+ private int maxCoverage = Integer.MAX_VALUE;
+ private JCheckBox fixHgt = new JCheckBox("Fix the graph height to cut-off", false);
protected CoveragePanel(final BamView bamView)
{
this();
this.bamView = bamView;
+ setMaxBases = false;
createMenus(popup);
addMouseListener(new PopupListener());
}
@@ -129,7 +133,18 @@ import net.sf.samtools.SAMRecord;
if(!plotHeatMap)
drawSelectionRange(g2, pixPerBase, start, end, getHeight(), Color.PINK);
drawPlot(g2);
- drawMax(g2);
+ drawMax(g2, getMaxCoverage());
+ }
+
+ protected float getMaxCoverage()
+ {
+ return (useMaxCutOff() ? maxCoverage: (float)max/(float)windowSize);
+ }
+
+ private boolean useMaxCutOff()
+ {
+ return (maxCoverage < Integer.MAX_VALUE && maxCoverage < (float)max/(float)windowSize) ||
+ (maxCoverage < Integer.MAX_VALUE && fixHgt.isSelected());
}
protected void init(BamView bamView, float pixPerBase, int start, int end)
@@ -187,7 +202,7 @@ import net.sf.samtools.SAMRecord;
max = thisPlot[i][0];
}
}
-
+
draw(g2, getWidth(), getHeight(), null);
}
@@ -310,7 +325,12 @@ import net.sf.samtools.SAMRecord;
{
g2.setColor(line.getLineColour());
int hgt2 = hgt/2;
- float maxVal = getValue(max, logScale);
+ float maxVal;
+
+ if(useMaxCutOff())
+ maxVal = getValue((maxCoverage*windowSize), logScale);
+ else
+ maxVal = getValue(max, logScale);
if(line.getPlotType() == LineAttributes.PLOT_TYPES[0])
{
@@ -538,25 +558,45 @@ import net.sf.samtools.SAMRecord;
final GridBagConstraints c = new GridBagConstraints();
final JTextField newBaseMax = new JTextField(Integer.toString(bamView.getMaxBases()), 10);
- c.gridy = 0;
+ c.gridy+=1;
+ c.gridwidth = 1;
if(setMaxBases)
{
final JLabel labMax1 = new JLabel("Zoom level before switching");
final JLabel labMax2 = new JLabel("to coverage view (in bases):");
c.anchor = GridBagConstraints.WEST;
+ c.gridy+=1;
opts.add(labMax1, c);
- c.gridy = c.gridy+1;
+ c.gridy+=1;
opts.add(labMax2, c);
opts.add(newBaseMax, c);
+ addSeparator(c, opts);
}
+ // cut-off
+ final JTextField maxCutoff = new JTextField(
+ (maxCoverage < Integer.MAX_VALUE ? Integer.toString(maxCoverage) : ""), 10);
+ c.gridy+=1;
+ c.anchor = GridBagConstraints.WEST;
+ opts.add(new JLabel("Coverage cut-off:"), c);
+ c.anchor = GridBagConstraints.EAST;
+ opts.add(maxCutoff, c);
+
+ c.gridy+=1;
+ c.gridwidth = GridBagConstraints.REMAINDER;
+ c.anchor = GridBagConstraints.WEST;
+ opts.add(fixHgt, c);
+
+ addSeparator(c, opts);
+
+ // window size
final JTextField newWinSize = new JTextField(Integer.toString(userWinSize), 10);
final JLabel lab = new JLabel("Window size:");
lab.setEnabled(!autoWinSize);
newWinSize.setEnabled(!autoWinSize);
- c.gridy = c.gridy+1;
- c.anchor = GridBagConstraints.EAST;
+ c.gridy+=1;
+ c.anchor = GridBagConstraints.WEST;
opts.add(lab, c);
opts.add(newWinSize, c);
@@ -570,22 +610,24 @@ import net.sf.samtools.SAMRecord;
}
});
c.anchor = GridBagConstraints.WEST;
- c.gridy = c.gridy+1;
+ c.gridy+=1;
c.gridwidth = GridBagConstraints.REMAINDER;
opts.add(autoSet, c);
+ addSeparator(c, opts);
+
final JCheckBox showCombined = new JCheckBox("Show combined plot", includeCombined);
if(bamView.bamList.size() == 1)
showCombined.setEnabled(false);
- c.gridy = c.gridy+1;
+ c.gridy+=1;
opts.add(showCombined, c);
final JCheckBox byStrand = new JCheckBox("Plot by strand", plotByStrand);
- c.gridy = c.gridy+1;
+ c.gridy+=1;
opts.add(byStrand, c);
final JCheckBox logMenu = new JCheckBox("Log scale", logScale);
- c.gridy = c.gridy+1;
+ c.gridy+=1;
opts.add(logMenu, c);
String window_options[] = { "OK", "Cancel" };
@@ -601,10 +643,14 @@ import net.sf.samtools.SAMRecord;
includeCombined = showCombined.isSelected();
plotByStrand = byStrand.isSelected();
logScale = logMenu.isSelected();
-
+
try
{
userWinSize = Integer.parseInt(newWinSize.getText().trim());
+ if(maxCutoff.getText().length() > 0)
+ maxCoverage = Integer.parseInt(maxCutoff.getText().trim());
+ else
+ maxCoverage = Integer.MAX_VALUE;
if(setMaxBases)
bamView.setMaxBases(Integer.parseInt(newBaseMax.getText().trim()));
}
@@ -614,6 +660,22 @@ import net.sf.samtools.SAMRecord;
}
}
+ /**
+ * Add a separator
+ * @param c
+ * @param opts
+ */
+ private void addSeparator(GridBagConstraints c, final JPanel opts)
+ {
+ c.gridy+=1;
+ c.gridwidth = GridBagConstraints.REMAINDER;
+ final JSeparator sep = new JSeparator();
+ c.fill = GridBagConstraints.HORIZONTAL;
+ opts.add(sep, c);
+ c.gridwidth = 1;
+ c.fill = GridBagConstraints.NONE;
+ }
+
/**
* Click on heatmap
* @param y
--
GitLab