/** * Determines whether a SAMRecord matches this filter * * @param record the SAMRecord to evaluate * * @return true if the SAMRecord matches the filter, otherwise false */ public boolean filterOut(final SAMRecord record) { if (include) { if (record.getMateNegativeStrandFlag()) { return false; } } else { // exclude if (!record.getMateNegativeStrandFlag()) { return false; } } return true; }
/** * Counts mismatches in mate flags only. * * @param list * @return */ private int detectCorrectedMateFlagsInSecondMember(List<SamRecordDiscrepancy> list) { int count = 0; for (SamRecordDiscrepancy d : list) { if (d.record1.getMateNegativeStrandFlag() != d.record2.getMateNegativeStrandFlag() || d.record1.getMateUnmappedFlag() != d.record2.getMateUnmappedFlag()) count++; } return count; }
@Override public boolean getMateNegativeStrandFlag() { if (!initializedFlags.contains(LazyFlag.MATE_NEGATIVE_STRAND)) { setMateNegativeStrandFlag(getMateNegativeStrandFlagImpl()); } return super.getMateNegativeStrandFlag(); }
@Override public boolean getMateNegativeStrandFlag() { if (!initializedFlags.contains(LazyFlag.MATE_NEGATIVE_STRAND)) { setMateNegativeStrandFlag(getMateNegativeStrandFlagImpl()); } return super.getMateNegativeStrandFlag(); }
public MateKey getOriginalReadInfo(SAMRecord read) { int pos = read.getAlignmentStart(); boolean isUnmapped = read.getReadUnmappedFlag(); boolean isRc = read.getReadNegativeStrandFlag(); String yo = read.getStringAttribute("YO"); if (yo != null) { if (yo.startsWith("N/A")) { // Original alignment was unmapped isUnmapped = true; // isRc = false; // Orientation is forced to be opposite of mate during realignment // regardless of the original alignment. isRc = !read.getMateNegativeStrandFlag(); } else { String[] fields = yo.split(":"); pos = Integer.parseInt(fields[1]); isUnmapped = false; isRc = fields[2].equals("-") ? true : false; } } int readNum = read.getFirstOfPairFlag() ? 1 : 2; return new MateKey(read.getReadName(), pos, isUnmapped, isRc, readNum, read.getAlignmentStart()); }
private int getMateCoordinate(final SAMRecord record) { if (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag()) { return record.getMateNegativeStrandFlag() ? SAMUtils.getMateUnclippedEnd(record) : SAMUtils.getMateUnclippedStart(record); } else { return -1; } }
public boolean filterOut(SAMRecord read) { return (! read.getReadPairedFlag() ) || read.getMateUnmappedFlag() || read.getDuplicateReadFlag() || read.getReadFailsVendorQualityCheckFlag() || (read.getMateNegativeStrandFlag() == read.getReadNegativeStrandFlag()); } }
private int getMateCoordinate(final SAMRecord record) { if (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag()) { return record.getMateNegativeStrandFlag() ? SAMUtils.getMateUnclippedEnd(record) : SAMUtils.getMateUnclippedStart(record); } else { return -1; } }
private int getPairedOrientation(final SAMRecord record) { if (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag()) { return getPairedOrientationByte(record.getReadNegativeStrandFlag(), record.getMateNegativeStrandFlag()); } else { return getFragmentOrientation(record); } }
private int getPairedOrientation(final SAMRecord record) { if (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag()) { return getPairedOrientationByte(record.getReadNegativeStrandFlag(), record.getMateNegativeStrandFlag()); } else { return getFragmentOrientation(record); } }
public static PairOrientation of(final SAMRecord sam) { final ReadOrdinality ordinality = ReadOrdinality.of(sam); final ReadDirection direction = ReadDirection.of(sam); // if read is unmapped, read isn't mapped, or mate is unmapped, return null if (direction == null || sam.getReadUnmappedFlag() || sam.getMateUnmappedFlag()) return null; final boolean matePositiveStrand = !sam.getMateNegativeStrandFlag(); if (ordinality == ReadOrdinality.FIRST) { return PairOrientation.ofExplicit(direction == ReadDirection.POSITIVE, matePositiveStrand); } else { return PairOrientation.ofExplicit(matePositiveStrand, direction == ReadDirection.POSITIVE); } } }
public static PairOrientation of(final SAMRecord sam) { final ReadOrdinality ordinality = ReadOrdinality.of(sam); final ReadDirection direction = ReadDirection.of(sam); // if read is unmapped, read isn't mapped, or mate is unmapped, return null if (direction == null || sam.getReadUnmappedFlag() || sam.getMateUnmappedFlag()) return null; final boolean matePositiveStrand = !sam.getMateNegativeStrandFlag(); if (ordinality == ReadOrdinality.FIRST) { return PairOrientation.ofExplicit(direction == ReadDirection.POSITIVE, matePositiveStrand); } else { return PairOrientation.ofExplicit(matePositiveStrand, direction == ReadDirection.POSITIVE); } } }
public boolean isConcordant(SAMRecord read1, SAMRecord read2) { // (assumes FR) if (read2 == null) { return read1.getReadPairedFlag() && !read1.getReadUnmappedFlag() && !read1.getMateUnmappedFlag() && read1.getReferenceIndex().equals(read1.getMateReferenceIndex()) && read1.getReadNegativeStrandFlag() != read1.getMateNegativeStrandFlag(); } else { return read1.getReadPairedFlag() && !read1.getReadUnmappedFlag() && !read2.getReadUnmappedFlag() && read1.getReferenceIndex().equals(read2.getReferenceIndex()) && read1.getReadNegativeStrandFlag() != read2.getReadNegativeStrandFlag(); } } public static ReadPairConcordanceCalculator create(ReadPairConcordanceMethod method, int minFragSize, int maxFragSize, double concordantPortion, InsertSizeDistribution insert, IdsvMetrics idsv) {
/** * Computes the pair orientation of the given SAMRecord. * @param r * @return PairOrientation of the given SAMRecord. * @throws IllegalArgumentException If the record is not a paired read, or * one or both reads are unmapped. */ public static PairOrientation getPairOrientation(final SAMRecord r) { final boolean readIsOnReverseStrand = r.getReadNegativeStrandFlag(); if(r.getReadUnmappedFlag() || !r.getReadPairedFlag() || r.getMateUnmappedFlag()) { throw new IllegalArgumentException("Invalid SAMRecord: " + r.getReadName() + ". This method only works for SAMRecords " + "that are paired reads with both reads aligned."); } if(readIsOnReverseStrand == r.getMateNegativeStrandFlag() ) { return PairOrientation.TANDEM; } final long positiveStrandFivePrimePos = ( readIsOnReverseStrand ? r.getMateAlignmentStart() //mate's 5' position ( x---> ) : r.getAlignmentStart() ); //read's 5' position ( x---> ) final long negativeStrandFivePrimePos = ( readIsOnReverseStrand ? r.getAlignmentEnd() //read's 5' position ( <---x ) : r.getAlignmentStart() + r.getInferredInsertSize() ); //mate's 5' position ( <---x ) return ( positiveStrandFivePrimePos < negativeStrandFivePrimePos ? PairOrientation.FR : PairOrientation.RF ); }
public MateKey getMateKey(SAMRecord read) { // If mate is mapped, use read flag. // If mate is not mapped, use opposite of this read's RC flag boolean isMateRevOrientation = read.getMateUnmappedFlag() ? !read.getReadNegativeStrandFlag() : read.getMateNegativeStrandFlag(); int matePos = read.getMateUnmappedFlag() ? -1 : read.getMateAlignmentStart(); int mateNum = read.getFirstOfPairFlag() ? 2 : 1; return new MateKey(read.getReadName(), matePos, read.getMateUnmappedFlag(), isMateRevOrientation, mateNum, read.getAlignmentStart()); }
/** * Computes the pair orientation of the given SAMRecord. * @param r * @return PairOrientation of the given SAMRecord. * @throws IllegalArgumentException If the record is not a paired read, or * one or both reads are unmapped. */ public static PairOrientation getPairOrientation(final SAMRecord r) { final boolean readIsOnReverseStrand = r.getReadNegativeStrandFlag(); if(r.getReadUnmappedFlag() || !r.getReadPairedFlag() || r.getMateUnmappedFlag()) { throw new IllegalArgumentException("Invalid SAMRecord: " + r.getReadName() + ". This method only works for SAMRecords " + "that are paired reads with both reads aligned."); } if(readIsOnReverseStrand == r.getMateNegativeStrandFlag() ) { return PairOrientation.TANDEM; } final long positiveStrandFivePrimePos = ( readIsOnReverseStrand ? r.getMateAlignmentStart() //mate's 5' position ( x---> ) : r.getAlignmentStart() ); //read's 5' position ( x---> ) final long negativeStrandFivePrimePos = ( readIsOnReverseStrand ? r.getAlignmentEnd() //read's 5' position ( <---x ) : r.getAlignmentStart() + r.getInferredInsertSize() ); //mate's 5' position ( <---x ) return ( positiveStrandFivePrimePos < negativeStrandFivePrimePos ? PairOrientation.FR : PairOrientation.RF ); }
public PairEndInfo(final SAMRecord record, final long recordNumber) { this.recordNumber = recordNumber; this.readAlignmentStart = record.getAlignmentStart(); this.readNegStrandFlag = record.getReadNegativeStrandFlag(); this.readReferenceIndex = record.getReferenceIndex(); this.readUnmappedFlag = record.getReadUnmappedFlag(); this.readCigarString = record.getCigarString(); this.mateAlignmentStart = record.getMateAlignmentStart(); this.mateNegStrandFlag = record.getMateNegativeStrandFlag(); this.mateReferenceIndex = record.getMateReferenceIndex(); this.mateUnmappedFlag = record.getMateUnmappedFlag(); final Object mcs = record.getAttribute(SAMTag.MC.name()); this.mateCigarString = (mcs != null) ? (String) mcs : null; this.firstOfPairFlag = record.getFirstOfPairFlag(); }
public PairEndInfo(final SAMRecord record, final long recordNumber) { this.recordNumber = recordNumber; this.readAlignmentStart = record.getAlignmentStart(); this.readNegStrandFlag = record.getReadNegativeStrandFlag(); this.readReferenceIndex = record.getReferenceIndex(); this.readUnmappedFlag = record.getReadUnmappedFlag(); this.readCigarString = record.getCigarString(); this.mateAlignmentStart = record.getMateAlignmentStart(); this.mateNegStrandFlag = record.getMateNegativeStrandFlag(); this.mateReferenceIndex = record.getMateReferenceIndex(); this.mateUnmappedFlag = record.getMateUnmappedFlag(); final Object mcs = record.getAttribute(SAMTag.MC.name()); this.mateCigarString = (mcs != null) ? (String) mcs : null; this.firstOfPairFlag = record.getFirstOfPairFlag(); }
public PairEndInfo(final SAMRecord record, final long recordNumber) { this.recordNumber = recordNumber; this.readAlignmentStart = record.getAlignmentStart(); this.readNegStrandFlag = record.getReadNegativeStrandFlag(); this.readReferenceIndex = record.getReferenceIndex(); this.readUnmappedFlag = record.getReadUnmappedFlag(); this.readCigarString = record.getCigarString(); this.mateAlignmentStart = record.getMateAlignmentStart(); this.mateNegStrandFlag = record.getMateNegativeStrandFlag(); this.mateReferenceIndex = record.getMateReferenceIndex(); this.mateUnmappedFlag = record.getMateUnmappedFlag(); final Object mcs = record.getAttribute(SAMTag.MC.name()); this.mateCigarString = (mcs != null) ? (String) mcs : null; this.firstOfPairFlag = record.getFirstOfPairFlag(); }
public static boolean isDovetailing(SAMRecord record, PairOrientation expectedOrientation, int margin) { if (record.getReadUnmappedFlag()) return false; if (!record.getReadPairedFlag()) return false; if (record.getMateUnmappedFlag()) return false; Cigar cigar2 = null; String mc = record.getStringAttribute(SAMTag.MC.name()); if (mc != null) { cigar2 = TextCigarCodec.decode(mc); } return isDovetailing(record.getReferenceIndex(), record.getAlignmentStart(), record.getReadNegativeStrandFlag(), record.getCigar(), record.getMateReferenceIndex(), record.getMateAlignmentStart(), record.getMateNegativeStrandFlag(), cigar2, expectedOrientation, margin); }