1. Scripts used to create and manage AutodockApp

The are here for reference purposes, the original and the subsequent versions can be found in this git repository.

1.1. dock-pre.sh

cat << EOFPRE > dock-pre.sh
#!/bin/bash

set -e
origDir=$(pwd)
# Specify ligand set file name.

RECEPTOR=receptor

if [ ! -r $RECEPTOR.pdbqt -o ! -r $RECEPTOR.gpf ]; then
    echo Receptor files could not be found!!!
    exit -1
fi

echo Preparing the receptor...

echo autogrid4 -p $RECEPTOR.gpf -l $RECEPTOR.glg
autogrid4 -p $RECEPTOR.gpf -l $RECEPTOR.glg

echo "Done."

if [ -z "$LIGANDS" ]; then
    LIGANDS=ligands
fi

if [ ! -r "$LIGANDS.mol2" ]; then
        echo "Expected the file '$LIGANDS.mol2' to be located in current directory. This was not found and I don't know what to spilt."
        exit -1
fi

mkdir $LIGANDS

echo "Preparing atomic coordinates of the ligands..." 
cd $LIGANDS

csplit -ftmp -n4 -ks - '%^@.TRIPOS.MOLECULE%' '/^@.TRIPOS.MOLECULE/' '{*}' < $origDir/ligands.mol2

for f in *
do
        entryName=$(grep ZINC $f)
        if [ -z "$entryName" ]; then
                continue
        else
                mv -v $f $entryName.mol2
        fi
done

pythonPath=/usr/share/pyshared
# Prepare each ligand file for docking with AutoDock.
echo "Preparing ligands for docking..."
for f in *.mol2; do
        echo $f
        if [ -r $(echo $f|sed -e 's/.mol2$/.pdbqt/') ]; then continue; fi
        python $pythonPath/AutoDockTools/Utilities24/prepare_ligand4.py -l $f
done

if [ ! -r "$RECEPTOR.pdbqt" ]; then
        echo "Linking ../$RECEPTOR.pdbqt to local directory"
        ln -f ../$RECEPTOR.pdbqt .
        ln -f ../$RECEPTOR.maps.* .
        ln -f ../$RECEPTOR.*.map .
fi

echo Starting the preparation of docking parameter files.
for f in *.pdbqt; do
    base=$(basename $f .pdbqt)
    
    if [ "$base" = "$RECEPTOR" ]; then 
        echo Test
        continue
    fi
        
    echo "Preparing dpf for $base against $RECEPTOR"
    
    python $pythonPath/AutoDockTools/Utilities24/prepare_dpf4.py -l "$base.pdbqt" -r "$RECEPTOR.pdbqt" \
            -p ga_num_evals=1000000 \
            -p ga_pop_size=100 \
            -p ga_run=30
done

echo "Done."
echo "Find the ligand files in the $origDir/ligands subdirectory."
echo 
echo "You can now create work units for BOINC."

exit 0
EOFPRE

1.2. Workunit Template

cat <<EOFTEMP > wu_template.xml 

<file_info>
  <number>0</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>1</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>2</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>3</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>4</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>5</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>6</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>7</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>8</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>9</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>10</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>11</number>
  <sticky/>
  <nodelete/>
</file_info>
<file_info>
  <number>12</number>
</file_info>
<file_info>
  <number>13</number>
</file_info>

<workunit>

  <file_ref>
    <file_number>0</file_number>
    <open_name>receptor.A.map</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>1</file_number>
    <open_name>receptor.C.map</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>2</file_number>
    <open_name>receptor.d.map</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>3</file_number>
    <open_name>receptor.e.map</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>4</file_number>
    <open_name>receptor.HD.map</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>5</file_number>
    <open_name>receptor.maps.fld</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>6</file_number>
    <open_name>receptor.maps.xyz</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>7</file_number>
    <open_name>receptor.NA.map</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>8</file_number>
    <open_name>receptor.N.map</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>9</file_number>
    <open_name>receptor.OA.map</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>10</file_number>
    <open_name>receptor.pdbqt</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>11</file_number>
    <open_name>receptor.SA.map</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>12</file_number>
    <open_name>ligand.pdbqt</open_name>
    <copy_file/>
  </file_ref>
  <file_ref>
    <file_number>13</file_number>
    <open_name>ligand_receptor.dlg</open_name>
    <copy_file/>
  </file_ref>

  <command_line>-p ligand_receptor.dpf -l ligand.dlg</command_line>
  <rsc_fpops_bound>1.5e11</rsc_fpops_bound>
  <rsc_fpops_est>1.5e11</rsc_fpops_est>

</workunit>
EOFTEMP   

1.3. Result Template

cat <<EOFTEMP > result_template.xml
<file_info>
  <name><OUTFILE_0/></name>
  <generated_locally/>
  <upload_when_present/>
  <max_nbytes>5000000</max_nbytes>
  <url><UPLOAD_URL/></url>
</file_info>

<result>
  <file_ref>
        <file_name><OUTFILE_0/></file_name>
        <open_name>ligand.dlg</open_name>
        <copy_file/>
    </file_ref>
</result>
EOFTEMP

1.4. dock-genwu.sh

cat <<EOFGEN > dock-genwu.sh
#!/bin/bash
set -e

origDir=$(pwd)

# Define names.

RECEPTOR=receptor
if [ -z "$LIGANDS" ]; then
    LIGANDS=ligands
fi

generated=Generated



# BOINC project details.
projectRoot=/tmp
app=wrapper
temp_wu=templates/wrapper_wu.xml
temp_res=template/wrapper_res.xml

downStage=$projectRoot/downloads

# USAGE

if [ -z $1 ]; then
cat <<EOF
Usage: dock-genwu.sh number-of-wu-needed
EOF
exit -1
fi

cd $LIGANDS
mkdir -p $generated
# Add receptor files to the staging area.
if [ ! -d $downStage ]; then
    mkdir $downStage
fi
cp $RECEPTOR.pdbqt $RECEPTOR.maps.* $RECEPTOR.*.map $downStage


# Copy files for each ligand and generate corresponfing workunit.
count=0

for pf in *.dpf; do
    if [[ $count -lt $1 ]]; then 

        base=${pf%%_*}
        
        cp $base.pdbqt $pf $downStage
        
        cd $projectRoot
        ./bin/create_work --appname $app --wu_name $base --wu_template $temp_wu \
            --result_template $temp_res $RECEPTOR.A.map $RECEPTOR.C.map $RECEPTOR.d.map $RECEPTOR.e.map $RECEPTOR.maps.fld \
            $RECEPTOR.maps.xyz $RECEPTOR.NA.map $RECEPTOR.N.map $RECEPTOR.OA.map $RECEPTOR.pdbqt $RECEPTOR.SA.map \
            $base.pdbqt ${base}_${RECEPTOR}.dpf 
        cd $orgDir              
        mv $base* $generated
        rm $downStage/$base*
        let count=$count+1
    
    else
        echo Specified number of workunits generated!!
    fi
done

echo "Creation of work units completed."
exit 0