Creating a cgmodel

The CGModel object contains the topology, force field definitions, and initial particle positions of a coarse-grained model. The following example creates a homo-oligomer model with 1 backbone bead and 1 sidechain bead per residue. Particle positions are generated using the random builder included in cg_openmm.

from simtk import unit
from cg_openmm.cg_model.cgmodel import CGModel

# Specify backbone (bb) and sidechain (sc) particle parameters:
sigma = 0.3 * unit.nanometer
epsilon = 2 * unit.kilojoule_per_mole
mass = 100 * unit.amu

bb = {"particle_type_name": "bb", "sigma": sigma, "epsilon": epsilon, "mass": mass}
sc = {"particle_type_name": "sc", "sigma": sigma, "epsilon": epsilon, "mass": mass}

# Define monomer (residue):
A = {
    "monomer_name": "A",
    "particle_sequence": [bb, sc],
    "bond_list": [[0, 1]],
    "start": 0,
    "end": 0}

# Specify bonded parameters:
bond_lengths = {
    "default_bond_length": 0.35 * unit.nanometer,
    "bb_bb_bb_bond_length": 0.40 * unit.nanometer}

bond_force_constants = {
    "default_bond_force_constant": 1000 * unit.kilojoule_per_mole / unit.nanometer**2}

equil_bond_angles = {
    "default_equil_bond_angle": 120.0 * unit.degrees,
    "bb_bb_bb_equil_bond_angle": 150.0 * unit.degrees}

bond_angle_force_constants = {
    "default_bond_angle_force_constant": 100.0 * unit.kilojoule_per_mole / unit.radian**2}

torsion_phase_angles = {
    "default_torsion_phase_angle": 150 * unit.degrees}

torsion_force_constants = {
    "default_torsion_force_constant": 2.0 * unit.kilojoule_per_mole,
    "bb_bb_bb_bb_torsion_force_constant": 5.0 * unit.kilojoule_per_mole}

torsion_periodicities = {
    "default_torsion_periodicity": 1}

# Define oligomer sequence:
sequence = 12 * [A]

# Initial particle positions determined from random builder

cgmodel = CGModel(
    particle_type_list=[bb, sc],
    bond_lengths=bond_lengths,
    bond_force_constants=bond_force_constants,
    bond_angle_force_constants=bond_angle_force_constants,
    torsion_force_constants=torsion_force_constants,
    equil_bond_angles=equil_bond_angles,
    torsion_phase_angles=torsion_phase_angles,
    torsion_periodicities=torsion_periodicities,
    include_nonbonded_forces=True,
    include_bond_forces=True,
    include_bond_angle_forces=True,
    include_torsion_forces=True,
    constrain_bonds=False,
    sequence=sequence,
    monomer_types=[A],
)

A CGModel may be saved in serialized form to use for further analysis:

cgmodel.export("stored_cgmodel.pkl")