Release Notes v1.23

This file contains the release notes for THINK v1.23 and THINK SERVER v1.23.

THINK v1.23

Fortran 95

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.

Site Searching

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 <= < 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).

Conformer Generation

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)

Detection of Receptor Site

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:

  1. Construct a grid of points around the protein

  2. Mark each grid point that lies inside the protein as an "inside" point

  3. Mark each point in the grid that lies well outside the protein (ie is not close to the protein surface) as an "outside" point. This is done by centring a 4Å sphere on each unmarked point and examining the grid points that fall within the sphere. If the sphere does not contain any "inside" points, all the points in the sphere are marked as "outside"

  4. Any points that have not been marked as "inside" or "outside" by this stage could potentially lie within an active site. THINK organises these into groups of contiguous unmarked points, rejecting any group that does not contain at least 3 points, and identifies the residues that lie around the edge of the group as those defining the active site. A residue must have a heteroatom within 4.6Å of 3 or more points in the group to be included in the active site. Any active site that contains fewer than 3 residues is rejected.

  5. Sort the active sites into descending order of size and create the SITE-n arrays, with the largest site in the SITE-1 array.
Command: MODIFY SITE=protein
Dialog: Edit > Site > Find Sites

Creation of Site Queries

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.

Filtering

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.

Exact Match Searches

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

Pharmacophores

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  
Data for pharmacophore n, in the format:
  xxxxdddddd 4-centres
  xxxddd 3-centres
  xxd 2-centres
where:
  x is a centre, represented by a 1-letter code
  d is a distance bin, represented by a single digit or letter
  RCOUNT   Pharmacophore count

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.

Combinatorial Chemistry

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,...

3D Display

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.

Changes to the Parser

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

Other Changes

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

Bug Fixes


Release Notes for THINK v1.20


Server v1.23

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
-auto
-invisible
-monitor
-visible
General
-help
-list
-status
Managing jobs
-add -hold
-allocate -release
-cancel -remove
-deallocate -reset

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.


Release Notes for v1.20