Ejemplo n.º 1
0
 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)));
 }
Ejemplo n.º 2
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));
    }
Ejemplo n.º 3
0
 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)
                ));
 }
Ejemplo n.º 4
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);
        }
Ejemplo n.º 5
0
    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));
    }
Ejemplo n.º 6
0
    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.
    }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
 public bool Equals(NullableInterval <T> other)
 {
     return(other.min.Equals(min) && other.max.Equals(max));
 }