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)
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)