protected CigarElement makeElement(final State state, final int length) { CigarOperator op = null; switch (state) { case MATCH: op = CigarOperator.M; break; case INSERTION: op = CigarOperator.I; break; case DELETION: op = CigarOperator.D; break; case CLIP: op = CigarOperator.S; break; } return new CigarElement(length, op); }
/** * @param cigarette CIGAR element (operator + length) encoded as an unsigned int. * @return Object representation of the CIGAR element. */ private static CigarElement binaryCigarToCigarElement(final int cigarette) { final int binaryOp = cigarette & 0xf; final int length = cigarette >>> 4; return new CigarElement(length, CigarOperator.binaryToEnum(binaryOp)); } }
/** * @param cigarette CIGAR element (operator + length) encoded as an unsigned int. * @return Object representation of the CIGAR element. */ private static CigarElement binaryCigarToCigarElement(final int cigarette) { final int binaryOp = cigarette & 0xf; final int length = cigarette >> 4; return new CigarElement(length, CigarOperator.binaryToEnum(binaryOp)); } }
public static List<CigarElement> toCigarOperatorList(List<CigEl> list) { List<CigarElement> result = new ArrayList<CigarElement>(list.size()); for (CigEl e : list) result.add(new CigarElement(e.len, CigarOperator.characterToEnum(e.op))); return result; } }
/** * @param cigarette CIGAR element (operator + length) encoded as an unsigned int. * @return Object representation of the CIGAR element. */ private static CigarElement binaryCigarToCigarElement(final int cigarette) { final int binaryOp = cigarette & 0xf; final int length = cigarette >>> 4; return new CigarElement(length, CigarOperator.binaryToEnum(binaryOp)); } }
public static void addEndSoftClip(List<CigarElement> cigar, int softClippedBaseCount) { assert(softClippedBaseCount >= 0); while (cigar.get(cigar.size() - 1).getOperator() == CigarOperator.H) { cigar.remove(cigar.size() - 1); } if (softClippedBaseCount == 0) return; if (cigar.get(cigar.size() - 1).getOperator() == CigarOperator.SOFT_CLIP) { cigar.set(cigar.size() - 1, new CigarElement(cigar.get(cigar.size() - 1).getLength() + softClippedBaseCount, CigarOperator.SOFT_CLIP)); } else { cigar.add(new CigarElement(softClippedBaseCount, CigarOperator.SOFT_CLIP)); } } public static List<CigarElement> trimClipping(List<CigarElement> cigar) {
public static void addStartSoftClip(List<CigarElement> cigar, int softClippedBaseCount) { assert(softClippedBaseCount >= 0); while (cigar.get(0).getOperator() == CigarOperator.H) { cigar.remove(0); } if (softClippedBaseCount == 0) return; if (cigar.get(0).getOperator() == CigarOperator.SOFT_CLIP) { cigar.set(0, new CigarElement(cigar.get(0).getLength() + softClippedBaseCount, CigarOperator.SOFT_CLIP)); } else { cigar.add(0, new CigarElement(softClippedBaseCount, CigarOperator.SOFT_CLIP)); } } public static void addEndSoftClip(List<CigarElement> cigar, int softClippedBaseCount) {
private static void padCigar(SAMRecord record, int pre, int post) { List<CigarElement> cigar = Lists.newArrayList(record.getCigar().getCigarElements()); if (record.getReadNegativeStrandFlag()) { cigar.add(0, new CigarElement(post, CigarOperator.SOFT_CLIP)); cigar.add(new CigarElement(pre, CigarOperator.SOFT_CLIP)); } else { cigar.add(0, new CigarElement(pre, CigarOperator.SOFT_CLIP)); cigar.add(new CigarElement(post, CigarOperator.SOFT_CLIP)); } cigar = CigarUtil.clean(cigar, false); record.setCigar(new Cigar(cigar)); } private static void convertToSupplementaryAlignmentRecord(SAMRecord primary, SAMRecord supplementary) {
public static GATKSAMRecord createRandomRead(int length) { List<CigarElement> cigarElements = new LinkedList<>(); cigarElements.add(new CigarElement(length, CigarOperator.M)); Cigar cigar = new Cigar(cigarElements); return ArtificialSAMUtils.createArtificialRead(cigar); }
@DataProvider public Object[][] firstLastData() { final CigarElement M_ELEMENT = new CigarElement(1, CigarOperator.M); final CigarElement S_ELEMENT = new CigarElement(1, CigarOperator.S); return new Object[][] { {"*", null, null}, {"1M", M_ELEMENT, M_ELEMENT}, {"1M1S", M_ELEMENT, S_ELEMENT}, {"1S1M", S_ELEMENT, M_ELEMENT}, {"1S1M1S", S_ELEMENT, S_ELEMENT}, {"1M1D1M1D1M", M_ELEMENT, M_ELEMENT} }; }
@Test(expectedExceptions = IllegalArgumentException.class) public void testNegativeLengthCheck(){ final CigarElement element = new CigarElement(-1, CigarOperator.M); }
private static void mergeAdjacent(List<CigarElement> list) { for (int i = list.size() - 1; i > 0; i--) { if (list.get(i).getOperator() == list.get(i - 1).getOperator()) { CigarElement replacement = new CigarElement(list.get(i).getLength() + list.get(i - 1).getLength(), list.get(i).getOperator()); list.set(i - 1, replacement); list.remove(i); } } } public static class CigarOperatorIterator implements Iterator<CigarOperator> {
/** * Gets the cigar for this alignment. * @return sam-jdk formatted alignment. */ public Cigar getCigar() { Cigar cigar = new Cigar(); for(int i = 0; i < cigarOperators.length; i++) { CigarOperator operator = CigarOperator.characterToEnum(cigarOperators[i]); cigar.add(new CigarElement(cigarLengths[i],operator)); } return cigar; }
@Test(dataProvider = "BiasedDownsamplingTest") public void testBiasedDownsampling(final SAMFileHeader header, final int originalCount, final int toRemove) { final LinkedList<PileupElement> elements = new LinkedList<>(); for ( int i = 0; i < originalCount; i++ ) { final GATKSAMRecord read = ArtificialSAMUtils.createArtificialRead(header, "read", 0, 1, 1); elements.add(new PileupElement(read, 0, new CigarElement(1, CigarOperator.M), 0, 0)); } final List<PileupElement> result = AlleleBiasedDownsamplingUtils.downsampleElements(elements, originalCount, toRemove); Assert.assertEquals(result.size(), toRemove); }
/** * Get the haplotype cigar extended by padSize M at the tail, consolidated into a clean cigar * * @param padSize how many additional Ms should be appended to the end of this cigar. Must be >= 0 * @return a newly allocated Cigar that consolidate(getCigar + padSize + M) */ public Cigar getConsolidatedPaddedCigar(final int padSize) { if ( padSize < 0 ) throw new IllegalArgumentException("padSize must be >= 0 but got " + padSize); final Cigar extendedHaplotypeCigar = new Cigar(getCigar().getCigarElements()); if ( padSize > 0 ) extendedHaplotypeCigar.add(new CigarElement(padSize, CigarOperator.M)); return AlignmentUtils.consolidateCigar(extendedHaplotypeCigar); }
private final List<List<CigarElement>> makeCigarElementCombinations() { // this functionality can be adapted to provide input data for whatever you might want in your data final List<CigarElement> cigarElements = new LinkedList<CigarElement>(); for ( final int size : Arrays.asList(0, 10) ) { for ( final CigarOperator op : CigarOperator.values() ) { cigarElements.add(new CigarElement(size, op)); } } final List<List<CigarElement>> combinations = new LinkedList<List<CigarElement>>(); for ( final int nElements : Arrays.asList(1, 2, 3) ) { combinations.addAll(Utils.makePermutations(cigarElements, nElements, true)); } return combinations; }
@Test public void testSimpleInsertionAllele() { final String bases = "ACTGGTCAACTGGTCAACTGGTCAACTGGTCA"; final ArrayList<CigarElement> h1CigarList = new ArrayList<CigarElement>(); h1CigarList.add(new CigarElement(bases.length(), CigarOperator.M)); final Cigar h1Cigar = new Cigar(h1CigarList); String h1bases = "AACTTCTGGTCAACTGGTCAACTGGTCAACTGGTCA"; basicInsertTest("A", "AACTT", 0, h1Cigar, bases, h1bases); h1bases = "ACTGGTCAACTTACTGGTCAACTGGTCAACTGGTCA"; basicInsertTest("A", "AACTT", 7, h1Cigar, bases, h1bases); h1bases = "ACTGGTCAACTGGTCAAACTTCTGGTCAACTGGTCA"; basicInsertTest("A", "AACTT", 16, h1Cigar, bases, h1bases); }
@Test public void testSimpleDeletionAllele() { final String bases = "ACTGGTCAACTGGTCAACTGGTCAACTGGTCA"; final ArrayList<CigarElement> h1CigarList = new ArrayList<CigarElement>(); h1CigarList.add(new CigarElement(bases.length(), CigarOperator.M)); final Cigar h1Cigar = new Cigar(h1CigarList); String h1bases = "ATCAACTGGTCAACTGGTCAACTGGTCA"; basicInsertTest("ACTGG", "A", 0, h1Cigar, bases, h1bases); h1bases = "ACTGGTCAGTCAACTGGTCAACTGGTCA"; basicInsertTest("AACTG", "A", 7, h1Cigar, bases, h1bases); h1bases = "ACTGGTCAACTGGTCAATCAACTGGTCA"; basicInsertTest("ACTGG", "A", 16, h1Cigar, bases, h1bases); }
@Test public void testSimpleSNPAllele() { final String bases = "ACTGGTCAACTGGTCAACTGGTCAACTGGTCA"; final ArrayList<CigarElement> h1CigarList = new ArrayList<CigarElement>(); h1CigarList.add(new CigarElement(bases.length(), CigarOperator.M)); final Cigar h1Cigar = new Cigar(h1CigarList); String h1bases = "AGTGGTCAACTGGTCAACTGGTCAACTGGTCA"; basicInsertTest("C", "G", 1, h1Cigar, bases, h1bases); h1bases = "ACTGGTCTACTGGTCAACTGGTCAACTGGTCA"; basicInsertTest("A", "T", 7, h1Cigar, bases, h1bases); h1bases = "ACTGGTCAACTGGTCAAATGGTCAACTGGTCA"; basicInsertTest("C", "A", 17, h1Cigar, bases, h1bases); }
private List<Haplotype> assemble(final ReadThreadingAssembler assembler, final byte[] refBases, final GenomeLoc loc, final List<GATKSAMRecord> reads) { final Haplotype refHaplotype = new Haplotype(refBases, true); final Cigar c = new Cigar(); c.add(new CigarElement(refHaplotype.getBases().length, CigarOperator.M)); refHaplotype.setCigar(c); final ActiveRegion activeRegion = new ActiveRegion(loc, null, true, genomeLocParser, 0); activeRegion.addAll(reads); // logger.warn("Assembling " + activeRegion + " with " + engine); final AssemblyResultSet assemblyResultSet = assembler.runLocalAssembly(activeRegion, refHaplotype, refBases, loc, Collections.<VariantContext>emptyList(), null); return assemblyResultSet.getHaplotypeList(); }