def test_add_poly2_gate(): gs = fk.GatingStrategy() dim1 = fk.Dimension('FL1-H', compensation_ref='FCS') dim2 = fk.Dimension('FL4-H', compensation_ref='FCS') dims = [dim1, dim2] vertices = [ fk.Vertex([20, 10]), fk.Vertex([120, 10]), fk.Vertex([120, 160]), fk.Vertex([20, 160]) ] poly_gate = fk.gates.PolygonGate('Polygon2', None, dims, vertices) gs.add_gate(poly_gate) res_path = 'examples/data/gate_ref/truth/Results_Polygon2.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('Polygon2'))
def test_vert_repr(self): vert = fk.Vertex([500, 5]) vert_string = "Vertex([500, 5])" self.assertEqual(repr(vert), vert_string)
def setUp(self): """ This TestCase tests more complex GatingStrategy use cases, particularly the re-use of a gate in 2 different branches where the parent of each gate is also re-used. For example: root ╰── Gate_A ├── Gate_B │ ╰── ReusedParent │ ╰── ReusedChild ╰── Gate_C ╰── ReusedParent ╰── ReusedChild :return: None """ self.gs = fk.GatingStrategy() time_dim = fk.Dimension('Gate_A', range_min=0.1, range_max=0.9) dim_fsc_w = fk.Dimension('FSC-W') dim_fsc_h = fk.Dimension('FSC-H') dim_ssc_a = fk.Dimension('SSC-A') dim_amine_a = fk.Dimension('Aqua Amine FLR-A') dim_cd3_a = fk.Dimension('CD3 APC-H7 FLR-A') gate_a = fk.gates.RectangleGate('Gate_A', None, [time_dim]) self.gs.add_gate(gate_a) gate_b_vertices = [ fk.Vertex([0.328125, 0.1640625]), fk.Vertex([0.296875, 0.1484375]), fk.Vertex([0.30859375, 0.8515625]), fk.Vertex([0.34765625, 0.3984375]), fk.Vertex([0.3359375, 0.1875]) ] gate_b = fk.gates.PolygonGate( 'Gate_B', parent_gate_name=gate_a.gate_name, dimensions=[dim_fsc_w, dim_fsc_h], vertices=gate_b_vertices ) self.gs.add_gate(gate_b) gate_c_vertices = [ fk.Vertex([0.328125, 0.1640625]), fk.Vertex([0.296875, 0.1484375]), fk.Vertex([0.30859375, 0.8515625]), fk.Vertex([0.34765625, 0.3984375]), fk.Vertex([0.3359375, 0.1875]) ] gate_c = fk.gates.PolygonGate( 'Gate_C', parent_gate_name=gate_a.gate_name, dimensions=[dim_fsc_h, dim_fsc_w], vertices=gate_c_vertices ) self.gs.add_gate(gate_c) reused_parent_vertices = [ fk.Vertex([0.2629268137285685, 0.0625]), fk.Vertex([0.24318837264468562, 0.03515625]), fk.Vertex([0.21573453285608676, 0.0390625]), fk.Vertex([0.29042797365869377, 0.24609375]), fk.Vertex([0.29042797365869377, 0.1484375]) ] reused_parent_gate_1 = fk.gates.PolygonGate( 'ReusedParent', gate_b.gate_name, [dim_amine_a, dim_ssc_a], reused_parent_vertices ) reused_parent_gate_2 = fk.gates.PolygonGate( 'ReusedParent', gate_c.gate_name, [dim_amine_a, dim_ssc_a], reused_parent_vertices ) self.gs.add_gate(reused_parent_gate_1) self.gs.add_gate(reused_parent_gate_2) reused_child_vertices = [ fk.Vertex([0.28415161867527605, 0.11328125]), fk.Vertex([0.3132637699981912, 0.203125]), fk.Vertex([0.6896802981119161, 0.05078125]), fk.Vertex([0.5692952580886116, 0.01953125]), fk.Vertex([0.3192472844795108, 0.01953125]) ] reused_child_gate = fk.gates.PolygonGate( 'ReusedChild', 'ReusedParent', [dim_cd3_a, dim_ssc_a], reused_child_vertices ) gate_path_1 = ('root', 'Gate_A', 'Gate_B', 'ReusedParent') gate_path_2 = ('root', 'Gate_A', 'Gate_C', 'ReusedParent') self.gs.add_gate(reused_child_gate, gate_path=gate_path_1) self.gs.add_gate(reused_child_gate, gate_path=gate_path_2) self.all_gate_ids = [ ('Gate_A', ('root',)), ('Gate_B', ('root', 'Gate_A')), ('ReusedParent', ('root', 'Gate_A', 'Gate_B')), ('ReusedChild', ('root', 'Gate_A', 'Gate_B', 'ReusedParent')), ('Gate_C', ('root', 'Gate_A')), ('ReusedParent', ('root', 'Gate_A', 'Gate_C')), ('ReusedChild', ('root', 'Gate_A', 'Gate_C', 'ReusedParent')) ]
import unittest import numpy as np import flowkit as fk data1_fcs_path = 'examples/data/gate_ref/data1.fcs' data1_sample = fk.Sample(data1_fcs_path) poly1_vertices = [ fk.Vertex([5, 5]), fk.Vertex([500, 5]), fk.Vertex([500, 500]) ] poly1_dim1 = fk.Dimension('FL2-H', compensation_ref='FCS') poly1_dim2 = fk.Dimension('FL3-H', compensation_ref='FCS') poly1_dims1 = [poly1_dim1, poly1_dim2] poly1_gate = fk.gates.PolygonGate('Polygon1', None, poly1_dims1, poly1_vertices) hyperlog_xform1 = fk.transforms.HyperlogTransform( 'Hyperlog_10000_1_4.5_0', param_t=10000, param_w=1, param_m=4.5, param_a=0 ) logicle_xform1 = fk.transforms.LogicleTransform( 'Logicle_10000_0.5_4.5_0', param_t=10000, param_w=0.5, param_m=4.5,