def test_get_setup_from_file(self):
        read = get_setup_from_file(self.golden_data_path / 'setup.json')

        expected = {
            "anm_lig": 10,
            "anm_rec": 10,
            "anm_seed": 324324,
            "glowworms": 10,
            "ligand_pdb": "2UUY_lig.pdb",
            "membrane": False,
            "noh": False,
            "noxt": True,
            "receptor_pdb": "2UUY_rec.pdb",
            "restraints": None,
            "starting_points_seed": 324324,
            "surface_density": 50.0,
            "swarm_radius": 10.0,
            "swarms": 5,
            "transmembrane": False,
            "use_anm": True,
            "verbose_parser": False,
            "write_starting_positions": False
        }

        assert read == expected
    def test_create_simulation_info_file(self):
        setup = get_setup_from_file(self.golden_data_path /
                                    'create_simulation_info_file' /
                                    'setup.json')

        class Args:
            pass

        args = Args()
        for k, v in setup.items():
            setattr(args, k, v)

        file_name = create_simulation_info_file(args, path=self.test_path)

        assert Path(file_name).name == 'lightdock.info'

        file_name = create_simulation_info_file(args, path=self.test_path)

        assert Path(file_name).name == 'lightdock.info.1'
Exemple #3
0
    def test_create_simulation_info_file(self):
        setup = get_setup_from_file(
            os.path.join(self.golden_data_path, 'create_simulation_info_file',
                         'setup.json'))

        class Args:
            pass

        args = Args()
        for k, v in setup.items():
            setattr(args, k, v)

        file_name = create_simulation_info_file(args, path=self.test_path)

        assert os.path.basename(file_name) == 'lightdock.info'

        file_name = create_simulation_info_file(args, path=self.test_path)

        assert os.path.basename(file_name) == 'lightdock.info.1'
Exemple #4
0
    def test_get_setup_from_file(self):
        read = get_setup_from_file(os.path.join(self.golden_data_path, 'setup.json'))

        expected = {
            "anm_lig": 10,
            "anm_rec": 10,
            "anm_seed": 324324,
            "ftdock_file": None,
            "glowworms": 10,
            "ligand_pdb": "2UUY_lig.pdb",
            "membrane": False,
            "noh": False,
            "noxt": True,
            "receptor_pdb": "2UUY_rec.pdb",
            "restraints": None,
            "starting_points_seed": 324324,
            "swarms": 5,
            "use_anm": True,
            "verbose_parser": False
        }

        assert read == expected
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
Exemple #6
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.")
                        help="number of glowworms",
                        type=valid_integer_number)
    # Optional, setup file
    parser.add_argument("--setup",
                        "-setup",
                        "-s",
                        help="Simulation setup file",
                        dest="setup_file",
                        metavar="setup_file",
                        type=valid_file,
                        default=None)

    args = parser.parse_args()

    # Load setup configuration if provided
    setup = get_setup_from_file(args.setup_file) if args.setup_file else None

    num_anm_rec = DEFAULT_NMODES_REC
    num_anm_lig = DEFAULT_NMODES_LIG
    if setup and setup['use_anm']:
        num_anm_rec = setup['anm_rec']
        num_anm_lig = setup['anm_lig']

    # Receptor
    structures = []
    for structure in get_lightdock_structures(args.receptor_structures):
        log.info("Reading %s receptor PDB file..." % structure)
        atoms, residues, chains = parse_complex_from_file(structure)
        structures.append({
            'atoms': atoms,
            'residues': residues,
Exemple #8
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.")
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.")
    # Ligand
    parser.add_argument("ligand_structures", help="ligand structures: PDB file or list of PDB files",
                        type=valid_file, metavar="ligand_structure")
    # Lightdock output file
    parser.add_argument("lightdock_output", help="lightdock output file",
                        type=valid_file, metavar="lightdock_output")
    # Number of glowworms
    parser.add_argument("glowworms", help="number of glowworms", type=valid_integer_number)
    # Optional, setup file
    parser.add_argument("--setup", "-setup", "-s", help="Simulation setup file",
                            dest="setup_file", metavar="setup_file", type=valid_file, default=None)

    args = parser.parse_args()

    # Load setup configuration if provided
    setup = get_setup_from_file(args.setup_file) if args.setup_file else None

    num_anm_rec = DEFAULT_NMODES_REC
    num_anm_lig = DEFAULT_NMODES_LIG
    if setup and setup['use_anm']:
        num_anm_rec = setup['anm_rec']
        num_anm_lig = setup['anm_lig']

    # Receptor
    structures = []
    for structure in get_lightdock_structures(args.receptor_structures):
        log.info("Reading %s receptor PDB file..." % structure)
        atoms, residues, chains = parse_complex_from_file(structure)
        structures.append({'atoms': atoms, 'residues': residues, 'chains': chains, 'file_name': structure})
        log.info("%s atoms, %s residues read." % (len(atoms), len(residues)))
    receptor = Complex.from_structures(structures)