@@ -72,6 +72,10 @@ def findAbsoluteCOMAtoms(self):
7272 self .lig2_first_atomnum , self .data ["ligand_free_com_atoms" ]
7373 ).tolist ()
7474
75+ def findLigProtDisplacements (self ):
76+ self .lig1_protein_displacement = self .data ["lig1_protein_displacement" ]
77+ self .lig2_protein_displacement = self .data ["lig2_protein_displacement" ]
78+
7579 def getATMForceConstants (self , index = None ):
7680 from .. import Protocol as _Protocol
7781
@@ -404,6 +408,7 @@ def createCOMRestraint(self, force_group=None):
404408 """
405409
406410 self .findAbsoluteCOMAtoms ()
411+ self .findLigProtDisplacements ()
407412 # Groups contained within the constraint
408413 protein_com = self .protein_com_atoms
409414 lig1_com = self .lig1_com_atoms
@@ -416,6 +421,19 @@ def createCOMRestraint(self, force_group=None):
416421 output += "protein_com = {}\n " .format (protein_com )
417422 output += "lig1_com = {}\n " .format (lig1_com )
418423 output += "lig2_com = {}\n " .format (lig2_com )
424+
425+ output += "# Displacement values for protein-ligand COM restraint\n "
426+ # round to 3 decimal places for clarity
427+ output += "displacement_bound = {}\n " .format (
428+ [round (x , 3 ) for x in self .lig1_protein_displacement ]
429+ )
430+ output += "displacement_free = {}\n " .format (
431+ [round (x , 3 ) for x in self .lig2_protein_displacement ]
432+ )
433+ output += "# Convert displacement to nm from angstrom\n "
434+ output += "displacement_bound = [x * 0.1 for x in displacement_bound]\n "
435+ output += "displacement_free = [x * 0.1 for x in displacement_free]\n "
436+
419437 output += "# Constants for the CM-CM force in their input units\n "
420438 output += "kfcm = {} * kilocalorie_per_mole / angstrom**2\n " .format (kf_cm )
421439 output += "tolcm = {} * angstrom \n " .format (tol_cm )
@@ -434,9 +452,9 @@ def createCOMRestraint(self, force_group=None):
434452 output += """parameters_bound = (
435453 kfcm.value_in_unit(kilojoules_per_mole / nanometer**2),
436454 tolcm.value_in_unit(nanometer),
437- 0.0 * nanometer,
438- 0.0 * nanometer,
439- 0.0 * nanometer,
455+ displacement_bound[0] * nanometer,
456+ displacement_bound[1] * nanometer,
457+ displacement_bound[2] * nanometer,
440458 )\n """
441459 output += "force_CMCM.addBond((1,0), parameters_bound)\n "
442460 output += "numgroups = force_CMCM.getNumGroups()\n "
@@ -446,9 +464,9 @@ def createCOMRestraint(self, force_group=None):
446464 output += """parameters_free = (
447465 kfcm.value_in_unit(kilojoules_per_mole / nanometer**2),
448466 tolcm.value_in_unit(nanometer),
449- displacement [0] * nanometer,
450- displacement [1] * nanometer,
451- displacement [2] * nanometer,
467+ displacement_free [0] * nanometer,
468+ displacement_free [1] * nanometer,
469+ displacement_free [2] * nanometer,
452470 )\n """
453471
454472 output += "force_CMCM.addBond((numgroups+1,numgroups+0), parameters_free)\n "
0 commit comments