FAQ | This is a LIVE service | Changelog

Skip to content
Snippets Groups Projects

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

  1. Install the needed packages and configure Java.

    sudo apt-get install git maven openjdk-8-jdk

    Ensure java8 is selected

    sudo update-alternatives --config java sudo update-alternatives --config javac

  2. Clone, build and install.

    git clone https://bitbucket.org/mjw99/ssip.git cd ssip ; mvn clean package ; sudo dpkg -i ./ssip-/target/.deb

  3. 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

  1. Repeat the steps above, but build using

    mvn clean compile assembly:single

  2. 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

  1. Build

    mvn javadoc:aggregate

  2. 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