From 9b7179ee352741ecc48b93cfc41cc05e8e7bf7f7 Mon Sep 17 00:00:00 2001 From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04> Date: Tue, 1 Dec 2009 14:32:05 +0000 Subject: [PATCH] add an option to plot on a log scale git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@12520 ee4ac58c-ac51-4696-9907-e4b3aa274f04 --- .../artemis/components/alignment/BamView.java | 57 ++++++++++++++++++- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java index 7abe2392c..f11b15792 100644 --- a/uk/ac/sanger/artemis/components/alignment/BamView.java +++ b/uk/ac/sanger/artemis/components/alignment/BamView.java @@ -145,6 +145,7 @@ public class BamView extends JPanel private JPanel mainPanel; private CoveragePanel coveragePanel; private boolean showScale = true; + private boolean logScale = false; private Ruler ruler; private int nbasesInView; @@ -156,6 +157,8 @@ public class BamView extends JPanel private boolean asynchronous = true; private boolean showBaseAlignment = false; + + private JCheckBoxMenuItem logMenuItem = new JCheckBoxMenuItem("Use Log Scale", logScale); private JCheckBoxMenuItem checkBoxStackView = new JCheckBoxMenuItem("Stack View"); private JCheckBoxMenuItem baseQualityColour = new JCheckBoxMenuItem("Colour by Base Quality");; private JCheckBoxMenuItem markInsertions = new JCheckBoxMenuItem("Mark Insertions"); @@ -937,7 +940,7 @@ public class BamView extends JPanel { if(isSingle) { - int ypos = (getHeight() - scaleHeight) - samRecord.getReadString().length(); + int ypos = getYPos(scaleHeight, samRecord.getReadString().length()); // (getHeight() - scaleHeight) - samRecord.getReadString().length(); if(ypos > r.getMaxY() || ypos < r.getMinY()) continue; @@ -947,7 +950,7 @@ public class BamView extends JPanel continue; } - int ypos = (getHeight() - scaleHeight) - ( Math.abs(samRecord.getInferredInsertSize()) ); + int ypos = getYPos(scaleHeight, Math.abs(samRecord.getInferredInsertSize())); if( (ypos > r.getMaxY() || ypos < r.getMinY()) && ypos > 0 ) continue; @@ -992,6 +995,21 @@ public class BamView extends JPanel drawYScale(g2, scaleHeight); } + private int getYPos(int scaleHeight, int size) + { + int ypos; + + if(!logScale) + ypos = (getHeight() - scaleHeight) - size; + else + { + int logInfSize = (int)( Math.log(size) * 100); + ypos = (getHeight() - scaleHeight) - logInfSize; + } + + return ypos; + } + /** * Draw the reads as lines in vertical stacks. The reads are colour * coded as follows: @@ -1427,6 +1445,23 @@ public class BamView extends JPanel g2.setColor(Color.black); int maxY = getPreferredSize().height-xScaleHeight; + if(logScale) + { + int start = 10; + int count = 0; + int ypos = getYPos(xScaleHeight, start); + + while(ypos > 0 && count < 15 && start > 1) + { + g2.drawLine(0, ypos, 2, ypos); + g2.drawString(Integer.toString(start), 3, ypos); + start = start*5; + ypos = getYPos(xScaleHeight, start); + count++; + } + return; + } + for(int i=100; i<maxY; i+=100) { int ypos = getHeight()-i-xScaleHeight; @@ -1875,6 +1910,7 @@ public class BamView extends JPanel isStackView = false; isPairedStackView = false; isStrandStackView = false; + logMenuItem.setEnabled(true); } repaint(); } @@ -1896,6 +1932,7 @@ public class BamView extends JPanel isStrandStackView = !isStackView; checkBoxPairedStackView.setSelected(!isStackView); checkBoxStrandStackView.setSelected(!isStackView); + logMenuItem.setEnabled(false); } repaint(); } @@ -1917,6 +1954,7 @@ public class BamView extends JPanel isStrandStackView = !isPairedStackView; checkBoxStackView.setSelected(!isPairedStackView); checkBoxStrandStackView.setSelected(!isPairedStackView); + logMenuItem.setEnabled(false); } repaint(); } @@ -1938,6 +1976,7 @@ public class BamView extends JPanel checkBoxStackView.setSelected(!isStrandStackView); checkBoxPairedStackView.setSelected(!isStrandStackView); setViewportMidPoint(); + logMenuItem.setEnabled(false); } repaint(); } @@ -2032,7 +2071,7 @@ public class BamView extends JPanel JMenu maxHeightMenu = new JMenu("Plot Height"); menu.add(maxHeightMenu); - + final String hgts[] = {"500", "800", "1000", "1500", "2500", "5000", "50000"}; @@ -2056,6 +2095,18 @@ public class BamView extends JPanel }); } + menu.add(new JSeparator()); + logMenuItem.setFont(checkIsizeStackView.getFont()); + menu.add(logMenuItem); + logMenuItem.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + logScale = logMenuItem.isSelected(); + repaint(); + } + }); + JMenuItem filter = new JMenuItem("Filter by Flag..."); menu.add(filter); filter.addActionListener(new ActionListener() -- GitLab