Example #1
0
def screen_molecules(screener, mols_to_screen, activity, conformers_dir,
                     output_name):
    """Run the ligand screener and write out the screened conformations.
    Return sorted list of ranked scores.

    :param screener:
    :param mols_to_screen: Screening set
    :param activity: 1 if the molecule is active, 0 if it's a decoy
    :param nconformers: Number of conformers to screen for each molecule in screening set
    :param nthreads: Number of threads on which to run the conformer generation
    :param output_name: File name for the result molecules
    :return: sorted list of ranked scores
    """
    screen_set = [m for m in MoleculeReader(mols_to_screen)
                  ]  ### Read the molecules to screen
    scores = []

    molwriter = MoleculeWriter(output_name)
    for mol in screen_set:
        mol_id = mol.identifier
        list_of_conformers_files = read_mol2_file(conformers_dir)
        for conformers_file in list_of_conformers_files:
            if conformers_file.startswith(mol_id):
                print(conformers_file)
                conformers_file_path = os.path.join(conformers_dir,
                                                    conformers_file)
                print(conformers_file_path)

                conformers = [[
                    x for x in MoleculeReader(conformers_file_path)
                ]]
                print(type(conformers))
                print("yeah!!!!!! start screening")
                res = screener.screen(conformers)  # Screening step
                scores.extend([(r.score, activity, r.identifier) for r in res])
                # Write results
                for r in res:
                    molwriter.write(r.molecule)
    molwriter.close()

    return sorted(scores)
Example #2
0
def screen_molecules(screener, mols_to_screen, activity, nconformers,
                     output_name):
    """Run the ligand screener and write out the screened conformations.
    Return sorted list of ranked scores.

    :param screener:
    :param mols_to_screen: Screening set
    :param activity: 1 if the molecule is active, 0 if it's a decoy
    :param nconformers: Number of conformers to screen for each molecule in screening set
    :param nthreads: Number of threads on which to run the conformer generation
    :param output_name: File name for the result molecules
    :return: sorted list of ranked scores
    """
    screen_set = [m for m in MoleculeReader(mols_to_screen)
                  ]  ### Read the molecules to screen
    scores = []
    molwriter = MoleculeWriter(output_name)
    for mol in screen_set:

        # If nconformers=0 the input conformation is used, otherwise the CSD-driven conformer
        # generator is called and a number of conformations equal to nconformers is generated.
        if nconformers == 0:
            confs = [[standardise(mol)]]
        else:
            try:
                confs = generate_confs(mol, nconformers, nthreads)
            except:
                confs = [[standardise(mol)]]
        res = screener.screen(confs)  # Screening step
        scores.extend([(r.score, activity, r.identifier) for r in res])
        # Write results
        for r in res:
            molwriter.write(r.molecule)
    molwriter.close()

    return sorted(scores)