bool isMateInsertionEvidenceCandidate2( const bam_record& bamRead, const bool isSearchForLeftOpen, const bool isSearchForRightOpen) { if ((! isSearchForLeftOpen) && (! bamRead.is_fwd_strand())) return false; if ((! isSearchForRightOpen) && bamRead.is_fwd_strand()) return false; return true; }
/// get SV candidates from SA-tag split-read alignment static SVObservation GetSplitSACandidate( const ReadScannerDerivOptions& dopt, const bam_record& localRead, const SimpleAlignment& localAlign, const SimpleAlignment& remoteAlign, const FRAGSOURCE::index_t fragSource) { using namespace SVEvidenceType; static const index_t svSource(SPLIT_ALIGN); SVObservation sv; sv.evtype = svSource; sv.fragSource = fragSource; SVBreakend& localBreakend(sv.bp1); SVBreakend& remoteBreakend(sv.bp2); // use single-side evidence, have to read the supp read to get the // reverse edge. this protects against double-count: localBreakend.lowresEvidence.add(svSource); updateSABreakend(dopt, localAlign, localBreakend); updateSABreakend(dopt, remoteAlign, remoteBreakend); // If the local (bp1) alignment is split downstream (on the right side) then this read goes from bp1 -> bp2. // If it is a forward read (e.g. read1 on + strand), this means it's a forward read for this event. const bool isSplitDownstream(isSplitOpenDownstream(localAlign.path)); const bool isReadFw = (localRead.is_first() == localRead.is_fwd_strand()); if (dopt.isStranded) { if (isReadFw == isSplitDownstream) { sv.fwReads += 1; } else { sv.rvReads += 1; } } return sv; }