def process_pdb(model, attribution_fn, pdbfile, outpath, input_dim, radius=12, bs=16): mol = PDBComplex() mol.output_path = outpath mol.load_pdb(pdbfile, as_string=False) for ligand in mol.ligands: mol.characterize_complex(ligand) create_folder_if_not_exists(outpath) complexes = [ VisualizerDataWithMolecularInfo(mol, site) for site in sorted(mol.interaction_sets) if not len(mol.interaction_sets[site].interacting_res) == 0 ] [ visualize_in_pymol(model, attribution_fn=attribution_fn, output_dir=outpath, plcomplex=plcomplex, input_dim=input_dim, radius=radius, bs=bs) for plcomplex in complexes ] print()
def process_pdb(pdbfile, outpath, as_string=False, outputprefix='report'): """Analysis of a single PDB file. Can generate textual reports XML, PyMOL session files and images as output.""" if not as_string: pdb_file_name = pdbfile.split('/')[-1] startmessage = f'starting analysis of {pdb_file_name}' else: startmessage = 'starting analysis from STDIN' logger.info(startmessage) mol = PDBComplex() mol.output_path = outpath mol.load_pdb(pdbfile, as_string=as_string) # @todo Offers possibility for filter function from command line (by ligand chain, position, hetid) for ligand in mol.ligands: mol.characterize_complex(ligand) create_folder_if_not_exists(outpath) # Generate the report files streport = StructureReport(mol, outputprefix=outputprefix) config.MAXTHREADS = min(config.MAXTHREADS, len(mol.interaction_sets)) ###################################### # PyMOL Visualization (parallelized) # ###################################### if config.PYMOL or config.PICS: from plip.visualization.visualize import visualize_in_pymol complexes = [ VisualizerData(mol, site) for site in sorted(mol.interaction_sets) if not len(mol.interaction_sets[site].interacting_res) == 0 ] if config.MAXTHREADS > 1: logger.info( f'generating visualizations in parallel on {config.MAXTHREADS} cores' ) parfn = parallel_fn(visualize_in_pymol) parfn(complexes, processes=config.MAXTHREADS) else: [visualize_in_pymol(plcomplex) for plcomplex in complexes] if config.XML: # Generate report in xml format streport.write_xml(as_string=config.STDOUT) if config.TXT: # Generate report in txt (rst) format streport.write_txt(as_string=config.STDOUT)