diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java index 88902417fecf5b12ff65436de99b4803010e6db3..77b1be3341ca903eef8f946022f64ef296ef9fc7 100644 --- a/uk/ac/sanger/artemis/components/alignment/BamView.java +++ b/uk/ac/sanger/artemis/components/alignment/BamView.java @@ -164,14 +164,15 @@ public class BamView extends JPanel private int laststart; private int lastend; private int maxUnitIncrement = 8; - + private boolean asynchronous = true; private boolean showBaseAlignment = false; private JMenu bamFilesMenu = new JMenu("BAM files"); 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 colourByCoverageColour = new JCheckBoxMenuItem("Coverage Plot Colours"); + private JCheckBoxMenuItem baseQualityColour = new JCheckBoxMenuItem("Base Quality"); private JCheckBoxMenuItem markInsertions = new JCheckBoxMenuItem("Mark Insertions", true); private AlphaComposite translucent = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.6f); @@ -1012,12 +1013,14 @@ public class BamView extends JPanel (int)((samNextRecord.getAlignmentStart()-getBaseAtStartOfView())*pixPerBase), ypos); } - if( samRecord.getReadNegativeStrandFlag() && // strand of the query (1 for reverse) + if(colourByCoverageColour.isSelected()) + g2.setColor(getColourByCoverageColour(samRecord)); + else if( samRecord.getReadNegativeStrandFlag() && // strand of the query (1 for reverse) samNextRecord.getReadNegativeStrandFlag() ) g2.setColor(Color.red); else g2.setColor(Color.blue); - + drawRead(g2, samRecord, pixPerBase, ypos, baseAtStartOfView); drawRead(g2, samNextRecord, pixPerBase, ypos, baseAtStartOfView); } @@ -1050,7 +1053,7 @@ public class BamView extends JPanel return ypos; } - + /** * Draw the reads as lines in vertical stacks. The reads are colour * coded as follows: @@ -1103,10 +1106,13 @@ public class BamView extends JPanel int recordStart = samRecord.getAlignmentStart()+offset; int recordEnd = samRecord.getAlignmentEnd()+offset; - if(lstStart != recordStart || lstEnd != recordEnd) + if(colourByCoverageColour.isSelected() || + lstStart != recordStart || lstEnd != recordEnd) { - if (!samRecord.getReadPairedFlag() || // read is not paired in sequencing - samRecord.getMateUnmappedFlag() ) // mate is unmapped ) // mate is unmapped + if(colourByCoverageColour.isSelected()) + g2.setColor(getColourByCoverageColour(samRecord)); + else if (!samRecord.getReadPairedFlag() || // read is not paired in sequencing + samRecord.getMateUnmappedFlag() ) // mate is unmapped ) // mate is unmapped g2.setColor(Color.black); else g2.setColor(Color.blue); @@ -1196,8 +1202,10 @@ public class BamView extends JPanel if(lstStart != recordStart || lstEnd != recordEnd) { - if (!samRecord.getReadPairedFlag() || // read is not paired in sequencing - samRecord.getMateUnmappedFlag() ) // mate is unmapped + if(colourByCoverageColour.isSelected()) + g2.setColor(getColourByCoverageColour(samRecord)); + else if (!samRecord.getReadPairedFlag() || // read is not paired in sequencing + samRecord.getMateUnmappedFlag() ) // mate is unmapped g2.setColor(Color.black); else g2.setColor(Color.blue); @@ -1350,7 +1358,9 @@ public class BamView extends JPanel } } - if( pr.sam1.getReadNegativeStrandFlag() && // strand of the query (1 for reverse) + if(colourByCoverageColour.isSelected()) + g2.setColor(getColourByCoverageColour(pr.sam1)); + else if( pr.sam1.getReadNegativeStrandFlag() && // strand of the query (1 for reverse) ( pr.sam2 != null && pr.sam2.getReadNegativeStrandFlag() ) ) g2.setColor(Color.red); else @@ -1406,14 +1416,15 @@ public class BamView extends JPanel } } - if(offTheTop) + if(colourByCoverageColour.isSelected()) + g2.setColor(getColourByCoverageColour(samRecord)); + else if(offTheTop) g2.setColor(darkOrange); else if(samRecord.getReadNegativeStrandFlag() && samRecord.getMateNegativeStrandFlag()) // strand of the query (1 for reverse) g2.setColor(Color.red); else g2.setColor(Color.blue); - drawRead(g2, samRecord, pixPerBase, ypos, baseAtStartOfView); @@ -1991,6 +2002,7 @@ public class BamView extends JPanel final JCheckBoxMenuItem checkIsizeStackView = new JCheckBoxMenuItem("Inferred Size View", true); checkBoxStackView.setFont(checkIsizeStackView.getFont()); baseQualityColour.setFont(checkIsizeStackView.getFont()); + colourByCoverageColour.setFont(checkIsizeStackView.getFont()); markInsertions.setFont(checkIsizeStackView.getFont()); group.add(checkBoxStackView); @@ -2084,6 +2096,27 @@ public class BamView extends JPanel viewMenu.add(checkBoxStrandStackView); menu.add(viewMenu); + final JCheckBoxMenuItem checkBoxSNPs = new JCheckBoxMenuItem("SNPs"); + // + JMenu colourMenu = new JMenu("Colour By"); + colourMenu.add(colourByCoverageColour); + + baseQualityColour.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + if(baseQualityColour.isSelected()) + { + checkBoxSNPs.setSelected(false); + isSNPs = false; + } + repaint(); + } + }); + colourMenu.add(baseQualityColour); + menu.add(colourMenu); + + // JMenu showMenu = new JMenu("Show"); JCheckBoxMenuItem checkBoxSingle = new JCheckBoxMenuItem("Single Reads"); checkBoxSingle.addActionListener(new ActionListener() @@ -2095,8 +2128,7 @@ public class BamView extends JPanel } }); showMenu.add(checkBoxSingle); - - final JCheckBoxMenuItem checkBoxSNPs = new JCheckBoxMenuItem("SNPs"); + checkBoxSNPs.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -2115,20 +2147,6 @@ public class BamView extends JPanel } }); showMenu.add(checkBoxSNPs); - - baseQualityColour.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - if(baseQualityColour.isSelected()) - { - checkBoxSNPs.setSelected(false); - isSNPs = false; - } - repaint(); - } - }); - showMenu.add(baseQualityColour); markInsertions.addActionListener(new ActionListener() { @@ -2169,7 +2187,7 @@ public class BamView extends JPanel menu.add(new JSeparator()); - JMenu maxHeightMenu = new JMenu("Plot Height"); + JMenu maxHeightMenu = new JMenu("BamView Height"); menu.add(maxHeightMenu); final String hgts[] = @@ -2457,6 +2475,20 @@ public class BamView extends JPanel } } + /** + * Get the colour for the given read given to it by the coverage plot. + * @param samRecord + * @return + */ + private Color getColourByCoverageColour(SAMRecord samRecord) + { + LineAttributes lines[] = CoveragePanel.getLineAttributes(bamList.size()); + int fileIndex = 0; + if(bamList.size()>1) + fileIndex = (Integer) samRecord.getAttribute("FL"); + return lines[fileIndex].getLineColour(); + } + private Selection getSelection() { return selection;