def example_filegroup(): test_project = Project(project_id="test") exp = test_project.add_experiment( experiment_id="test experiment", data_directory=f"{os.getcwd()}/test_data", panel_definition=f"{os.getcwd()}/assets/test_panel.xlsx") exp.add_new_sample( sample_id="test sample", primary_path=f"{os.getcwd()}/assets/test.FCS", controls_path={"test_ctrl": f"{os.getcwd()}/assets/test.FCS"}, compensate=False) yield exp.get_sample(sample_id="test sample") test_project.delete()
def _build(dump=True): # Initiate Gating object if dump: db = connect('test') db.drop_database('test') global_init('test') setup_with_dummy_data() project = Project.objects(project_id='test').get() gate = Gating(experiment=project.load_experiment('test_experiment_dummy'), sample_id='dummy_test') return gate
def test_apply_all(example_experiment): gs = create_gatingstrategy_and_load(example_experiment) with pytest.raises(AssertionError) as err: gs.apply_all() assert str(err.value) == "No gates to apply" gs = apply_some_gates(gs) exp = Project.objects( project_id="test").get().load_experiment("test experiment") gs.load_data(experiment=exp, sample_id="test sample") gs.apply_all() assert_expected_gated_pops(gs) with pytest.raises(AssertionError) as err: gs.apply_all() assert str(err.value) == "One or more of the populations generated from this gating strategy are already " \ "presented in the population tree"
def test_init_new_fcs_file(example_filegroup): fg = example_filegroup assert os.path.isfile(f"{os.getcwd()}/test_data/{fg.id}.hdf5") experiment = Project.objects( project_id="test").get().load_experiment("test experiment") fg = experiment.get_sample("test sample") primary_data = fg.data("primary") ctrl_data = fg.data("test_ctrl") assert len(fg.populations) == 1 assert fg.populations[0].population_name == "root" assert len(fg.tree.keys()) == 1 assert list(fg.tree.keys())[0] == "root" root = fg.populations[0] assert root.parent == "root" assert root.population_name == "root" assert np.array_equal(primary_data.index.values, root.index) assert np.array_equal(ctrl_data.index.values, root.ctrl_index.get("test_ctrl")) assert primary_data.shape == (30000, 7) assert ctrl_data.shape == (30000, 7)
def test_FileGroup(self): test_project = Project.objects(project_id='test').get() test_exp = test_project.load_experiment('test_experiment_dummy') # Testing data retrieval test_grp = test_exp.pull_sample('dummy_test') test_file = test_grp.files[0] self.assertEqual(test_file.pull().shape, (100, 3)) self.assertEqual(test_file.pull(sample=10).shape, (10, 3)) data = test_exp.pull_sample_data('dummy_test', include_controls=True) primary = [d for d in data if d.get('typ') == 'complete'][0] ctrl = [d for d in data if d.get('typ') == 'control'][0] self.assertEqual(primary.get('data').shape, (100, 3)) self.assertEqual(ctrl.get('data').shape, (100, 3)) self.assertListEqual( ctrl.get('data').columns.tolist(), ['feature0', 'feature1', 'blobID']) data = test_exp.pull_sample_data('dummy_test', include_controls=True, columns_default='channel') primary = [d for d in data if d.get('typ') == 'complete'][0] self.assertListEqual( primary.get('data').columns.tolist(), ['var0', 'var1', 'var2'])
def test_delete(example_experiment, remove_associations): gs = create_gatingstrategy_and_load(example_experiment) gs = apply_some_gates(gs) gs.save() gs = GatingStrategy.objects(name="test").get() populations = [[c.name for c in g.children] for g in gs.gates] populations = list(set([x for sl in populations for x in sl])) gs.delete(remove_associations=remove_associations, delete_gates=remove_associations) assert len(GatingStrategy.objects(name="test")) == 0 n = [0, 0] if not remove_associations: n = [2, 1] for n_, gate in zip(n, [ThresholdGate, EllipseGate]): assert len(gate.objects()) == n_ fg = (Project.objects(project_id="test").get().load_experiment( "test experiment").get_sample("test sample")) if remove_associations: assert len(fg.gating_strategy) == 0 assert all([p not in fg.list_populations() for p in populations]) else: assert len(fg.gating_strategy) == 1 assert all([p in fg.list_populations() for p in populations])
def test_add_population(example_filegroup): fg, populations = create_populations(filegroup=example_filegroup) fg.save() experiment = Project.objects( project_id="test").get().load_experiment("test experiment") fg = experiment.get_sample("test sample") # Check population objects assert len(fg.populations) == 4 assert all([ x in [p.population_name for p in fg.populations] for x in ["root", "pop1", "pop2", "pop3"] ]) # Check indexes pop_idx = {p.population_name: p.index for p in fg.populations} pop_ctrl_idx = { p.population_name: p.ctrl_index.get("test_ctrl") for p in fg.populations } for data_dict in [pop_idx, pop_ctrl_idx]: for name, expected_n in zip(["root", "pop1", "pop2", "pop3"], [30000, 24000, 12000, 6000]): assert len(data_dict.get(name)) == expected_n # Check cluster idx clustered_pops = [p for p in fg.populations if p.population_name != "root"] cluster_idx = { p.population_name: p.clusters[0].index for p in clustered_pops } for name, n in zip(["pop1", "pop2", "pop3"], [24000, 12000, 6000]): assert len(cluster_idx.get(name)) == n * 0.25 # Check trees assert all([x in fg.tree.keys() for x in ["root", "pop1", "pop2", "pop3"]]) assert not fg.tree.get("root").parent assert fg.tree.get("pop1").parent == fg.tree.get("root") assert fg.tree.get("pop2").parent == fg.tree.get("pop1") assert fg.tree.get("pop3").parent == fg.tree.get("pop2")
def create_project(): p = Project(project_id="test") p.save() yield p p.delete()
def test_Project(self): test_panel = Panel(panel_name='test') test_panel.save() test_project = Project(project_id='test', owner='test') test_project.add_experiment('test_experiment_aml', panel_name='test') test_project.add_experiment('test_experiment_dummy', panel_name='test') test_project.add_subject('test_subject', testing=True) self.assertEqual(test_project.list_subjects(), ['test_subject']) s = test_project.pull_subject('test_subject') self.assertEqual(s.testing, True) self.assertEqual(s.subject_id, 'test_subject') self.assertEqual(test_project.list_fcs_experiments(), ['test_experiment_aml', 'test_experiment_dummy']) test_project.save() test_project.delete() err = False try: Project.objects(project_id='test').get() except DoesNotExist: err = True self.assertTrue(err)
def reload_file(): fg = (Project.objects(project_id="test").get().load_experiment( "test experiment").get_sample("test sample")) return fg