Esempio n. 1
0
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),
        })
Esempio n. 2
0
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),
    })
Esempio n. 3
0
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)
Esempio n. 4
0
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)