This file contains the release notes for THINK v1.23 and THINK SERVER v1.23.
THINK v1.23 is written in Fortran 95 and uses the intrinsic memory allocation functions (previous versions of THINK were written in Fortran 77) . Users who wish to create modified versions, or who wish to port THINK v1.23 to other operating systems will require a Fortran 95 compiler. Contact Treweren Consultants for further information.
Residues
A set of site points that constitute a site query will often include several points that originate from a single protein residue, particularly arginine. When constructing pharmacophores from these site points for use in a site search, it is often undesirable to use more than one point from any residue. THINK now has an option to ensure that each site point used in a pharmacophore originates from a different residue.
| Command: | CUSTOMISE RESIDUES=DIFFERENT |
| Dialog: | File > Preferences > Pharmacophores : Re-use Residues (toggle off) |
Accessibility
THINK now also includes an optional accessibility test for pharmacophores. For each site point used in a pharmacophore, THINK determines the originating residue atom in the protein and checks that the vector from the residue atom to the site point points towards the pharmacophore.
The test is actually applied by computing the vector from the site atom to its originating residue atom (the reverse vector of that described above) and the vector forming the angle bisector from the site point to the other points in the pharmacophore. If the cosine of this angle is greater than the common variable D3DACC, the pharmacophore is rejected. The default value for the angle is 0° (ie D3DACC = 1.0).
| Command: | CUSTOMISE ANGLE=angle_value |
Warp speed
The speed of site searches can be controlled by setting the warp speed w to a value in the range 0 <= w < 100 (default value: 10). As the value of w increases, more site pharmacophores are rejected by their weightings (see section 9.5 in the THINK Theory Manual), thereby increasing the speed of the search. The warp speed w is stored in the common variable PSCOMN.
| Command: | CUSTOMISE WARP=value |
| Dialog: | File > Preferences > Pharmacophores : Warp Speed |
Metal and Lewis-base centres
Lewis acids and bases are defined as electron or lone-pair acceptors and donors respectively, and often form the complements of hydrogen bond donors and acceptors. However, a sulphur atom can donate a lone pair, but is not usually considered to be a hydrogen bond acceptor. Similarly, a metal cation is a lone-pair acceptor but is very rarely a hydrogen bond donor. In order to accommodate binding sites that include metal atoms, two new centre types have been added to THINK:
| Centre name | 1-letter code | Description |
| MET | M | Metal, or lone-pair acceptor |
| LPD | X | Lewis-base, or lone-pair donor |
These centres replace the user-defined centres USR2 and USR3 (single-letter codes X and Y).
Crowded bonds
Single bonds between atoms with sp² hybridisation are observed to have planar geometry when there are few substitutions, eg c1ccccc1C(=O). However, the introduction of substitutions can cause contacts between atoms which force the system to be non-planar, eg c1(C)ccccc1(C)C(=O)C, and implicitly non-conjugated pi-bonding (in this case between the C=O and aromatic ring. This "black and white" scenario is sometimes too simplistic when it is difficult to ascertain whether the crowding is sufficient to force an out-of-plane geometry. In THINK v1.23, three alternatives are considered:
The crowded classification is used when it is not clear whether the geometry will be planar or not. It is now possible to use a different number of increments when rotating about a crowded bond, although for compatibility with previous releases the default value is set to 2 (the same as for conjugated bonds). Increasing the value to 4 would ensure that both the planar and non-planar conformations are explored.
| Command: | CUSTOMISE CROWDED=value |
| Dialog: | File > Preferences > Conformers : Crowded |
Sample and random modes
The move to Fortran 95 has allowed a 64-bit variable (integer*8) to be used to store the number of possible conformations. In previous releases, sample and random modes were restricted to molecules where the total number of conformations did not exceed 231-1 (the largest number which could be stored in a 32-bit variable). In THINK v1.23 this restriction has been removed as the maximum number of conformations is now 263-1.
Maximum time
The maximum time THINK can spend generating conformers for a single molecule can now be set through the Preferences Dialog. The corresponding command CUSTOMISE TIMEOUT=time has been available for several releases.
| Dialog: | File > Preferences > Conformers : Max Time (min) |
Earlier versions of THINK included the ability to generate a site query from a docked ligand or from a known active site, but were unable to scan a protein to find potential receptor sites. This has been remedied in THINK v1.23 with the introduction of site detection capabilities. The definitions of the receptor sites are stored in symbols named SITE-n, and each symbol is an array of the residues within the active site (one residue per array element).
THINK finds possible active sites by performing the following steps:
| Command: | MODIFY SITE=protein |
| Dialog: | Edit > Site > Find Sites |
Site points outside the binding pocket
For some receptor sites, the algorithm THINK uses to identify the site points can create points which can be seen to lie outside the receptor site. To overcome this problem, the algorithm has been refined in THINK v1.23. Each site point is defined by a heteroatom within a site residue (the "originating" atom), and the vector from this atom to the site point defines a plane through the point. A site point is considered to lie within the binding pocket or active site if the alpha-carbon atoms of 5 or more residues lie in front of this plane (ie on the opposite side of the plane to the originating atom). Site points that fall outside the binding pocket are given a distance weighting of 5 (see the THINK Theory Manual for more details on distance weighting of site points).
Queries created directly from receptor site
When a site query is created from a bound ligand, THINK automatically allocates a weighting to each site point to reflect its distance from the ligand, and hence the likelihood that its originating protein atom is involved in the ligand binding (see the THINK Theory Manual). In THINK v1.23 this concept has been extended to site queries created from the active site residues. In this case, THINK calculates the centroid of the alpha carbons from the site residues, and the weighting reflects the distance from the site point to the centroid as follows:
| Group number | Interpretation |
|
1
|
Site point within 6.0Å of site centroid |
|
2
|
Site point within 8.0Å of site centroid |
|
3
|
There are no intervening non-hydrogen protein atoms between the site point and the site centroid (ie "line of sight") |
|
4
|
There is no line of sight to the site centroid |
The weightings are stored as group numbers, and may be used in conjunction with any required groups.
Visibility of site points
The atoms used to locate site points are now created as visible atoms. In previous versions of THINK they were left invisible.
The rejection substructures used by the de novo utility and the drug-like filters applied during searches previously rejected a molecule if any occurrence of an undesirable substructure was found. THINK v1.23 allows a range of acceptable values to be specified. For instance users could permit molecules with one nitro group to be accepted but those with two or more to be rejected. At present it is only possible to specify lower and upper limits through the "min" and "max" fields in a learn file (an option to specify this information in the "reject.smi" file has not yet been implemented).
The same drug-like filters may be applied when saving molecules or pharmacophores, and can be used in property calculations to highlight molecules with undesirable properties or substructures.
Two enhancements have been introduced in THINK v1.23 to increase the speed of exact match searches.
Mass filter
When performing an exact match 2D search on a SMILES file that includes molecular mass data, THINK v1.23 will automatically filter the molecules by their mass. This means that only molecules with the same mass as the query will be passed to the full 2D search, thereby increasing the speed of the search. The mass data must be stored in a field called MASS. One side effect of this change is that the value b in the progress report "Found a from b" only shows the number of molecules that enter the full 2D search, and consequently may not reflect the total number of molecules in the file.
Archive searches
It is now possible to perform extremely fast exact-match 2D searches using the "archive" option. This is particularly useful when several exact-match searches are to be performed against a single file of molecules. Unlike normal searches where the molecules being searched are read from the file during the search, in an archive search the molecules are read into THINK beforehand and loaded into the archive using the OPTIONS=ARCHIVE keyword with the OPEN command. When the search is performed, the input file is specified as FILE=ARCHIVE, which instructs THINK to take the molecules from the archive instead of reading them from a normal file.
During the search THINK automatically filters the molecules retrieved from the archive by their molecular mass and formula. Consquently, only those molecules with the same mass and formula as the query are passed to the full 2D search. As with the mass filter described above, this alters the value of b in the progress report "Found a from b". If all molecules are rejected by the mass and formula filters, THINK will report "Found 0 from 0".
| Command: | OPEN FILE=molecule_file OPTIONS=ARCHIVE |
| SEARCH MODE=EXACT QUERY=query FILE=ARCHIVE OUT=results_file |
There have been many changes to the pharmacophore modules within THINK v1.23, the most significant being the introduction of fuzzy pharmacophores or tolerances to the distances within a pharmacophore. This means that the results of all pharmacophore calculations (excluding site searches) will differ in v1.23 from earlier versions unless the tolerance is disabled. The format used for pharmacophore files and the order in which pharmacophores are listed have also been changed to facilitate the calculation of pharmacophore profiles and the use of pharmacophores within data analysis.
Fuzzy pharmacophores (tolerances)
The introduction of fuzzy pharmacophores is designed to handle the tolerances on the exact positions of the centres (atoms) that define a pharmacophore, which affects the distances between the atoms. When calculating a pharmacophore, THINK now allows a tolerance of ±x on each distance. This has the effect of "spreading" the distance across several distance bins, leading to the creation of multiple pharmacophores for a single set of centres. Each of these pharmacophores can be considered to be a fraction of the original pharmacophore. The pharmacophore count is adjusted to take into account these fractional pharmacophores, so that the total count remains unchanged.
For example, a 2-centre pharmacophore has a distance of 4.85Å between the centres. Applying a pharmacophore tolerance of 0.25Å gives a range of possible distances between 4.6 and 5.1Å. The default distance bins that cover this range are 4.0-5.0Å and 5.0-6.0Å: 80% of the distance range lies within the 4.0-5.0Å bin and 20% within the 5.0-6.0Å bin. Thus, this 2-centre pharmacophore would generate two fractional pharmacophores, one with a count of 0.8 and the other with a count of 0.2.
Since the pharmacophore tolerance is applied independently to each of the distances within a pharmacophore, the number of fractional pharmacophores created increases dramatically as the number of centres, and hence the number of distances, rises. This means that pharmacophore calculations may run more slowly than in previous versions, although the algorithms have been speeded up in compensation.
The pharmacophore tolerance x is taken from the 3D tolerance stored in the common variable D3DTOL so that 2x = D3DTOL. The tolerance may be changed through the command CUSTOMISE TOLERANCE=value. Results from earlier versions of THINK can be reproduced by setting the 3D tolerance to zero.
Pharmacophore files
The format used in pharmacophore files has been changed to a comma-separated-variable (CSV) format. This means that pharmacophore data can be loaded directly from the file into a relational database (such as MySQL or ORACLE). In the past, loading the data would have required converting the file written by THINK into a format that the relational database system could handle.
A pharmacophore file begins with two header records (records 1 and 2 below), which are followed by the molecule data blocks. Each block starts with a molecule header record, and then contains the pharmacophore data. Each molecule in the file has a separate data block. All header records start with a "#" character.
In the following record descriptions, the type of each variable is indicated by the initial letter of its name:
| Record 1 (file header) | |||
| Data: | #IREV, IBINS, IMOLS, CCOUNT | ||
| Format: | #I2, I3, I6, 1X, A1, F7.3, 1X, A1 | ||
| Description: | |||
| IREV | I2 | File revision level (currently revision 3) | |
| IBINS | I3 | Number of distance bins | |
| IMOLS | I6 | Number of molecules in file | |
| CCOUNT | A1 | "Y"if data includes pharmacophore counts, otherwise "N" | |
| D3DTOL | F7.3 | 3D tolerance. The pharmacophore tolerance ±x is calculated from 2x = D3DTOL | |
| CNAME | A1 | "Y" if pharmacophore records include molecule names, otherwise "N" | |
| Record 2 (distance bins) | |||
| Data: | #RBIN1, RBIN2, RBIN3, … | ||
| Format: | # free format, values separated by spaces | ||
| Description: | |||
| RBINn | Upper limit of distance bin n | ||
| Record 3 (molecule header) | |||
| Data: | #ICENS, IPHARM, ICOUNT, IREC, CMOLE | ||
| Format: | #I3, I11, F11.2, 1X, A | ||
| Description: | |||
| ICENS | I3 | Number of centres in pharmacophores | |
| IPHARM | I11 | Number of unique pharmacophores in molecule | |
| DCOUNT | F11.2 | Total number of pharmacophores for molecule if conformer-based counting is enabled, otherwise 0 | |
| CMOLE | A | Molecule name | |
| Record 4 (pharmacophore data) | |||||||||||||||||||||||||
| Data: | If CNAME=0: CPHARM, RCOUNT If CNAME=1: CMOLE, CPHARM, RCOUNT |
||||||||||||||||||||||||
| Format: | free format, values separated by commas | ||||||||||||||||||||||||
| Description: | |||||||||||||||||||||||||
| CMOLE | Molecule name | ||||||||||||||||||||||||
| CPHARM |
|
||||||||||||||||||||||||
| RCOUNT | Pharmacophore count | ||||||||||||||||||||||||
| D | H-bond donor | R | aromatic ring centroid |
| A | H-bond acceptor | L | lipophile |
| P | positive charge | W | user-defined centre type 1 |
| N | negative charge | X | Lewis base |
| C | acid | M | metal |
| B | base | Z | user-defined centre type 4 |
| d1 | distance between centres x1 and x2 |
| d2 | distance between centres x1 and x3 |
| d3 | distance between centres x1 and x4 |
| d4 | distance between centres x2 and x3 |
| d5 | distance between centres x2 and x4 |
| d6 | distance between centres x3 and x4 |
As a result of the loss of precision which occurs when converting a floating point number into a character string, pharmacophores whose count is less than 0.01 are not written to the file. As a consequence, the sum of the counts in the pharmacophore records may not equal the value of DCOUNT in the molecule header record.
Pharmacophore profiles
A pharmacophore profile is the set of all pharmacophores found across the conformers of a series of molecules. As each individual pharmacophore is generated during the calculation, it is:
Note that the pharmacophore profile shows the spread of pharmacophores across the series of molecules. It does not calculate the sum of the pharmacophores exhibited.
A pharmacophore profile may be saved to a file.
| Command: | SAVE FORMAT=PROFILE FILE=file |
| SAVE FILE=filename.PRO | |
| Dialog: | File > Save As > Save as type: Profile |
Pharmacophores within data analysis
The LEARN data analysis examines the properties and/or keys of a set of molecules and attempts to identify features that may be responsible for undesirable characteristics. In THINK v1.23 the range of properties has been extended to include pharmacophores. Two extra property keywords, PHARMS and NOPHARMS, control the inclusion of pharmacophores. If no property keywords are supplied, pharmacophores will be included automatically.
During the analysis, the pharmacophores for the active and inactive molecules
are read from files called molecule.phm, with each file containing the
pharmacophores for a single molecule. Therefore, these files need to be created
before the analysis is begun. It is recommended that the SAVE OPTIONS=FILTER command
is used when generating the pharmacophore files to prevent files being created
for very flexible molecules. It is also recommended that all salts are removed
from the structures before the pharmacophores are calculated, since salts may
contain centres (eg oxygen atoms) which would lead to the creation of additional
pharmacophores partially or wholly outside the molecule that is to be used in
the data analysis.
| Command: | SAVE FILE=molecule.phm OPTIONS=FILTER MOLECULE=molecule |
| LEARN ... PROPERTY=PHARMS,... | |
| LEARN ... PROPERTY=NOPHARMS,... | |
| Dialog: | Calculate > Analysis > Pharms (toggle on) |
Other pharmacophore changes
Reading and Saving Molecule Files
RD and RXN files
THINK v1.23 can read files written with RD or RXN reaction formats, and can save files using the RD format. These formats were created by MDL Information Systems, Inc (www.mdli.com). Within THINK, reactants and products can be distinguished by their group numbers: reactants have odd group numbers (1, 3, 5, etc) while products have even group numbers (2, 4, 6, etc). All atoms in the same component (reactant or product) have the same group number. Atom mapping between reactants and products is shown through the atom serial numbers: mapped atoms have identical serial numbers.
When a reaction is read into THINK, the reactants are allocated group numbers 1, 3, 5, etc and the products have group numbers 2, 4, 6, etc. Atoms that are mapped between a reactant and a product are allocated the same serial number; all other atoms have unique serial numbers.
| Command: | OPEN FILE=filename.rdf |
| SAVE FILE=filename.rdf | |
| SAVE FORMAT=RD FILE=filename.ext | |
| Dialog: | File > Open > Files of type: MDL Reaction |
| File > Save As > Save as type: MDL Reaction |
SD files
When reading molecules from an SD file, THINK v1.23 includes the option to take the molecule names from a specified data field in the file. The field is identified through the NAME keyword as part of the OPEN command.
| Command: | OPEN FILE=filename.sdf NAME=field |
R-group attachment points can now be saved in SD files using the pseudo-atom "R#" to denote each attachment point, which is then identified in a subsequent "M RGP" record. Full details of the SD file format, including "M RGP" records, can be found on the website for MDL Information Systems, Inc (www.mdli.com).
SMILES files
Reactions and transformations read from SMILES, RD and RXN files can now be saved in SMILES files with the following format:
| reactant1+reactant2+...>product1+product2+... |
THINK will automatically detect normal molecules, reactions and transformations and use the appropriate SMILES format for each type.
KEY files
The functional group keys of one or more molecules can now be saved in a key file. Each record in the file corresponds to a single molecule and contains the SMILES string, name and "key-string" for the molecule using a comma-separated-variable (CSV) format. The "key-string" is a string of 64 hexadecimal digits (0-F), with each digit corresponding to 4 functional group keys. The strings can be used to compare molecules without needing to know the exact breakdown of the keys. If any user wishes to interpret the string to the level of the individual keys they should contact Treweren Consultants.
| Command: | SAVE FILE=filename.key |
| SAVE FORMAT=KEYS FILE=filename.ext | |
| Dialog: | File > Save As > Save as type: 2D keys |
Overwriting or appending structure files
It is now possible to include a prefix with the molecule file name to indicate whether the new data file should overwrite or be appended to any existing file with the same name. Prefixing the file name with "+" will append the new data, and "-" will overwrite an existing file. If the file does not already exist, it will be created as normal (ie as though the prefix has not been supplied). If the prefix is omitted, THINK will produce an error message if the file already exists.
Invalid molecule names
Invalid molecule names read from structure files are now converted into a form that can be used within THINK. Molecule names (which are not case-sensitive) may contain the following:
All other characters will be replaced by "~".
Spaces in path and file names
THINK v1.23 can handle file names and paths that include spaces providing the full path and filename are enclosed in double quotes ", eg "my files\amino acids.smi".
File explorer
Two new buttons have been added to the file explorer window: Open to open the selected file, and Close to close it. These buttons perform exactly the same function as the Open and Close items on the pop-up menu displayed by the right-hand mouse button.
THINK v1.23 extends the range of R-group searches and enumeration to include the use of reactions. This means that the queries for an R-group search can be defined in a more intuitive manner. In previous versions of THINK a separate substructure query was required to create each set of R-groups. In THINK v1.23 all the searches can be specified through a single reaction. As an extra enhancement, it is no longer necessary to enumerate and store a library before using it in substructure or 3D searches.
Reactions as R-group queries
A reaction can be defined in a SMILES file using the following syntactical rules:
Thus, a reaction to generate amides from amines and acid chlorides could be written as:
[1]N(H)(H)+[2]C(=O)Cl>[1]NC(=O)[2]
When the R-group search is initiated, use of a reaction query is indicated by including the SITE=atom keyword as part of the SEARCH command, where atom is an atom specification for one of the atoms in the desired reactant. If the SITE keyword is omitted, THINK assumes that the query is a standard R-group substructure query. The most common atom specifications used with the SITE keyword are those of the connection atoms, since their names are identical to their connection numbers. Thus in the above example, SITE=1 would search for amines, and SITE=2 for acid chlorides. It is important that the atom specification used is sufficiently precise to allow THINK to identify the component to be used in the search. This is particularly important if general wildcards such as [CAK] (chain carbon) are used instead of [n], as there may be more than one atom with the same name. In these circumstances it may be necessary to include the group number in the atom specification. Reactants have group numbers in the series 1, 3, 5, ... with the numbers being allocated to the reactants in the order they are read from the file. in the above example, [1]N(H)(H) would have group number (.1) and [2]C(=O)Cl would have group number (.2). Products have group numbers in the series 2, 4, 6, etc. See the THINK Theory Manual for a full list of wildcard atom types.
It is also recommended that OPTIONS=PARENT,FILTER is also included in the SEARCH command: PARENT to eliminate salts and FILTER to remove R-groups that are not drug-like. The FILTER keyword applies a learn file to the reagents to eliminate those with properties that are not drug-like (for group additive properties such as molecular mass, only the upper limit is applied).
| Command: | SEARCH MODE=R-GROUP SITE=atom ... OPTIONS=PARENT,FILTER |
Reactions in enumeration
When an R-group search has been defined using a reaction query, the product(s) of the reaction form the core group for the subsequent enumeration. Starting with THINK v1.23, the reaction file can be supplied as the file containing the core group. In previous versions, a separate file containing the core molecules had to be created. THINK v1.23 will automatically take all the products from the reaction as components in the core group.
| Command: | SAVE FILE=output R-GROUPS=reaction,R1,R2,... |
| Dialog: | File > Enumerate > Core : set to reaction file |
Automatic enumeration during searches
In order to perform a search on a library in previous versions of THINK, the library first had to be enumerated and stored in a file. In THINK v1.23 this is no longer necessary as the molecules can be enumerated automatically during the search. The files containing the core components and the R-groups should be read into THINK before the search is performed. They may be passed directly to the search via the FILE keyword (used to specify the file to be searched) as a comma-separated list of files in exactly the same manner as they would be supplied during normal enumeration (ie core first, followed by R-groups in order of application).
| Command: | SEARCH MODE=2D QUERY=#1 OPTION=ORDER OUTPUT=file.SMI FILE=core,rg1,rg2,rg3,... |
THINK v1.23 has introduced a 3D display control which allows the colour, visibility, etc of atoms to be changed.
Control Panel
The results generated by a virtual screening search are usually viewed in two different ways:
The former option has been available within THINK since its earliest releases (through the command "DISPLAY MODE=3D QUERY=site MOLECULE=*"), and THINK v1.23 now includes support for the latter option. This is implemented through the 3D display control panel (often known simply as the display panel). The panel, which is displayed in a separate window, is enabled through a toggle on the View > Molecule Dialog. When the panel is active, THINK automatically superimposes all the molecules and draws them in a single 3D display. The user can then select individual atoms or molecules to hide or re-display, or can change their colouring.
| Dialog: | View > Molecule > Display Panel (toggle on) |
Within the panel, each molecule is listed in a separate column: the exact style depends upon the type of molecule:
| Molecule type | Listing style |
| Small molecule | Atom names |
| Protein | Chain id, residue number (every 10th residue) and residue name |
Picking an atom or residue from the listing will highlight it in grey on the panel and in the 3D display. Once an atom/residue has been selected, the panel pop-up menu can be brought up using the right-hand mouse button. This pop-up menu contains options to alter the colour and visibility of the selected atom/residue, and includes the following items:
| Menu item | Description | Protein Only? |
| Select whole molecule | Selects all the atoms in the molecule containing the selected atom | |
| Invert selection | Selects all atoms except those currently selected | |
| Colour by > Molecule | Cycles through the available colours, applying the next colour to the molecule | |
| Colour by > Atom type | Colours the atoms according to their atom type | |
| Colour by > Residue type | Draws all hydrophobic residues in the active colour and hydrophilic residues in the inactive colour | Y |
| Colour by > Hydrophilicity | Draws all lipophilic atoms in the active colour | |
| Colour by > Charge | Draws ASP and GLU residues in the active colour; LYS, HIS and ARG residues in the inactive colour | Y |
| Hide > Selection | Makes selected atoms/residues invisible | |
| Hide > Side-chains | Makes the side chains of the selected residues invisible | Y |
| Hide > Hydrogens | Makes the hydrogen atoms within the selected molecules invisible | |
| Hide > Dummies | Makes the dummy atoms within the selected molecules invisible | |
| Hide > All molecules | Makes all atoms/residues invisible | |
| Show > Selection | Makes selected atoms/residues visible | |
| Show > All molecules | Makes all atoms/residues visible |
Molecule manipulation
Molecules displayed in 3D may be rotated using the middle mouse button and translated using the right-hand mouse button without selecting the motion type from the pop-up menu. It is still possible to select the motion type from the pop-up menu and then use the left-hand mouse button to control the manipulation.
THINK v1.23 has introduced a range of changes to the parser which is used to interpret all commands entered by the user either via the command line or from command scripts. All changes should be transparent to users who prefer to use the Dialogs to control THINK.
Commands and keywords
It is now possible to enter a series of commands, with associated keywords, on a single line by using a semicolon ";" to separate the commands.
| eg | ROTATE ABOUT=(2)^ASP-(5)^ASP ANGLE=90; DISPLAY MODE=3D |
A new command "@" has been introduced as a synonym for "CALL" to execute a command script, ie the command "@LOOP.LOG" is the same as "CALL LOOP.LOG".
The CLOSE command may be used to close text files created by the WRITE command.
The parser now reports any required keywords that have been omitted from a command.
Symbols and operators
In earlier releases symbols were defined by issuing the command "LET symbol = value". This command may now be shortened to "symbol=value": the "LET" and the spaces are no longer required. Spaces may also be omitted around the arithmetic and string operators.
| eg | "LET A = 3 * 2" and "A=3*2" both assign a value of 6 to the symbol A |
The list of arithmetic operators has been extended in THINK v1.23 with the introduction of the modulus operator "%", and the second string substitution operator has been changed to "~". The full list of arithmetic and string operators, in order of priority, is now:
| Arithmetic | |
| % | Modulus |
| ^ | Exponentiation |
| * | Multiplication |
| / | Division |
| + | Addition |
| - | Subtraction |
| String | |
| . | String concatenation |
| ? xx ~ yy | String substitution - replace xx with yy |
(The second string substitution operator used to be "%", and this value is still supported for backwards compatibility although its use is now discouraged).
Symbol listing
It is now possible to selectively list the values of symbols by using the SELECT keyword as part of the LIST INFO=SYMBOL command. The keyword takes a single argument that may be a symbol name or a string containing wildcards, with "%" representing a single character and "*" a string of zero or more characters.
| eg | LIST INFO=SYMBOL SELECT=MYMOL |
| LIST INFO=SYMBOL SELECT=MY%OL* |
New functions
THINK v1.23 introduces a range of functions for use in command scripts or at the command line. Each function takes a number of arguments and returns a single integer, real or string value that may be assigned to a variable.
In the table below, ival indicates an integer argument, rval a real argument and cval a character argument.
| Function | Return value | Description |
| $SQRT(rval) | Real | Returns the square root of rval |
| $EXP(rval) | Real | Returns erval |
| $LOG(rval) | Real | Takes the natural logarithm of rval |
| $LOG10(rval) | Real | Takes the common logarithm of rval |
| $ABS(rval) | Real | Returns the absolute value of rval |
| $INT(rval) |
Integer | Returns the integer part of rval truncated towards zero, ie $INT(3.4) returns 3, $INT(-3.4) returns -3 |
| $NINT(rval) | Integer | Returns the nearest integer to rval. If rval>0 $NINT(rval) has the value $INT(rval+0.5). If rval≤0 $NINT(rval) has the value $INT(rval-0.5) |
| $CEILING(rval) | Integer | Returns the nearest integer that is greater than or equal to rval, ie $CEILING(3.1) returns 4, $CEILING(-3.1) returns -3 |
| $FLOOR(rval) | Integer | Returns the nearest integer that is less than or equal to rval, ie $FLOOR(6.3) returns 6, $FLOOR(-6.3) returns -7 |
| $TRUNCATE(rval1,ival2) | Real or integer | Truncates rval1 to ival2 decimal places, ie $TRUNCATE(2.468,2) returns 2.46. ival2 must be in the range 0-3. If ival2=0, $TRUNCATE returns the same value as $INT(rval1) |
| $ROUND(rval1,ival2) | Real or integer | Rounds rval1 to ival2 decimal places, ie $ROUND(2.468,2) returns 2.47. ival2 must be in the range 0-3. If ival2=0, $ROUND returns the same value as $NINT(rval1) |
| $MAX(rval1,rval2) | Real | Returns the larger value of rval1 and rval2 |
| $MIN(rval1,rval2) | Real | Returns the smaller value of rval1 and rval2 |
| $CPUTIME() | Real | Returns the number of seconds of CPU time used by the current THINK session |
| $ICHAR(cval) | Integer | Returns the ASCII value of the first character in cval |
| $CHAR(ival) | Character | Returns the character corresponding to the ASCII code ival |
| $INDEX(cval1,cval2) |
Integer | Returns the starting position of substring cval2 within character string cval1. A value of 0 is returned if cval2 is not found |
| $LENGTH(cval) | Integer | Returns the length of character string cval |
| $TRIM(cval) | Character | Returns the string cval with all leading and trailing spaces removed |
| $LOWCASE(cval) | Character | Returns the string cval with all uppercase characters converted to their lowercase equivalents |
| $UPCASE(cval) | Character | Returns the string cval with all lowercase characters converted to their uppercase equivalents |
| $VERSION() | Character | Returns the THINK version number (eg 1.23b) |
| $FIELD(cval1,cval2) | Real | Returns the value stored in data field cval1 for molecule cval2 |
| $MOLECULE(ival) | Character | Returns the name of the ival'th molecule within THINK |
| $ATOM() | Character | Returns the name of the ival'th atom within THINK |
| $QUERY() | Character | Returns the name of the query molecule |
| $FEXIST(cval) | Character | Returns TRUE if the file cval exists, otherwise returns FALSE |
| $FDELETE(cval) | Character | Attempts to delete the file cval and returns TRUE if the file is deleted successfully, otherwise returns FALSE |
More Common Variables
The list of THINK common variables available to the user has been extended to include the following:
| Variable name | Description | See | Default |
| GSTHBD | DGhbond constant in the site search scoring function | Theory Manual | -3.34 |
| GSTLIP | DGlipo constant in the site search scoring function | Theory Manual | -0.117 |
| GSTBAD | DGbad constant in the site search scoring function | Theory Manual | 0 |
| NSHITS | Number of hits found in the most recent search | ||
| NSTOTL | Number of molecules searched in the most recent search | ||
| I3DREP | Site search scoring function check for intramolecular contacts involving H atoms (0=retain; 1=ignore) | 0 |
Minor Enhancements
| Command: | CUSTOMISE TILE=size |
| Dialog: | File > Preferences > Display : Tile Size |
Bug Fixes
| PROPERTY=keyword | Action |
| NOKEYS | Exclude all functional group key information from the calculation |
| NOFIELDS | Exclude all field data from the calculation |
The Linux and Windows code has been integrated to form a single source file. This means that most options are now supported under both operating systems, apart from the graphical user interface (GUI) which is only available under Windows.
Command mode
The command interface supported under Linux in previous releases are now available under Windows. The command interface uses commands of the form:
server -option [argument1 [argument2]]
where the number of arguments depends upon the option specified. Under Linux an ampersand "&" should be appended to the end of the command to indicate that the server instance is to be run in the background. This is essential when starting the server.
The table below lists the options available. Each option is described in more detail in the THINK Server Manual.
| Function | Option keywords | ||||||||
| Starting the server |
|
||||||||
| General |
|
||||||||
| Managing jobs |
|
When using the command interface, a new instance of the server application is created to execute the command. For commands which modify the queue (those used to manage jobs) the instance will terminate as soon as the command has been executed. However, in command mode only one instance of the server application may modify the queue file. Consequently, all copies of the server application must be stopped before the queue is modified (eg adding new jobs or changing the status of queued jobs).
It is recommended that Windows users should use the GUI to manage the THINK
Server.
Job specification in command mode
It is now possible to remove a range of jobs in a single command, eg "/remove j23:j40". Abbreviation of job names is still supported.
Working folder
THINK and the THINK Server application now assume that the folder containing the executable image is also the THINK_EXEC, THINK_SERVER and THINK_WORKDIR folders unless these variables are defined in the environment file "think.env". It is no longer possible to override these definitions through environment variables.
In previous releases, the server PC used the THINK_SERVER folder as its working folder. This has changed in v1.23, and the server now uses the THINK_WORKDIR folder. It is essential that the server and all client PCs use the same working folder (see below).
Job allocation
Before THINK Server v1.21, jobs were allocated by the client. In v1.21 and later versions, all jobs are allocated by the server application. This requires the presence of an audit trail file with the name "node.tlg" in the working folder for each client, where node is the name of the client PC. If the file is not in the correct folder, the server will not detect that the client exists, and will not allocate any jobs to that client PC.
This solution addresses some access conflicts between clients and the server which arose under Linux.