From 10ff929859f2ae9afd8f6e7361879096e44a919e Mon Sep 17 00:00:00 2001 From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04> Date: Thu, 10 Mar 2011 12:39:23 +0000 Subject: [PATCH] fix for changing window size in coverage plots git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@15700 ee4ac58c-ac51-4696-9907-e4b3aa274f04 --- .../artemis/components/alignment/BamView.java | 75 ++++++------------- .../components/alignment/CoveragePanel.java | 51 ++++--------- 2 files changed, 37 insertions(+), 89 deletions(-) diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java index 30817c4e7..024494706 100644 --- a/uk/ac/sanger/artemis/components/alignment/BamView.java +++ b/uk/ac/sanger/artemis/components/alignment/BamView.java @@ -66,6 +66,7 @@ import java.util.Hashtable; import java.util.List; import java.util.Vector; +import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; @@ -223,7 +224,6 @@ public class BamView extends JPanel int nbasesInView) { super(); - setBackground(Color.white); this.bamList = bamList; this.nbasesInView = nbasesInView; @@ -442,7 +442,7 @@ public class BamView extends JPanel thisEnd = thisLength; //System.out.println("READ "+seqNames.get(i)+" "+thisStart+".."+thisEnd); - iterateOverBam(inputSam, seqNames.get(i), thisStart, thisEnd, bamIndex, pixPerBase); + iterateOverBam(inputSam, seqNames.get(i), thisStart, thisEnd, bamIndex, pixPerBase, bam); } lastLen = len; } @@ -450,7 +450,7 @@ public class BamView extends JPanel else { String refName = (String) combo.getSelectedItem(); - iterateOverBam(inputSam, refName, start, end, bamIndex, pixPerBase); + iterateOverBam(inputSam, refName, start, end, bamIndex, pixPerBase, bam); } //inputSam.close(); @@ -468,7 +468,8 @@ public class BamView extends JPanel */ private void iterateOverBam(final SAMFileReader inputSam, String refName, int start, int end, - int bamIndex, float pixPerBase) + int bamIndex, float pixPerBase, + String bam) { boolean multipleBAM = false; if(bamList.size() > 1) @@ -478,6 +479,8 @@ public class BamView extends JPanel MemoryMXBean memory = ManagementFactory.getMemoryMXBean(); int checkMemAfter = 8000; int cnt = 0; + int seqOffset = getSequenceOffset(refName); + int offset = seqOffset- getBaseAtStartOfView(); while ( it.hasNext() ) { @@ -495,11 +498,14 @@ public class BamView extends JPanel if(multipleBAM) samRecord.setAttribute("FL", bamIndex); - if(isCoverageView(pixPerBase) || isCoverage) - coverageView.addRecord(samRecord); + if(isCoverageView(pixPerBase)) + coverageView.addRecord(samRecord, offset, bam); + + if(isCoverage) + coveragePanel.addRecord(samRecord, offset, bam); if(isSNPplot) - snpPanel.addRecord(samRecord); + snpPanel.addRecord(samRecord, seqOffset); if(!isCoverageView(pixPerBase)) readsInView.add(samRecord); @@ -633,20 +639,20 @@ public class BamView extends JPanel if(end > seqLength) end = seqLength; } - - + boolean changeToStackView = false; MemoryMXBean memory = ManagementFactory.getMemoryMXBean(); if(laststart != start || lastend != end || - coverageView.isRedraw()) + CoveragePanel.isRedraw()) { - if(isCoverageView(pixPerBase) || isCoverage) + if(isCoverageView(pixPerBase)) coverageView.init(this, pixPerBase, start, end); - + if(isCoverage) + coveragePanel.init(this, pixPerBase, start, end); if(isSNPplot) snpPanel.init(this, pixPerBase, start, end); - + synchronized (this) { try @@ -705,11 +711,7 @@ public class BamView extends JPanel } } } - - //System.out.println(start+".."+end+" " + - // "sequence length = "+getSequenceLength()+ - // " pixPerBase="+pixPerBase); - + laststart = start; lastend = end; @@ -728,17 +730,9 @@ public class BamView extends JPanel else drawLineView(g2, seqLength, pixPerBase, start, end); if(isCoverage) - { - coveragePanel.setStartAndEnd(start, end); - coveragePanel.setPixPerBase(pixPerBase); coveragePanel.repaint(); - } if(isSNPplot) - { - snpPanel.setStartAndEnd(start, end); - snpPanel.setPixPerBase(pixPerBase); snpPanel.repaint(); - } } if(waitingFrame.isVisible()) @@ -2077,7 +2071,7 @@ public class BamView extends JPanel jspView = new JScrollPane(this, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - + jspView.setViewportBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.gray)); setDisplay(1, nbasesInView, null); mainPanel.setLayout(new BorderLayout()); @@ -2103,10 +2097,6 @@ public class BamView extends JPanel public void adjustmentValueChanged(AdjustmentEvent e) { repaint(); - if(coveragePanel != null) - coveragePanel.repaint(); - if(snpPanel != null) - snpPanel.repaint(); } }); bottomPanel.add(scrollBar, BorderLayout.SOUTH); @@ -2448,7 +2438,7 @@ public class BamView extends JPanel // JMenu coverageMenu = new JMenu("Coverage Options"); coverageView.init(this, 0.f, 0, 0); - coverageView.createMenus(coverageMenu, BamView.this); + coverageView.createMenus(coverageMenu); viewMenu.add(new JSeparator()); viewMenu.add(coverageMenu); } @@ -2783,11 +2773,6 @@ public class BamView extends JPanel return readsInView; } - protected Hashtable<String, int[]> getCoveragePlotData() - { - return coverageView.getPlotData(); - } - protected int getBasesInView() { return nbasesInView; @@ -2876,28 +2861,12 @@ public class BamView extends JPanel int width = feature_display.getMaxVisibleBases(); setZoomLevel(width); repaint(); - if(coveragePanel != null && coveragePanel.isVisible()) - { - coveragePanel.setStartAndEnd(BamView.this.startBase, BamView.this.endBase); - coveragePanel.setPixPerBase(getPixPerBaseByWidth()); - coveragePanel.repaint(); - } - if(snpPanel != null && snpPanel.isVisible()) - { - snpPanel.setStartAndEnd(BamView.this.startBase, BamView.this.endBase); - snpPanel.setPixPerBase(getPixPerBaseByWidth()); - snpPanel.repaint(); - } } else { setDisplay(event.getStart(), event.getStart()+feature_display.getMaxVisibleBases(), event); repaint(); - if(coveragePanel != null && coveragePanel.isVisible()) - coveragePanel.repaint(); - if(snpPanel != null && snpPanel.isVisible()) - snpPanel.repaint(); } } diff --git a/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java b/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java index 9e332d9e3..3a287fcf1 100644 --- a/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java +++ b/uk/ac/sanger/artemis/components/alignment/CoveragePanel.java @@ -57,27 +57,24 @@ import net.sf.samtools.SAMRecord; private int combinedCoverage[]; private int nBins; - private boolean redraw = false; + private static boolean redraw = false; private boolean setMaxBases = false; protected CoveragePanel(final BamView bamView) { this(); this.bamView = bamView; - //initPopupMenu(this, popup); - createMenus(popup, this); + createMenus(popup); addMouseListener(new PopupListener()); } protected CoveragePanel() { super(); - setBackground(Color.white); - addMouseListener(new PopupListener()); setMaxBases = true; } - protected void createMenus(JComponent menu, final JPanel panel) + protected void createMenus(JComponent menu) { JMenuItem configure = new JMenuItem("Configure Line(s)..."); configure.addActionListener(new ActionListener() @@ -100,7 +97,7 @@ import net.sf.samtools.SAMRecord; public void actionPerformed(ActionEvent e) { defineOpts(); - panel.repaint(); + bamView.repaint(); } }); menu.add(optMenu); @@ -113,8 +110,7 @@ import net.sf.samtools.SAMRecord; { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; - List<SAMRecord> readsInView = bamView.getReadsInView(); - if(readsInView == null) + if(plots == null) return; drawPlot(g2); drawMax(g2); @@ -126,7 +122,6 @@ import net.sf.samtools.SAMRecord; setPixPerBase(pixPerBase); setStartAndEnd(start, end); init(); - redraw = false; } private void init() @@ -157,9 +152,7 @@ import net.sf.samtools.SAMRecord; private void drawPlot(Graphics2D g2) { - init(); max = 0; - plots = bamView.getCoveragePlotData(); Enumeration<String> plotEum = plots.keys(); while(plotEum.hasMoreElements()) { @@ -169,45 +162,36 @@ import net.sf.samtools.SAMRecord; if(max < thisPlot[i]) max = thisPlot[i]; } - draw(g2, getWidth(), getHeight()); } - protected void addRecord(SAMRecord thisRead) + protected void addRecord(SAMRecord thisRead, int offset, String fileName) { - int offset = bamView.getSequenceOffset(thisRead.getReferenceName()); - offset = offset - bamView.getBaseAtStartOfView(); - - String fileName; - if(bamView.bamList.size() > 1) - fileName = bamView.bamList.get((Integer) thisRead.getAttribute("FL")); - else - fileName = bamView.bamList.get(0); int coverage[] = plots.get(fileName); - if(coverage == null) { coverage = new int[nBins]; for(int k=0; k<coverage.length; k++) coverage[k] = 0; plots.put(fileName, coverage); - } - + } + List<AlignmentBlock> blocks = thisRead.getAlignmentBlocks(); for(int j=0; j<blocks.size(); j++) { AlignmentBlock block = blocks.get(j); + int refStart = block.getReferenceStart(); for(int k=0; k<block.getLength(); k++) { - int pos = block.getReferenceStart() + k + offset; + int pos = refStart + k + offset; int bin = pos/windowSize; if(bin < 0 || bin > nBins-1) continue; - + coverage[bin]+=1; if(coverage[bin] > max) max = coverage[bin]; - + if(includeCombined) { combinedCoverage[bin]+=1; @@ -228,7 +212,7 @@ import net.sf.samtools.SAMRecord; } else lines = getLineAttributes(size); - + Enumeration<String> plotEum = plots.keys(); while(plotEum.hasMoreElements()) { @@ -242,7 +226,6 @@ import net.sf.samtools.SAMRecord; index = bamView.bamList.indexOf(fileName); g2.setColor(lines[index].getLineColour()); - if(lines[index].getPlotType() == LineAttributes.PLOT_TYPES[0]) { g2.setStroke(lines[index].getStroke()); @@ -298,7 +281,7 @@ import net.sf.samtools.SAMRecord; /** * @return the redraw */ - protected boolean isRedraw() + protected static boolean isRedraw() { if(redraw) { @@ -378,9 +361,5 @@ import net.sf.samtools.SAMRecord; return; } } - - protected Hashtable<String, int[]> getPlotData() - { - return plots; - } + } \ No newline at end of file -- GitLab