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