Usage example showing how to determine which parameters are used for specific molecules

The Open Force Field toolkit applies parameters based on the SMARTS/SMIRKS language. These examples are intended to expose how ForceField assigns SMIRKS-based parameters to test molecules.

Note: This API is not final, and we will be implementing a better way to visualize assigned parameters in the future.

Example 1: Create an example molecule and label the force terms applied to it.

This example shows the parameters applied to a single molecule that is created from a SMILES string.

The first output section consists of Bond parameters that would be assigned to the molecule. Each bond is described by the indices of the two atoms it connects, its "parameter ID", and the SMIRKS that caused it to match the target bond.

The other ParameterHandlers print in order after that.

Note that the ToolkitAM1BCC and Electrostatics handlers do not assign SMIRKS-based parameters, therefore they do not print any match information.


In [1]:
from openforcefield.topology import Molecule, Topology
from openforcefield.typing.engines.smirnoff import ForceField

# Create a simple molecule from SMILES and turn it into a topology.
molecule = Molecule.from_smiles('C=C(N)(C)')
topology = Topology.from_molecules([molecule])

# Let's label using the smirnoff99Frosst force field
forcefield = ForceField('openff-1.0.0.offxml')

# Run the molecule labeling
molecule_force_list = forcefield.label_molecules(topology)

# Print out a formatted description of the parameters applied to this molecule
for mol_idx, mol_forces in enumerate(molecule_force_list):
    print(f'Forces for molecule {mol_idx}')
    for force_tag, force_dict in mol_forces.items():
        print(f"\n{force_tag}:")
        for (atom_indices, parameter) in force_dict.items():
            atomstr=''
            for idx in atom_indices:
                atomstr += '%3s' % idx
            print("atoms: %s  parameter_id: %s  smirks %s" % (atomstr, parameter.id, parameter.smirks) )


Forces for molecule 0

Constraints:
atoms:   0  4  parameter_id: c1  smirks [#1:1]-[*:2]
atoms:   0  5  parameter_id: c1  smirks [#1:1]-[*:2]
atoms:   2  6  parameter_id: c1  smirks [#1:1]-[*:2]
atoms:   2  7  parameter_id: c1  smirks [#1:1]-[*:2]
atoms:   3  8  parameter_id: c1  smirks [#1:1]-[*:2]
atoms:   3  9  parameter_id: c1  smirks [#1:1]-[*:2]
atoms:   3 10  parameter_id: c1  smirks [#1:1]-[*:2]

Bonds:
atoms:   0  1  parameter_id: b6  smirks [#6X3:1]=[#6X3:2]
atoms:   0  4  parameter_id: b84  smirks [#6X3:1]-[#1:2]
atoms:   0  5  parameter_id: b84  smirks [#6X3:1]-[#1:2]
atoms:   1  2  parameter_id: b8  smirks [#6X3:1]-[#7X3:2]
atoms:   1  3  parameter_id: b2  smirks [#6X4:1]-[#6X3:2]
atoms:   2  6  parameter_id: b86  smirks [#7:1]-[#1:2]
atoms:   2  7  parameter_id: b86  smirks [#7:1]-[#1:2]
atoms:   3  8  parameter_id: b83  smirks [#6X4:1]-[#1:2]
atoms:   3  9  parameter_id: b83  smirks [#6X4:1]-[#1:2]
atoms:   3 10  parameter_id: b83  smirks [#6X4:1]-[#1:2]

Angles:
atoms:   0  1  2  parameter_id: a10  smirks [*:1]~[#6X3:2]~[*:3]
atoms:   0  1  3  parameter_id: a10  smirks [*:1]~[#6X3:2]~[*:3]
atoms:   1  0  4  parameter_id: a11  smirks [#1:1]-[#6X3:2]~[*:3]
atoms:   1  0  5  parameter_id: a11  smirks [#1:1]-[#6X3:2]~[*:3]
atoms:   1  2  6  parameter_id: a20  smirks [#1:1]-[#7X3$(*~[#6X3,#6X2,#7X2+0]):2]-[*:3]
atoms:   1  2  7  parameter_id: a20  smirks [#1:1]-[#7X3$(*~[#6X3,#6X2,#7X2+0]):2]-[*:3]
atoms:   1  3  8  parameter_id: a1  smirks [*:1]~[#6X4:2]-[*:3]
atoms:   1  3  9  parameter_id: a1  smirks [*:1]~[#6X4:2]-[*:3]
atoms:   1  3 10  parameter_id: a1  smirks [*:1]~[#6X4:2]-[*:3]
atoms:   2  1  3  parameter_id: a10  smirks [*:1]~[#6X3:2]~[*:3]
atoms:   4  0  5  parameter_id: a12  smirks [#1:1]-[#6X3:2]-[#1:3]
atoms:   6  2  7  parameter_id: a20  smirks [#1:1]-[#7X3$(*~[#6X3,#6X2,#7X2+0]):2]-[*:3]
atoms:   8  3  9  parameter_id: a2  smirks [#1:1]-[#6X4:2]-[#1:3]
atoms:   8  3 10  parameter_id: a2  smirks [#1:1]-[#6X4:2]-[#1:3]
atoms:   9  3 10  parameter_id: a2  smirks [#1:1]-[#6X4:2]-[#1:3]

ProperTorsions:
atoms:   0  1  2  6  parameter_id: t69  smirks [*:1]~[#7X3,#7X2-1:2]-!@[#6X3:3]~[*:4]
atoms:   0  1  2  7  parameter_id: t69  smirks [*:1]~[#7X3,#7X2-1:2]-!@[#6X3:3]~[*:4]
atoms:   0  1  3  8  parameter_id: t19  smirks [#1:1]-[#6X4:2]-[#6X3:3]=[#6X3:4]
atoms:   0  1  3  9  parameter_id: t19  smirks [#1:1]-[#6X4:2]-[#6X3:3]=[#6X3:4]
atoms:   0  1  3 10  parameter_id: t19  smirks [#1:1]-[#6X4:2]-[#6X3:3]=[#6X3:4]
atoms:   2  1  0  4  parameter_id: t45  smirks [*:1]-,:[#6X3:2]=[#6X3:3]-,:[*:4]
atoms:   2  1  0  5  parameter_id: t45  smirks [*:1]-,:[#6X3:2]=[#6X3:3]-,:[*:4]
atoms:   2  1  3  8  parameter_id: t17  smirks [*:1]~[#6X3:2]-[#6X4:3]-[*:4]
atoms:   2  1  3  9  parameter_id: t17  smirks [*:1]~[#6X3:2]-[#6X4:3]-[*:4]
atoms:   2  1  3 10  parameter_id: t17  smirks [*:1]~[#6X3:2]-[#6X4:3]-[*:4]
atoms:   3  1  0  4  parameter_id: t45  smirks [*:1]-,:[#6X3:2]=[#6X3:3]-,:[*:4]
atoms:   3  1  0  5  parameter_id: t45  smirks [*:1]-,:[#6X3:2]=[#6X3:3]-,:[*:4]
atoms:   3  1  2  6  parameter_id: t69  smirks [*:1]~[#7X3,#7X2-1:2]-!@[#6X3:3]~[*:4]
atoms:   3  1  2  7  parameter_id: t69  smirks [*:1]~[#7X3,#7X2-1:2]-!@[#6X3:3]~[*:4]

ImproperTorsions:
atoms:   0  1  2  3  parameter_id: i1  smirks [*:1]~[#6X3:2](~[*:3])~[*:4]
atoms:   1  0  4  5  parameter_id: i1  smirks [*:1]~[#6X3:2](~[*:3])~[*:4]
atoms:   1  2  6  7  parameter_id: i3  smirks [*:1]~[#7X3$(*~[#6X3]):2](~[*:3])~[*:4]

vdW:
atoms:   0  parameter_id: n14  smirks [#6:1]
atoms:   1  parameter_id: n14  smirks [#6:1]
atoms:   2  parameter_id: n20  smirks [#7:1]
atoms:   3  parameter_id: n16  smirks [#6X4:1]
atoms:   4  parameter_id: n7  smirks [#1:1]-[#6X3]
atoms:   5  parameter_id: n7  smirks [#1:1]-[#6X3]
atoms:   6  parameter_id: n11  smirks [#1:1]-[#7]
atoms:   7  parameter_id: n11  smirks [#1:1]-[#7]
atoms:   8  parameter_id: n2  smirks [#1:1]-[#6X4]
atoms:   9  parameter_id: n2  smirks [#1:1]-[#6X4]
atoms:  10  parameter_id: n2  smirks [#1:1]-[#6X4]

Electrostatics:

ToolkitAM1BCC:

Example 2: Analyze the parameters assigned to groups of molecules

Here we analyze which parameters are applied to a group of molecules.

This example uses get_molecule_parameterIDs, a simple utility function similar to label_molecules, but intended for use on large datasets. get_molecule_parameterIDs processes a list of molecules using a specified ForceField and returns the parameters that would be assigned to each molecule, grouping the results both by molecule and by parameter.

This example may be useful when adding new parameters, to ensure that they are applied to molecules in a given data set.

This example also highlights the difference between "specific" and "generic" parameters. In the SMIRNOFF format, more than one SMIRKS-based parameter may match a motif in a molecule. Therefore, some parameters have precedence over others. Parameters which are "generic" are listed near the top of a parameter section, while more "specific" parameters occur near the end of the section. During parameter assignment, the furthest-down parameter that matches a motif in the molecule is assigned.

During actual parameter assignment, if the toolkit is unable to assign SMIRKS-based parameters to any part of a molecule, an UnassignedValenceParameterException will be raised.


In [2]:
from openforcefield.utils import get_data_file_path
from openforcefield.topology import Molecule
from openforcefield.typing.engines.smirnoff import ForceField
from openforcefield.utils.structure import get_molecule_parameterIDs

# The set of molecules that we want to parametrize in SMILES format.
molecule_smiles = [
    '[H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]',
    '[H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]',
    '[H]C1(C(C(O1)([H])[H])([H])O[H])[H]',
    '[H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]',
    '[H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]',
    '[H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]',
    '[H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]',
    '[H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]',
    '[H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]',
    '[H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]'
]

# Create the Molecule objects to parametrize.
mols = [Molecule.from_smiles(smiles) for smiles in molecule_smiles]

# Let's label using the smirnoff99Frosst force field
forcefield = ForceField('openff-1.0.0.offxml')

# This utility function creates dictionaries describing parameter assignment, 
# grouped both by molecule and by parameter
parameters_by_molecule, parameters_by_ID = get_molecule_parameterIDs(mols, forcefield)

print("Molecules with parameter IDs:")
# parameters_by_ID is a dictionary where keys are parameter IDs and values
# are molecules in which each parameter ID occurs.
pids_ordered = sorted(list(parameters_by_ID.keys()))
for pid in pids_ordered:
    print(pid)
    for ids in parameters_by_ID[pid]:
        print('\t', ids)


Molecules with parameter IDs:
a1
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
a2
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
a27
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
a7
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
a8
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
a9
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
b1
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
b14
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
b15
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
b83
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
b87
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
c1
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
n12
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
n16
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
n18
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
n19
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
n2
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
n3
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
n4
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
n5
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
t1
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
t2
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
t3
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
t4
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
t5
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
t84
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
t85
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
t86
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
t87
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]
t89
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
t9
	 [H][C@@]1([C@](OC1([H])[H])([H])O[H])O[H]
	 [H]C1(C(C(C1([H])O[H])([H])[H])([H])O[H])[H]
	 [H][C@@]1(C([C@@](OC1([H])[H])([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](OC(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1([C@@](C(OC(C(C1([H])[H])([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@]1(C([C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@@]1([C@](C(C(C1([H])[H])([H])[H])([H])[H])([H])O[H])O[H]
	 [H][C@@]1(C(O[C@](O1)([H])O[H])([H])[H])O[H]
	 [H][C@]1(C(OC(O1)([H])[H])([H])[H])O[H]
	 [H]C1(C(C(O1)([H])[H])([H])O[H])[H]