public String get(VariantContext vc) { StringBuilder x = new StringBuilder(); x.append(vc.getReference().getDisplayString()); return x.toString(); } });
/** * This is a utility method that will convert a list of alleles into a list of base strings. Reference status * is ignored when creating these strings (i.e. 'A', not 'A*'). These strings should be sufficient * to recreate an Allele using Allele.create() * * @param alleles The list of alleles * @return A list of strings representing the bases of the input alleles. */ protected static List<String> allelesToStringList(final List<Allele> alleles) { final List<String> ret = new ArrayList<>(); alleles.forEach(a -> ret.add(a.isNoCall() ? Allele.NO_CALL_STRING : a.getDisplayString())); return ret; }
/** * This is a utility method that will convert a list of alleles into a list of base strings. Reference status * is ignored when creating these strings (i.e. 'A', not 'A*'). These strings should be sufficient * to recreate an Allele using Allele.create() * * @param alleles The list of alleles * @return A list of strings representing the bases of the input alleles. */ protected static List<String> allelesToStringList(final List<Allele> alleles) { final List<String> ret = new ArrayList<>(); alleles.forEach(a -> ret.add(a.isNoCall() ? Allele.NO_CALL_STRING : a.getDisplayString())); return ret; }
/** * Debug method to dump contents of object into string for display */ public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("Alelles in map:"); for (final Allele a:alleles) { sb.append(a.getDisplayString()+","); } sb.append("\n"); for (final Map.Entry <GATKSAMRecord, Map<Allele, Double>> el : getLikelihoodReadMap().entrySet() ) { for (final Map.Entry<Allele,Double> eli : el.getValue().entrySet()) { sb.append("Read "+el.getKey().getReadName()+". Allele:"+eli.getKey().getDisplayString()+" has likelihood="+Double.toString(eli.getValue())+"\n"); } } return sb.toString(); }
/** * Create a unique identifier given the variant context * * @param vc the variant context * @return non-null String */ private static String createUniqueID(final VariantContext vc) { return String.format("%d_%s_%s", vc.getStart(), vc.getReference().getDisplayString(), vc.getAlternateAllele(0).getDisplayString()); // return base + "_0," + base + "_1"; }
public String toString() { return ( isNoCall() ? NO_CALL_STRING : getDisplayString() ) + (isReference() ? "*" : ""); }
public String toString() { return ( isNoCall() ? NO_CALL_STRING : getDisplayString() ) + (isReference() ? "*" : ""); }
public String toString() { return ( isNoCall() ? NO_CALL_STRING : getDisplayString() ) + (isReference() ? "*" : ""); }
/** * Find the length of the common prefix between the reference and ALL * variant alleles * * @return */ private int findCommonPrefixLength() { String ref = variantContext.getReference().getDisplayString(); int prefixLength = 0; boolean foundmisMatch = false; for (int refPos = 0; refPos < ref.length(); refPos++) { char refChar = ref.charAt(refPos); for (Allele var : getAlternateAlleles()) { byte[] varBases = var.getBases(); if (refPos >= varBases.length || varBases[refPos] != refChar) { foundmisMatch = true; break; } } if (foundmisMatch) { break; } else { prefixLength++; } } return prefixLength; } }
/** * Return a string representation of this object in a moderately usable form * * @return string representation */ public String toString() { StringBuilder s = new StringBuilder(1000); s.append("Alleles:"); for (Allele a: this.alleles){ s.append(a.getDisplayString()); s.append(","); } s.append("\nGLs:\n"); SumIterator iterator = new SumIterator(nAlleles,numChromosomes); while (iterator.hasNext()) { if (!Double.isInfinite(getLikelihoods()[iterator.getLinearIndex()])) { s.append("Count ["); StringBuilder b = new StringBuilder(iterator.getCurrentVector().length*2); for (int it:iterator.getCurrentVector()) { b.append(it); b.append(","); } s.append(b.toString()); s.append(String.format("] GL=%4.3f\n",this.getLikelihoods()[iterator.getLinearIndex()]) ); } iterator.next(); } return s.toString(); }
@Test public void testSymbolic() { Allele a = Allele.create("<SYMBOLIC>"); Assert.assertTrue(a.isSymbolic()); Assert.assertEquals("<SYMBOLIC>", a.getDisplayString()); }
@Test public void shouldPreserveSymbolicAlleleCase() { final VariantContext variant; try (final VCFFileReader reader = new VCFFileReader(new File(VariantBaseTest.variantTestDataRoot + "breakpoint.vcf"), false)) { variant = reader.iterator().next(); } // VCF v4.1 s1.4.5 // Tools processing VCF files are not required to preserve case in the allele String, except for IDs, which are case sensitive. Assert.assertTrue(variant.getAlternateAllele(0).getDisplayString().contains("chr12")); }
@Test public void testVCF42Breakend() { Allele a; a = Allele.create("A."); Assert.assertTrue(a.isSymbolic()); Assert.assertEquals("A.", a.getDisplayString()); a = Allele.create(".A"); Assert.assertTrue(a.isSymbolic()); Assert.assertEquals(".A", a.getDisplayString()); Assert.assertTrue(Allele.create("AA.").isSymbolic()); Assert.assertTrue(Allele.create(".AA").isSymbolic()); }
/** * Example testng test using MyDataProvider */ @Test(dataProvider = "AdjacentSNPIndelTest") public void testAdjacentSNPIndelTest(final String refBases, final String haplotypeBases, final String cigar, final List<List<String>> expectedAlleles) { final Haplotype hap = new Haplotype(haplotypeBases.getBytes(), false, 0, TextCigarCodec.decode(cigar)); final GenomeLoc loc = new UnvalidatingGenomeLoc(CHR, 0, 1, refBases.length()); final EventMap ee = new EventMap(hap, refBases.getBytes(), loc, NAME); ee.replaceClumpedEventsWithBlockSubstitutions(); Assert.assertEquals(ee.getNumberOfEvents(), expectedAlleles.size()); final List<VariantContext> actuals = new ArrayList<VariantContext>(ee.getVariantContexts()); for ( int i = 0; i < ee.getNumberOfEvents(); i++ ) { final VariantContext actual = actuals.get(i); Assert.assertEquals(actual.getReference().getDisplayString(), expectedAlleles.get(i).get(0)); Assert.assertEquals(actual.getAlternateAllele(0).getDisplayString(), expectedAlleles.get(i).get(1)); } }
@Test public void testBreakpoint() { Allele a = Allele.create("A[chr1:1["); Assert.assertTrue(a.isSymbolic()); Assert.assertEquals("A[chr1:1[", a.getDisplayString()); Assert.assertTrue(Allele.create("]chr1:1]A").isSymbolic()); Assert.assertTrue(Allele.create("[chr1:1[A").isSymbolic()); Assert.assertTrue(Allele.create("A]chr1:1]").isSymbolic()); }
/** * Trim the alleles in inputVC forward and reverse, as requested * * @param inputVC a non-null input VC whose alleles might need a haircut * @param trimForward should we trim up the alleles from the forward direction? * @param trimReverse should we trim up the alleles from the reverse direction? * @return a non-null VariantContext (may be == to inputVC) with trimmed up alleles */ @Ensures("result != null") public static VariantContext trimAlleles(final VariantContext inputVC, final boolean trimForward, final boolean trimReverse) { if ( inputVC == null ) throw new IllegalArgumentException("inputVC cannot be null"); if ( inputVC.getNAlleles() <= 1 || inputVC.isSNP() ) return inputVC; // see whether we need to trim common reference base from all alleles final int revTrim = trimReverse ? computeReverseClipping(inputVC.getAlleles(), inputVC.getReference().getDisplayString().getBytes()) : 0; final VariantContext revTrimVC = trimAlleles(inputVC, -1, revTrim); final int fwdTrim = trimForward ? computeForwardClipping(revTrimVC.getAlleles()) : -1; final VariantContext vc= trimAlleles(revTrimVC, fwdTrim, 0); return vc; }
@Test(dataProvider = "R2MergerData") public void testR2Merger(final String refS, final String hapS, int nEvents, final String cigar, final String expectedMergedRef, final String expectedMergedAlt, final double r2, final boolean expectMerge) { final Haplotype ref = new Haplotype(refS.getBytes(), true, 0, TextCigarCodec.decode(refS.length() + "M")); final Haplotype hap = new Haplotype(hapS.getBytes(), false, 0, TextCigarCodec.decode(cigar)); final GenomeLoc loc = new UnvalidatingGenomeLoc("1", 0, 1, ref.length()); final List<Haplotype> haplotypes = Arrays.asList(ref, hap); final TreeSet<Integer> vcStarts = EventMap.buildEventMapsForHaplotypes(haplotypes, ref.getBases(), loc, false); final MockLDCalculator r2Calc = new MockLDCalculator(r2); Assert.assertEquals(vcStarts.size(), nEvents); final boolean merged = merger.mergeConsecutiveEventsBasedOnLDOnce(haplotypes, r2Calc, 1, vcStarts, ref.getBases(), loc); Assert.assertEquals(merged, expectMerge); Assert.assertEquals(vcStarts.size(), expectMerge ? 1 : nEvents); if ( expectMerge ) { final VariantContext vc = hap.getEventMap().getVariantContexts().iterator().next(); Assert.assertTrue(vc.isBiallelic()); Assert.assertEquals(vc.getReference().getDisplayString(), expectedMergedRef); Assert.assertEquals(vc.getAlternateAllele(0).getDisplayString(), expectedMergedAlt); } }
@Test public void testR2MergerWithThirdHapWithoutEvent() { final String refS = "ACGT"; final String hapS = "CCGA"; final String cigar = "4M"; final Haplotype ref = new Haplotype(refS.getBytes(), true, 0, TextCigarCodec.decode(refS.length() + "M")); final Haplotype hap1 = new Haplotype(hapS.getBytes(), false, 0, TextCigarCodec.decode(cigar)); final Haplotype hap2 = new Haplotype("ACGA".getBytes(), false, 0, TextCigarCodec.decode(cigar)); final GenomeLoc loc = new UnvalidatingGenomeLoc("1", 0, 1, ref.length()); final List<Haplotype> haplotypes = Arrays.asList(ref, hap1, hap2); final TreeSet<Integer> vcStarts = EventMap.buildEventMapsForHaplotypes(haplotypes, ref.getBases(), loc, false); final MockLDCalculator r2Calc = new MockLDCalculator(1.0); Assert.assertEquals(vcStarts.size(), 2); final boolean merged = merger.mergeConsecutiveEventsBasedOnLDOnce(haplotypes, r2Calc, 1, vcStarts, ref.getBases(), loc); Assert.assertEquals(merged, true); Assert.assertEquals(vcStarts.size(), 1); final VariantContext vc = hap1.getEventMap().getVariantContexts().iterator().next(); Assert.assertTrue(vc.isBiallelic()); Assert.assertEquals(vc.getReference().getDisplayString(), "ACGT"); Assert.assertEquals(vc.getAlternateAllele(0).getDisplayString(), "CCGA"); Assert.assertEquals(hap2.getEventMap().size(), 0); }
@Test(dataProvider = "noCallAndSymbolicData") public void testLiftOverNoCallAndSymbolic(final LiftOver liftOver, final VariantContext source, final VariantContext result, final boolean expectReversed) { final Interval target = liftOver.liftOver(new Interval(source.getContig(), source.getStart(), source.getEnd()), .95); Assert.assertEquals(target.isNegativeStrand(), expectReversed); VariantContext vc = LiftoverUtils.liftVariant(source, target, REFERENCE, true, true); VcfTestUtils.assertEquals(vc, result); Assert.assertEquals(vc.getAttribute(LiftoverVcf.ORIGINAL_CONTIG), source.getContig()); Assert.assertEquals(vc.getAttribute(LiftoverVcf.ORIGINAL_START), source.getStart()); Assert.assertTrue(source.getAlleles().equals(result.getAlleles()) != result.hasAttribute(LiftoverVcf.ORIGINAL_ALLELES)); if (!source.getAlleles().equals(result.getAlleles())) { List<String> resultAlleles = new ArrayList<>(); source.getAlleles().forEach(a -> resultAlleles.add(a.getDisplayString())); Assert.assertEquals(resultAlleles, result.getAttributeAsStringList(LiftoverVcf.ORIGINAL_ALLELES, null)); } }
protected final void printCallInfo(final VariantContext vc, final double[] log10AlleleFrequencyPriors, final long runtimeNano, final AFCalculationResult result) { printCallElement(vc, "type", "ignore", vc.getType()); int allelei = 0; for (final Allele a : vc.getAlleles()) printCallElement(vc, "allele", allelei++, a.getDisplayString()); for (final Genotype g : vc.getGenotypes()) printCallElement(vc, "PL", g.getSampleName(), g.getLikelihoodsString()); for (int priorI = 0; priorI < log10AlleleFrequencyPriors.length; priorI++) printCallElement(vc, "priorI", priorI, log10AlleleFrequencyPriors[priorI]); printCallElement(vc, "runtime.nano", "ignore", runtimeNano); printCallElement(vc, "log10PosteriorOfAFEq0", "ignore", result.getLog10PosteriorOfAFEq0()); printCallElement(vc, "log10PosteriorOfAFGt0", "ignore", result.getLog10PosteriorOfAFGT0()); for ( final Allele allele : result.getAllelesUsedInGenotyping() ) { if ( allele.isNonReference() ) { printCallElement(vc, "MLE", allele, result.getAlleleCountAtMLE(allele)); printCallElement(vc, "pRefByAllele", allele, result.getLog10PosteriorOfAFEq0ForAllele(allele)); } } callReport.flush(); }