1#!/usr/bin/env python
2# Time-stamp: <2019-08-09 14:19:31 taoliu>
3
4import unittest
5
6from MACS2.IO.PairedEndTrack import *
7
8class Test_PETrackI(unittest.TestCase):
9
10    def setUp(self):
11
12        self.input_regions = [(b"chrY",0,100 ),
13                              (b"chrY",70,270 ),
14                              (b"chrY",70,100 ),
15                              (b"chrY",80,160 ),
16                              (b"chrY",80,160 ),
17                              (b"chrY",80,180 ),
18                              (b"chrY",80,180 ),
19                              (b"chrY",85,185 ),
20                              (b"chrY",85,285 ),
21                              (b"chrY",85,285 ),
22                              (b"chrY",85,285 ),
23                              (b"chrY",85,385 ),
24                              (b"chrY",90,190 ),
25                              (b"chrY",90,190 ),
26                              (b"chrY",90,191 ),
27                              (b"chrY",150,190 ),
28                              (b"chrY",150,250 ),
29                              ]
30        self.t = sum([ x[2]-x[1] for x in self.input_regions ])
31
32    def test_add_loc(self):
33        pe = PETrackI()
34        for ( c, l, r ) in self.input_regions:
35            pe.add_loc(c, l, r)
36        pe.finalize()
37        # roughly check the numbers...
38        self.assertEqual( pe.total, 17 )
39        self.assertEqual( pe.length, self.t )
40
41    def test_filter_dup(self):
42        pe = PETrackI()
43        for ( c, l, r ) in self.input_regions:
44            pe.add_loc(c, l, r)
45        pe.finalize()
46        # roughly check the numbers...
47        self.assertEqual( pe.total, 17 )
48        self.assertEqual( pe.length, self.t )
49
50        # filter out more than 3 tags
51        pe.filter_dup( 3 )
52        self.assertEqual( pe.total, 17 )
53
54        # filter out more than 2 tags
55        pe.filter_dup( 2 )
56        self.assertEqual( pe.total, 16 )
57
58        # filter out more than 1 tag
59        pe.filter_dup( 1 )
60        self.assertEqual( pe.total, 12 )
61
62
63    def test_sample_num(self):
64        pe = PETrackI()
65        for ( c, l, r ) in self.input_regions:
66            pe.add_loc(c, l, r)
67        pe.finalize()
68        pe.sample_num( 10 )
69        self.assertEqual( pe.total, 10 )
70
71    def test_sample_percent(self):
72        pe = PETrackI()
73        for ( c, l, r ) in self.input_regions:
74            pe.add_loc(c, l, r)
75        pe.finalize()
76        pe.sample_percent( 0.5 )
77        self.assertEqual( pe.total, 8 )
78
79