public void testOverlapCigarConsistency() { final byte[] read = DnaUtils.encodeString("GTACTGTGTGCGTCCTTGACATCTA ACCGGCGCCT".replaceAll(" ", "")); final byte[] tmpl = DnaUtils.encodeString("GTAGT GTGCGTCCTTGACATCTAAGGATATCGGCGCCTGA".replaceAll(" ", "")); final int[] actions = ActionsHelper.build("===X=BB====================NNNNN=X========", 0, 3); final AlignmentResult ar = new AlignmentResult(read, actions, tmpl); ar.setIdentifyingInfo(true, false); // System.out.println("cigar:" + ar.getCigarString(1, false) + " readString:" + // ar.readString()); final SAMRecord samrec = new SAMRecord(null); samrec.setCigarString(ar.getCigarString(false, false)); samrec.setReadString(ar.readString()); samrec.setAttribute(SamUtils.ATTRIBUTE_NUM_MISMATCHES, 2); samrec.setReadNegativeStrandFlag(false); samrec.setFirstOfPairFlag(true); samrec.setAlignmentStart(1); samrec.setFlags(67); final NgsParams params = new NgsParamsBuilder() .gapOpenPenalty(EditDistanceFactory.DEFAULT_GAP_OPEN_PENALTY) .gapExtendPenalty(EditDistanceFactory.DEFAULT_GAP_EXTEND_PENALTY) .substitutionPenalty(EditDistanceFactory.DEFAULT_SUBSTITUTION_PENALTY) .unknownsPenalty(0) .create(); try (MemoryPrintStream mps = new MemoryPrintStream()) { final SamValidator sv = new SamValidator( mps.printStream(), mps.printStream(), true, false, false, false, params, true); assertEquals( 2 * EditDistanceFactory.DEFAULT_SUBSTITUTION_PENALTY, sv.isAtExpectedRef(tmpl, samrec, null)); } }
public void testCgOverlap() throws Exception { final SuperCigarValidator validator = new SuperCigarValidator(0); final SAMRecord samrec = new SAMRecord(null); samrec.setAlignmentStart(1); samrec.setCigarString("25=5N10="); samrec.setReadString("tttgtaggtcggataaggcgttcatccgacacg"); samrec.setBaseQualityString("4316%8883-56+141663,2.3----45/.,2"); samrec.setAttribute(SamUtils.CG_SUPER_CIGAR, "5=2B20=5N10="); samrec.setAttribute(SamUtils.CG_OVERLAP_QUALITY, "%6"); samrec.setReadNegativeStrandFlag(false); samrec.setFlags(67); validator.setData( samrec, DnaUtils.encodeString("tttgtgtaggtcggataaggcgttc atccgacacg".replaceAll(" ", "")), FastaUtils.asciiToRawQuality("4316%%68883-56+141663,2.3----45/.,2")); validator.setTemplate(DnaUtils.encodeString("tttgtaggtcggataaggcgttcgggggatccgacacg")); validator.parse(); assertTrue(validator.getInvalidReason(), validator.isValid()); samrec.setCigarString("3=1X21=5N10="); samrec.setReadString("tttataggtcggataaggcgttcatccgacacg"); samrec.setBaseQualityString("4316%8883-56+141663,2.3----45/.,2"); samrec.setAttribute(SamUtils.CG_SUPER_CIGAR, "5=2B1X19=5N10="); samrec.setAttribute(SamUtils.CG_READ_DELTA, "A"); validator.setData( samrec, DnaUtils.encodeString("tttgtataggtcggataaggcgttc atccgacacg".replaceAll(" ", "")), FastaUtils.asciiToRawQuality("4316%%68883-56+141663,2.3----45/.,2")); validator.parse(); assertTrue(validator.getInvalidReason(), validator.isValid()); }
public void testMismatchFailures() throws Exception { final SuperCigarValidator validator = new SuperCigarValidator(0); final SAMRecord samrec = new SAMRecord(null); samrec.setAlignmentStart(1); samrec.setCigarString("2=1X13=5N20="); samrec.setReadString("GACGCCGAGGAAAAACAGGCGGATCGTCAGGAGTT"); samrec.setAttribute(SamUtils.CG_SUPER_CIGAR, "2=1X13=5N20="); samrec.setBaseQualityString("4316%%68883-56+141663,2.3----45/.,2"); samrec.setFlags(73); validator.setData( samrec, DnaUtils.encodeString("GACGCCGAGG AAAAACAGGCGGATCGTCAGGAGTT".replaceAll(" ", "")), FastaUtils.asciiToRawQuality("4316%%68883-56+141663,2.3----45/.,2")); validator.setTemplate(DnaUtils.encodeString("GAGGCCGAGGGGGGGAAAAACAGGCGGATCGTCAGGAGTT")); try { validator.parse(); assertFalse(validator.isValid()); assertTrue( validator.getInvalidReason(), validator .getInvalidReason() .contains("Read delta (" + SamUtils.CG_READ_DELTA + ") too short, ")); } catch (final AssertionError e) { assertEquals("readDelta.len=0 but should be 1", e.getMessage()); } samrec.setAttribute(SamUtils.CG_READ_DELTA, "T"); validator.setData( samrec, DnaUtils.encodeString("GACGCCGAGG AAAAACAGGCGGATCGTCAGGAGTT".replaceAll(" ", "")), FastaUtils.asciiToRawQuality("4316%%68883-56+141663,2.3----45/.,2")); validator.parse(); assertFalse(validator.isValid()); assertTrue( validator.getInvalidReason(), validator .getInvalidReason() .contains(SamUtils.CG_READ_DELTA + " value: T does not match read value: C")); validator.setData( samrec, DnaUtils.encodeString("GAGGCCGAGG AAAAACAGGCGGATCGTCAGGAGTT".replaceAll(" ", "")), FastaUtils.asciiToRawQuality("4316%%68883-56+141663,2.3----45/.,2")); validator.parse(); assertFalse(validator.isValid()); assertTrue( validator.getInvalidReason(), validator.getInvalidReason().contains("Expected mismatch")); samrec.setAlignmentStart(5); samrec.setCigarString("4=1I5=7N25="); samrec.setReadString("CTGTGGCATCGGGGGACCTGGGGCCCTCNCTGAGT"); samrec.setAttribute(SamUtils.CG_SUPER_CIGAR, "4=1I5=7N25="); samrec.setAttribute(SamUtils.CG_READ_DELTA, "A"); validator.setData( samrec, DnaUtils.encodeString("CTGTGGCATC GGGGGACCTGGGGCCCTCNCTGAGT".replaceAll(" ", "")), FastaUtils.asciiToRawQuality("4316%%68883-56+141663,2.3----45/.,2")); validator.setTemplate( DnaUtils.encodeString( "TGTTCTGTG CATCTTCCCTTGGGGGACCTGNGGCCCTCACTGAGTGGGTCCTCCATGGGTGACTGGTGA")); validator.parse(); assertFalse(validator.getInvalidReason(), validator.isValid()); assertTrue( validator.getInvalidReason(), validator .getInvalidReason() .contains("SDF read insert: G does not match SAM " + SamUtils.CG_READ_DELTA + ": A,")); samrec.setAlignmentStart(2); samrec.setCigarString("23=6N10="); samrec.setReadString("CTTCAGCGATGGAGAAACTCGGGTGTCTACGTA"); samrec.setAttribute(SamUtils.CG_SUPER_CIGAR, "5=2B20=6N10="); samrec.setAttribute(SamUtils.CG_READ_DELTA, null); samrec.setAttribute(SamUtils.CG_OVERLAP_QUALITY, "%6"); samrec.setBaseQualityString("4316%8883-56+141663,2.3----45/.,2"); samrec.setFlags(179); validator.setData( samrec, DnaUtils.encodeString("TACGTAGACA CCCGAGTGTCTCCATCGCTGTGAAG".replaceAll(" ", "")), FastaUtils.asciiToRawQuality("2,./54----3.2,366141+65-38886%%6134")); validator.setTemplate( DnaUtils.encodeString("GCTTCAGCGATGGAGAAACTCGGGAAGTCGTGTCTACGTAGAACGTAGTT")); validator.parse(); assertFalse(validator.getInvalidReason(), validator.isValid()); assertTrue( validator.getInvalidReason(), validator.getInvalidReason().contains("Expected match, SDF read=C, template=A,")); samrec.setAlignmentStart(1); samrec.setCigarString("10M5N25M"); samrec.setReadString("GAGGCCGAGGCAGGCGGATCGTCAGGAGTTAAAAA"); samrec.setAttribute(SamUtils.CG_SUPER_CIGAR, "10=5N25="); samrec.setAttribute(SamUtils.CG_OVERLAP_QUALITY, null); samrec.setBaseQualityString("4316%668883-56+141663,2.3----45/.,2"); samrec.setFlags(73); validator.setData( samrec, DnaUtils.encodeString("GAGGCCGAGG CAGGCGGATCGTCAGGAGTTAAAAA".replaceAll(" ", "")), FastaUtils.asciiToRawQuality("4316%%68883-56+141663,2.3----45/.,2")); validator.setTemplate(DnaUtils.encodeString("GAGGCCGAGGGGGGGCAGGCGGATCGTCAGGAGTTAAAAA")); validator.parse(); assertFalse(validator.getInvalidReason(), validator.isValid()); assertTrue( validator.getInvalidReason(), validator.getInvalidReason().contains("SDF and SAM qualities don't match,")); samrec.setAlignmentStart(1); samrec.setCigarString("25=5N10="); samrec.setReadString("tttgtaggtcggataaggcgttcatccgacacg"); samrec.setBaseQualityString("4316%8883-56+141663,2.3----45/.,2"); samrec.setAttribute(SamUtils.CG_SUPER_CIGAR, "5=2B20=5N10="); samrec.setAttribute(SamUtils.CG_OVERLAP_QUALITY, "6"); samrec.setReadNegativeStrandFlag(false); samrec.setFlags(67); try { validator.setData( samrec, DnaUtils.encodeString("tttgtgtaggtcggataaggcgttc atccgacacg".replaceAll(" ", "")), FastaUtils.asciiToRawQuality("4316%%68883-56+141663,2.3----45/.,2")); fail(); } catch (final BadSuperCigarException iae) { assertTrue( iae.getMessage(), iae.getMessage() .contains("SAM record qualities plus XQ not expected length. Was: 34 expected: 35")); } samrec.setAlignmentStart(1); samrec.setCigarString("25=5N10="); samrec.setReadString("tttgtaggtcggataaggcgttcatccgacacg"); samrec.setBaseQualityString("4316%%68883-56+141663,2.3----45/.,2"); samrec.setAttribute(SamUtils.CG_SUPER_CIGAR, "5=2B20=5N10="); samrec.setAttribute(SamUtils.CG_OVERLAP_QUALITY, null); samrec.setReadNegativeStrandFlag(false); samrec.setFlags(67); validator.setTemplate(DnaUtils.encodeString("tttgtaggtcggataaggcgttcgggggatccgacacg")); validator.setData( samrec, DnaUtils.encodeString("tttgtgtaggtcggataaggcgttc atccgacacg".replaceAll(" ", "")), FastaUtils.asciiToRawQuality("4316%%68883-56+141663,2.3----45/.,2")); validator.parse(); assertFalse(validator.getInvalidReason(), validator.isValid()); assertTrue( validator.getInvalidReason(), validator .getInvalidReason() .contains( "Overlap described but no " + SamUtils.CG_OVERLAP_QUALITY + " field present")); }
@Override public void setReadNegativeStrandFlag(final boolean flag) { if (isStrandless()) throw new IllegalStateException("Cannot set the strand of a strandless read"); super.setReadNegativeStrandFlag(flag); }