private static GATKSAMRecord tmpCopyRead(GATKSAMRecord read) { return (GATKSAMRecord)read.clone(); }
/** * Emit the accumulated dropped reads and reset/clear the cache. * * @param readDestination destination to receive the reads */ public void writeDroppedReads(final ReadDestination readDestination) { for (final DroppedReadsTracker.Reason reason : droppedReads.keySet()) { final Set<GATKSAMRecord> droppedRecords = droppedReads.get(reason); for (final GATKSAMRecord originalRec : droppedRecords) { // We want to set the vendor quality check flag on the read emitted to // the bamout, so clone the read before update it so we don't affect // subsequent filtering/trimming, etc. in the event the original read // gets processed again final GATKSAMRecord clonedRec = (GATKSAMRecord)originalRec.clone(); clonedRec.setReadFailsVendorQualityCheckFlag(true); readDestination.add(clonedRec); } } // clear and reset the cache droppedReads.clear(); }
private GATKSAMRecord modifyBaseQualities(final GATKSAMRecord read, final int startOffset, final int length) throws Exception { final GATKSAMRecord readWithLowQuals = (GATKSAMRecord)read.clone(); final byte[] withLowQuals = Arrays.copyOf(read.getBaseQualities(), read.getBaseQualities().length); for ( int i = startOffset; i < startOffset + length; i++ ) withLowQuals[i] = (byte)(read.getBaseQualities()[i] + (i % 2 == 0 ? -1 : 0)); readWithLowQuals.setBaseQualities(withLowQuals); return readWithLowQuals; }
tests.add( new Object[]{ "basic case", read.clone(), true }); final GATKSAMRecord bad1 = (GATKSAMRecord)read.clone(); bad1.setReadPairedFlag(false); tests.add( new Object[]{ "not paired", bad1, false }); final GATKSAMRecord bad = (GATKSAMRecord)read.clone(); bad.setProperPairFlag(false); final GATKSAMRecord bad = (GATKSAMRecord)read.clone(); bad.setReadUnmappedFlag(true); tests.add( new Object[]{ "read is unmapped", bad, false }); final GATKSAMRecord bad = (GATKSAMRecord)read.clone(); bad.setMateUnmappedFlag(true); tests.add( new Object[]{ "mate is unmapped", bad, false }); final GATKSAMRecord bad = (GATKSAMRecord)read.clone(); bad.setMateNegativeStrandFlag(false); tests.add( new Object[]{ "read and mate both on positive strand", bad, false }); final GATKSAMRecord bad = (GATKSAMRecord)read.clone(); bad.setReadNegativeStrandFlag(true); tests.add( new Object[]{ "read and mate both on negative strand", bad, false }); final GATKSAMRecord bad = (GATKSAMRecord)read.clone(); bad.setInferredInsertSize(0); tests.add( new Object[]{ "insert size is 0", bad, false });
@Test(dataProvider = "ReadAlignedToRefData", enabled = true) public void testReadAlignedToRef(final GATKSAMRecord read, final Haplotype haplotype, final int refStart, final int expectedReadStart, final String expectedReadCigar) throws Exception { final HaplotypeBAMWriter writer = new CalledHaplotypeBAMWriter(new MockDestination()); final GATKSAMRecord originalReadCopy = (GATKSAMRecord)read.clone(); if ( expectedReadCigar == null ) { Assert.assertNull(AlignmentUtils.createReadAlignedToRef(read, haplotype, haplotype, refStart, true)); } else { final Cigar expectedCigar = TextCigarCodec.decode(expectedReadCigar); final GATKSAMRecord alignedRead = AlignmentUtils.createReadAlignedToRef(read, haplotype, haplotype, refStart, true); Assert.assertEquals(alignedRead.getReadName(), originalReadCopy.getReadName()); Assert.assertEquals(alignedRead.getAlignmentStart(), expectedReadStart); Assert.assertEquals(alignedRead.getReadBases(), originalReadCopy.getReadBases()); Assert.assertEquals(alignedRead.getBaseQualities(), originalReadCopy.getBaseQualities()); Assert.assertEquals(alignedRead.getAlignmentStart(), expectedReadStart); Assert.assertEquals(alignedRead.getCigar(), expectedCigar); Assert.assertNotNull(alignedRead.getAttribute("HC")); } Assert.assertEquals(read, originalReadCopy, "createReadAlignedToRef seems be modifying the original read!"); }
Assert.assertTrue(region.equalExceptReads(region2)); final GATKSAMRecord read2 = (GATKSAMRecord)read.clone(); read2.setReadName(read.getReadName() + ".clone");
System.arraycopy(read.getBaseQualities(), copyStart, newQuals, 0, newLength); final GATKSAMRecord hardClippedRead = (GATKSAMRecord) read.clone();
GATKSAMRecord read = (GATKSAMRecord) originalRead.clone(); byte[] quals = read.getBaseQualities(); byte[] bases = read.getReadBases();
final GATKSAMRecord read = (GATKSAMRecord)originalRead.clone();
private GATKSAMRecord revertSoftClippedBases(GATKSAMRecord read) { GATKSAMRecord unclipped = (GATKSAMRecord) read.clone(); Cigar unclippedCigar = new Cigar(); int matchesCount = 0; for (CigarElement element : read.getCigar().getCigarElements()) { if (element.getOperator() == CigarOperator.SOFT_CLIP || element.getOperator() == CigarOperator.MATCH_OR_MISMATCH) matchesCount += element.getLength(); else if (matchesCount > 0) { unclippedCigar.add(new CigarElement(matchesCount, CigarOperator.MATCH_OR_MISMATCH)); matchesCount = 0; unclippedCigar.add(element); } else unclippedCigar.add(element); } if (matchesCount > 0) unclippedCigar.add(new CigarElement(matchesCount, CigarOperator.MATCH_OR_MISMATCH)); unclipped.setCigar(unclippedCigar); final int newStart = read.getAlignmentStart() + calculateAlignmentStartShift(read.getCigar(), unclippedCigar); unclipped.setAlignmentStart(newStart); if ( newStart <= 0 ) { // if the start of the unclipped read occurs before the contig, // we must hard clip away the bases since we cannot represent reads with // negative or 0 alignment start values in the SAMRecord (e.g., 0 means unaligned) return hardClip(unclipped, 0, - newStart); } else { return unclipped; } }