void GaussianEdgeCalculator::getPartnerLengthRange(const AlignmentRecord& ap, unsigned int *min, unsigned int *max) const { if ((unsigned)allowable_insert_size_diff > ap.getInsertLength()) { *min = 0; } else { *min = ap.getInsertLength() - allowable_insert_size_diff; } *max = ap.getInsertLength() + allowable_insert_size_diff; }
void AnyDistributionEdgeCalculator::getPartnerLengthRange(const AlignmentRecord& ap, unsigned int *min, unsigned int *max) const { if (allowable_insert_size_diff > (int)ap.getInsertLength()) { *min = 0; } else { *min = ap.getInsertLength() - allowable_insert_size_diff; } *max = ap.getInsertLength() + allowable_insert_size_diff; }
bool AnyDistributionEdgeCalculator::edgeBetween(const AlignmentRecord & ap1, const AlignmentRecord & ap2) const { double insert_length_diff = abs(((int)ap1.getInsertLength()) - ((int)ap2.getInsertLength())); // // double meanedge = 2.0 * sf( insert_length_diff / (sqrt2*insert_size_popstddev) ); if (insert_length_diff > allowable_insert_size_diff) { return false; } size_t intersection_length = ap1.intersectionLength(ap2); if (intersection_length == 0) return false; int insert_length_sum = ap1.getInsertLength() + ap2.getInsertLength() - 2*intersection_length; double intersection_pvalue = insertSizeSumRightTail(insert_length_sum); return intersection_pvalue >= significance_level; }
bool GaussianEdgeCalculator::edgeBetween(const AlignmentRecord & ap1, const AlignmentRecord & ap2, int numGCAllowedPos, int ct) const { if (ap1.isSingleEnd() || ap2.isSingleEnd()) { throw runtime_error("Cannot process single-end reads in GaussianEdgeCalculator!"); } double insert_length_diff = abs(((int)ap1.getInsertLength()) - ((int)ap2.getInsertLength())); // double meanedge = 2.0 * sf( insert_length_diff / (sqrt2*insert_size_popstddev) ); if (insert_length_diff > allowable_insert_size_diff) { return false; } size_t intersection_length = ap1.internalSegmentIntersectionLength(ap2); if (intersection_length == 0) return false; double mean_insert_length = (ap1.getInsertLength() + ap2.getInsertLength()) / 2.0; double interedge = min(1.0, 2.0 * sf(sqrt2*(mean_insert_length - intersection_length - insert_size_popmean) / insert_size_popstddev) ); return interedge >= significance_level; }