use of au.edu.wehi.idsv.VariantContextDirectedBreakpoint in project gridss by PapenfussLab.
the class VcfTransformCommandLineProgram method getAllCalls.
public Iterator<IdsvVariantContext> getAllCalls(File file, CloseableIterator<VariantContextDirectedBreakpoint> breakpointCalls) {
VCFFileReader vcfReader = new VCFFileReader(file, false);
CloseableIterator<VariantContext> it = vcfReader.iterator();
Iterator<IdsvVariantContext> idsvIt = Iterators.transform(it, variant -> IdsvVariantContext.create(getContext(), null, variant));
Iterator<IdsvVariantContext> nonbpIt = Iterators.filter(idsvIt, variant -> !(variant instanceof VariantContextDirectedBreakpoint));
// sort back to nominal VCF position
Iterator<VariantContextDirectedBreakpoint> bpit = new VariantContextWindowedSortingIterator<>(getContext(), SAMEvidenceSource.maximumWindowSize(getContext(), getSamEvidenceSources(), getAssemblySource()), breakpointCalls);
Iterator<IdsvVariantContext> mergedIt = Iterators.mergeSorted(ImmutableList.of(bpit, nonbpIt), IdsvVariantContext.ByLocationStart);
return new AutoClosingIterator<>(mergedIt, vcfReader, it);
}
use of au.edu.wehi.idsv.VariantContextDirectedBreakpoint in project gridss by PapenfussLab.
the class AllocateEvidence method annotate.
private VariantContextDirectedBreakpoint annotate(VariantEvidenceSupport ves) {
VariantCallingConfiguration vc = getContext().getConfig().getVariantCalling();
StructuralVariationCallBuilder builder = new StructuralVariationCallBuilder(getContext(), ves.variant);
for (DirectedEvidence e : ves.support) {
boolean shouldExclude = false;
if (!shouldExclude) {
builder.addEvidence(e);
}
}
VariantContextDirectedBreakpoint bp = (VariantContextDirectedBreakpoint) builder.make();
if (!vc.writeFiltered) {
if (bp.getBreakpointQual() < vc.minScore)
return null;
if (bp.getBreakpointEvidenceCount() < vc.minReads)
return null;
if (bp.isFiltered())
return null;
}
bp = (VariantContextDirectedBreakpoint) vc.applyConfidenceFilter(getContext(), bp);
return bp;
}
use of au.edu.wehi.idsv.VariantContextDirectedBreakpoint in project gridss by PapenfussLab.
the class AnnotateReferenceCoverage method iterator.
@Override
public CloseableIterator<VariantContextDirectedBreakpoint> iterator(CloseableIterator<VariantContextDirectedBreakpoint> calls, ExecutorService threadpool) {
ProcessingContext context = getContext();
List<SAMEvidenceSource> sources = getSamEvidenceSources();
AssemblyEvidenceSource asm = getAssemblySource();
int windowSize = SAMEvidenceSource.maximumWindowSize(context, sources, asm);
return new SequentialCoverageAnnotator<VariantContextDirectedBreakpoint>(context, sources, calls, 2 * windowSize + WINDOW_SIZE_SAFETY_MARGIN, threadpool);
}
use of au.edu.wehi.idsv.VariantContextDirectedBreakpoint in project gridss by PapenfussLab.
the class VcfTransformCommandLineProgram method getBreakpoints.
public CloseableIterator<VariantContextDirectedBreakpoint> getBreakpoints(File file) {
VCFFileReader vcfReader = new VCFFileReader(file, false);
CloseableIterator<VariantContext> it = vcfReader.iterator();
Iterator<IdsvVariantContext> idsvIt = Iterators.transform(it, variant -> IdsvVariantContext.create(getContext(), null, variant));
Iterator<VariantContextDirectedBreakpoint> bpit = Iterators.filter(idsvIt, VariantContextDirectedBreakpoint.class);
// resort by evidence start
bpit = new DirectEvidenceWindowedSortingIterator<>(getContext(), SAMEvidenceSource.maximumWindowSize(getContext(), getSamEvidenceSources(), getAssemblySource()), bpit);
return new AutoClosingIterator<VariantContextDirectedBreakpoint>(bpit, it, vcfReader);
}
use of au.edu.wehi.idsv.VariantContextDirectedBreakpoint in project gridss by PapenfussLab.
the class AllocateEvidenceTest method should_uniquely_assign.
@Test
public void should_uniquely_assign() throws IOException, InterruptedException, ExecutionException {
final int fragSize = 4;
final int testSize = 64;
final List<SAMRecord> in = new ArrayList<SAMRecord>();
final ProcessingContext pc = getCommandlineContext();
pc.getVariantCallingParameters().writeFiltered = true;
pc.getVariantCallingParameters().minScore = 0;
StubSAMEvidenceSource ses = new StubSAMEvidenceSource(pc, input, 0, 0, fragSize);
for (int i = 1; i < testSize; i++) {
for (int j = 1; j < testSize; j++) {
SAMRecord[] dp = withReadName(String.format("read-%d-%d", i, j), DP(0, i, "1M", true, 1, j, "1M", false));
ses.evidence.add(NonReferenceReadPair.create(dp[0], dp[1], ses));
ses.evidence.add(NonReferenceReadPair.create(dp[1], dp[0], ses));
in.add(dp[0]);
in.add(dp[1]);
}
}
StubAssemblyEvidenceSource aes = new StubAssemblyEvidenceSource(pc);
aes.fragSize = fragSize;
Collections.sort(ses.evidence, DirectedEvidenceOrder.ByNatural);
createInput(in);
VariantCaller vc = new VariantCaller(pc, ImmutableList.<SAMEvidenceSource>of(ses), aes);
ExecutorService threadpool = Executors.newSingleThreadExecutor();
vc.callBreakends(output, threadpool);
threadpool.shutdown();
AllocateEvidence cmd = new AllocateEvidence();
cmd.INPUT_VCF = output;
cmd.setContext(pc);
cmd.setAssemblySource(aes);
cmd.setSamEvidenceSources(ImmutableList.of(ses));
cmd.OUTPUT_VCF = new File(testFolder.getRoot(), "annotated.vcf");
cmd.ASSEMBLY = new File(testFolder.getRoot(), "assembly.bam");
// to shut up the command-line parsing
createBAM(cmd.ASSEMBLY, SortOrder.coordinate, Collections.emptyList());
cmd.doWork(null);
// List<IdsvVariantContext> annotated = getVcf(new File(testFolder.getRoot(), "out.vcf"), null);
List<IdsvVariantContext> rawcalls = getVcf(output, null);
List<IdsvVariantContext> calls = getVcf(cmd.OUTPUT_VCF, null);
assertSymmetrical(rawcalls.stream().map(x -> (VariantContextDirectedBreakpoint) x).collect(Collectors.toList()));
assertSymmetrical(calls.stream().map(x -> (VariantContextDirectedBreakpoint) x).collect(Collectors.toList()));
// with no filtering, annotation should not change call set
double expectedEvidence = 0;
for (DirectedEvidence e : ses.evidence) {
DiscordantReadPair bp = (DiscordantReadPair) e;
expectedEvidence += bp.getBreakpointQual();
}
double annotatedEvidence = 0;
for (IdsvVariantContext e : calls) {
annotatedEvidence += e.getPhredScaledQual();
}
double rawEvidence = rawcalls.stream().mapToDouble(e -> e.getPhredScaledQual()).sum();
// unique assignment must result in the evidence total being, at most, the same
assertTrue(annotatedEvidence <= rawEvidence);
// each piece of evidence should be assigned to a single breakpoint so totals should match
int rpCalls = calls.stream().mapToInt(v -> ((VariantContextDirectedBreakpoint) v).getBreakpointEvidenceCount()).sum();
assertEquals(ses.evidence.size(), rpCalls);
// floating point truncation on VCF is severe!
assertEquals(expectedEvidence, annotatedEvidence, 20);
}
Aggregations