From dce13c3ab9b11a76f23e1db964feeb4f272db996 Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Tue, 18 May 2010 17:57:19 +0000
Subject: [PATCH] fix SAMRecordPositionComparator by looking up offset

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@13861 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 .../artemis/components/alignment/BamView.java       |  2 +-
 .../alignment/SAMRecordPositionComparator.java      | 13 +++++++++++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java
index 4631271e9..03d3c4271 100644
--- a/uk/ac/sanger/artemis/components/alignment/BamView.java
+++ b/uk/ac/sanger/artemis/components/alignment/BamView.java
@@ -624,7 +624,7 @@ public class BamView extends JPanel
               bamList.size() > 1)
           {
             // merge multiple BAM files
-            Collections.sort(readsInView, new SAMRecordPositionComparator());
+            Collections.sort(readsInView, new SAMRecordPositionComparator(BamView.this));
           }
         }
         catch (OutOfMemoryError ome)
diff --git a/uk/ac/sanger/artemis/components/alignment/SAMRecordPositionComparator.java b/uk/ac/sanger/artemis/components/alignment/SAMRecordPositionComparator.java
index d1ff725a2..7b42f7950 100644
--- a/uk/ac/sanger/artemis/components/alignment/SAMRecordPositionComparator.java
+++ b/uk/ac/sanger/artemis/components/alignment/SAMRecordPositionComparator.java
@@ -30,14 +30,23 @@ import net.sf.samtools.SAMRecord;
 
  class SAMRecordPositionComparator implements Comparator<Object>
   {
+    public BamView bamView;
+    public SAMRecordPositionComparator(BamView bamView)
+    {
+      this.bamView = bamView;
+    }
+    
     public int compare(Object o1, Object o2) 
     {
       SAMRecord pr1 = (SAMRecord) o1;
       SAMRecord pr2 = (SAMRecord) o2;
       
-      if(pr1.getAlignmentStart() < pr2.getAlignmentStart())
+      int offset1 = bamView.getSequenceOffset(pr1.getReferenceName());
+      int offset2 = bamView.getSequenceOffset(pr2.getReferenceName());
+      
+      if(pr1.getAlignmentStart()+offset1 < pr2.getAlignmentStart()+offset2)
         return -1;
-      else if(pr1.getAlignmentStart() > pr2.getAlignmentStart())
+      else if(pr1.getAlignmentStart()+offset1 > pr2.getAlignmentStart()+offset2)
         return 1;  
       return 0;
     }
-- 
GitLab