@@ -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