/** * @return The number of read bases that the read covers. */ public int getReadLength() { return getReadLength(cigarElements); }
/** * @return The number of read bases that the read covers. */ public int getReadLength() { return getReadLength(cigarElements); }
/** * @return The number of read bases that the read covers. */ public int getReadLength() { return getReadLength(cigarElements); }
/** * Set the cigar of this haplotype to cigar. * * Note that this function consolidates the cigar, so that 1M1M1I1M1M => 2M1I2M * * @param cigar a cigar whose readLength == length() */ public void setCigar( final Cigar cigar ) { this.cigar = AlignmentUtils.consolidateCigar(cigar); if ( this.cigar.getReadLength() != length() ) throw new IllegalArgumentException("Read length " + length() + " not equal to the read length of the cigar " + cigar.getReadLength() + " " + this.cigar); }
/** If the record contains a cigar with non-zero read length, return that length, otherwise, return readLength */ private int getReadLengthFromCigar(final SAMRecord rec) { return ( rec.getCigar() != null && rec.getCigar().getReadLength() != 0 ) ? rec.getCigar().getReadLength() : readLength; }
/** If the record contains a cigar with non-zero read length, return that length, otherwise, return readLength */ private int getReadLengthFromCigar(final SAMRecord rec) { return ( rec.getCigar() != null && rec.getCigar().getReadLength() != 0 ) ? rec.getCigar().getReadLength() : readLength; }
public static void main(String[] args) throws IOException { CompareToReference2 c2r = new CompareToReference2(); c2r.init("/home/lmose/dev/reference/hg19/chr7.fa"); String seq = "CGCTGGCGGCCTTCCTGCCCGACCTGTCCCTGGCCAAGAGGAAGACCTGGCGGAACCCTTGGCGGCGTTCCTACCACAAGCGCAAGAAGGCCGAGTGGGAGGTGGACCCTGACAACTGCGAGGAGGTGAAGCAGACACCGCCCTACGACAGCAGCCACCGCATCCTGGACGTCATGGACATGACGATCTTCGACTTCCTCATGGGAAACATGGACCGTCACCACTACGAGACTTGTGAGAAGTTTGGGAATGAAACGTTCATCATCCACTTAGACAATGGAAGAGGGATCCGGA"; IndelShifter is = new IndelShifter(); Cigar orig = TextCigarCodec.decode("7M88I1M10D109M241D82M60D7M"); Cigar cigar = is.shiftAllIndelsLeft(296604, 297121, "chr7", orig, seq, c2r); System.out.println("old: " + orig + ", " + orig.getReadLength()); System.out.println("new: " + cigar + ", " + cigar.getReadLength()); //296604, 297121,chr7, 7M88I1M10D109M241D82M60D7M, CGCTGGCGGCCTTCCTGCCCGACCTGTCCCTGGCCAAGAGGAAGACCTGGCGGAACCCTTGGCGGCGTTCCTACCACAAGCGCAAGAAGGCCGAGTGGGAGGTGGACCCTGACAACTGCGAGGAGGTGAAGCAGACACCGCCCTACGACAGCAGCCACCGCATCCTGGACGTCATGGACATGACGATCTTCGACTTCCTCATGGGAAACATGGACCGTCACCACTACGAGACTTGTGAGAAGTTTGGGAATGAAACGTTCATCATCCACTTAGACAATGGAAGAGGGATCCGGA } }
@Override protected boolean isUsableRead(final GATKSAMRecord read, final int refLoc) { return super.isUsableRead(read, refLoc) && read.getSoftStart() + read.getCigar().getReadLength() > refLoc; } }
@Test(dataProvider = "readLengthData") public void testGetReadLength(final String textCigar, final int readLength) throws Exception{ final Cigar cigar = TextCigarCodec.decode(textCigar); Assert.assertEquals(cigar.getReadLength(), readLength); }
public int getLastAlignedBaseReadOffset() { return cigar.getReadLength() - 1 - (isNegativeStrand ? CigarUtil.getStartClipLength(cigar.getCigarElements()) : CigarUtil.getEndClipLength(cigar.getCigarElements())); } public int overlappingBases(SAMSequenceDictionary dict, ChimericAlignment ca) {
public static GATKSAMRecord createArtificialRead(Cigar cigar) { int length = cigar.getReadLength(); byte [] base = {'A'}; byte [] qual = {30}; byte [] bases = Utils.arrayFromArrayWithLength(base, length); byte [] quals = Utils.arrayFromArrayWithLength(qual, length); SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(); return ArtificialSAMUtils.createArtificialRead(header, "default_read", 0, 10000, bases, quals, cigar.toString()); }
@Test(enabled = !DEBUG, dataProvider = "NumAlignedBlocks") public void testNumAlignedBlocks(final Cigar cigar, final int expected) { final GATKSAMRecord read = ArtificialSAMUtils.createArtificialRead(header, "myRead", 0, 1, cigar == null ? 10 : cigar.getReadLength()); read.setCigar(cigar); Assert.assertEquals(AlignmentUtils.getNumAlignmentBlocks(read), expected, "Cigar " + cigar + " failed NumAlignedBlocks"); }
@Test(enabled = !DEBUG, dataProvider = "NumHardClipped") public void testNumHardClipped(final Cigar cigar, final int expected) { final GATKSAMRecord read = ArtificialSAMUtils.createArtificialRead(header, "myRead", 0, 1, cigar == null ? 10 : cigar.getReadLength()); read.setCigar(cigar); Assert.assertEquals(AlignmentUtils.getNumHardClippedBases(read), expected, "Cigar " + cigar + " failed num hard clips"); }
public LIBSTest(final String cigarString) { final Cigar cigar = TextCigarCodec.decode(cigarString); this.cigarString = cigarString; this.elements = cigar.getCigarElements(); this.readLength = cigar.getReadLength(); }
@Test(enabled = !DEBUG, dataProvider = "NumAlignedBasesCountingSoftClips") public void testNumAlignedBasesCountingSoftClips(final Cigar cigar, final int expected) { final GATKSAMRecord read = ArtificialSAMUtils.createArtificialRead(header, "myRead", 0, 1, cigar == null ? 10 : cigar.getReadLength()); read.setCigar(cigar); Assert.assertEquals(AlignmentUtils.getNumAlignedBasesCountingSoftClips(read), expected, "Cigar " + cigar + " failed NumAlignedBasesCountingSoftClips"); }
@Test(enabled = !DEBUG, dataProvider = "ReadToAlignmentByteArrayDataProvider") public void testReadToAlignmentByteArrayData(final Cigar cigar, final int expectedLength, final char middleOp, final int startOfIndelBases, final int lengthOfDeletion) { final byte[] read = Utils.dupBytes((byte)'A', cigar.getReadLength()); final byte[] alignment = AlignmentUtils.readToAlignmentByteArray(cigar, read); Assert.assertEquals(alignment.length, expectedLength, "Wrong alignment length detected for cigar " + cigar.toString()); for ( int i = 0; i < alignment.length; i++ ) { final byte expectedBase; if ( middleOp == 'D' && i >= startOfIndelBases && i < startOfIndelBases + lengthOfDeletion ) expectedBase = PileupElement.DELETION_BASE; else if ( middleOp == 'I' && i == startOfIndelBases - 1 ) expectedBase = PileupElement.A_FOLLOWED_BY_INSERTION_BASE; else expectedBase = (byte)'A'; Assert.assertEquals(alignment[i], expectedBase, "Wrong base detected at position " + i); } }
public static void trim(SAMRecord read, int startCount, int endCount) { int readLength = read.getReadLength(); read.setReadBases(Arrays.copyOfRange(read.getReadBases(), startCount, readLength - endCount)); read.setBaseQualities(Arrays.copyOfRange(read.getBaseQualities(), startCount, readLength - endCount)); if (read.getCigar() != null && read.getCigar().getCigarElements().size() > 0) { read.setAlignmentStart(read.getAlignmentStart() + CigarUtil.offsetOf(read.getCigar(), startCount)); read.setCigar(CigarUtil.trimReadBases(read.getCigar(), startCount, endCount)); assert (read.getReadLength() == read.getCigar().getReadLength()); } }
@Test(dataProvider = "longCigarsData") public void testSetCigarRemovesCgTagWhenNoLongerLong(final int numOps) throws Exception { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate); final Cigar cigar = Cigar.fromCigarOperators(getCigarOperatorsForTest(numOps)); final SAMRecord frag1 = builder.addFrag("frag1", 0, 1, false, false, cigar.toString(), null, 30); frag1.setCigarString(String.format("%dM", cigar.getReadLength())); testHelper(builder, SAMFileHeader.SortOrder.coordinate, true); }
@Test(dataProvider = "longCigarsData") public void testSetCigarStringRemovesCgTagWhenNoLongerLong(final int numOps) throws Exception { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate); final Cigar cigar = Cigar.fromCigarOperators(getCigarOperatorsForTest(numOps)); final SAMRecord frag1 = builder.addFrag("frag1", 0, 1, false, false, cigar.toString(), null, 30); frag1.setCigarString(String.format("%dM", cigar.getReadLength())); testHelper(builder, SAMFileHeader.SortOrder.coordinate, true); }
/** * Make a read fom the CIGAR * * @param cigar the CIGAR * @param lengthChange change in read length relative the CIGAR length * @return artificial read */ public static GATKSAMRecord makeReadFromCigar(Cigar cigar, int lengthChange) { int readLength = cigar.getReadLength(); if ( readLength >= -lengthChange ) { readLength += lengthChange; } return ArtificialSAMUtils.createArtificialRead(Utils.arrayFromArrayWithLength(BASES, readLength), Utils.arrayFromArrayWithLength(QUALS, readLength), cigar.toString()); }