From 5032b43237bbea731ace206835a3a393708b3f9e Mon Sep 17 00:00:00 2001 From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04> Date: Thu, 12 Nov 2009 12:34:23 +0000 Subject: [PATCH] show strand information in the tooltip and add an option to show the details of a read git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@12335 ee4ac58c-ac51-4696-9907-e4b3aa274f04 --- .../artemis/components/alignment/BamView.java | 86 ++++++++++++++++++- 1 file changed, 83 insertions(+), 3 deletions(-) diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java index 205a39d65..9b2c0184b 100644 --- a/uk/ac/sanger/artemis/components/alignment/BamView.java +++ b/uk/ac/sanger/artemis/components/alignment/BamView.java @@ -80,6 +80,8 @@ import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; +import org.apache.log4j.Level; + import net.sf.samtools.AlignmentBlock; import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMFileReader; @@ -99,6 +101,7 @@ import uk.ac.sanger.artemis.components.DisplayAdjustmentEvent; import uk.ac.sanger.artemis.components.DisplayAdjustmentListener; import uk.ac.sanger.artemis.components.EntryFileDialog; import uk.ac.sanger.artemis.components.FeatureDisplay; +import uk.ac.sanger.artemis.components.FileViewer; import uk.ac.sanger.artemis.components.MessageDialog; import uk.ac.sanger.artemis.components.SwingWorker; import uk.ac.sanger.artemis.editor.MultiLineToolTipUI; @@ -238,12 +241,26 @@ public class BamView extends JPanel public String getToolTipText() { - String msg = (mouseOverSAMRecord != null ? + if(mouseOverSAMRecord == null) + return null; + + String msg = mouseOverSAMRecord.getReadName() + "\n" + mouseOverSAMRecord.getAlignmentStart() + ".." + mouseOverSAMRecord.getAlignmentEnd() + "\nisize=" + - mouseOverSAMRecord.getInferredInsertSize() + "\nrname=" + - mouseOverSAMRecord.getReferenceName() : null); + mouseOverSAMRecord.getInferredInsertSize() + "\nrname="; + + if(mouseOverSAMRecord.getProperPairFlag() && !mouseOverSAMRecord.getMateUnmappedFlag()) + { + msg = msg + + mouseOverSAMRecord.getReferenceName() + "\nstrand (read/mate): "+ + (mouseOverSAMRecord.getReadNegativeStrandFlag() ? "-" : "+")+" / "+ + (mouseOverSAMRecord.getMateNegativeStrandFlag() ? "-" : "+"); + } + else + msg = msg + + mouseOverSAMRecord.getReferenceName() + "\nstrand (read/mate): "+ + (mouseOverSAMRecord.getReadNegativeStrandFlag() ? "-" : "+"); if(msg != null && mouseOverInsertion != null) msg = msg + "\nInsertion at:" +mouseOverInsertion; @@ -2356,6 +2373,8 @@ public class BamView extends JPanel class PopupListener extends MouseAdapter { JMenuItem gotoMateMenuItem; + JMenuItem showDetails; + public void mouseClicked(MouseEvent e) { if(e.isPopupTrigger() || @@ -2396,6 +2415,9 @@ public class BamView extends JPanel if(gotoMateMenuItem != null) popup.remove(gotoMateMenuItem); + + if(showDetails != null) + popup.remove(showDetails); if( mouseOverSAMRecord != null && mouseOverSAMRecord.getReadPairedFlag() && @@ -2424,6 +2446,22 @@ public class BamView extends JPanel } }); popup.add(gotoMateMenuItem); + } + + if( mouseOverSAMRecord != null) + { + final SAMRecord thisSAMRecord = mouseOverSAMRecord; + showDetails = new JMenuItem("Show details of : "+ + thisSAMRecord.getReadName()); + showDetails.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + FileViewer viewDetail = new FileViewer(thisSAMRecord.getReadName(), true, false); + appendToDetailView(thisSAMRecord, viewDetail); + } + }); + popup.add(showDetails); } popup.show(e.getComponent(), e.getX(), e.getY()); @@ -2431,6 +2469,48 @@ public class BamView extends JPanel } } + private void appendToDetailView(SAMRecord thisSAMRecord, FileViewer viewDetail) + { + viewDetail.appendString("Read Name "+thisSAMRecord.getReadName()+"\n", Level.INFO); + viewDetail.appendString("Coordinates "+thisSAMRecord.getAlignmentStart()+".."+ + thisSAMRecord.getAlignmentEnd()+"\n", Level.DEBUG); + viewDetail.appendString("Length "+thisSAMRecord.getReadLength()+"\n", Level.DEBUG); + viewDetail.appendString("Reference Name "+thisSAMRecord.getReferenceName()+"\n", Level.DEBUG); + viewDetail.appendString("Inferred Size "+thisSAMRecord.getInferredInsertSize()+"\n", Level.DEBUG); + + if(thisSAMRecord.getProperPairFlag() && !thisSAMRecord.getMateUnmappedFlag()) + { + viewDetail.appendString("Mate Reference Name "+thisSAMRecord.getMateReferenceName()+"\n", Level.DEBUG); + viewDetail.appendString("Mate Start Coordinate "+thisSAMRecord.getMateAlignmentStart()+"\n", Level.DEBUG); + viewDetail.appendString("Strand (read/mate) "+ + (thisSAMRecord.getReadNegativeStrandFlag() ? "-" : "+")+" / "+ + (thisSAMRecord.getMateNegativeStrandFlag() ? "-" : "+"), Level.DEBUG); + } + else + { + viewDetail.appendString("Strand (read) "+ + (thisSAMRecord.getReadNegativeStrandFlag() ? "-" : "+"), Level.DEBUG); + } + + viewDetail.appendString("\n\nCigar String "+thisSAMRecord.getCigarString(), Level.DEBUG); + + viewDetail.appendString("\n\nFlags:", Level.INFO); + viewDetail.appendString("\nDuplicate Read "+ + (thisSAMRecord.getDuplicateReadFlag() ? "yes" : "no"), Level.DEBUG); + viewDetail.appendString("\nFirst of Pair "+ + (thisSAMRecord.getFirstOfPairFlag() ? "yes" : "no"), Level.DEBUG); + viewDetail.appendString("\nMate Unmapped "+ + (thisSAMRecord.getMateUnmappedFlag() ? "yes" : "no"), Level.DEBUG); + viewDetail.appendString("\nProper Pair "+ + (thisSAMRecord.getProperPairFlag() ? "yes" : "no"), Level.DEBUG); + viewDetail.appendString("\nRead Fails Vendor\nQuality Check "+ + (thisSAMRecord.getReadFailsVendorQualityCheckFlag() ? "yes" : "no"), Level.DEBUG); + viewDetail.appendString("\nRead Unmapped "+ + (thisSAMRecord.getReadUnmappedFlag() ? "yes" : "no"), Level.DEBUG); + viewDetail.appendString("\nSecond Of Pair "+ + (thisSAMRecord.getSecondOfPairFlag() ? "yes" : "no"), Level.DEBUG); + } + class PairedRead { SAMRecord sam1; -- GitLab