The counters that may be evaluated are summarised below:
| Atoms | Positive charge centres |
| Bonds | Negative charge centres |
| Heteroatoms | Rings |
| Branches | Aromatic rings |
| H-bond donors | Heteroaromatic rings |
| H-bond acceptors | Halogens |
| Centres |
The volume and area of a molecule are estimated using standard bond lengths and radii, without generating 3D coordinates for the atoms. The volume of each atom of radius R is calculated as a sphere 4pR³/3 and the overlap volume with the spheres for connected atoms ph(h²+3r²)/6 is subtracted as shown.

The surface area of each atom is calculated as a sphere 4pR² and the overlap area with the spheres for connected atoms 2phr is subtracted.
In addition to the total surface area, a series of partial surface areas are calculated:
| Name | Description |
| PSA | Polar surface area |
| NPSA | Non-polar surface area |
| PFA | Polar fractional area (PSA/area) |
| NPFA | Non-polar fractional area (NPSA/area) |
| XSA | Nitrogen and oxygen (plus attached hydrogens) surface area |
| XFA | Nitrogen and oxygen (plus attached hydrogens) fractional area (XSA/area) |
In these calculations, atoms that are hydrophobic (see below) are considered non-polar. Values of XSA above 120 are sometimes used to eliminate molecules that are expected to be poorly absorbed, and only those with values below 70 are commonly expected to penetrate the blood-brain barrier.
The flexibility is computed by the product of the number of increments for each rotatable bond (ignoring ring bonds):
![]()
where Pn is the number of points or increments for bond n. By default, P is 3 except for conjugated bonds where P is 2. Note that this computation is independent of the algorithm used by conformational analysis for detecting rotatable bonds, and is not affected by the corresponding settings.
This provides a measure of lipophilicity of a molecule in the range 0-1 using the following algorithm:
This algorithm is also used to create lipophilic dummy centroids or lipophiles when molecules are read into THINK (they cannot be created at any other time). These have the element symbol LIP and may be defined by a minimum of 3 and a maximum of 8 connected hydrophobic atoms. The lipophile calculation:
Note: While this algorithm creates separate lipophiles for fused rings, connected hydrophobic atoms which span fused rings cannot form a single lipophile, even if each ring contains fewer than 3 non-fused atoms.
These calculations require 3D coordinates, either read from a PDB or 3D SDF file, or generated automatically by THINK.
This calculation reports the number of atom pairs separated by less than the sum of their CPK radii, excluding those that are 1,2 connected (bonded), 1,3 connected (forming a bond angle) or 1,4 connected (forming a torsion angle). The CPK radii are computed by multiplying the VdW radii by a user-defined factor, normally 0.6.
This calculation reports the number of atom pairs which are not 1,2 connected, 1,3 connected or 1,4 connected, with a separation distance less than the sum of their VdW radii.
An external program may be used to calculate one or more user-defined properties for a molecule. The molecule’s connection table is passed to the program via a SMILES or SD file, and the property values are returned via a data file. Use of the external program is enabled by setting the common variable IREMOT to 2 if a SMILES file is to be used, or 4 for an SD file (the default value of 0 means that the external program is disabled). The name of the program is stored in the REMOTE symbol:
| LET #IREMOT = 2 LET REMOTE = program |
As THINK calculates the properties for a molecule, it will automatically run the external program, passing the name of the connection table file (“molecule.smi” or “molecule.sdf”) as an argument. The program should write the calculated property values to a text file “molecule.dat” using one or more records of the form:
| field=value | |
| or | field=value, field=value, … |
where field is the name of the field, and value is the calculated value.
If the values are pre-calculated (eg taken from the literature), the same technique can be used to load them into THINK, but there is no need to use a real external program – the REMOTE symbol may be set to any arbitrary string. In these circumstances, THINK will just read the field names and values from the file “molecule.dat”.