示例#1
0
    def test_add_matrix_transform_logicle_rect1_gate():
        gs = fk.GatingStrategy()

        gs.add_comp_matrix(comp_matrix_01)

        gs.add_transform(logicle_xform1)

        dim1 = fk.Dimension('PE',
                            'MySpill',
                            'Logicle_10000_0.5_4.5_0',
                            range_min=0.31,
                            range_max=0.69)
        dim2 = fk.Dimension('PerCP',
                            'MySpill',
                            'Logicle_10000_0.5_4.5_0',
                            range_min=0.27,
                            range_max=0.73)
        dims = [dim1, dim2]

        rect_gate = fk.gates.RectangleGate('ScaleRect1', None, dims)
        gs.add_gate(rect_gate)

        res_path = 'examples/data/gate_ref/truth/Results_ScaleRect1.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth,
                                      result.get_gate_membership('ScaleRect1'))
示例#2
0
    def test_gating_strategy_repr(self):
        gs = fk.GatingStrategy()

        gs.add_comp_matrix(prog_test_data.comp_matrix_01)

        gs.add_transform(prog_test_data.logicle_xform1)
        gs.add_transform(prog_test_data.hyperlog_xform1)

        gs.add_gate(prog_test_data.poly1_gate)

        dim1 = fk.Dimension('PE', 'MySpill', 'Logicle_10000_0.5_4.5_0', range_min=0.31, range_max=0.69)
        dim2 = fk.Dimension('PerCP', 'MySpill', 'Logicle_10000_0.5_4.5_0', range_min=0.27, range_max=0.73)
        dims1 = [dim1, dim2]

        rect_gate1 = fk.gates.RectangleGate('ScaleRect1', None, dims1)
        gs.add_gate(rect_gate1)

        dim3 = fk.Dimension('FITC', 'MySpill', 'Hyperlog_10000_1_4.5_0', range_min=0.12, range_max=0.43)
        dims2 = [dim3]

        rect_gate2 = fk.gates.RectangleGate('ScalePar1', 'ScaleRect1', dims2)
        gs.add_gate(rect_gate2)

        gs_string = "GatingStrategy(3 gates, 2 transforms, 1 compensations)"

        self.assertEqual(repr(gs), gs_string)
示例#3
0
    def test_add_transform_log_range6_gate():
        gs = fk.GatingStrategy()

        xform = fk.transforms.LogTransform('Logarithmic_10000_5',
                                           param_t=10000,
                                           param_m=5)
        gs.add_transform(xform)

        dim1 = fk.Dimension('FL1-H',
                            'uncompensated',
                            'Logarithmic_10000_5',
                            range_min=0.37,
                            range_max=0.63)
        dims = [dim1]

        rect_gate = fk.gates.RectangleGate('ScaleRange6', None, dims)
        gs.add_gate(rect_gate)

        res_path = 'examples/data/gate_ref/truth/Results_ScaleRange6.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(
            truth, result.get_gate_membership('ScaleRange6'))
示例#4
0
    def test_add_parent_quadrant_rect_gate():
        gs = fk.GatingStrategy()
        gs.add_gate(quad1_gate)

        dim1 = fk.Dimension('FL2-H',
                            'uncompensated',
                            None,
                            range_min=6,
                            range_max=14.4)
        dim2 = fk.Dimension('FL4-H',
                            'uncompensated',
                            None,
                            range_min=7,
                            range_max=16)
        dims1 = [dim1, dim2]

        rect_gate1 = fk.gates.RectangleGate('ParRectangle1', 'FL2P-FL4P',
                                            dims1)
        gs.add_gate(rect_gate1)

        res_path = 'examples/data/gate_ref/truth/Results_ParQuadRect.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(
            truth, result.get_gate_membership('ParRectangle1'))
示例#5
0
    def test_add_matrix_rect5_gate():
        gs = fk.GatingStrategy()

        gs.add_comp_matrix(comp_matrix_01)

        dim1 = fk.Dimension('PerCP',
                            compensation_ref='MySpill',
                            range_min=7,
                            range_max=90)
        dim2 = fk.Dimension('FSC-H',
                            compensation_ref='uncompensated',
                            range_min=10)
        dims = [dim1, dim2]

        rect_gate = fk.gates.RectangleGate('Rectangle5', None, dims)
        gs.add_gate(rect_gate)

        res_path = 'examples/data/gate_ref/truth/Results_Rectangle5.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth,
                                      result.get_gate_membership('Rectangle5'))
示例#6
0
    def test_add_boolean_and3_complement_gate():
        gs = fk.GatingStrategy()

        gs.add_gate(range1_gate)
        gs.add_gate(poly1_gate)
        gs.add_gate(ellipse1_gate)

        gate_refs = [{
            'ref': 'Range1',
            'path': ('root', ),
            'complement': False
        }, {
            'ref': 'Ellipse1',
            'path': ('root', ),
            'complement': True
        }, {
            'ref': 'Polygon1',
            'path': ('root', ),
            'complement': False
        }]

        bool_gate = fk.gates.BooleanGate('And3', None, 'and', gate_refs)
        gs.add_gate(bool_gate)

        res_path = 'examples/data/gate_ref/truth/Results_And3.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth,
                                      result.get_gate_membership('And3'))
示例#7
0
    def test_add_matrix_transform_hyperlog_range7c_gate():
        gs = fk.GatingStrategy()

        gs.add_comp_matrix(comp_matrix_01)

        gs.add_transform(hyperlog_xform1)

        dim1 = fk.Dimension('PE',
                            'MySpill',
                            'Hyperlog_10000_1_4.5_0',
                            range_min=0.09,
                            range_max=0.36)
        dims = [dim1]

        rect_gate = fk.gates.RectangleGate('ScaleRange7c', None, dims)
        gs.add_gate(rect_gate)

        res_path = 'examples/data/gate_ref/truth/Results_ScaleRange7c.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(
            truth, result.get_gate_membership('ScaleRange7c'))
示例#8
0
    def test_add_ratio_range2_gate():
        gs = fk.GatingStrategy()

        rat_xform = fk.transforms.RatioTransform('FL2Rat2', ['FL2-H', 'FL2-A'],
                                                 param_a=2.7,
                                                 param_b=-100,
                                                 param_c=-300)
        gs.add_transform(rat_xform)

        dim_rat2 = fk.RatioDimension('FL2Rat2',
                                     compensation_ref='uncompensated',
                                     range_min=0.95,
                                     range_max=1.05)
        dims = [dim_rat2]

        rect_gate = fk.gates.RectangleGate('RatRange2', None, dims)
        gs.add_gate(rect_gate)

        res_path = 'examples/data/gate_ref/truth/Results_RatRange2.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth,
                                      result.get_gate_membership('RatRange2'))
示例#9
0
    def test_add_log_ratio_range1_gate():
        gs = fk.GatingStrategy()

        rat_xform = fk.transforms.RatioTransform('FL2Rat1', ['FL2-H', 'FL2-A'],
                                                 param_a=1,
                                                 param_b=0,
                                                 param_c=-1)
        gs.add_transform(rat_xform)

        log_rat_xform = fk.transforms.LogTransform('MyRatLog',
                                                   param_t=100,
                                                   param_m=2)
        gs.add_transform(log_rat_xform)

        dim_rat1 = fk.RatioDimension('FL2Rat1',
                                     compensation_ref='uncompensated',
                                     transformation_ref='MyRatLog',
                                     range_min=0.40625,
                                     range_max=0.6601562)
        dims = [dim_rat1]

        rect_gate = fk.gates.RectangleGate('RatRange1a', None, dims)
        gs.add_gate(rect_gate)

        res_path = 'examples/data/gate_ref/truth/Results_RatRange1a.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth,
                                      result.get_gate_membership('RatRange1a'))
示例#10
0
    def test_cache_preprocessed_events(self):
        gs = fk.GatingStrategy()

        gs.add_comp_matrix(comp_matrix_01)

        gs.add_transform(logicle_xform1)
        gs.add_transform(hyperlog_xform1)

        gs.add_gate(poly1_gate)

        dim1 = fk.Dimension('PE', 'MySpill', 'Logicle_10000_0.5_4.5_0', range_min=0.31, range_max=0.69)
        dim2 = fk.Dimension('PerCP', 'MySpill', 'Logicle_10000_0.5_4.5_0', range_min=0.27, range_max=0.73)
        dims1 = [dim1, dim2]

        rect_gate1 = fk.gates.RectangleGate('ScaleRect1', None, dims1)
        gs.add_gate(rect_gate1)

        dim3 = fk.Dimension('FITC', 'MySpill', 'Hyperlog_10000_1_4.5_0', range_min=0.12, range_max=0.43)
        dims2 = [dim3]

        rect_gate2 = fk.gates.RectangleGate('ScalePar1', 'ScaleRect1', dims2)
        gs.add_gate(rect_gate2)

        _ = gs.gate_sample(data1_sample, cache_events=True)

        pre_proc_events = gs._cached_preprocessed_events

        truth_key_set = {
            ('MySpill', None, None),
            ('MySpill', 'Logicle_10000_0.5_4.5_0', 3),
            ('MySpill', 'Logicle_10000_0.5_4.5_0', 4),
            ('MySpill', 'Hyperlog_10000_1_4.5_0', 2)
        }

        self.assertSetEqual(set(pre_proc_events['B07'].keys()), truth_key_set)
示例#11
0
    def test_add_poly3_non_solid_gate():
        gs = fk.GatingStrategy()

        dim1 = fk.Dimension('SSC-H', compensation_ref='uncompensated')
        dim2 = fk.Dimension('FL3-H', compensation_ref='FCS')
        dims = [dim1, dim2]

        vertices = [
            fk.Vertex([10, 10]),
            fk.Vertex([500, 10]),
            fk.Vertex([500, 390]),
            fk.Vertex([100, 390]),
            fk.Vertex([100, 180]),
            fk.Vertex([200, 180]),
            fk.Vertex([200, 300]),
            fk.Vertex([10, 300])
        ]

        poly_gate = fk.gates.PolygonGate('Polygon3NS', None, dims, vertices)
        gs.add_gate(poly_gate)

        res_path = 'examples/data/gate_ref/truth/Results_Polygon3NS.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth,
                                      result.get_gate_membership('Polygon3NS'))
示例#12
0
    def test_get_parent_gate_is_none(self):
        gs = fk.GatingStrategy()
        gs.add_gate(poly1_gate)

        parent_gate = gs.get_parent_gate('Polygon1')

        self.assertIsNone(parent_gate)
示例#13
0
    def test_add_quadrant_gate_relative_percent(self):
        gs = fk.GatingStrategy()

        gs.add_gate(quad1_gate)

        result = gs.gate_sample(data1_sample)

        total_percent = result.get_gate_relative_percent('FL2N-FL4N') + \
            result.get_gate_relative_percent('FL2N-FL4P') + \
            result.get_gate_relative_percent('FL2P-FL4N') + \
            result.get_gate_relative_percent('FL2P-FL4P')

        self.assertEqual(100.0, total_percent)
示例#14
0
    def test_add_ellipse1_gate():
        gs = fk.GatingStrategy()

        gs.add_gate(ellipse1_gate)

        res_path = 'examples/data/gate_ref/truth/Results_Ellipse1.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth,
                                      result.get_gate_membership('Ellipse1'))
示例#15
0
    def test_add_time_range_gate():
        res_path = 'examples/data/gate_ref/truth/Results_Range2.txt'

        gs = fk.GatingStrategy()

        gs.add_gate(range2_gate)

        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth,
                                      result.get_gate_membership('Range2'))
示例#16
0
    def test_add_matrix_poly4_gate():
        gs = fk.GatingStrategy()

        gs.add_comp_matrix(comp_matrix_01)

        dim1 = fk.Dimension('PE', compensation_ref='MySpill')
        dim2 = fk.Dimension('PerCP', compensation_ref='MySpill')
        dims = [dim1, dim2]

        poly_gate = fk.gates.PolygonGate('Polygon4', None, dims,
                                         poly1_vertices)
        gs.add_gate(poly_gate)

        res_path = 'examples/data/gate_ref/truth/Results_Polygon4.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth,
                                      result.get_gate_membership('Polygon4'))
示例#17
0
    def test_add_transform_logicle_range5_gate():
        gs = fk.GatingStrategy()

        gs.add_transform(logicle_xform3)

        dim1 = fk.Dimension('FL1-H',
                            'uncompensated',
                            'Logicle_10000_1_4_0.5',
                            range_min=0.37,
                            range_max=0.63)
        dims = [dim1]

        rect_gate = fk.gates.RectangleGate('ScaleRange5', None, dims)
        gs.add_gate(rect_gate)

        res_path = 'examples/data/gate_ref/truth/Results_ScaleRange5.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(
            truth, result.get_gate_membership('ScaleRange5'))
示例#18
0
    def test_add_quadrant1_gate():
        res1_path = 'examples/data/gate_ref/truth/Results_FL2N-FL4N.txt'
        res2_path = 'examples/data/gate_ref/truth/Results_FL2N-FL4P.txt'
        res3_path = 'examples/data/gate_ref/truth/Results_FL2P-FL4N.txt'
        res4_path = 'examples/data/gate_ref/truth/Results_FL2P-FL4P.txt'

        gs = fk.GatingStrategy()

        gs.add_gate(quad1_gate)

        truth1 = pd.read_csv(res1_path,
                             header=None,
                             squeeze=True,
                             dtype='bool').values
        truth2 = pd.read_csv(res2_path,
                             header=None,
                             squeeze=True,
                             dtype='bool').values
        truth3 = pd.read_csv(res3_path,
                             header=None,
                             squeeze=True,
                             dtype='bool').values
        truth4 = pd.read_csv(res4_path,
                             header=None,
                             squeeze=True,
                             dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth1,
                                      result.get_gate_membership('FL2N-FL4N'))
        np.testing.assert_array_equal(truth2,
                                      result.get_gate_membership('FL2N-FL4P'))
        np.testing.assert_array_equal(truth3,
                                      result.get_gate_membership('FL2P-FL4N'))
        np.testing.assert_array_equal(truth4,
                                      result.get_gate_membership('FL2P-FL4P'))
示例#19
0
    def test_add_boolean_or2_complement_gate():
        gs = fk.GatingStrategy()

        dim1 = fk.Dimension('SSC-H',
                            compensation_ref='FCS',
                            range_min=20,
                            range_max=80)
        dim2 = fk.Dimension('FL1-H',
                            compensation_ref='FCS',
                            range_min=70,
                            range_max=200)
        rect_dims = [dim1, dim2]

        rect_gate = fk.gates.RectangleGate('Rectangle2', None, rect_dims)
        gs.add_gate(rect_gate)
        gs.add_gate(quad1_gate)

        gate1_refs = [{
            'ref': 'Rectangle2',
            'path': ('root', ),
            'complement': False
        }, {
            'ref': 'FL2N-FL4N',
            'path': ('root', 'Quadrant1'),
            'complement': True
        }]

        bool1_gate = fk.gates.BooleanGate('Or2', None, 'or', gate1_refs)
        gs.add_gate(bool1_gate)

        res_path = 'examples/data/gate_ref/truth/Results_Or2.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth, result.get_gate_membership('Or2'))
示例#20
0
    def test_absolute_percent(self):
        gs = fk.GatingStrategy()

        gs.add_comp_matrix(comp_matrix_01)

        gs.add_transform(logicle_xform1)
        gs.add_transform(hyperlog_xform1)

        gs.add_gate(poly1_gate)

        dim1 = fk.Dimension('PE', 'MySpill', 'Logicle_10000_0.5_4.5_0', range_min=0.31, range_max=0.69)
        dim2 = fk.Dimension('PerCP', 'MySpill', 'Logicle_10000_0.5_4.5_0', range_min=0.27, range_max=0.73)
        dims1 = [dim1, dim2]

        rect_gate1 = fk.gates.RectangleGate('ScaleRect1', None, dims1)
        gs.add_gate(rect_gate1)

        dim3 = fk.Dimension('FITC', 'MySpill', 'Hyperlog_10000_1_4.5_0', range_min=0.12, range_max=0.43)
        dims2 = [dim3]

        rect_gate2 = fk.gates.RectangleGate('ScalePar1', 'ScaleRect1', dims2)
        gs.add_gate(rect_gate2)

        result = gs.gate_sample(data1_sample)
        parent_gate = gs.get_parent_gate(rect_gate2.gate_name)
        parent_gate_count = result.get_gate_count(parent_gate.gate_name)
        gate_count = result.get_gate_count(rect_gate2.gate_name)
        gate_abs_pct = result.get_gate_absolute_percent(rect_gate2.gate_name)
        gate_rel_pct = result.get_gate_relative_percent(rect_gate2.gate_name)

        true_count = 558
        true_abs_pct = (558 / data1_sample.event_count) * 100
        true_rel_pct = (558 / float(parent_gate_count)) * 100

        self.assertEqual(true_count, gate_count)
        self.assertEqual(true_abs_pct, gate_abs_pct)
        self.assertEqual(true_rel_pct, gate_rel_pct)
示例#21
0
    def test_add_parent_poly1_boolean_and2_gate():
        gs = fk.GatingStrategy()

        gs.add_gate(poly1_gate)

        dim3 = fk.Dimension('FL3-H', compensation_ref='FCS')
        dim4 = fk.Dimension('FL4-H', compensation_ref='FCS')
        dims2 = [dim3, dim4]

        ellipse_gate = fk.gates.EllipsoidGate('Ellipse1', None, dims2,
                                              ell1_coords, ell1_cov_mat,
                                              ell1_dist_square)
        gs.add_gate(ellipse_gate)
        gs.add_gate(range1_gate)

        gate_refs = [{
            'ref': 'Range1',
            'path': ('root', ),
            'complement': False
        }, {
            'ref': 'Ellipse1',
            'path': ('root', ),
            'complement': False
        }]

        bool_gate = fk.gates.BooleanGate('ParAnd2', 'Polygon1', 'and',
                                         gate_refs)
        gs.add_gate(bool_gate)

        res_path = 'examples/data/gate_ref/truth/Results_ParAnd2.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth,
                                      result.get_gate_membership('ParAnd2'))
示例#22
0
    def test_add_rect2_gate():
        gs = fk.GatingStrategy()

        dim1 = fk.Dimension('SSC-H',
                            compensation_ref='FCS',
                            range_min=20,
                            range_max=80)
        dim2 = fk.Dimension('FL1-H',
                            compensation_ref='FCS',
                            range_min=70,
                            range_max=200)
        dims = [dim1, dim2]

        rect_gate = fk.gates.RectangleGate('Rectangle2', None, dims)
        gs.add_gate(rect_gate)

        res_path = 'examples/data/gate_ref/truth/Results_Rectangle2.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(truth,
                                      result.get_gate_membership('Rectangle2'))
示例#23
0
    def test_add_ellipsoid_3d_gate():
        gs = fk.GatingStrategy()

        dim1 = fk.Dimension('FL3-H', compensation_ref='FCS')
        dim2 = fk.Dimension('FL4-H', compensation_ref='FCS')
        dim3 = fk.Dimension('FL1-H', compensation_ref='FCS')
        dims = [dim1, dim2, dim3]

        coords = [40.3, 30.6, 20.8]
        cov_mat = [[2.5, 7.5, 17.5], [7.5, 7.0, 13.5], [15.5, 13.5, 4.3]]
        dist_square = 1

        poly_gate = fk.gates.EllipsoidGate('Ellipsoid3D', None, dims, coords,
                                           cov_mat, dist_square)
        gs.add_gate(poly_gate)

        res_path = 'examples/data/gate_ref/truth/Results_Ellipsoid3D.txt'
        truth = pd.read_csv(res_path, header=None, squeeze=True,
                            dtype='bool').values

        result = gs.gate_sample(data1_sample)

        np.testing.assert_array_equal(
            truth, result.get_gate_membership('Ellipsoid3D'))
示例#24
0
    def test_add_duplicate_matrix_id(self):
        gs = fk.GatingStrategy()
        gs.add_comp_matrix(comp_matrix_01)

        self.assertRaises(KeyError, gs.add_comp_matrix, comp_matrix_01)
示例#25
0
 def test_add_matrix_non_matrix_class(self):
     gs = fk.GatingStrategy()
     self.assertRaises(ValueError, gs.add_comp_matrix, "not a matrix class")
示例#26
0
    def test_add_duplicate_transform_id(self):
        gs = fk.GatingStrategy()
        gs.add_transform(logicle_xform1)

        self.assertRaises(KeyError, gs.add_transform, logicle_xform1)
示例#27
0
 def test_add_transform_non_transform_class(self):
     gs = fk.GatingStrategy()
     self.assertRaises(ValueError, gs.add_transform, "not a transform class")
示例#28
0
    def test_get_gate_raises_ValueError(self):
        gs = fk.GatingStrategy()
        gs.add_gate(poly1_gate)

        self.assertRaises(ValueError, gs.get_gate, 'nonexistent-gate')
示例#29
0
    def test_add_duplicate_gate_id(self):
        gs = fk.GatingStrategy()
        gs.add_gate(poly1_gate)

        self.assertRaises(KeyError, gs.add_gate, poly1_gate)
示例#30
0
 def test_add_gate_non_gate_class(self):
     gs = fk.GatingStrategy()
     self.assertRaises(ValueError, gs.add_gate, "not a gate class")