(Note: These tutorials are meant to provide
illustrative examples of how to use the AMBER software suite to carry out
simulations that can be run on a simple workstation in a reasonable period of
time. They do not necessarily provide the optimal choice of parameters or
methods for the particular application area.)
Copyright Dwight McGee, Hailey Bureau, Caley Allen, Rigoberto Hernandez
Section 2: Performing the simulations
Now that we have completed the equilibration, we will proceed to perform the ASMD simulations. The reaction coordinate is the end-to-end distance between the CA atoms of ALA1 and ALA10. We will pull the helical peptide using two different velocities, 10 Å/ns and 100 Å/ns. For simplicity, the reaction coordinate is partitioned into 5 equal segments (4 Å in length) and we use only 25 trajectories per stage. More trajectories would be needed to obtain a converged PMF but this tutorial is illustrated with this smaller number in order to allow the reader to walk through the steps quickly.
Create MD inputs and Distance restraint files
100 Å/ns velocity ASMD Simulation
At this pulling speed, each stage should be 40ps (nstlim=20000, dt=.002) in duration in order to match the length of the pull, etc. Each simulation is run with respect to the NVT ensemble (ntb=1). The temperature is maintained using Langevin dynamics (ntt=3, gamma_ln=5.0). Always remember to set ig=-1 in order to prevent synchronization! Setting jar=1 turns on steered molecular dynamics. Note that setting jar=1 internally sets nmropt=1 so there is no need to place nmropt in your MDIN. DISANG is the name of the file from which to read the distance restratints. DUMPAVE is the name of the output file which will contain the 4 columns: target distance, actual distance, force, and work This file will be written to every 1000 steps (istep1=1000).
asmd.example.mdin |
ASMD Simulation Example MD Input &cntrl imin = 0, nstlim = 20000, dt = 0.002, ntx = 1, temp0 = 300.0, ntt = 3, gamma_ln=5.0 ntc = 2, ntf = 2, ntb =1, ntwx = 1000, ntwr = 20000, ntpr = 1000, cut = 8.0, ig=-1, ioutfm=1, irest = 0, jar=1, / &wt type='DUMPFREQ', istep1=1000 / &wt type='END' / DISANG=dist.example.RST DUMPAVE=dist.asmd.work.dat LISTIN=POUT LISTOUT=POUT |
The distance restraint file resembles the file inputs used for NMR restraints. In the example, shown below, the parameters iat=9,99, r2=13, r2a=17 rk2=7.2 correspond to a request to change the distance between atoms 9 and 99 from 13 Å to 17 Å using a force constant of 7.2
dist.example.RST |
&rst iat=9,99, r2=13, r2a=17, rk2=7.2, &end |
Create a directory for the asmd simulations that will use a velocity of a 100 Å/ns (e.g. mkdir 100ang_per_ns; cd 100ang_per_ns). The following bash script was used to create the directories and md inputs for the asmd tutorials:
create_ASMDinputs.sh |
#!/bin/bash args=("$@") #check the correct num of args if [[ ${#args[@]} == 0 ]] || [[ ${#args[@]} > 2 ]]; then echo "create_ASMDinputs.sh {NUM of trajectories} {NUM of MDsteps}" exit fi num_asmd_sim=${args[0]} mdsteps=${args[1]} #create the ASMD directories counter=1 for ((counter=1; counter<=$num_asmd_sim; counter++)); do if [ ! -d ASMD_$counter ]; then mkdir ASMD_$counter fi done #create the MDIN inputs & dist RST files for the ASMD simulation for ((counter=1; counter<=$num_asmd_sim;counter++));do start_distance=13 end_distance=17 for stage in {1..5};do cat >>asmd_$counter.$stage.mdin<<EOF ASMD simulation &cntrl imin = 0, nstlim = $mdsteps, dt = 0.002, ntx = 1, temp0 = 300.0, ntt = 3, gamma_ln=5.0 ntc = 2, ntf = 2, ntb =1, ntwx = 1000, ntwr = $mdsteps, ntpr = 1000, cut = 8.0, ig=-1, ioutfm=1, irest = 0, jar=1, / &wt type='DUMPFREQ', istep1=1000 / &wt type='END' / DISANG=dist.RST.dat.$stage DUMPAVE=asmd_$counter.work.dat.$stage LISTIN=POUT LISTOUT=POUT EOF mv asmd_$counter.$stage.mdin ASMD_$counter/ done done #create the distance RST files start_distance=13 end_distance=17 for stage in {1..5}; do cat >>dist.RST.dat.$stage<<EOF &rst iat=9,99, r2=$start_distance, r2a=$end_distance, rk2=7.2, &end EOF start_distance=$((start_distance+4)) end_distance=$((end_distance+4)) done |
You may now type the following command, supplying create_ASMDinputs.sh with the additional choices of the number of trajectories as 25 and the number of MD steps as 20,000.
>./create_ASMDinputs.sh 25 20000 |
Running the ASMD simulations
Now it is time to run the first stage of ASMD simulations. Before you start, make sure that you have copied the prmtop and equilibrated rst7 file to the directory. Note that the bash script create_job.sh provided below creates the job submission scripts and run each SMD simulations sequentially. However, you could instead use multi-pmemd and create groupfiles to run all the SMD simulation simultaneously.
create_job.sh |
#!/bin/bash args=("$@") #check the correct num of args if [[ ${#args[@]} == 0 ]] || [[ ${#args[@]} < 3 ]]; then echo "create_ASMDjobfile.sh {NUM of trajectories} {Coord/RST7} {Stage Num}" exit fi num_asmd_sim=${args[0]} if [ ! -f ${args[1]} ]; then echo The file ${args[1]} does not exist else coord=${args[1]} fi stage=${args[2]} cat >>_job.sh<<EOF #!/bin/sh #PBS -m abe #PBS -M username@gatech.edu #PBS -N ASMD_stage$stage #PBS -l walltime=4:00:00 #PBS -l nodes=2:ppn=8 #PBS -j oe cd SSSPBS_O_WORKDIR do_parallel="mpirun -np 16 pmemd.MPI" prmtop="ala.asmd.prmtop" coord="$coord" EOF for ((counter=1;counter<=$num_asmd_sim;counter+=1)); do echo SSSdo_parallel -O -i ASMD_$counter/asmd_$counter.$stage.mdin -p SSSprmtop -c SSScoord -r ASMD_$counter/ASMD_$counter.$stage.rst7 -o ASMD_$counter/ASMD_$counter.$stage.mdout -x ASMD_$counter/ASMD_$counter.$stage.nc -inf ASMD_$counter/ASMD_$counter.$stage.info >> _job.sh done sed 's/SSS/$/g' _job.sh > job.$stage.sh; rm -f _job.sh |
In order for create_job.sh to run, it needs the number of trajectories/simulations 25, coordinate file equil.rst7 and the stage number 1.
Stage 1
All of the work output files for the 10 Å/ns ASMD simulation can be downloaded here.
>./create_job.sh 25 equil4.rst7 1 |
Submit the file job.1.sh to the queue
Note: you might have to edit the create_job.sh script to satisfy your own queueing system. The script is provided so as to illustrate how one might submit a job to a given queue.
On our computers (running on 16 cores of a 2.0 GHz AMD-Opteron-6128 processor, the average scaling was 23 ns/day), the job finished in approximately 1 hr.
Next, we used the program ASMD.py to determine, which of the ASMD simulations' work values is the closest to Jarzynski Average
Type the following command in order to obtain a list of available options and a description of them for ASMD.py.
>ASMD.py -h or --help |
In order to determine, which simulation has the closest work value execute the following command:
>ASMD.py -i asmd*.work.dat.1 -o jar.stage1.dat |
which should result in the following being displayed
>The file closest to the Jarzynski Average is: asmd_1.work.dat.1 |
Note: Do not be alarmed if after you run the simulation, the file chosen does not match the one listed above. (The result varies because of the use of Langevin dynamics with the random seeds and variations in the numerics of your computers random number generator).
Stage 2
Now that we know which simulation will seed our next stage, we can use create_job.sh to create the jobfile for the next stage.
Remember 25 for the number of simulations, asmd_1/ASMD_1.1.rst7 is the coordinate file and 2 for the stage number. Determine the simulation whose work value is closest to the Jarzynski Average
>create_job.sh 25 asmd_1/ASMD_1.1.rst7 2 |
>qsub job.2.stage.sh |
>ASMD.py -i asmd*.work.dat.2 -o jar.stage2.dat |
>The file closest to the Jarzynski Average is: asmd_9.work.dat.2 |
Stage 3
Using the following commands below: create the jobfile for the next stage, submit it to the queue and use ASMD.py to determine which trajectory's work is the closet to the Jarzynski average.
>create_job.sh 25 asmd_9/ASMD_9.2.rst7 3 |
>qsub job.3.sh |
>ASMD.py -i asmd*.work.dat.3 -o jar.stage3.dat |
>The file closest to the Jarzynski Average is: asmd_22.work.dat.3 |
Stage 4
Using the following commands below: create the jobfile for the next stage, submit it to the queue and use ASMD.py to determine which trajectory's work is the closet to the Jarzynski average.
>create_job.sh 25 asmd_22/ASMD_22.3.rst7 4 |
>qsub job.4.sh |
>ASMD.py -i asmd*.work.dat.4 -o jar.stage4.dat |
>The file closest to the Jarzynski Average is: asmd_20.work.dat.4 |
Stage 5
Using the following commands below: create the jobfile for the next stage, submit it to the queue and use ASMD.py to determine which trajectory's work is the closet to the Jarzynski average.
>create_job.sh 25 asmd_20/ASMD_20.4.rst7 5 |
>qsub job.5.sh |
>ASMD.py -i asmd*.work.dat.5 -o jar.stage5.dat |
>The file closest to the Jarzynski Average is: asmd_19.work.dat.5 |
10 Å/ns velocity ASMD Simulation
Create a directory for the ASMD simulations using a velocity of 10 Å/ns (e.g. mkdir 10ang_per_ns; cd 10ang_per_ns).
Type the following command below supplying create_ASMDinputs.sh with the number of trajectories, 25 and the number of MD steps 200,000.
>./create_ASMDinputs.sh 25 200000 |
>./create_job.sh 25 equil.rst7 1 |
>qsub job.1.sh |
>ASMD.py -i asmd*.work.dat.1 -o jar.stage1.dat |
Follow the same procedure as outlined previously. Please remember that these simulations at a slower velocity of 10 Å/ns will require much more time complete.
All of the work output files for the 10 Å/ns ASMD simulation can be downloaded
here.