Minimize protein-ligand complex with AMBER
Written on 2018/04/02
This tutorial is for Shoichet Lab group members but we hope that it might be useful to the community.
Outlined below are five steps to minimize a complex.
This is helpful for preparing for a docking calculation (or perhaps, for minimizing a docked pose).
Step 1. Break up the complex into ligand (small molecule) and receptor.
You can do this in a number of ways. You can use your favorite molecular visualization software like UCSF Chimera. Or, you can use your favorite text editor like VIM to do it.
Here is a script that does it automatically:
Create a script called "run.001.be_balsti_reduce.csh". Put the following lines into the script using your favorite text editor like VIM.
#!/bin/csh set path = ( /nfs/home/tbalius/zzz.programs/msms $path ) ln -s /nfs/home/tbalius/zzz.programs/msms/atmtypenumbers . #python ~/zzz.scripts/be_blasti.py --pdbcode $pdbname nocarbohydrate renumber | tee -a pdbinfo_using_biopython.log python ~/zzz.scripts/be_blasti.py --pdbfile complex.pdb nocarbohydrate original_numbers | tee -a pdbinfo_using_biopython.log if !(-s rec.pdb) then echo "rec.pdb is not found" endif mv rec.pdb temp.pdb grep -v TER temp.pdb | grep -v END > rec.pdb rm temp.pdb if (-s lig.pdb) then sed -e "s/HETATM/ATOM /g" lig.pdb > xtal-lig.pdb else if (-s pep.pdb) then ## if no ligand and peptide sed -e "s/HETATM/ATOM /g" pep.pdb > xtal-lig.pdb else echo "Warning: No ligand or peptid." endif
run the script as follows:
csh run.001.be_balsti_reduce.csh
Step 2. Prepare ligand charges and force field.
Here is a script that calls antechamber to prepare ligand charges and force field. The flag "-nc" specifies the net charge of the small molecule be sure to replace this with the correct value. The ligand must have hydrogen's added. Also, the atom typing is dependent on the 3D coordinates.
You can call openbabel to calculate charges, for example:
# add GASTEIGER charges obabel -ipdb lig.pdb -omol2 -O lig.gast.mol2 -charge cat lig.gast.mol2 | awk 'BEGIN{sum=0};{if(NF==9){print $9;sum=sum+$9}};END{printf"\nsum=%.0f\n\n",sum}' set chrg = `cat lig.gast.mol2 | awk 'BEGIN{sum=0};{if(NF==9){sum=sum+$9}};END{printf"%.0f\n",sum}'`
Create a script called "run.002.ligprep.antechamber.csh".
#! /bin/tcsh set workdir = `pwd` cd $workdir setenv AMBERHOME /nfs/soft/amber/amber14 rm lig; mkdir lig; cd lig #cp $workdir/xtal-lig.pdb lig.pdb cp $workdir/33443.pdb lig.pdb #sed -i 's/<0> /LIG/g' lig1.mol2 $AMBERHOME/bin/antechamber -i lig.pdb -fi pdb -o lig.ante.mol2 -fo mol2 $AMBERHOME/bin/antechamber -i lig.ante.mol2 -fi mol2 -o lig.ante.charge.mol2 -fo mol2 -c bcc -at sybyl -nc 1 $AMBERHOME/bin/antechamber -i lig.ante.mol2 -fi mol2 -o lig.ante.pdb -fo pdb $AMBERHOME/bin/antechamber -i lig.ante.charge.mol2 -fi mol2 -o lig.ante.charge.prep -fo prepi $AMBERHOME/bin/parmchk -i lig.ante.charge.prep -f prepi -o lig.ante.charge.frcmod
Step 3. Prepare the coordinate file and topology-and-parameter files for amber.
Create a script called "run.003.tleap.csh".
setenv AMBERHOME /nfs/soft/amber/amber14 #grep -v 'H$' receptor.pdb > rec.pdb cat << EOF >! tleap.in set default PBradii mbondi2 # load the protein force field source leaprc.ff12SB # load in GAFF source leaprc.gaff # load ligand and covalent parameters. loadamberparams lig/lig.ante.charge.frcmod loadamberprep lig/lig.ante.charge.prep # load pdb file REC = loadpdb rec.pdb LIG = loadpdb lig/lig.ante.pdb COM = combine {REC LIG} saveamberparm REC rec.leap.prm7 rec.leap.rst7 saveamberparm LIG lig.leap.prm7 lig.leap.rst7 saveamberparm COM com.leap.prm7 com.leap.rst7 quit EOF #$AMBERHOME/bin/tleap $AMBERHOME/bin/tleap -s -f tleap.in > ! tleap.out
Step 4. Run minimization using the amber program PMEMD.cuda on a GPU machine
Create a script called "run.004.pmemd_cuda_min.csh"
#setenv AMBERHOME /nfs/soft/amber/amber14 setenv AMBERHOME /nfs/soft/amber/amber14 setenv LD_LIBRARY_PATH "" setenv LD_LIBRARY_PATH "/usr/local/cuda-6.0/lib64/:$LD_LIBRARY_PATH" cat << EOF1 > ! 01mi.in 01mi.in: minimization with GB &cntrl imin = 1, maxcyc = 10000, ncyc = 500, ntmin = 1, igb=1, ntx = 1, ntc = 1, ntf = 1, ntb = 0, ntp = 0, ntwx = 1000, ntwe = 0, ntpr = 1000, cut = 999.9, ntr = 1, restraintmask = '!@H=', restraint_wt = 0.1, / EOF1 #$AMBERHOME/bin/pmemd.cuda -O -i 01mi.in -o 01mi.out -p com.leap.prm7 -c com.leap.rst7 -ref com.leap.rst7 -x 01mi.mdcrd -inf 01mi.info -r 01mi.rst7 #$AMBERHOME/bin/sander -O -i 01mi.in -o 01mi.out -p com.leap.prm7 -c com.leap.rst7 -ref com.leap.rst7 -x 01mi.mdcrd -inf 01mi.info -r 01mi.rst7 set pwd = `pwd` #cd $pwd cat << EOF > ! qsub.sander.csh #\$ -S /bin/csh #\$ -cwd #\$ -q gpu.q #\$ -o stdout #\$ -e stderr cd $pwd $AMBERHOME/bin/pmemd.cuda -O -i 01mi.in -o 01mi.out -p com.leap.prm7 -c com.leap.rst7 -ref com.leap.rst7 -x 01mi.mdcrd -inf 01mi.info -r 01mi.rst7 EOF qsub qsub.sander.csh
You might want to also minimize the ligand on its own:
Create a script called "run.004.pmemd_cuda_min.lig.csh".
#setenv AMBERHOME /nfs/soft/amber/amber14 setenv AMBERHOME /nfs/soft/amber/amber14 setenv LD_LIBRARY_PATH "" setenv LD_LIBRARY_PATH "/usr/local/cuda-6.0/lib64/:$LD_LIBRARY_PATH" cat << EOF1 > ! 01mi.lig.in 01mi.in: minimization with GB &cntrl imin = 1, maxcyc = 10000, ncyc = 500, ntmin = 1, igb=1, ntx = 1, ntc = 1, ntf = 1, ntb = 0, ntp = 0, ntwx = 1000, ntwe = 0, ntpr = 1000, cut = 999.9, ntr = 0, / EOF1 #restraintmask = '!@H=', #restraint_wt = 0.1, #$AMBERHOME/bin/pmemd.cuda -O -i 01mi.in -o 01mi.out -p com.leap.prm7 -c com.leap.rst7 -ref com.leap.rst7 -x 01mi.mdcrd -inf 01mi.info -r 01mi.rst7 #$AMBERHOME/bin/sander -O -i 01mi.lig.in -o 01mi.lig.out -p lig.leap.prm7 -c lig.leap.rst7 -ref lig.leap.rst7 -x 01mi.lig.mdcrd -inf 01mi.lig.info -r 01mi.lig.rst7 set pwd = `pwd` #cd $pwd cat << EOF > ! qsub.sander.lig.csh #\$ -S /bin/csh #\$ -cwd #\$ -q gpu.q #\$ -o stdout #\$ -e stderr cd $pwd $AMBERHOME/bin/pmemd.cuda -O -i 01mi.lig.in -o 01mi.lig.out -p lig.leap.prm7 -c lig.leap.rst7 -ref lig.leap.rst7 -x 01mi.lig.mdcrd -inf 01mi.lig.info -r 01mi.lig.rst7 EOF qsub qsub.sander.lig.csh
Step 5. Convert to pdb for easy visualization.
cat run.005.mkpdb.csh | awk '{print " " $0}'
#setenv AMBERHOME /nfs/soft/amber/amber14 setenv AMBERHOME /nfs/soft/amber/amber14 setenv LD_LIBRARY_PATH "" setenv LD_LIBRARY_PATH "/usr/local/cuda-6.0/lib64/:$LD_LIBRARY_PATH" $AMBERHOME/bin/ambpdb -p com.leap.prm7 < 01mi.rst7 > 01mi.pdb # $AMBERHOME/bin/ambpdb -p lig.leap.prm7 < 01mi.lig.rst7 > 01mi.lig.pdb