def test_initialize_systems(caplog): caplog.set_level(logging.DEBUG) configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-toluene-methane-rsfe.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) s1 = SystemStructure(configuration, "structure1") assert int(s1.offset["waterbox"]) == 0 assert int(s1.offset["vacuum"]) == 0 s2 = SystemStructure(configuration, "structure2") assert int(s2.offset["waterbox"]) == 0 assert int(s2.offset["vacuum"]) == 0 assert "vacuum" in s1.envs and "vacuum" in s2.envs assert "waterbox" in s1.envs and "waterbox" in s2.envs configuration = load_config_yaml( config= f"{get_testsystems_dir()}/config/test-2oj9-tautomer-pair-rsfe.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) s1 = SystemStructure(configuration, "structure1") assert int(s1.offset["waterbox"]) == 0 assert int(s1.offset["vacuum"]) == 0 s2 = SystemStructure(configuration, "structure2") assert int(s2.offset["waterbox"]) == 0 assert int(s2.offset["vacuum"]) == 0
def test_generate_alchemical_path_for_methanol_common_core(): from transformato_testsystems.testsystems import perform_generic_mutation configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-methanol-methane-rsfe.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) s1 = SystemStructure(configuration, "structure1") s2 = SystemStructure(configuration, "structure2") s1_to_s2 = ProposeMutationRoute(s1, s2) s1_to_s2.calculate_common_core() mutation_list = s1_to_s2.generate_mutations_to_common_core_for_mol1() i = IntermediateStateFactory( system=s1, configuration=configuration, ) perform_mutations( configuration=configuration, i=i, mutation_list=mutation_list, nr_of_mutation_steps_charge=3, ) assert len(i.output_files) == 11
def test_rbfe_mutate_2oj9(): from transformato import (ProposeMutationRoute, SystemStructure, load_config_yaml) from ..mutate import mutate_pure_tautomers conf = f"{get_testsystems_dir()}/config/test-2oj9-tautomer-pair-rbfe.yaml" configuration = load_config_yaml( config=conf, input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) s1 = SystemStructure(configuration, "structure1") s2 = SystemStructure(configuration, "structure2") s1_to_s2 = ProposeMutationRoute(s1, s2) s1_to_s2.calculate_common_core() return ( mutate_pure_tautomers( s1_to_s2, s1, s2, configuration, nr_of_bonded_windows=4, ), configuration, s1_to_s2, )
def test_lonepairs_in_common_core(): configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/tyk2-ejm_45_ejm_42.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) s1 = SystemStructure(configuration, "structure1") s2 = SystemStructure(configuration, "structure2") s1_to_s2 = ProposeMutationRoute(s1, s2) s1_to_s2.propose_common_core() s1_to_s2.finish_common_core() mutation_list = s1_to_s2.generate_mutations_to_common_core_for_mol1() i = IntermediateStateFactory( system=s1, configuration=configuration, ) # check for ligand 1 cc_region = s1_to_s2.get_common_core_idx_mol1() assert (39 in cc_region and 40 in cc_region) == True perform_mutations(configuration=configuration, i=i, mutation_list=mutation_list) # check for ligand 2 cc_region2 = s1_to_s2.get_common_core_idx_mol2() assert (35 in cc_region2 and 36 in cc_region2) == True
def test_setup_system_for_methane_common_core_with_HMR(): from transformato_testsystems.testsystems import perform_generic_mutation configuration = load_config_yaml( config= f"{get_testsystems_dir()}/config/test-toluene-methane-rsfe-HMR.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) output_files = perform_generic_mutation(configuration=configuration) assert len(output_files) == 3 # set up openMM system base = f"{get_test_output_dir()}/toluene-methane-rsfe/methane/intst3/" import sys # sys.path is a list of absolute path strings sys.path.append(base) system, psf = generate_openMM_system_using_cgui_scripts(base) # enumearte and iterate over all constraints in the system for cons_idx in range(system.getNumConstraints()): idx1, idx2, value = system.getConstraintParameters(cons_idx) print( f"{psf.atom_list[idx1]}: {system.getParticleMass(idx1)}; {psf.atom_list[idx2]}: {system.getParticleMass(idx2)}" ) print(value) print("Finsihed.") assert system.getNumConstraints() == 2557
def test_lonepairs_in_dummy_region(): configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/jnk1-17124-18631.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) s1 = SystemStructure(configuration, "structure1") s2 = SystemStructure(configuration, "structure2") s1_to_s2 = ProposeMutationRoute(s1, s2) s1_to_s2.propose_common_core() s1_to_s2.finish_common_core() mutation_list = s1_to_s2.generate_mutations_to_common_core_for_mol1() i = IntermediateStateFactory( system=s1, configuration=configuration, ) assert s1_to_s2.dummy_region_cc1.connected_dummy_regions == [ [46, 22], [45, 44, 43, 26, 25], ] perform_mutations(configuration=configuration, i=i, mutation_list=mutation_list) mutation_list = s1_to_s2.generate_mutations_to_common_core_for_mol2() assert s1_to_s2.dummy_region_cc2.connected_dummy_regions == [[39], [40]]
def test_run_1a0q_1a07_rsfe_with_openMM(caplog): import logging # Test that TF can handel multiple dummy regions caplog.set_level(logging.DEBUG) import warnings from transformato import ( load_config_yaml, SystemStructure, IntermediateStateFactory, ProposeMutationRoute, ) from transformato.mutate import perform_mutations warnings.filterwarnings("ignore", module="parmed") workdir = get_test_output_dir() conf = f"{get_testsystems_dir()}/config/test-1a0q-1a07-rsfe.yaml" configuration = load_config_yaml( config=conf, input_dir="data/test_systems_mutation", output_dir=workdir ) s1 = SystemStructure(configuration, "structure1") s2 = SystemStructure(configuration, "structure2") s1_to_s2 = ProposeMutationRoute(s1, s2) s1_to_s2.propose_common_core() s1_to_s2.finish_common_core() # generate the mutation list for the original mutation_list = s1_to_s2.generate_mutations_to_common_core_for_mol1() print(mutation_list.keys()) i = IntermediateStateFactory( system=s1, configuration=configuration, ) perform_mutations(configuration=configuration, i=i, mutation_list=mutation_list) run_simulation(i.output_files, engine="openMM")
def test_generate_alchemical_path_for_toluene_commmon_core(): from transformato_testsystems.testsystems import \ mutate_toluene_to_methane_cc configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-toluene-methane-rsfe.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) output_files = mutate_toluene_to_methane_cc(configuration=configuration) assert len(output_files) == 16 with open( f"{get_test_output_dir()}/toluene-methane-rsfe/toluene/intst1/openmm_run.py", "r", ) as f: i = 0 for line in f.readlines(): if "# Set platform" in line and i == 0: i += 1 elif i == 1: assert "CPU" in line print(line) i += 1
def test_change_platform(): from transformato.constants import ( change_platform_to_test_platform, test_platform_openMM, test_platform_CHARMM, ) configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-toluene-methane-rsfe.yaml", input_dir=".", output_dir=get_test_output_dir(), ) change_platform_to_test_platform(configuration, engine="openMM") print(configuration["simulation"]["GPU"]) print(test_platform_openMM) if test_platform_openMM.upper() == "CPU": assert configuration["simulation"]["GPU"] == False else: assert configuration["simulation"]["GPU"] == True change_platform_to_test_platform(configuration, engine="CHARMM") print(configuration["simulation"]["GPU"]) print(test_platform_openMM) if test_platform_CHARMM.upper() == "CPU": assert configuration["simulation"]["GPU"] == False else: assert configuration["simulation"]["GPU"] == True
def test_generate_alchemical_path_for_7_CPI_to_common_core(): from transformato_testsystems.testsystems import mutate_7_CPI_to_2_CPI_cc configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-7-CPI-2-CPI-rsfe.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) output_files = mutate_7_CPI_to_2_CPI_cc(configuration=configuration) assert len(output_files) == 13
def test_generate_alchemical_path_acetylaceton_methyl_common_core(): from transformato_testsystems.testsystems import \ mutate_acetylaceton_methyl_common_core conf = f"{get_testsystems_dir()}/config/test-acetylacetone-tautomer-rsfe.yaml" configuration = load_config_yaml( config=conf, input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) # NOTE: for preprocessing input_dir is the output dir mutate_acetylaceton_methyl_common_core(configuration=configuration)
def test_generate_alchemical_path_for_acetylacetone_tautomer_pair(caplog): caplog.set_level(logging.WARNING) from .test_mutation import setup_acetylacetone_tautomer_pair conf = f"{get_testsystems_dir()}/config/test-acetylacetone-tautomer-rsfe.yaml" configuration = load_config_yaml( config=conf, input_dir=get_testsystems_dir(), output_dir=get_test_output_dir() ) (output_files_t1, output_files_t2), _, _ = setup_acetylacetone_tautomer_pair( configuration=configuration, nr_of_bonded_windows=8 )
def test_generate_alchemical_path_for_neopentane_common_core(): from transformato_testsystems.testsystems import \ mutate_neopentane_to_methane_cc configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-neopentane-methane-rsfe.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) output_files = mutate_neopentane_to_methane_cc(configuration=configuration) assert len(output_files) == 16
def test_run_methane_to_methane_cc_with_openMM(): from transformato.testsystems import mutate_methane_to_methane_cc workdir = get_test_output_dir() configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-toluene-methane-rsfe.yaml", input_dir="data/", output_dir=workdir, ) change_platform_to_test_platform(configuration=configuration, engine="openMM") output_files = mutate_methane_to_methane_cc(configuration=configuration) run_simulation(output_files)
def test_setup_system_for_methane_common_core(): from transformato_testsystems.testsystems import perform_generic_mutation print(get_testsystems_dir()) configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-toluene-methane-rsfe.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) print(configuration) output_files = perform_generic_mutation(configuration=configuration) assert len(output_files) == 3
def test_io_psf_files(): from openmm.app import CharmmPsfFile from transformato_testsystems.testsystems import mutate_toluene_to_methane_cc configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-toluene-methane-rsfe.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) output_files = mutate_toluene_to_methane_cc(configuration=configuration) output_path = output_files[0] print(output_path) CharmmPsfFile(f"{output_path}/lig_in_waterbox.psf") CharmmPsfFile(f"{output_path}/lig_in_waterbox_corr.psf")
def test_run_methane_to_methane_common_core_with_CHARMM(): from transformato.testsystems import mutate_methane_to_methane_cc workdir = get_test_output_dir() configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-toluene-methane-rsfe.yaml", input_dir="data/", output_dir=workdir, ) change_platform_to_test_platform(configuration=configuration, engine="CHARMM") output_files = mutate_methane_to_methane_cc(configuration=configuration) run_simulation(output_files, engine="CHARMM") f = "/".join(output_files[0].split("/")[:-3]) print(f) shutil.rmtree(f)
def test_run_1a0q_1a07_rsfe_with_openMM(caplog): # Test that TF can handel multiple dummy regions caplog.set_level(logging.DEBUG) conf = f"{get_testsystems_dir()}/config/test-1a0q-1a07-rsfe.yaml" configuration = load_config_yaml( config=conf, input_dir=get_testsystems_dir(), output_dir=get_test_output_dir() ) s1 = SystemStructure(configuration, "structure1") s2 = SystemStructure(configuration, "structure2") s1_to_s2 = ProposeMutationRoute(s1, s2) s1_to_s2.propose_common_core() s1_to_s2.finish_common_core() # generate the mutation list for the original mutation_list = s1_to_s2.generate_mutations_to_common_core_for_mol1() print(mutation_list.keys()) i = IntermediateStateFactory( system=s1, configuration=configuration, ) perform_mutations(configuration=configuration, i=i, mutation_list=mutation_list) run_simulation(i.output_files, engine="openMM") # Analysis with mda ddG_openMM_mda, dddG_mda, f_openMM_mda = postprocessing( configuration, name="1a0q", engine="openMM", analyze_traj_with="mda", num_proc=4, max_snapshots=50, ) print(f"Free energy difference using mda: {ddG_openMM_mda} +- {dddG_mda} [kT") # Analysis with mdtraj ddG_openMM_mtraj, dddG_mtraj, f_openMM_mtraj = postprocessing( configuration, name="1a0q", engine="openMM", max_snapshots=50, ) print( f"Free energy difference using mdtraj: {ddG_openMM_mtraj} +- {dddG_mtraj} [kT" ) assert np.isclose(ddG_openMM_mda, ddG_openMM_mda, rtol=0.2) assert np.isclose(dddG_mda, dddG_mda, rtol=0.2)
def test_run_2OJ9_tautomer_pair_with_openMM(caplog): caplog.set_level(logging.WARNING) from .test_mutation import setup_2OJ9_tautomer_pair_rbfe workdir = get_test_output_dir() conf = f"{get_testsystems_dir()}/config/test-2oj9-tautomer-pair-rsfe.yaml" configuration = load_config_yaml( config=conf, input_dir="data/", output_dir=workdir ) # NOTE: for preprocessing input_dir is the output dir change_platform_to_test_platform(configuration=configuration, engine="openMM") (output_files_t1, output_files_t2), _, _ = setup_2OJ9_tautomer_pair_rbfe( configuration=configuration ) run_simulation(output_files_t1) run_simulation(output_files_t2)
def test_run_acetylacetone_tautomer_pair(caplog): caplog.set_level(logging.WARNING) from .test_mutation import setup_acetylacetone_tautomer_pair workdir = get_test_output_dir() configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-acetylacetone-tautomer-rsfe.yaml", input_dir="data/", output_dir=workdir, ) change_platform_to_test_platform(configuration=configuration, engine="openMM") (output_files_t1, output_files_t2), _, _ = setup_acetylacetone_tautomer_pair( configuration=configuration ) run_simulation(output_files_t1) run_simulation(output_files_t2)
def test_run_acetylacetone_tautomer_pair_only_in_vacuum(caplog): caplog.set_level(logging.WARNING) from .test_mutation import setup_acetylacetone_tautomer_pair workdir = get_test_output_dir() conf = f"{get_testsystems_dir()}/config/test-acetylacetone-tautomer-rsfe.yaml" configuration = load_config_yaml( config=conf, input_dir="data/", output_dir=workdir ) # NOTE: for preprocessing input_dir is the output dir change_platform_to_test_platform(configuration=configuration, engine="openMM") (output_files_t1, output_files_t2), _, _ = setup_acetylacetone_tautomer_pair( configuration=configuration, nr_of_bonded_windows=16 ) run_simulation(output_files_t1, only_vacuum=True) run_simulation(output_files_t2, only_vacuum=True)
def test_run_28_1h1q_rbfe_with_openMM(): # Generating output for a run of the CDK2 Ligand System configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-28_1h1q_rbfe.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) s1 = SystemStructure(configuration, "structure1") s2 = SystemStructure(configuration, "structure2") s1_to_s2 = ProposeMutationRoute(s1, s2) s1_to_s2.propose_common_core() s1_to_s2.finish_common_core() mutation_list = s1_to_s2.generate_mutations_to_common_core_for_mol1() print(mutation_list.keys()) i = IntermediateStateFactory( system=s1, configuration=configuration, ) perform_mutations( configuration=configuration, i=i, mutation_list=mutation_list, nr_of_mutation_steps_charge=2, nr_of_mutation_steps_cc=2, ) run_simulation(i.output_files, engine="charmm") from transformato.utils import postprocessing ddG_openMM, dddG, f_openMM = postprocessing( configuration, name="cdk2-28", engine="openMM", max_snapshots=50, num_proc=4, analyze_traj_with="mda", ) print(f"Free energy difference: {ddG_openMM} +- {dddG} [kT")
def test_generate_alchemical_path_for_1a0q_1a07(caplog): # Test that TF can handel multiple dummy regions caplog.set_level(logging.INFO) conf = f"{get_testsystems_dir()}/config/test-1a0q-1a07-rsfe.yaml" configuration = load_config_yaml( config=conf, input_dir=get_testsystems_dir(), output_dir=get_test_output_dir() ) s1 = SystemStructure(configuration, "structure1") s2 = SystemStructure(configuration, "structure2") s1_to_s2 = ProposeMutationRoute(s1, s2) s1_to_s2.propose_common_core() s1_to_s2.finish_common_core() # generate the mutation list for the original mutation_list = s1_to_s2.generate_mutations_to_common_core_for_mol1() print(mutation_list.keys()) i = IntermediateStateFactory( system=s1, configuration=configuration, ) perform_mutations(configuration=configuration, i=i, mutation_list=mutation_list) assert i.current_step == 24
def test_run_28_1h1q_rbfe_production_with_CHARMM(): # Generating output for a run of the CDK2 Ligand System from transformato import ( IntermediateStateFactory, ProposeMutationRoute, SystemStructure, load_config_yaml, ) from transformato.mutate import perform_mutations configuration = load_config_yaml( config=f"{get_testsystems_dir()}/config/test-28_1h1q_rbfe.yaml", input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), ) s1 = SystemStructure(configuration, "structure1") s2 = SystemStructure(configuration, "structure2") s1_to_s2 = ProposeMutationRoute(s1, s2) s1_to_s2.propose_common_core() s1_to_s2.finish_common_core() mutation_list = s1_to_s2.generate_mutations_to_common_core_for_mol1() print(mutation_list.keys()) i = IntermediateStateFactory( system=s1, configuration=configuration, ) perform_mutations( configuration=configuration, i=i, mutation_list=mutation_list, nr_of_mutation_steps_charge=1, nr_of_mutation_steps_cc=1, )
def test_reading_of_coords(): env = "vacuum" output_files_t1, _ = get_output_files_2oj9_tautomer_pair() conf = f"{get_testsystems_dir()}/config/test-2oj9-tautomer-pair-rsfe.yaml" configuration = load_config_yaml( config=conf, input_dir=get_testsystems_dir(), output_dir=get_test_output_dir() ) # NOTE: for preprocessing input_dir is the output dir b = output_files_t1[0] print(b) traj_load = md.load_dcd( f"{b}/lig_in_{env}.dcd", f"{b}/lig_in_{env}.psf", ) print(traj_load.xyz[0]) traj_open = md.open(f"{b}/lig_in_{env}.dcd") xyz, unitcell_lengths, _ = traj_open.read() xyz = xyz / 10 print(xyz[0]) assert np.allclose(xyz[0], traj_load.xyz[0])
def test_run_28_1h1q_rsfe_analysis_with_CHARMM(): # Running the analysis, first the productions script needs to be finisehd # Change output dir # Check transformato/bin/charmm_eval_energy.sh for the correct name of the charmm # executable! from transformato import load_config_yaml from transformato.utils import postprocessing from transformato.utils import postprocessing configuration = load_config_yaml( input_dir=get_testsystems_dir(), output_dir=get_test_output_dir(), config=f"{get_testsystems_dir()}/config/test-28_1h1q_rbfe.yaml", ) ddG_openMM, dddG, f_openMM = postprocessing( configuration, name="cdk2-28", engine="CHARMM", max_snapshots=10, num_proc=1, analyze_traj_with="mdtraj", ) print(f"Free energy difference: {ddG_openMM} +- {dddG} [kT")