public bool Subset(NullableInterval <T> other) { return ((!this.min.HasValue || (other.min.HasValue && this.min.Value.CompareTo(other.min.Value) <= 0)) && (!this.max.HasValue || (other.max.HasValue && other.max.Value.CompareTo(this.max.Value) <= 0))); }
public NullableInterval <T> Union(NullableInterval <T> other) { T?minVal = !min.HasValue || !other.min.HasValue ? (T?)null : min.Value.CompareTo(other.min.Value) > 0 ? other.min.Value : min.Value; T?maxVal = !max.HasValue || !other.max.HasValue ? (T?)null : max.Value.CompareTo(other.max.Value) < 0 ? other.max.Value : max.Value; return(new NullableInterval <T>(minVal, maxVal)); }
public bool Overlaps(NullableInterval <T> other) { return(!( (max.HasValue && other.min.HasValue && max.Value.CompareTo(other.min.Value) <= 0) || (other.max.HasValue && min.HasValue && other.max.Value.CompareTo(min.Value) <= 0) )); }
private static void AssignExtended(string transcriptReferenceAllele, string transcriptAlternateAllele, NullableInterval cdsInterval, NullableInterval proteinInterval, ISequence codingSequence, out string refCodons, out string altCodons) { refCodons = null; altCodons = null; if (cdsInterval.Start == null || cdsInterval.End == null || proteinInterval.Start == null || proteinInterval.End == null) { return; } int aminoAcidStart = proteinInterval.Start.Value * 3 - 2; int aminoAcidEnd = proteinInterval.End.Value * 3; int prefixLen = cdsInterval.Start.Value - aminoAcidStart; int suffixLen = aminoAcidEnd - cdsInterval.End.Value; int start1 = aminoAcidStart - 1; int start2 = aminoAcidEnd - suffixLen; int maxSuffixLen = codingSequence.Length - start2; var atTailEnd = false; if (suffixLen > maxSuffixLen) { suffixLen = maxSuffixLen; atTailEnd = true; } if (suffixLen > maxSuffixLen) { suffixLen = maxSuffixLen; } string prefix = start1 + prefixLen < codingSequence.Length ? codingSequence.Substring(start1, prefixLen).ToLower() : "AAA"; string suffix = suffixLen > 0 ? codingSequence.Substring(start2, suffixLen).ToLower() : ""; var needExtend = !atTailEnd && !Codons.IsTriplet(prefixLen + suffixLen + transcriptAlternateAllele.Length); var extendedLen = (maxSuffixLen - suffixLen) > 45 ? 45 : (maxSuffixLen - suffixLen) / 3 * 3; if (needExtend) { suffix = codingSequence.Substring(start2, suffixLen + extendedLen); } refCodons = Codons.GetCodon(transcriptReferenceAllele, prefix, suffix); altCodons = Codons.GetCodon(transcriptAlternateAllele, prefix, suffix); }
public NullableInterval <T>?Intersection(NullableInterval <T> other) { T?minVal = min.HasValue && other.min.HasValue ? (min.Value.CompareTo(other.min.Value) > 0 ? min.Value : other.min.Value) : min ?? other.min; T?maxVal = max.HasValue && other.max.HasValue ? (max.Value.CompareTo(other.max.Value) < 0 ? max.Value : other.max.Value) : max ?? other.max; if (minVal.HasValue && maxVal.HasValue && minVal.Value.CompareTo(maxVal.Value) >= 0) { return(null); } return(new NullableInterval <T>(minVal, maxVal)); }
public int CompareTo(NullableInterval <T> other) { if (min == null && other.min == null) { return(0); } var temp = min.HasValue.CompareTo(other.min.HasValue); if (temp != 0) { return(temp); } #pragma warning disable CS8629 // Nullable value type may be null. CSBUG return(min.Value.CompareTo(other.min.Value)); #pragma warning restore CS8629 // Nullable value type may be null. }
private static string GetNullablePositionRange(NullableInterval interval) { if (interval.Start == null && interval.End == null) { return(null); } if (interval.Start == null) { return("?-" + interval.End.Value); } if (interval.End == null) { return(interval.Start.Value + "-?"); } var start = interval.Start.Value; var end = interval.End.Value; if (start > end) { Swap.Int(ref start, ref end); } return(start == end?start.ToString(CultureInfo.InvariantCulture) : start + "-" + end); }
public bool Equals(NullableInterval <T> other) { return(other.min.Equals(min) && other.max.Equals(max)); }