Added respectPhaseInInput flag to RBP and integration tests
This commit is contained in:
parent
1dfaacfeb5
commit
b9b9219ac7
|
|
@ -129,6 +129,9 @@ public class ReadBackedPhasingWalker extends RodWalker<PhasingStatsAndOutput, Ph
|
|||
@Argument(fullName = "permitNoSampleOverlap", shortName = "permitNoSampleOverlap", doc = "Don't exit (just WARN) when the VCF and BAMs do not overlap in samples", required = false)
|
||||
private boolean permitNoSampleOverlap = false;
|
||||
|
||||
@Argument(fullName = "respectPhaseInInput", shortName = "respectPhaseInInput", doc = "Will only phase genotypes in cases where the resulting output will necessarily be consistent with any existing phase (for example, from trios)", required = false)
|
||||
private boolean respectPhaseInInput = false;
|
||||
|
||||
private GenomeLoc mostDownstreamLocusReached = null;
|
||||
|
||||
private LinkedList<VariantAndReads> unphasedSiteQueue = null;
|
||||
|
|
@ -487,6 +490,13 @@ public class ReadBackedPhasingWalker extends RodWalker<PhasingStatsAndOutput, Ph
|
|||
private int phasingSiteIndex = -1;
|
||||
private Map<String, PhasingRead> readsAtHetSites = null;
|
||||
|
||||
private void clearFields() {
|
||||
hetGenotypes = null;
|
||||
prevHetAndInteriorIt = null;
|
||||
phasingSiteIndex = -1;
|
||||
readsAtHetSites = null;
|
||||
}
|
||||
|
||||
public boolean hasPreviousHets() {
|
||||
return phasingSiteIndex > 0;
|
||||
}
|
||||
|
|
@ -513,12 +523,20 @@ public class ReadBackedPhasingWalker extends RodWalker<PhasingStatsAndOutput, Ph
|
|||
}
|
||||
phasingSiteIndex = listHetGenotypes.size();
|
||||
if (phasingSiteIndex == 0) { // no previous sites against which to phase
|
||||
hetGenotypes = null;
|
||||
prevHetAndInteriorIt = null;
|
||||
clearFields();
|
||||
return;
|
||||
}
|
||||
prevHetAndInteriorIt.previous(); // so that it points to the previous het site [and NOT one after it, due to the last call to next()]
|
||||
|
||||
if (respectPhaseInInput) {
|
||||
Genotype prevHetGenotype = prevHetAndInteriorIt.clone().next().unfinishedVariant.getGenotype(sample);
|
||||
if (!prevHetGenotype.isPhased()) {
|
||||
// Make this genotype unphaseable, since its previous het is not already phased [as required by respectPhaseInInput]:
|
||||
clearFields();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Add the (het) position to be phased:
|
||||
GenomeLoc phaseLocus = VariantContextUtils.getLocation(getToolkit().getGenomeLocParser(), vr.variant);
|
||||
GenotypeAndReadBases grbPhase = new GenotypeAndReadBases(vr.variant.getGenotype(sample), vr.sampleReadBases.get(sample), phaseLocus);
|
||||
|
|
|
|||
|
|
@ -80,4 +80,24 @@ public class ReadBackedPhasingIntegrationTest extends WalkerTest {
|
|||
executeTest("MAX 10 het sites [TEST SIX]; require PQ >= 10; cacheWindow = 20000; has inconsistent sites", spec);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test7() {
|
||||
WalkerTestSpec spec = new WalkerTestSpec(
|
||||
baseTestString(hg18Reference, "phasing_test_chr20_332341_1332503.bam", "CEU.trio.2010_03.genotypes.hg18.vcf", 20000, 10, 10)
|
||||
+ " -L chr20:332341-802503",
|
||||
1,
|
||||
Arrays.asList("c37548b333b65f58d0edfc5c2a62a28a"));
|
||||
executeTest("Use trio-phased VCF, but ignore its phasing [TEST SEVEN]", spec);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test8() {
|
||||
WalkerTestSpec spec = new WalkerTestSpec(
|
||||
baseTestString(hg18Reference, "phasing_test_chr20_332341_1332503.bam", "CEU.trio.2010_03.genotypes.hg18.vcf", 20000, 10, 10)
|
||||
+ " -L chr20:332341-802503" + " -respectPhaseInInput",
|
||||
1,
|
||||
Arrays.asList("dfc7cdddd702e63d46d04f61a3ecd720"));
|
||||
executeTest("Use trio-phased VCF, and respect its phasing [TEST EIGHT]", spec);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue