Пример #1
0
 /// <summary>
 /// Возвращает статус возможности слияния.
 /// </summary>
 /// <returns>0 - можно сливать, 1 - a идёт до b, -1 - a идёт после b</returns>
 public static int GetMergeStatus(MergedNarrowPeak a, MergedNarrowPeak b)
 {
     if (a.Chr != b.Chr)
         return (int)b.Chr - (int)a.Chr > 0 ? 1 : -1;
     if (a.StartPos >= b.EndPos)
         return -1;
     if (b.StartPos >= a.EndPos)
         return 1;
     if (a.StartPos >= b.StartPos && a.EndPos <= b.EndPos)
         return 0;
     if (b.StartPos >= a.StartPos && b.EndPos <= a.EndPos)
         return 0;
     if (Math.Min(Math.Abs(a.StartPos - b.StartPos), Math.Abs(b.EndPos - a.EndPos)) < Math.Min(a.Size, b.Size)/5)
         return 0;
     return b.StartPos > a.StartPos ? 1 : -1;
 }
Пример #2
0
 public static MergedNarrowPeak Merge(MergedNarrowPeak a, MergedNarrowPeak b)
 {
     Debug.Assert(a.Chr == b.Chr);
     var start = (int)Math.Round((a.StartPos * (long)a.Count + b.StartPos * (long)b.Count) / (double)(a.Count + b.Count));
     var end = (int)Math.Round((a.EndPos * (long)a.Count + b.EndPos * (long)b.Count) / (double)(a.Count + b.Count));
     var minStart = Math.Min(a.StartPosMin, b.StartPosMin);
     var maxStart = Math.Max(a.StartPosMax, b.StartPosMax);
     var minEnd = Math.Min(a.EndPosMin, b.EndPosMin);
     var maxEnd = Math.Max(a.EndPosMax, b.EndPosMax);
     return new MergedNarrowPeak(a.Chr, start, end, a.Values1.ConcatArray(b.Values1), a.Values2.ConcatArray(b.Values2),
                                 minStart, maxStart, minEnd, maxEnd, a.CellIds.ConcatArray(b.CellIds));
 }
Пример #3
0
 public Region(MergedNarrowPeak peak)
 {
     Chr = peak.Chr;
     Start = peak.StartPosMin;
     Size = peak.EndPosMax - Start;
 }