Search code examples
bashubuntuinputexpectsend

Simulating User Interaction In Gromacs in Bash


I am currently doing parallel cascade simulations in GROMACS 4.6.5 and I am inputting the commands using a bash script:

#!/bin/bash
pdb2gmx -f step_04_01.pdb -o step_04_01.gro -water none -ff amber99sb -ignh
grompp -f minim.mdp -c step_04_01.gro -p topol.top -o em.tpr
mdrun -v -deffnm em
grompp -f nvt.mdp -c em.gro -p topol.top -o nvt.tpr
mdrun -v -deffnm nvt
grompp -f md.mdp -c nvt.gro -t nvt.cpt -p topol.top -o step_04_01.tpr
mdrun -v -deffnm step_04_01
trjconv -s step_04_01.tpr -f step_04_01.xtc -pbc mol -o step_04_01_pbc.xtc
g_rms -s itasser_2znh.tpr -f step_04_01_pbc.xtc -o step_04_01_rmsd.xvg

Commands such as trjconv and g_rms require user interaction to select options. For instance when running trjconv you are given:

Select group for output
Group     0 (         System) has  6241 elements
Group     1 (        Protein) has  6241 elements
Group     2 (      Protein-H) has  3126 elements
Group     3 (        C-alpha) has   394 elements
Group     4 (       Backbone) has  1182 elements
Group     5 (      MainChain) has  1577 elements
Group     6 (   MainChain+Cb) has  1949 elements
Group     7 (    MainChain+H) has  1956 elements
Group     8 (      SideChain) has  4285 elements
Group     9 (    SideChain-H) has  1549 elements
Select a group:

And the user is expected to enter eg. 0 into the terminal to select Group 0. I have tried using expect and send, eg:

trjconv -s step_04_01.tpr -f step_04_01.xtc -pbc mol -o step_04_01_pbc.xtc
expect "Select group: "
send "0"

However this does not work. I have also tried using -flag like in http://www.gromacs.org/Documentation/How-tos/Using_Commands_in_Scripts#Within_Script but it says that it is not a recognised input.

Is my expect \ send formatted correctly? Is there another way around this in GROMACS?


Solution

  • I don't know gromacs but I think they are just asking you to to use the bash syntax:

    yourcomand ... <<EOF
    1st answer to a question
    2nd answer to a question
    EOF
    

    so you might have

    trjconv -s step_04_01.tpr -f step_04_01.xtc -pbc mol -o step_04_01_pbc.xtc <<EOF
    0
    EOF