예제 #1
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_basic(self):
     ibd_segs = find_ibd(self.ts, sample_pairs=[(0, 1)])
     true_segs = {
         (0, 1): [ibd.Segment(0.0, 0.4, 2),
                  ibd.Segment(0.4, 1.0, 3)]
     }
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #2
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_defaults(self):
     ibd_segs = find_ibd(self.ts, sample_pairs=[(1, 2)])
     true_segs = {
         (1, 2): [ibd.Segment(0.0, 0.2, 4),
                  ibd.Segment(0.2, 1.0, 4)],
     }
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #3
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_input_sample_pairs(self):
     ibd_segs = find_ibd(self.ts, sample_pairs=[(0, 1), (0, 3)])
     true_segs = {
         (0, 1): [ibd.Segment(0.0, 1.0, 4)],
         (0, 3): [ibd.Segment(0.3, 1.0, 4),
                  ibd.Segment(0.0, 0.3, 5)],
     }
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #4
0
파일: test_ibd.py 프로젝트: pythseq/tskit
 def test_basic(self):
     ibd_f = ibd.IbdFinder(self.ts)
     ibd_segs = ibd_f.find_ibd_segments()
     ibd_segs = convert_dict_of_segmentlists(ibd_segs)
     true_segs = {
         (0, 1): [ibd.Segment(0.0, 0.4, 2),
                  ibd.Segment(0.4, 1.0, 3)]
     }
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #5
0
파일: test_ibd.py 프로젝트: pythseq/tskit
 def test_defaults(self):
     ibd_f = ibd.IbdFinder(self.ts)
     ibd_segs = ibd_f.find_ibd_segments()
     ibd_segs = convert_dict_of_segmentlists(ibd_segs)
     true_segs = {
         (0, 1): [ibd.Segment(0.0, 1.0, 3)],
         (0, 2): [ibd.Segment(0.0, 1.0, 4)],
         (1, 2): [ibd.Segment(0.0, 1.0, 4)],
     }
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #6
0
파일: test_ibd.py 프로젝트: pythseq/tskit
 def test_defaults(self):
     ts = self.ts
     ibd_f = ibd.IbdFinder(ts)
     ibd_segs = ibd_f.find_ibd_segments()
     true_segs = {
         (0, 1): [
             ibd.Segment(0.0, 0.2, 4),
             ibd.Segment(0.7, 1.0, 4),
             ibd.Segment(0.2, 0.7, 4),
         ]
     }
     ibd_segs = convert_dict_of_segmentlists(ibd_segs)
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #7
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
    def test_basic(self):
        ibd_segs = find_ibd(self.ts,
                            sample_pairs=[(0, 1), (0, 2), (0, 3), (1, 2),
                                          (1, 3), (2, 3)])
        true_segs = {
            (0, 1): [],
            (0, 2): [ibd.Segment(0.0, 1.0, 2)],
            (0, 3): [],
            (1, 2): [],
            (1, 3): [ibd.Segment(0.0, 1.0, 3)],
            (2, 3): [],
        }

        assert ibd_is_equal(ibd_segs, true_segs)
예제 #8
0
파일: test_ibd.py 프로젝트: pythseq/tskit
 def test_time(self):
     ts = self.ts
     ibd_f = ibd.IbdFinder(ts, max_time=3)
     ibd_segs = ibd_f.find_ibd_segments()
     true_segs = {
         (0, 1): [ibd.Segment(0, 1, 4)],
         (0, 2): [ibd.Segment(0, 0.3, 4)],
         (0, 3): [ibd.Segment(0.3, 1, 4)],
         (1, 2): [ibd.Segment(0, 0.3, 4)],
         (1, 3): [ibd.Segment(0.3, 1, 4)],
         (2, 3): [],
     }
     ibd_segs = convert_dict_of_segmentlists(ibd_segs)
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #9
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_time(self):
     ibd_segs = find_ibd(
         self.ts,
         sample_pairs=[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)],
         max_time=3,
     )
     true_segs = {
         (0, 1): [ibd.Segment(0, 1, 4)],
         (0, 2): [ibd.Segment(0, 0.3, 4)],
         (0, 3): [ibd.Segment(0.3, 1, 4)],
         (1, 2): [ibd.Segment(0, 0.3, 4)],
         (1, 3): [ibd.Segment(0.3, 1, 4)],
         (2, 3): [],
     }
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #10
0
파일: test_ibd.py 프로젝트: pythseq/tskit
 def test_length(self):
     ts = self.ts
     ibd_f = ibd.IbdFinder(ts, min_length=0.4)
     ibd_segs = ibd_f.find_ibd_segments()
     true_segs = {(0, 1): [ibd.Segment(0.2, 0.7, 4)]}
     ibd_segs = convert_dict_of_segmentlists(ibd_segs)
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #11
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_time(self):
     ibd_segs = find_ibd(self.ts,
                         sample_pairs=[(0, 1)],
                         max_time=1.2,
                         compare_lib=True)
     true_segs = {(0, 1): [ibd.Segment(0.0, 0.4, 2)]}
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #12
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_length(self):
     ibd_segs = find_ibd(self.ts,
                         sample_pairs=[(0, 1)],
                         min_length=0.5,
                         compare_lib=True)
     true_segs = {(0, 1): [ibd.Segment(0.4, 1.0, 3)]}
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #13
0
파일: test_ibd.py 프로젝트: pythseq/tskit
 def test_time(self):
     ibd_f = ibd.IbdFinder(self.ts, max_time=1.5)
     ibd_segs = ibd_f.find_ibd_segments()
     ibd_segs = convert_dict_of_segmentlists(ibd_segs)
     true_segs = {
         (0, 1): [ibd.Segment(0.0, 1.0, 3)],
         (0, 2): [],
         (1, 2): []
     }
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #14
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_input_sample_pairs(self):
     ibd_f = ibd.IbdFinder(self.ts, sample_pairs=[(0, 1), (2, 3), (1, 3)])
     ibd_segs = ibd_f.find_ibd_segments()
     ibd_segs = convert_ibd_output_to_seglists(ibd_segs)
     true_segs = {
         (0, 1): [
             ibd.Segment(0.0, 0.2, 4),
             ibd.Segment(0.7, 1.0, 4),
             ibd.Segment(0.2, 0.7, 4),
         ],
         (2, 3): [ibd.Segment(0.2, 0.7, 4)],
     }
     ibd_segs = find_ibd(
         self.ts,
         sample_pairs=[(0, 1), (2, 3)],
         compare_lib=True,
         print_c=False,
         print_py=False,
     )
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #15
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_time(self):
     ibd_segs = find_ibd(
         self.ts,
         sample_pairs=[(0, 1), (0, 2), (1, 2)],
         max_time=1.5,
         compare_lib=True,
     )
     true_segs = {
         (0, 1): [ibd.Segment(0.0, 1.0, 3)],
         (0, 2): [],
         (1, 2): []
     }
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #16
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
def convert_ibd_output_to_seglists(ibd_out):
    """
    Converts the Python mock-up output back into lists of segments.
    This is needed to use the ibd_is_equal function.
    """

    for key in ibd_out.keys():
        seg_list = []
        num_segs = len(ibd_out[key]["left"])
        for s in range(num_segs):
            seg_list.append(
                ibd.Segment(
                    left=ibd_out[key]["left"][s],
                    right=ibd_out[key]["right"][s],
                    node=ibd_out[key]["node"][s],
                ))
        ibd_out[key] = seg_list

    return ibd_out
예제 #17
0
파일: test_ibd.py 프로젝트: pythseq/tskit
 def test_length(self):
     ts = self.ts
     ibd_f = ibd.IbdFinder(ts, min_length=0.5)
     ibd_segs = ibd_f.find_ibd_segments()
     true_segs = {
         (0, 1): [ibd.Segment(0, 1, 4)],
         (0, 2): [ibd.Segment(0.3, 1, 5)],
         (0, 3): [ibd.Segment(0.3, 1, 4)],
         (1, 2): [ibd.Segment(0.3, 1, 5)],
         (1, 3): [ibd.Segment(0.3, 1, 4)],
         (2, 3): [ibd.Segment(0.3, 1, 5)],
     }
     ibd_segs = convert_dict_of_segmentlists(ibd_segs)
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #18
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_length(self):
     ibd_segs = find_ibd(
         self.ts,
         sample_pairs=[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)],
         min_length=0.5,
     )
     true_segs = {
         (0, 1): [ibd.Segment(0, 1, 4)],
         (0, 2): [ibd.Segment(0.3, 1, 5)],
         (0, 3): [ibd.Segment(0.3, 1, 4)],
         (1, 2): [ibd.Segment(0.3, 1, 5)],
         (1, 3): [ibd.Segment(0.3, 1, 4)],
         (2, 3): [ibd.Segment(0.3, 1, 5)],
     }
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #19
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_defaults(self):
     ibd_segs = find_ibd(self.ts, sample_pairs=[(0, 2)])
     true_segs = {
         (0, 2): [ibd.Segment(0, 1, 3)],
     }
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #20
0
파일: test_ibd.py 프로젝트: pythseq/tskit
 def test_length(self):
     ibd_f = ibd.IbdFinder(self.ts, min_length=0.5)
     ibd_segs = ibd_f.find_ibd_segments()
     ibd_segs = convert_dict_of_segmentlists(ibd_segs)
     true_segs = {(0, 1): [ibd.Segment(0.4, 1.0, 3)]}
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #21
0
파일: test_ibd.py 프로젝트: pythseq/tskit
 def test_defaults(self):
     ts = self.ts
     ibd_f = ibd.IbdFinder(ts)
     ibd_segs = ibd_f.find_ibd_segments()
     # print(ibd_segs[(0,1)])
     true_segs = {
         (0, 1): [ibd.Segment(0, 1, 4)],
         (0, 2): [ibd.Segment(0, 0.3, 4),
                  ibd.Segment(0.3, 1, 5)],
         (0, 3): [ibd.Segment(0, 0.3, 5),
                  ibd.Segment(0.3, 1, 4)],
         (1, 2): [ibd.Segment(0, 0.3, 4),
                  ibd.Segment(0.3, 1, 5)],
         (1, 3): [ibd.Segment(0, 0.3, 5),
                  ibd.Segment(0.3, 1, 4)],
         (2, 3): [ibd.Segment(0.3, 1, 5),
                  ibd.Segment(0, 0.3, 5)],
     }
     ibd_segs = convert_dict_of_segmentlists(ibd_segs)
     # print(ibd_segs)
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #22
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_defaults(self):
     ibd_segs = find_ibd(self.ts,
                         sample_pairs=[(0, 1), (0, 2), (0, 3), (1, 2),
                                       (1, 3), (2, 3)])
     true_segs = {
         (0, 1): [ibd.Segment(0, 1, 4)],
         (0, 2): [ibd.Segment(0, 0.3, 4),
                  ibd.Segment(0.3, 1, 5)],
         (0, 3): [ibd.Segment(0, 0.3, 5),
                  ibd.Segment(0.3, 1, 4)],
         (1, 2): [ibd.Segment(0, 0.3, 4),
                  ibd.Segment(0.3, 1, 5)],
         (1, 3): [ibd.Segment(0, 0.3, 5),
                  ibd.Segment(0.3, 1, 4)],
         (2, 3): [ibd.Segment(0.3, 1, 5),
                  ibd.Segment(0, 0.3, 5)],
     }
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #23
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
 def test_length(self):
     ibd_segs = find_ibd(self.ts, sample_pairs=[(0, 1)], min_length=0.4)
     true_segs = {(0, 1): [ibd.Segment(0.2, 0.7, 4)]}
     assert ibd_is_equal(ibd_segs, true_segs)
예제 #24
0
파일: test_ibd.py 프로젝트: MIzzo-IDM/tskit
def get_ibd(
    sample0,
    sample1,
    treeSequence,
    min_length=0,
    max_time=None,
    path_ibd=True,
    mrca_ibd=True,
):
    """
    Returns all IBD segments for a given pair of nodes in a tree
    using a naive algorithm.
    Note: This function probably looks more complicated than it needs to be --
    This is because it also calculates other 'versions' of IBD (mrca_ibd=False,
    path_ibd=False) that we have't implemented properly yet.
    """

    ibd_list = []
    ts, node_map = treeSequence.simplify(samples=[sample0, sample1],
                                         keep_unary=True,
                                         map_nodes=True)
    node_map = node_map.tolist()

    for n in ts.nodes():

        if max_time is not None and n.time > max_time:
            break

        node_id = n.id
        interval_list = []
        if n.flags == 1:
            continue

        prev_dict = None
        for t in ts.trees():

            if len(list(t.nodes(n.id))) == 1 or t.num_samples(n.id) < 2:
                continue
            if mrca_ibd and n.id != t.mrca(0, 1):
                continue

            current_int = t.get_interval()
            if len(interval_list) == 0:
                interval_list.append(current_int)
            else:
                prev_int = interval_list[-1]
                if not path_ibd and prev_int[1] == current_int[0]:
                    interval_list[-1] = (prev_int[0], current_int[1])
                elif prev_dict is not None and subtrees_are_equal(
                        t, prev_dict, node_id):
                    interval_list[-1] = (prev_int[0], current_int[1])
                else:
                    interval_list.append(current_int)

            prev_dict = t.get_parent_dict()

        for interval in interval_list:
            if min_length == 0 or interval.right - interval.left > min_length:
                orig_id = node_map.index(node_id)
                ibd_list.append(ibd.Segment(interval[0], interval[1], orig_id))

    return ibd_list