🧬 Creating Topology Files for MCCE4
📌 What Are MCCE Topology Files?
MCCE4 topology files (.tpl or .ftpl) define the force-field and chemical parameters used in MCCE4 simulations.
They specify:
- 🧱 Heavy-atom connectivity
- 🔗 Hydrogen placement rules
- 🔄 Rotamer generation rules
- ⚛️ Protonation and redox states
- ⚡ Atomic partial charges
- 🌊 Reaction field (desolvation) energies
- 📈 Solution pKa values (
pKa, sol) - 🔋 Solution midpoint potentials (
Em, sol)
The default system topology files are located in:
/home/user/MCCE4-Alpha/param
Without a topology file, MCCE4 cannot treat ligands or non-standard residues properly.
📌 What do you need to create a new MCCE4 toplogy file?
- An ideal pdb structure for a molecule (RCSB, LigandExpo, etc)
- Associated charge sets for given formal charges and conformation states of the molecule (PARSE, AMBER, NBO, etc). Examples of charge generators are:
- APBS
- Atomic Charge Calculator III
- PDB Charges
- OpenEye QuackPack TK
- If you set up an openeye license, MCCE4-Alpha has python scripts to generate chargesets using
oe_assigncharges_QuacpakTK.pyandoe_readOEBcharges.py
- If you set up an openeye license, MCCE4-Alpha has python scripts to generate chargesets using
RCSB will no longer support .pdb format so .cif files will be needed to convert to .pdb format for use in MCCE4
You may use the MCCE4 .cif to .pdb converter using the PyMol module for the conversion:
cif2pdb_PyMOL EMH.cif
Alternative documentation: https://sites.google.com/site/mccewiki/topology-files
🧪 1: Run p_info to identify unsupported non-standard residues or ligands
Enter the working directory for this exercise:
cd mcce_workflows
mkdir ex_topology; cd ex_topology
Download the PDB file for:
getpdb 3aox
Run p_info:
p_info 3aox.pdb
Expected output should look like:
Number of amino acids in the protein: 307
This is a moderate sized protein. It will take hours to run.
Number of ligands in the protein: 2
We do not have topology files for these ligands:
NOTPL: ['EMH', 'EDO']
For more detailed analysis of the protein, look in p_info.log.
By default MCCE4 will create a file called
new.tplwhich contains ghost toplogies for unsupported molecules. This file contains the guessed connectivity based on inter-atom distances.
⚙️ 2: Generate template for a basic .ftpl (an MCCE topology file) for an unsupported molecule
For this tutorial we will be designing a topology file for the unsupported kinase inhibitor molecule EMH.
📁 Create a user_param directory and remove the new.tpl file:
mkdir user_param
rm new.tpl
MCCE4 uses topologies files located in user_param in the working directory of a simulation in addition to and superseding existing the default system’s topology files.
🔄 Convert your .pdb file into .ftpl:
For this tutorial, we will design conformers for two different protonatation states (01, +1) for the EMH molecule.
pdb2ftpl.py -p EMH.pdb -c 01 +1 > EMH.ftpl
If you only have .cif file, use the MCCE4 .cif to .pdb converter:
cif2pdb_PyMOL EMH.cif
This will design a template toplogy file for EMH which consists of entries labeled:
- CONFLIST: Conformer types
- CONNECT: Atom Connectivity
- CHARGE: Unfilled placeholder atomic charge blocks
- RADIUS: Default atomic radii values
- CONFORMER: Parameter stubs
✏️ 3: Fill charges for the template for the new .ftpl (an MCCE topology file) for the unsupported molecule
For this tutorial, we will fill in the respective conformer charges using chargesets generated with Schrödinger suite software for EMH.ftpl .
Using your file editor of choice, fill in the “to_be_filled” sections with the appropriate atomistic charge for all conformer atoms. Thus, changing:
# ATOM charges
CHARGE, EMH01, " C4 ": to_be_filled
CHARGE, EMH01, " C5 ": to_be_filled
CHARGE, EMH01, " C6 ": to_be_filled
CHARGE, EMH01, " C7 ": to_be_filled
CHARGE, EMH01, " C8 ": to_be_filled
CHARGE, EMH01, " C10": to_be_filled
CHARGE, EMH01, " C13": to_be_filled
CHARGE, EMH01, " C15": to_be_filled
CHARGE, EMH01, " C17": to_be_filled
CHARGE, EMH01, " C21": to_be_filled
CHARGE, EMH01, " C22": to_be_filled
CHARGE, EMH01, " C24": to_be_filled
CHARGE, EMH01, " C26": to_be_filled
CHARGE, EMH01, " C28": to_be_filled
CHARGE, EMH01, " N19": to_be_filled
CHARGE, EMH01, " C18": to_be_filled
CHARGE, EMH01, " C3 ": to_be_filled
CHARGE, EMH01, " C1 ": to_be_filled
CHARGE, EMH01, " C2 ": to_be_filled
CHARGE, EMH01, " N9 ": to_be_filled
CHARGE, EMH01, " C14": to_be_filled
CHARGE, EMH01, " C16": to_be_filled
CHARGE, EMH01, " O20": to_be_filled
CHARGE, EMH01, " C12": to_be_filled
CHARGE, EMH01, " C11": to_be_filled
CHARGE, EMH01, " C23": to_be_filled
CHARGE, EMH01, " N25": to_be_filled
CHARGE, EMH01, " C29": to_be_filled
CHARGE, EMH01, " C27": to_be_filled
CHARGE, EMH01, " C30": to_be_filled
CHARGE, EMH01, " N31": to_be_filled
CHARGE, EMH01, " C32": to_be_filled
CHARGE, EMH01, " C34": to_be_filled
CHARGE, EMH01, " O36": to_be_filled
CHARGE, EMH01, " C35": to_be_filled
CHARGE, EMH01, " C33": to_be_filled
CHARGE, EMH01, " H4 ": to_be_filled
CHARGE, EMH01, " H6 ": to_be_filled
CHARGE, EMH01, " H13": to_be_filled
CHARGE, EMH01, " H21": to_be_filled
CHARGE, EMH01, "H21A": to_be_filled
CHARGE, EMH01, "H21B": to_be_filled
CHARGE, EMH01, " H22": to_be_filled
CHARGE, EMH01, "H22A": to_be_filled
CHARGE, EMH01, "H22B": to_be_filled
CHARGE, EMH01, " H24": to_be_filled
CHARGE, EMH01, "H24A": to_be_filled
CHARGE, EMH01, "H24B": to_be_filled
CHARGE, EMH01, " H26": to_be_filled
CHARGE, EMH01, " H28": to_be_filled
CHARGE, EMH01, "H28A": to_be_filled
CHARGE, EMH01, " H3 ": to_be_filled
CHARGE, EMH01, " H12": to_be_filled
CHARGE, EMH01, " H23": to_be_filled
CHARGE, EMH01, "H23A": to_be_filled
CHARGE, EMH01, " H29": to_be_filled
CHARGE, EMH01, "H29A": to_be_filled
CHARGE, EMH01, " H27": to_be_filled
CHARGE, EMH01, "H27A": to_be_filled
CHARGE, EMH01, " H30": to_be_filled
CHARGE, EMH01, "H30A": to_be_filled
CHARGE, EMH01, " H32": to_be_filled
CHARGE, EMH01, "H32A": to_be_filled
CHARGE, EMH01, " H34": to_be_filled
CHARGE, EMH01, "H34A": to_be_filled
CHARGE, EMH01, " H35": to_be_filled
CHARGE, EMH01, "H35A": to_be_filled
CHARGE, EMH01, " H33": to_be_filled
CHARGE, EMH01, "H33A": to_be_filled
CHARGE, EMH01, " H9 ": to_be_filled
CHARGE, EMH+1, " C4 ": to_be_filled
CHARGE, EMH+1, " C5 ": to_be_filled
CHARGE, EMH+1, " C6 ": to_be_filled
CHARGE, EMH+1, " C7 ": to_be_filled
CHARGE, EMH+1, " C8 ": to_be_filled
CHARGE, EMH+1, " C10": to_be_filled
CHARGE, EMH+1, " C13": to_be_filled
CHARGE, EMH+1, " C15": to_be_filled
CHARGE, EMH+1, " C17": to_be_filled
CHARGE, EMH+1, " C21": to_be_filled
CHARGE, EMH+1, " C22": to_be_filled
CHARGE, EMH+1, " C24": to_be_filled
CHARGE, EMH+1, " C26": to_be_filled
CHARGE, EMH+1, " C28": to_be_filled
CHARGE, EMH+1, " N19": to_be_filled
CHARGE, EMH+1, " C18": to_be_filled
CHARGE, EMH+1, " C3 ": to_be_filled
CHARGE, EMH+1, " C1 ": to_be_filled
CHARGE, EMH+1, " C2 ": to_be_filled
CHARGE, EMH+1, " N9 ": to_be_filled
CHARGE, EMH+1, " C14": to_be_filled
CHARGE, EMH+1, " C16": to_be_filled
CHARGE, EMH+1, " O20": to_be_filled
CHARGE, EMH+1, " C12": to_be_filled
CHARGE, EMH+1, " C11": to_be_filled
CHARGE, EMH+1, " C23": to_be_filled
CHARGE, EMH+1, " N25": to_be_filled
CHARGE, EMH+1, " C29": to_be_filled
CHARGE, EMH+1, " C27": to_be_filled
CHARGE, EMH+1, " C30": to_be_filled
CHARGE, EMH+1, " N31": to_be_filled
CHARGE, EMH+1, " C32": to_be_filled
CHARGE, EMH+1, " C34": to_be_filled
CHARGE, EMH+1, " O36": to_be_filled
CHARGE, EMH+1, " C35": to_be_filled
CHARGE, EMH+1, " C33": to_be_filled
CHARGE, EMH+1, " H4 ": to_be_filled
CHARGE, EMH+1, " H6 ": to_be_filled
CHARGE, EMH+1, " H13": to_be_filled
CHARGE, EMH+1, " H21": to_be_filled
CHARGE, EMH+1, "H21A": to_be_filled
CHARGE, EMH+1, "H21B": to_be_filled
CHARGE, EMH+1, " H22": to_be_filled
CHARGE, EMH+1, "H22A": to_be_filled
CHARGE, EMH+1, "H22B": to_be_filled
CHARGE, EMH+1, " H24": to_be_filled
CHARGE, EMH+1, "H24A": to_be_filled
CHARGE, EMH+1, "H24B": to_be_filled
CHARGE, EMH+1, " H26": to_be_filled
CHARGE, EMH+1, " H28": to_be_filled
CHARGE, EMH+1, "H28A": to_be_filled
CHARGE, EMH+1, " H3 ": to_be_filled
CHARGE, EMH+1, " H12": to_be_filled
CHARGE, EMH+1, " H23": to_be_filled
CHARGE, EMH+1, "H23A": to_be_filled
CHARGE, EMH+1, " H29": to_be_filled
CHARGE, EMH+1, "H29A": to_be_filled
CHARGE, EMH+1, " H27": to_be_filled
CHARGE, EMH+1, "H27A": to_be_filled
CHARGE, EMH+1, " H30": to_be_filled
CHARGE, EMH+1, "H30A": to_be_filled
CHARGE, EMH+1, " H32": to_be_filled
CHARGE, EMH+1, "H32A": to_be_filled
CHARGE, EMH+1, " H34": to_be_filled
CHARGE, EMH+1, "H34A": to_be_filled
CHARGE, EMH+1, " H35": to_be_filled
CHARGE, EMH+1, "H35A": to_be_filled
CHARGE, EMH+1, " H33": to_be_filled
CHARGE, EMH+1, "H33A": to_be_filled
CHARGE, EMH+1, " H9 ": to_be_filled
Your amended file should like:
# ATOM charges
CHARGE, EMH01, " C4 ": -0.084 # amended
CHARGE, EMH01, " C5 ": -0.009 # amended
CHARGE, EMH01, " C6 ": -0.112 # amended
CHARGE, EMH01, " C7 ": -0.226 # amended
CHARGE, EMH01, " C8 ": 0.133 # amended
CHARGE, EMH01, " C10": 0.185 # amended
CHARGE, EMH01, " C13": -0.077 # amended
CHARGE, EMH01, " C15": -0.157 # amended
CHARGE, EMH01, " C17": 0.043 # amended
CHARGE, EMH01, " C21": -0.089 # amended
CHARGE, EMH01, " C22": -0.089 # amended
CHARGE, EMH01, " C24": -0.087 # amended
CHARGE, EMH01, " C26": 0.190 # amended
CHARGE, EMH01, " C28": -0.090 # amended
CHARGE, EMH01, " N19": -0.369 # amended
CHARGE, EMH01, " C18": 0.236 # amended
CHARGE, EMH01, " C3 ": -0.100 # amended
CHARGE, EMH01, " C1 ": 0.061 # amended
CHARGE, EMH01, " C2 ": -0.024 # amended
CHARGE, EMH01, " N9 ": -0.565 # amended
CHARGE, EMH01, " C14": -0.034 # amended
CHARGE, EMH01, " C16": 0.620 # amended
CHARGE, EMH01, " O20": -0.549 # amended
CHARGE, EMH01, " C12": -0.164 # amended
CHARGE, EMH01, " C11": -0.081 # amended
CHARGE, EMH01, " C23": -0.033 # amended
CHARGE, EMH01, " N25": -0.754 # amended
CHARGE, EMH01, " C29": 0.240 # amended
CHARGE, EMH01, " C27": -0.090 # amended
CHARGE, EMH01, " C30": 0.240 # amended
CHARGE, EMH01, " N31": -0.720 # amended
CHARGE, EMH01, " C32": 0.128 # amended
CHARGE, EMH01, " C34": 0.126 # amended
CHARGE, EMH01, " O36": -0.416 # amended
CHARGE, EMH01, " C35": 0.126 # amended
CHARGE, EMH01, " C33": 0.128 # amended
CHARGE, EMH01, " H4 ": 0.166 # amended
CHARGE, EMH01, " H6 ": 0.147 # amended
CHARGE, EMH01, " H13": 0.162 # amended
CHARGE, EMH01, " H21": 0.047 # amended
CHARGE, EMH01, "H21A": 0.047 # amended
CHARGE, EMH01, "H21B": 0.047 # amended
CHARGE, EMH01, " H22": 0.047 # amended
CHARGE, EMH01, "H22A": 0.047 # amended
CHARGE, EMH01, "H22B": 0.047 # amended
CHARGE, EMH01, " H24": 0.037 # amended
CHARGE, EMH01, "H24A": 0.037 # amended
CHARGE, EMH01, "H24B": 0.037 # amended
CHARGE, EMH01, " H26": 0.018 # amended
CHARGE, EMH01, " H28": 0.055 # amended
CHARGE, EMH01, "H28A": 0.055 # amended
CHARGE, EMH01, " H3 ": 0.144 # amended
CHARGE, EMH01, " H12": 0.137 # amended
CHARGE, EMH01, " H23": 0.052 # amended
CHARGE, EMH01, "H23A": 0.052 # amended
CHARGE, EMH01, " H29": 0.033 # amended
CHARGE, EMH01, "H29A": 0.033 # amended
CHARGE, EMH01, " H27": 0.055 # amended
CHARGE, EMH01, "H27A": 0.055 # amended
CHARGE, EMH01, " H30": 0.033 # amended
CHARGE, EMH01, "H30A": 0.033 # amended
CHARGE, EMH01, " H32": 0.041 # amended
CHARGE, EMH01, "H32A": 0.041 # amended
CHARGE, EMH01, " H34": 0.054 # amended
CHARGE, EMH01, "H34A": 0.054 # amended
CHARGE, EMH01, " H35": 0.054 # amended
CHARGE, EMH01, "H35A": 0.054 # amended
CHARGE, EMH01, " H33": 0.041 # amended
CHARGE, EMH01, "H33A": 0.041 # amended
CHARGE, EMH01, " H9 ": 0.460 # amended
CHARGE, EMH+1, " C4 ": -0.084 # amended
CHARGE, EMH+1, " C5 ": 0.003 # amended
CHARGE, EMH+1, " C6 ": -0.107 # amended
CHARGE, EMH+1, " C7 ": -0.225 # amended
CHARGE, EMH+1, " C8 ": 0.123 # amended
CHARGE, EMH+1, " C10": 0.116 # amended
CHARGE, EMH+1, " C13": -0.075 # amended
CHARGE, EMH+1, " C15": -0.136 # amended
CHARGE, EMH+1, " C17": 0.042 # amended
CHARGE, EMH+1, " C21": -0.089 # amended
CHARGE, EMH+1, " C22": -0.089 # amended
CHARGE, EMH+1, " C24": -0.088 # amended
CHARGE, EMH+1, " C26": 0.139 # amended
CHARGE, EMH+1, " C28": -0.110 # amended
CHARGE, EMH+1, " N19": -0.349 # amended
CHARGE, EMH+1, " C18": 0.227 # amended
CHARGE, EMH+1, " C3 ": -0.099 # amended
CHARGE, EMH+1, " C1 ": 0.063 # amended
CHARGE, EMH+1, " C2 ": -0.027 # amended
CHARGE, EMH+1, " N9 ": -0.559 # amended
CHARGE, EMH+1, " C14": -0.022 # amended
CHARGE, EMH+1, " C16": 0.617 # amended
CHARGE, EMH+1, " O20": -0.534 # amended
CHARGE, EMH+1, " C12": -0.161 # amended
CHARGE, EMH+1, " C11": -0.066 # amended
CHARGE, EMH+1, " C23": -0.029 # amended
CHARGE, EMH+1, " N25": -0.687 # amended
CHARGE, EMH+1, " C29": 0.208 # amended
CHARGE, EMH+1, " C27": -0.110 # amended
CHARGE, EMH+1, " C30": 0.208 # amended
CHARGE, EMH+1, " N31": -0.686 # amended
CHARGE, EMH+1, " C32": 0.068 # amended
CHARGE, EMH+1, " C34": 0.097 # amended
CHARGE, EMH+1, " O36": -0.373 # amended
CHARGE, EMH+1, " C35": 0.097 # amended
CHARGE, EMH+1, " C33": 0.068 # amended
CHARGE, EMH+1, " H4 ": 0.166 # amended
CHARGE, EMH+1, " H6 ": 0.152 # amended
CHARGE, EMH+1, " H13": 0.172 # amended
CHARGE, EMH+1, " H21": 0.048 # amended
CHARGE, EMH+1, "H21A": 0.048 # amended
CHARGE, EMH+1, "H21B": 0.048 # amended
CHARGE, EMH+1, " H22": 0.048 # amended
CHARGE, EMH+1, "H22A": 0.048 # amended
CHARGE, EMH+1, "H22B": 0.048 # amended
CHARGE, EMH+1, " H24": 0.038 # amended
CHARGE, EMH+1, "H24A": 0.038 # amended
CHARGE, EMH+1, "H24B": 0.038 # amended
CHARGE, EMH+1, " H26": 0.101 # amended
CHARGE, EMH+1, " H28": 0.069 # amended
CHARGE, EMH+1, "H28A": 0.069 # amended
CHARGE, EMH+1, " H3 ": 0.149 # amended
CHARGE, EMH+1, " H12": 0.133 # amended
CHARGE, EMH+1, " H23": 0.048 # amended
CHARGE, EMH+1, "H23A": 0.048 # amended
CHARGE, EMH+1, " H29": 0.060 # amended
CHARGE, EMH+1, "H29A": 0.060 # amended
CHARGE, EMH+1, " H27": 0.069 # amended
CHARGE, EMH+1, "H27A": 0.069 # amended
CHARGE, EMH+1, " H30": 0.060 # amended
CHARGE, EMH+1, "H30A": 0.060 # amended
CHARGE, EMH+1, " H32": 0.113 # amended
CHARGE, EMH+1, "H32A": 0.113 # amended
CHARGE, EMH+1, " H34": 0.097 # amended
CHARGE, EMH+1, "H34A": 0.097 # amended
CHARGE, EMH+1, " H35": 0.097 # amended
CHARGE, EMH+1, "H35A": 0.097 # amended
CHARGE, EMH+1, " H33": 0.113 # amended
CHARGE, EMH+1, "H33A": 0.113 # amended
CHARGE, EMH+1, " H9 ": 0.462 # amended
CHARGE, EMH+1, " H71": 0.440 # amended
🔬 4: Calibrate conformer parameters
Depending on the type of molecule and it’s conformational protonation states, we will need to calibrate a few things.
- Em0: Electrochemical Midpoint
- pKa: Intrinsic pKa
- ne: # of electrons exchanged
- nh: # of protons exchanged
- rxn: Solvation
- rxn02, rxn04, or rxn08 respective for solvation energy using a dielectric constant of 2, 4 or 8
In this case, the only parameters we will need to calibrate are the rxn values and the nH values. Typically, MCCE4 topologies files always need calibration for at least one rxn (solvation) value
👉 First, link the updated EMH.ftpl to your user_param directory:
cd user_param
ln -s ../EMH.ftpl .
cd ../
▶️ Next, to calibrate the rxn values, run MCCE4 steps 1-3.
step1.py
step2.py
step3.py -d 4
📊 Read the outputs of head3.lst column dsolv to retrieve the reaction field calibration value in solvent for a select dieletric constant.
iConf CONFORMER FL occ crg Em0 pKa0 ne nH vdw0 vdw1 tors epol dsolv extra history
00001 EMH01_0000_001 f 0.00 -0.000 0 0.00 0 0 -15.976 0.000 0.000 0.000 -8.085 0.000 01O000M000 t
00002 EMH01_0000_002 f 0.00 -0.000 0 0.00 0 0 -15.973 0.000 0.000 0.000 -8.082 0.000 01O000M000 t
00003 EMH+1_0000_003 f 0.00 1.000 0 0.00 0 0 -8.948 0.000 0.000 0.000 -21.009 0.000 +1O000M000 t
From head3.lst, locate the most negative dsolv value per conformer type of EMH (EMH01 and EMH+1).
EMH01: dsolv ≈ -8.085
EMH+1: dsolv ≈ -21.009
The most negative
dsolvvalue for each conformer type is used since it is most stable solvation energy for the conformer type in solvent.
✏️ Since we ran step3.py with a dielectric of 4, we can now update the EMH.ftpl for rxn04 using a file editor of choice.
Additionally, we can change the nH parameter in EMH+1 to be 1 to indicate the excess proton.
# Conformer parameters that appear in head3.lst: ne, Em0, nH, pKa0, rxn
CONFORMER, EMH01: Em0=0.0, pKa0=0.00, ne=0, nH=0, rxn02= 0, rxn04= -8.085, rxn08= 0
CONFORMER, EMH+1: Em0=0.0, pKa0=0.00, ne=0, nH=1, rxn02= 0, rxn04= -21.009, rxn08= 0
Rerun step3.py with the updated EMH.ftpl to ensure the calibration was successful.
- If it was, the
dsolvparameter should now be close to or is0.000for each conformer respective conformer. - A negative value should not be present as it indicates the calibration was off. Thus, your new
head3.lstshould look like:iConf CONFORMER FL occ crg Em0 pKa0 ne nH vdw0 vdw1 tors epol dsolv extra history 00001 EMH01_0000_001 f 0.00 -0.000 0 0.00 0 0 -15.976 0.000 0.000 0.000 0.000 0.000 01O000M000 t 00002 EMH01_0000_002 f 0.00 -0.000 0 0.00 0 0 -15.973 0.000 0.000 0.000 0.003 0.000 01O000M000 t 00003 EMH+1_0000_003 f 0.00 1.000 0 0.00 0 1 -8.948 0.000 0.000 0.000 0.000 0.000 +1O000M000 t