def test_read_write(self): pdb_file = self.golden_data_path / 'nm_dna' / '1DIZ_lig.pdb.H' _, _, chains = parse_complex_from_file(pdb_file) molecule = Complex(chains) nmodes = calculate_nmodes(pdb_file, n_modes=10, molecule=molecule) write_nmodes(nmodes, self.test_path / 'test_nm') expected_nmodes = read_nmodes(self.golden_data_path / 'nm_dna' / 'lightdock_lig.nm.npy') other_nmodes = read_nmodes(self.test_path / 'test_nm.npy') assert np.allclose(expected_nmodes, other_nmodes)
def test_read_write(self): pdb_file = os.path.join(self.golden_data_path, 'nm_dna', '1DIZ_lig.pdb.H') atoms, residues, chains = parse_complex_from_file(pdb_file) molecule = Complex(chains) nmodes = calculate_nmodes(pdb_file, n_modes=10, molecule=molecule) write_nmodes(nmodes, os.path.join(self.test_path, 'test_nm')) expected_nmodes = read_nmodes( os.path.join(self.golden_data_path, 'nm_dna', 'lightdock_lig.nm.npy')) other_nmodes = read_nmodes(os.path.join(self.test_path, 'test_nm.npy')) assert np.allclose(expected_nmodes, other_nmodes)
def test_calculate_anm_protein_2(self): pdb_file = self.golden_data_path / 'nm_prot' / '2UUY_rec.pdb' _, _, chains = parse_complex_from_file(pdb_file) molecule = Complex(chains) nmodes = calculate_nmodes(pdb_file, n_modes=10, molecule=molecule) expected_nmodes = read_nmodes(self.golden_data_path / 'nm_prot' / 'lightdock_rec.nm.npy') assert np.allclose(expected_nmodes, nmodes)
def test_calculate_anm_protein_2(self): pdb_file = os.path.join(self.golden_data_path, 'nm_prot', '2UUY_rec.pdb') atoms, residues, chains = parse_complex_from_file(pdb_file) molecule = Complex(chains) nmodes = calculate_nmodes(pdb_file, n_modes=10, molecule=molecule) expected_nmodes = read_nmodes( os.path.join(self.golden_data_path, 'nm_prot', 'lightdock_rec.nm.npy')) assert np.allclose(expected_nmodes, nmodes)
# Read receptor log.info("Reading %s receptor PDB file..." % receptor_pdb) atoms, residues, chains = parse_complex_from_file(receptor_pdb) receptor = Complex(chains, atoms) log.info("%s atoms, %s residues read." % (len(atoms), len(residues))) # Read ligand log.info("Reading %s ligand PDB file..." % ligand_pdb) atoms, residues, chains = parse_complex_from_file(ligand_pdb) ligand = Complex(chains, atoms) log.info("%s atoms, %s residues read." % (len(atoms), len(residues))) try: nm_path = os.path.abspath(os.path.dirname(receptor_pdb)) nmodes_rec = read_nmodes( os.path.join(nm_path, DEFAULT_REC_NM_FILE + '.npy')) except: nmodes_rec = None try: nm_path = os.path.abspath(os.path.dirname(ligand_pdb)) nmodes_lig = read_nmodes( os.path.join(nm_path, DEFAULT_LIG_NM_FILE + '.npy')) except: nmodes_lig = None for step in xrange(0, num_steps + 1): try: # Parse each stored step file file_name = 'gso_%d.out' % step translation, rotation, nm_rec, nm_lig = parse_file( file_name, glowworm_id)
def run_simulation(parser): """Main program""" try: parser = CommandLineParser() args = parser.args # Read setup and add it to the actual args object setup = get_setup_from_file(args.setup_file) for k, v in setup.items(): setattr(args, k, v) info_file = create_simulation_info_file(args) log.info("simulation parameters saved to %s" % info_file) # Read input structures (use parsed ones) parsed_lightdock_receptor = os.path.join( os.path.dirname(args.receptor_pdb), DEFAULT_LIGHTDOCK_PREFIX % os.path.basename(args.receptor_pdb)) receptor = read_input_structure(parsed_lightdock_receptor, args.noxt, args.noh, args.verbose_parser) parsed_lightdock_ligand = os.path.join( os.path.dirname(args.ligand_pdb), DEFAULT_LIGHTDOCK_PREFIX % os.path.basename(args.ligand_pdb)) ligand = read_input_structure(parsed_lightdock_ligand, args.noxt, args.noh, args.verbose_parser) # CRITICAL to not break compatibility with previous results receptor.move_to_origin() ligand.move_to_origin() if args.use_anm: try: receptor.n_modes = read_nmodes( "%s%s" % (DEFAULT_REC_NM_FILE, NUMPY_FILE_SAVE_EXTENSION)) except: log.warning("No ANM found for receptor molecule") receptor.n_modes = None try: ligand.n_modes = read_nmodes( "%s%s" % (DEFAULT_LIG_NM_FILE, NUMPY_FILE_SAVE_EXTENSION)) except: log.warning("No ANM found for ligand molecule") ligand.n_modes = None starting_points_files = load_starting_positions( args.swarms, args.glowworms, args.use_anm, args.anm_rec, args.anm_lig) scoring_functions, adapters = set_scoring_function( parser, receptor, ligand) tasks = prepare_gso_tasks(parser, adapters, scoring_functions, starting_points_files) # Preparing the parallel execution kraken = Kraken(tasks, parser.args.cores, parser.args.profiling) log.info("Monster spotted") reports_queue = kraken.release() log.info("Finished.") except KeyboardInterrupt: log.info("Caught interrupt...") try: kraken.sink() except: pass log.info("bye.") except OSError as e: log.error("OS error found") try: kraken.sink() except: pass raise e
def run_simulation(parser): """Main program, includes MPI directives""" try: comm = MPI.COMM_WORLD parser = CommandLineParser() args = parser.args # Read setup and add it to the actual args object setup = get_setup_from_file(args.setup_file) for k, v in setup.items(): setattr(args, k, v) minion_id = comm.rank if minion_id == 0: info_file = create_simulation_info_file(args) log.info("simulation parameters saved to %s" % info_file) comm.Barrier() # Read input structures (use parsed ones) parsed_lightdock_receptor = os.path.join( os.path.dirname(args.receptor_pdb), DEFAULT_LIGHTDOCK_PREFIX % os.path.basename(args.receptor_pdb)) receptor = read_input_structure(parsed_lightdock_receptor, args.noxt, args.noh, args.verbose_parser) parsed_lightdock_ligand = os.path.join( os.path.dirname(args.ligand_pdb), DEFAULT_LIGHTDOCK_PREFIX % os.path.basename(args.ligand_pdb)) ligand = read_input_structure(parsed_lightdock_ligand, args.noxt, args.noh, args.verbose_parser) # CRITICAL to not break compatibility with previous results receptor.move_to_origin() ligand.move_to_origin() if args.use_anm: try: receptor.n_modes = read_nmodes( "%s%s" % (DEFAULT_REC_NM_FILE, NUMPY_FILE_SAVE_EXTENSION)) except: log.warning("No ANM found for receptor molecule") receptor.n_modes = None try: ligand.n_modes = read_nmodes( "%s%s" % (DEFAULT_LIG_NM_FILE, NUMPY_FILE_SAVE_EXTENSION)) except: log.warning("No ANM found for ligand molecule") ligand.n_modes = None starting_points_files = load_starting_positions( args.swarms, args.glowworms, args.use_anm, args.anm_rec, args.anm_lig) comm.Barrier() num_workers = comm.size for worker_id in range(num_workers): if worker_id == minion_id: starting_points_files = glob.glob( 'init/initial_positions*.dat') scoring_functions, adapters = set_scoring_function( parser, receptor, ligand, minion_id) # Check if scoring functions are compatible with ANM if activated if args.use_anm and minion_id == 0: for s in scoring_functions: if not s.anm_support: raise NotSupportedInScoringError( f"ANM is activated while {type(s).__name__} has no support for it" ) # Prepare tasks depending on swarms to simulate if parser.args.swarm_list: swarm_ids = parser.args.swarm_list if min(swarm_ids) < 0 or max( swarm_ids) >= parser.args.swarms: raise SwarmNumError("Wrong list of swarms") else: swarm_ids = list(range(parser.args.swarms)) for id_swarm in swarm_ids: if worker_id == (id_swarm % num_workers): print('GSO cluster %d - Minion %d' % (id_swarm, minion_id)) gso = set_gso( parser.args.glowworms, adapters, scoring_functions, starting_points_files[id_swarm], parser.args.gso_seed, parser.args.translation_step, parser.args.rotation_step, parser.args.configuration_file, parser.args.use_anm, parser.args.nmodes_step, parser.args.anm_rec, parser.args.anm_lig, parser.args.local_minimization) saving_path = "%s%d" % (DEFAULT_SWARM_FOLDER, id_swarm) task = GSOClusterTask(id_swarm, gso, parser.args.steps, saving_path) task.run() comm.Barrier() except NotSupportedInScoringError as score_error: log.error("Error found in selected scoring function:") log.error(score_error) except KeyboardInterrupt: log.info("Caught interrupt...") log.info("bye.")
log.info("%s atoms, %s residues read." % (len(atoms), len(residues))) ligand = Complex.from_structures(structures) # Read ranking file predictions = read_ranking_file(args.lightdock_ranking_file) # Destination path is the same as the lightdock output destination_path = os.path.dirname(args.lightdock_ranking_file) # If normal modes used, need to read them nmodes_rec = nmodes_lig = None nm_path = os.path.abspath(os.path.dirname(args.receptor_structures)) # Check NM file for receptor nm_rec_file = os.path.join(nm_path, DEFAULT_REC_NM_FILE + '.npy') if os.path.exists(nm_rec_file): nmodes_rec = read_nmodes(nm_rec_file) # Check NM file for ligand nm_lig_file = os.path.join(nm_path, DEFAULT_LIG_NM_FILE + '.npy') if os.path.exists(nm_lig_file): nmodes_lig = read_nmodes(nm_lig_file) for i, glowworm in enumerate(predictions): if i < args.top: receptor_pose = receptor.atom_coordinates[ glowworm.receptor_id].clone() ligand_pose = ligand.atom_coordinates[glowworm.ligand_id].clone() # Use normal modes if provided: if nmodes_rec.any(): for nm in range(num_anm_rec): rec_extent = np.array( [float(x) for x in glowworm.pose[7:7 + num_anm_rec]])
def run_simulation(parser): """Main program, includes MPI directives""" try: comm = MPI.COMM_WORLD parser = CommandLineParser() args = parser.args # Read setup and add it to the actual args object setup = get_setup_from_file(args.setup_file) for k, v in setup.iteritems(): setattr(args, k, v) minion_id = comm.rank if minion_id == 0: info_file = create_simulation_info_file(args) log.info("simulation parameters saved to %s" % info_file) comm.Barrier() # Read input structures receptor = read_input_structure(args.receptor_pdb, args.noxt) ligand = read_input_structure(args.ligand_pdb, args.noxt) # CRITICAL to not break compatibility with previous results receptor.move_to_origin() ligand.move_to_origin() if args.use_anm: try: receptor.n_modes = read_nmodes( "%s%s" % (DEFAULT_REC_NM_FILE, NUMPY_FILE_SAVE_EXTENSION)) except: log.warning("No ANM found for receptor molecule") receptor.n_modes = None try: ligand.n_modes = read_nmodes( "%s%s" % (DEFAULT_LIG_NM_FILE, NUMPY_FILE_SAVE_EXTENSION)) except: log.warning("No ANM found for ligand molecule") ligand.n_modes = None starting_points_files = load_starting_positions( args.swarms, args.glowworms, args.use_anm, args.anm_rec, args.anm_lig) comm.Barrier() num_workers = comm.size for worker_id in xrange(num_workers): if worker_id == minion_id: starting_points_files = glob.glob( 'init/initial_positions*.dat') scoring_functions, adapters = set_scoring_function( parser, receptor, ligand, minion_id) for id_swarm in xrange(parser.args.swarms): if worker_id == (id_swarm % num_workers): print 'GSO cluster %d - Minion %d' % (id_swarm, minion_id) gso = set_gso( parser.args.glowworms, adapters, scoring_functions, starting_points_files[id_swarm], parser.args.gso_seed, parser.args.translation_step, parser.args.rotation_step, parser.args.configuration_file, parser.args.use_anm, parser.args.nmodes_step, parser.args.anm_rec, parser.args.anm_lig, parser.args.local_minimization) saving_path = "%s%d" % (DEFAULT_SWARM_FOLDER, id_swarm) task = GSOClusterTask(id_swarm, gso, parser.args.steps, saving_path) task.run() comm.Barrier() except KeyboardInterrupt: log.info("Caught interrupt...") log.info("bye.")
# Read receptor log.info("Reading %s receptor PDB file..." % receptor_pdb) atoms, residues, chains = parse_complex_from_file(receptor_pdb) receptor = Complex(chains, atoms) log.info("%s atoms, %s residues read." % (len(atoms), len(residues))) # Read ligand log.info("Reading %s ligand PDB file..." % ligand_pdb) atoms, residues, chains = parse_complex_from_file(ligand_pdb) ligand = Complex(chains, atoms) log.info("%s atoms, %s residues read." % (len(atoms), len(residues))) try: nm_path = os.path.abspath(os.path.dirname(receptor_pdb)) nmodes_rec = read_nmodes(os.path.join(nm_path, DEFAULT_REC_NM_FILE + '.npy')) except: nmodes_rec = None try: nm_path = os.path.abspath(os.path.dirname(ligand_pdb)) nmodes_lig = read_nmodes(os.path.join(nm_path, DEFAULT_LIG_NM_FILE + '.npy')) except: nmodes_lig = None for step in xrange(0, num_steps+1): try: # Parse each stored step file file_name = 'gso_%d.out' % step translation, rotation, nm_rec, nm_lig = parse_file(file_name, glowworm_id) receptor_pose = receptor.atom_coordinates[0].clone()
def run_simulation(parser): """Main program, includes MPI directives""" try: comm = MPI.COMM_WORLD parser = CommandLineParser() args = parser.args # Read setup and add it to the actual args object setup = get_setup_from_file(args.setup_file) for k, v in setup.iteritems(): setattr(args, k, v) minion_id = comm.rank if minion_id == 0: info_file = create_simulation_info_file(args) log.info("simulation parameters saved to %s" % info_file) comm.Barrier() # Read input structures receptor = read_input_structure(args.receptor_pdb, args.noxt) ligand = read_input_structure(args.ligand_pdb, args.noxt) # CRITICAL to not break compatibility with previous results receptor.move_to_origin() ligand.move_to_origin() if args.use_anm: try: receptor.n_modes = read_nmodes("%s%s" % (DEFAULT_REC_NM_FILE, NUMPY_FILE_SAVE_EXTENSION) ) except: log.warning("No ANM found for receptor molecule") receptor.n_modes = None try: ligand.n_modes = read_nmodes("%s%s" % (DEFAULT_LIG_NM_FILE, NUMPY_FILE_SAVE_EXTENSION) ) except: log.warning("No ANM found for ligand molecule") ligand.n_modes = None starting_points_files = load_starting_positions(args.swarms, args.glowworms, args.use_anm, args.anm_rec, args.anm_lig) comm.Barrier() num_workers = comm.size for worker_id in xrange(num_workers): if worker_id == minion_id: starting_points_files = glob.glob('init/initial_positions*.dat') scoring_functions, adapters = set_scoring_function(parser, receptor, ligand, minion_id) for id_swarm in xrange(parser.args.swarms): if worker_id == (id_swarm % num_workers): print 'GSO cluster %d - Minion %d' % (id_swarm, minion_id) gso = set_gso(parser.args.glowworms, adapters, scoring_functions, starting_points_files[id_swarm], parser.args.gso_seed, parser.args.translation_step, parser.args.rotation_step, parser.args.configuration_file, parser.args.use_anm, parser.args.nmodes_step, parser.args.anm_rec, parser.args.anm_lig, parser.args.local_minimization) saving_path = "%s%d" % (DEFAULT_SWARM_FOLDER, id_swarm) task = GSOClusterTask(id_swarm, gso, parser.args.steps, saving_path) task.run() comm.Barrier() except KeyboardInterrupt: log.info("Caught interrupt...") log.info("bye.")
log.info("%s atoms, %s residues read." % (len(atoms), len(residues))) ligand = Complex.from_structures(structures) # Read ranking file glowworms = read_lightdock_output(args.lightdock_ranking_file, initial=1, final=args.top) # Destination path is the same as the lightdock output destination_path = os.path.dirname(args.lightdock_ranking_file) # If normal modes used, need to read them nmodes_rec = nmodes_lig = None nm_path = os.path.abspath(os.path.dirname(args.receptor_structures)) # Check NM file for receptor nm_rec_file = os.path.join(nm_path, DEFAULT_REC_NM_FILE + '.npy') if os.path.exists(nm_rec_file): nmodes_rec = read_nmodes(nm_rec_file) # Check NM file for ligand nm_lig_file = os.path.join(nm_path, DEFAULT_LIG_NM_FILE + '.npy') if os.path.exists(nm_lig_file): nmodes_lig = read_nmodes(nm_lig_file) for i, glowworm in enumerate(glowworms): receptor_pose = receptor.atom_coordinates[glowworm.receptor_id].clone() ligand_pose = ligand.atom_coordinates[glowworm.ligand_id].clone() # Use normal modes if provided: if nmodes_rec.any(): for nm in range(DEFAULT_NMODES_REC): rec_extent = np.array([float(x) for x in glowworm.pose[7:7 + DEFAULT_NMODES_REC]]) receptor_pose.coordinates += nmodes_rec[nm] * rec_extent[nm] if nmodes_lig.any(): for nm in range(DEFAULT_NMODES_LIG):