Proper filtering when indels are being lifted over

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4158 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
ebanks 2010-08-29 04:48:31 +00:00
parent 2ffa98aea5
commit df76474b34
1 changed files with 15 additions and 8 deletions

View File

@ -40,6 +40,7 @@ import java.util.*;
/** /**
* Filters a lifted-over VCF file for ref bases that have been changed. * Filters a lifted-over VCF file for ref bases that have been changed.
*/ */
@Reference(window=@Window(start=0,stop=100))
@Requires(value={},referenceMetaData=@RMD(name="variant",type= VariantContext.class)) @Requires(value={},referenceMetaData=@RMD(name="variant",type= VariantContext.class))
public class FilterLiftedVariants extends RodWalker<Integer, Integer> { public class FilterLiftedVariants extends RodWalker<Integer, Integer> {
@ -56,17 +57,23 @@ public class FilterLiftedVariants extends RodWalker<Integer, Integer> {
writer.writeHeader(vcfHeader); writer.writeHeader(vcfHeader);
} }
private void filterAndWrite(byte ref, VariantContext vc) { private void filterAndWrite(byte[] ref, VariantContext vc) {
totalLocs++; totalLocs++;
byte recordRef = vc.getReference().getBases()[0]; boolean failed = false;
byte[] recordRef = vc.getReference().getBases();
if ( recordRef != ref ) { for (int i = 0; i < recordRef.length; i++) {
failedLocs++; if ( recordRef[i] != ref[i + (vc.isSNP() ? 0 : 1)] ) {
} else { failed = true;
writer.add(vc, ref); break;
}
} }
if ( failed )
failedLocs++;
else
writer.add(vc, ref[0]);
} }
public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {
@ -75,7 +82,7 @@ public class FilterLiftedVariants extends RodWalker<Integer, Integer> {
Collection<VariantContext> VCs = tracker.getVariantContexts(ref, "variant", null, context.getLocation(), true, false); Collection<VariantContext> VCs = tracker.getVariantContexts(ref, "variant", null, context.getLocation(), true, false);
for ( VariantContext vc : VCs ) for ( VariantContext vc : VCs )
filterAndWrite(ref.getBase(), vc); filterAndWrite(ref.getBases(), vc);
return 0; return 0;
} }