Esempio n. 1
0
 def test_conversion_no_scan_param(self):
     builder = make_sample_optimizer_builder(
         self.study,
         self.exp_name,
         optimizer_type=BRUTE_FORCE_2STEP_OPTIMIZER_TYPE)
     with self.assertRaises(ValueError):
         optimizer_builder_to_optimizer(builder)
Esempio n. 2
0
    def test_conversion_brute_force_with_scan_param(self):
        p1 = ParameterScanDescription(name="binding_model.sma_ka[1]",
                                      low=0.,
                                      high=10.)
        p2 = ParameterScanDescription(name="binding_model.sma_nu[1]",
                                      low=0.,
                                      high=10.)
        traits = {
            "parameter_scans": [p1, p2],
            "optimizer_type": GRID_BASED_OPTIMIZER_TYPE
        }
        builder = make_sample_optimizer_builder(self.study, self.exp_name,
                                                **traits)
        optimizer = optimizer_builder_to_optimizer(builder)
        self.assertIsInstance(optimizer, BruteForceOptimizer)
        self.assertEqual(len(optimizer.steps), 1)

        optim_step = optimizer.steps[0]
        self.assertIsInstance(optim_step, BruteForceOptimizerStep)
        scanned = [p.name for p in optim_step.parameter_list]
        expected_scanned = [
            "binding_model.sma_ka[1]", "binding_model.sma_nu[1]"
        ]
        self.assertEqual(set(scanned), set(expected_scanned))
        self.assertLazyLoadingGroups(optim_step)
        group = optim_step.simulation_groups[0]
        self.assertEqual(group.size, DEFAULT_NUM_VALUES**2)
Esempio n. 3
0
    def test_conversion_brute_force_with_parallel_parameters(self):
        p1name = "binding_model.sma_ka[1]"
        p2name = "binding_model.sma_nu[1]"
        p1 = ParameterScanDescription(name=p1name)
        p2 = ParameterScanDescription(name=p2name, parallel_parameters=[p1])
        traits = {
            "parameter_scans": [p2],
            "optimizer_type": GRID_BASED_OPTIMIZER_TYPE
        }
        builder = make_sample_optimizer_builder(self.study, self.exp_name,
                                                **traits)
        optimizer = optimizer_builder_to_optimizer(builder)
        self.assertIsInstance(optimizer, BruteForceOptimizer)
        self.assertEqual(optimizer.size, DEFAULT_NUM_VALUES)
        self.assertEqual(len(optimizer.steps), 1)

        optim_step = optimizer.steps[0]
        self.assertIsInstance(optim_step, BruteForceOptimizerStep)
        self.assertEqual(optim_step.size, DEFAULT_NUM_VALUES)
        main_scanned = {p.name for p in optim_step.parameter_list}
        # The list only contains the 1 parameter passed as the main param
        self.assertEqual(main_scanned, {p2name})
        # But the scanned parameters are both parallel params:
        expected_scanned = {p1name, p2name}
        self.assertEqual(set(optim_step.scanned_param_names), expected_scanned)
        self.assertLazyLoadingGroups(optim_step)
        group = optim_step.simulation_groups[0]
        self.assertEqual(group.size, DEFAULT_NUM_VALUES)
        # Make sure that parameters were scanned in parallel:
        nus = [sim.binding_model.sma_nu[1] for sim in group.simulations]
        self.assertEqual(nus, list(np.linspace(0, 1., DEFAULT_NUM_VALUES)))
        kas = [sim.binding_model.sma_ka[1] for sim in group.simulations]
        self.assertEqual(kas, list(np.linspace(0, 1., DEFAULT_NUM_VALUES)))
Esempio n. 4
0
    def test_conversion_binding_optim_with_scan_param(self):
        p1 = SMAParameterScanDescription(name="sma_ka")
        p2 = SMAParameterScanDescription(name="sma_nu")
        traits = {
            "parameter_scans": [p1, p2],
            "optimizer_type": BRUTE_FORCE_2STEP_OPTIMIZER_TYPE
        }
        builder = make_sample_optimizer_builder(self.study, self.exp_name,
                                                **traits)
        optimizer = optimizer_builder_to_optimizer(builder)
        self.assertIsInstance(optimizer, BruteForce2StepBindingModelOptimizer)

        num_comp = len(optimizer.steps[0].component_names)
        self.assertEqual(len(optimizer.steps), 1 + num_comp)

        const_step = optimizer.steps[0]
        self.assertIsInstance(const_step,
                              ConstantBruteForceBindingModelOptimizerStep)
        scanned = {p.name for p in const_step.parameter_list}
        expected_scanned = {
            "binding_model.sma_ka[1:]", "binding_model.sma_nu[1:]"
        }
        self.assertEqual(scanned, expected_scanned)
        self.assertLazyLoadingGroups(const_step)

        refine_step = optimizer.steps[1]
        self.assertIsInstance(refine_step, BruteForceBindingModelOptimizerStep)
        # Param list empty until the step0 is run:
        self.assertEqual(refine_step.parameter_list, [])
Esempio n. 5
0
 def test_all_target_components_by_default(self):
     p1 = ParameterScanDescription(name="binding_model.sma_ka[1]",
                                   low=0.,
                                   high=10.)
     traits = {
         "parameter_scans": [p1],
         "optimizer_type": GRID_BASED_OPTIMIZER_TYPE
     }
     builder = make_sample_optimizer_builder(self.study, self.exp_name,
                                             **traits)
     optimizer = optimizer_builder_to_optimizer(builder)
     all_comps = ['Acidic_2', 'Acidic_1', 'Native']
     self.assertEqual(optimizer.target_components, all_comps)
     optim_step = optimizer.steps[0]
     self.assertEqual(optim_step.target_components, all_comps)
Esempio n. 6
0
 def test_control_target_components(self):
     p1 = ParameterScanDescription(name="binding_model.sma_ka[1]",
                                   low=0.,
                                   high=10.)
     traits = {
         "parameter_scans": [p1],
         "optimizer_type": GRID_BASED_OPTIMIZER_TYPE,
         "component_selected": ['Acidic_2', 'Acidic_1']
     }
     builder = make_sample_optimizer_builder(self.study, self.exp_name,
                                             **traits)
     optimizer = optimizer_builder_to_optimizer(builder)
     self.assertEqual(optimizer.target_components, ['Acidic_2', 'Acidic_1'])
     optim_step = optimizer.steps[0]
     self.assertEqual(optim_step.target_components,
                      ['Acidic_2', 'Acidic_1'])
Esempio n. 7
0
 def test_conversion_brute_force_with_custom_solver(self):
     p1name = "binding_model.sma_ka[1]"
     p1 = ParameterScanDescription(name=p1name)
     traits = {
         "parameter_scans": [p1],
         "optimizer_type": GRID_BASED_OPTIMIZER_TYPE
     }
     builder = make_sample_optimizer_builder(self.study, self.exp_name,
                                             **traits)
     sim0 = self.study.search_simulation_by_name(
         builder.starting_point_simulation_name)
     # Customize solver
     sim0.solver.number_user_solution_points = 500
     builder.update_starting_point_simulations()
     optimizer = optimizer_builder_to_optimizer(builder)
     self.assertIsInstance(optimizer, BruteForceOptimizer)
     self.assertEqual(optimizer.size, DEFAULT_NUM_VALUES)
     self.assertEqual(len(optimizer.steps), 1)
     # Make sure the custom solver was reused:
     for step in optimizer.steps:
         for group in step.simulation_groups:
             cp = group.center_point_simulation
             self.assertEqual(cp.solver.number_user_solution_points, 500)
    def create_new_optimizer(self):
        """ Returns new optimizer to find optimized sim to fit a set of exps.
        """
        from kromatography.ui.brute_force_optimizer_builder import \
            BruteForceOptimizerBuilder
        from kromatography.compute.factories.experiment_optimizer import \
            optimizer_builder_to_optimizer
        from kromatography.ui.experiment_selector import ExperimentSelector

        optimizer_builder = BruteForceOptimizerBuilder(target_study=self)
        optimizer_builder.experiment_selector = ExperimentSelector(study=self)
        ui = optimizer_builder.edit_traits(kind="livemodal")
        if not ui.result:
            return

        optimizer = optimizer_builder_to_optimizer(optimizer_builder)

        # Need to use UV continuous data for cost computation?
        first_target_exp = optimizer.target_experiments[0]
        all_comps = self.product.product_component_names
        use_uv_needed = (len(all_comps) == 1 and all_comps[0]
                         not in first_target_exp.output.fraction_data)
        if use_uv_needed:
            msg = "Requesting to run an optimizer for a pure protein " \
                  "chromatogram but there is no fraction measured for the" \
                  " pure protein. Please confirm if continuous UV data can " \
                  "be used in place of fractions, to compute the quality of " \
                  "matching between a simulation and the target experiment."
            res = confirm(None, msg, title="Use UV?", default=YES)
            if res == YES:
                # This will trigger setting the flag all the way to all
                # cost_functions
                optimizer.use_uv_for_cost = True

        self.analysis_tools.optimizations.append(optimizer)
        return optimizer
Esempio n. 9
0
 def test_conversion_no_exp(self):
     builder = make_sample_optimizer_builder(self.study)
     with self.assertRaises(ValueError):
         optimizer_builder_to_optimizer(builder)