def loopmodel_template(template, missing_residues, overwrite_structures=False): template_filepath = os.path.abspath(os.path.join(ensembler.core.default_project_dirnames.templates_structures_modeled_loops, template.id + '-pdbfixed.pdb')) output_pdb_filepath = os.path.abspath(os.path.join(ensembler.core.default_project_dirnames.templates_structures_modeled_loops, template.id + '.pdb')) loop_filepath = os.path.abspath(os.path.join(ensembler.core.default_project_dirnames.templates_structures_modeled_loops, template.id + '.loop')) output_score_filepath = os.path.abspath(os.path.join(ensembler.core.default_project_dirnames.templates_structures_modeled_loops, template.id + '-loopmodel-score.sc')) log_filepath = os.path.abspath(os.path.join(ensembler.core.default_project_dirnames.templates_structures_modeled_loops, template.id + '-loopmodel-log.yaml')) if not overwrite_structures: if os.path.exists(log_filepath): return logfile = ensembler.core.LogFile(log_filepath) write_loop_file(template, missing_residues) starttime = datetime.datetime.utcnow() if len(missing_residues) == 0: loopmodel_output = LoopmodelOutput(successful=True, no_missing_residues=True) else: loopmodel_output = run_loopmodel(template_filepath, loop_filepath, output_pdb_filepath, output_score_filepath) if not loopmodel_output.successful: logger.error('MPI rank %d Loopmodel error for template %s - see logfile' % (mpistate.rank, template.id)) timedelta = datetime.datetime.utcnow() - starttime logfile.log({ 'templateid': str(template.id), 'no_missing_residues': loopmodel_output.no_missing_residues, 'loopmodel_output': loopmodel_output.output_text, 'mpi_rank': mpistate.rank, 'successful': loopmodel_output.successful, 'exception': loopmodel_output.exception, 'loopmodel_exception': loopmodel_output.loopmodel_exception, 'traceback': loopmodel_output.traceback, 'timing': ensembler.core.strf_timedelta(timedelta), })
def loopmodel_template(template, missing_residues, overwrite_structures=False): template_filepath = os.path.abspath( os.path.join( ensembler.core.default_project_dirnames. templates_structures_modeled_loops, template.id + '-pdbfixed.pdb')) output_pdb_filepath = os.path.abspath( os.path.join( ensembler.core.default_project_dirnames. templates_structures_modeled_loops, template.id + '.pdb')) loop_filepath = os.path.abspath( os.path.join( ensembler.core.default_project_dirnames. templates_structures_modeled_loops, template.id + '.loop')) output_score_filepath = os.path.abspath( os.path.join( ensembler.core.default_project_dirnames. templates_structures_modeled_loops, template.id + '-loopmodel-score.sc')) log_filepath = os.path.abspath( os.path.join( ensembler.core.default_project_dirnames. templates_structures_modeled_loops, template.id + '-loopmodel-log.yaml')) if not overwrite_structures: if os.path.exists(log_filepath): return logfile = ensembler.core.LogFile(log_filepath) write_loop_file(template, missing_residues) starttime = datetime.datetime.utcnow() if len(missing_residues) == 0: loopmodel_output = LoopmodelOutput(successful=True, no_missing_residues=True) else: loopmodel_output = run_loopmodel(template_filepath, loop_filepath, output_pdb_filepath, output_score_filepath) if not loopmodel_output.successful: logger.error( 'MPI rank %d Loopmodel error for template %s - see logfile' % (mpistate.rank, template.id)) timedelta = datetime.datetime.utcnow() - starttime logfile.log({ 'templateid': str(template.id), 'no_missing_residues': loopmodel_output.no_missing_residues, 'loopmodel_output': loopmodel_output.output_text, 'mpi_rank': mpistate.rank, 'successful': loopmodel_output.successful, 'exception': loopmodel_output.exception, 'loopmodel_exception': loopmodel_output.loopmodel_exception, 'traceback': loopmodel_output.traceback, 'timing': ensembler.core.strf_timedelta(timedelta), })
def pdbfix_template(template_full_seq, overwrite_structures=False): """ Parameters ---------- template_full_seq: BioPython SeqRecord full UniProt sequence for span of the template (including unresolved residues) overwrite_structures: bool Returns ------- fixer.missingResidues """ try: template_pdbfixed_filepath = os.path.join( ensembler.core.default_project_dirnames.templates_structures_modeled_loops, template_full_seq.id + '-pdbfixed.pdb' ) seq_pdbfixed_filepath = os.path.join( ensembler.core.default_project_dirnames.templates_structures_modeled_loops, template_full_seq.id + '-pdbfixed.fasta' ) import pdbfixer import simtk.openmm.app template_filepath = os.path.join( ensembler.core.default_project_dirnames.templates_structures_resolved, template_full_seq.id + '.pdb' ) fixer = pdbfixer.PDBFixer(filename=template_filepath) chainid = next(fixer.structure.iter_chains()).chain_id seq_obj = simtk.openmm.app.internal.pdbstructure.Sequence(chainid) for r in template_full_seq.seq: resi3 = Bio.SeqUtils.seq3(r).upper() seq_obj.residues.append(resi3) fixer.structure.sequences.append(seq_obj) fixer.findMissingResidues() remove_missing_residues_at_termini(fixer, len_full_seq=len(template_full_seq.seq)) if not overwrite_structures and os.path.exists(template_pdbfixed_filepath): return fixer.missingResidues fixer.findMissingAtoms() (newTopology, newPositions, newAtoms, existingAtomMap) = fixer._addAtomsToTopology(True, True) fixer.topology = newTopology fixer.positions = newPositions with open(template_pdbfixed_filepath, 'w') as template_pdbfixed_file: simtk.openmm.app.PDBFile.writeFile( fixer.topology, fixer.positions, file=template_pdbfixed_file ) # Write sequence to file seq_pdbfixed = ''.join([Bio.SeqUtils.seq1(r.name) for r in fixer.topology.residues()]) seq_record_pdbfixed = SeqRecord(Seq(seq_pdbfixed), id=template_full_seq.id, description=template_full_seq.id) Bio.SeqIO.write([seq_record_pdbfixed], seq_pdbfixed_filepath, 'fasta') return fixer.missingResidues except (KeyboardInterrupt, ImportError): raise except Exception as e: trbk = traceback.format_exc() log_filepath = os.path.abspath(os.path.join( ensembler.core.default_project_dirnames.templates_structures_modeled_loops, template_full_seq.id + '-pdbfixer-log.yaml' )) logfile = ensembler.core.LogFile(log_filepath) logfile.log({ 'templateid': str(template_full_seq.id), 'exception': e, 'traceback': ensembler.core.literal_str(trbk), 'mpi_rank': mpistate.rank, }) logger.error( 'MPI rank %d pdbfixer error for template %s - see logfile' % (mpistate.rank, template_full_seq.id) ) logger.debug(e) logger.debug(trbk)
def pdbfix_template(template_full_seq, overwrite_structures=False): """ Parameters ---------- template_full_seq: BioPython SeqRecord full UniProt sequence for span of the template (including unresolved residues) overwrite_structures: bool Returns ------- fixer.missingResidues """ try: template_pdbfixed_filepath = os.path.join( ensembler.core.default_project_dirnames. templates_structures_modeled_loops, template_full_seq.id + '-pdbfixed.pdb') seq_pdbfixed_filepath = os.path.join( ensembler.core.default_project_dirnames. templates_structures_modeled_loops, template_full_seq.id + '-pdbfixed.fasta') import pdbfixer import simtk.openmm.app template_filepath = os.path.join( ensembler.core.default_project_dirnames. templates_structures_resolved, template_full_seq.id + '.pdb') fixer = pdbfixer.PDBFixer(filename=template_filepath) chainid = next(fixer.topology.chains()).id sequence = [ Bio.SeqUtils.seq3(r).upper() for r in template_full_seq.seq ] seq_obj = pdbfixer.pdbfixer.Sequence(chainid, sequence) fixer.sequences.append(seq_obj) fixer.findMissingResidues() remove_missing_residues_at_termini(fixer, len_full_seq=len( template_full_seq.seq)) if not overwrite_structures and os.path.exists( template_pdbfixed_filepath): return fixer.missingResidues fixer.findMissingAtoms() (newTopology, newPositions, newAtoms, existingAtomMap) = fixer._addAtomsToTopology(True, True) fixer.topology = newTopology fixer.positions = newPositions with open(template_pdbfixed_filepath, 'w') as template_pdbfixed_file: simtk.openmm.app.PDBFile.writeFile(fixer.topology, fixer.positions, file=template_pdbfixed_file) # Write sequence to file seq_pdbfixed = ''.join( [Bio.SeqUtils.seq1(r.name) for r in fixer.topology.residues()]) seq_record_pdbfixed = SeqRecord(Seq(seq_pdbfixed), id=template_full_seq.id, description=template_full_seq.id) Bio.SeqIO.write([seq_record_pdbfixed], seq_pdbfixed_filepath, 'fasta') return fixer.missingResidues except (KeyboardInterrupt, ImportError): raise except Exception as e: trbk = traceback.format_exc() log_filepath = os.path.abspath( os.path.join( ensembler.core.default_project_dirnames. templates_structures_modeled_loops, template_full_seq.id + '-pdbfixer-log.yaml')) logfile = ensembler.core.LogFile(log_filepath) logfile.log({ 'templateid': str(template_full_seq.id), 'exception': e, 'traceback': ensembler.core.literal_str(trbk), 'mpi_rank': mpistate.rank, }) logger.error( 'MPI rank %d pdbfixer error for template %s - see logfile' % (mpistate.rank, template_full_seq.id)) logger.debug(e) logger.debug(trbk)