public boolean filterOut(SAMRecord rec) { rec.setMappingQuality(defaultMappingQuality); return false; } }
@Override public void setMappingQuality(final int value) { if (!initializedFields.contains(LazyField.MAPPING_QUALITY)) { initializedFields.add(LazyField.MAPPING_QUALITY); } super.setMappingQuality(value); }
@Override public void setMappingQuality(final int value) { if (!initializedFields.contains(LazyField.MAPPING_QUALITY)) { initializedFields.add(LazyField.MAPPING_QUALITY); } super.setMappingQuality(value); }
public boolean filterOut(SAMRecord rec) { if (rec.getMappingQuality() == reassignMappingQualityFrom) rec.setMappingQuality(reassignMappingQualityTo); return false; } }
public boolean filterOut(SAMRecord rec) { final String ORIGINAL_CIGAR_TAG = "OC"; if (rec.getAttribute(ORIGINAL_CIGAR_TAG) != null) rec.setMappingQuality(rec.getMappingQuality() - 10); return false; } }
@BeforeTest public void setUp() { // note the side effects... builder.addFrag("zeroMQ", 1, 1, false).setMappingQuality(0); builder.addFrag("lowMQ", 1, 1, false).setMappingQuality(10); builder.addFrag("highMQ", 1, 1, false).setMappingQuality(30); }
private static SAMRecord primaryAlignmentForSupplementary(SAMRecord r) { if (r.getSupplementaryAlignmentFlag()) { SAMRecord record = SAMRecordUtil.clone(r); List<ChimericAlignment> calist = ChimericAlignment.getChimericAlignments(r); if (calist.size() > 0) { ChimericAlignment ca = calist.get(0); record.setReferenceName(ca.rname); record.setAlignmentStart(ca.pos); record.setReadNegativeStrandFlag(ca.isNegativeStrand); record.setCigar(ca.cigar); record.setMappingQuality(ca.mapq); record.setReadBases(SAMRecord.NULL_SEQUENCE); record.setBaseQualities(SAMRecord.NULL_QUALS); return record; } } return r; } public static void main(String[] argv) {
@Test public void canShadeBaseQuality() throws InvalidGenomicCoordsException, IOException, InvalidColourException { GenomicCoords gc= new GenomicCoords("chr7:1-80", 80, null, null); SAMRecord rec= new SAMRecord(null); rec.setAlignmentStart(1); rec.setCigarString("2M3D8M"); rec.setMappingQuality(30); rec.setReadBases("AAAAATTTTT".getBytes()); rec.setBaseQualities("!!!!!IIIII".getBytes()); System.err.println(rec.getSAMString()); TextRead tr= new TextRead(rec, gc, false); System.err.println(Splitter.on("m").omitEmptyStrings().splitToList(tr.getPrintableTextRead(false, false, false))); }
@Test public void canShadeBaseQualityWithSoftClip() throws InvalidGenomicCoordsException, IOException, InvalidColourException { // Ensure this is the colour we expect with low base quality assertEquals("249", Config.get(ConfigKey.shade_low_mapq)); GenomicCoords gc= new GenomicCoords("chr7:100-170", 80, null, null); SAMRecord rec= new SAMRecord(null); rec.setAlignmentStart(100); rec.setCigarString("2S4M"); rec.setMappingQuality(30); rec.setReadBases("NNNNNN".getBytes()); rec.setBaseQualityString("##ABC#"); TextRead tr= new TextRead(rec, gc, false); List<String> printable= Splitter.on("N").omitEmptyStrings().splitToList(tr.getPrintableTextRead(false, false, false)); assertTrue( ! printable.get(0).contains("249")); // Base qual= A assertTrue( ! printable.get(1).contains("249")); // Base qual= B assertTrue( ! printable.get(2).contains("249")); // Base qual= C assertTrue( printable.get(3).contains("249")); // Base qual= # }
@Test public void testUnmappedRecords() throws IOException { final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder(); for (int i = 0; i < 4; i++) { samBuilder.addUnmappedFragment(String.valueOf(i)); } final Iterator<SAMRecord> records = samBuilder.iterator(); records.next().setReadNegativeStrandFlag(true); records.next().setSecondaryAlignment(true); records.next().setMappingQuality(10); records.next().setCigarString("36M"); final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null, IndexValidationStringency.EXHAUSTIVE); Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_NOT_PRIM_ALIGNMENT.getHistogramString()).getValue(), 1.0); Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_MAPPING_QUALITY.getHistogramString()).getValue(), 1.0); }
private static SAMRecord createRecord(int start, int mappingQuality) { final SAMRecord rec = new SAMRecord(getHeader()); rec.setReadName("read"); rec.setReferenceName("1"); rec.setAlignmentStart(start); rec.setMappingQuality(mappingQuality); return rec; }
public static void makeReadUnmapped(final SAMRecord rec) { if (rec.getReadNegativeStrandFlag()) { SAMRecordUtil.reverseComplement(rec); rec.setReadNegativeStrandFlag(false); } rec.setDuplicateReadFlag(false); rec.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX); rec.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START); rec.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR); rec.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY); rec.setInferredInsertSize(0); rec.setNotPrimaryAlignmentFlag(false); rec.setProperPairFlag(false); rec.setReadUnmappedFlag(true); }
SAMRecord firstSAMRecord(SAMFileHeader header) { SAMRecord r = new SAMRecord(header); r.setReadName(evidenceRecord.getReadName()); r.setReferenceName(evidenceRecord.Chromosome); r.setAlignmentStart(Integer.valueOf(evidenceRecord.OffsetInReference) + 1); r.setMappingQuality(Integer.valueOf(evidenceRecord.ScoreAllele0)); r.setReadPairedFlag(true); r.setReadUnmappedFlag(false); r.setReadNegativeStrandFlag(negative); r.setFirstOfPairFlag(evidenceRecord.side == 0); r.setSecondOfPairFlag(!r.getFirstOfPairFlag()); r.setCigar(new Cigar(Utils.toCigarOperatorList(firstHalf.samCigarElements))); r.setReadBases(Utils.toByteArray(firstHalf.readBasesBuf)); r.setBaseQualities(Utils.toByteArray(firstHalf.readScoresBuf)); r.setAttribute("GC", Utils.toString(firstHalf.gcList)); r.setAttribute("GS", Utils.toString(firstHalf.gsBuf)); r.setAttribute("GQ", SAMUtils.phredToFastq(Utils.toByteArray(firstHalf.gqBuf))); return r; }
/** * Strip mapping information from a SAMRecord. * <p> * WARNING: by clearing the secondary and supplementary flags, * this may have the affect of producing multiple distinct records with the * same read name and flags, which may lead to invalid SAM/BAM output. * Callers of this method should make sure to deal with this issue. */ public static void makeReadUnmapped(final SAMRecord rec) { if (rec.getReadNegativeStrandFlag()) { rec.reverseComplement(true); rec.setReadNegativeStrandFlag(false); } rec.setDuplicateReadFlag(false); rec.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX); rec.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START); rec.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR); rec.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY); rec.setInferredInsertSize(0); rec.setSecondaryAlignment(false); rec.setSupplementaryAlignmentFlag(false); rec.setProperPairFlag(false); rec.setReadUnmappedFlag(true); }
/** * Strip mapping information from a SAMRecord. * <p> * WARNING: by clearing the secondary and supplementary flags, * this may have the affect of producing multiple distinct records with the * same read name and flags, which may lead to invalid SAM/BAM output. * Callers of this method should make sure to deal with this issue. */ public static void makeReadUnmapped(final SAMRecord rec) { if (rec.getReadNegativeStrandFlag()) { rec.reverseComplement(true); rec.setReadNegativeStrandFlag(false); } rec.setDuplicateReadFlag(false); rec.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX); rec.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START); rec.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR); rec.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY); rec.setInferredInsertSize(0); rec.setSecondaryAlignment(false); rec.setSupplementaryAlignmentFlag(false); rec.setProperPairFlag(false); rec.setReadUnmappedFlag(true); }
SAMRecord secondSAMRecord(SAMFileHeader header) { SAMRecord r = new SAMRecord(header); r.setReadName(evidenceRecord.getReadName()); r.setReferenceName(evidenceRecord.Chromosome); r.setAlignmentStart(Integer.valueOf(evidenceRecord.MateOffsetInReference) + 1); r.setMappingQuality(Integer.valueOf(evidenceRecord.ScoreAllele0)); r.setReadPairedFlag(true); r.setReadUnmappedFlag(false); r.setReadNegativeStrandFlag(negative); r.setFirstOfPairFlag(evidenceRecord.side == 1); r.setSecondOfPairFlag(!r.getFirstOfPairFlag()); r.setCigar(new Cigar(Utils.toCigarOperatorList(secondHalf.samCigarElements))); r.setReadBases(Utils.toByteArray(secondHalf.readBasesBuf)); r.setBaseQualities(Utils.toByteArray(secondHalf.readScoresBuf)); r.setAttribute("GC", Utils.toString(secondHalf.gcList)); r.setAttribute("GS", Utils.toString(secondHalf.gsBuf)); r.setAttribute("GQ", SAMUtils.phredToFastq(Utils.toByteArray(secondHalf.gqBuf))); return r; }
/** * Strip mapping information from a SAMRecord. * <p> * WARNING: by clearing the secondary and supplementary flags, * this may have the affect of producing multiple distinct records with the * same read name and flags, which may lead to invalid SAM/BAM output. * Callers of this method should make sure to deal with this issue. */ public static void makeReadUnmapped(final SAMRecord rec) { if (rec.getReadNegativeStrandFlag()) { rec.reverseComplement(true); rec.setReadNegativeStrandFlag(false); } rec.setDuplicateReadFlag(false); rec.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX); rec.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START); rec.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR); rec.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY); rec.setInferredInsertSize(0); rec.setSecondaryAlignment(false); rec.setSupplementaryAlignmentFlag(false); rec.setProperPairFlag(false); rec.setReadUnmappedFlag(true); }
private void addAlignmentForMostStrategy( final SAMFileWriter writer, final SAMRecord unmappedRecord, final MostDistantStrategyAlignmentSpec spec, final boolean reverse) { final SAMRecord alignedRecord = new SAMRecord(writer.getFileHeader()); alignedRecord.setReadName(unmappedRecord.getReadName()); alignedRecord.setReadBases(unmappedRecord.getReadBases()); alignedRecord.setBaseQualities(unmappedRecord.getBaseQualities()); alignedRecord.setReferenceName(spec.sequence); alignedRecord.setAlignmentStart(spec.alignmentStart); alignedRecord.setReadNegativeStrandFlag(reverse); alignedRecord.setCigarString(unmappedRecord.getReadBases().length + "M"); alignedRecord.setMappingQuality(spec.mapQ); alignedRecord.setReadPairedFlag(unmappedRecord.getReadPairedFlag()); alignedRecord.setFirstOfPairFlag(unmappedRecord.getFirstOfPairFlag()); alignedRecord.setSecondOfPairFlag(unmappedRecord.getSecondOfPairFlag()); alignedRecord.setMateUnmappedFlag(true); writer.addAlignment(alignedRecord); }
private void addAlignmentsForBestFragmentMapqStrategy( final SAMFileWriter writer, final SAMRecord unmappedRecord, final String sequence, final int[] mapqs) { boolean reverse = false; int alignmentStart = 1; for (final int mapq : mapqs) { final SAMRecord alignedRecord = new SAMRecord(writer.getFileHeader()); alignedRecord.setReadName(unmappedRecord.getReadName()); alignedRecord.setReadBases(unmappedRecord.getReadBases()); alignedRecord.setBaseQualities(unmappedRecord.getBaseQualities()); alignedRecord.setReferenceName(sequence); alignedRecord.setAlignmentStart(alignmentStart); alignmentStart += 10; // Any old position will do alignedRecord.setReadNegativeStrandFlag(reverse); reverse = !reverse; alignedRecord.setCigarString(unmappedRecord.getReadBases().length + "M"); alignedRecord.setMappingQuality(mapq); alignedRecord.setReadPairedFlag(unmappedRecord.getReadPairedFlag()); alignedRecord.setFirstOfPairFlag(unmappedRecord.getFirstOfPairFlag()); alignedRecord.setSecondOfPairFlag(unmappedRecord.getSecondOfPairFlag()); alignedRecord.setMateUnmappedFlag(true); writer.addAlignment(alignedRecord); } }
private SAMRecord makeRead(final SAMFileHeader alignedHeader, final SAMRecord unmappedRec, final HitSpec hitSpec, final int hitIndex) { final SAMRecord rec = new SAMRecord(alignedHeader); rec.setReadName(unmappedRec.getReadName()); rec.setReadBases(unmappedRec.getReadBases()); rec.setBaseQualities(unmappedRec.getBaseQualities()); rec.setMappingQuality(hitSpec.mapq); if (!hitSpec.primary) rec.setNotPrimaryAlignmentFlag(true); final Cigar cigar = new Cigar(); final int readLength = rec.getReadLength(); if (hitSpec.filtered) { // Add two insertions so alignment is filtered. cigar.add(new CigarElement(readLength-4, CigarOperator.M)); cigar.add(new CigarElement(1, CigarOperator.I)); cigar.add(new CigarElement(1, CigarOperator.M)); cigar.add(new CigarElement(1, CigarOperator.I)); cigar.add(new CigarElement(1, CigarOperator.M)); } else { cigar.add(new CigarElement(readLength, CigarOperator.M)); } rec.setCigar(cigar); rec.setReferenceName(bigSequenceName); rec.setAttribute(SAMTag.HI.name(), hitIndex); rec.setAlignmentStart(hitIndex + 1); return rec; }