def test_move_step_rot_half_step_trans_half(self): atoms, residues, chains = parse_complex_from_file( self.golden_data_path + '1PPElig.pdb') ligand = Complex(chains, atoms) adapter = MJ3hAdapter(self.receptor, ligand) scoring_function = MJ3h() coordinates1 = Coordinates([0., 0., 0., 1., 0., 0., 0.]) landscape_position1 = DockingLandscapePosition(scoring_function, coordinates1, adapter.receptor_model, adapter.ligand_model, step_translation=5.0, step_rotation=0.5) adapter2 = MJ3hAdapter(self.receptor, ligand) coordinates2 = Coordinates([10., 0., 0., 0., 0., 1., 0.]) landscape_position2 = DockingLandscapePosition(scoring_function, coordinates2, adapter2.receptor_model, adapter2.ligand_model) landscape_position1.move(landscape_position2) expected_translation = np.array([5., 0., 0.]) expected_rotation = Quaternion(0.707106781, 0.0, 0.707106781, 0.0) assert (expected_translation == landscape_position1.translation).all() assert expected_rotation == landscape_position1.rotation
def test_distance2_same_landscape_position(self): atoms, residues, chains = parse_complex_from_file(self.golden_data_path + '1PPElig.pdb') ligand = Complex(chains, atoms) adapter = MJ3hAdapter(self.receptor, ligand) scoring_function = MJ3h() coordinates = Coordinates([0., 0., 0., 1., 0., 0., 0.]) landscape_position1 = DockingLandscapePosition(scoring_function, coordinates, adapter.receptor_model, adapter.ligand_model) landscape_position2 = DockingLandscapePosition(scoring_function, coordinates, adapter.receptor_model, adapter.ligand_model) assert_almost_equal(0.0, landscape_position1.distance2(landscape_position2))
def test_move_step_rot_full_step_trans_full(self): atoms, residues, chains = parse_complex_from_file(self.golden_data_path + '1PPElig.pdb') ligand = Complex(chains, atoms) adapter = MJ3hAdapter(self.receptor, ligand) scoring_function = MJ3h() coordinates1 = Coordinates([0.,0.,0.,1.,0.,0.,0.]) landscape_position1 = DockingLandscapePosition(scoring_function, coordinates1, adapter.receptor_model, adapter.ligand_model, step_translation=10.0) adapter2 = MJ3hAdapter(self.receptor, ligand) coordinates2 = Coordinates([10.,0.,0.,1.,0.,0.,0.]) landscape_position2 = DockingLandscapePosition(scoring_function, coordinates2, adapter2.receptor_model, adapter2.ligand_model) landscape_position1.move(landscape_position2) assert landscape_position1 == landscape_position2
def test_evaluate_objective_function_rotation_y_axis_180_translation_10(self): atoms, residues, chains = parse_complex_from_file(self.golden_data_path + '1PPElig.pdb') ligand = Complex(chains, atoms) adapter = MJ3hAdapter(self.receptor, ligand) scoring_function = MJ3h() coordinates = Coordinates([10.,0.,0.,0.,0.,1.,0.]) landscape_position = DockingLandscapePosition(scoring_function, coordinates, adapter.receptor_model, adapter.ligand_model) assert_almost_equal(6.39, landscape_position.evaluate_objective_function())
def test_repr(self): atoms, residues, chains = parse_complex_from_file(self.golden_data_path + '1PPElig.pdb') ligand = Complex(chains, atoms) adapter = MJ3hAdapter(self.receptor, ligand) scoring_function = MJ3h() coordinates = Coordinates([0.,0.,0.,1.,0.,0.,0.]) landscape_position = DockingLandscapePosition(scoring_function, coordinates, adapter.receptor_model, adapter.ligand_model) expected = "( 0.0000000, 0.0000000, 0.0000000, 1.0000000, 0.0000000, 0.0000000, 0.0000000) 0 0" assert expected == str(landscape_position)
def test_distance2_minus_10A_translation_y(self): atoms, _, chains = parse_complex_from_file(self.golden_data_path / '1PPElig.pdb') ligand = Complex(chains, atoms) adapter = MJ3hAdapter(self.receptor, ligand) scoring_function = MJ3h() coordinates = Coordinates([0., 0., 0., 1., 0., 0., 0.]) landscape_position1 = DockingLandscapePosition(scoring_function, coordinates, adapter.receptor_model, adapter.ligand_model) adapter2 = MJ3hAdapter(self.receptor, ligand) adapter2.ligand_model.translate([0.0, -10.0, 0.0]) landscape_position2 = DockingLandscapePosition(scoring_function, coordinates, adapter2.receptor_model, adapter2.ligand_model) assert_almost_equal(100.0, landscape_position1.distance2(landscape_position2)) assert_almost_equal(10.0, landscape_position1.distance(landscape_position2))
def test_evaluate_objective_function_no_movement(self): """The result of this test must be the same value as testing the MJ3h function. Translation is 0 and Quaternion [1,0,0,0] means no rotation. """ atoms, residues, chains = parse_complex_from_file(self.golden_data_path + '1PPElig.pdb') ligand = Complex(chains, atoms) adapter = MJ3hAdapter(self.receptor, ligand) scoring_function = MJ3h() coordinates = Coordinates([0.,0.,0.,1.,0.,0.,0.]) landscape_position = DockingLandscapePosition(scoring_function, coordinates, adapter.receptor_model, adapter.ligand_model) assert_almost_equal(2.02, landscape_position.evaluate_objective_function())
def test_move_step_rot_half_step_trans_half_and_anm(self): atoms, _, chains = parse_complex_from_file(self.golden_data_path / '1PPElig.pdb') ligand = Complex(chains, atoms) adapter = MJ3hAdapter(self.receptor, ligand) scoring_function = MJ3h() coordinates1 = Coordinates( [0., 0., 0., 1., 0., 0., 0., 1., 1., 1., 1.]) landscape_position1 = DockingLandscapePosition(scoring_function, coordinates1, adapter.receptor_model, adapter.ligand_model, step_translation=5.0, step_rotation=0.5, step_nmodes=0.5, num_rec_nmodes=2, num_lig_nmodes=2) adapter2 = MJ3hAdapter(self.receptor, ligand) coordinates2 = Coordinates( [10., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.]) landscape_position2 = DockingLandscapePosition(scoring_function, coordinates2, adapter2.receptor_model, adapter2.ligand_model, num_rec_nmodes=2, num_lig_nmodes=2) landscape_position1.move(landscape_position2) expected_translation = np.array([5., 0., 0.]) expected_rotation = Quaternion(0.707106781, 0.0, 0.707106781, 0.0) expected_anm = np.array([0.64644661, 0.64644661]) assert np.allclose(expected_translation, landscape_position1.translation) assert expected_rotation == landscape_position1.rotation assert np.allclose(expected_anm, landscape_position1.rec_extent) assert np.allclose(expected_anm, landscape_position1.lig_extent)
def test_clone(self): atoms, residues, chains = parse_complex_from_file(self.golden_data_path + '1PPElig.pdb') ligand = Complex(chains, atoms) adapter = MJ3hAdapter(self.receptor, ligand) scoring_function = MJ3h() coordinates = Coordinates([0.,0.,0.,1.,0.,0.,0.]) landscape_position_1 = DockingLandscapePosition(scoring_function, coordinates, adapter.receptor_model, adapter.ligand_model) landscape_position_2 = landscape_position_1.clone() assert landscape_position_1.translation.all() == landscape_position_2.translation.all() assert landscape_position_1.rotation == landscape_position_2.rotation landscape_position_2.translation[0] = 5.0 assert_almost_equal(5.0, landscape_position_2.translation[0]) assert_almost_equal(0.0, landscape_position_1.translation[0])
def generate_landscape_positions(self): """Generates a list of landscape positions that have been read from initial_population_file. """ reader = CoordinatesFileReader(self.dimensions) coordinates = reader.get_coordinates_from_file( self.initial_population_file) if not coordinates: raise GSOCoordinatesError( "No coordinates have been read from %s file" % self.initial_population_file) if len(coordinates) != self.number_of_glowworms: raise GSOCoordinatesError( "Number of coordinates read and number of glowworms does not correspond" ) positions = [] for i, adapter in enumerate(self.adapters): positions.append([]) for index in range(self.number_of_glowworms): receptor_index = self.random_number_generator.randint( 0, len(self.adapters[0].receptor_model) - 1) ligand_index = self.random_number_generator.randint( 0, len(self.adapters[0].ligand_model) - 1) positions[i].append( DockingLandscapePosition( self.objective_functions[i], coordinates[index], adapter.receptor_model, adapter.ligand_model, receptor_index, ligand_index, self.step_translation, self.step_rotation, self.step_nmodes, self.anm_rec, self.anm_lig)) return positions
Boundary(-MAX_ROTATION, MAX_ROTATION), Boundary(-MAX_ROTATION, MAX_ROTATION) ]) random_number_generator = MTGenerator(GSO_SEED) gso_parameters = GSOParameters(configuration_file) log.info("Parameters read") positions = [] for i in range(num_glowworms): coordinates = [ translations[i][0], translations[i][1], translations[i][2], rotations[i].w, rotations[i].x, rotations[i].y, rotations[i].z ] positions.append( DockingLandscapePosition(scoring_function, coordinates, adapter.receptor_model, adapter.ligand_model)) log.info("%d positions loaded" % len(positions)) swarm = Swarm(positions, gso_parameters) for i, glowworm in enumerate(swarm.glowworms): glowworm.luciferin = luciferin[i] glowworm.vision_range = vision_range[i] glowworm.scoring = scoring[i] for i, glowworm in enumerate(swarm.glowworms): glowworm.search_neighbors(swarm.glowworms) log.info("Swarm created") gso = GSO(swarm, gso_parameters, random_number_generator) log.info("Starting simulation")