Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    # 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
Example #7
0
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.")
Example #8
0
        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]])
Example #9
0
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()
Example #11
0
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.")
Example #12
0
        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):