Skip to content

Commit e8c49f6

Browse files
check bkpt dist for each cpx interval and overall in SVConcordance (#9324)
1 parent 3cbea75 commit e8c49f6

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

src/main/java/org/broadinstitute/hellbender/tools/sv/cluster/CanonicalSVLinkage.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,11 @@ private static CanonicalLinkageResult clusterTogetherWithParams(final SVCallReco
189189
private static CanonicalLinkageResult testComplexIntervals(final SVCallRecord a, final SVCallRecord b, final double overlapThreshold,
190190
final double sizeSimilarityThreshold, final int window,
191191
final double sampleOverlapThreshold) {
192+
final Integer overallBreakpointDistance1 = getFirstBreakpointProximity(a, b);
193+
final Integer overallBreakpointDistance2 = getSecondBreakpointProximity(a, b);
194+
if (!(testBreakendProximity(overallBreakpointDistance1, overallBreakpointDistance2, window))) {
195+
return new CanonicalLinkageResult(false);
196+
}
192197
final List<SVCallRecord.ComplexEventInterval> intervalsA = a.getComplexEventIntervals();
193198
final List<SVCallRecord.ComplexEventInterval> intervalsB = b.getComplexEventIntervals();
194199
if (intervalsA.size() != intervalsB.size()) {
@@ -198,14 +203,14 @@ private static CanonicalLinkageResult testComplexIntervals(final SVCallRecord a,
198203
final Iterator<SVCallRecord.ComplexEventInterval> iterB = intervalsB.iterator();
199204
for (int i = 0; i < intervalsA.size(); i++) {
200205
final SVCallRecord.ComplexEventInterval cpxIntervalA = iterA.next();
201-
final SVCallRecord.ComplexEventInterval cpxIintervalB = iterB.next();
202-
if (cpxIntervalA.getIntervalSVType() != cpxIintervalB.getIntervalSVType()) {
206+
final SVCallRecord.ComplexEventInterval cpxIntervalB = iterB.next();
207+
if (cpxIntervalA.getIntervalSVType() != cpxIntervalB.getIntervalSVType()) {
203208
return new CanonicalLinkageResult(false);
204209
}
205-
final Integer breakpointDistance1 = getFirstBreakpointProximity(a, b);
206-
final Integer breakpointDistance2 = getSecondBreakpointProximity(a, b);
210+
final Integer breakpointDistance1 = getFirstBreakpointProximity(cpxIntervalA, cpxIntervalB);
211+
final Integer breakpointDistance2 = getSecondBreakpointProximity(cpxIntervalA, cpxIntervalB);
207212
final SimpleInterval intervalA = cpxIntervalA.getInterval();
208-
final SimpleInterval intervalB = cpxIintervalB.getInterval();
213+
final SimpleInterval intervalB = cpxIntervalB.getInterval();
209214
final Double reciprocalOverlap = computeReciprocalOverlap(intervalA, intervalB);
210215
final Double sizeSimilarity = computeSizeSimilarity(intervalA.size(), intervalB.size());
211216
if (!(testReciprocalOverlap(reciprocalOverlap, overlapThreshold)
@@ -272,6 +277,15 @@ private static Integer getFirstBreakpointProximity(final SVCallRecord a, final S
272277
}
273278
}
274279

280+
private static Integer getFirstBreakpointProximity(final SVCallRecord.ComplexEventInterval a,
281+
final SVCallRecord.ComplexEventInterval b) {
282+
if (a.getContig().equals(b.getContig())) {
283+
return Math.abs(a.getStart() - b.getStart());
284+
} else {
285+
return null;
286+
}
287+
}
288+
275289
private static Integer getSecondBreakpointProximity(final SVCallRecord a, final SVCallRecord b) {
276290
if (a.getContigB().equals(b.getContigB())) {
277291
return Math.abs(a.getPositionB() - b.getPositionB());
@@ -280,6 +294,15 @@ private static Integer getSecondBreakpointProximity(final SVCallRecord a, final
280294
}
281295
}
282296

297+
private static Integer getSecondBreakpointProximity(final SVCallRecord.ComplexEventInterval a,
298+
final SVCallRecord.ComplexEventInterval b) {
299+
if (a.getContig().equals(b.getContig())) {
300+
return Math.abs(a.getEnd() - b.getEnd());
301+
} else {
302+
return null;
303+
}
304+
}
305+
283306
/**
284307
* Gets event length
285308
*/

0 commit comments

Comments
 (0)