示例#1
0
def mock_force_field(parameters: List[SMIRNOFFParameter]):
    """Mock a ForceBalance forcefield directory."""

    # Create the force field directory.
    force_field = ForceField("openff-1.2.0.offxml")

    parameters_to_fit = defaultdict(lambda: defaultdict(list))

    for parameter in parameters:
        parameters_to_fit[parameter.handler][parameter.smirks].append(
            parameter.attribute)

    for handler_name in parameters_to_fit:

        handler = force_field.get_parameter_handler(handler_name)

        for smirks in parameters_to_fit[handler_name]:
            openff_parameter = handler.parameters[smirks]
            attributes_string = ", ".join(
                parameters_to_fit[handler_name][smirks])

            openff_parameter.add_cosmetic_attribute("parameterize",
                                                    attributes_string)

    os.makedirs("forcefield", exist_ok=True)
    force_field.to_file(os.path.join("forcefield", "forcefield.offxml"))
from openforcefield.typing.engines.smirnoff import ForceField
ff = ForceField('param_valence.offxml', allow_cosmetic_attributes=True)
for handler in ff.registered_parameter_handlers:
    print(handler)
    if len(ff[handler].parameters) == 0:
        continue
    print(ff[handler].parameters)
    for par in ff[handler].parameters:
        if hasattr(par, '_parameterize'):
            par.delete_cosmetic_attribute('parameterize')
        #if hasattr(ff[handler].parameters[0], '_parameterize'):
        #ff[handler].parameters[0].delete_cosmetic_attribute('parameterize')
print(ff)

#<Proper smirks="[*:1]~[#6X3:2]-[#7X3:3]-[#6X4,#1:4]" periodicity1="2" phase1="180.0 * degree" k1_bondorder1="1*kilocalories_per_mole" k1_bondorder2="10*kilocalories_per_mole" id="TIG9" idivf1="1.0"></Proper>

torsionhandler = ff['ProperTorsions']
torsionhandler.add_parameter({
    'smirks': '[*:1]~[*:2]~[*:3]~[*:4]',
    'periodicity1': 2,
    'phase1': '180.0 * degree',
    'k1_bondorder1': '1 * kilocalories_per_mole',
    'k1_bondorder2': '1 * kilocalories_per_mole',
    'id': 'TIG0',
    'idivf1': 1
})
torsionhandler.parameters[-1].add_cosmetic_attribute(
    'parameterize', 'k1_bondorder1,k1_bondorder2')

ff.to_file('test.offxml')
ff = ForceField()
ff._set_aromaticity_model('OEAroModel_MDL')

# Loop over the parameters to convert and their corresponding SMIRNOFF header tags 
for smirnoff_tag, param_dicts in { "Bonds": bond_dicts, "Angles": angle_dicts,
                                   "ProperTorsions": proper_dicts,
                                   "AmberImproperTorsions": improper_dicts,
                                   #'LibraryCharges': charge_dicts,
                                   #'vdW': nonbond_dicts
                                  }.items():
  # Get the parameter handler for the given tag. The
  # "get_parameter_handler" method will initialize an
  # empty handler if none exists yet (as is the case here). 
  handler = ff.get_parameter_handler(smirnoff_tag)

  # Loop over the list of parameter dictionaries, using each one as an input to
  # handler.add_parameter.  This mimics deserializing an OFFXML into a ForceField
  # object, and will do any sanitization that we might otherwise miss
  from openforcefield.typing.engines.smirnoff.parameters import DuplicateParameterError
  for param_dict in param_dicts:
    try:
      handler.add_parameter(param_dict)
    except DuplicateParameterError:
      continue
      

# Add the ElectrostaticsHandler, with the proper 1-4 scaling factors
handler = ff.get_parameter_handler('Electrostatics')                
# Write the now-populated forcefield out to OFFXML
ff.to_file('result_backbone.offxml')
示例#4
0
from openforcefield.typing.engines.smirnoff import ForceField
from amberimpropertorsionhandler import AmberImproperTorsionHandler

ff = ForceField('result_residues.offxml', 'result_backbone.offxml')
ff.to_file('result_merged.offxml')
from openforcefield.typing.engines.smirnoff import ForceField
ff = ForceField()
ff._set_aromaticity_model('OEAroModel_MDL')

# Loop over the parameters to convert and their corresponding SMIRNOFF header tags 
for smirnoff_tag, param_dicts in { "Bonds": bond_dicts, "Angles": angle_dicts,
                                   "ProperTorsions": proper_dicts,
                                   "AmberImproperTorsions": improper_dicts,
                                   'LibraryCharges': charge_dicts,
                                   'vdW': nonbond_dicts}.items():
  # Get the parameter handler for the given tag. The
  # "get_parameter_handler" method will initialize an
  # empty handler if none exists yet (as is the case here). 
  handler = ff.get_parameter_handler(smirnoff_tag)

  # Loop over the list of parameter dictionaries, using each one as an input to
  # handler.add_parameter.  This mimics deserializing an OFFXML into a ForceField
  # object, and will do any sanitization that we might otherwise miss
  from openforcefield.typing.engines.smirnoff.parameters import DuplicateParameterError
  for param_dict in param_dicts:
    try:
      handler.add_parameter(param_dict)
    except DuplicateParameterError:
      continue
      

# Add the ElectrostaticsHandler, with the proper 1-4 scaling factors
handler = ff.get_parameter_handler('Electrostatics')                
# Write the now-populated forcefield out to OFFXML
ff.to_file('result_residues.offxml')