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'))
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)
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'))
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'))
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'))
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'))
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'))
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'))
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'))
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)
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'))
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)
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)
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'))
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'))
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'))
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'))
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'))
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'))
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)
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'))
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'))
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'))
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)
def test_add_matrix_non_matrix_class(self): gs = fk.GatingStrategy() self.assertRaises(ValueError, gs.add_comp_matrix, "not a matrix class")
def test_add_duplicate_transform_id(self): gs = fk.GatingStrategy() gs.add_transform(logicle_xform1) self.assertRaises(KeyError, gs.add_transform, logicle_xform1)
def test_add_transform_non_transform_class(self): gs = fk.GatingStrategy() self.assertRaises(ValueError, gs.add_transform, "not a transform class")
def test_get_gate_raises_ValueError(self): gs = fk.GatingStrategy() gs.add_gate(poly1_gate) self.assertRaises(ValueError, gs.get_gate, 'nonexistent-gate')
def test_add_duplicate_gate_id(self): gs = fk.GatingStrategy() gs.add_gate(poly1_gate) self.assertRaises(KeyError, gs.add_gate, poly1_gate)
def test_add_gate_non_gate_class(self): gs = fk.GatingStrategy() self.assertRaises(ValueError, gs.add_gate, "not a gate class")