예제 #1
0
    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'))
예제 #2
0
    def test_vert_repr(self):
        vert = fk.Vertex([500, 5])
        vert_string = "Vertex([500, 5])"

        self.assertEqual(repr(vert), vert_string)
예제 #3
0
    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'))
        ]
예제 #4
0
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,