Product Specific Modules¶
MacroModel¶
The macromodel package helps to set up and run MacroModel tasks. To use this module productively, you should be familiar with the MacroModel Reference Manual. As a starting point, see the documentation for the ComUtil and SbcUtil classes.
A few examples of simplified scripts follow.
Set up and run a Monte Carlo multiple minimum conformation search job with non-default options:
import sys
import schrodinger.application.macromodel.utils as mmodutils
from schrodinger.job import jobcontrol
mcu = mmodutils.ComUtil(ffld='mmffs')
# Use extended torsion sampling.
mcu.AUTO[8] = 3
# Write the com file for a Monte Carlo multiple minimum conformation
# search. (To actually run this script, you need to set
# input_structure_file.)
com_file = mcu.mcmm(input_structure_file)
cmd_args = mcu.getLaunchCommand(com_file)
job = jobcontrol.launch_job(cmd_args)
job.wait()
print(f"MCMM job status: {job.Status}")
mcmm_output_file = job.StructureOutputFile
Set up and run a geometry minimization with restraints defined by an Atom
Selection Language expression. This is specified within a MacroModel
substructure file with the ASL2
code.
import schrodinger.application.macromodel.utils as mmodutils
from schrodinger.job import jobcontrol
mcu = mmodutils.ComUtil(subs=True)
# Write the com file for a geometry optimization.
# (To run this script, you should set input_structure_file. For the
# script to do something interesting, the input structure file should
# have more than one molecule. :-)
com_file = mcu.mini(input_structure_file)
# Set up the MacroModel substructure file.
sbu = mmodutils.SbcUtil()
# Specify the force constant for Cartesian restraints.
sbu.ASL2[1] = 200
# Specify the ASL identifying the restrained atoms.
sbu.ASL2[2] = 'mol.n 1'
sbu_args = [com_file, 'ASL2']
sbc_file = sbu.writeSbcFile(sbu_args)
cmd_args = mcu.getLaunchCommand(com_file)
job = jobcontrol.launch_job(cmd_args)
job.wait()
print(f"MINI job status: {job.Status}")
mini_output_file = job.StructureOutputFile
Set up and run a systematic pseudo-Monte Carlo conformation search,
dynamically assigning restraints to a ligand core (SUBS
and FXAT
):
import schrodinger.application.macromodel.utils as mmodutils
from schrodinger.structutils import analyze
from schrodinger import structure
from schrodinger.job import jobcontrol
mcu = mmodutils.ComUtil(subs=True)
# Write the com file for a systematic pseudo-Monte Carlo multiple
# minimum conformation search.
com_file = mcu.spmc(input_structure_file)
# Find the atoms to be restrained via ASL and SMARTS; anything in a
# 6-membered ring.
st = next(structure.StructureReader(input_structure_file))
core_pattern = 'SMARTS. "r6"'
core_atoms = analyze.evaluate_asl(st, f"withinbonds 1 {core_pattern}")
attachment_atoms = analyze.evaluate_asl(st, f"not withinbonds 1 {core_pattern}")
# Set up and write the substructure file with the restraints.
sbu = mmodutils.SbcUtil()
sbc_args = [com_file]
sbc_args.extend(sbu.setSubs(attachment_atoms))
sbc_args.extend(sbu.setFixed(core_atoms))
sbu.writeSbcFile(sbc_args)
cmd_args = mcu.getLaunchCommand(com_file)
job = jobcontrol.launch_job(cmd_args)
job.wait()
print(f"SPMC job status: {job.Status}")
spmc_output_file = job.StructureOutputFile
Prime¶
The prime package contains modules for reading and writing Prime input files and preparing structure for use with Prime.
The protein package contains other modules for protein-related tasks, such as:
The assignment module for optimizing hydroxyl, thiol and water orientiations, Chi-flips of asparagine, glutamine and histidine, and protonation states of aspartic acid, glutamic acid, and histidine.
The captermini module for capping uncapped terminal residues.
The findhets module for finding het (non-protein) compounds in structures.
The rotamers module provides a rotamer library that can be applied to protein sidechains.
- The
adjust_residue_numbering_panel.py
script in $SCHRODINGER/mmshare-vX.Y/python/common
contains an example of protein structure alignment. The script also renumbers protein residues based on the alignment.
In addition, the `schrodinger.structutils.build`_ module contains a useful
mutate
function.
Here is an example of residue mutation and rotamer-library sampling:
from schrodinger.structutils import build
from schrodinger.protein import rotamers
residue = st.residue[index_of_residue_to_mutate]
# Here, mut_type is the three-letter code for the new residue.
build.mutate(st, residue.atom[1], mut_type)
rotamer_lib = rotamers.Rotamers( st, residue.atom[1] )
for rotamer in rotamer_lib.rotamers:
rotamer.apply()
# Operate on the new structure - compute energy, analyze or write
# the structure.
The prepwizard module also contains useful functions for manipulating protein structures. For example, to fill missing loops in a protein structure, based on a FASTA file sequence:
import schrodinger.application.prepwizard as pw
filled_st = pw.fill_missing_loops(input_st, fasta_file, prime_jobname)