public static Cigar invertCigar (Cigar cigar) { Stack<CigarElement> cigarStack = new Stack<CigarElement>(); for (CigarElement cigarElement : cigar.getCigarElements()) cigarStack.push(cigarElement); Cigar invertedCigar = new Cigar(); while (!cigarStack.isEmpty()) invertedCigar.add(cigarStack.pop()); return invertedCigar; }
/** * Convert CIGAR from disk representation to object. * @param binaryCigar ByteArray that is assumed to have byte order set appropriately for extracting ints. */ static Cigar decode(final ByteBuffer binaryCigar) { final Cigar ret = new Cigar(); while (binaryCigar.hasRemaining()) { final int cigarette = binaryCigar.getInt(); ret.add(binaryCigarToCigarElement(cigarette)); } return ret; }
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); }
/** * Convert CIGAR from disk representation to object. * @param binaryCigar ByteArray that is assumed to have byte order set appropriately for extracting ints. */ Cigar decode(final ByteBuffer binaryCigar) { final Cigar ret = new Cigar(); while (binaryCigar.hasRemaining()) { final int cigarette = binaryCigar.getInt(); ret.add(binaryCigarToCigarElement(cigarette)); } return ret; }
/** * Convert CIGAR from disk representation to object. * @param binaryCigar ByteArray that is assumed to have byte order set appropriately for extracting ints. */ static Cigar decode(final ByteBuffer binaryCigar) { final Cigar ret = new Cigar(); while (binaryCigar.hasRemaining()) { final int cigarette = binaryCigar.getInt(); ret.add(binaryCigarToCigarElement(cigarette)); } return ret; }
/** * Convert CIGAR from disk representation to object. * @param binaryCigar Array of unsigned ints, one for each CIGAR element. */ Cigar decode(final int[] binaryCigar) { final Cigar ret = new Cigar(); for (final int cigarette : binaryCigar) { ret.add(binaryCigarToCigarElement(cigarette)); } return ret; }
/** * Convert CIGAR from disk representation to object. * @param binaryCigar Array of unsigned ints, one for each CIGAR element. */ static Cigar decode(final int[] binaryCigar) { final Cigar ret = new Cigar(); for (final int cigarette : binaryCigar) { ret.add(binaryCigarToCigarElement(cigarette)); } return ret; }
/** * Convert CIGAR from disk representation to object. * @param binaryCigar Array of unsigned ints, one for each CIGAR element. */ static Cigar decode(final int[] binaryCigar) { final Cigar ret = new Cigar(); for (final int cigarette : binaryCigar) { ret.add(binaryCigarToCigarElement(cigarette)); } return ret; }
protected static Cigar unclipCigar(Cigar cigar) { ArrayList<CigarElement> elements = new ArrayList<CigarElement>(cigar.numCigarElements()); for ( CigarElement ce : cigar.getCigarElements() ) { if ( !isClipOperator(ce.getOperator()) ) elements.add(ce); } return new Cigar(elements); }
private static Cigar createCigarFromCombination(byte[] cigarCombination, CigarElement[] cigarElements) { Cigar cigar = new Cigar(); for (byte i : cigarCombination) { cigar.add(cigarElements[i]); } return cigar; }
/** * 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; }
/** * 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); }
@DataProvider(name = "CigarHasZeroElement") public Object[][] makeCigarHasZeroElement() { List<Object[]> tests = new ArrayList<Object[]>(); for ( final List<CigarElement> elements : makeCigarElementCombinations() ) { boolean hasZero = false; for ( final CigarElement elt : elements ) hasZero = hasZero || elt.getLength() == 0; tests.add(new Object[]{new Cigar(elements), hasZero}); } return tests.toArray(new Object[][]{}); }
@DataProvider(name = "NumAlignedBasesCountingSoftClips") public Object[][] makeNumAlignedBasesCountingSoftClips() { List<Object[]> tests = new ArrayList<Object[]>(); final EnumSet<CigarOperator> alignedToGenome = EnumSet.of(CigarOperator.M, CigarOperator.EQ, CigarOperator.X, CigarOperator.S); for ( final List<CigarElement> elements : makeCigarElementCombinations() ) { int n = 0; for ( final CigarElement elt : elements ) n += alignedToGenome.contains(elt.getOperator()) ? elt.getLength() : 0; tests.add(new Object[]{new Cigar(elements), n}); } tests.add(new Object[]{null, 0}); return tests.toArray(new Object[][]{}); }
@DataProvider(name = "NumHardClipped") public Object[][] makeNumHardClipped() { List<Object[]> tests = new ArrayList<Object[]>(); for ( final List<CigarElement> elements : makeCigarElementCombinations() ) { int n = 0; for ( final CigarElement elt : elements ) n += elt.getOperator() == CigarOperator.H ? elt.getLength() : 0; tests.add(new Object[]{new Cigar(elements), n}); } tests.add(new Object[]{null, 0}); return tests.toArray(new Object[][]{}); }
@Test public void testDefault() { final Cigar emptyCigar = new Cigar(); Assert.assertEquals(emptyCigar, BinaryCigarCodec.decode(new int[0])); final int[] binaryCigar = BinaryCigarCodec.encode(emptyCigar); Assert.assertEquals(0, binaryCigar.length); Assert.assertEquals(emptyCigar, TextCigarCodec.decode(SAMRecord.NO_ALIGNMENT_CIGAR)); Assert.assertEquals(TextCigarCodec.encode(emptyCigar), SAMRecord.NO_ALIGNMENT_CIGAR); }
@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); }
private SAMRecord cleanCigar(SAMRecord next) { Cigar cigar = next.getCigar(); if (cigar != null && cigar.getCigarElements().size() > 0) { Cigar newCigar = new Cigar(CigarUtil.clean(cigar.getCigarElements(), true)); if (!cigar.equals(newCigar)) { if (!MessageThrottler.Current.shouldSupress(log, "minimal CIGAR representation")) { log.warn(String.format("Cigar %s of read %s is not a minimal representation.", cigar, next.getReadName())); } next.setCigar(newCigar); } } return next; }
@Test(dataProvider = "AddCigarElementsData", enabled = !DEBUG) public void testAddCigarElements(final String cigarString, final int pos, final int start, final int end, final String expectedCigarString) { final Cigar cigar = TextCigarCodec.decode(cigarString); final CigarElement elt = cigar.getCigarElement(0); final Cigar expectedCigar = TextCigarCodec.decode(expectedCigarString); final List<CigarElement> elts = new LinkedList<CigarElement>(); final int actualEndPos = AlignmentUtils.addCigarElements(elts, pos, start, end, elt); Assert.assertEquals(actualEndPos, pos + elt.getLength()); Assert.assertEquals(AlignmentUtils.consolidateCigar(new Cigar(elts)), expectedCigar); }
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(); }