Example #1
0
        public int CompareTo(AlleleBlock other)
        {
            // first sort ascending by start point of the blocks
            int positionCompare = PositionIndex.CompareTo(other.PositionIndex);

            if (positionCompare != 0)
            {
                return(positionCompare);
            }

            // then sort descending by end point of the blocks
            int sizeCompare = AlleleIndexes.Length.CompareTo(other.AlleleIndexes.Length);

            if (sizeCompare != 0)
            {
                return(-sizeCompare);
            }

            // then sort ascending by start point of the blocks w/ trimmed ref position considered
            int numRefPosBeforeCompare = NumRefPositionsBefore.CompareTo(other.NumRefPositionsBefore);

            if (numRefPosBeforeCompare != 0)
            {
                return(numRefPosBeforeCompare);
            }

            // then sort descending by end point of the blocks w/ trimmed ref position considered
            int numRefPosAfterCompare = NumRefPositionsAfter.CompareTo(other.NumRefPositionsAfter);

            if (numRefPosAfterCompare != 0)
            {
                return(-numRefPosAfterCompare);
            }

            // then sort ascending by each allele index
            for (int i = 0; i < AlleleIndexes.Length; i++)
            {
                int alleleCompare = AlleleIndexes[i].CompareTo(other.AlleleIndexes[i]);
                if (alleleCompare != 0)
                {
                    return(alleleCompare);
                }
            }
            return(0);
        }