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; } }
@Test(dataProvider = "illegalChars", expectedExceptions = IllegalArgumentException.class) public void testIllegalCharacterToEnum(final char c) throws Exception { CigarOperator.characterToEnum(c); }
@Test(dataProvider = "chars") public void testCharacterToEnum(final char c, final CigarOperator op) throws Exception { Assert.assertEquals(CigarOperator.characterToEnum(c), op); }
/** * 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; }
/** * Convert from String CIGAR representation to Cigar class representation. Does not * do validation beyond the most basic CIGAR string well-formedness, i.e. each operator is * valid, and preceded by a decimal length. * @param textCigar CIGAR in String form ala SAM text file. "*" means empty CIGAR. * @throws RuntimeException if textCigar is invalid at the most basic level. * @return cigar in Cigar class format */ public static Cigar decode(final String textCigar) { if (SAMRecord.NO_ALIGNMENT_CIGAR.equals(textCigar)) { return new Cigar(); } final Cigar ret = new Cigar(); final byte[] cigarBytes = StringUtil.stringToBytes(textCigar); for (int i = 0; i < cigarBytes.length; ++i) { if (!isDigit(cigarBytes[i])) { throw new IllegalArgumentException("Malformed CIGAR string: " + textCigar); } int length = (cigarBytes[i] - ZERO_BYTE); for (++i; isDigit(cigarBytes[i]); ++i) { length = (length * 10) + cigarBytes[i] - ZERO_BYTE; } final CigarOperator operator = CigarOperator.characterToEnum(cigarBytes[i]); ret.add(new CigarElement(length, operator)); } return ret; }
/** * Convert from String CIGAR representation to Cigar class representation. Does not * do validation beyond the most basic CIGAR string well-formedness, i.e. each operator is * valid, and preceded by a decimal length. * @param textCigar CIGAR in String form ala SAM text file. "*" means empty CIGAR. * @throws RuntimeException if textCigar is invalid at the most basic level. * @return cigar in Cigar class format */ public Cigar decode(final String textCigar) { if (SAMRecord.NO_ALIGNMENT_CIGAR.equals(textCigar)) { return new Cigar(); } final Cigar ret = new Cigar(); final byte[] cigarBytes = StringUtil.stringToBytes(textCigar); for (int i = 0; i < cigarBytes.length; ++i) { if (!isDigit(cigarBytes[i])) { throw new IllegalArgumentException("Malformed CIGAR string: " + textCigar); } int length = (cigarBytes[i] - ZERO_BYTE); for (++i; isDigit(cigarBytes[i]); ++i) { length = (length * 10) + cigarBytes[i] - ZERO_BYTE; } final CigarOperator operator = CigarOperator.characterToEnum(cigarBytes[i]); ret.add(new CigarElement(length, operator)); } return ret; }
/** * Convert from String CIGAR representation to Cigar class representation. Does not * do validation beyond the most basic CIGAR string well-formedness, i.e. each operator is * valid, and preceded by a decimal length. * * @param textCigar CIGAR in String form ala SAM text file. "*" means empty CIGAR. * @throws RuntimeException if textCigar is invalid at the most basic level. */ static Cigar decodeCigar(final String textCigar) { if (SAMRecord.NO_ALIGNMENT_CIGAR.equals(textCigar)) { return new Cigar(); } final Cigar ret = new Cigar(); final byte[] cigarBytes = StringUtil.stringToBytes(textCigar); for (int i = 0; i < cigarBytes.length; ++i) { if (!isDigit(cigarBytes[i])) { throw new IllegalArgumentException("Malformed CIGAR string: " + textCigar); } int length = (cigarBytes[i] - ZERO_BYTE); for (++i; isDigit(cigarBytes[i]); ++i) { length = (length * 10) + cigarBytes[i] - ZERO_BYTE; } final CigarOperator operator = CigarOperator.characterToEnum(cigarBytes[i]); ret.add(new CigarElement(length, operator)); } return ret; }
private void parseAlignments() { Utils.parseCigarInto(evidenceRecord.ReferenceAlignment, firstHalf.cgCigElList); int len = 0; for (CigEl e : firstHalf.cgCigElList) { switch (e.op) { case 'B': break; default: len += CigarOperator.characterToEnum(e.op).consumesReadBases() ? e.len : 0; break; } } if ((evidenceRecord.side == 1 && !evidenceRecord.negativeStrand) || (evidenceRecord.side == 0 && evidenceRecord.negativeStrand)) { secondHalf.baseBuf = Utils.slice(baseBuf, 0, len); secondHalf.scoreBuf = Utils.slice(scoreBuf, 0, len); firstHalf.baseBuf = Utils.slice(baseBuf, len, baseBuf.limit()); firstHalf.scoreBuf = Utils.slice(scoreBuf, len, scoreBuf.limit()); } else { firstHalf.baseBuf = Utils.slice(baseBuf, 0, len); firstHalf.scoreBuf = Utils.slice(scoreBuf, 0, len); secondHalf.baseBuf = Utils.slice(baseBuf, len, baseBuf.limit()); secondHalf.scoreBuf = Utils.slice(scoreBuf, len, scoreBuf.limit()); } Utils.parseCigarInto(evidenceRecord.MateReferenceAlignment, secondHalf.cgCigElList); }
/** * Convert from String CIGAR representation to Cigar class representation. Does not * do validation beyond the most basic CIGAR string well-formedness, i.e. each operator is * valid, and preceded by a decimal length. * @param textCigar CIGAR in String form ala SAM text file. "*" means empty CIGAR. * @throws RuntimeException if textCigar is invalid at the most basic level. * @return cigar in Cigar class format */ public static Cigar decode(final String textCigar) { if (SAMRecord.NO_ALIGNMENT_CIGAR.equals(textCigar)) { return new Cigar(); } final Cigar ret = new Cigar(); final byte[] cigarBytes = StringUtil.stringToBytes(textCigar); for (int i = 0; i < cigarBytes.length; ++i) { if (!isDigit(cigarBytes[i])) { throw new IllegalArgumentException("Malformed CIGAR string: " + textCigar); } int length = (cigarBytes[i] - ZERO_BYTE); for (++i; isDigit(cigarBytes[i]); ++i) { length = (length * 10) + cigarBytes[i] - ZERO_BYTE; } final CigarOperator operator = CigarOperator.characterToEnum(cigarBytes[i]); ret.add(new CigarElement(length, operator)); } return ret; }
record.setAlignmentStart(alignmentStart); List<CigarElement> elements = new ArrayList<CigarElement>(); elements.add(new CigarElement(length, CigarOperator.characterToEnum('M'))); record.setCigar(new Cigar(elements)); record.setProperPairFlag(false);