def test_multiple_amounts(): substance = Substance() substance.add_component(Substance.Component('[Na+]'), Substance.MoleFraction(0.75)) substance.add_component(Substance.Component('[Na+]'), Substance.ExactAmount(1)) substance.add_component(Substance.Component('[Cl-]'), Substance.MoleFraction(0.25)) substance.add_component(Substance.Component('[Cl-]'), Substance.ExactAmount(1)) assert substance.number_of_components == 2 sodium_amounts = substance.get_amounts('[Na+]') chlorine_amounts = substance.get_amounts('[Cl-]') assert len(sodium_amounts) == 2 assert len(chlorine_amounts) == 2 molecule_counts = substance.get_molecules_per_component(6) assert len(molecule_counts) == 2 assert molecule_counts['[Na+]'] == 4 assert molecule_counts['[Cl-]'] == 2
def test_solvate_existing_structure_protocol(): """Tests solvating a single methanol molecule in water.""" methanol_substance = Substance() methanol_substance.add_component(Substance.Component('CO'), Substance.ExactAmount(1)) water_substance = Substance() water_substance.add_component(Substance.Component('O'), Substance.MoleFraction(1.0)) with tempfile.TemporaryDirectory() as temporary_directory: build_methanol_coordinates = BuildCoordinatesPackmol('build_methanol') build_methanol_coordinates.max_molecules = 1 build_methanol_coordinates.substance = methanol_substance build_methanol_coordinates.execute(temporary_directory, ComputeResources()) solvate_coordinates = SolvateExistingStructure('solvate_methanol') solvate_coordinates.max_molecules = 9 solvate_coordinates.substance = water_substance solvate_coordinates.solute_coordinate_file = build_methanol_coordinates.coordinate_file_path solvate_coordinates.execute(temporary_directory, ComputeResources()) solvated_pdb = PDBFile(solvate_coordinates.coordinate_file_path) assert solvated_pdb.topology.getNumResidues() == 10
def create_substance(): test_substance = Substance() test_substance.add_component(Substance.Component('C', role=Substance.ComponentRole.Solute), Substance.ExactAmount(1)) test_substance.add_component(Substance.Component('CC', role=Substance.ComponentRole.Ligand), Substance.ExactAmount(1)) test_substance.add_component(Substance.Component('CCC', role=Substance.ComponentRole.Receptor), Substance.ExactAmount(1)) test_substance.add_component(Substance.Component('O', role=Substance.ComponentRole.Solvent), Substance.MoleFraction(1.0)) return test_substance
def test_build_docked_coordinates_protocol(): """Tests docking a methanol molecule into alpha-Cyclodextrin.""" ligand_substance = Substance() ligand_substance.add_component( Substance.Component('CO', role=Substance.ComponentRole.Ligand), Substance.ExactAmount(1)) # TODO: This test could likely be made substantially faster # by storing the binary prepared receptor. Would this # be in breach of any oe license terms? with tempfile.TemporaryDirectory() as temporary_directory: build_docked_coordinates = BuildDockedCoordinates('build_methanol') build_docked_coordinates.ligand_substance = ligand_substance build_docked_coordinates.number_of_ligand_conformers = 5 build_docked_coordinates.receptor_coordinate_file = get_data_filename( 'test/molecules/acd.mol2') build_docked_coordinates.execute(temporary_directory, ComputeResources()) docked_pdb = PDBFile( build_docked_coordinates.docked_complex_coordinate_path) assert docked_pdb.topology.getNumResidues() == 2
def test_ligand_receptor_yank_protocol(): full_substance = Substance() full_substance.add_component( Substance.Component(smiles='c1ccccc1', role=Substance.ComponentRole.Receptor), Substance.ExactAmount(1)) full_substance.add_component( Substance.Component(smiles='C', role=Substance.ComponentRole.Ligand), Substance.ExactAmount(1)) full_substance.add_component( Substance.Component(smiles='O', role=Substance.ComponentRole.Solvent), Substance.MoleFraction(1.0)) solute_substance = Substance() solute_substance.add_component( Substance.Component(smiles='C', role=Substance.ComponentRole.Ligand), Substance.ExactAmount(1)) solute_substance.add_component( Substance.Component(smiles='O', role=Substance.ComponentRole.Solvent), Substance.MoleFraction(1.0)) thermodynamic_state = ThermodynamicState(temperature=298.15 * unit.kelvin, pressure=1.0 * unit.atmosphere) with tempfile.TemporaryDirectory() as directory: with temporarily_change_directory(directory): force_field_path = 'ff.json' with open(force_field_path, 'w') as file: file.write(build_tip3p_smirnoff_force_field().json()) complex_coordinate_path, complex_system_path = _setup_dummy_system( 'full', full_substance, 3, force_field_path) ligand_coordinate_path, ligand_system_path = _setup_dummy_system( 'ligand', solute_substance, 2, force_field_path) run_yank = LigandReceptorYankProtocol('yank') run_yank.substance = full_substance run_yank.thermodynamic_state = thermodynamic_state run_yank.number_of_iterations = 1 run_yank.steps_per_iteration = 1 run_yank.checkpoint_interval = 1 run_yank.verbose = True run_yank.setup_only = True run_yank.ligand_residue_name = 'TMP' run_yank.receptor_residue_name = 'TMP' run_yank.solvated_ligand_coordinates = ligand_coordinate_path run_yank.solvated_ligand_system = ligand_system_path run_yank.solvated_complex_coordinates = complex_coordinate_path run_yank.solvated_complex_system = complex_system_path run_yank.force_field_path = force_field_path result = run_yank.execute('', ComputeResources()) assert not isinstance(result, PropertyEstimatorException)
def test_solvation_yank_protocol(solvent_smiles): full_substance = Substance() full_substance.add_component( Substance.Component(smiles='CO', role=Substance.ComponentRole.Solute), Substance.ExactAmount(1)) full_substance.add_component( Substance.Component(smiles=solvent_smiles, role=Substance.ComponentRole.Solvent), Substance.MoleFraction(1.0)) solvent_substance = Substance() solvent_substance.add_component( Substance.Component(smiles=solvent_smiles, role=Substance.ComponentRole.Solvent), Substance.MoleFraction(1.0)) solute_substance = Substance() solute_substance.add_component( Substance.Component(smiles='CO', role=Substance.ComponentRole.Solute), Substance.ExactAmount(1)) thermodynamic_state = ThermodynamicState(temperature=298.15 * unit.kelvin, pressure=1.0 * unit.atmosphere) with tempfile.TemporaryDirectory() as directory: with temporarily_change_directory(directory): force_field_path = 'ff.json' with open(force_field_path, 'w') as file: file.write(build_tip3p_smirnoff_force_field().json()) solvated_coordinate_path, solvated_system_path = _setup_dummy_system( 'full', full_substance, 2, force_field_path) vacuum_coordinate_path, vacuum_system_path = _setup_dummy_system( 'vacuum', solute_substance, 1, force_field_path) run_yank = SolvationYankProtocol('yank') run_yank.solute = solute_substance run_yank.solvent_1 = solvent_substance run_yank.solvent_2 = Substance() run_yank.thermodynamic_state = thermodynamic_state run_yank.number_of_iterations = 1 run_yank.steps_per_iteration = 1 run_yank.checkpoint_interval = 1 run_yank.verbose = True run_yank.setup_only = True run_yank.solvent_1_coordinates = solvated_coordinate_path run_yank.solvent_1_system = solvated_system_path run_yank.solvent_2_coordinates = vacuum_coordinate_path run_yank.solvent_2_system = vacuum_system_path run_yank.electrostatic_lambdas_1 = [1.00] run_yank.steric_lambdas_1 = [1.00] run_yank.electrostatic_lambdas_2 = [1.00] run_yank.steric_lambdas_2 = [1.00] result = run_yank.execute('', ComputeResources()) assert not isinstance(result, PropertyEstimatorException)
def _create_data_set(): """Create a small data set of three properties taken from the FreeSolv data set: https://github.com/mobleylab/FreeSolv. Returns ------- PhysicalPropertyDataSet The data set of three select FreeSolv properties. """ butan_1_ol = Substance() butan_1_ol.add_component( Substance.Component('CCCCO', role=Substance.ComponentRole.Solute), Substance.ExactAmount(1)) butan_1_ol.add_component( Substance.Component('O', role=Substance.ComponentRole.Solvent), Substance.MoleFraction(1.0)) butan_1_ol_property = SolvationFreeEnergy( thermodynamic_state=ThermodynamicState(298.15 * unit.kelvin, 1.0 * unit.atmosphere), phase=PropertyPhase.Liquid, substance=butan_1_ol, value=-4.72 * unit.kilocalorie / unit.mole, uncertainty=0.6 * unit.kilocalorie / unit.mole, source=MeasurementSource(doi=' 10.1021/ct050097l')) methyl_propanoate = Substance() methyl_propanoate.add_component( Substance.Component('CCC(=O)OC', role=Substance.ComponentRole.Solute), Substance.ExactAmount(1)) methyl_propanoate.add_component( Substance.Component('O', role=Substance.ComponentRole.Solvent), Substance.MoleFraction(1.0)) methyl_propanoate_property = SolvationFreeEnergy( thermodynamic_state=ThermodynamicState(298.15 * unit.kelvin, 1.0 * unit.atmosphere), phase=PropertyPhase.Liquid, substance=methyl_propanoate, value=-2.93 * unit.kilocalorie / unit.mole, uncertainty=0.6 * unit.kilocalorie / unit.mole, source=MeasurementSource(doi=' 10.1021/ct050097l')) benzamide = Substance() benzamide.add_component( Substance.Component('c1ccc(cc1)C(=O)N', role=Substance.ComponentRole.Solute), Substance.ExactAmount(1)) benzamide.add_component( Substance.Component('O', role=Substance.ComponentRole.Solvent), Substance.MoleFraction(1.0)) benzamide_property = SolvationFreeEnergy( thermodynamic_state=ThermodynamicState(298.15 * unit.kelvin, 1.0 * unit.atmosphere), phase=PropertyPhase.Liquid, substance=benzamide, value=-11.0 * unit.kilocalorie / unit.mole, uncertainty=0.2 * unit.kilocalorie / unit.mole, source=MeasurementSource(doi=' 10.1021/ct050097l')) data_set = PhysicalPropertyDataSet() data_set.properties[butan_1_ol.identifier] = [butan_1_ol_property] data_set.properties[methyl_propanoate.identifier] = [ methyl_propanoate_property ] data_set.properties[benzamide.identifier] = [benzamide_property] return data_set