Introduction
This is an initial attempt at a Java software implementation of the SSIP method as described in the paper "Footprinting molecular electrostatic potential surfaces for calculation of solvation energies".
Specifically, the footprinting aspect of the calculation will be initially worked upon here since a Java QM solution does not exist at the moment. For the moment, the QM aspects will be dealt with by NWChem.
Compiling from Source
This will compile and install the SSIP tools to the Debian based OS.
Ubuntu Xenial / Ubuntu Bionic Creating a Debian package
-
Install the needed packages and configure Java.
sudo apt-get install git maven openjdk-8-jdk
sudo update-alternatives --config java sudo update-alternatives --config javac
-
Clone, build and install.
git clone https://bitbucket.org/mjw99/ssip.git cd ssip ; mvn clean package ; sudo dpkg -i ./ssip-/target/.deb
-
Check command line output.
SSIP Code:
ssip - A tool for footprinting molecular electrostatic potential surfaces
http://dx.doi.org/10.1039/C3CP53158A
Git version: three-surf 034b21a
Option Description
------ -----------
-?, -h, --help Display this output.
-c, --cml <String> The CML file of the corresponding molecule in the
cube file.
-f, --fp-inner <String> the isout file for the 0.0104 a.u. isosurface, used
for footprinting
-g, --grad-inner <String> the isout file for the 0.005 a.u. isosurface, used
for beta determination
-i, --isout <String> The isout file that has been generated using the QM
tool. At 0.002 a.u. isosurface.
--legacy This switches to the legacy mode, allowing the use
of an isout file and pdb.
-m, --cube <String> The cube file for the MEPS corresponding to the
molecule, generated by the QM tool. At 0.002 a.u.
isosurface.
-n Function in a non-interactive mode.
-p, --pdb <String> The PDB file of the corresponding molecule in the
isout file.
-r <String> Read the molecule and SSIP information from a file
using an XML format.
-t Use differential MEPS and pi-function. This requires
3 MEPS surfaces to run.
-v Visualise SSIP surface. With solid spheres and no
numerical values.
-w <String> Write the molecule and SSIP information to a file
using an XML format.
Example usage:
# Path to the exported example files
export ssip_ex_dir=/usr/share/ssip-repo/ssip/ExampleData
# using the quadratic beta function
ssip --legacy -i $ssip_ex_dir/benzene_001_0.002_0.00003.isout -p $ssip_ex_dir/benzene_001_new.pdb
ssip -m $ssip_ex_dir/XLYOFNOQVPJJNP-UHFFFAOYSA-N_0.0020_merged.cube -c $ssip_ex_dir/XLYOFNOQVPJJNP-UHFFFAOYSA-N.cml
ssip -r benzene.xml
# using the pi function
ssip --legacy -t -i $ssip_ex_dir/4-chloroacetophenone.extfix.isout -g $ssip_ex_dir/4-chloroacetophenone.infix050.isout -f $ssip_ex_dir/4-chloroacetophenone.infix104.isout -p $ssip_ex_dir/4-chloroacetophenone.pdb
ssip -t -m $ssip_ex_dir/UHOVQNZJYSORNB-UHFFFAOYSA-N_0.0020_merged.cube -g $ssip_ex_dir/UHOVQNZJYSORNB-UHFFFAOYSA-N_0.0050_merged.cube -f $ssip_ex_dir/UHOVQNZJYSORNB-UHFFFAOYSA-N_0.0104_merged.cube -c $ssip_ex_dir/UHOVQNZJYSORNB-UHFFFAOYSA-N.cml
Phase transfer code:
phasetransfer - A tool for calculating free and bound concentations and free energies of transfer
Git version: phasetransfer e8bbd7b
Option Description
------ -----------
-?, -h, --help display this output
--calc option sets it to calculate new concentrations
for the phases, otherwise they are read in.
--concentrationUnit <String> concentrationUnit (default: MOLAR)
-e, --energies [String] output the free energies (default: all)
-o, --outputfile <String> output file name, required
-p, --phaseOut output the phase states from the calculation to a
PhaseCollectionList
--phaseCollection phase collection in input file
--phaseCollectionList phase collection list in input file.
--phaseFile <String> phase input file name
--solute <String> solute file name
--solvent <String> solvent file name
-t, --temperature <Double> temperature value (default: 298.0)
--temperatureUnit <String> temperatureUnit (default: KELVIN)
Example usage:
phasetransfer -p -o phaseOutFile.xml --solute /usr/share/ssip-repo/phasetransfer/ExampleData/watersolute.xml --solvent /usr/share/ssip-repo/phasetransfer/ExampleData/waterphasesolvent.xml
phasetransfer -e -o energyOutFile.xml --solute /usr/share/ssip-repo/phasetransfer/ExampleData/watersolute.xml --solvent /usr/share/ssip-repo/phasetransfer/ExampleData/waterphasesolvent.xml
Building a standalone jar
-
Repeat the steps above, but build using
mvn clean compile assembly:single
-
Execute using
java -jar ./ssip-footprint/target/ssip-footprint-4.2.0-jar-with-dependencies.jar java -jar ./ssip-phasetransfer/target/ssip-phasetransfer-4.2.0-jar-with-dependencies.jar
Building the JavaDoc
-
Build
mvn javadoc:aggregate
-
With a browser, navigate to
./target/site/apidocs/index.html
Extra: this branch
This branch computes beta SSIPs by means of three isosurfaces: those corresponding
to an electron density of 0.002 ("outerEp", -i
), 0.005 ("gradientEp", -j
)
and 0.010 ("fpEp", -k
)in atomic units.
The algorithm
-
determines the Alpha and the Beta surfaces as in DOI:10.1039/C3CP53158A
-
for the purpose of footprinting, replaces the Beta surface in-situ with the value of the electrostatic potential at the closest point on the "footprint surface",
-k
, with a constant offset to ensure that such "effective electrostatic potential" is negative. -
runs the footprinting algorithm as in DOI:10.1039/C3CP53158A but using the Beta surface determined at the previous step.
-
for the purpose of Beta value determination, uses the value
Phi
from the VdW surface (-i
) to compute a quadratic approximation to beta, and the value computed as difference from the surface-j
,dPhi
, to compute a correction factor, equal to:1 + d * | (1-f)dPhi + fPhi - c |
This is an example invocation:
export ssip_ex_dir=/usr/share/ssip-repo/ssip/ExampleData
ssip --legacy -f -i $ssip_ex_dir/4-chloroacetophenone.extfix.isout -j $ssip_ex_dir/4-chloroacetophenone.infix050.isout -k $ssip_ex_dir/4-chloroacetophenone.infix104.isout -p $ssip_ex_dir/4-chloroacetophenone.pdb
Inputs to the pi workflow
The files were created from a NWChem run with
epsiso_param_dict_list = [{'padding': 1.8, 'iso_surf': 0.0104, 'step_size': 0.04, 'tol': 0.0001},
{'padding': 1.9, 'iso_surf': 0.005, 'step_size': 0.053, 'tol': 6e-05},
{'padding': 2.0, 'iso_surf': 0.002, 'step_size': 0.066, 'tol': 3e-05}]
then, for pdb
:
babel -icml $inchi.cml -opdb $inchi.pdb
and for isout
by running a simple awk
-based unit and format conversion from a directory of *_merged.cube
files:
export what=fix
for Fn in `ls *_merged.cube`
do
arrFn=(${Fn//_/ })
inchi=${arrFn[0]}
if [[ $Fn == *"0.0020"* ]]; then
what=extfix
elif [[ $Fn == *"0.0050"* ]]; then
what=infix050
elif [[ $Fn == *"0.0100"* ]]; then
what=infix104
elif [[ $Fn == *"0.0104"* ]]; then
what=infix104
else
what=unknownfix
fi
echo "VOLUME 0.0020 100000" > _$inchi.$what.isout
echo "CANONICAL_SMILES just_fake _.pdb" >> _$inchi.$what.isout
echo "ENERGY(KJ_PER_MOL) -00000.000000" >> _$inchi.$what.isout
tail -n +7 $Fn | awk 'NF==4{printf "%-15.10f %-15.10f %-15.10f %-15.10f %-15.10f\n", $1*0.529177, $2*0.529177, $3*0.529177, $4, $5}' | sed "s/ / /g" | sed "s/ / /g" | sed "s/ / /g" | sed "s/ / /g" | sed "s/^ //" >> _$inchi.$what.isout
done