From 15355f51489aab4ed813e6a18ba83b8fb3634a86 Mon Sep 17 00:00:00 2001
From: tcarver <tjc>
Date: Thu, 7 Mar 2013 11:07:14 +0000
Subject: [PATCH] show read mate sequence if available

---
 .../artemis/components/alignment/BamView.java | 129 +++++++++---------
 1 file changed, 67 insertions(+), 62 deletions(-)

diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java
index a933d301e..82bfd0daf 100644
--- a/uk/ac/sanger/artemis/components/alignment/BamView.java
+++ b/uk/ac/sanger/artemis/components/alignment/BamView.java
@@ -3812,89 +3812,95 @@ public class BamView extends JPanel
     appendToDetailView(readRecord, mateRecord, viewDetail, bamList);
   }
   
-  private static void appendToDetailView(final SAMRecord thisSAMRecord, 
-                                         final SAMRecord thisSAMRecordMate, 
-                                         final FileViewer viewDetail, 
+  private static void appendToDetailView(final SAMRecord sam, 
+                                         final SAMRecord mate, 
+                                         final FileViewer viewer, 
                                          final List<String> bamList)
   {
-    if(bamList.size() > 1 && thisSAMRecord.getAttribute("FL") != null)
+    if(bamList.size() > 1 && sam.getAttribute("FL") != null)
     {
-      int bamIndex = (Integer)thisSAMRecord.getAttribute("FL");
-      if(bamIndex < bamList.size())
-        viewDetail.appendString("File                  "+bamList.get(bamIndex)+"\n\n", Level.INFO);
+      int bamIdx = (Integer)sam.getAttribute("FL");
+      if(bamIdx < bamList.size())
+        viewer.appendString("File                  "+bamList.get(bamIdx)+"\n\n", Level.INFO);
     }
     
-    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);
-    viewDetail.appendString("Mapping Quality       "+thisSAMRecord.getMappingQuality()+"\n", Level.DEBUG);
-    viewDetail.appendString("Cigar String          "+thisSAMRecord.getCigarString()+"\n", Level.DEBUG);
-    viewDetail.appendString("Strand                "+
-        (thisSAMRecord.getReadNegativeStrandFlag() ? "-\n\n" : "+\n\n"), Level.DEBUG);
+    viewer.appendString("Read Name             "+sam.getReadName()+"\n", Level.INFO);
+    viewer.appendString("Coordinates           "+sam.getAlignmentStart()+".."+
+                                                 sam.getAlignmentEnd()+"\n", Level.DEBUG);
+    viewer.appendString("Length                "+sam.getReadLength()+"\n", Level.DEBUG);
+    viewer.appendString("Reference Name        "+sam.getReferenceName()+"\n", Level.DEBUG);
+    viewer.appendString("Inferred Size         "+sam.getInferredInsertSize()+"\n", Level.DEBUG);
+    viewer.appendString("Mapping Quality       "+sam.getMappingQuality()+"\n", Level.DEBUG);
+    viewer.appendString("Cigar String          "+sam.getCigarString()+"\n", Level.DEBUG);
+    viewer.appendString("Strand                "+
+        (sam.getReadNegativeStrandFlag() ? "-\n\n" : "+\n\n"), Level.DEBUG);
     
-    if(thisSAMRecord.getReadPairedFlag() && !thisSAMRecord.getMateUnmappedFlag())
+    if(sam.getReadPairedFlag())
     {     
-      if(thisSAMRecordMate != null)
+      if(mate != null)
       {
-        viewDetail.appendString("Mate Coordinates      "+thisSAMRecordMate.getAlignmentStart()+".."+
-            thisSAMRecordMate.getAlignmentEnd()+"\n", Level.DEBUG);
-        viewDetail.appendString("Mate Length           "+thisSAMRecordMate.getReadLength()+"\n", Level.DEBUG);
-        viewDetail.appendString("Mate Reference Name   "+thisSAMRecordMate.getReferenceName()+"\n", Level.DEBUG);
-        viewDetail.appendString("Mate Inferred Size    "+thisSAMRecordMate.getInferredInsertSize()+"\n", Level.DEBUG);
-        viewDetail.appendString("Mate Mapping Quality  "+thisSAMRecordMate.getMappingQuality()+"\n", Level.DEBUG);
-        viewDetail.appendString("Mate Cigar String     "+thisSAMRecordMate.getCigarString()+"\n", Level.DEBUG);
+        viewer.appendString("Mate Coordinates      "+mate.getAlignmentStart()+".."+
+                                                     mate.getAlignmentEnd()+"\n", Level.DEBUG);
+        viewer.appendString("Mate Length           "+mate.getReadLength()+"\n", Level.DEBUG);
+        viewer.appendString("Mate Reference Name   "+mate.getReferenceName()+"\n", Level.DEBUG);
+        viewer.appendString("Mate Inferred Size    "+mate.getInferredInsertSize()+"\n", Level.DEBUG);
+        viewer.appendString("Mate Mapping Quality  "+mate.getMappingQuality()+"\n", Level.DEBUG);
+        viewer.appendString("Mate Cigar String     "+mate.getCigarString()+"\n", Level.DEBUG);
       }
       else
       {
-        viewDetail.appendString("Mate Start Coordinate "+thisSAMRecord.getMateAlignmentStart()+"\n", Level.DEBUG);
-        viewDetail.appendString("Mate Reference Name   "+thisSAMRecord.getMateReferenceName()+"\n", Level.DEBUG);
+        viewer.appendString("Mate Start Coordinate "+sam.getMateAlignmentStart()+"\n", Level.DEBUG);
+        viewer.appendString("Mate Reference Name   "+sam.getMateReferenceName()+"\n", Level.DEBUG);
       }
-      viewDetail.appendString("Mate Strand           "+
-          (thisSAMRecord.getMateNegativeStrandFlag() ? "-" : "+"), Level.DEBUG);
+      viewer.appendString("Mate Strand           "+
+          (sam.getMateNegativeStrandFlag() ? "-" : "+"), Level.DEBUG);
     }
-    else
-    {
-      viewDetail.appendString("Mate Unmapped ", Level.DEBUG);
-    }
-    
-    viewDetail.appendString("\n\nFlags:", Level.INFO);
-    viewDetail.appendString("\nDuplicate Read    "+
-        (thisSAMRecord.getDuplicateReadFlag() ? "yes" : "no"), Level.DEBUG);
+
+    viewer.appendString("\n\nFlags:", Level.INFO);
+    viewer.appendString("\nDuplicate Read    "+
+        (sam.getDuplicateReadFlag() ? "yes" : "no"), Level.DEBUG);
     
-    viewDetail.appendString("\nRead Paired       "+
-        (thisSAMRecord.getReadPairedFlag() ? "yes" : "no"), Level.DEBUG);
-    if(thisSAMRecord.getReadPairedFlag())
+    viewer.appendString("\nRead Paired       "+
+        (sam.getReadPairedFlag() ? "yes" : "no"), Level.DEBUG);
+    if(sam.getReadPairedFlag())
     {
-      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);
+      viewer.appendString("\nFirst of Pair     "+
+        (sam.getFirstOfPairFlag() ? "yes" : "no"), Level.DEBUG);
+      viewer.appendString("\nMate Unmapped     "+
+        (sam.getMateUnmappedFlag() ? "yes" : "no"), Level.DEBUG);  
+      viewer.appendString("\nProper Pair       "+
+        (sam.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);
+    viewer.appendString("\nRead Fails Vendor\nQuality Check     "+
+        (sam.getReadFailsVendorQualityCheckFlag() ? "yes" : "no"), Level.DEBUG);
+    viewer.appendString("\nRead Unmapped     "+
+        (sam.getReadUnmappedFlag() ? "yes" : "no"), Level.DEBUG);
     
-    if(thisSAMRecord.getReadPairedFlag())
-      viewDetail.appendString("\nSecond Of Pair    "+
-        (thisSAMRecord.getSecondOfPairFlag() ? "yes" : "no"), Level.DEBUG);
+    if(sam.getReadPairedFlag())
+      viewer.appendString("\nSecond Of Pair    "+
+        (sam.getSecondOfPairFlag() ? "yes" : "no"), Level.DEBUG);
     
-    viewDetail.appendString("\n\nRead Bases:\n", Level.INFO);
+    viewer.appendString("\n\nRead Bases:\n", Level.INFO);
+    wrapReadBases(sam, viewer);
     
-    // wrap the read bases
-    String seq = new String(thisSAMRecord.getReadBases());
-    int MAX_SEQ_LINE_LENGTH = 100;
+    if(sam.getReadPairedFlag() && mate != null)
+    {
+      viewer.appendString("\nMate Read Bases:\n", Level.INFO);
+      wrapReadBases(mate, viewer);
+    }
+  }
+  
+  private static void wrapReadBases(final SAMRecord sam, 
+                             final FileViewer viewer)
+  {
+    final String seq = new String(sam.getReadBases());
+    final int MAX_SEQ_LINE_LENGTH = 100;
     for(int i=0; i<=seq.length(); i+=MAX_SEQ_LINE_LENGTH)
     {
       int iend = i+MAX_SEQ_LINE_LENGTH;
       if(iend > seq.length())
-    	iend = seq.length();
-      viewDetail.appendString(seq.substring(i, iend)+"\n", Level.DEBUG);
+        iend = seq.length();
+      viewer.appendString(seq.substring(i, iend)+"\n", Level.DEBUG);
     }
   }
 
@@ -3905,8 +3911,7 @@ public class BamView extends JPanel
    */
   protected SAMRecord getMate(BamViewRecord thisSAMRecord)
   {
-    if(!thisSAMRecord.sam.getReadPairedFlag() ||  // read is not paired in sequencing
-        thisSAMRecord.sam.getMateUnmappedFlag())
+    if(!thisSAMRecord.sam.getReadPairedFlag())  // read is not paired in sequencing
       return null;
     
     SAMRecord mate = null;
-- 
GitLab