meshi.energy.solvate
Class SolvateEnergy

java.lang.Object
  extended by meshi.energy.AbstractEnergy
      extended by meshi.energy.CooperativeEnergyTerm
          extended by meshi.energy.solvate.SolvateEnergy
All Implemented Interfaces:
Attributable, Updateable

public final class SolvateEnergy
extends CooperativeEnergyTerm

The implementation of the cooperative solvation term for proteins as described in Kalisman & Keasar (2008). Since the cooperative solvation is described in the above paper, we bring here only the implementaion details. Especially regarding the calculation of the derivatives, which was too lengthy for the paper. The class allows to give a different weight to the solvation energies of certain atom types in the final summation described in Eq. 5. These atom types are side-chain polars, side-chain carbons, and backbone polars. The class also include a regular hydrogen bond term. The functional form is therefore: Esolv = weightSCPolarSolvate*Eside_chain_polars + weightSCCarbonSolvate*Eside_chain_carbons + weightBBPolarSolvate*Ebackbone_polars + weightHB*Ehb Where Ehb is the negative of the HBC summation over all atoms. The weights are defined in the "Creator" class, and passed to the constructor as parameters. General remarks: ---------------- 1) This term is derivable twice (because the splines are derivable twice). 2) This term is using hydrogen bond description that is dependent on two angles in the bond. This decription follows that of McDonald and Thornton (1994) and Dahiyat et al. (1996). The only place where the hydrogen bond list is declared explicitly is in line 204. This means that any hydrogen bond implementation that extends the "AbstractHydrogenBondList" template can be used, by correcting line 204. 3) We calculate the regular hydrogen bond energy term (Ehb) together with the solvation terms themselves, since the hydrogen bonds calculation is a by-product of the first step in the solvation evaluation, and is thus for free. 4) Disulfide bonds are treated as "hydrogen bonds" between the SG's of two cystines. 5) The SD sulfor of methionine is treated as a hydrophobic carbon. 6) See the remarks in the "Creators" classes for a quick start on how to create a working instance of the term. The energy evaluation: ---------------------- The energy value and derivatives is calculated in 3 steps: 1) A first pass over the non-bonded list. Each Distance instance in the non-bonded-list, is used to update the CNC's and HBC's of its atom pairs (Eqs. 1 and 2, respectively). The partial derivatives of the CNC's and HBC's with respect to the distance atoms are alsoclaculated. Since some of this values will be needed also in step 3, we save them in an instance of "SolvateDistanceAttribute" that is attached as an "Attribute" to the Distance instance. 2) A pass on the atom list. Once we have the CNC and HBC of every atom in the protein, we can proceed to calculate the solvation energy associated with every atom. In this implementation we combined the EI(CNC,HBC) evaluation (Eq. 3) of every atom and the -log(spline(EI)) evaluation (Eq. 4) into a single step by using a 2D spline, i.e. spline2D(CNC,HBC). The 2D spline is, of course, atom type specific. The derivatives of each atom solvate energy value with respect to the HBC and CNC are also calculated. 3) A second pass over the non-bonded list. Equiped with the The derivatives of the atom energies (with respect to the CNC's and HBC's) from step 2, we can now calculate the energy derivative with respect to the atomic coordinates. In this step we simply make sure that every term that arises from the derivative chain rule is accounted for.


Nested Class Summary
private static class SolvateEnergy.SuperType
          Setting the general type for each atom in the atom list: (0) Carbon (1) Backbone polar, (2) Sidechain polar (3) Hydrogens This is done to save time on type checking.
 
Nested classes/interfaces inherited from class meshi.energy.AbstractEnergy
AbstractEnergy.UpdateableList
 
Field Summary
private static Atom atom
           
private static AtomType atomType
           
private static int atomTypeNumber
           
private  double[] CNC
          These are fields for temporary array results that are needed in the evaluation stage.
private  double[] dSplineDCNC
           
private  double[] dSplineDHBC
           
private  double[] forceX
           
private  double[] forceY
           
private  double[] forceZ
           
private  double[] HBC
           
private  double[] HBCforHBenergy
           
private  int[] lut
          The look-up table (lut) converts the atom internal number (field of Atom), which is the index of the array, to its index in the atom list given to the constructor.
 MolecularSystem molecularSystem
           
 int molecularSystemSize
           
private  SolvateParametersList parameters
          The instance of the parameter list object.
static double SALT_BRIDGE_STRENGTH_ARG_NH
           
static double SALT_BRIDGE_STRENGTH_ASP_OD
           
static double SALT_BRIDGE_STRENGTH_GENERAL
          The following parameter allow for a different weighting of SALT BRIDGES compared with regular HYDROGEN BONDS for the Ehb energy, that is also claculated.
static double SALT_BRIDGE_STRENGTH_GLU_OE
           
static double SALT_BRIDGE_STRENGTH_LYS_NZ
           
static double SALT_BRIDGE_STRENGTH_TRN
           
static double SALT_BRIDGE_STRENGTH_TRO
           
private  AbstractHydrogenBondList solvateHB
          The only hydrogen bond list class in the term.
private  Spline2D[] splinesBB
          The 2D spline array (i.e.
private  Spline1D[] splinesSCCarbon
          The 1D spline array (i.e.
private  Spline2D[] splinesSCPolar
          The 2D spline array (i.e.
private  SolvateEnergy.SuperType[] superType
           
private  double weightBBPolarSolvate
           
private  double weightHB
           
private  double weightSCCarbonSolvate
           
private  double weightSCPolarSolvate
           
 
Fields inherited from class meshi.energy.CooperativeEnergyTerm
atomList, coordinates, dm, DX, relativeDiffTolerance, verySmall, XYZ
 
Fields inherited from class meshi.energy.AbstractEnergy
comment, filter, INFINITY, NaN, on, updateableResources, weight
 
Constructor Summary
SolvateEnergy()
           
SolvateEnergy(AtomList atomList, DistanceMatrix dm, SolvateParametersList parameters, double weightSCPolarSolvate, double weightBBPolarSolvate, double weightSCCarbonSolvate, double weightHB)
          See the comment at the top of the class for descriptions on the weights.
SolvateEnergy(AtomList atomList, DistanceMatrix dm, SolvateParametersList parameters, double weightSCPolarSolvate, double weightBBPolarSolvate, double weightSCCarbonSolvate, double weightHB, java.lang.String comment)
           
 
Method Summary
 void assignForcesToAtoms()
           
 double calculatingTheSolvationEnergiesOfEachAtom(boolean updateAtoms, double W_SCPolarSolvate, double W_SCCarbonSolvate, double W_BBPolarSolvate)
           
 double evaluate()
          Calculates Esolv with the weights given in the constructor.
 double evaluate(boolean updateAtoms, double W_SCPolarSolvate, double W_SCCarbonSolvate, double W_BBPolarSolvate)
          Calculates Esolv with the weights you give as parameters!
 void evaluateAtoms()
          Evaluates the energy term and devides the energy between the atoms.
 void firstPassOverTheNonBondedList()
           
private  void resetAuxilaryArrays()
           
 void secondPassOverTheNonBondedList()
           
 
Methods inherited from class meshi.energy.CooperativeEnergyTerm
test
 
Methods inherited from class meshi.energy.AbstractEnergy
addAttribute, comment, getAttribute, handleMissingParameters, isOn, off, on, toArray, toArray, toArray, toArray, toString, update
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

SALT_BRIDGE_STRENGTH_ASP_OD

public static final double SALT_BRIDGE_STRENGTH_ASP_OD
See Also:
Constant Field Values

SALT_BRIDGE_STRENGTH_GLU_OE

public static final double SALT_BRIDGE_STRENGTH_GLU_OE
See Also:
Constant Field Values

SALT_BRIDGE_STRENGTH_LYS_NZ

public static final double SALT_BRIDGE_STRENGTH_LYS_NZ
See Also:
Constant Field Values

SALT_BRIDGE_STRENGTH_ARG_NH

public static final double SALT_BRIDGE_STRENGTH_ARG_NH
See Also:
Constant Field Values

SALT_BRIDGE_STRENGTH_TRO

public static final double SALT_BRIDGE_STRENGTH_TRO
See Also:
Constant Field Values

SALT_BRIDGE_STRENGTH_TRN

public static final double SALT_BRIDGE_STRENGTH_TRN
See Also:
Constant Field Values

SALT_BRIDGE_STRENGTH_GENERAL

public static final double SALT_BRIDGE_STRENGTH_GENERAL
The following parameter allow for a different weighting of SALT BRIDGES compared with regular HYDROGEN BONDS for the Ehb energy, that is also claculated.

See Also:
Constant Field Values

CNC

private double[] CNC
These are fields for temporary array results that are needed in the evaluation stage. They are declared as fields so that time will not be waisted on creating new instances of the arrays. The lengths of these arrays is the length of the atom list. The indexing to these arrays is by the index of the atom in the atom list.


HBC

private double[] HBC

HBCforHBenergy

private double[] HBCforHBenergy

dSplineDCNC

private double[] dSplineDCNC

dSplineDHBC

private double[] dSplineDHBC

forceX

private double[] forceX

forceY

private double[] forceY

forceZ

private double[] forceZ

parameters

private SolvateParametersList parameters
The instance of the parameter list object.


lut

private int[] lut
The look-up table (lut) converts the atom internal number (field of Atom), which is the index of the array, to its index in the atom list given to the constructor.


superType

private SolvateEnergy.SuperType[] superType

splinesSCPolar

private Spline2D[] splinesSCPolar
The 2D spline array (i.e. spline(CNC,HBC)) for the polar side-chain atoms. The indexing in the array is the index of the atom type (i.e. 0-189, because we have 190 atom types in meshi currently. The number 190 is not hard coded)


splinesBB

private Spline2D[] splinesBB
The 2D spline array (i.e. spline(CNC,HBC)) for the polar backbone atoms. The indexing in the array is the index of the atom type (i.e. 0-189, because we have 190 atom types in meshi currently. The number 190 is not hard coded)


splinesSCCarbon

private Spline1D[] splinesSCCarbon
The 1D spline array (i.e. spline(CNC,HBC)) for the polar carbon atoms. The indexing in the array is the index of the atom type (i.e. 0-189, because we have 190 atom types in meshi currently. The number 190 is not hard coded). The splines are 1D because HBC is 0, for carbons.


solvateHB

private AbstractHydrogenBondList solvateHB
The only hydrogen bond list class in the term.


weightSCPolarSolvate

private double weightSCPolarSolvate

weightBBPolarSolvate

private double weightBBPolarSolvate

weightSCCarbonSolvate

private double weightSCCarbonSolvate

weightHB

private double weightHB

molecularSystem

public final MolecularSystem molecularSystem

molecularSystemSize

public final int molecularSystemSize

atom

private static Atom atom

atomTypeNumber

private static int atomTypeNumber

atomType

private static AtomType atomType
Constructor Detail

SolvateEnergy

public SolvateEnergy()

SolvateEnergy

public SolvateEnergy(AtomList atomList,
                     DistanceMatrix dm,
                     SolvateParametersList parameters,
                     double weightSCPolarSolvate,
                     double weightBBPolarSolvate,
                     double weightSCCarbonSolvate,
                     double weightHB)
See the comment at the top of the class for descriptions on the weights.


SolvateEnergy

public SolvateEnergy(AtomList atomList,
                     DistanceMatrix dm,
                     SolvateParametersList parameters,
                     double weightSCPolarSolvate,
                     double weightBBPolarSolvate,
                     double weightSCCarbonSolvate,
                     double weightHB,
                     java.lang.String comment)
Method Detail

evaluateAtoms

public void evaluateAtoms()
Description copied from class: AbstractEnergy
Evaluates the energy term and devides the energy between the atoms. The energy field of each atom is assigned a value - its contribution to the total energy sum.

Specified by:
evaluateAtoms in class AbstractEnergy

evaluate

public double evaluate()
Calculates Esolv with the weights given in the constructor.

Specified by:
evaluate in class AbstractEnergy

evaluate

public final double evaluate(boolean updateAtoms,
                             double W_SCPolarSolvate,
                             double W_SCCarbonSolvate,
                             double W_BBPolarSolvate)
Calculates Esolv with the weights you give as parameters!


resetAuxilaryArrays

private void resetAuxilaryArrays()

firstPassOverTheNonBondedList

public void firstPassOverTheNonBondedList()

calculatingTheSolvationEnergiesOfEachAtom

public double calculatingTheSolvationEnergiesOfEachAtom(boolean updateAtoms,
                                                        double W_SCPolarSolvate,
                                                        double W_SCCarbonSolvate,
                                                        double W_BBPolarSolvate)

secondPassOverTheNonBondedList

public void secondPassOverTheNonBondedList()

assignForcesToAtoms

public void assignForcesToAtoms()