Skip to content

Commit 6e54e29

Browse files
authored
Merge pull request #385 from AdamaJava/qsv_bugfix
fix(qsv): fixing issue where references didn't match
2 parents 5e4409f + b27b1cd commit 6e54e29

File tree

2 files changed

+55
-8
lines changed

2 files changed

+55
-8
lines changed

qsv/src/org/qcmg/qsv/splitread/SplitReadContig.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ public SplitReadAlignment getRight() {
219219
}
220220

221221
public static SplitReadAlignment getSingleSplitReadAlignment(SplitReadAlignment left, SplitReadAlignment right) {
222+
222223
if (left == null && right != null) {
223224
return right;
224225
} else if (right == null && left != null) {
@@ -492,7 +493,7 @@ public void parseConsensusAlign(List<BLATRecord> records) throws QSVException, I
492493
left = null;
493494
right = null;
494495

495-
if (confidenceLevel.equals(QSVConstants.LEVEL_SINGLE_CLIP) || knownSV.equalReference()) {
496+
if (confidenceLevel.equals(QSVConstants.LEVEL_SINGLE_CLIP) || knownSV.equalReference()) {
496497
getSplitReadAlignments(null, records);
497498
} else {
498499
List<BLATRecord> leftRecords = new ArrayList<>();
@@ -506,12 +507,10 @@ public void parseConsensusAlign(List<BLATRecord> records) throws QSVException, I
506507
rightRecords.add(r);
507508
}
508509
}
509-
getTranslocationSplitReadAlignments(null, leftRecords, rightRecords);
510+
getTranslocationSplitReadAlignments(null, leftRecords, rightRecords);
510511
}
511512

512-
513-
514-
if (left != null & right != null) {
513+
if (left != null & right != null & knownAndPotentialReferencesMatch(knownSV, left, right)) {
515514

516515
//rearrange
517516
reorder();
@@ -609,6 +608,14 @@ public void parseConsensusAlign(List<BLATRecord> records) throws QSVException, I
609608
}
610609
}
611610

611+
public static boolean knownAndPotentialReferencesMatch(StructuralVariant currentSV, SplitReadAlignment leftAlign, SplitReadAlignment rightAlign) {
612+
if (leftAlign != null & rightAlign != null) {
613+
return (leftAlign.getReference().equals(currentSV.getLeftReference()) && rightAlign.getReference().equals(currentSV.getRightReference())) ||
614+
(rightAlign.getReference().equals(currentSV.getLeftReference()) && leftAlign.getReference().equals(currentSV.getRightReference()));
615+
}
616+
return false;
617+
}
618+
612619
public static boolean leftLower(int leftStart, int rightStart) {
613620
return leftStart < rightStart;
614621
}
@@ -652,7 +659,6 @@ void calculateMicrohomology() {
652659
}
653660

654661
void recheckMicrohomologyForSingleAlignment() {
655-
656662
String leftRef = getReferenceSequence(splitreadSV.getLeftReference(), splitreadSV.getLeftBreakpoint() + 1, 0, 50, chromosomes);
657663
String rightRef = getReferenceSequence(splitreadSV.getRightReference(), splitreadSV.getRightBreakpoint() - 1, 50, 0, chromosomes);
658664
int end = leftSequence.length();
@@ -698,7 +704,11 @@ public static String getReferenceSequence(String reference, int breakpoint, int
698704

699705
ConcurrentMap<String,byte[]> referenceMap = QSVUtil.getReferenceMap();
700706
byte[] basesArray = referenceMap.get(reference);
701-
707+
708+
if (start > end) {
709+
logger.info("In getReferenceSequence method - Reference: " + reference + "breakpoint: " + breakpoint + " chromosome: " + c.getName() + " chromosome length: " + c.getTotalLength() + " start: " + start + " end: " + end + " basesArray length: " + basesArray.length);
710+
throw new IllegalArgumentException("Start of reference sequence to retrieve is greater than end: " + start + " " + end);
711+
}
702712
// array is zero-based, and picard is 1-based
703713
return new String(Arrays.copyOfRange(basesArray, start - 1, end - 1));
704714
}
@@ -937,7 +947,8 @@ private void getTranslocationSplitReadAlignments(SplitReadAlignment align, List<
937947
}
938948
if (index2 != -1) {
939949
rightRecords.remove(index2);
940-
}
950+
}
951+
941952
getTranslocationSplitReadAlignments(getSingleSplitReadAlignment(left, right), leftRecords, rightRecords);
942953
}
943954
}
@@ -1101,4 +1112,5 @@ public static boolean matchingQueryString(int difference, int queryStart, int qu
11011112
public String getMutationType() {
11021113
return this.mutationType;
11031114
}
1115+
11041116
}

qsv/test/org/qcmg/qsv/splitread/SplitReadContigTest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,41 @@ public void setSplitReadAlignments() {
233233
assertEquals(true, right == null);
234234
}
235235

236+
@Test
237+
public void testknownAndPotentialReferencesMatch() {
238+
StructuralVariant knownSV = new StructuralVariant("chr10", "chr10", 89700299, 89712341, "1");
239+
SplitReadAlignment left = new SplitReadAlignment("chr10", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
240+
SplitReadAlignment right = new SplitReadAlignment("chr10", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
241+
assertTrue(SplitReadContig.knownAndPotentialReferencesMatch(knownSV, left, right));
242+
243+
knownSV = new StructuralVariant("chr10", "chr10", 89700299, 89712341, "1");
244+
left = new SplitReadAlignment("chr12", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
245+
right = new SplitReadAlignment("chr10", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
246+
assertFalse(SplitReadContig.knownAndPotentialReferencesMatch(knownSV, left, right));
247+
248+
knownSV = new StructuralVariant("chr10", "chr10", 89700299, 89712341, "1");
249+
left = new SplitReadAlignment("chr10", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
250+
right = new SplitReadAlignment("chr12", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
251+
assertFalse(SplitReadContig.knownAndPotentialReferencesMatch(knownSV, left, right));
252+
253+
knownSV = new StructuralVariant("chr10", "chr12", 89700299, 89712341, "1");
254+
left = new SplitReadAlignment("chr12", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
255+
right = new SplitReadAlignment("chr10", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
256+
assertTrue(SplitReadContig.knownAndPotentialReferencesMatch(knownSV, left, right));
257+
258+
knownSV = new StructuralVariant("chr10", "chr12", 89700299, 89712341, "1");
259+
left = new SplitReadAlignment("chr10", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
260+
right = new SplitReadAlignment("chr12", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
261+
assertTrue(SplitReadContig.knownAndPotentialReferencesMatch(knownSV, left, right));
262+
263+
knownSV = new StructuralVariant("chr10", "chr12", 89700299, 89712341, "1");
264+
left = new SplitReadAlignment("chr10", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
265+
right = new SplitReadAlignment("chr10", QSVUtil.MINUS, 89700210, 89700299, 109, 282);
266+
assertFalse(SplitReadContig.knownAndPotentialReferencesMatch(knownSV, left, right));
267+
268+
269+
}
270+
236271
@Test
237272
public void setSplitReadAlignments2() {
238273
/*

0 commit comments

Comments
 (0)