MCL Manual
Daylight Version 4.9
Release Date 08/01/11
Copyright notice
This document is copyrighted © 1991-2011 by Daylight
Chemical Information Systems, Inc. Daylight explicitly
grants permission to reproduce this document under the
condition that it is reproduced in its entirety, including
this notice. All other rights are reserved.
Table of Contents
1. Introduction
2. Conventions Used in this Document
3. Reserved Words
4. MCL Environment
5. MCL Objects
6. Defaults and Style
7. Search Logic
8. MCL Statements
9. Changes in this Release
10. Index
1. Introduction
MCL is an English language interface to Merlin. In general:
- MCL is intended to be readable and writable by both machines and humans.
- MCL statements consist of reserved words and other text, mainly
user-defined names for things such as columns and hitlists.
- MCL statements resemble English sentences: the first word starts with
a capital letter; statements end with a period; everything is case
sensitive. Correct MCL grammar is also correct English grammar.
- Whitespace outside quoted text is ignored. Line numbers are
reported for errors; line-breaks (newlines) are otherwise ignored.
- Non-reserved text needs to be quoted only if it collides with
reserved words or contains characters other than letters or digits.
For clarity, such text is uniformly quoted in this document.
2. Conventions Used in this Document
The following section includes prototypes and brief explanations for all
MCL statements, using these conventions.
        |
"text" |
user text prototype; quotes are not needed if text doesn't
contain reserved words and contains only letters and digits. |
word |
words not in quotes are case-specific reserved words |
[A] |
optional specification, i.e., A may be omitted |
[A|B] |
optional choice, i.e., accepts A or B or neither |
[A ...] |
repeating specification, i.e., A may be repeated |
<word> |
reserved word required, typically a flag |
The following prototypes are used in this document:
        |
column |
name of column (as per previous Create column...) |
database |
database name in the form: base@host:service:user |
field |
field name (e.g., "pH") or field number (e.g., "#5") |
fontname |
short font name as per option, or "default" |
hitlist |
hitlist name |
hitlist2 |
name of a different hitlist than "hitlist" |
integer or n |
an integer, e.g., just digits |
lpr |
lines per row, an integer in range 1-8 |
max |
maximum value, form is context dependent |
min |
minimum value, form is context dependent |
name |
user supplied name, max length 128 chars |
regexp |
regular expression |
smarts |
a molecular pattern in the SMARTS language |
smiles |
a molecule in the SMILES language |
string |
a string of any character except NUL (\" means "). |
tag |
a datatype tag |
tan |
a real (tanimoto) value in the range 0.0 - 1.0 |
User entry conventions:
this entry |
is the same as |
"column" |
[ column ] "column" |
["hitlist"] |
[ [ hitlist ] "hitlist" ] |
alpha |
alpha "alpha" |
beta |
beta "beta" |
Assume this has been done:
Set default hitlist "defhits".
Then:
statement |
equivalent full statement |
Remove "CLUSTER" repeats. |
Remove column "CLUSTER" repeats. |
Reset "defhits". |
Reset hitlist "defhits". |
Reset. |
Reset hitlist "defhits". |
Move to row 10 of "defhits". |
Move to row 10 of hitlist "defhits". |
Move to row 10. |
Move to row 10 of "defhits". |
... Tversky 0.9 0.1 ... |
... Tversky alpha 0.9 beta 0.1 |
3. Reserved Words
The following (case-sensitive) words are reserved in MCL:
above default least Print structure(s)
Add depiction less Put
alpha Display lines range substring
ares down list Read substructure(s)
as entitled matching regexp
at Exchange missing Remove superstructure(s)
available field repeats table
below file molecule(s) Reset tautomer(s)
beta font Move Reverse text
by Free named row than
Clear from nativeorder Select to
column function next Set Tversky
containing graph(s) non similar tversky
Copy hitlist not similarity up
Create in of Sort value(s)
database into pattern status with
datatype Invert per string(s) Write
The following words (sort flags) are also reserved in MCL:
/AAZ /ANC /ANCP /ANCPW /ANCW /ANP /ANPW
/ANW /ASC /CAS /LEN /MF /NAB /NUM
The following pairs of reserved words are synonyms:
graph ........... graphs
molecule ........ molecules
string .......... strings
structure ....... structures
substructure .... substructures
superstructure .. superstructures
tautomer ........ tautomers
value ........... values
Additionally, the symbols $1 - $9 are reserved as formal parameters.
4. MCL Environment
MCL is designed to run in various environments: internally in an
interactive program such as xvmerlin, as a CGI program run by a server
such as httpd, and as a non-interactive "batch" process. Actually, in
all cases MCL runs in a non-interactive way, i.e., a whole program (or
at least a whole statement) is expected to be delivered to the MCL
processor. MCL features which are environment-specific are described
here.
Some MCL output control statements are provided for use in an
xvmerlin-like environment. These statments are ignored in an ASCII-
oriented batch environment. Examples of such commands are:
Set font "Times-14".
Display smiles as depiction.
In an interactive environment like xvmerlin, user input is typically
transcribed to the MCL program which is then run. Although this is
possible in a batch environment, it is often more convenient to use a
fixed MCL program with data supplied externally, e.g., via command line
arguments in the `mcl' program. The symbols $1 - $9 are
used to refer to formal parameters to the MCL program. Each symbol
represents an externally supplied string which is used as an MCL
language token. If a parameter is referenced in MCL but not supplied
by the environment, the MCL program generates an error and quits.
A few (very few) other MCL statements operate differently in different
environments. The most important example is "Select
database..." . In an interactive environment such as xvmerlin,
the database to be selected is expected to be already open; if not, the
statement fails and a warning is issued. In a batch environment,
"Select database..." connects to servers and opens
specified database(s); the statement only fails if a database fails to
open for some reason.
5. MCL Objects
The most fundamental MCL object is the database, selected with the
"Select database..."
statement. All MCL statements apply to the currently selected database.
To be useful, each database must have one or more named columns, which
represent a kind of data (actually, one field of a datatype) and a function
(e.g., the FIRST, LONGEST, AVERAGE, COUNT,
etc. of that kind of data).
To be useful, each database must also have one or more named hitlists,
which represent an ordered set of entries in the database. Positions in a
hitlist are referred to as "rows". On initial creation, hitlists represent
all entries in the databases, i.e., there are the same number of rows in a
hitlist as there are entries in its database, and the initial order is
defined as the "native order" of the database.
Hitlists have a "current position" property. Although this is referred to
by its numeric (1-origin) position in the hitlist, the "current position"
is defined by the entry in that position, and is stable with respect to
operations which change the hitlist order. In other words, if the entry at
the "current position" before an operation is present after the operation,
it will still be current.
6. Defaults and Style
To produce readable MCL code, it is wise to select names carefully.
In our examples we give columns short names consisting capital letters
(which tends to make them stand out) and hitlist names that end with
the word "hits", e.g., "hits" or "curhits" or "savehits".
A number of conventions are used in our examples for clarity: hitlists
are usually specified explicity, user-supplied names are shown quoted,
and each statement is shown on its own line, e.g.:
Reset "hits".
Sort "hits" by "COST".
Sort "hits" by "CLUSTER".
Remove "CLUSTER" repeats in "hits".
In general, columns and hitlists may be specified using only their names.
If it seems clearer to do so, the keywords "column" or "hitlist" may
precede column and hitlist names, although it is never required.
The following MCL code produces the same program as that above:
Reset hitlist "hits".
Sort hitlist "hits" by column "COST".
Sort hitlist "hits" by column "CLUSTER".
Remove column "CLUSTER" repeats in hitlist "hits".
However, it is perfectly acceptable to omit quotes and references to
the default hitlist as long as the meaning remains clear, e.g., the
following MCL code also means the same thing as that shown above:
Reset. Sort by COST. Sort by CLUSTER. Remove CLUSTER repeats.
Tautomer and graph searches are unusual because they are done by the
Thor server directly from SMILES (all other searches are done by the
Merlin server on data in columns). In these searches (only) the search
is always done with data from a SMILES ($SMI) column; MCL syntax gives
you no opportunity to move to the next tautomer in an existing hitlist
or specify which column is to be searched, e.g.:
Put tautomers of "O=c1[nH]c2cncnc2[nH]1" into "hits".
7. Search Logic
Merlin provides 10 different types of searches:
- find superstructure of a given molecule (replacing H's)
- find molecules which match a given SMARTS pattern
- find substructures with a given embedded molecule
- find tautomers of a given molecule
- find molecules with same oxdation-suppresed graph as given molecule
- find structures which are similar to a given molecule
- find strings which are contain an given embedded substring
- find strings which match a regular expression exactly
- find strings which match a regular expression approximately
- find values in a given range
Each type of search may be invoked to produce in seven different actions:
- create a new hitlist of matching entries
- add matching entries to a hitlist
- add non-matching entries to a hitlist
- delete matching entries from a hitlist
- delete non-matching entries from a hitlist
- find matching entry in a hitlist
- find non-matching entry in a hitlist
The English-like MCL language allows these (70) different searches
to be specified quite naturally, e.g., to create a hitlist of
dopamine superstructures:
Put SMILES superstructures of "NCCc1ccc(O)c(O)c1" into "hitlist".
Note that there is no way to create a hitlist of non-matches using
just one statement. Use two statements to do this, e.g.,
Put SMILES superstructures of "NCCc1ccc(O)c(O)c1" into "hitlist".
Invert "hitlist".
or use the reverse logic:
Clear "hitlist".
Add SMILES non superstructures of "NCCc1ccc(O)c(O)c1" to "hitlist".
In general, "non" or "not" is used as a word to reverse the meaning
of a match. The one exception is similarity search where the following
two statements refer to complementary sets of structures:
Remove SMILES structures at least 0.9 similar to "NCCc1cc(O)c(O)c1".
Remove SMILES structures less than 0.9 similar to "NCCc1cc(O)c(O)c1".
In an attempt to clarify the effect of a search operation, MCL syntax
requires that the preposition must match the verb, e.g.:
Put ...... into "hitlist".
Add ...... to "hitlist".
Remove .... from "hitlist".
Move to ... in "hitlist".
"Move to ..." searches cause the current position to be moved to the next
entry which meets the given requirements, i.e., the next position in the
current hitlist, starting with the current position. For example, this
MCL code produces a hitlist of entries with known pKa's, sorted by pKa:
Reset "hits".
Remove missing "pKa" from "hits".
Sort "hits" by "pKa".
If we move to the first entry in this list which meets another criterion,
e.g., a given pharmacological activity, we are assured that we are pointing
to the one which has the lowest-valued pKa:
Move to row 1.
Move to "ACTIVITY" string containing "NARCOTIC" in "hits".
We can remove entries with lower pKa values (row 0 is current position):
Remove above row 0 of "hits".
And then do the reverse:
Reverse "hits".
Move to row 1.
Move to "ACTIVITY" string containing "NARCOTIC" in "hits".
Remove above row 0 of "hits".
The resulting hitlist now contains "all entries with pKa's in the range
of pKa's of known narcotics". One might repeat this type of search
for other properties (LogP, CMR, etc.) to select structures which meet
an observed physiochemical profile (e.g., of known narcotics).
All Merlin (and thus MCL) sorts are stable, i.e., after a sort, the
order of entries with equal value is unchanged. For example, the
following MCL code produces a hitlist containing only the lowest-cost
member of each cluster.
Reset "hits".
Sort "hits" by "COST".
Sort "hits" by "CLUSTER".
Remove "CLUSTER" repeats in "hits".
8. MCL Statements
-
Select database "database" [ "thorbase" ].
Selects a database by name in the form: base@host:service:user.
"database" is used for Merlin access; "thorbase" for Thor access.
If "thorbase" is not specified, "database" is used with the service
name "thor". Only the "base" part of the name is needed, e.g. "wdi93".
Default values are the local machine name for "host"; "merlin" or
"thor" for "service"; and the user's login name for "user".
Since MCL is designed to run in a non-interactive environment,
one may specify user and database read passwords ("userpw"
and "basepw" respectively ) in database names, i.e.,
base%basepw@host:service:user%userpw
Beware: it is tempting to write passwords directly into MCL programs
and scripts -- if you are maintaining a secure database, having such
files around will undermine your security.
Assume you have an MCL program ("myprog.mcl") which accesses a database
("hotdrugs") with a read password ("passone") served by the thor
services on a remote host ("computer") with thor user password ("passtwo").
What you want to avoid is writing database names into the MCL program, e.g.,
Select database "hotdrugs%passone@computer:thor:thor%passtwo".
Instead, program MCL database selection using parameter(s):
Select database $1.
and call the MCL program with a database parameter
containing environment variables (which can be in a script):
$ mcl -i myprog "hotdrugs%$MY_HOTPASS@computer:thor:thor%$MY_PASS"
The MCL program (and the script calling it) will work if you have set
the environment variables MY_HOTPASS and MY_PASS correctly, which
you can do interactively if you desire.
This approach isn't perfect and it's a bit of a hassle
(universal aspects of security),
but is well-suited to many of our customer's environments.
-
Create column of datatype "tag" [field "field"] [function <func>]
named "name".
Creates a named column. "tag" is an internal tag, e.g. "$CAS".
"field" may be either a field name
(e.g., "Reference") or the 0-origin index of the field,
preceded by '#' (e.g., "#0" refers to the first field).
If unspecified, the first field ("#0") is used.
If specified, <func> must be one of the following:
ALL AVERAGE COUNT FIRST LAST
LONGEST MAXIMUM MINIMUM SHORTEST STDDEV
If unspecified, FIRST (the first dataitem) is used.
Two kinds of columns are special in that they are required for certain
kinds of searches: a column of type "$SMI" (SMILES) is required for
tautomer and graph searches and a column of type "SIMILARITY" is
required for sorting or searching by structural similarity.
By convention, columns are named after the type of data and are
composed of capital letters. However, any string can be used
(though you might have to quote it), e.g.,
Create column of datatype P function AVERAGE named "Mean(LogP(o/w))".
-
Create hitlist "hitlist".
Creates an empty, named hitlist. Hitlists are relatively expensive,
so it's a good idea to reuse them. By convention, hitlists names end
with "hits", e.g., "hits", "curhits" and "bkphits". However, any
string may be used (though you might have put quotes around it).
-
Free column "column".
Free hitlist "hitlist".
Free database "database".
Free object by name in current context (database).
Freeing a database automatically frees its columns and hitlists.
-
Set default hitlist "hitlist".
Make named hitlist default -- if the hitlist is not specified in MCL
statements where it is optional to do so, this hitlist will be used.
The first hitlist created for each database is normally the default
and need not be set explicitly. It is important to set the default
hitlist only if you want to use a different one or if you deallocate
an existing default hitlist (with Free hitlist...).
-
Reset ["hitlist"].
Reset the named (or default) hitlist such that all rows are hit,
i.e., same as xvmerlin's "Set all hit" menu item.
Note: this doesn't quite mean "reset to initial state", because
the current hit (if any) remains current. You can truly reset to
the initial state by:
Reset "hitlist". Move to row 1 of "hitlist".
-
Clear ["hitlist"].
Clear the named (or default) hitlist such that no rows are hit,
i.e. same as the sequence:
Reset "hitlist". Invert "hitlist".
-
Invert ["hitlist"].
Invert the named (or default) hitlist,
i.e., make non-hits hits and vise-versa.
-
Reverse ["hitlist"].
Reverse the order of the named (or default) hitlist.
-
Copy "hitlist" to "hitlist2".
Copy the contents of one extant hitlist to another.
This can be used to backup a hitlist
(e.g., Copy curhits to bkphits.) for later operations
such as restoration (e.g., Copy bkphits to curhits.)
-
Add "hitlist" to "hitlist2".
Add hits in the first hitlist to those in the second. E.g., the statement
Add bkphits to curhits.
replaces curhits with the union of curhits and bkphits.
-
Select "hitlist" in "hitlist2".
Remove hits in the second hitlist which are not in the first. E.g.,
Select bkphits in curhits.
replaces curhits with the intersection
of curhits and bkphits.
-
Exchange "hitlist" with "hitlist2".
Exchange the contents of the two hitlists, e.g., the implementation of
the "undo" facility in xvmerlin is equivalent to:
Exchange undohits with curhits.
-
Move to row "integer" [of "hitlist"].
Set the current hitlist position, where "integer" is interpreted as:
unsigned number .... absolute row number (1 is first row)
zero ............... current row
signed number ...... number relative to current row
Moves to approprate extreme value (first or last row) if out-of-range, e.g.,
Move to row 9999999.
will move to the last row of most databases.
-
Remove row "integer" [of "hitlist"].
Remove above row "integer" [of "hitlist"].
Remove below row "integer" [of "hitlist"].
Removes row(s) from hitlist.
-
Remove "column" repeats [in "hitlist"].
Removes rows from hitlist with values in given column which are
identical to the value in the previous row. Typically used to
select the first row of each value in a sorted list.
-
Remove missing "column" [in "hitlist"].
Removes rows from hitlist for which data is not available in given column.
-
Put "column" superstructures of "smiles" [into "hitlist"].
Add "column" [non] superstructures of "smiles" [to "hitlist"].
Remove "column" [non] superstructures of "smiles" [from "hitlist"].
Move to "column" [non] superstructures of "smiles" [in "hitlist"].
The classic "substructure" search. The "Put" form replaces the given
hitlist; "Add" and "Remove" modify it; "Move" sets the current position
but leaves the hitlist unchanged. $SMI or ISM columns are typically used.
-
Put "column" structures matching "smarts" [into "hitlist"].
Add "column" structures [not] matching "smarts" [to "hitlist"].
Remove "column" structures [not] matching "smarts" [from "hitlist"].
Move to "column" structure [not] matching "smarts" [in "hitlist"].
Search for a SMARTS pattern. "Put" form replaces the given hitlist;
"Add" and "Remove" modify it; "Move" resets the current position but
leaves the hitlist unchanged. $SMI or ISM columns are typically used.
-
Put "column" substructures of "smiles" [into "hitlist"].
Add "column" [non] substructures of "smiles" [to "hitlist"].
Remove "column" [non] substructures of "smiles" [from "hitlist"].
Move to "column" [non] substructure of "smiles" [in "hitlist"].
Converse of the classic "substructure" search, this one looks for
structures embedded in the given molecule. The "Put" form replaces
the given hitlist; "Add" and "Remove" modify it; "Move" resets the
current position but leaves the hitlist unchanged. $SMI or ISM
columns are typically used for "column".
-
Put "column" structures <op> "tan" similar to "smiles"
[into "hitlist"].
Add "column" structures <op> "tan" similar to "smiles"
[to "hitlist"].
Remove "column" structures <op> "tan" similar to "smiles"
[from "hitlist"].
Move to "column" structure <op> "tan" similar to "smiles"
[in "hitlist"].
... where <op> is <at least | less than>.
Select (or find) structures based on similarity to a given molecule.
"tan" is a number indicating Tanimoto similarity for qualification
where 1.0 is perfect similarity (identity). These values are typically
used:
0.90 ...... very high
0.75 ...... high
0.60 ...... moderate
0.50 ...... rough
$SMI or ISM columns are typically used for "column", e.g.,
Add SMILES structures at least 0.9 similar to "NCCc1ccc(O)c(O)c1".
Note: a column of type SIMILARITY must exist to do these searches.
Beginning with 4.9, the input 'smiles' argument may be an ASCII
fingerprint string. Merlinserver checks the input string and if it
detects a fingerprint it uses the fingerprint as the query directly.
Note that the size of the fingerprint must be at least as large as
the largest fingerprint in the pool being searched, otherwise an
error is returned (merlinserver can fold the query down as needed
but can't "unfold" one to match a larger database fingerprint).
-
Put "column" structures <op> "value" Tversky alpha beta to "smiles"
[into "hitlist"].
Add "column" structures <op> "value" Tversky alpha beta to "smiles"
[to "hitlist"].
Remove "column" structures <op> "value" Tversky alpha beta to
"smiles" [from "hitlist"].
Move to "column" structure <op> "value" Tversky alpha beta to
"smiles" [in "hitlist"].
... where <op> is <at least | less than>
Select (or find) structures based on Tversky similarity to a given
molecule using given alpha/beta parameters.
Alpha and beta are typically in the range 0.0 - 1.0.
"value" is a number indicating Tversky similarity;
the meaning depends on specific alpha/beta settings but higher
values are typically used than with Tanimoto similarity, e.g.,
0.95 ...... very highly similar
0.90 ...... highly similar
0.85 ...... moderately similar
0.80 ...... roughly similar
0.00 ...... select all structures
$SMI or ISM columns are typically used for "column", e.g.,
Add structures at least 0.9 Tversky alpha
0.9 beta 0.1 to "NCCc1ccc(O)c(O)c1".
Note: a column of type SIMILARITY must exist to do these searches.
Beginning with 4.9, the input 'smiles' argument may be an ASCII
fingerprint string. Merlinserver checks the input string and if it
detects a fingerprint it uses the fingerprint as the query directly.
Note that the size of the fingerprint must be at least as large as
the largest fingerprint in the pool being searched, otherwise an
error is returned (merlinserver can fold the query down as needed
but can't "unfold" one to match a larger database fingerprint).
-
Put <tautomers | graphs> of "smiles" [into "hitlist"].
Add [non] <tautomers | graphs> of "smiles" [to "hitlist"].
Remove [non] <tautomers | graphs> of "smiles" [from "hitlist"].
Select tautomers or graphs of a given molecule. A "graph" match
discounts oxidation state completely, i.e., the molecules' heavy
atoms are connected in the same way (ignoring hydrogens, bond orders,
and charges). A "tautomer" match requires a graph match and the net
charge and hydrogen count much match, i.e., molecules which differ
only in positions of H's (protons) and electrons. (Labile hydrogens
are not distinguished from non-labile ones.)
Note: to do these searches, a column of type $SMI (SMILES) must
exist and the Thor database must have a $SMI datatype with AUTOGRAPH
normalization (this is true for default Thor databases).
-
Put "column" strings containing[/cmp] "string" [into "hitlist"].
Add "column" strings [not] containing[/cmp] "string" [to "hitlist"].
Remove "column" strings [not] containing[/cmp] "string" [from "hitlist"].
Move to "column" string [not] containing[/cmp] "string" [in "hitlist"].
where cmp is one of:
/ASC ... ASCII (default) /ANCW ... ignore case and w/s
/ANC ... ignore case /ANCP ... ignand case or punct
/ANW ... ignore whitespace /ANPW ... ignore punct and w/s
/ANP ... ignore punctuation /ANCPW .. ignore case, punct, and w/s
Select (or find) strings containing a given substring. Various character
classes can be ignored by appending an option to the keyword "containing".
For instance, the statement:
Put "NAME" strings containing/ANCPW "METHYLPYRROLE" into "curhits".
does comparisons ignoring case, punctuation, and whitespace (spaces, tabs,
and newlines), i.e., makes a hitlist of entries with names containing the
substrings "Methyl Pyrrole", "methyl-pyrrole", "methylpyrrole", etc.
-
Put "column" strings matching "regexp" [into "hitlist"].
Add "column" strings [not] matching "regexp" [to "hitlist"].
Remove "column" strings [not] matching "regexp" [from "hitlist"].
Move to "column" string [not] matching "regexp" [in "hitlist"].
Select (or find) strings matching a regular expression.
-
Put "column" values in range "min" to "max" [into "hitlist"].
Add "column" values [not] in range "min" to "max" [to "hitlist"].
Remove "column" values [not] in range "min" to "max" [from "hitlist"].
Move to "column" value [not] in range "min" to "max" [in "hitlist"].
Select (or find) values by range specification.
-
Sort[/cmp] "hitlist" by "column".
where cmp is one of:
/ASC ..... ASCII /ANCPW ... ignore case, punct and w/s
/ANC ..... ignore case /AAZ ..... letters only, ignore case
/NUM ..... numeric /ANP ..... ignore punctuation
/NAB ..... absolute numeric /ANW ..... ignore whitespace
/CAS ..... CAS Number compare /ANCP .... ignore case and punct
/ANCW .... ignore case and w/s /MF ...... molecular formula
/ANPW .... ignore punct and w/s /LEN ..... length of string
Sort hitlist by value of given column. If cmp is not specified, the
"normal" comparison type for the column's datatype will be used.
-
Sort ["hitlist"] by nativeorder.
Rearrange the given hitlist to original pool order.
-
Sort ["hitlist"] by similarity ["column"] [to "smiles"].
Sort hitlist by Tanimoto similarity to given "smiles", saving
similarity values in similarity column "column", if specified.
If "column" is omitted, the default similarity column will be used.
If "smiles" is omitted, existing values in the column will be used.
This produces a descending sort in similarity, i.e., the most similar
structures (high similarity values) sort to the top of the list.
-
Set font "fontname".
Set lines per row to "lpr".
Display smiles as <text | depiction>.
Special functions for interactive environments such as xvmerlin.
"fontname" must as specified in a FONT_ options (or "default").
"lpr" (lines per row) must be in the range 1-8.
Note: These statements are disabled in non-interactive environments
such as the `mcl' program (they do nothing, successfully).
-
Print status.
Print the status of the current environment: name the database,
name all columns and show their datatypes, name all hitlists and
show their length, indicate which hitlist is default and report
the current hitlist position.
-
Print "string" ["string" ...]
Print string literally, followed by newline. If more than one string
is supplied they are concatenated then output. Special characters such
as newline and bell are copied to output literally. There is no way to
print the NULL character to output.
-
Print <list | table> [of "hitlist"] from row "integer" to row "integer"
   [ containing "column" ["column" ...] ]
   [ entitled "string" ["string" ...] ]
where integer row values are interpreted as:
unsigned number .... absolute row number (1 is first row)
zero ............... current row
signed number ...... number relative to current row
If the `containing ...' phrase is specified, only those columns will be
printed; if omitted, all columns will be printed.
If the `entitled ...' phrase is specified, the following strings will be
printed as a title; if omitted, no title will be printed.
For example, the statement:
Print table of curhits from row 1 to row 100 containing "SMILES" "Name"
entitled "Table 1. The first 100 entries in this hitlist.".
produces a 2-column table of the first 100 rows in the hitlist "curhits".
If the hitlist is shorter than 100, the table will be truncated.
Print list from row -10 to row +10.
prints data from all columns in the default hitlist for the current
position and 10 rows of context above and below (truncated as needed).
-
Write ["hitlist"] to file "filename".
Save the hitlist to the given file as root ID's in TDT format.
Such files are typically given the suffix ".hits" and used for
later restoration with the MCL "Read" statement.
If the given file already exists and is writable, it is overwritten.
If the given file is not writable,
an error message is generated and MCL execution continues.
If the filename is "STDOUT", standard output is using instead of a file.
-
Read ["hitlist"] from file "filename".
Restore the hitlist from the given file,
typically one previously generated by an MCL "Write" statement.
Root ID's in the input file must match those in the database exactly.
This is the case if the file was generated via the "Write" statement.
If generated from another source, one must insure that all ID's are
normalized, e.g., case must match, SMILES must be uniquified, etc.
If the given file does not exist or is not readable,
an error message is generated and MCL execution continues.
If the filename is "STDIN", standard input is used instead of a file.
9. Changes in this Release
Changes for Release 4.95:
- Abillity to take fingerprint instead of smiles for Tanimoto
and Tversky searches.
Changes for Release 4.51:
- Tversky similarity added.
Changes for Release 4.42:
- Implemented hitlist save ("Write") and restore ("Read").
- Read, Write, and file become reserved keywords.
- HTML output option added to MCL processor (mcl -h).
- Password specifications are allowed in database names.
10. Index
- Column:
- Data:
- Database:
- Hitlist:
- Printing:
- Row:
- Range searching
- Sorting:
- String searching:
- Structure searching:
|